1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108 |
- document.createElement('video');
- document.createElement('audio');
- document.createElement('track');
- var vjs = function(id, options, ready){
- var tag;
-
-
- if (typeof id === 'string') {
-
- if (id.indexOf('#') === 0) {
- id = id.slice(1);
- }
-
- if (vjs.players[id]) {
- return vjs.players[id];
-
- } else {
- tag = vjs.el(id);
- }
-
- } else {
- tag = id;
- }
-
- if (!tag || !tag.nodeName) {
- throw new TypeError('The element or ID supplied is not valid. (videojs)');
- }
-
-
- return tag['player'] || new vjs.Player(tag, options, ready);
- };
- var videojs = vjs;
- window.videojs = window.vjs = vjs;
- vjs.CDN_VERSION = '4.3';
- vjs.ACCESS_PROTOCOL = ('https:' == document.location.protocol ? 'https://' : 'http://');
- vjs.options = {
-
- 'techOrder': ['html5','flash'],
-
- 'html5': {},
- 'flash': {},
-
- 'width': 300,
- 'height': 150,
-
- 'defaultVolume': 0.00,
-
- 'children': {
- 'mediaLoader': {},
- 'posterImage': {},
- 'textTrackDisplay': {},
- 'loadingSpinner': {},
- 'bigPlayButton': {},
- 'controlBar': {}
- },
-
- 'notSupportedMessage': 'Sorry, no compatible source and playback ' +
- 'technology were found for this video. Try using another browser ' +
- 'like <a href="http://bit.ly/ccMUEC">Chrome</a> or download the ' +
- 'latest <a href="http://adobe.ly/mwfN1">Adobe Flash Player</a>.'
- };
- if (vjs.CDN_VERSION !== 'GENERATED'+'_CDN_VSN') {
- videojs.options['flash']['swf'] = vjs.ACCESS_PROTOCOL + 'vjs.zencdn.net/'+vjs.CDN_VERSION+'/video-js.swf';
- }
- vjs.players = {};
- vjs.CoreObject = vjs['CoreObject'] = function(){};
- vjs.CoreObject.extend = function(props){
- var init, subObj;
- props = props || {};
-
-
-
- init = props['init'] || props.init || this.prototype['init'] || this.prototype.init || function(){};
-
-
-
-
-
-
-
-
-
- subObj = function(){
- init.apply(this, arguments);
- };
-
- subObj.prototype = vjs.obj.create(this.prototype);
-
-
- subObj.prototype.constructor = subObj;
-
- subObj.extend = vjs.CoreObject.extend;
-
- subObj.create = vjs.CoreObject.create;
-
- for (var name in props) {
- if (props.hasOwnProperty(name)) {
- subObj.prototype[name] = props[name];
- }
- }
- return subObj;
- };
- vjs.CoreObject.create = function(){
-
- var inst = vjs.obj.create(this.prototype);
-
- this.apply(inst, arguments);
-
- return inst;
- };
- vjs.on = function(elem, type, fn){
- var data = vjs.getData(elem);
-
- if (!data.handlers) data.handlers = {};
- if (!data.handlers[type]) data.handlers[type] = [];
- if (!fn.guid) fn.guid = vjs.guid++;
- data.handlers[type].push(fn);
- if (!data.dispatcher) {
- data.disabled = false;
- data.dispatcher = function (event){
- if (data.disabled) return;
- event = vjs.fixEvent(event);
- var handlers = data.handlers[event.type];
- if (handlers) {
-
- var handlersCopy = handlers.slice(0);
- for (var m = 0, n = handlersCopy.length; m < n; m++) {
- if (event.isImmediatePropagationStopped()) {
- break;
- } else {
- handlersCopy[m].call(elem, event);
- }
- }
- }
- };
- }
- if (data.handlers[type].length == 1) {
- if (document.addEventListener) {
- elem.addEventListener(type, data.dispatcher, false);
- } else if (document.attachEvent) {
- elem.attachEvent('on' + type, data.dispatcher);
- }
- }
- };
- vjs.off = function(elem, type, fn) {
-
- if (!vjs.hasData(elem)) return;
- var data = vjs.getData(elem);
-
- if (!data.handlers) { return; }
-
- var removeType = function(t){
- data.handlers[t] = [];
- vjs.cleanUpEvents(elem,t);
- };
-
- if (!type) {
- for (var t in data.handlers) removeType(t);
- return;
- }
- var handlers = data.handlers[type];
-
- if (!handlers) return;
-
- if (!fn) {
- removeType(type);
- return;
- }
-
- if (fn.guid) {
- for (var n = 0; n < handlers.length; n++) {
- if (handlers[n].guid === fn.guid) {
- handlers.splice(n--, 1);
- }
- }
- }
- vjs.cleanUpEvents(elem, type);
- };
- vjs.cleanUpEvents = function(elem, type) {
- var data = vjs.getData(elem);
-
- if (data.handlers[type].length === 0) {
- delete data.handlers[type];
-
-
-
- if (document.removeEventListener) {
- elem.removeEventListener(type, data.dispatcher, false);
- } else if (document.detachEvent) {
- elem.detachEvent('on' + type, data.dispatcher);
- }
- }
-
- if (vjs.isEmpty(data.handlers)) {
- delete data.handlers;
- delete data.dispatcher;
- delete data.disabled;
-
-
-
- }
-
- if (vjs.isEmpty(data)) {
- vjs.removeData(elem);
- }
- };
- vjs.fixEvent = function(event) {
- function returnTrue() { return true; }
- function returnFalse() { return false; }
-
-
-
-
-
- if (!event || !event.isPropagationStopped) {
- var old = event || window.event;
- event = {};
-
-
-
-
-
- for (var key in old) {
-
- if (key !== 'layerX' && key !== 'layerY') {
- event[key] = old[key];
- }
- }
-
- if (!event.target) {
- event.target = event.srcElement || document;
- }
-
- event.relatedTarget = event.fromElement === event.target ?
- event.toElement :
- event.fromElement;
-
- event.preventDefault = function () {
- if (old.preventDefault) {
- old.preventDefault();
- }
- event.returnValue = false;
- event.isDefaultPrevented = returnTrue;
- };
- event.isDefaultPrevented = returnFalse;
-
- event.stopPropagation = function () {
- if (old.stopPropagation) {
- old.stopPropagation();
- }
- event.cancelBubble = true;
- event.isPropagationStopped = returnTrue;
- };
- event.isPropagationStopped = returnFalse;
-
- event.stopImmediatePropagation = function () {
- if (old.stopImmediatePropagation) {
- old.stopImmediatePropagation();
- }
- event.isImmediatePropagationStopped = returnTrue;
- event.stopPropagation();
- };
- event.isImmediatePropagationStopped = returnFalse;
-
- if (event.clientX != null) {
- var doc = document.documentElement, body = document.body;
- event.pageX = event.clientX +
- (doc && doc.scrollLeft || body && body.scrollLeft || 0) -
- (doc && doc.clientLeft || body && body.clientLeft || 0);
- event.pageY = event.clientY +
- (doc && doc.scrollTop || body && body.scrollTop || 0) -
- (doc && doc.clientTop || body && body.clientTop || 0);
- }
-
- event.which = event.charCode || event.keyCode;
-
-
- if (event.button != null) {
- event.button = (event.button & 1 ? 0 :
- (event.button & 4 ? 1 :
- (event.button & 2 ? 2 : 0)));
- }
- }
-
- return event;
- };
- vjs.trigger = function(elem, event) {
-
-
-
- var elemData = (vjs.hasData(elem)) ? vjs.getData(elem) : {};
- var parent = elem.parentNode || elem.ownerDocument;
-
-
-
- if (typeof event === 'string') {
- event = { type:event, target:elem };
- }
-
- event = vjs.fixEvent(event);
-
- if (elemData.dispatcher) {
- elemData.dispatcher.call(elem, event);
- }
-
-
- if (parent && !event.isPropagationStopped() && event.bubbles !== false) {
- vjs.trigger(parent, event);
-
- } else if (!parent && !event.isDefaultPrevented()) {
- var targetData = vjs.getData(event.target);
-
- if (event.target[event.type]) {
-
- targetData.disabled = true;
-
- if (typeof event.target[event.type] === 'function') {
- event.target[event.type]();
- }
-
- targetData.disabled = false;
- }
- }
-
- return !event.isDefaultPrevented();
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- };
- vjs.one = function(elem, type, fn) {
- var func = function(){
- vjs.off(elem, type, func);
- fn.apply(this, arguments);
- };
- func.guid = fn.guid = fn.guid || vjs.guid++;
- vjs.on(elem, type, func);
- };
- var hasOwnProp = Object.prototype.hasOwnProperty;
- vjs.createEl = function(tagName, properties){
- var el, propName;
- el = document.createElement(tagName || 'div');
- for (propName in properties){
- if (hasOwnProp.call(properties, propName)) {
-
-
-
-
-
-
-
-
- if (propName.indexOf('aria-') !== -1 || propName=='role') {
- el.setAttribute(propName, properties[propName]);
- } else {
- el[propName] = properties[propName];
- }
- }
- }
- return el;
- };
- vjs.capitalize = function(string){
- return string.charAt(0).toUpperCase() + string.slice(1);
- };
- vjs.obj = {};
- vjs.obj.create = Object.create || function(obj){
-
- function F() {}
-
-
- F.prototype = obj;
-
- return new F();
- };
- vjs.obj.each = function(obj, fn, context){
- for (var key in obj) {
- if (hasOwnProp.call(obj, key)) {
- fn.call(context || this, key, obj[key]);
- }
- }
- };
- vjs.obj.merge = function(obj1, obj2){
- if (!obj2) { return obj1; }
- for (var key in obj2){
- if (hasOwnProp.call(obj2, key)) {
- obj1[key] = obj2[key];
- }
- }
- return obj1;
- };
- vjs.obj.deepMerge = function(obj1, obj2){
- var key, val1, val2;
-
-
- obj1 = vjs.obj.copy(obj1);
- for (key in obj2){
- if (hasOwnProp.call(obj2, key)) {
- val1 = obj1[key];
- val2 = obj2[key];
-
- if (vjs.obj.isPlain(val1) && vjs.obj.isPlain(val2)) {
- obj1[key] = vjs.obj.deepMerge(val1, val2);
- } else {
- obj1[key] = obj2[key];
- }
- }
- }
- return obj1;
- };
- vjs.obj.copy = function(obj){
- return vjs.obj.merge({}, obj);
- };
- vjs.obj.isPlain = function(obj){
- return !!obj
- && typeof obj === 'object'
- && obj.toString() === '[object Object]'
- && obj.constructor === Object;
- };
- vjs.bind = function(context, fn, uid) {
-
- if (!fn.guid) { fn.guid = vjs.guid++; }
-
- var ret = function() {
- return fn.apply(context, arguments);
- };
-
-
-
-
-
-
- ret.guid = (uid) ? uid + '_' + fn.guid : fn.guid;
- return ret;
- };
- vjs.cache = {};
- vjs.guid = 1;
- vjs.expando = 'vdata' + (new Date()).getTime();
- vjs.getData = function(el){
- var id = el[vjs.expando];
- if (!id) {
- id = el[vjs.expando] = vjs.guid++;
- vjs.cache[id] = {};
- }
- return vjs.cache[id];
- };
- vjs.hasData = function(el){
- var id = el[vjs.expando];
- return !(!id || vjs.isEmpty(vjs.cache[id]));
- };
- vjs.removeData = function(el){
- var id = el[vjs.expando];
- if (!id) { return; }
-
-
-
-
- delete vjs.cache[id];
-
- try {
- delete el[vjs.expando];
- } catch(e) {
- if (el.removeAttribute) {
- el.removeAttribute(vjs.expando);
- } else {
-
- el[vjs.expando] = null;
- }
- }
- };
- vjs.isEmpty = function(obj) {
- for (var prop in obj) {
-
- if (obj[prop] !== null) {
- return false;
- }
- }
- return true;
- };
- vjs.addClass = function(element, classToAdd){
- if ((' '+element.className+' ').indexOf(' '+classToAdd+' ') == -1) {
- element.className = element.className === '' ? classToAdd : element.className + ' ' + classToAdd;
- }
- };
- vjs.removeClass = function(element, classToRemove){
- var classNames, i;
- if (element.className.indexOf(classToRemove) == -1) { return; }
- classNames = element.className.split(' ');
-
- for (i = classNames.length - 1; i >= 0; i--) {
- if (classNames[i] === classToRemove) {
- classNames.splice(i,1);
- }
- }
- element.className = classNames.join(' ');
- };
- vjs.TEST_VID = vjs.createEl('video');
- vjs.USER_AGENT = navigator.userAgent;
- vjs.IS_IPHONE = (/iPhone/i).test(vjs.USER_AGENT);
- vjs.IS_IPAD = (/iPad/i).test(vjs.USER_AGENT);
- vjs.IS_IPOD = (/iPod/i).test(vjs.USER_AGENT);
- vjs.IS_IOS = vjs.IS_IPHONE || vjs.IS_IPAD || vjs.IS_IPOD;
- vjs.IOS_VERSION = (function(){
- var match = vjs.USER_AGENT.match(/OS (\d+)_/i);
- if (match && match[1]) { return match[1]; }
- })();
- vjs.IS_ANDROID = (/Android/i).test(vjs.USER_AGENT);
- vjs.ANDROID_VERSION = (function() {
-
-
- var match = vjs.USER_AGENT.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i),
- major,
- minor;
- if (!match) {
- return null;
- }
- major = match[1] && parseFloat(match[1]);
- minor = match[2] && parseFloat(match[2]);
- if (major && minor) {
- return parseFloat(match[1] + '.' + match[2]);
- } else if (major) {
- return major;
- } else {
- return null;
- }
- })();
- vjs.IS_OLD_ANDROID = vjs.IS_ANDROID && (/webkit/i).test(vjs.USER_AGENT) && vjs.ANDROID_VERSION < 2.3;
- vjs.IS_FIREFOX = (/Firefox/i).test(vjs.USER_AGENT);
- vjs.IS_CHROME = (/Chrome/i).test(vjs.USER_AGENT);
- vjs.TOUCH_ENABLED = !!(('ontouchstart' in window) || window.DocumentTouch && document instanceof window.DocumentTouch);
- vjs.getAttributeValues = function(tag){
- var obj, knownBooleans, attrs, attrName, attrVal;
- obj = {};
-
-
-
- knownBooleans = ','+'autoplay,controls,loop,muted,default'+',';
- if (tag && tag.attributes && tag.attributes.length > 0) {
- attrs = tag.attributes;
- for (var i = attrs.length - 1; i >= 0; i--) {
- attrName = attrs[i].name;
- attrVal = attrs[i].value;
-
-
- if (typeof tag[attrName] === 'boolean' || knownBooleans.indexOf(','+attrName+',') !== -1) {
-
-
-
- attrVal = (attrVal !== null) ? true : false;
- }
- obj[attrName] = attrVal;
- }
- }
- return obj;
- };
- vjs.getComputedDimension = function(el, strCssRule){
- var strValue = '';
- if(document.defaultView && document.defaultView.getComputedStyle){
- strValue = document.defaultView.getComputedStyle(el, '').getPropertyValue(strCssRule);
- } else if(el.currentStyle){
-
- strValue = el['client'+strCssRule.substr(0,1).toUpperCase() + strCssRule.substr(1)] + 'px';
- }
- return strValue;
- };
- vjs.insertFirst = function(child, parent){
- if (parent.firstChild) {
- parent.insertBefore(child, parent.firstChild);
- } else {
- parent.appendChild(child);
- }
- };
- vjs.support = {};
- vjs.el = function(id){
- if (id.indexOf('#') === 0) {
- id = id.slice(1);
- }
- return document.getElementById(id);
- };
- vjs.formatTime = function(seconds, guide) {
-
- guide = guide || seconds;
- var s = Math.floor(seconds % 60),
- m = Math.floor(seconds / 60 % 60),
- h = Math.floor(seconds / 3600),
- gm = Math.floor(guide / 60 % 60),
- gh = Math.floor(guide / 3600);
-
- if (isNaN(seconds) || seconds === Infinity) {
-
-
- h = m = s = '-';
- }
-
- h = (h > 0 || gh > 0) ? h + ':' : '';
-
-
- m = (((h || gm >= 10) && m < 10) ? '0' + m : m) + ':';
-
- s = (s < 10) ? '0' + s : s;
- return h + m + s;
- };
- vjs.blockTextSelection = function(){
- document.body.focus();
- document.onselectstart = function () { return false; };
- };
- vjs.unblockTextSelection = function(){ document.onselectstart = function () { return true; }; };
- vjs.trim = function(str){
- return (str+'').replace(/^\s+|\s+$/g, '');
- };
- vjs.round = function(num, dec) {
- if (!dec) { dec = 0; }
- return Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);
- };
- vjs.createTimeRange = function(start, end){
- return {
- length: 1,
- start: function() { return start; },
- end: function() { return end; }
- };
- };
- vjs.get = function(url, onSuccess, onError){
- var local, request;
- if (typeof XMLHttpRequest === 'undefined') {
- window.XMLHttpRequest = function () {
- try { return new window.ActiveXObject('Msxml2.XMLHTTP.6.0'); } catch (e) {}
- try { return new window.ActiveXObject('Msxml2.XMLHTTP.3.0'); } catch (f) {}
- try { return new window.ActiveXObject('Msxml2.XMLHTTP'); } catch (g) {}
- throw new Error('This browser does not support XMLHttpRequest.');
- };
- }
- request = new XMLHttpRequest();
- try {
- request.open('GET', url);
- } catch(e) {
- onError(e);
- }
- local = (url.indexOf('file:') === 0 || (window.location.href.indexOf('file:') === 0 && url.indexOf('http') === -1));
- request.onreadystatechange = function() {
- if (request.readyState === 4) {
- if (request.status === 200 || local && request.status === 0) {
- onSuccess(request.responseText);
- } else {
- if (onError) {
- onError();
- }
- }
- }
- };
- try {
- request.send();
- } catch(e) {
- if (onError) {
- onError(e);
- }
- }
- };
- vjs.setLocalStorage = function(key, value){
- try {
-
- var localStorage = window.localStorage || false;
- if (!localStorage) { return; }
- localStorage[key] = value;
- } catch(e) {
- if (e.code == 22 || e.code == 1014) {
- vjs.log('LocalStorage Full (VideoJS)', e);
- } else {
- if (e.code == 18) {
- vjs.log('LocalStorage not allowed (VideoJS)', e);
- } else {
- vjs.log('LocalStorage Error (VideoJS)', e);
- }
- }
- }
- };
- vjs.getAbsoluteURL = function(url){
-
- if (!url.match(/^https?:\/\//)) {
-
- url = vjs.createEl('div', {
- innerHTML: '<a href="'+url+'">x</a>'
- }).firstChild.href;
- }
- return url;
- };
- vjs.log = function(){
- vjs.log.history = vjs.log.history || [];
- vjs.log.history.push(arguments);
- if(window.console){
- window.console.log(Array.prototype.slice.call(arguments));
- }
- };
- vjs.findPosition = function(el) {
- var box, docEl, body, clientLeft, scrollLeft, left, clientTop, scrollTop, top;
- if (el.getBoundingClientRect && el.parentNode) {
- box = el.getBoundingClientRect();
- }
- if (!box) {
- return {
- left: 0,
- top: 0
- };
- }
- docEl = document.documentElement;
- body = document.body;
- clientLeft = docEl.clientLeft || body.clientLeft || 0;
- scrollLeft = window.pageXOffset || body.scrollLeft;
- left = box.left + scrollLeft - clientLeft;
- clientTop = docEl.clientTop || body.clientTop || 0;
- scrollTop = window.pageYOffset || body.scrollTop;
- top = box.top + scrollTop - clientTop;
- return {
- left: left,
- top: top
- };
- };
- vjs.Component = vjs.CoreObject.extend({
-
- init: function(player, options, ready){
- this.player_ = player;
-
- this.options_ = vjs.obj.copy(this.options_);
-
- options = this.options(options);
-
- this.id_ = options['id'] || ((options['el'] && options['el']['id']) ? options['el']['id'] : player.id() + '_component_' + vjs.guid++ );
- this.name_ = options['name'] || null;
-
- this.el_ = options['el'] || this.createEl();
- this.children_ = [];
- this.childIndex_ = {};
- this.childNameIndex_ = {};
-
- this.initChildren();
- this.ready(ready);
-
-
- }
- });
- vjs.Component.prototype.dispose = function(){
- this.trigger('dispose');
-
- if (this.children_) {
- for (var i = this.children_.length - 1; i >= 0; i--) {
- if (this.children_[i].dispose) {
- this.children_[i].dispose();
- }
- }
- }
-
- this.children_ = null;
- this.childIndex_ = null;
- this.childNameIndex_ = null;
-
- this.off();
-
- if (this.el_.parentNode) {
- this.el_.parentNode.removeChild(this.el_);
- }
- vjs.removeData(this.el_);
- this.el_ = null;
- };
- vjs.Component.prototype.player_ = true;
- vjs.Component.prototype.player = function(){
- return this.player_;
- };
- vjs.Component.prototype.options_;
- vjs.Component.prototype.options = function(obj){
- if (obj === undefined) return this.options_;
- return this.options_ = vjs.obj.deepMerge(this.options_, obj);
- };
- vjs.Component.prototype.el_;
- vjs.Component.prototype.createEl = function(tagName, attributes){
- return vjs.createEl(tagName, attributes);
- };
- vjs.Component.prototype.el = function(){
- return this.el_;
- };
- vjs.Component.prototype.contentEl_;
- vjs.Component.prototype.contentEl = function(){
- return this.contentEl_ || this.el_;
- };
- vjs.Component.prototype.id_;
- vjs.Component.prototype.id = function(){
- return this.id_;
- };
- vjs.Component.prototype.name_;
- vjs.Component.prototype.name = function(){
- return this.name_;
- };
- vjs.Component.prototype.children_;
- vjs.Component.prototype.children = function(){
- return this.children_;
- };
- vjs.Component.prototype.childIndex_;
- vjs.Component.prototype.getChildById = function(id){
- return this.childIndex_[id];
- };
- vjs.Component.prototype.childNameIndex_;
- vjs.Component.prototype.getChild = function(name){
- return this.childNameIndex_[name];
- };
- vjs.Component.prototype.addChild = function(child, options){
- var component, componentClass, componentName, componentId;
-
- if (typeof child === 'string') {
- componentName = child;
-
- options = options || {};
-
- componentClass = options['componentClass'] || vjs.capitalize(componentName);
-
- options['name'] = componentName;
-
-
-
-
- component = new window['videojs'][componentClass](this.player_ || this, options);
-
- } else {
- component = child;
- }
- this.children_.push(component);
- if (typeof component.id === 'function') {
- this.childIndex_[component.id()] = component;
- }
-
-
- componentName = componentName || (component.name && component.name());
- if (componentName) {
- this.childNameIndex_[componentName] = component;
- }
-
-
- if (typeof component['el'] === 'function' && component['el']()) {
- this.contentEl().appendChild(component['el']());
- }
-
- return component;
- };
- vjs.Component.prototype.removeChild = function(component){
- if (typeof component === 'string') {
- component = this.getChild(component);
- }
- if (!component || !this.children_) return;
- var childFound = false;
- for (var i = this.children_.length - 1; i >= 0; i--) {
- if (this.children_[i] === component) {
- childFound = true;
- this.children_.splice(i,1);
- break;
- }
- }
- if (!childFound) return;
- this.childIndex_[component.id] = null;
- this.childNameIndex_[component.name] = null;
- var compEl = component.el();
- if (compEl && compEl.parentNode === this.contentEl()) {
- this.contentEl().removeChild(component.el());
- }
- };
- vjs.Component.prototype.initChildren = function(){
- var options = this.options_;
- if (options && options['children']) {
- var self = this;
-
- vjs.obj.each(options['children'], function(name, opts){
-
-
- if (opts === false) return;
-
- var tempAdd = function(){
-
- self[name] = self.addChild(name, opts);
- };
- if (opts['loadEvent']) {
-
- } else {
- tempAdd();
- }
- });
- }
- };
- vjs.Component.prototype.buildCSSClass = function(){
-
-
- return '';
- };
- vjs.Component.prototype.on = function(type, fn){
- vjs.on(this.el_, type, vjs.bind(this, fn));
- return this;
- };
- vjs.Component.prototype.off = function(type, fn){
- vjs.off(this.el_, type, fn);
- return this;
- };
- vjs.Component.prototype.one = function(type, fn) {
- vjs.one(this.el_, type, vjs.bind(this, fn));
- return this;
- };
- vjs.Component.prototype.trigger = function(type, event){
- vjs.trigger(this.el_, type, event);
- return this;
- };
- vjs.Component.prototype.isReady_;
- vjs.Component.prototype.isReadyOnInitFinish_ = true;
- vjs.Component.prototype.readyQueue_;
- vjs.Component.prototype.ready = function(fn){
- if (fn) {
- if (this.isReady_) {
- fn.call(this);
- } else {
- if (this.readyQueue_ === undefined) {
- this.readyQueue_ = [];
- }
- this.readyQueue_.push(fn);
- }
- }
- return this;
- };
- vjs.Component.prototype.triggerReady = function(){
- this.isReady_ = true;
- var readyQueue = this.readyQueue_;
- if (readyQueue && readyQueue.length > 0) {
- for (var i = 0, j = readyQueue.length; i < j; i++) {
- readyQueue[i].call(this);
- }
-
- this.readyQueue_ = [];
-
- this.trigger('ready');
- }
- };
- vjs.Component.prototype.addClass = function(classToAdd){
- vjs.addClass(this.el_, classToAdd);
- return this;
- };
- vjs.Component.prototype.removeClass = function(classToRemove){
- vjs.removeClass(this.el_, classToRemove);
- return this;
- };
- vjs.Component.prototype.show = function(){
- this.el_.style.display = 'block';
- return this;
- };
- vjs.Component.prototype.hide = function(){
- this.el_.style.display = 'none';
- return this;
- };
- vjs.Component.prototype.lockShowing = function(){
- this.addClass('vjs-lock-showing');
- return this;
- };
- vjs.Component.prototype.unlockShowing = function(){
- this.removeClass('vjs-lock-showing');
- return this;
- };
- vjs.Component.prototype.disable = function(){
- this.hide();
- this.show = function(){};
- };
- vjs.Component.prototype.width = function(num, skipListeners){
- return this.dimension('width', num, skipListeners);
- };
- vjs.Component.prototype.height = function(num, skipListeners){
- return this.dimension('height', num, skipListeners);
- };
- vjs.Component.prototype.dimensions = function(width, height){
-
- return this.width(width, true).height(height);
- };
- vjs.Component.prototype.dimension = function(widthOrHeight, num, skipListeners){
- if (num !== undefined) {
-
- if ((''+num).indexOf('%') !== -1 || (''+num).indexOf('px') !== -1) {
- this.el_.style[widthOrHeight] = num;
- } else if (num === 'auto') {
- this.el_.style[widthOrHeight] = '';
- } else {
- this.el_.style[widthOrHeight] = num+'px';
- }
-
- if (!skipListeners) { this.trigger('resize'); }
-
- return this;
- }
-
-
- if (!this.el_) return 0;
-
- var val = this.el_.style[widthOrHeight];
- var pxIndex = val.indexOf('px');
- if (pxIndex !== -1) {
-
- return parseInt(val.slice(0,pxIndex), 10);
-
-
-
- } else {
- return parseInt(this.el_['offset'+vjs.capitalize(widthOrHeight)], 10);
-
-
-
-
-
-
-
-
-
-
-
- }
- };
- vjs.Component.prototype.onResize;
- vjs.Component.prototype.emitTapEvents = function(){
- var touchStart, touchTime, couldBeTap, noTap;
-
- touchStart = 0;
- this.on('touchstart', function(event) {
-
- touchStart = new Date().getTime();
-
- couldBeTap = true;
- });
- noTap = function(){
- couldBeTap = false;
- };
-
- this.on('touchmove', noTap);
- this.on('touchleave', noTap);
- this.on('touchcancel', noTap);
-
-
- this.on('touchend', function() {
-
- if (couldBeTap === true) {
-
- touchTime = new Date().getTime() - touchStart;
-
- if (touchTime < 250) {
- this.trigger('tap');
-
-
-
- }
- }
- });
- };
- vjs.Button = vjs.Component.extend({
-
- init: function(player, options){
- vjs.Component.call(this, player, options);
- var touchstart = false;
- this.on('touchstart', function(event) {
-
- event.preventDefault();
- touchstart = true;
- });
- this.on('touchmove', function() {
- touchstart = false;
- });
- var self = this;
- this.on('touchend', function(event) {
- if (touchstart) {
- self.onClick(event);
- }
- event.preventDefault();
- });
- this.on('click', this.onClick);
- this.on('focus', this.onFocus);
- this.on('blur', this.onBlur);
- }
- });
- vjs.Button.prototype.createEl = function(type, props){
-
- props = vjs.obj.merge({
- className: this.buildCSSClass(),
- innerHTML: '<div class="vjs-control-content"><span class="vjs-control-text">' + (this.buttonText || 'Need Text') + '</span></div>',
- role: 'button',
- 'aria-live': 'polite',
- tabIndex: 0
- }, props);
- return vjs.Component.prototype.createEl.call(this, type, props);
- };
- vjs.Button.prototype.buildCSSClass = function(){
-
- return 'vjs-control ' + vjs.Component.prototype.buildCSSClass.call(this);
- };
-
- vjs.Button.prototype.onClick = function(){};
-
- vjs.Button.prototype.onFocus = function(){
- vjs.on(document, 'keyup', vjs.bind(this, this.onKeyPress));
- };
-
- vjs.Button.prototype.onKeyPress = function(event){
-
- if (event.which == 32 || event.which == 13) {
- event.preventDefault();
- this.onClick();
- }
- };
- vjs.Button.prototype.onBlur = function(){
- vjs.off(document, 'keyup', vjs.bind(this, this.onKeyPress));
- };
- vjs.Slider = vjs.Component.extend({
-
- init: function(player, options){
- vjs.Component.call(this, player, options);
-
- this.bar = this.getChild(this.options_['barName']);
- this.handle = this.getChild(this.options_['handleName']);
- player.on(this.playerEvent, vjs.bind(this, this.update));
- this.on('mousedown', this.onMouseDown);
- this.on('touchstart', this.onMouseDown);
- this.on('focus', this.onFocus);
- this.on('blur', this.onBlur);
- this.on('click', this.onClick);
- this.player_.on('controlsvisible', vjs.bind(this, this.update));
-
-
- player.ready(vjs.bind(this, this.update));
- this.boundEvents = {};
- }
- });
- vjs.Slider.prototype.createEl = function(type, props) {
- props = props || {};
-
- props.className = props.className + ' vjs-slider';
- props = vjs.obj.merge({
- role: 'slider',
- 'aria-valuenow': 0,
- 'aria-valuemin': 0,
- 'aria-valuemax': 100,
- tabIndex: 0
- }, props);
- return vjs.Component.prototype.createEl.call(this, type, props);
- };
- vjs.Slider.prototype.onMouseDown = function(event){
- event.preventDefault();
- vjs.blockTextSelection();
- this.boundEvents.move = vjs.bind(this, this.onMouseMove);
- this.boundEvents.end = vjs.bind(this, this.onMouseUp);
- vjs.on(document, 'mousemove', this.boundEvents.move);
- vjs.on(document, 'mouseup', this.boundEvents.end);
- vjs.on(document, 'touchmove', this.boundEvents.move);
- vjs.on(document, 'touchend', this.boundEvents.end);
- this.onMouseMove(event);
- };
- vjs.Slider.prototype.onMouseUp = function() {
- vjs.unblockTextSelection();
- vjs.off(document, 'mousemove', this.boundEvents.move, false);
- vjs.off(document, 'mouseup', this.boundEvents.end, false);
- vjs.off(document, 'touchmove', this.boundEvents.move, false);
- vjs.off(document, 'touchend', this.boundEvents.end, false);
- this.update();
- };
- vjs.Slider.prototype.update = function(){
-
-
- if (!this.el_) return;
-
-
-
- var barProgress,
- progress = this.getPercent(),
- handle = this.handle,
- bar = this.bar;
-
- if (isNaN(progress)) { progress = 0; }
- barProgress = progress;
-
-
- if (handle) {
- var box = this.el_,
- boxWidth = box.offsetWidth,
- handleWidth = handle.el().offsetWidth,
-
-
- handlePercent = (handleWidth) ? handleWidth / boxWidth : 0,
-
-
- boxAdjustedPercent = 1 - handlePercent,
-
- adjustedProgress = progress * boxAdjustedPercent;
-
- barProgress = adjustedProgress + (handlePercent / 2);
-
- handle.el().style.left = vjs.round(adjustedProgress * 100, 2) + '%';
- }
-
- bar.el().style.width = vjs.round(barProgress * 100, 2) + '%';
- };
- vjs.Slider.prototype.calculateDistance = function(event){
- var el, box, boxX, boxY, boxW, boxH, handle, pageX, pageY;
- el = this.el_;
- box = vjs.findPosition(el);
- boxW = boxH = el.offsetWidth;
- handle = this.handle;
- if (this.options_.vertical) {
- boxY = box.top;
- if (event.changedTouches) {
- pageY = event.changedTouches[0].pageY;
- } else {
- pageY = event.pageY;
- }
- if (handle) {
- var handleH = handle.el().offsetHeight;
-
- boxY = boxY + (handleH / 2);
- boxH = boxH - handleH;
- }
-
- return Math.max(0, Math.min(1, ((boxY - pageY) + boxH) / boxH));
- } else {
- boxX = box.left;
- if (event.changedTouches) {
- pageX = event.changedTouches[0].pageX;
- } else {
- pageX = event.pageX;
- }
- if (handle) {
- var handleW = handle.el().offsetWidth;
-
- boxX = boxX + (handleW / 2);
- boxW = boxW - handleW;
- }
-
- return Math.max(0, Math.min(1, (pageX - boxX) / boxW));
- }
- };
- vjs.Slider.prototype.onFocus = function(){
- vjs.on(document, 'keyup', vjs.bind(this, this.onKeyPress));
- };
- vjs.Slider.prototype.onKeyPress = function(event){
- if (event.which == 37) {
- event.preventDefault();
- this.stepBack();
- } else if (event.which == 39) {
- event.preventDefault();
- this.stepForward();
- }
- };
- vjs.Slider.prototype.onBlur = function(){
- vjs.off(document, 'keyup', vjs.bind(this, this.onKeyPress));
- };
- vjs.Slider.prototype.onClick = function(event){
- event.stopImmediatePropagation();
- event.preventDefault();
- };
- vjs.SliderHandle = vjs.Component.extend();
- vjs.SliderHandle.prototype.defaultValue = 0;
- vjs.SliderHandle.prototype.createEl = function(type, props) {
- props = props || {};
-
- props.className = props.className + ' vjs-slider-handle';
- props = vjs.obj.merge({
- innerHTML: '<span class="vjs-control-text">'+this.defaultValue+'</span>'
- }, props);
- return vjs.Component.prototype.createEl.call(this, 'div', props);
- };
- vjs.Menu = vjs.Component.extend();
- vjs.Menu.prototype.addItem = function(component){
- this.addChild(component);
- component.on('click', vjs.bind(this, function(){
- this.unlockShowing();
- }));
- };
- vjs.Menu.prototype.createEl = function(){
- var contentElType = this.options().contentElType || 'ul';
- this.contentEl_ = vjs.createEl(contentElType, {
- className: 'vjs-menu-content'
- });
- var el = vjs.Component.prototype.createEl.call(this, 'div', {
- append: this.contentEl_,
- className: 'vjs-menu'
- });
- el.appendChild(this.contentEl_);
-
-
- vjs.on(el, 'click', function(event){
- event.preventDefault();
- event.stopImmediatePropagation();
- });
- return el;
- };
- vjs.MenuItem = vjs.Button.extend({
-
- init: function(player, options){
- vjs.Button.call(this, player, options);
- this.selected(options['selected']);
- }
- });
- vjs.MenuItem.prototype.createEl = function(type, props){
- return vjs.Button.prototype.createEl.call(this, 'li', vjs.obj.merge({
- className: 'vjs-menu-item',
- innerHTML: this.options_['label']
- }, props));
- };
- vjs.MenuItem.prototype.onClick = function(){
- this.selected(true);
- };
- vjs.MenuItem.prototype.selected = function(selected){
- if (selected) {
- this.addClass('vjs-selected');
- this.el_.setAttribute('aria-selected',true);
- } else {
- this.removeClass('vjs-selected');
- this.el_.setAttribute('aria-selected',false);
- }
- };
- vjs.MenuButton = vjs.Button.extend({
-
- init: function(player, options){
- vjs.Button.call(this, player, options);
- this.menu = this.createMenu();
-
- this.addChild(this.menu);
-
- if (this.items && this.items.length === 0) {
- this.hide();
- }
- this.on('keyup', this.onKeyPress);
- this.el_.setAttribute('aria-haspopup', true);
- this.el_.setAttribute('role', 'button');
- }
- });
- vjs.MenuButton.prototype.buttonPressed_ = false;
- vjs.MenuButton.prototype.createMenu = function(){
- var menu = new vjs.Menu(this.player_);
-
- if (this.options().title) {
- menu.el().appendChild(vjs.createEl('li', {
- className: 'vjs-menu-title',
- innerHTML: vjs.capitalize(this.kind_),
- tabindex: -1
- }));
- }
- this.items = this['createItems']();
- if (this.items) {
-
- for (var i = 0; i < this.items.length; i++) {
- menu.addItem(this.items[i]);
- }
- }
- return menu;
- };
- vjs.MenuButton.prototype.createItems = function(){};
- vjs.MenuButton.prototype.buildCSSClass = function(){
- return this.className + ' vjs-menu-button ' + vjs.Button.prototype.buildCSSClass.call(this);
- };
- vjs.MenuButton.prototype.onFocus = function(){};
- vjs.MenuButton.prototype.onBlur = function(){};
- vjs.MenuButton.prototype.onClick = function(){
-
-
-
- this.one('mouseout', vjs.bind(this, function(){
- this.menu.unlockShowing();
- this.el_.blur();
- }));
- if (this.buttonPressed_){
- this.unpressButton();
- } else {
- this.pressButton();
- }
- };
- vjs.MenuButton.prototype.onKeyPress = function(event){
- event.preventDefault();
-
- if (event.which == 32 || event.which == 13) {
- if (this.buttonPressed_){
- this.unpressButton();
- } else {
- this.pressButton();
- }
-
- } else if (event.which == 27){
- if (this.buttonPressed_){
- this.unpressButton();
- }
- }
- };
- vjs.MenuButton.prototype.pressButton = function(){
- this.buttonPressed_ = true;
- this.menu.lockShowing();
- this.el_.setAttribute('aria-pressed', true);
- if (this.items && this.items.length > 0) {
- this.items[0].el().focus();
- }
- };
- vjs.MenuButton.prototype.unpressButton = function(){
- this.buttonPressed_ = false;
- this.menu.unlockShowing();
- this.el_.setAttribute('aria-pressed', false);
- };
- vjs.Player = vjs.Component.extend({
-
- init: function(tag, options, ready){
- this.tag = tag;
-
-
-
-
-
- options = vjs.obj.merge(this.getTagSettings(tag), options);
-
- this.cache_ = {};
-
- this.poster_ = options['poster'];
-
- this.controls_ = options['controls'];
-
-
-
- tag.controls = false;
-
-
-
- vjs.Component.call(this, this, options, ready);
-
-
- if (this.controls()) {
- this.addClass('vjs-controls-enabled');
- } else {
- this.addClass('vjs-controls-disabled');
- }
-
-
-
-
-
-
-
- this.one('play', function(e){
- var fpEvent = { type: 'firstplay', target: this.el_ };
-
- var keepGoing = vjs.trigger(this.el_, fpEvent);
- if (!keepGoing) {
- e.preventDefault();
- e.stopPropagation();
- e.stopImmediatePropagation();
- }
- });
- this.on('ended', this.onEnded);
- this.on('play', this.onPlay);
- this.on('firstplay', this.onFirstPlay);
- this.on('pause', this.onPause);
- this.on('progress', this.onProgress);
- this.on('durationchange', this.onDurationChange);
- this.on('error', this.onError);
- this.on('fullscreenchange', this.onFullscreenChange);
-
- vjs.players[this.id_] = this;
- if (options['plugins']) {
- vjs.obj.each(options['plugins'], function(key, val){
- this[key](val);
- }, this);
- }
- this.listenForUserActivity();
- }
- });
- vjs.Player.prototype.options_ = vjs.options;
- vjs.Player.prototype.dispose = function(){
- this.trigger('dispose');
-
- this.off('dispose');
-
- vjs.players[this.id_] = null;
- if (this.tag && this.tag['player']) { this.tag['player'] = null; }
- if (this.el_ && this.el_['player']) { this.el_['player'] = null; }
-
- this.stopTrackingProgress();
- this.stopTrackingCurrentTime();
- if (this.tech) { this.tech.dispose(); }
-
- vjs.Component.prototype.dispose.call(this);
- };
- vjs.Player.prototype.getTagSettings = function(tag){
- var options = {
- 'sources': [],
- 'tracks': []
- };
- vjs.obj.merge(options, vjs.getAttributeValues(tag));
-
- if (tag.hasChildNodes()) {
- var children, child, childName, i, j;
- children = tag.childNodes;
- for (i=0,j=children.length; i<j; i++) {
- child = children[i];
-
- childName = child.nodeName.toLowerCase();
- if (childName === 'source') {
- options['sources'].push(vjs.getAttributeValues(child));
- } else if (childName === 'track') {
- options['tracks'].push(vjs.getAttributeValues(child));
- }
- }
- }
- return options;
- };
- vjs.Player.prototype.createEl = function(){
- var el = this.el_ = vjs.Component.prototype.createEl.call(this, 'div');
- var tag = this.tag;
-
- tag.removeAttribute('width');
- tag.removeAttribute('height');
-
-
-
-
- if (tag.hasChildNodes()) {
- var nodes, nodesLength, i, node, nodeName, removeNodes;
- nodes = tag.childNodes;
- nodesLength = nodes.length;
- removeNodes = [];
- while (nodesLength--) {
- node = nodes[nodesLength];
- nodeName = node.nodeName.toLowerCase();
- if (nodeName === 'track') {
- removeNodes.push(node);
- }
- }
- for (i=0; i<removeNodes.length; i++) {
- tag.removeChild(removeNodes[i]);
- }
- }
-
- tag.id = tag.id || 'vjs_video_' + vjs.guid++;
-
-
- el.id = tag.id;
- el.className = tag.className;
-
-
-
- tag.id += '_html5_api';
- tag.className = 'vjs-tech';
-
- tag['player'] = el['player'] = this;
-
- this.addClass('vjs-paused');
-
-
- this.width(this.options_['width'], true);
- this.height(this.options_['height'], true);
-
- if (tag.parentNode) {
- tag.parentNode.insertBefore(el, tag);
- }
- vjs.insertFirst(tag, el);
- return el;
- };
- vjs.Player.prototype.loadTech = function(techName, source){
-
- if (this.tech) {
- this.unloadTech();
-
-
- } else if (techName !== 'Html5' && this.tag) {
- vjs.Html5.disposeMediaElement(this.tag);
- this.tag = null;
- }
- this.techName = techName;
-
- this.isReady_ = false;
- var techReady = function(){
- this.player_.triggerReady();
-
- if (!this.features['progressEvents']) {
- this.player_.manualProgressOn();
- }
-
- if (!this.features['timeupdateEvents']) {
- this.player_.manualTimeUpdatesOn();
- }
- };
-
- var techOptions = vjs.obj.merge({ 'source': source, 'parentEl': this.el_ }, this.options_[techName.toLowerCase()]);
- if (source) {
- if (source.src == this.cache_.src && this.cache_.currentTime > 0) {
- techOptions['startTime'] = this.cache_.currentTime;
- }
- this.cache_.src = source.src;
- }
-
- this.tech = new window['videojs'][techName](this, techOptions);
- this.tech.ready(techReady);
- };
- vjs.Player.prototype.unloadTech = function(){
- this.isReady_ = false;
- this.tech.dispose();
-
- if (this.manualProgress) { this.manualProgressOff(); }
- if (this.manualTimeUpdates) { this.manualTimeUpdatesOff(); }
- this.tech = false;
- };
- vjs.Player.prototype.manualProgressOn = function(){
- this.manualProgress = true;
-
- this.trackProgress();
-
-
-
-
- this.tech.one('progress', function(){
-
- this.features['progressEvents'] = true;
-
- this.player_.manualProgressOff();
- });
- };
- vjs.Player.prototype.manualProgressOff = function(){
- this.manualProgress = false;
- this.stopTrackingProgress();
- };
- vjs.Player.prototype.trackProgress = function(){
- this.progressInterval = setInterval(vjs.bind(this, function(){
-
-
-
- if (this.cache_.bufferEnd < this.buffered().end(0)) {
- this.trigger('progress');
- } else if (this.bufferedPercent() == 1) {
- this.stopTrackingProgress();
- this.trigger('progress');
- }
- }), 500);
- };
- vjs.Player.prototype.stopTrackingProgress = function(){ clearInterval(this.progressInterval); };
- vjs.Player.prototype.manualTimeUpdatesOn = function(){
- this.manualTimeUpdates = true;
- this.on('play', this.trackCurrentTime);
- this.on('pause', this.stopTrackingCurrentTime);
-
-
- this.tech.one('timeupdate', function(){
-
- this.features['timeupdateEvents'] = true;
-
- this.player_.manualTimeUpdatesOff();
- });
- };
- vjs.Player.prototype.manualTimeUpdatesOff = function(){
- this.manualTimeUpdates = false;
- this.stopTrackingCurrentTime();
- this.off('play', this.trackCurrentTime);
- this.off('pause', this.stopTrackingCurrentTime);
- };
- vjs.Player.prototype.trackCurrentTime = function(){
- if (this.currentTimeInterval) { this.stopTrackingCurrentTime(); }
- this.currentTimeInterval = setInterval(vjs.bind(this, function(){
- this.trigger('timeupdate');
- }), 250);
- };
- vjs.Player.prototype.stopTrackingCurrentTime = function(){ clearInterval(this.currentTimeInterval); };
- vjs.Player.prototype.onLoadStart;
- vjs.Player.prototype.onLoadedMetaData;
- vjs.Player.prototype.onLoadedData;
- vjs.Player.prototype.onLoadedAllData;
- vjs.Player.prototype.onPlay = function(){
- vjs.removeClass(this.el_, 'vjs-paused');
- vjs.addClass(this.el_, 'vjs-playing');
- };
- vjs.Player.prototype.onFirstPlay = function(){
-
-
- if(this.options_['starttime']){
- this.currentTime(this.options_['starttime']);
- }
- this.addClass('vjs-has-started');
- };
- vjs.Player.prototype.onPause = function(){
- vjs.removeClass(this.el_, 'vjs-playing');
- vjs.addClass(this.el_, 'vjs-paused');
- };
- vjs.Player.prototype.onTimeUpdate;
- vjs.Player.prototype.onProgress = function(){
-
- if (this.bufferedPercent() == 1) {
- this.trigger('loadedalldata');
- }
- };
- vjs.Player.prototype.onEnded = function(){
- if (this.options_['loop']) {
- this.currentTime(0);
- this.play();
- }
- };
- vjs.Player.prototype.onDurationChange = function(){
-
- this.duration(this.techGet('duration'));
- };
- vjs.Player.prototype.onVolumeChange;
- vjs.Player.prototype.onFullscreenChange = function() {
- if (this.isFullScreen) {
- this.addClass('vjs-fullscreen');
- } else {
- this.removeClass('vjs-fullscreen');
- }
- };
- vjs.Player.prototype.onError = function(e) {
- vjs.log('Video Error', e);
- };
- vjs.Player.prototype.cache_;
- vjs.Player.prototype.getCache = function(){
- return this.cache_;
- };
- vjs.Player.prototype.techCall = function(method, arg){
-
- if (this.tech && !this.tech.isReady_) {
- this.tech.ready(function(){
- this[method](arg);
- });
-
- } else {
- try {
- this.tech[method](arg);
- } catch(e) {
- vjs.log(e);
- throw e;
- }
- }
- };
- vjs.Player.prototype.techGet = function(method){
- if (this.tech && this.tech.isReady_) {
-
-
-
- try {
- return this.tech[method]();
- } catch(e) {
-
- if (this.tech[method] === undefined) {
- vjs.log('Video.js: ' + method + ' method not defined for '+this.techName+' playback technology.', e);
- } else {
-
- if (e.name == 'TypeError') {
- vjs.log('Video.js: ' + method + ' unavailable on '+this.techName+' playback technology element.', e);
- this.tech.isReady_ = false;
- } else {
- vjs.log(e);
- }
- }
- throw e;
- }
- }
- return;
- };
- vjs.Player.prototype.play = function(){
- this.techCall('play');
- return this;
- };
- vjs.Player.prototype.pause = function(){
- this.techCall('pause');
- return this;
- };
- vjs.Player.prototype.paused = function(){
-
- return (this.techGet('paused') === false) ? false : true;
- };
- vjs.Player.prototype.currentTime = function(seconds){
- if (seconds !== undefined) {
-
- this.cache_.lastSetCurrentTime = seconds;
- this.techCall('setCurrentTime', seconds);
-
- if (this.manualTimeUpdates) { this.trigger('timeupdate'); }
- return this;
- }
-
-
- return this.cache_.currentTime = (this.techGet('currentTime') || 0);
- };
- vjs.Player.prototype.duration = function(seconds){
- if (seconds !== undefined) {
-
- this.cache_.duration = parseFloat(seconds);
- return this;
- }
- if (this.cache_.duration === undefined) {
- this.onDurationChange();
- }
- return this.cache_.duration;
- };
- vjs.Player.prototype.remainingTime = function(){
- return this.duration() - this.currentTime();
- };
- vjs.Player.prototype.buffered = function(){
- var buffered = this.techGet('buffered'),
- start = 0,
- buflast = buffered.length - 1,
-
- end = this.cache_.bufferEnd = this.cache_.bufferEnd || 0;
- if (buffered && buflast >= 0 && buffered.end(buflast) !== end) {
- end = buffered.end(buflast);
-
- this.cache_.bufferEnd = end;
- }
- return vjs.createTimeRange(start, end);
- };
- vjs.Player.prototype.bufferedPercent = function(){
- return (this.duration()) ? this.buffered().end(0) / this.duration() : 0;
- };
- vjs.Player.prototype.volume = function(percentAsDecimal){
- var vol;
- if (percentAsDecimal !== undefined) {
- vol = Math.max(0, Math.min(1, parseFloat(percentAsDecimal)));
- this.cache_.volume = vol;
- this.techCall('setVolume', vol);
- vjs.setLocalStorage('volume', vol);
- return this;
- }
-
- vol = parseFloat(this.techGet('volume'));
- return (isNaN(vol)) ? 1 : vol;
- };
- vjs.Player.prototype.muted = function(muted){
- if (muted !== undefined) {
- this.techCall('setMuted', muted);
- return this;
- }
- return this.techGet('muted') || false;
- };
- vjs.Player.prototype.supportsFullScreen = function(){ return this.techGet('supportsFullScreen') || false; };
- vjs.Player.prototype.requestFullScreen = function(){
- var requestFullScreen = vjs.support.requestFullScreen;
- this.isFullScreen = true;
- if (requestFullScreen) {
-
-
-
-
-
-
-
- vjs.on(document, requestFullScreen.eventName, vjs.bind(this, function(e){
- this.isFullScreen = document[requestFullScreen.isFullScreen];
-
- if (this.isFullScreen === false) {
- vjs.off(document, requestFullScreen.eventName, arguments.callee);
- }
- this.trigger('fullscreenchange');
- }));
- this.el_[requestFullScreen.requestFn]();
- } else if (this.tech.supportsFullScreen()) {
-
-
- this.techCall('enterFullScreen');
- } else {
-
-
- this.enterFullWindow();
- this.trigger('fullscreenchange');
- }
- return this;
- };
- vjs.Player.prototype.cancelFullScreen = function(){
- var requestFullScreen = vjs.support.requestFullScreen;
- this.isFullScreen = false;
-
- if (requestFullScreen) {
- document[requestFullScreen.cancelFn]();
- } else if (this.tech.supportsFullScreen()) {
- this.techCall('exitFullScreen');
- } else {
- this.exitFullWindow();
- this.trigger('fullscreenchange');
- }
- return this;
- };
- vjs.Player.prototype.enterFullWindow = function(){
- this.isFullWindow = true;
-
- this.docOrigOverflow = document.documentElement.style.overflow;
-
- vjs.on(document, 'keydown', vjs.bind(this, this.fullWindowOnEscKey));
-
- document.documentElement.style.overflow = 'hidden';
-
- vjs.addClass(document.body, 'vjs-full-window');
- this.trigger('enterFullWindow');
- };
- vjs.Player.prototype.fullWindowOnEscKey = function(event){
- if (event.keyCode === 27) {
- if (this.isFullScreen === true) {
- this.cancelFullScreen();
- } else {
- this.exitFullWindow();
- }
- }
- };
- vjs.Player.prototype.exitFullWindow = function(){
- this.isFullWindow = false;
- vjs.off(document, 'keydown', this.fullWindowOnEscKey);
-
- document.documentElement.style.overflow = this.docOrigOverflow;
-
- vjs.removeClass(document.body, 'vjs-full-window');
-
-
- this.trigger('exitFullWindow');
- };
- vjs.Player.prototype.selectSource = function(sources){
-
- for (var i=0,j=this.options_['techOrder'];i<j.length;i++) {
- var techName = vjs.capitalize(j[i]),
- tech = window['videojs'][techName];
-
- if (tech.isSupported()) {
-
- for (var a=0,b=sources;a<b.length;a++) {
- var source = b[a];
-
- if (tech['canPlaySource'](source)) {
- return { source: source, tech: techName };
- }
- }
- }
- }
- return false;
- };
- vjs.Player.prototype.src = function(source){
-
- if (source instanceof Array) {
- var sourceTech = this.selectSource(source),
- techName;
- if (sourceTech) {
- source = sourceTech.source;
- techName = sourceTech.tech;
-
- if (techName == this.techName) {
- this.src(source);
-
- } else {
- this.loadTech(techName, source);
- }
- } else {
- this.el_.appendChild(vjs.createEl('p', {
- innerHTML: this.options()['notSupportedMessage']
- }));
- }
-
- } else if (source instanceof Object) {
- if (window['videojs'][this.techName]['canPlaySource'](source)) {
- this.src(source.src);
- } else {
-
- this.src([source]);
- }
-
- } else {
-
- this.cache_.src = source;
- if (!this.isReady_) {
- this.ready(function(){
- this.src(source);
- });
- } else {
- this.techCall('src', source);
- if (this.options_['preload'] == 'auto') {
- this.load();
- }
- if (this.options_['autoplay']) {
- this.play();
- }
- }
- }
- return this;
- };
- vjs.Player.prototype.load = function(){
- this.techCall('load');
- return this;
- };
- vjs.Player.prototype.currentSrc = function(){
- return this.techGet('currentSrc') || this.cache_.src || '';
- };
- vjs.Player.prototype.preload = function(value){
- if (value !== undefined) {
- this.techCall('setPreload', value);
- this.options_['preload'] = value;
- return this;
- }
- return this.techGet('preload');
- };
- vjs.Player.prototype.autoplay = function(value){
- if (value !== undefined) {
- this.techCall('setAutoplay', value);
- this.options_['autoplay'] = value;
- return this;
- }
- return this.techGet('autoplay', value);
- };
- vjs.Player.prototype.loop = function(value){
- if (value !== undefined) {
- this.techCall('setLoop', value);
- this.options_['loop'] = value;
- return this;
- }
- return this.techGet('loop');
- };
- vjs.Player.prototype.poster_;
- vjs.Player.prototype.poster = function(src){
- if (src !== undefined) {
- this.poster_ = src;
- return this;
- }
- return this.poster_;
- };
- vjs.Player.prototype.controls_;
- vjs.Player.prototype.controls = function(bool){
- if (bool !== undefined) {
- bool = !!bool;
-
- if (this.controls_ !== bool) {
- this.controls_ = bool;
- if (bool) {
- this.removeClass('vjs-controls-disabled');
- this.addClass('vjs-controls-enabled');
- this.trigger('controlsenabled');
- } else {
- this.removeClass('vjs-controls-enabled');
- this.addClass('vjs-controls-disabled');
- this.trigger('controlsdisabled');
- }
- }
- return this;
- }
- return this.controls_;
- };
- vjs.Player.prototype.usingNativeControls_;
- vjs.Player.prototype.usingNativeControls = function(bool){
- if (bool !== undefined) {
- bool = !!bool;
-
- if (this.usingNativeControls_ !== bool) {
- this.usingNativeControls_ = bool;
- if (bool) {
- this.addClass('vjs-using-native-controls');
-
- this.trigger('usingnativecontrols');
- } else {
- this.removeClass('vjs-using-native-controls');
-
- this.trigger('usingcustomcontrols');
- }
- }
- return this;
- }
- return this.usingNativeControls_;
- };
- vjs.Player.prototype.error = function(){ return this.techGet('error'); };
- vjs.Player.prototype.ended = function(){ return this.techGet('ended'); };
- vjs.Player.prototype.seeking = function(){ return this.techGet('seeking'); };
- vjs.Player.prototype.userActivity_ = true;
- vjs.Player.prototype.reportUserActivity = function(event){
- this.userActivity_ = true;
- };
- vjs.Player.prototype.userActive_ = true;
- vjs.Player.prototype.userActive = function(bool){
- if (bool !== undefined) {
- bool = !!bool;
- if (bool !== this.userActive_) {
- this.userActive_ = bool;
- if (bool) {
-
-
- this.userActivity_ = true;
- this.removeClass('vjs-user-inactive');
- this.addClass('vjs-user-active');
- this.trigger('useractive');
- } else {
-
-
- this.userActivity_ = false;
-
-
-
-
-
-
-
-
- this.tech.one('mousemove', function(e){
- e.stopPropagation();
- e.preventDefault();
- });
- this.removeClass('vjs-user-active');
- this.addClass('vjs-user-inactive');
- this.trigger('userinactive');
- }
- }
- return this;
- }
- return this.userActive_;
- };
- vjs.Player.prototype.listenForUserActivity = function(){
- var onMouseActivity, onMouseDown, mouseInProgress, onMouseUp,
- activityCheck, inactivityTimeout;
- onMouseActivity = this.reportUserActivity;
- onMouseDown = function() {
- onMouseActivity();
-
-
-
- clearInterval(mouseInProgress);
-
-
-
- mouseInProgress = setInterval(vjs.bind(this, onMouseActivity), 250);
- };
- onMouseUp = function(event) {
- onMouseActivity();
-
- clearInterval(mouseInProgress);
- };
-
- this.on('mousedown', onMouseDown);
- this.on('mousemove', onMouseActivity);
- this.on('mouseup', onMouseUp);
-
-
- this.on('keydown', onMouseActivity);
- this.on('keyup', onMouseActivity);
-
-
-
- this.on('touchstart', onMouseDown);
- this.on('touchmove', onMouseActivity);
- this.on('touchend', onMouseUp);
- this.on('touchcancel', onMouseUp);
-
-
-
-
-
- activityCheck = setInterval(vjs.bind(this, function() {
-
- if (this.userActivity_) {
-
- this.userActivity_ = false;
-
- this.userActive(true);
-
- clearTimeout(inactivityTimeout);
-
-
- inactivityTimeout = setTimeout(vjs.bind(this, function() {
-
-
-
- if (!this.userActivity_) {
- this.userActive(false);
- }
- }), 2000);
- }
- }), 250);
-
- this.on('dispose', function(){
- clearInterval(activityCheck);
- clearTimeout(inactivityTimeout);
- });
- };
- (function(){
- var prefix, requestFS, div;
- div = document.createElement('div');
- requestFS = {};
-
-
-
-
- if (div.cancelFullscreen !== undefined) {
- requestFS.requestFn = 'requestFullscreen';
- requestFS.cancelFn = 'exitFullscreen';
- requestFS.eventName = 'fullscreenchange';
- requestFS.isFullScreen = 'fullScreen';
-
-
-
-
-
- } else {
- if (document.mozCancelFullScreen) {
- prefix = 'moz';
- requestFS.isFullScreen = prefix + 'FullScreen';
- } else {
- prefix = 'webkit';
- requestFS.isFullScreen = prefix + 'IsFullScreen';
- }
- if (div[prefix + 'RequestFullScreen']) {
- requestFS.requestFn = prefix + 'RequestFullScreen';
- requestFS.cancelFn = prefix + 'CancelFullScreen';
- }
- requestFS.eventName = prefix + 'fullscreenchange';
- }
- if (document[requestFS.cancelFn]) {
- vjs.support.requestFullScreen = requestFS;
- }
- })();
- vjs.ControlBar = vjs.Component.extend();
- vjs.ControlBar.prototype.options_ = {
- loadEvent: 'play',
- children: {
- 'playToggle': {},
- 'currentTimeDisplay': {},
- 'timeDivider': {},
- 'durationDisplay': {},
- 'remainingTimeDisplay': {},
- 'progressControl': {},
- 'fullscreenToggle': {},
- 'volumeControl': {},
- 'muteToggle': {}
-
- }
- };
- vjs.ControlBar.prototype.createEl = function(){
- return vjs.createEl('div', {
- className: 'vjs-control-bar'
- });
- };
- vjs.PlayToggle = vjs.Button.extend({
-
- init: function(player, options){
- vjs.Button.call(this, player, options);
- player.on('play', vjs.bind(this, this.onPlay));
- player.on('pause', vjs.bind(this, this.onPause));
- }
- });
- vjs.PlayToggle.prototype.buttonText = 'Play';
- vjs.PlayToggle.prototype.buildCSSClass = function(){
- return 'vjs-play-control ' + vjs.Button.prototype.buildCSSClass.call(this);
- };
- vjs.PlayToggle.prototype.onClick = function(){
- if (this.player_.paused()) {
- this.player_.play();
- } else {
- this.player_.pause();
- }
- };
-
- vjs.PlayToggle.prototype.onPlay = function(){
- vjs.removeClass(this.el_, 'vjs-paused');
- vjs.addClass(this.el_, 'vjs-playing');
- this.el_.children[0].children[0].innerHTML = 'Pause';
- };
-
- vjs.PlayToggle.prototype.onPause = function(){
- vjs.removeClass(this.el_, 'vjs-playing');
- vjs.addClass(this.el_, 'vjs-paused');
- this.el_.children[0].children[0].innerHTML = 'Play';
- };
- vjs.CurrentTimeDisplay = vjs.Component.extend({
-
- init: function(player, options){
- vjs.Component.call(this, player, options);
- player.on('timeupdate', vjs.bind(this, this.updateContent));
- }
- });
- vjs.CurrentTimeDisplay.prototype.createEl = function(){
- var el = vjs.Component.prototype.createEl.call(this, 'div', {
- className: 'vjs-current-time vjs-time-controls vjs-control'
- });
- this.content = vjs.createEl('div', {
- className: 'vjs-current-time-display',
- innerHTML: '<span class="vjs-control-text">Current Time </span>' + '0:00',
- 'aria-live': 'off'
- });
- el.appendChild(vjs.createEl('div').appendChild(this.content));
- return el;
- };
- vjs.CurrentTimeDisplay.prototype.updateContent = function(){
-
- var time = (this.player_.scrubbing) ? this.player_.getCache().currentTime : this.player_.currentTime();
- this.content.innerHTML = '<span class="vjs-control-text">Current Time </span>' + vjs.formatTime(time, this.player_.duration());
- };
- vjs.DurationDisplay = vjs.Component.extend({
-
- init: function(player, options){
- vjs.Component.call(this, player, options);
- player.on('timeupdate', vjs.bind(this, this.updateContent));
- }
- });
- vjs.DurationDisplay.prototype.createEl = function(){
- var el = vjs.Component.prototype.createEl.call(this, 'div', {
- className: 'vjs-duration vjs-time-controls vjs-control'
- });
- this.content = vjs.createEl('div', {
- className: 'vjs-duration-display',
- innerHTML: '<span class="vjs-control-text">Duration Time </span>' + '0:00',
- 'aria-live': 'off'
- });
- el.appendChild(vjs.createEl('div').appendChild(this.content));
- return el;
- };
- vjs.DurationDisplay.prototype.updateContent = function(){
- var duration = this.player_.duration();
- if (duration) {
- this.content.innerHTML = '<span class="vjs-control-text">Duration Time </span>' + vjs.formatTime(duration);
- }
- };
- vjs.TimeDivider = vjs.Component.extend({
-
- init: function(player, options){
- vjs.Component.call(this, player, options);
- }
- });
- vjs.TimeDivider.prototype.createEl = function(){
- return vjs.Component.prototype.createEl.call(this, 'div', {
- className: 'vjs-time-divider',
- innerHTML: '<div><span>/</span></div>'
- });
- };
- vjs.RemainingTimeDisplay = vjs.Component.extend({
-
- init: function(player, options){
- vjs.Component.call(this, player, options);
- player.on('timeupdate', vjs.bind(this, this.updateContent));
- }
- });
- vjs.RemainingTimeDisplay.prototype.createEl = function(){
- var el = vjs.Component.prototype.createEl.call(this, 'div', {
- className: 'vjs-remaining-time vjs-time-controls vjs-control'
- });
- this.content = vjs.createEl('div', {
- className: 'vjs-remaining-time-display',
- innerHTML: '<span class="vjs-control-text">Remaining Time </span>' + '-0:00',
- 'aria-live': 'off'
- });
- el.appendChild(vjs.createEl('div').appendChild(this.content));
- return el;
- };
- vjs.RemainingTimeDisplay.prototype.updateContent = function(){
- if (this.player_.duration()) {
- this.content.innerHTML = '<span class="vjs-control-text">Remaining Time </span>' + '-'+ vjs.formatTime(this.player_.remainingTime());
- }
-
-
-
- };
- vjs.FullscreenToggle = vjs.Button.extend({
-
- init: function(player, options){
- vjs.Button.call(this, player, options);
- }
- });
- vjs.FullscreenToggle.prototype.buttonText = 'Fullscreen';
- vjs.FullscreenToggle.prototype.buildCSSClass = function(){
- return 'vjs-fullscreen-control ' + vjs.Button.prototype.buildCSSClass.call(this);
- };
- vjs.FullscreenToggle.prototype.onClick = function(){
- if (!this.player_.isFullScreen) {
- this.player_.requestFullScreen();
- this.el_.children[0].children[0].innerHTML = 'Non-Fullscreen';
- } else {
- this.player_.cancelFullScreen();
- this.el_.children[0].children[0].innerHTML = 'Fullscreen';
- }
- };
- vjs.ProgressControl = vjs.Component.extend({
-
- init: function(player, options){
- vjs.Component.call(this, player, options);
- }
- });
- vjs.ProgressControl.prototype.options_ = {
- children: {
- 'seekBar': {}
- }
- };
- vjs.ProgressControl.prototype.createEl = function(){
- return vjs.Component.prototype.createEl.call(this, 'div', {
- className: 'vjs-progress-control vjs-control'
- });
- };
- vjs.SeekBar = vjs.Slider.extend({
-
- init: function(player, options){
- vjs.Slider.call(this, player, options);
- player.on('timeupdate', vjs.bind(this, this.updateARIAAttributes));
- player.ready(vjs.bind(this, this.updateARIAAttributes));
- }
- });
- vjs.SeekBar.prototype.options_ = {
- children: {
- 'loadProgressBar': {},
- 'playProgressBar': {},
- 'seekHandle': {}
- },
- 'barName': 'playProgressBar',
- 'handleName': 'seekHandle'
- };
- vjs.SeekBar.prototype.playerEvent = 'timeupdate';
- vjs.SeekBar.prototype.createEl = function(){
- return vjs.Slider.prototype.createEl.call(this, 'div', {
- className: 'vjs-progress-holder',
- 'aria-label': 'video progress bar'
- });
- };
- vjs.SeekBar.prototype.updateARIAAttributes = function(){
-
- var time = (this.player_.scrubbing) ? this.player_.getCache().currentTime : this.player_.currentTime();
- this.el_.setAttribute('aria-valuenow',vjs.round(this.getPercent()*100, 2));
- this.el_.setAttribute('aria-valuetext',vjs.formatTime(time, this.player_.duration()));
- };
- vjs.SeekBar.prototype.getPercent = function(){
- var currentTime;
-
-
-
-
- if (this.player_.techName === 'Flash' && this.player_.seeking()) {
- var cache = this.player_.getCache();
- if (cache.lastSetCurrentTime) {
- currentTime = cache.lastSetCurrentTime;
- }
- else {
- currentTime = this.player_.currentTime();
- }
- }
- else {
- currentTime = this.player_.currentTime();
- }
- return currentTime / this.player_.duration();
- };
- vjs.SeekBar.prototype.onMouseDown = function(event){
- vjs.Slider.prototype.onMouseDown.call(this, event);
- this.player_.scrubbing = true;
- this.videoWasPlaying = !this.player_.paused();
- this.player_.pause();
- };
- vjs.SeekBar.prototype.onMouseMove = function(event){
- var newTime = this.calculateDistance(event) * this.player_.duration();
-
- if (newTime == this.player_.duration()) { newTime = newTime - 0.1; }
-
- this.player_.currentTime(newTime);
- };
- vjs.SeekBar.prototype.onMouseUp = function(event){
- debugger
- vjs.Slider.prototype.onMouseUp.call(this, event);
- this.player_.scrubbing = false;
- if (this.videoWasPlaying) {
- debugger
- this.player_.play();
- }
- };
- vjs.SeekBar.prototype.stepForward = function(){
- this.player_.currentTime(this.player_.currentTime() + 5);
- };
- vjs.SeekBar.prototype.stepBack = function(){
- this.player_.currentTime(this.player_.currentTime() - 5);
- };
- vjs.LoadProgressBar = vjs.Component.extend({
-
- init: function(player, options){
- vjs.Component.call(this, player, options);
- player.on('progress', vjs.bind(this, this.update));
- }
- });
- vjs.LoadProgressBar.prototype.createEl = function(){
- return vjs.Component.prototype.createEl.call(this, 'div', {
- className: 'vjs-load-progress',
- innerHTML: '<span class="vjs-control-text">Loaded: 0%</span>'
- });
- };
- vjs.LoadProgressBar.prototype.update = function(){
- if (this.el_.style) { this.el_.style.width = vjs.round(this.player_.bufferedPercent() * 100, 2) + '%'; }
- };
- vjs.PlayProgressBar = vjs.Component.extend({
-
- init: function(player, options){
- vjs.Component.call(this, player, options);
- }
- });
- vjs.PlayProgressBar.prototype.createEl = function(){
- return vjs.Component.prototype.createEl.call(this, 'div', {
- className: 'vjs-play-progress',
- innerHTML: '<span class="vjs-control-text">Progress: 0%</span>'
- });
- };
- vjs.SeekHandle = vjs.SliderHandle.extend();
- vjs.SeekHandle.prototype.defaultValue = '00:00';
- vjs.SeekHandle.prototype.createEl = function(){
- return vjs.SliderHandle.prototype.createEl.call(this, 'div', {
- className: 'vjs-seek-handle'
- });
- };
- vjs.VolumeControl = vjs.Component.extend({
-
- init: function(player, options){
- vjs.Component.call(this, player, options);
-
- if (player.tech && player.tech.features && player.tech.features['volumeControl'] === false) {
- this.addClass('vjs-hidden');
- }
- player.on('loadstart', vjs.bind(this, function(){
- if (player.tech.features && player.tech.features['volumeControl'] === false) {
- this.addClass('vjs-hidden');
- } else {
- this.removeClass('vjs-hidden');
- }
- }));
- }
- });
- vjs.VolumeControl.prototype.options_ = {
- children: {
- 'volumeBar': {}
- }
- };
- vjs.VolumeControl.prototype.createEl = function(){
- return vjs.Component.prototype.createEl.call(this, 'div', {
- className: 'vjs-volume-control vjs-control'
- });
- };
- vjs.VolumeBar = vjs.Slider.extend({
-
- init: function(player, options){
- vjs.Slider.call(this, player, options);
- player.on('volumechange', vjs.bind(this, this.updateARIAAttributes));
- player.ready(vjs.bind(this, this.updateARIAAttributes));
- setTimeout(vjs.bind(this, this.update), 0);
- }
- });
- vjs.VolumeBar.prototype.updateARIAAttributes = function(){
-
- this.el_.setAttribute('aria-valuenow',vjs.round(this.player_.volume()*100, 2));
- this.el_.setAttribute('aria-valuetext',vjs.round(this.player_.volume()*100, 2)+'%');
- };
- vjs.VolumeBar.prototype.options_ = {
- children: {
- 'volumeLevel': {},
- 'volumeHandle': {}
- },
- 'barName': 'volumeLevel',
- 'handleName': 'volumeHandle'
- };
- vjs.VolumeBar.prototype.playerEvent = 'volumechange';
- vjs.VolumeBar.prototype.createEl = function(){
- return vjs.Slider.prototype.createEl.call(this, 'div', {
- className: 'vjs-volume-bar',
- 'aria-label': 'volume level'
- });
- };
- vjs.VolumeBar.prototype.onMouseMove = function(event) {
- if (this.player_.muted()) {
- this.player_.muted(false);
- }
- this.player_.volume(this.calculateDistance(event));
- };
- vjs.VolumeBar.prototype.getPercent = function(){
- if (this.player_.muted()) {
- return 0;
- } else {
- return this.player_.volume();
- }
- };
- vjs.VolumeBar.prototype.stepForward = function(){
- this.player_.volume(this.player_.volume() + 0.1);
- };
- vjs.VolumeBar.prototype.stepBack = function(){
- this.player_.volume(this.player_.volume() - 0.1);
- };
- vjs.VolumeLevel = vjs.Component.extend({
-
- init: function(player, options){
- vjs.Component.call(this, player, options);
- }
- });
- vjs.VolumeLevel.prototype.createEl = function(){
- return vjs.Component.prototype.createEl.call(this, 'div', {
- className: 'vjs-volume-level',
- innerHTML: '<span class="vjs-control-text"></span>'
- });
- };
- vjs.VolumeHandle = vjs.SliderHandle.extend();
- vjs.VolumeHandle.prototype.defaultValue = '00:00';
-
- vjs.VolumeHandle.prototype.createEl = function(){
- return vjs.SliderHandle.prototype.createEl.call(this, 'div', {
- className: 'vjs-volume-handle'
- });
- };
- vjs.MuteToggle = vjs.Button.extend({
-
- init: function(player, options){
- vjs.Button.call(this, player, options);
- player.on('volumechange', vjs.bind(this, this.update));
-
- if (player.tech && player.tech.features && player.tech.features['volumeControl'] === false) {
- this.addClass('vjs-hidden');
- }
- player.on('loadstart', vjs.bind(this, function(){
- if (player.tech.features && player.tech.features['volumeControl'] === false) {
- this.addClass('vjs-hidden');
- } else {
- this.removeClass('vjs-hidden');
- }
- }));
- }
- });
- vjs.MuteToggle.prototype.createEl = function(){
- return vjs.Button.prototype.createEl.call(this, 'div', {
- className: 'vjs-mute-control vjs-control',
- innerHTML: '<div><span class="vjs-control-text">Mute</span></div>'
- });
- };
- vjs.MuteToggle.prototype.onClick = function(){
- this.player_.muted( this.player_.muted() ? false : true );
- };
- vjs.MuteToggle.prototype.update = function(){
- var vol = this.player_.volume(),
- level = 3;
- if (vol === 0 || this.player_.muted()) {
- level = 0;
- } else if (vol < 0.33) {
- level = 1;
- } else if (vol < 0.67) {
- level = 2;
- }
-
-
-
- if(this.player_.muted()){
- if(this.el_.children[0].children[0].innerHTML!='Unmute'){
- this.el_.children[0].children[0].innerHTML = 'Unmute';
- }
- } else {
- if(this.el_.children[0].children[0].innerHTML!='Mute'){
- this.el_.children[0].children[0].innerHTML = 'Mute';
- }
- }
-
- for (var i = 0; i < 4; i++) {
- vjs.removeClass(this.el_, 'vjs-vol-'+i);
- }
- vjs.addClass(this.el_, 'vjs-vol-'+level);
- };
- vjs.VolumeMenuButton = vjs.MenuButton.extend({
-
- init: function(player, options){
- vjs.MenuButton.call(this, player, options);
-
- player.on('volumechange', vjs.bind(this, this.update));
-
- if (player.tech && player.tech.features && player.tech.features.volumeControl === false) {
- this.addClass('vjs-hidden');
- }
- player.on('loadstart', vjs.bind(this, function(){
- if (player.tech.features && player.tech.features.volumeControl === false) {
- this.addClass('vjs-hidden');
- } else {
- this.removeClass('vjs-hidden');
- }
- }));
- this.addClass('vjs-menu-button');
- }
- });
- vjs.VolumeMenuButton.prototype.createMenu = function(){
- var menu = new vjs.Menu(this.player_, {
- contentElType: 'div'
- });
- var vc = new vjs.VolumeBar(this.player_, vjs.obj.merge({vertical: true}, this.options_.volumeBar));
- menu.addChild(vc);
- return menu;
- };
- vjs.VolumeMenuButton.prototype.onClick = function(){
- vjs.MuteToggle.prototype.onClick.call(this);
- vjs.MenuButton.prototype.onClick.call(this);
- };
- vjs.VolumeMenuButton.prototype.createEl = function(){
- return vjs.Button.prototype.createEl.call(this, 'div', {
- className: 'vjs-volume-menu-button vjs-menu-button vjs-control',
- innerHTML: '<div><span class="vjs-control-text">Mute</span></div>'
- });
- };
- vjs.VolumeMenuButton.prototype.update = vjs.MuteToggle.prototype.update;
- vjs.PosterImage = vjs.Button.extend({
-
- init: function(player, options){
- vjs.Button.call(this, player, options);
- if (!player.poster() || !player.controls()) {
- this.hide();
- }
- player.on('play', vjs.bind(this, this.hide));
- }
- });
- vjs.PosterImage.prototype.createEl = function(){
- var el = vjs.createEl('div', {
- className: 'vjs-poster',
-
- tabIndex: -1
- }),
- poster = this.player_.poster();
- if (poster) {
- if ('backgroundSize' in el.style) {
- el.style.backgroundImage = 'url("' + poster + '")';
- } else {
- el.appendChild(vjs.createEl('img', { src: poster }));
- }
- }
- return el;
- };
- vjs.PosterImage.prototype.onClick = function(){
-
- if (this.player().controls()) {
- this.player_.play();
- }
- };
- vjs.LoadingSpinner = vjs.Component.extend({
-
- init: function(player, options){
- vjs.Component.call(this, player, options);
- player.on('canplay', vjs.bind(this, this.hide));
- player.on('canplaythrough', vjs.bind(this, this.hide));
- player.on('playing', vjs.bind(this, this.hide));
- player.on('seeked', vjs.bind(this, this.hide));
- player.on('seeking', vjs.bind(this, this.show));
-
-
-
- player.on('seeked', vjs.bind(this, this.hide));
- player.on('error', vjs.bind(this, this.show));
-
-
-
- player.on('waiting', vjs.bind(this, this.show));
- }
- });
- vjs.LoadingSpinner.prototype.createEl = function(){
- return vjs.Component.prototype.createEl.call(this, 'div', {
- className: 'vjs-loading-spinner'
- });
- };
- vjs.BigPlayButton = vjs.Button.extend();
- vjs.BigPlayButton.prototype.createEl = function(){
- return vjs.Button.prototype.createEl.call(this, 'div', {
- className: 'vjs-big-play-button',
- innerHTML: '<span aria-hidden="true"></span>',
- 'aria-label': 'play video'
- });
- };
- vjs.BigPlayButton.prototype.onClick = function(){
- this.player_.play();
- };
- vjs.MediaTechController = vjs.Component.extend({
-
- init: function(player, options, ready){
- vjs.Component.call(this, player, options, ready);
- this.initControlsListeners();
- }
- });
- vjs.MediaTechController.prototype.initControlsListeners = function(){
- var player, tech, activateControls, deactivateControls;
- tech = this;
- player = this.player();
- var activateControls = function(){
- if (player.controls() && !player.usingNativeControls()) {
- tech.addControlsListeners();
- }
- };
- deactivateControls = vjs.bind(tech, tech.removeControlsListeners);
-
-
- this.ready(activateControls);
- player.on('controlsenabled', activateControls);
- player.on('controlsdisabled', deactivateControls);
- };
- vjs.MediaTechController.prototype.addControlsListeners = function(){
- var preventBubble, userWasActive;
-
-
-
-
- this.on('mousedown', this.onClick);
-
-
-
-
-
-
-
-
-
-
-
- this.on('touchstart', function(event) {
-
- event.preventDefault();
- event.stopPropagation();
-
- userWasActive = this.player_.userActive();
- });
- preventBubble = function(event){
- event.stopPropagation();
- if (userWasActive) {
- this.player_.reportUserActivity();
- }
- };
-
- this.on('touchmove', preventBubble);
- this.on('touchleave', preventBubble);
- this.on('touchcancel', preventBubble);
- this.on('touchend', preventBubble);
-
- this.emitTapEvents();
-
-
- this.on('tap', this.onTap);
- };
- vjs.MediaTechController.prototype.removeControlsListeners = function(){
-
-
- this.off('tap');
- this.off('touchstart');
- this.off('touchmove');
- this.off('touchleave');
- this.off('touchcancel');
- this.off('touchend');
- this.off('click');
- this.off('mousedown');
- };
- vjs.MediaTechController.prototype.onClick = function(event){
-
-
- if (event.button !== 0) return;
-
-
- if (this.player().controls()) {
- if (this.player().paused()) {
- this.player().play();
- } else {
- this.player().pause();
- }
- }
- };
- vjs.MediaTechController.prototype.onTap = function(){
- this.player().userActive(!this.player().userActive());
- };
- vjs.MediaTechController.prototype.features = {
- 'volumeControl': true,
-
- 'fullscreenResize': false,
-
-
- 'progressEvents': false,
- 'timeupdateEvents': false
- };
- vjs.media = {};
- vjs.media.ApiMethods = 'play,pause,paused,currentTime,setCurrentTime,duration,buffered,volume,setVolume,muted,setMuted,width,height,supportsFullScreen,enterFullScreen,src,load,currentSrc,preload,setPreload,autoplay,setAutoplay,loop,setLoop,error,networkState,readyState,seeking,initialTime,startOffsetTime,played,seekable,ended,videoTracks,audioTracks,videoWidth,videoHeight,textTracks,defaultPlaybackRate,playbackRate,mediaGroup,controller,controls,defaultMuted'.split(',');
- function createMethod(methodName){
- return function(){
- throw new Error('The "'+methodName+'" method is not available on the playback technology\'s API');
- };
- }
- for (var i = vjs.media.ApiMethods.length - 1; i >= 0; i--) {
- var methodName = vjs.media.ApiMethods[i];
- vjs.MediaTechController.prototype[vjs.media.ApiMethods[i]] = createMethod(methodName);
- }
- vjs.Html5 = vjs.MediaTechController.extend({
-
- init: function(player, options, ready){
-
- this.features['volumeControl'] = vjs.Html5.canControlVolume();
-
- this.features['movingMediaElementInDOM'] = !vjs.IS_IOS;
-
- this.features['fullscreenResize'] = true;
- vjs.MediaTechController.call(this, player, options, ready);
- var source = options['source'];
-
-
- if (source && this.el_.currentSrc === source.src && this.el_.networkState > 0) {
- player.trigger('loadstart');
-
- } else if (source) {
- this.el_.src = source.src;
- }
-
-
-
-
- if (vjs.TOUCH_ENABLED && player.options()['nativeControlsForTouch'] !== false) {
- this.useNativeControls();
- }
-
-
-
-
- player.ready(function(){
- if (this.tag && this.options_['autoplay'] && this.paused()) {
- delete this.tag['poster'];
- this.play();
- }
- });
- this.setupTriggers();
- this.triggerReady();
- }
- });
- vjs.Html5.prototype.dispose = function(){
- vjs.MediaTechController.prototype.dispose.call(this);
- };
- vjs.Html5.prototype.createEl = function(){
- var player = this.player_,
-
- el = player.tag,
- newEl,
- clone;
-
-
-
- if (!el || this.features['movingMediaElementInDOM'] === false) {
-
- if (el) {
- clone = el.cloneNode(false);
- vjs.Html5.disposeMediaElement(el);
- el = clone;
- player.tag = null;
- } else {
- el = vjs.createEl('video', {
- id:player.id() + '_html5_api',
- className:'vjs-tech'
- });
- }
-
- el['player'] = player;
- vjs.insertFirst(el, player.el());
- }
-
- var attrs = ['autoplay','preload','loop','muted'];
- for (var i = attrs.length - 1; i >= 0; i--) {
- var attr = attrs[i];
- if (player.options_[attr] !== null) {
- el[attr] = player.options_[attr];
- }
- }
- return el;
-
- };
- vjs.Html5.prototype.setupTriggers = function(){
- for (var i = vjs.Html5.Events.length - 1; i >= 0; i--) {
- vjs.on(this.el_, vjs.Html5.Events[i], vjs.bind(this.player_, this.eventHandler));
- }
- };
- vjs.Html5.prototype.eventHandler = function(e){
- this.trigger(e);
-
- e.stopPropagation();
- };
- vjs.Html5.prototype.useNativeControls = function(){
- var tech, player, controlsOn, controlsOff, cleanUp;
- tech = this;
- player = this.player();
-
- tech.setControls(player.controls());
-
- controlsOn = function(){
- tech.setControls(true);
- };
- controlsOff = function(){
- tech.setControls(false);
- };
- player.on('controlsenabled', controlsOn);
- player.on('controlsdisabled', controlsOff);
-
- cleanUp = function(){
- player.off('controlsenabled', controlsOn);
- player.off('controlsdisabled', controlsOff);
- };
- tech.on('dispose', cleanUp);
- player.on('usingcustomcontrols', cleanUp);
-
- player.usingNativeControls(true);
- };
- vjs.Html5.prototype.play = function(){ this.el_.play(); };
- vjs.Html5.prototype.pause = function(){ this.el_.pause(); };
- vjs.Html5.prototype.paused = function(){ return this.el_.paused; };
- vjs.Html5.prototype.currentTime = function(){ return this.el_.currentTime; };
- vjs.Html5.prototype.setCurrentTime = function(seconds){
- try {
- this.el_.currentTime = seconds;
- } catch(e) {
- vjs.log(e, 'Video is not ready. (Video.js)');
-
- }
- };
- vjs.Html5.prototype.duration = function(){ return this.el_.duration || 0; };
- vjs.Html5.prototype.buffered = function(){ return this.el_.buffered; };
- vjs.Html5.prototype.volume = function(){ return this.el_.volume; };
- vjs.Html5.prototype.setVolume = function(percentAsDecimal){ this.el_.volume = percentAsDecimal; };
- vjs.Html5.prototype.muted = function(){ return this.el_.muted; };
- vjs.Html5.prototype.setMuted = function(muted){ this.el_.muted = muted; };
- vjs.Html5.prototype.width = function(){ return this.el_.offsetWidth; };
- vjs.Html5.prototype.height = function(){ return this.el_.offsetHeight; };
- vjs.Html5.prototype.supportsFullScreen = function(){
- if (typeof this.el_.webkitEnterFullScreen == 'function') {
-
- if (/Android/.test(vjs.USER_AGENT) || !/Chrome|Mac OS X 10.5/.test(vjs.USER_AGENT)) {
- return true;
- }
- }
- return false;
- };
- vjs.Html5.prototype.enterFullScreen = function(){
- var video = this.el_;
- if (video.paused && video.networkState <= video.HAVE_METADATA) {
-
-
- this.el_.play();
-
-
- setTimeout(function(){
- video.pause();
- video.webkitEnterFullScreen();
- }, 0);
- } else {
- video.webkitEnterFullScreen();
- }
- };
- vjs.Html5.prototype.exitFullScreen = function(){
- this.el_.webkitExitFullScreen();
- };
- vjs.Html5.prototype.src = function(src){ this.el_.src = src; };
- vjs.Html5.prototype.load = function(){ this.el_.load(); };
- vjs.Html5.prototype.currentSrc = function(){ return this.el_.currentSrc; };
- vjs.Html5.prototype.preload = function(){ return this.el_.preload; };
- vjs.Html5.prototype.setPreload = function(val){ this.el_.preload = val; };
- vjs.Html5.prototype.autoplay = function(){ return this.el_.autoplay; };
- vjs.Html5.prototype.setAutoplay = function(val){ this.el_.autoplay = val; };
- vjs.Html5.prototype.controls = function(){ return this.el_.controls; }
- vjs.Html5.prototype.setControls = function(val){ this.el_.controls = !!val; }
- vjs.Html5.prototype.loop = function(){ return this.el_.loop; };
- vjs.Html5.prototype.setLoop = function(val){ this.el_.loop = val; };
- vjs.Html5.prototype.error = function(){ return this.el_.error; };
- vjs.Html5.prototype.seeking = function(){ return this.el_.seeking; };
- vjs.Html5.prototype.ended = function(){ return this.el_.ended; };
- vjs.Html5.prototype.defaultMuted = function(){ return this.el_.defaultMuted; };
- vjs.Html5.isSupported = function(){
- return !!vjs.TEST_VID.canPlayType;
- };
- vjs.Html5.canPlaySource = function(srcObj){
-
-
- try {
- return !!vjs.TEST_VID.canPlayType(srcObj.type);
- } catch(e) {
- return '';
- }
-
-
-
- };
- vjs.Html5.canControlVolume = function(){
- var volume = vjs.TEST_VID.volume;
- vjs.TEST_VID.volume = (volume / 2) + 0.1;
- return volume !== vjs.TEST_VID.volume;
- };
- vjs.Html5.Events = 'loadstart,suspend,abort,error,emptied,stalled,loadedmetadata,loadeddata,canplay,canplaythrough,playing,waiting,seeking,seeked,ended,durationchange,timeupdate,progress,play,pause,ratechange,volumechange'.split(',');
- vjs.Html5.disposeMediaElement = function(el){
- if (!el) { return; }
- el['player'] = null;
- if (el.parentNode) {
- el.parentNode.removeChild(el);
- }
-
- while(el.hasChildNodes()) {
- el.removeChild(el.firstChild);
- }
-
-
- el.removeAttribute('src');
-
- if (typeof el.load === 'function') {
- el.load();
- }
- };
-
- if (vjs.IS_OLD_ANDROID) {
- document.createElement('video').constructor.prototype.canPlayType = function(type){
- return (type && type.toLowerCase().indexOf('video/mp4') != -1) ? 'maybe' : '';
- };
- }
- vjs.Flash = vjs.MediaTechController.extend({
-
- init: function(player, options, ready){
- vjs.MediaTechController.call(this, player, options, ready);
- var source = options['source'],
-
- parentEl = options['parentEl'],
-
- placeHolder = this.el_ = vjs.createEl('div', { id: player.id() + '_temp_flash' }),
-
- objId = player.id()+'_flash_api',
-
-
-
- playerOptions = player.options_,
-
- flashVars = vjs.obj.merge({
-
- 'readyFunction': 'videojs.Flash.onReady',
- 'eventProxyFunction': 'videojs.Flash.onEvent',
- 'errorEventProxyFunction': 'videojs.Flash.onError',
-
- 'autoplay': playerOptions.autoplay,
- 'preload': playerOptions.preload,
- 'loop': playerOptions.loop,
- 'muted': playerOptions.muted
- }, options['flashVars']),
-
- params = vjs.obj.merge({
- 'wmode': 'opaque',
- 'bgcolor': '#000000'
- }, options['params']),
-
- attributes = vjs.obj.merge({
- 'id': objId,
- 'name': objId,
- 'class': 'vjs-tech'
- }, options['attributes'])
- ;
-
- if (source) {
- if (source.type && vjs.Flash.isStreamingType(source.type)) {
- var parts = vjs.Flash.streamToParts(source.src);
- flashVars['rtmpConnection'] = encodeURIComponent(parts.connection);
- flashVars['rtmpStream'] = encodeURIComponent(parts.stream);
- }
- else {
- flashVars['src'] = encodeURIComponent(vjs.getAbsoluteURL(source.src));
- }
- }
-
- vjs.insertFirst(placeHolder, parentEl);
-
-
- if (options['startTime']) {
- this.ready(function(){
- this.load();
- this.play();
- this.currentTime(options['startTime']);
- });
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- if (options['iFrameMode'] === true && !vjs.IS_FIREFOX) {
-
- var iFrm = vjs.createEl('iframe', {
- 'id': objId + '_iframe',
- 'name': objId + '_iframe',
- 'className': 'vjs-tech',
- 'scrolling': 'no',
- 'marginWidth': 0,
- 'marginHeight': 0,
- 'frameBorder': 0
- });
-
- flashVars['readyFunction'] = 'ready';
- flashVars['eventProxyFunction'] = 'events';
- flashVars['errorEventProxyFunction'] = 'errors';
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- vjs.on(iFrm, 'load', vjs.bind(this, function(){
- var iDoc,
- iWin = iFrm.contentWindow;
-
-
-
-
-
-
-
-
-
- iDoc = iFrm.contentDocument ? iFrm.contentDocument : iFrm.contentWindow.document;
-
-
-
-
-
-
-
-
-
-
-
- iDoc.write(vjs.Flash.getEmbedCode(options['swf'], flashVars, params, attributes));
-
-
- iWin['player'] = this.player_;
-
- iWin['ready'] = vjs.bind(this.player_, function(currSwf){
- var el = iDoc.getElementById(currSwf),
- player = this,
- tech = player.tech;
-
- tech.el_ = el;
-
- vjs.Flash.checkReady(tech);
- });
-
- iWin['events'] = vjs.bind(this.player_, function(swfID, eventName){
- var player = this;
- if (player && player.techName === 'flash') {
- player.trigger(eventName);
- }
- });
-
- iWin['errors'] = vjs.bind(this.player_, function(swfID, eventName){
- vjs.log('Flash Error', eventName);
- });
- }));
-
- placeHolder.parentNode.replaceChild(iFrm, placeHolder);
-
- } else {
- vjs.Flash.embed(options['swf'], placeHolder, flashVars, params, attributes);
- }
- }
- });
- vjs.Flash.prototype.dispose = function(){
- vjs.MediaTechController.prototype.dispose.call(this);
- };
- vjs.Flash.prototype.play = function(){
- this.el_.vjs_play();
- };
- vjs.Flash.prototype.pause = function(){
- this.el_.vjs_pause();
- };
- vjs.Flash.prototype.src = function(src){
- if (vjs.Flash.isStreamingSrc(src)) {
- src = vjs.Flash.streamToParts(src);
- this.setRtmpConnection(src.connection);
- this.setRtmpStream(src.stream);
- }
- else {
-
- src = vjs.getAbsoluteURL(src);
- this.el_.vjs_src(src);
- }
-
-
- if (this.player_.autoplay()) {
- var tech = this;
- setTimeout(function(){ tech.play(); }, 0);
- }
- };
- vjs.Flash.prototype.currentSrc = function(){
- var src = this.el_.vjs_getProperty('currentSrc');
-
- if (src == null) {
- var connection = this.rtmpConnection(),
- stream = this.rtmpStream();
- if (connection && stream) {
- src = vjs.Flash.streamFromParts(connection, stream);
- }
- }
- return src;
- };
- vjs.Flash.prototype.load = function(){
- this.el_.vjs_load();
- };
- vjs.Flash.prototype.poster = function(){
- this.el_.vjs_getProperty('poster');
- };
- vjs.Flash.prototype.buffered = function(){
- return vjs.createTimeRange(0, this.el_.vjs_getProperty('buffered'));
- };
- vjs.Flash.prototype.supportsFullScreen = function(){
- return false;
- };
- vjs.Flash.prototype.enterFullScreen = function(){
- return false;
- };
- var api = vjs.Flash.prototype,
- readWrite = 'rtmpConnection,rtmpStream,preload,currentTime,defaultPlaybackRate,playbackRate,autoplay,loop,mediaGroup,controller,controls,volume,muted,defaultMuted'.split(','),
- readOnly = 'error,currentSrc,networkState,readyState,seeking,initialTime,duration,startOffsetTime,paused,played,seekable,ended,videoTracks,audioTracks,videoWidth,videoHeight,textTracks'.split(',');
-
- var createSetter = function(attr){
- var attrUpper = attr.charAt(0).toUpperCase() + attr.slice(1);
- api['set'+attrUpper] = function(val){ return this.el_.vjs_setProperty(attr, val); };
- };
- var createGetter = function(attr){
- api[attr] = function(){ return this.el_.vjs_getProperty(attr); };
- };
- (function(){
- var i;
-
- for (i = 0; i < readWrite.length; i++) {
- createGetter(readWrite[i]);
- createSetter(readWrite[i]);
- }
-
- for (i = 0; i < readOnly.length; i++) {
- createGetter(readOnly[i]);
- }
- })();
- vjs.Flash.isSupported = function(){
- return vjs.Flash.version()[0] >= 10;
-
- };
- vjs.Flash.canPlaySource = function(srcObj){
- var type;
- if (!srcObj.type) {
- return '';
- }
- type = srcObj.type.replace(/;.*/,'').toLowerCase();
- if (type in vjs.Flash.formats || type in vjs.Flash.streamingFormats) {
- return 'maybe';
- }
- };
- vjs.Flash.formats = {
- 'video/flv': 'FLV',
- 'video/x-flv': 'FLV',
- 'video/mp4': 'MP4',
- 'video/m4v': 'MP4'
- };
- vjs.Flash.streamingFormats = {
- 'rtmp/mp4': 'MP4',
- 'rtmp/flv': 'FLV'
- };
- vjs.Flash['onReady'] = function(currSwf){
- var el = vjs.el(currSwf);
-
-
- var player = el['player'] || el.parentNode['player'],
- tech = player.tech;
-
- el['player'] = player;
-
- tech.el_ = el;
- vjs.Flash.checkReady(tech);
- };
- vjs.Flash.checkReady = function(tech){
-
- if (tech.el().vjs_getProperty) {
-
- tech.triggerReady();
-
- } else {
- setTimeout(function(){
- vjs.Flash.checkReady(tech);
- }, 50);
- }
- };
- vjs.Flash['onEvent'] = function(swfID, eventName){
- var player = vjs.el(swfID)['player'];
- player.trigger(eventName);
- };
- vjs.Flash['onError'] = function(swfID, err){
- var player = vjs.el(swfID)['player'];
- player.trigger('error');
- vjs.log('Flash Error', err, swfID);
- };
- vjs.Flash.version = function(){
- var version = '0,0,0';
-
- try {
- version = new window.ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version').replace(/\D+/g, ',').match(/^,?(.+),?$/)[1];
-
- } catch(e) {
- try {
- if (navigator.mimeTypes['application/x-shockwave-flash'].enabledPlugin){
- version = (navigator.plugins['Shockwave Flash 2.0'] || navigator.plugins['Shockwave Flash']).description.replace(/\D+/g, ',').match(/^,?(.+),?$/)[1];
- }
- } catch(err) {}
- }
- return version.split(',');
- };
- vjs.Flash.embed = function(swf, placeHolder, flashVars, params, attributes){
- var code = vjs.Flash.getEmbedCode(swf, flashVars, params, attributes),
-
- obj = vjs.createEl('div', { innerHTML: code }).childNodes[0],
- par = placeHolder.parentNode
- ;
- placeHolder.parentNode.replaceChild(obj, placeHolder);
-
-
- var newObj = par.childNodes[0];
- setTimeout(function(){
- newObj.style.display = 'block';
- }, 1000);
- return obj;
- };
- vjs.Flash.getEmbedCode = function(swf, flashVars, params, attributes){
- var objTag = '<object type="application/x-shockwave-flash"',
- flashVarsString = '',
- paramsString = '',
- attrsString = '';
-
- if (flashVars) {
- vjs.obj.each(flashVars, function(key, val){
- flashVarsString += (key + '=' + val + '&');
- });
- }
-
- params = vjs.obj.merge({
- 'movie': swf,
- 'flashvars': flashVarsString,
- 'allowScriptAccess': 'always',
- 'allowNetworking': 'all'
- }, params);
-
- vjs.obj.each(params, function(key, val){
- paramsString += '<param name="'+key+'" value="'+val+'" />';
- });
- attributes = vjs.obj.merge({
-
- 'data': swf,
-
- 'width': '100%',
- 'height': '100%'
- }, attributes);
-
- vjs.obj.each(attributes, function(key, val){
- attrsString += (key + '="' + val + '" ');
- });
- return objTag + attrsString + '>' + paramsString + '</object>';
- };
- vjs.Flash.streamFromParts = function(connection, stream) {
- return connection + '&' + stream;
- };
- vjs.Flash.streamToParts = function(src) {
- var parts = {
- connection: '',
- stream: ''
- };
- if (! src) {
- return parts;
- }
-
-
-
- var connEnd = src.indexOf('&');
- var streamBegin;
- if (connEnd !== -1) {
- streamBegin = connEnd + 1;
- }
- else {
-
- connEnd = streamBegin = src.lastIndexOf('/') + 1;
- if (connEnd === 0) {
-
- connEnd = streamBegin = src.length;
- }
- }
- parts.connection = src.substring(0, connEnd);
- parts.stream = src.substring(streamBegin, src.length);
- return parts;
- };
- vjs.Flash.isStreamingType = function(srcType) {
- return srcType in vjs.Flash.streamingFormats;
- };
- vjs.Flash.RTMP_RE = /^rtmp[set]?:\/\//i;
- vjs.Flash.isStreamingSrc = function(src) {
- return vjs.Flash.RTMP_RE.test(src);
- };
- vjs.MediaLoader = vjs.Component.extend({
-
- init: function(player, options, ready){
- vjs.Component.call(this, player, options, ready);
-
-
- if (!player.options_['sources'] || player.options_['sources'].length === 0) {
- for (var i=0,j=player.options_['techOrder']; i<j.length; i++) {
- var techName = vjs.capitalize(j[i]),
- tech = window['videojs'][techName];
-
- if (tech && tech.isSupported()) {
- player.loadTech(techName);
- break;
- }
- }
- } else {
-
-
-
-
- player.src(player.options_['sources']);
- }
- }
- });
- vjs.Player.prototype.textTracks_;
- vjs.Player.prototype.textTracks = function(){
- this.textTracks_ = this.textTracks_ || [];
- return this.textTracks_;
- };
- vjs.Player.prototype.addTextTrack = function(kind, label, language, options){
- var tracks = this.textTracks_ = this.textTracks_ || [];
- options = options || {};
- options['kind'] = kind;
- options['label'] = label;
- options['language'] = language;
-
-
- var Kind = vjs.capitalize(kind || 'subtitles');
-
- var track = new window['videojs'][Kind + 'Track'](this, options);
- tracks.push(track);
-
-
-
-
-
-
-
- return track;
- };
- vjs.Player.prototype.addTextTracks = function(trackList){
- var trackObj;
- for (var i = 0; i < trackList.length; i++) {
- trackObj = trackList[i];
- this.addTextTrack(trackObj['kind'], trackObj['label'], trackObj['language'], trackObj);
- }
- return this;
- };
- vjs.Player.prototype.showTextTrack = function(id, disableSameKind){
- var tracks = this.textTracks_,
- i = 0,
- j = tracks.length,
- track, showTrack, kind;
-
- for (;i<j;i++) {
- track = tracks[i];
- if (track.id() === id) {
- track.show();
- showTrack = track;
-
- } else if (disableSameKind && track.kind() == disableSameKind && track.mode() > 0) {
- track.disable();
- }
- }
-
- kind = (showTrack) ? showTrack.kind() : ((disableSameKind) ? disableSameKind : false);
-
- if (kind) {
- this.trigger(kind+'trackchange');
- }
- return this;
- };
- vjs.TextTrack = vjs.Component.extend({
-
- init: function(player, options){
- vjs.Component.call(this, player, options);
-
-
-
- this.id_ = options['id'] || ('vjs_' + options['kind'] + '_' + options['language'] + '_' + vjs.guid++);
- this.src_ = options['src'];
-
- this.dflt_ = options['default'] || options['dflt'];
- this.title_ = options['title'];
- this.language_ = options['srclang'];
- this.label_ = options['label'];
- this.cues_ = [];
- this.activeCues_ = [];
- this.readyState_ = 0;
- this.mode_ = 0;
- this.player_.on('fullscreenchange', vjs.bind(this, this.adjustFontSize));
- }
- });
- vjs.TextTrack.prototype.kind_;
- vjs.TextTrack.prototype.kind = function(){
- return this.kind_;
- };
- vjs.TextTrack.prototype.src_;
- vjs.TextTrack.prototype.src = function(){
- return this.src_;
- };
- vjs.TextTrack.prototype.dflt_;
- vjs.TextTrack.prototype.dflt = function(){
- return this.dflt_;
- };
- vjs.TextTrack.prototype.title_;
- vjs.TextTrack.prototype.title = function(){
- return this.title_;
- };
- vjs.TextTrack.prototype.language_;
- vjs.TextTrack.prototype.language = function(){
- return this.language_;
- };
- vjs.TextTrack.prototype.label_;
- vjs.TextTrack.prototype.label = function(){
- return this.label_;
- };
- vjs.TextTrack.prototype.cues_;
- vjs.TextTrack.prototype.cues = function(){
- return this.cues_;
- };
- vjs.TextTrack.prototype.activeCues_;
- vjs.TextTrack.prototype.activeCues = function(){
- return this.activeCues_;
- };
- vjs.TextTrack.prototype.readyState_;
- vjs.TextTrack.prototype.readyState = function(){
- return this.readyState_;
- };
- vjs.TextTrack.prototype.mode_;
- vjs.TextTrack.prototype.mode = function(){
- return this.mode_;
- };
- vjs.TextTrack.prototype.adjustFontSize = function(){
- if (this.player_.isFullScreen) {
-
-
-
- this.el_.style.fontSize = screen.width / this.player_.width() * 1.4 * 100 + '%';
- } else {
-
- this.el_.style.fontSize = '';
- }
- };
- vjs.TextTrack.prototype.createEl = function(){
- return vjs.Component.prototype.createEl.call(this, 'div', {
- className: 'vjs-' + this.kind_ + ' vjs-text-track'
- });
- };
- vjs.TextTrack.prototype.show = function(){
- this.activate();
- this.mode_ = 2;
-
- vjs.Component.prototype.show.call(this);
- };
- vjs.TextTrack.prototype.hide = function(){
-
- this.activate();
- this.mode_ = 1;
-
- vjs.Component.prototype.hide.call(this);
- };
- vjs.TextTrack.prototype.disable = function(){
-
- if (this.mode_ == 2) { this.hide(); }
-
- this.deactivate();
-
- this.mode_ = 0;
- };
- vjs.TextTrack.prototype.activate = function(){
-
- if (this.readyState_ === 0) { this.load(); }
-
- if (this.mode_ === 0) {
-
-
- this.player_.on('timeupdate', vjs.bind(this, this.update, this.id_));
-
- this.player_.on('ended', vjs.bind(this, this.reset, this.id_));
-
- if (this.kind_ === 'captions' || this.kind_ === 'subtitles') {
- this.player_.getChild('textTrackDisplay').addChild(this);
- }
- }
- };
- vjs.TextTrack.prototype.deactivate = function(){
-
- this.player_.off('timeupdate', vjs.bind(this, this.update, this.id_));
- this.player_.off('ended', vjs.bind(this, this.reset, this.id_));
- this.reset();
-
- this.player_.getChild('textTrackDisplay').removeChild(this);
- };
- vjs.TextTrack.prototype.load = function(){
-
- if (this.readyState_ === 0) {
- this.readyState_ = 1;
- vjs.get(this.src_, vjs.bind(this, this.parseCues), vjs.bind(this, this.onError));
- }
- };
- vjs.TextTrack.prototype.onError = function(err){
- this.error = err;
- this.readyState_ = 3;
- this.trigger('error');
- };
- vjs.TextTrack.prototype.parseCues = function(srcContent) {
- var cue, time, text,
- lines = srcContent.split('\n'),
- line = '', id;
- for (var i=1, j=lines.length; i<j; i++) {
-
- line = vjs.trim(lines[i]);
- if (line) {
-
-
- if (line.indexOf('-->') == -1) {
- id = line;
-
- line = vjs.trim(lines[++i]);
- } else {
- id = this.cues_.length;
- }
-
- cue = {
- id: id,
- index: this.cues_.length
- };
-
- time = line.split(' --> ');
- cue.startTime = this.parseCueTime(time[0]);
- cue.endTime = this.parseCueTime(time[1]);
-
- text = [];
-
-
- while (lines[++i] && (line = vjs.trim(lines[i]))) {
- text.push(line);
- }
- cue.text = text.join('<br/>');
-
- this.cues_.push(cue);
- }
- }
- this.readyState_ = 2;
- this.trigger('loaded');
- };
- vjs.TextTrack.prototype.parseCueTime = function(timeText) {
- var parts = timeText.split(':'),
- time = 0,
- hours, minutes, other, seconds, ms;
-
-
- if (parts.length == 3) {
- hours = parts[0];
- minutes = parts[1];
- other = parts[2];
- } else {
- hours = 0;
- minutes = parts[0];
- other = parts[1];
- }
-
-
- other = other.split(/\s+/);
-
- seconds = other.splice(0,1)[0];
-
- seconds = seconds.split(/\.|,/);
-
- ms = parseFloat(seconds[1]);
- seconds = seconds[0];
-
- time += parseFloat(hours) * 3600;
-
- time += parseFloat(minutes) * 60;
-
- time += parseFloat(seconds);
-
- if (ms) { time += ms/1000; }
- return time;
- };
- vjs.TextTrack.prototype.update = function(){
- if (this.cues_.length > 0) {
-
- var time = this.player_.currentTime();
-
- if (this.prevChange === undefined || time < this.prevChange || this.nextChange <= time) {
- var cues = this.cues_,
-
- newNextChange = this.player_.duration(),
- newPrevChange = 0,
- reverse = false,
- newCues = [],
-
- firstActiveIndex, lastActiveIndex,
- cue, i;
-
-
- if (time >= this.nextChange || this.nextChange === undefined) {
-
- i = (this.firstActiveIndex !== undefined) ? this.firstActiveIndex : 0;
- } else {
-
- reverse = true;
- i = (this.lastActiveIndex !== undefined) ? this.lastActiveIndex : cues.length - 1;
- }
- while (true) {
- cue = cues[i];
-
- if (cue.endTime <= time) {
- newPrevChange = Math.max(newPrevChange, cue.endTime);
- if (cue.active) {
- cue.active = false;
- }
-
-
-
-
-
- } else if (time < cue.startTime) {
- newNextChange = Math.min(newNextChange, cue.startTime);
- if (cue.active) {
- cue.active = false;
- }
-
- if (!reverse) { break; }
-
- } else {
- if (reverse) {
-
- newCues.splice(0,0,cue);
-
- if (lastActiveIndex === undefined) { lastActiveIndex = i; }
- firstActiveIndex = i;
- } else {
-
- newCues.push(cue);
-
- if (firstActiveIndex === undefined) { firstActiveIndex = i; }
- lastActiveIndex = i;
- }
- newNextChange = Math.min(newNextChange, cue.endTime);
- newPrevChange = Math.max(newPrevChange, cue.startTime);
- cue.active = true;
- }
- if (reverse) {
-
- if (i === 0) { break; } else { i--; }
- } else {
-
- if (i === cues.length - 1) { break; } else { i++; }
- }
- }
- this.activeCues_ = newCues;
- this.nextChange = newNextChange;
- this.prevChange = newPrevChange;
- this.firstActiveIndex = firstActiveIndex;
- this.lastActiveIndex = lastActiveIndex;
- this.updateDisplay();
- this.trigger('cuechange');
- }
- }
- };
- vjs.TextTrack.prototype.updateDisplay = function(){
- var cues = this.activeCues_,
- html = '',
- i=0,j=cues.length;
- for (;i<j;i++) {
- html += '<span class="vjs-tt-cue">'+cues[i].text+'</span>';
- }
- this.el_.innerHTML = html;
- };
- vjs.TextTrack.prototype.reset = function(){
- this.nextChange = 0;
- this.prevChange = this.player_.duration();
- this.firstActiveIndex = 0;
- this.lastActiveIndex = 0;
- };
- vjs.CaptionsTrack = vjs.TextTrack.extend();
- vjs.CaptionsTrack.prototype.kind_ = 'captions';
- vjs.SubtitlesTrack = vjs.TextTrack.extend();
- vjs.SubtitlesTrack.prototype.kind_ = 'subtitles';
- vjs.ChaptersTrack = vjs.TextTrack.extend();
- vjs.ChaptersTrack.prototype.kind_ = 'chapters';
- vjs.TextTrackDisplay = vjs.Component.extend({
-
- init: function(player, options, ready){
- vjs.Component.call(this, player, options, ready);
-
-
-
-
- if (player.options_['tracks'] && player.options_['tracks'].length > 0) {
- this.player_.addTextTracks(player.options_['tracks']);
- }
- }
- });
- vjs.TextTrackDisplay.prototype.createEl = function(){
- return vjs.Component.prototype.createEl.call(this, 'div', {
- className: 'vjs-text-track-display'
- });
- };
- vjs.TextTrackMenuItem = vjs.MenuItem.extend({
-
- init: function(player, options){
- var track = this.track = options['track'];
-
- options['label'] = track.label();
- options['selected'] = track.dflt();
- vjs.MenuItem.call(this, player, options);
- this.player_.on(track.kind() + 'trackchange', vjs.bind(this, this.update));
- }
- });
- vjs.TextTrackMenuItem.prototype.onClick = function(){
- vjs.MenuItem.prototype.onClick.call(this);
- this.player_.showTextTrack(this.track.id_, this.track.kind());
- };
- vjs.TextTrackMenuItem.prototype.update = function(){
- this.selected(this.track.mode() == 2);
- };
- vjs.OffTextTrackMenuItem = vjs.TextTrackMenuItem.extend({
-
- init: function(player, options){
-
-
- options['track'] = {
- kind: function() { return options['kind']; },
- player: player,
- label: function(){ return options['kind'] + ' off'; },
- dflt: function(){ return false; },
- mode: function(){ return false; }
- };
- vjs.TextTrackMenuItem.call(this, player, options);
- this.selected(true);
- }
- });
- vjs.OffTextTrackMenuItem.prototype.onClick = function(){
- vjs.TextTrackMenuItem.prototype.onClick.call(this);
- this.player_.showTextTrack(this.track.id_, this.track.kind());
- };
- vjs.OffTextTrackMenuItem.prototype.update = function(){
- var tracks = this.player_.textTracks(),
- i=0, j=tracks.length, track,
- off = true;
- for (;i<j;i++) {
- track = tracks[i];
- if (track.kind() == this.track.kind() && track.mode() == 2) {
- off = false;
- }
- }
- this.selected(off);
- };
- vjs.TextTrackButton = vjs.MenuButton.extend({
-
- init: function(player, options){
- vjs.MenuButton.call(this, player, options);
- if (this.items.length <= 1) {
- this.hide();
- }
- }
- });
- vjs.TextTrackButton.prototype.createItems = function(){
- var items = [], track;
-
- items.push(new vjs.OffTextTrackMenuItem(this.player_, { 'kind': this.kind_ }));
- for (var i = 0; i < this.player_.textTracks().length; i++) {
- track = this.player_.textTracks()[i];
- if (track.kind() === this.kind_) {
- items.push(new vjs.TextTrackMenuItem(this.player_, {
- 'track': track
- }));
- }
- }
- return items;
- };
- vjs.CaptionsButton = vjs.TextTrackButton.extend({
-
- init: function(player, options, ready){
- vjs.TextTrackButton.call(this, player, options, ready);
- this.el_.setAttribute('aria-label','Captions Menu');
- }
- });
- vjs.CaptionsButton.prototype.kind_ = 'captions';
- vjs.CaptionsButton.prototype.buttonText = 'Captions';
- vjs.CaptionsButton.prototype.className = 'vjs-captions-button';
- vjs.SubtitlesButton = vjs.TextTrackButton.extend({
-
- init: function(player, options, ready){
- vjs.TextTrackButton.call(this, player, options, ready);
- this.el_.setAttribute('aria-label','Subtitles Menu');
- }
- });
- vjs.SubtitlesButton.prototype.kind_ = 'subtitles';
- vjs.SubtitlesButton.prototype.buttonText = 'Subtitles';
- vjs.SubtitlesButton.prototype.className = 'vjs-subtitles-button';
- vjs.ChaptersButton = vjs.TextTrackButton.extend({
-
- init: function(player, options, ready){
- vjs.TextTrackButton.call(this, player, options, ready);
- this.el_.setAttribute('aria-label','Chapters Menu');
- }
- });
- vjs.ChaptersButton.prototype.kind_ = 'chapters';
- vjs.ChaptersButton.prototype.buttonText = 'Chapters';
- vjs.ChaptersButton.prototype.className = 'vjs-chapters-button';
- vjs.ChaptersButton.prototype.createItems = function(){
- var items = [], track;
- for (var i = 0; i < this.player_.textTracks().length; i++) {
- track = this.player_.textTracks()[i];
- if (track.kind() === this.kind_) {
- items.push(new vjs.TextTrackMenuItem(this.player_, {
- 'track': track
- }));
- }
- }
- return items;
- };
- vjs.ChaptersButton.prototype.createMenu = function(){
- var tracks = this.player_.textTracks(),
- i = 0,
- j = tracks.length,
- track, chaptersTrack,
- items = this.items = [];
- for (;i<j;i++) {
- track = tracks[i];
- if (track.kind() == this.kind_ && track.dflt()) {
- if (track.readyState() < 2) {
- this.chaptersTrack = track;
- track.on('loaded', vjs.bind(this, this.createMenu));
- return;
- } else {
- chaptersTrack = track;
- break;
- }
- }
- }
- var menu = this.menu = new vjs.Menu(this.player_);
- menu.el_.appendChild(vjs.createEl('li', {
- className: 'vjs-menu-title',
- innerHTML: vjs.capitalize(this.kind_),
- tabindex: -1
- }));
- if (chaptersTrack) {
- var cues = chaptersTrack.cues_, cue, mi;
- i = 0;
- j = cues.length;
- for (;i<j;i++) {
- cue = cues[i];
- mi = new vjs.ChaptersTrackMenuItem(this.player_, {
- 'track': chaptersTrack,
- 'cue': cue
- });
- items.push(mi);
- menu.addChild(mi);
- }
- }
- if (this.items.length > 0) {
- this.show();
- }
- return menu;
- };
- vjs.ChaptersTrackMenuItem = vjs.MenuItem.extend({
-
- init: function(player, options){
- var track = this.track = options['track'],
- cue = this.cue = options['cue'],
- currentTime = player.currentTime();
-
- options['label'] = cue.text;
- options['selected'] = (cue.startTime <= currentTime && currentTime < cue.endTime);
- vjs.MenuItem.call(this, player, options);
- track.on('cuechange', vjs.bind(this, this.update));
- }
- });
- vjs.ChaptersTrackMenuItem.prototype.onClick = function(){
- vjs.MenuItem.prototype.onClick.call(this);
- this.player_.currentTime(this.cue.startTime);
- this.update(this.cue.startTime);
- };
- vjs.ChaptersTrackMenuItem.prototype.update = function(){
- var cue = this.cue,
- currentTime = this.player_.currentTime();
-
- this.selected(cue.startTime <= currentTime && currentTime < cue.endTime);
- };
- vjs.obj.merge(vjs.ControlBar.prototype.options_['children'], {
- 'subtitlesButton': {},
- 'captionsButton': {},
- 'chaptersButton': {}
- });
- vjs.JSON;
- if (typeof window.JSON !== 'undefined' && window.JSON.parse === 'function') {
- vjs.JSON = window.JSON;
- } else {
- vjs.JSON = {};
- var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
-
- vjs.JSON.parse = function (text, reviver) {
- var j;
- function walk(holder, key) {
- var k, v, value = holder[key];
- if (value && typeof value === 'object') {
- for (k in value) {
- if (Object.prototype.hasOwnProperty.call(value, k)) {
- v = walk(value, k);
- if (v !== undefined) {
- value[k] = v;
- } else {
- delete value[k];
- }
- }
- }
- }
- return reviver.call(holder, key, value);
- }
- text = String(text);
- cx.lastIndex = 0;
- if (cx.test(text)) {
- text = text.replace(cx, function (a) {
- return '\\u' +
- ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
- });
- }
- if (/^[\],:{}\s]*$/
- .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@')
- .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
- .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
- j = eval('(' + text + ')');
- return typeof reviver === 'function' ?
- walk({'': j}, '') : j;
- }
- throw new SyntaxError('JSON.parse(): invalid or malformed JSON data');
- };
- }
- vjs.autoSetup = function(){
- var options, vid, player,
- vids = document.getElementsByTagName('video');
-
- if (vids && vids.length > 0) {
- for (var i=0,j=vids.length; i<j; i++) {
- vid = vids[i];
-
-
- if (vid && vid.getAttribute) {
-
- if (vid['player'] === undefined) {
- options = vid.getAttribute('data-setup');
-
-
- if (options !== null) {
-
-
- options = vjs.JSON.parse(options || '{}');
-
- player = videojs(vid, options);
- }
- }
-
- } else {
- vjs.autoSetupTimeout(1);
- break;
- }
- }
-
- } else if (!vjs.windowLoaded) {
- vjs.autoSetupTimeout(1);
- }
- };
- vjs.autoSetupTimeout = function(wait){
- setTimeout(vjs.autoSetup, wait);
- };
- if (document.readyState === 'complete') {
- vjs.windowLoaded = true;
- } else {
- vjs.one(window, 'load', function(){
- vjs.windowLoaded = true;
- });
- }
- vjs.autoSetupTimeout(1);
- vjs.plugin = function(name, init){
- vjs.Player.prototype[name] = init;
- };
|