123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372 |
- (function (global, factory) {
- if (typeof define === 'function' && define.amd)
- define(function() { return factory(global, global.document, undefined); });
- else if (typeof module === 'object' && typeof module.exports === 'object')
- module.exports = factory(global, global.document, undefined);
- else
- factory(global, global.document, undefined);
- }(typeof window !== 'undefined' ? window : this,
- function(window, document, undefined) {
- 'use strict';
- var PLUGINNAME = 'OverlayScrollbars';
- var TYPES = {
- o : 'object',
- f : 'function',
- a : 'array',
- s : 'string',
- b : 'boolean',
- n : 'number',
- u : 'undefined',
- z : 'null'
-
-
-
-
- };
- var LEXICON = {
- c : 'class',
- s : 'style',
- i : 'id',
- l : 'length',
- p : 'prototype',
- oH : 'offsetHeight',
- cH : 'clientHeight',
- sH : 'scrollHeight',
- oW : 'offsetWidth',
- cW : 'clientWidth',
- sW : 'scrollWidth'
- };
- var VENDORS = {
-
- _jsCache : { },
- _cssCache : { },
- _cssPrefixes : ['-webkit-', '-moz-', '-o-', '-ms-'],
- _jsPrefixes : ['WebKit', 'Moz', 'O', 'MS'],
- _cssProperty : function(name) {
- var cache = this._cssCache;
- if(cache[name])
- return cache[name];
- var prefixes = this._cssPrefixes;
- var uppercasedName = this._firstLetterToUpper(name);
- var elmStyle = document.createElement('div')[LEXICON.s];
- var resultPossibilities;
- var i = 0;
- var v = 0;
- var currVendorWithoutDashes;
- for (; i < prefixes.length; i++) {
- currVendorWithoutDashes = prefixes[i].replace(/-/g, '');
- resultPossibilities = [
- name,
- prefixes[i] + name,
- currVendorWithoutDashes + uppercasedName,
- this._firstLetterToUpper(currVendorWithoutDashes) + uppercasedName
- ];
- for(v = 0; v < resultPossibilities[LEXICON.l]; v++) {
- if(elmStyle[resultPossibilities[v]] !== undefined) {
- cache[name] = resultPossibilities[v];
- return resultPossibilities[v];
- }
- }
- }
- return null;
- },
- _jsAPI : function(name, isInterface, fallback) {
- var prefixes = this._jsPrefixes;
- var cache = this._jsCache;
- var i = 0;
- var result = cache[name];
- if(!result) {
- result = window[name];
- for(; i < prefixes[LEXICON.l]; i++)
- result = result || window[(isInterface ? prefixes[i] : prefixes[i].toLowerCase()) + this._firstLetterToUpper(name)];
- cache[name] = result;
- }
- return result || fallback;
- },
- _firstLetterToUpper : function(str) {
- return str.charAt(0).toUpperCase() + str.slice(1);
- }
- };
- var COMPATIBILITY = {
-
- wW: function() {
- return window.innerWidth || document.documentElement[LEXICON.cW] || document.body[LEXICON.cW];
- },
-
- wH: function() {
- return window.innerHeight || document.documentElement[LEXICON.cH] || document.body[LEXICON.cH];
- },
-
- mO: function() {
- return VENDORS._jsAPI('MutationObserver', true);
- },
-
- rO: function() {
- return VENDORS._jsAPI('ResizeObserver', true);
- },
-
- rAF: function() {
- return VENDORS._jsAPI('requestAnimationFrame', false, function (func) { return window.setTimeout(func, 1000 / 60); });
- },
-
- cAF: function() {
- return VENDORS._jsAPI('cancelAnimationFrame', false, function (id) { return window.clearTimeout(id); });
- },
-
- now: function() {
- return Date.now && Date.now() || new Date().getTime();
- },
-
- stpP: function(event) {
- if(event.stopPropagation)
- event.stopPropagation();
- else
- event.cancelBubble = true;
- },
-
- prvD: function(event) {
- if(event.preventDefault && event.cancelable)
- event.preventDefault();
- else
- event.returnValue = false;
- },
-
- page: function(event) {
- event = event.originalEvent || event;
- var strPage = 'page';
- var strClient = 'client';
- var strX = 'X';
- var strY = 'Y';
- var target = event.target || event.srcElement || document;
- var eventDoc = target.ownerDocument || document;
- var doc = eventDoc.documentElement;
- var body = eventDoc.body;
-
- if(event.touches !== undefined) {
- var touch = event.touches[0];
- return {
- x : touch[strPage + strX],
- y : touch[strPage + strY]
- }
- }
-
- if (!event[strPage + strX] && event[strClient + strX] && event[strClient + strX] != null) {
- return {
- x : event[strClient + strX] +
- (doc && doc.scrollLeft || body && body.scrollLeft || 0) -
- (doc && doc.clientLeft || body && body.clientLeft || 0),
- y : event[strClient + strY] +
- (doc && doc.scrollTop || body && body.scrollTop || 0) -
- (doc && doc.clientTop || body && body.clientTop || 0)
- }
- }
- return {
- x : event[strPage + strX],
- y : event[strPage + strY]
- };
- },
-
- mBtn: function(event) {
- var button = event.button;
- if (!event.which && button !== undefined)
- return (button & 1 ? 1 : (button & 2 ? 3 : (button & 4 ? 2 : 0)));
- else
- return event.which;
- },
-
- inA : function(item, arr) {
- for (var i = 0; i < arr[LEXICON.l]; i++)
-
- try {
- if (arr[i] === item)
- return i;
- }
- catch(e) { }
- return -1;
- },
-
- isA: function(arr) {
- var def = Array.isArray;
- return def ? def(arr) : this.type(arr) == TYPES.a;
- },
-
- type: function(obj) {
- if (obj === undefined)
- return obj + "";
- if (obj === null)
- return obj + "";
- return Object[LEXICON.p].toString.call(obj).replace(/^\[object (.+)\]$/, '$1').toLowerCase();
- },
- bind: function(func, thisObj) {
- if (typeof func != TYPES.f) {
- throw "Can't bind function!";
-
-
-
- }
- var proto = LEXICON.p;
- var aArgs = Array[proto].slice.call(arguments, 2);
- var fNOP = function() {};
- var fBound = function() { return func.apply(this instanceof fNOP ? this : thisObj, aArgs.concat(Array[proto].slice.call(arguments))); };
- if (func[proto])
- fNOP[proto] = func[proto];
- fBound[proto] = new fNOP();
- return fBound;
- }
-
- };
- var MATH = Math;
- var JQUERY = window.jQuery;
- var EASING = (function() {
- var _easingsMath = {
- p : MATH.PI,
- c : MATH.cos,
- s : MATH.sin,
- w : MATH.pow,
- t : MATH.sqrt,
- n : MATH.asin,
- a : MATH.abs,
- o : 1.70158
- };
-
-
- return {
- swing: function (x, t, b, c, d) {
- return 0.5 - _easingsMath.c(x * _easingsMath.p) / 2;
- },
- linear: function(x, t, b, c, d) {
- return x;
- },
- easeInQuad: function (x, t, b, c, d) {
- return c*(t/=d)*t + b;
- },
- easeOutQuad: function (x, t, b, c, d) {
- return -c *(t/=d)*(t-2) + b;
- },
- easeInOutQuad: function (x, t, b, c, d) {
- return ((t/=d/2) < 1) ? c/2*t*t + b : -c/2 * ((--t)*(t-2) - 1) + b;
- },
- easeInCubic: function (x, t, b, c, d) {
- return c*(t/=d)*t*t + b;
- },
- easeOutCubic: function (x, t, b, c, d) {
- return c*((t=t/d-1)*t*t + 1) + b;
- },
- easeInOutCubic: function (x, t, b, c, d) {
- return ((t/=d/2) < 1) ? c/2*t*t*t + b : c/2*((t-=2)*t*t + 2) + b;
- },
- easeInQuart: function (x, t, b, c, d) {
- return c*(t/=d)*t*t*t + b;
- },
- easeOutQuart: function (x, t, b, c, d) {
- return -c * ((t=t/d-1)*t*t*t - 1) + b;
- },
- easeInOutQuart: function (x, t, b, c, d) {
- return ((t/=d/2) < 1) ? c/2*t*t*t*t + b : -c/2 * ((t-=2)*t*t*t - 2) + b;
- },
- easeInQuint: function (x, t, b, c, d) {
- return c*(t/=d)*t*t*t*t + b;
- },
- easeOutQuint: function (x, t, b, c, d) {
- return c*((t=t/d-1)*t*t*t*t + 1) + b;
- },
- easeInOutQuint: function (x, t, b, c, d) {
- return ((t/=d/2) < 1) ? c/2*t*t*t*t*t + b : c/2*((t-=2)*t*t*t*t + 2) + b;
- },
- easeInSine: function (x, t, b, c, d) {
- return -c * _easingsMath.c(t/d * (_easingsMath.p/2)) + c + b;
- },
- easeOutSine: function (x, t, b, c, d) {
- return c * _easingsMath.s(t/d * (_easingsMath.p/2)) + b;
- },
- easeInOutSine: function (x, t, b, c, d) {
- return -c/2 * (_easingsMath.c(_easingsMath.p*t/d) - 1) + b;
- },
- easeInExpo: function (x, t, b, c, d) {
- return (t==0) ? b : c * _easingsMath.w(2, 10 * (t/d - 1)) + b;
- },
- easeOutExpo: function (x, t, b, c, d) {
- return (t==d) ? b+c : c * (-_easingsMath.w(2, -10 * t/d) + 1) + b;
- },
- easeInOutExpo: function (x, t, b, c, d) {
- if (t==0) return b;
- if (t==d) return b+c;
- if ((t/=d/2) < 1) return c/2 * _easingsMath.w(2, 10 * (t - 1)) + b;
- return c/2 * (-_easingsMath.w(2, -10 * --t) + 2) + b;
- },
- easeInCirc: function (x, t, b, c, d) {
- return -c * (_easingsMath.t(1 - (t/=d)*t) - 1) + b;
- },
- easeOutCirc: function (x, t, b, c, d) {
- return c * _easingsMath.t(1 - (t=t/d-1)*t) + b;
- },
- easeInOutCirc: function (x, t, b, c, d) {
- return ((t/=d/2) < 1) ? -c/2 * (_easingsMath.t(1 - t*t) - 1) + b : c/2 * (_easingsMath.t(1 - (t-=2)*t) + 1) + b;
- },
- easeInElastic: function (x, t, b, c, d) {
- var s=_easingsMath.o;var p=0;var a=c;
- if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
- if (a < _easingsMath.a(c)) { a=c; s=p/4; }
- else s = p/(2*_easingsMath.p) * _easingsMath.n (c/a);
- return -(a*_easingsMath.w(2,10*(t-=1)) * _easingsMath.s( (t*d-s)*(2*_easingsMath.p)/p )) + b;
- },
- easeOutElastic: function (x, t, b, c, d) {
- var s=_easingsMath.o;var p=0;var a=c;
- if (t==0) return b;
- if ((t/=d)==1) return b+c;
- if (!p) p=d*.3;
- if (a < _easingsMath.a(c)) { a=c; s=p/4; }
- else s = p/(2*_easingsMath.p) * _easingsMath.n (c/a);
- return a*_easingsMath.w(2,-10*t) * _easingsMath.s( (t*d-s)*(2*_easingsMath.p)/p ) + c + b;
- },
- easeInOutElastic: function (x, t, b, c, d) {
- var s=_easingsMath.o;var p=0;var a=c;
- if (t==0) return b;
- if ((t/=d/2)==2) return b+c;
- if (!p) p=d*(.3*1.5);
- if (a < _easingsMath.a(c)) { a=c; s=p/4; }
- else s = p/(2*_easingsMath.p) * _easingsMath.n (c/a);
- if (t < 1) return -.5*(a*_easingsMath.w(2,10*(t-=1)) * _easingsMath.s( (t*d-s)*(2*_easingsMath.p)/p )) + b;
- return a*_easingsMath.w(2,-10*(t-=1)) * _easingsMath.s( (t*d-s)*(2*_easingsMath.p)/p )*.5 + c + b;
- },
- easeInBack: function (x, t, b, c, d, s) {
- s = s || _easingsMath.o;
- return c*(t/=d)*t*((s+1)*t - s) + b;
- },
- easeOutBack: function (x, t, b, c, d, s) {
- s = s || _easingsMath.o;
- return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
- },
- easeInOutBack: function (x, t, b, c, d, s) {
- s = s || _easingsMath.o;
- return ((t/=d/2) < 1) ? c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b : c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
- },
- easeInBounce: function (x, t, b, c, d) {
- return c - this.easeOutBounce (x, d-t, 0, c, d) + b;
- },
- easeOutBounce: function (x, t, b, c, d) {
- var o = 7.5625;
- if ((t/=d) < (1/2.75)) {
- return c*(o*t*t) + b;
- } else if (t < (2/2.75)) {
- return c*(o*(t-=(1.5/2.75))*t + .75) + b;
- } else if (t < (2.5/2.75)) {
- return c*(o*(t-=(2.25/2.75))*t + .9375) + b;
- } else {
- return c*(o*(t-=(2.625/2.75))*t + .984375) + b;
- }
- },
- easeInOutBounce: function (x, t, b, c, d) {
- return (t < d/2) ? this.easeInBounce (x, t*2, 0, c, d) * .5 + b : this.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
- }
- };
-
- })();
- var FRAMEWORK = (function() {
- var _rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
- var _strSpace = ' ';
- var _strEmpty = '';
- var _strScrollLeft = 'scrollLeft';
- var _strScrollTop = 'scrollTop';
- var _animations = [ ];
- var _type = COMPATIBILITY.type;
- var _cssNumber = {
- "animationIterationCount": true,
- "columnCount": true,
- "fillOpacity": true,
- "flexGrow": true,
- "flexShrink": true,
- "fontWeight": true,
- "lineHeight": true,
- "opacity": true,
- "order": true,
- "orphans": true,
- "widows": true,
- "zIndex": true,
- "zoom": true
- };
- var extend = function() {
- var src, copyIsArray, copy, name, options, clone, target = arguments[0] || {},
- i = 1,
- length = arguments[LEXICON.l],
- deep = false;
-
- if (_type(target) == TYPES.b) {
- deep = target;
- target = arguments[1] || {};
-
- i = 2;
- }
-
- if (_type(target) != TYPES.o && !_type(target) == TYPES.f) {
- target = {};
- }
-
- if (length === i) {
- target = FakejQuery;
- --i;
- }
- for (; i < length; i++) {
-
- if ((options = arguments[i]) != null) {
-
- for (name in options) {
- src = target[name];
- copy = options[name];
-
- if (target === copy) {
- continue;
- }
-
- if (deep && copy && (isPlainObject(copy) || (copyIsArray = COMPATIBILITY.isA(copy)))) {
- if (copyIsArray) {
- copyIsArray = false;
- clone = src && COMPATIBILITY.isA(src) ? src : [];
- } else {
- clone = src && isPlainObject(src) ? src : {};
- }
-
- target[name] = extend(deep, clone, copy);
-
- } else if (copy !== undefined) {
- target[name] = copy;
- }
- }
- }
- }
-
- return target;
- };
- var inArray = function(item, arr, fromIndex) {
- for (var i = fromIndex || 0; i < arr[LEXICON.l]; i++)
- if (arr[i] === item)
- return i;
- return -1;
- }
-
- var isFunction = function(obj) {
- return _type(obj) == TYPES.f;
- };
- var isEmptyObject = function(obj) {
- for (var name in obj )
- return false;
- return true;
- };
- var isPlainObject = function(obj) {
- if (!obj || _type(obj) != TYPES.o)
- return false;
- var key;
- var proto = LEXICON.p;
- var hasOwnProperty = Object[proto].hasOwnProperty;
- var hasOwnConstructor = hasOwnProperty.call(obj, 'constructor');
- var hasIsPrototypeOf = obj.constructor && obj.constructor[proto] && hasOwnProperty.call(obj.constructor[proto], 'isPrototypeOf');
- if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {
- return false;
- }
- for (key in obj) {
- return function (target, instance) {
- var argLen = arguments[LEXICON.l];
- if(argLen < 1) {
-
- return _targets;
- }
- else {
- if(instance) {
-
- target[_instancePropertyString] = instance;
- _targets.push(target);
- }
- else {
- var index = COMPATIBILITY.inA(target, _targets);
- if (index > -1) {
- if(argLen > 1) {
-
- delete target[_instancePropertyString];
- _targets.splice(index, 1);
- }
- else {
-
- return _targets[index][_instancePropertyString];
- }
- }
- }
- }
- }
- })();
- var PLUGIN = (function() {
- var _pluginsGlobals;
- var _pluginsAutoUpdateLoop;
- var _pluginsExtensions = [ ];
- var _pluginsOptions = (function() {
- var possibleTemplateTypes = [
- TYPES.b,
- TYPES.n,
- TYPES.s,
- TYPES.a,
- TYPES.o,
- TYPES.f,
- TYPES.z
- ];
- var restrictedStringsSplit = ' ';
- var restrictedStringsPossibilitiesSplit = ':';
- var classNameAllowedValues = [TYPES.z, TYPES.s];
- var numberAllowedValues = TYPES.n;
- var booleanNullAllowedValues = [TYPES.z, TYPES.b];
- var booleanTrueTemplate = [true, TYPES.b];
- var booleanFalseTemplate = [false, TYPES.b];
- var callbackTemplate = [null, [TYPES.z, TYPES.f]];
- var inheritedAttrsTemplate = [['style', 'class'], [TYPES.s, TYPES.a, TYPES.z]];
- var resizeAllowedValues = 'n:none b:both h:horizontal v:vertical';
- var overflowBehaviorAllowedValues = 'v-h:visible-hidden v-s:visible-scroll s:scroll h:hidden';
- var scrollbarsVisibilityAllowedValues = 'v:visible h:hidden a:auto';
- var scrollbarsAutoHideAllowedValues = 'n:never s:scroll l:leave m:move';
- var optionsDefaultsAndTemplate = {
- className: ['os-theme-dark', classNameAllowedValues],
- resize: ['none', resizeAllowedValues],
- sizeAutoCapable: booleanTrueTemplate,
- clipAlways: booleanTrueTemplate,
- normalizeRTL: booleanTrueTemplate,
- paddingAbsolute: booleanFalseTemplate,
- autoUpdate: [null, booleanNullAllowedValues],
- autoUpdateInterval: [33, numberAllowedValues],
- nativeScrollbarsOverlaid: {
- showNativeScrollbars: booleanFalseTemplate,
- initialize: booleanTrueTemplate
- },
- overflowBehavior: {
- x: ['scroll', overflowBehaviorAllowedValues],
- y: ['scroll', overflowBehaviorAllowedValues]
- },
- scrollbars: {
- visibility: ['auto', scrollbarsVisibilityAllowedValues],
- autoHide: ['never', scrollbarsAutoHideAllowedValues],
- autoHideDelay: [800, numberAllowedValues],
- dragScrolling: booleanTrueTemplate,
- clickScrolling: booleanFalseTemplate,
- touchSupport: booleanTrueTemplate,
- snapHandle: booleanFalseTemplate
- },
- textarea: {
- dynWidth: booleanFalseTemplate,
- dynHeight: booleanFalseTemplate,
- inheritedAttrs : inheritedAttrsTemplate
- },
- callbacks: {
- onInitialized: callbackTemplate,
- onInitializationWithdrawn: callbackTemplate,
- onDestroyed: callbackTemplate,
- onScrollStart: callbackTemplate,
- onScroll: callbackTemplate,
- onScrollStop: callbackTemplate,
- onOverflowChanged: callbackTemplate,
- onOverflowAmountChanged: callbackTemplate,
- onDirectionChanged: callbackTemplate,
- onContentSizeChanged: callbackTemplate,
- onHostSizeChanged: callbackTemplate,
- onUpdated: callbackTemplate
- }
- };
- var convert = function(template) {
- var recursive = function(obj) {
- var key;
- var val;
- var valType;
- for(key in obj) {
- if(!obj.hasOwnProperty(key))
- continue;
- val = obj[key];
- valType = COMPATIBILITY.type(val);
- if(valType == TYPES.a)
- obj[key] = val[template ? 1 : 0];
- else if(valType == TYPES.o)
- obj[key] = recursive(val);
- }
- return obj;
- };
- return recursive(FRAMEWORK.extend(true, { }, optionsDefaultsAndTemplate));
- };
- return {
- _defaults : convert(),
- _template : convert(true),
-
- _validate : function (obj, template, writeErrors, usePreparedValues, keepForeignProps) {
- var validatedOptions = { };
- var objectCopy = FRAMEWORK.extend(true, { }, obj);
- var checkObjectProps = function(data, template, validatedOptions, prevPropName) {
- for (var prop in template) {
- if (template.hasOwnProperty(prop) && data.hasOwnProperty(prop)) {
- var isValid = false;
- var templateValue = template[prop];
- var templateValueType = COMPATIBILITY.type(templateValue);
- var templateIsComplext = templateValueType == TYPES.o;
- var templateTypes = COMPATIBILITY.type(templateValue) != TYPES.a ? [ templateValue ] : templateValue;
- var dataValue = data[prop];
- var dataValueType = COMPATIBILITY.type(dataValue);
- var propPrefix = prevPropName ? prevPropName + "." : "";
- var error = "The option \"" + propPrefix + prop + "\" wasn't set, because";
- var errorPossibleTypes = [ ];
- var errorRestrictedStrings = [ ];
- var restrictedStringValuesSplit;
- var restrictedStringValuesPossibilitiesSplit;
- var isRestrictedValue;
- var mainPossibility;
- var currType;
- var i;
- var v;
- var j;
-
- if(templateIsComplext && dataValueType == TYPES.o) {
- validatedOptions[prop] = { };
- checkObjectProps(dataValue, templateValue, validatedOptions[prop], propPrefix + prop);
- if(FRAMEWORK.isEmptyObject(dataValue))
- delete data[prop];
- }
- else if(!templateIsComplext) {
- for(i = 0; i < templateTypes.length; i++) {
- currType = templateTypes[i];
- templateValueType = COMPATIBILITY.type(currType);
-
- isRestrictedValue = templateValueType == TYPES.s && FRAMEWORK.inArray(currType, possibleTemplateTypes) === -1;
- if(isRestrictedValue) {
- errorPossibleTypes.push(TYPES.s);
-
- restrictedStringValuesSplit = currType.split(restrictedStringsSplit);
- errorRestrictedStrings = errorRestrictedStrings.concat(restrictedStringValuesSplit);
- for(v = 0; v < restrictedStringValuesSplit.length; v++) {
-
- restrictedStringValuesPossibilitiesSplit = restrictedStringValuesSplit[v].split(restrictedStringsPossibilitiesSplit);
- mainPossibility = restrictedStringValuesPossibilitiesSplit[0];
- for(j = 0; j < restrictedStringValuesPossibilitiesSplit.length; j++) {
-
- if(dataValue === restrictedStringValuesPossibilitiesSplit[j]) {
- isValid = true;
- break;
- }
- }
- if(isValid)
- break;
- }
- }
- else {
- errorPossibleTypes.push(currType);
- if(dataValueType === currType) {
- isValid = true;
- break;
- }
- }
- }
- if(isValid) {
- validatedOptions[prop] = isRestrictedValue && usePreparedValues ? mainPossibility : dataValue;
- }
- else if(writeErrors) {
- console.warn(error + " it doesn't accept the type [ " + dataValueType.toUpperCase() + " ] with the value of \"" + dataValue + "\".\r\n" +
- "Accepted types are: [ " + errorPossibleTypes.join(", ").toUpperCase() + " ]." +
- (errorRestrictedStrings.length > 0 ? "\r\nValid strings are: [ " + errorRestrictedStrings.join(", ").split(restrictedStringsPossibilitiesSplit).join(", ") + " ]." : ""));
- }
- delete data[prop];
- }
- }
- }
- };
- checkObjectProps(objectCopy, template, validatedOptions);
-
- if(keepForeignProps)
- FRAMEWORK.extend(true, validatedOptions, objectCopy);
- else if(!FRAMEWORK.isEmptyObject(objectCopy) && writeErrors)
- console.warn("The following options are discarded due to invalidity:\r\n" + window.JSON.stringify(objectCopy, null, 2));
- return validatedOptions;
- }
- }
- }());
-
- function initOverlayScrollbarsStatics() {
- if(!_pluginsGlobals)
- _pluginsGlobals = new OverlayScrollbarsGlobals(_pluginsOptions._defaults);
- if(!_pluginsAutoUpdateLoop)
- _pluginsAutoUpdateLoop = new OverlayScrollbarsAutoUpdateLoop(_pluginsGlobals);
- }
-
- function OverlayScrollbarsGlobals(defaultOptions) {
- var _base = this;
- var strOverflow = 'overflow';
- var strHidden = 'hidden';
- var strScroll = 'scroll';
- var bodyElement = FRAMEWORK('body');
- var scrollbarDummyElement = FRAMEWORK('<div id="os-dummy-scrollbar-size"><div></div></div>');
- var scrollbarDummyElement0 = scrollbarDummyElement[0];
- var dummyContainerChild = FRAMEWORK(scrollbarDummyElement.children('div').eq(0));
- bodyElement.append(scrollbarDummyElement);
- scrollbarDummyElement.hide().show();
- var nativeScrollbarSize = calcNativeScrollbarSize(scrollbarDummyElement0);
- var nativeScrollbarIsOverlaid = {
- x: nativeScrollbarSize.x === 0,
- y: nativeScrollbarSize.y === 0
- };
- FRAMEWORK.extend(_base, {
- defaultOptions : defaultOptions,
- autoUpdateLoop : false,
- autoUpdateRecommended : !COMPATIBILITY.mO(),
- nativeScrollbarSize : nativeScrollbarSize,
- nativeScrollbarIsOverlaid : nativeScrollbarIsOverlaid,
- nativeScrollbarStyling : (function() {
- scrollbarDummyElement.addClass('os-viewport-native-scrollbars-invisible');
-
-
- scrollbarDummyElement.css(strOverflow, strHidden).hide().css(strOverflow, strScroll).show();
- return (scrollbarDummyElement0[LEXICON.oH] - scrollbarDummyElement0[LEXICON.cH]) === 0 && (scrollbarDummyElement0[LEXICON.oW] - scrollbarDummyElement0[LEXICON.cW]) === 0;
- })(),
- overlayScrollbarDummySize : { x: 30, y: 30 },
- msie : (function() {
- var ua = window.navigator.userAgent;
- var strIndexOf = 'indexOf';
- var strSubString = 'substring';
- var msie = ua[strIndexOf]('MSIE ');
- var trident = ua[strIndexOf]('Trident/');
- var edge = ua[strIndexOf]('Edge/');
- var rv = ua[strIndexOf]('rv:');
- var result;
- var parseIntFunc = parseInt;
-
- if (msie > 0)
- result = parseIntFunc(ua[strSubString](msie + 5, ua[strIndexOf]('.', msie)), 10);
-
- else if (trident > 0)
- result = parseIntFunc(ua[strSubString](rv + 3, ua[strIndexOf]('.', rv)), 10);
-
- else if (edge > 0)
- result = parseIntFunc(ua[strSubString](edge + 5, ua[strIndexOf]('.', edge)), 10);
-
- return result;
- })(),
- cssCalc : (function() {
- var dummyStyle = document.createElement('div')[LEXICON.s];
- var strCalc = 'calc';
- var i = -1;
- var prop;
- for(; i < VENDORS._cssPrefixes[LEXICON.l]; i++) {
- prop = i < 0 ? strCalc : VENDORS._cssPrefixes[i] + strCalc;
- dummyStyle.cssText = 'width:' + prop + '(1px);';
- if (dummyStyle[LEXICON.l])
- return prop;
- }
- return null;
- })(),
- restrictedMeasuring : (function() {
-
- scrollbarDummyElement.css(strOverflow, strHidden);
- var scrollSize = {
- w : scrollbarDummyElement0[LEXICON.sW],
- h : scrollbarDummyElement0[LEXICON.sH]
- };
- scrollbarDummyElement.css(strOverflow, 'visible');
- var scrollSize2 = {
- w : scrollbarDummyElement0[LEXICON.sW],
- h : scrollbarDummyElement0[LEXICON.sH]
- };
- return (scrollSize.w - scrollSize2.w) !== 0 || (scrollSize.h - scrollSize2.h) !== 0;
- })(),
- rtlScrollBehavior : (function() {
- scrollbarDummyElement.css({ 'overflow-y' : strHidden, 'overflow-x' : strScroll, 'direction' : 'rtl' }).scrollLeft(0);
- var dummyContainerOffset = scrollbarDummyElement.offset();
- var dummyContainerChildOffset = dummyContainerChild.offset();
- scrollbarDummyElement.scrollLeft(999);
- var dummyContainerScrollOffsetAfterScroll = dummyContainerChild.offset();
- return {
-
-
-
-
- i : dummyContainerOffset.left === dummyContainerChildOffset.left,
-
-
-
-
- n : dummyContainerChildOffset.left - dummyContainerScrollOffsetAfterScroll.left === 0
- };
- })(),
- supportTransform : VENDORS._cssProperty('transform') !== null,
- supportTransition : VENDORS._cssProperty('transition') !== null,
- supportPassiveEvents : (function() {
- var supportsPassive = false;
- try {
- window.addEventListener('test', null, Object.defineProperty({ }, 'passive', {
- get: function() {
- supportsPassive = true;
- }
- }));
- } catch (e) { }
- return supportsPassive;
- })(),
- supportResizeObserver : !!COMPATIBILITY.rO(),
- supportMutationObserver : !!COMPATIBILITY.mO()
- });
- scrollbarDummyElement.removeAttr(LEXICON.s).remove();
-
- (function () {
- if(nativeScrollbarIsOverlaid.x && nativeScrollbarIsOverlaid.y)
- return;
- var abs = MATH.abs;
- var windowWidth = COMPATIBILITY.wW();
- var windowHeight = COMPATIBILITY.wH();
- var windowDpr = getWindowDPR();
- var onResize = function() {
- if(INSTANCES().length > 0) {
- var newW = COMPATIBILITY.wW();
- var newH = COMPATIBILITY.wH();
- var deltaW = newW - windowWidth;
- var deltaH = newH - windowHeight;
- if (deltaW === 0 && deltaH === 0)
- return;
- var deltaWRatio = MATH.round(newW / (windowWidth / 100.0));
- var deltaHRatio = MATH.round(newH / (windowHeight / 100.0));
- var absDeltaW = abs(deltaW);
- var absDeltaH = abs(deltaH);
- var absDeltaWRatio = abs(deltaWRatio);
- var absDeltaHRatio = abs(deltaHRatio);
- var newDPR = getWindowDPR();
- var deltaIsBigger = absDeltaW > 2 && absDeltaH > 2;
- var difference = !differenceIsBiggerThanOne(absDeltaWRatio, absDeltaHRatio);
- var dprChanged = newDPR !== windowDpr && windowDpr > 0;
- var isZoom = deltaIsBigger && difference && dprChanged;
- var oldScrollbarSize = _base.nativeScrollbarSize;
- var newScrollbarSize;
- if (isZoom) {
- bodyElement.append(scrollbarDummyElement);
- newScrollbarSize = _base.nativeScrollbarSize = calcNativeScrollbarSize(scrollbarDummyElement[0]);
- scrollbarDummyElement.remove();
- if(oldScrollbarSize.x !== newScrollbarSize.x || oldScrollbarSize.y !== newScrollbarSize.y) {
- FRAMEWORK.each(INSTANCES(), function () {
- if(INSTANCES(this))
- INSTANCES(this).update('zoom');
- });
- }
- }
- windowWidth = newW;
- windowHeight = newH;
- windowDpr = newDPR;
- }
- };
- function differenceIsBiggerThanOne(valOne, valTwo) {
- var absValOne = abs(valOne);
- var absValTwo = abs(valTwo);
- return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo);
- }
- function getWindowDPR() {
- var dDPI = window.screen.deviceXDPI || 0;
- var sDPI = window.screen.logicalXDPI || 1;
- return window.devicePixelRatio || (dDPI / sDPI);
- }
- FRAMEWORK(window).on('resize', onResize);
- })();
- function calcNativeScrollbarSize(measureElement) {
- return {
- x: measureElement[LEXICON.oH] - measureElement[LEXICON.cH],
- y: measureElement[LEXICON.oW] - measureElement[LEXICON.cW]
- };
- }
- }
-
- function OverlayScrollbarsAutoUpdateLoop(globals) {
- var _base = this;
- var _strAutoUpdate = 'autoUpdate';
- var _strAutoUpdateInterval = _strAutoUpdate + 'Interval';
- var _strLength = LEXICON.l;
- var _loopingInstances = [ ];
- var _loopingInstancesIntervalCache = [ ];
- var _loopIsActive = false;
- var _loopIntervalDefault = 33;
- var _loopInterval = _loopIntervalDefault;
- var _loopTimeOld = COMPATIBILITY.now();
- var _loopID;
-
- var loop = function() {
- if(_loopingInstances[_strLength] > 0 && _loopIsActive) {
- _loopID = COMPATIBILITY.rAF()(function () {
- loop();
- });
- var timeNew = COMPATIBILITY.now();
- var timeDelta = timeNew - _loopTimeOld;
- var lowestInterval;
- var instance;
- var instanceOptions;
- var instanceAutoUpdateAllowed;
- var instanceAutoUpdateInterval;
- var now;
- if (timeDelta > _loopInterval) {
- _loopTimeOld = timeNew - (timeDelta % _loopInterval);
- lowestInterval = _loopIntervalDefault;
- for(var i = 0; i < _loopingInstances[_strLength]; i++) {
- instance = _loopingInstances[i];
- if (instance !== undefined) {
- instanceOptions = instance.options();
- instanceAutoUpdateAllowed = instanceOptions[_strAutoUpdate];
- instanceAutoUpdateInterval = MATH.max(1, instanceOptions[_strAutoUpdateInterval]);
- now = COMPATIBILITY.now();
- if ((instanceAutoUpdateAllowed === true || instanceAutoUpdateAllowed === null) && (now - _loopingInstancesIntervalCache[i]) > instanceAutoUpdateInterval) {
- instance.update('auto');
- _loopingInstancesIntervalCache[i] = new Date(now += instanceAutoUpdateInterval);
- }
- lowestInterval = MATH.max(1, MATH.min(lowestInterval, instanceAutoUpdateInterval));
- }
- }
- _loopInterval = lowestInterval;
- }
- } else {
- _loopInterval = _loopIntervalDefault;
- }
- };
-
- _base.add = function(instance) {
- if(FRAMEWORK.inArray(instance, _loopingInstances) === -1) {
- _loopingInstances.push(instance);
- _loopingInstancesIntervalCache.push(COMPATIBILITY.now());
- if (_loopingInstances[_strLength] > 0 && !_loopIsActive) {
- _loopIsActive = true;
- globals.autoUpdateLoop = _loopIsActive;
- loop();
- }
- }
- };
-
- _base.remove = function(instance) {
- var index = FRAMEWORK.inArray(instance, _loopingInstances);
- if(index > -1) {
-
- _loopingInstancesIntervalCache.splice(index, 1);
- _loopingInstances.splice(index, 1);
-
- if (_loopingInstances[_strLength] === 0 && _loopIsActive) {
- _loopIsActive = false;
- globals.autoUpdateLoop = _loopIsActive;
- if(_loopID !== undefined) {
- COMPATIBILITY.cAF()(_loopID);
- _loopID = -1;
- }
- }
- }
- };
- }
-
- function OverlayScrollbarsInstance(pluginTargetElement, options, extensions, globals, autoUpdateLoop) {
-
- if(!isHTMLElement(pluginTargetElement))
- return;
-
- if(INSTANCES(pluginTargetElement)) {
- var inst = INSTANCES(pluginTargetElement);
- inst.options(options);
- return inst;
- }
-
- var _base = new window[PLUGINNAME]();
- var _frameworkProto = FRAMEWORK[LEXICON.p];
-
- var _nativeScrollbarIsOverlaid;
- var _overlayScrollbarDummySize;
- var _rtlScrollBehavior;
- var _autoUpdateRecommended;
- var _msieVersion;
- var _nativeScrollbarStyling;
- var _cssCalc;
- var _nativeScrollbarSize;
- var _supportTransition;
- var _supportTransform;
- var _supportPassiveEvents;
- var _supportResizeObserver;
- var _supportMutationObserver;
- var _restrictedMeasuring;
-
- var _initialized;
- var _destroyed;
- var _isTextarea;
- var _isBody;
- var _documentMixed;
- var _isTextareaHostGenerated;
-
- var _isBorderBox;
- var _sizeAutoObserverAdded;
- var _paddingX;
- var _paddingY;
- var _borderX;
- var _borderY;
- var _marginX;
- var _marginY;
- var _isRTL;
- var _isSleeping;
- var _contentBorderSize = { };
- var _scrollHorizontalInfo = { };
- var _scrollVerticalInfo = { };
- var _viewportSize = { };
- var _nativeScrollbarMinSize = { };
-
- var _strMinusHidden = '-hidden';
- var _strMarginMinus = 'margin-';
- var _strPaddingMinus = 'padding-';
- var _strBorderMinus = 'border-';
- var _strTop = 'top';
- var _strRight = 'right';
- var _strBottom = 'bottom';
- var _strLeft = 'left';
- var _strMinMinus = 'min-';
- var _strMaxMinus = 'max-';
- var _strWidth = 'width';
- var _strHeight = 'height';
- var _strFloat = 'float';
- var _strEmpty = '';
- var _strAuto = 'auto';
- var _strScroll = 'scroll';
- var _strHundredPercent = '100%';
- var _strX = 'x';
- var _strY = 'y';
- var _strDot = '.';
- var _strSpace = ' ';
- var _strScrollbar = 'scrollbar';
- var _strMinusHorizontal = '-horizontal';
- var _strMinusVertical = '-vertical';
- var _strScrollLeft = _strScroll + 'Left';
- var _strScrollTop = _strScroll + 'Top';
- var _strMouseTouchDownEvent = 'mousedown touchstart';
- var _strMouseTouchUpEvent = 'mouseup touchend touchcancel';
- var _strMouseTouchMoveEvent = 'mousemove touchmove';
- var _strMouseTouchEnter = 'mouseenter';
- var _strMouseTouchLeave = 'mouseleave';
- var _strKeyDownEvent = 'keydown';
- var _strKeyUpEvent = 'keyup';
- var _strSelectStartEvent = 'selectstart';
- var _strTransitionEndEvent = 'transitionend webkitTransitionEnd oTransitionEnd';
- var _strResizeObserverProperty = '__overlayScrollbarsRO__';
-
- var _cassNamesPrefix = 'os-';
- var _classNameHTMLElement = _cassNamesPrefix + 'html';
- var _classNameHostElement = _cassNamesPrefix + 'host';
- var _classNameHostTextareaElement = _classNameHostElement + '-textarea';
- var _classNameHostScrollbarHorizontalHidden = _classNameHostElement + '-' + _strScrollbar + _strMinusHorizontal + _strMinusHidden;
- var _classNameHostScrollbarVerticalHidden = _classNameHostElement + '-' + _strScrollbar + _strMinusVertical + _strMinusHidden;
- var _classNameHostTransition = _classNameHostElement + '-transition';
- var _classNameHostRTL = _classNameHostElement + '-rtl';
- var _classNameHostResizeDisabled = _classNameHostElement + '-resize-disabled';
- var _classNameHostScrolling = _classNameHostElement + '-scrolling';
- var _classNameHostOverflow = _classNameHostElement + '-overflow';
- var _classNameHostOverflowX = _classNameHostOverflow + '-x';
- var _classNameHostOverflowY = _classNameHostOverflow + '-y';
- var _classNameTextareaElement = _cassNamesPrefix + 'textarea';
- var _classNameTextareaCoverElement = _classNameTextareaElement + '-cover';
- var _classNamePaddingElement = _cassNamesPrefix + 'padding';
- var _classNameViewportElement = _cassNamesPrefix + 'viewport';
- var _classNameViewportNativeScrollbarsInvisible = _classNameViewportElement + '-native-scrollbars-invisible';
- var _classNameViewportNativeScrollbarsOverlaid = _classNameViewportElement + '-native-scrollbars-overlaid';
- var _classNameContentElement = _cassNamesPrefix + 'content';
- var _classNameContentArrangeElement = _cassNamesPrefix + 'content-arrange';
- var _classNameContentGlueElement = _cassNamesPrefix + 'content-glue';
- var _classNameSizeAutoObserverElement = _cassNamesPrefix + 'size-auto-observer';
- var _classNameResizeObserverElement = _cassNamesPrefix + 'resize-observer';
- var _classNameResizeObserverItemElement = _cassNamesPrefix + 'resize-observer-item';
- var _classNameResizeObserverItemFinalElement = _classNameResizeObserverItemElement + '-final';
- var _classNameTextInherit = _cassNamesPrefix + 'text-inherit';
- var _classNameScrollbar = _cassNamesPrefix + _strScrollbar;
- var _classNameScrollbarTrack = _classNameScrollbar + '-track';
- var _classNameScrollbarTrackOff = _classNameScrollbarTrack + '-off';
- var _classNameScrollbarHandle = _classNameScrollbar + '-handle';
- var _classNameScrollbarHandleOff = _classNameScrollbarHandle + '-off';
- var _classNameScrollbarUnusable = _classNameScrollbar + '-unusable';
- var _classNameScrollbarAutoHidden = _classNameScrollbar + '-' + _strAuto + _strMinusHidden;
- var _classNameScrollbarCorner = _classNameScrollbar + '-corner';
- var _classNameScrollbarCornerResize = _classNameScrollbarCorner + '-resize';
- var _classNameScrollbarCornerResizeB = _classNameScrollbarCornerResize + '-both';
- var _classNameScrollbarCornerResizeH = _classNameScrollbarCornerResize + _strMinusHorizontal;
- var _classNameScrollbarCornerResizeV = _classNameScrollbarCornerResize + _strMinusVertical;
- var _classNameScrollbarHorizontal = _classNameScrollbar + _strMinusHorizontal;
- var _classNameScrollbarVertical = _classNameScrollbar + _strMinusVertical;
- var _classNameDragging = _cassNamesPrefix + 'dragging';
- var _classNameThemeNone = _cassNamesPrefix + 'theme-none';
-
- var _callbacksInitQeueue = [ ];
-
- var _defaultOptions;
- var _currentOptions;
- var _currentPreparedOptions;
-
- var _extensions = { };
- var _extensionsPrivateMethods = "added removed on contract";
-
- var _lastUpdateTime;
- var _swallowedUpdateParams = { };
- var _swallowedUpdateTimeout;
- var _swallowUpdateLag = 42;
- var _imgs = [ ];
-
- var _windowElement;
- var _documentElement;
- var _htmlElement;
- var _bodyElement;
- var _targetElement;
- var _hostElement;
- var _sizeAutoObserverElement;
- var _sizeObserverElement;
- var _paddingElement;
- var _viewportElement;
- var _contentElement;
- var _contentArrangeElement;
- var _contentGlueElement;
- var _textareaCoverElement;
- var _scrollbarCornerElement;
- var _scrollbarHorizontalElement;
- var _scrollbarHorizontalTrackElement;
- var _scrollbarHorizontalHandleElement;
- var _scrollbarVerticalElement;
- var _scrollbarVerticalTrackElement;
- var _scrollbarVerticalHandleElement;
- var _windowElementNative;
- var _documentElementNative;
- var _targetElementNative;
- var _hostElementNative;
- var _sizeAutoObserverElementNative;
- var _sizeObserverElementNative;
- var _paddingElementNative;
- var _viewportElementNative;
- var _contentElementNative;
-
- var _hostSizeCache;
- var _contentScrollSizeCache;
- var _arrangeContentSizeCache;
- var _hasOverflowCache;
- var _hideOverflowCache;
- var _widthAutoCache;
- var _heightAutoCache;
- var _cssMaxValueCache;
- var _cssBoxSizingCache;
- var _cssPaddingCache;
- var _cssBorderCache;
- var _cssMarginCache;
- var _cssDirectionCache;
- var _cssDirectionDetectedCache;
- var _paddingAbsoluteCache;
- var _clipAlwaysCache;
- var _contentGlueSizeCache;
- var _overflowBehaviorCache;
- var _overflowAmountCache;
- var _ignoreOverlayScrollbarHidingCache;
- var _autoUpdateCache;
- var _sizeAutoCapableCache;
- var _textareaAutoWrappingCache;
- var _textareaInfoCache;
- var _updateAutoHostElementIdCache;
- var _updateAutoHostElementClassCache;
- var _updateAutoHostElementStyleCache;
- var _updateAutoHostElementVisibleCache;
- var _updateAutoTargetElementRowsCache;
- var _updateAutoTargetElementColsCache;
- var _updateAutoTargetElementWrapCache;
- var _contentElementScrollSizeChangeDetectedCache;
- var _hostElementSizeChangeDetectedCache;
- var _scrollbarsVisibilityCache;
- var _scrollbarsAutoHideCache;
- var _scrollbarsClickScrollingCache;
- var _scrollbarsDragScrollingCache;
- var _resizeCache;
- var _normalizeRTLCache;
- var _classNameCache;
- var _oldClassName;
- var _textareaDynHeightCache;
- var _textareaDynWidthCache;
- var _bodyMinSizeCache;
- var _viewportScrollSizeCache;
- var _displayIsHiddenCache;
-
- var _mutationObserverHost;
- var _mutationObserverContent;
- var _mutationObserversConnected;
-
- var _textareaEvents;
- var _textareaHasFocus;
-
- var _scrollbarsAutoHideTimeoutId;
- var _scrollbarsAutoHideMoveTimeoutId;
- var _scrollbarsAutoHideDelay;
- var _scrollbarsAutoHideNever;
- var _scrollbarsAutoHideScroll;
- var _scrollbarsAutoHideMove;
- var _scrollbarsAutoHideLeave;
- var _scrollbarsHandleHovered;
- var _scrollbarsHandleAsync;
-
- var _resizeReconnectMutationObserver;
- var _resizeNone;
- var _resizeBoth;
- var _resizeHorizontal;
- var _resizeVertical;
- var _resizeOnMouseTouchDown;
-
-
- function addPassiveEventListener(element, eventNames, listener) {
- var events = eventNames.split(_strSpace);
- for (var i = 0; i < events.length; i++)
- element[0].addEventListener(events[i], listener, {passive: true});
- }
-
- function removePassiveEventListener(element, eventNames, listener) {
- var events = eventNames.split(_strSpace);
- for (var i = 0; i < events.length; i++)
- element[0].removeEventListener(events[i], listener, {passive: true});
- }
-
-
- function addResizeObserver(targetElement, onElementResizedCallback) {
- var constMaximum = 3333333;
- var resizeObserver = COMPATIBILITY.rO();
- var strAnimationStartEvent = 'animationstart mozAnimationStart webkitAnimationStart MSAnimationStart';
- var strChildNodes = 'childNodes';
- var callback = function () {
- targetElement[_strScrollTop](constMaximum)[_strScrollLeft](_isRTL ? _rtlScrollBehavior.n ? -constMaximum : _rtlScrollBehavior.i ? 0 : constMaximum : constMaximum);
- onElementResizedCallback();
- };
- if (_supportResizeObserver) {
- var element = targetElement.append(generateDiv(_classNameResizeObserverElement + ' observed')).contents()[0];
- var observer = element[_strResizeObserverProperty] = new resizeObserver(callback);
- observer.observe(element);
- }
- else {
- if (_msieVersion > 9 || !_autoUpdateRecommended) {
- targetElement.prepend(
- generateDiv(_classNameResizeObserverElement,
- generateDiv({ className : _classNameResizeObserverItemElement, dir : "ltr" },
- generateDiv(_classNameResizeObserverItemElement,
- generateDiv(_classNameResizeObserverItemFinalElement)
- ) +
- generateDiv(_classNameResizeObserverItemElement,
- generateDiv({ className : _classNameResizeObserverItemFinalElement, style : 'width: 200%; height: 200%' })
- )
- )
- )
- );
- var observerElement = targetElement[0][strChildNodes][0][strChildNodes][0];
- var shrinkElement = FRAMEWORK(observerElement[strChildNodes][1]);
- var expandElement = FRAMEWORK(observerElement[strChildNodes][0]);
- var expandElementChild = FRAMEWORK(expandElement[0][strChildNodes][0]);
- var widthCache = observerElement[LEXICON.oW];
- var heightCache = observerElement[LEXICON.oH];
- var isDirty;
- var rAFId;
- var currWidth;
- var currHeight;
- var factor = 2;
- var nativeScrollbarSize = globals.nativeScrollbarSize;
- var reset = function () {
-
- expandElement[_strScrollLeft](constMaximum)[_strScrollTop](constMaximum);
- shrinkElement[_strScrollLeft](constMaximum)[_strScrollTop](constMaximum);
- };
- var onResized = function () {
- rAFId = 0;
- if (!isDirty)
- return;
- widthCache = currWidth;
- heightCache = currHeight;
- callback();
- };
- var onScroll = function (event) {
- currWidth = observerElement[LEXICON.oW];
- currHeight = observerElement[LEXICON.oH];
- isDirty = currWidth != widthCache || currHeight != heightCache;
- if (event && isDirty && !rAFId) {
- COMPATIBILITY.cAF()(rAFId);
- rAFId = COMPATIBILITY.rAF()(onResized);
- }
- else if(!event)
- onResized();
- reset();
- if (event) {
- COMPATIBILITY.prvD(event);
- COMPATIBILITY.stpP(event);
- }
- return false;
- };
- var expandChildCSS = {};
- var observerElementCSS = {};
- setTopRightBottomLeft(observerElementCSS, _strEmpty, [
- -((nativeScrollbarSize.y + 1) * factor),
- nativeScrollbarSize.x * -factor,
- nativeScrollbarSize.y * -factor,
- -((nativeScrollbarSize.x + 1) * factor)
- ]);
- FRAMEWORK(observerElement).css(observerElementCSS);
- expandElement.on(_strScroll, onScroll);
- shrinkElement.on(_strScroll, onScroll);
- targetElement.on(strAnimationStartEvent, function () {
- onScroll(false);
- });
-
- expandChildCSS[_strWidth] = constMaximum;
- expandChildCSS[_strHeight] = constMaximum;
- expandElementChild.css(expandChildCSS);
- reset();
- }
- else {
- var attachEvent = _documentElementNative.attachEvent;
- var isIE = _msieVersion !== undefined;
- if (attachEvent) {
- targetElement.prepend(generateDiv(_classNameResizeObserverElement));
- findFirst(targetElement, _strDot + _classNameResizeObserverElement)[0].attachEvent('onresize', callback);
- }
- else {
- var obj = _documentElementNative.createElement(TYPES.o);
- obj.setAttribute('tabindex', '-1');
- obj.setAttribute(LEXICON.c, _classNameResizeObserverElement);
- obj.onload = function () {
- var wnd = this.contentDocument.defaultView;
- wnd.addEventListener('resize', callback);
- wnd.document.documentElement.style.display = 'none';
- };
- obj.type = 'text/html';
- if (isIE)
- targetElement.prepend(obj);
- obj.data = 'about:blank';
- if (!isIE)
- targetElement.prepend(obj);
- targetElement.on(strAnimationStartEvent, callback);
- }
- }
- }
-
- if (targetElement[0] === _sizeObserverElementNative) {
- var directionChanged = function () {
- var dir = _hostElement.css('direction');
- var css = {};
- var scrollLeftValue = 0;
- var result = false;
- if (dir !== _cssDirectionDetectedCache) {
- if (dir === 'ltr') {
- css[_strLeft] = 0;
- css[_strRight] = _strAuto;
- scrollLeftValue = constMaximum;
- }
- else {
- css[_strLeft] = _strAuto;
- css[_strRight] = 0;
- scrollLeftValue = _rtlScrollBehavior.n ? -constMaximum : _rtlScrollBehavior.i ? 0 : constMaximum;
- }
- _sizeObserverElement.children().eq(0).css(css);
- targetElement[_strScrollLeft](scrollLeftValue)[_strScrollTop](constMaximum);
- _cssDirectionDetectedCache = dir;
- result = true;
- }
- return result;
- };
- directionChanged();
- targetElement.on(_strScroll, function (event) {
- if (directionChanged())
- update();
- COMPATIBILITY.prvD(event);
- COMPATIBILITY.stpP(event);
- return false;
- });
- }
- }
-
- function removeResizeObserver(targetElement) {
- if (_supportResizeObserver) {
- var element = targetElement.contents()[0];
- element[_strResizeObserverProperty].disconnect();
- delete element[_strResizeObserverProperty];
- }
- else {
- remove(targetElement.children(_strDot + _classNameResizeObserverElement).eq(0));
- }
- }
-
- function freezeResizeObserver(targetElement) {
- if (targetElement !== undefined) {
-
- }
- }
-
- function unfreezeResizeObserver(targetElement) {
- if (targetElement !== undefined) {
-
- }
- }
-
-
- function createMutationObservers() {
- if (_supportMutationObserver) {
- var mutationObserverContentLag = 11;
- var mutationObserver = COMPATIBILITY.mO();
- var contentLastUpdate = COMPATIBILITY.now();
- var mutationTarget;
- var mutationAttrName;
- var contentTimeout;
- var now;
- var sizeAuto;
- var action;
- _mutationObserverHost = new mutationObserver(function (mutations) {
- if (!_initialized || _isSleeping)
- return;
- var doUpdate = false;
- var mutation;
- FRAMEWORK.each(mutations, function () {
- mutation = this;
- mutationTarget = mutation.target;
- mutationAttrName = mutation.attributeName;
- if (mutationAttrName === LEXICON.c)
- doUpdate = hostClassNamesChanged(mutation.oldValue, mutationTarget.className);
- else if (mutationAttrName === LEXICON.s)
- doUpdate = mutation.oldValue !== mutationTarget[LEXICON.s].cssText;
- else
- doUpdate = true;
- if (doUpdate)
- return false;
- });
- if (doUpdate)
- _base.update(_strAuto);
- });
- _mutationObserverContent = new mutationObserver(function (mutations) {
- if (!_initialized || _isSleeping)
- return;
- var doUpdate = false;
- var mutation;
- FRAMEWORK.each(mutations, function () {
- mutation = this;
- doUpdate = isUnknownMutation(mutation);
- return !doUpdate;
- });
- if (doUpdate) {
- now = COMPATIBILITY.now();
- sizeAuto = (_heightAutoCache || _widthAutoCache);
- action = function () {
- if(!_destroyed) {
- contentLastUpdate = now;
-
- if (_isTextarea)
- textareaUpdate();
- if (sizeAuto)
- update();
- else
- _base.update(_strAuto);
- }
- };
- clearTimeout(contentTimeout);
- if (mutationObserverContentLag <= 0 || now - contentLastUpdate > mutationObserverContentLag || !sizeAuto)
- action();
- else
- contentTimeout = setTimeout(action, mutationObserverContentLag);
- }
- });
- }
- }
-
- function connectMutationObservers() {
- if (_supportMutationObserver && !_mutationObserversConnected) {
- _mutationObserverHost.observe(_hostElementNative, {
- attributes: true,
- attributeOldValue: true,
- attributeFilter: [LEXICON.i, LEXICON.c, LEXICON.s]
- });
- _mutationObserverContent.observe(_isTextarea ? _targetElementNative : _contentElementNative, {
- attributes: true,
- attributeOldValue: true,
- subtree: !_isTextarea,
- childList: !_isTextarea,
- characterData: !_isTextarea,
- attributeFilter: _isTextarea ? ['wrap', 'cols', 'rows'] : [LEXICON.i, LEXICON.c, LEXICON.s]
- });
- _mutationObserversConnected = true;
- }
- }
-
- function disconnectMutationObservers() {
- if (_supportMutationObserver && _mutationObserversConnected) {
- _mutationObserverHost.disconnect();
- _mutationObserverContent.disconnect();
- _mutationObserversConnected = false;
- }
- }
-
-
- function hostOnResized() {
- if (_isSleeping)
- return;
- var changed;
- var hostSize = {
- w: _sizeObserverElementNative[LEXICON.sW],
- h: _sizeObserverElementNative[LEXICON.sH]
- };
- if (_initialized) {
- changed = checkCacheDouble(hostSize, _hostElementSizeChangeDetectedCache);
- _hostElementSizeChangeDetectedCache = hostSize;
- if (changed)
- update(true, false);
- }
- else {
- _hostElementSizeChangeDetectedCache = hostSize;
- }
- }
-
- function hostOnMouseEnter() {
- if (_scrollbarsAutoHideLeave)
- refreshScrollbarsAutoHide(true);
- }
-
- function hostOnMouseLeave() {
- if (_scrollbarsAutoHideLeave && !_bodyElement.hasClass(_classNameDragging))
- refreshScrollbarsAutoHide(false);
- }
-
- function hostOnMouseMove() {
- if (_scrollbarsAutoHideMove) {
- refreshScrollbarsAutoHide(true);
- clearTimeout(_scrollbarsAutoHideMoveTimeoutId);
- _scrollbarsAutoHideMoveTimeoutId = setTimeout(function () {
- if (_scrollbarsAutoHideMove && !_destroyed)
- refreshScrollbarsAutoHide(false);
- }, 100);
- }
- }
-
- function setupHostMouseTouchEvents(destroy) {
- var passiveEvent = destroy ? removePassiveEventListener : addPassiveEventListener;
- var strOnOff = destroy ? 'off' : 'on';
- var setupEvent = function(target, name, listener) {
- if(_supportPassiveEvents)
- passiveEvent(target, name, listener);
- else
- target[strOnOff](name, listener);
- };
- if(_scrollbarsAutoHideMove && !destroy)
- setupEvent(_hostElement, _strMouseTouchMoveEvent, hostOnMouseMove);
- else {
- if(destroy)
- setupEvent(_hostElement, _strMouseTouchMoveEvent, hostOnMouseMove);
- setupEvent(_hostElement, _strMouseTouchEnter, hostOnMouseEnter);
- setupEvent(_hostElement, _strMouseTouchLeave, hostOnMouseLeave);
- }
-
- if(!_initialized && !destroy)
- _hostElement.one("mouseover", hostOnMouseEnter);
- }
-
- function documentOnSelectStart(event) {
- COMPATIBILITY.prvD(event);
- return false;
- }
-
- function imgOnLoad() {
- update(false, true);
- }
-
-
- function bodyMinSizeChanged() {
- var bodyMinSize = {};
- if (_isBody && _contentArrangeElement) {
- bodyMinSize.w = parseToZeroOrNumber(_contentArrangeElement.css(_strMinMinus + _strWidth));
- bodyMinSize.h = parseToZeroOrNumber(_contentArrangeElement.css(_strMinMinus + _strHeight));
- bodyMinSize.c = checkCacheDouble(bodyMinSize, _bodyMinSizeCache);
- bodyMinSize.f = true;
- }
- _bodyMinSizeCache = bodyMinSize;
- return bodyMinSize.c || false;
- }
-
- function hostClassNamesChanged(oldCassNames, newClassNames) {
- var currClasses = (newClassNames !== undefined && newClassNames !== null) ? newClassNames.split(_strSpace) : _strEmpty;
- var oldClasses = (oldCassNames !== undefined && oldCassNames !== null) ? oldCassNames.split(_strSpace) : _strEmpty;
- if (currClasses === _strEmpty && oldClasses === _strEmpty)
- return false;
- var diff = getArrayDifferences(oldClasses, currClasses);
- var changed = false;
- var oldClassNames = _oldClassName !== undefined && _oldClassName !== null ? _oldClassName.split(_strSpace) : [_strEmpty];
- var currClassNames = _classNameCache !== undefined && _classNameCache !== null ? _classNameCache.split(_strSpace) : [_strEmpty];
-
- var idx = FRAMEWORK.inArray(_classNameThemeNone, diff);
- var curr;
- var i;
- var v;
- var o;
- var c;
- if (idx > -1)
- diff.splice(idx, 1);
- for (i = 0; i < diff.length; i++) {
- curr = diff[i];
- if (curr.indexOf(_classNameHostElement) !== 0) {
- o = true;
- c = true;
- for (v = 0; v < oldClassNames.length; v++) {
- if (curr === oldClassNames[v]) {
- o = false;
- break;
- }
- }
- for (v = 0; v < currClassNames.length; v++) {
- if (curr === currClassNames[v]) {
- c = false;
- break;
- }
- }
- if (o && c) {
- changed = true;
- break;
- }
- }
- }
- return changed;
- }
-
- function isUnknownMutation(mutation) {
- var attributeName = mutation.attributeName;
- var mutationTarget = mutation.target;
- var mutationType = mutation.type;
- var strClosest = 'closest';
- if (mutationTarget === _contentElementNative)
- return attributeName === null;
- if (mutationType === 'attributes' && (attributeName === LEXICON.c || attributeName === LEXICON.s) && !_isTextarea) {
-
- if (attributeName === LEXICON.c && FRAMEWORK(mutationTarget).hasClass(_classNameHostElement))
- return hostClassNamesChanged(mutation.oldValue, mutationTarget.getAttribute(LEXICON.c));
-
- if (typeof mutationTarget[strClosest] != TYPES.f)
- return true;
- if (mutationTarget[strClosest](_strDot + _classNameResizeObserverElement) !== null ||
- mutationTarget[strClosest](_strDot + _classNameScrollbar) !== null ||
- mutationTarget[strClosest](_strDot + _classNameScrollbarCorner) !== null)
- return false;
- }
- return true;
- }
-
- function updateAutoContentSizeChanged() {
- if (_isSleeping)
- return false;
- var float;
- var textareaValueLength = _isTextarea && _widthAutoCache && !_textareaAutoWrappingCache ? _targetElement.val().length : 0;
- var setCSS = !_mutationObserversConnected && _widthAutoCache && !_isTextarea;
- var viewportScrollSize = { };
- var css = { };
- var bodyMinSizeC;
- var changed;
- var viewportScrollSizeChanged;
-
-
- if(_restrictedMeasuring) {
- viewportScrollSize = {
- x : _viewportElementNative[LEXICON.sW],
- y : _viewportElementNative[LEXICON.sH]
- }
- }
- if (setCSS) {
- float = _contentElement.css(_strFloat);
- css[_strFloat] = _isRTL ? _strRight : _strLeft;
- css[_strWidth] = _strAuto;
- _contentElement.css(css);
- }
- var contentElementScrollSize = {
- w: getContentMeasureElement()[LEXICON.sW] + textareaValueLength,
- h: getContentMeasureElement()[LEXICON.sH] + textareaValueLength
- };
- if (setCSS) {
- css[_strFloat] = float;
- css[_strWidth] = _strHundredPercent;
- _contentElement.css(css);
- }
- bodyMinSizeC = bodyMinSizeChanged();
- changed = checkCacheDouble(contentElementScrollSize, _contentElementScrollSizeChangeDetectedCache);
- viewportScrollSizeChanged = checkCacheDouble(viewportScrollSize, _viewportScrollSizeCache, _strX, _strY);
- _contentElementScrollSizeChangeDetectedCache = contentElementScrollSize;
- _viewportScrollSizeCache = viewportScrollSize;
- return changed || bodyMinSizeC || viewportScrollSizeChanged;
- }
-
- function meaningfulAttrsChanged() {
- if (_isSleeping || _mutationObserversConnected)
- return false;
- var hostElementId = _hostElement.attr(LEXICON.i) || _strEmpty;
- var hostElementIdChanged = checkCacheSingle(hostElementId, _updateAutoHostElementIdCache);
- var hostElementClass = _hostElement.attr(LEXICON.c) || _strEmpty;
- var hostElementClassChanged = checkCacheSingle(hostElementClass, _updateAutoHostElementClassCache);
- var hostElementStyle = _hostElement.attr(LEXICON.s) || _strEmpty;
- var hostElementStyleChanged = checkCacheSingle(hostElementStyle, _updateAutoHostElementStyleCache);
- var hostElementVisible = _hostElement.is(':visible') || _strEmpty;
- var hostElementVisibleChanged = checkCacheSingle(hostElementVisible, _updateAutoHostElementVisibleCache);
- var targetElementRows = _isTextarea ? (_targetElement.attr('rows') || _strEmpty) : _strEmpty;
- var targetElementRowsChanged = checkCacheSingle(targetElementRows, _updateAutoTargetElementRowsCache);
- var targetElementCols = _isTextarea ? (_targetElement.attr('cols') || _strEmpty) : _strEmpty;
- var targetElementColsChanged = checkCacheSingle(targetElementCols, _updateAutoTargetElementColsCache);
- var targetElementWrap = _isTextarea ? (_targetElement.attr('wrap') || _strEmpty) : _strEmpty;
- var targetElementWrapChanged = checkCacheSingle(targetElementWrap, _updateAutoTargetElementWrapCache);
- _updateAutoHostElementIdCache = hostElementId;
- if (hostElementClassChanged)
- hostElementClassChanged = hostClassNamesChanged(_updateAutoHostElementClassCache, hostElementClass);
- _updateAutoHostElementClassCache = hostElementClass;
- _updateAutoHostElementStyleCache = hostElementStyle;
- _updateAutoHostElementVisibleCache = hostElementVisible;
- _updateAutoTargetElementRowsCache = targetElementRows;
- _updateAutoTargetElementColsCache = targetElementCols;
- _updateAutoTargetElementWrapCache = targetElementWrap;
- return hostElementIdChanged || hostElementClassChanged || hostElementStyleChanged || hostElementVisibleChanged || targetElementRowsChanged || targetElementColsChanged || targetElementWrapChanged;
- }
-
- function isSizeAffectingCSSProperty(propertyName) {
- if (!_initialized)
- return true;
- var flexGrow = 'flex-grow';
- var flexShrink = 'flex-shrink';
- var flexBasis = 'flex-basis';
- var affectingPropsX = [
- _strWidth,
- _strMinMinus + _strWidth,
- _strMaxMinus + _strWidth,
- _strMarginMinus + _strLeft,
- _strMarginMinus + _strRight,
- _strLeft,
- _strRight,
- 'font-weight',
- 'word-spacing',
- flexGrow,
- flexShrink,
- flexBasis
- ];
- var affectingPropsXContentBox = [
- _strPaddingMinus + _strLeft,
- _strPaddingMinus + _strRight,
- _strBorderMinus + _strLeft + _strWidth,
- _strBorderMinus + _strRight + _strWidth
- ];
- var affectingPropsY = [
- _strHeight,
- _strMinMinus + _strHeight,
- _strMaxMinus + _strHeight,
- _strMarginMinus + _strTop,
- _strMarginMinus + _strBottom,
- _strTop,
- _strBottom,
- 'line-height',
- flexGrow,
- flexShrink,
- flexBasis
- ];
- var affectingPropsYContentBox = [
- _strPaddingMinus + _strTop,
- _strPaddingMinus + _strBottom,
- _strBorderMinus + _strTop + _strWidth,
- _strBorderMinus + _strBottom + _strWidth
- ];
- var _strS = 's';
- var _strVS = 'v-s';
- var checkX = _overflowBehaviorCache.x === _strS || _overflowBehaviorCache.x === _strVS;
- var checkY = _overflowBehaviorCache.y === _strS || _overflowBehaviorCache.y === _strVS;
- var sizeIsAffected = false;
- var checkPropertyName = function (arr, name) {
- for (var i = 0; i < arr[LEXICON.l]; i++) {
- if (arr[i] === name)
- return true;
- }
- return false;
- };
- if (checkY) {
- sizeIsAffected = checkPropertyName(affectingPropsY, propertyName);
- if (!sizeIsAffected && !_isBorderBox)
- sizeIsAffected = checkPropertyName(affectingPropsYContentBox, propertyName);
- }
- if (checkX && !sizeIsAffected) {
- sizeIsAffected = checkPropertyName(affectingPropsX, propertyName);
- if (!sizeIsAffected && !_isBorderBox)
- sizeIsAffected = checkPropertyName(affectingPropsXContentBox, propertyName);
- }
- return sizeIsAffected;
- }
-
-
- function textareaUpdate() {
- if (_isSleeping)
- return;
- var wrapAttrOff = !_textareaAutoWrappingCache;
- var minWidth = _viewportSize.w ;
- var minHeight = _viewportSize.h ;
- var css = { };
- var doMeasure = _widthAutoCache || wrapAttrOff;
- var origWidth;
- var width;
- var origHeight;
- var height;
-
- css[_strMinMinus + _strWidth] = _strEmpty;
- css[_strMinMinus + _strHeight] = _strEmpty;
-
- css[_strWidth] = _strAuto;
- _targetElement.css(css);
-
- origWidth = _targetElementNative[LEXICON.oW];
- width = doMeasure ? MATH.max(origWidth, _targetElementNative[LEXICON.sW] - 1) : 1;
-
-
- css[_strWidth] = _widthAutoCache ? _strAuto : _strHundredPercent;
- css[_strMinMinus + _strWidth] = _strHundredPercent;
-
- css[_strHeight] = _strAuto;
- _targetElement.css(css);
-
- origHeight = _targetElementNative[LEXICON.oH];
- height = MATH.max(origHeight, _targetElementNative[LEXICON.sH] - 1);
-
- css[_strWidth] = width;
- css[_strHeight] = height;
- _textareaCoverElement.css(css);
-
- css[_strMinMinus + _strWidth] = minWidth ;
- css[_strMinMinus + _strHeight] = minHeight ;
- _targetElement.css(css);
- return {
- _originalWidth: origWidth,
- _originalHeight: origHeight,
- _dynamicWidth: width,
- _dynamicHeight: height
- };
- }
-
- function update(hostSizeChanged, contentSizeChanged, force, preventSwallowing) {
- var now = COMPATIBILITY.now();
- var swallow = _swallowUpdateLag > 0 && _initialized && (now - _lastUpdateTime) < _swallowUpdateLag && (!_heightAutoCache && !_widthAutoCache) && !preventSwallowing;
- var displayIsHidden = _hostElement.is(':hidden');
- var displayIsHiddenChanged = checkCacheSingle(displayIsHidden, _displayIsHiddenCache, force);
- _displayIsHiddenCache = displayIsHidden;
- clearTimeout(_swallowedUpdateTimeout);
- if (swallow) {
- _swallowedUpdateParams.h = _swallowedUpdateParams.h || hostSizeChanged;
- _swallowedUpdateParams.c = _swallowedUpdateParams.c || contentSizeChanged;
- _swallowedUpdateParams.f = _swallowedUpdateParams.f || force;
- _swallowedUpdateTimeout = setTimeout(update, _swallowUpdateLag);
- }
-
-
-
-
-
- if (_destroyed || swallow || _isSleeping || (_initialized && !force && displayIsHidden) || _hostElement.css('display') === 'inline')
- return;
- _lastUpdateTime = now;
- hostSizeChanged = hostSizeChanged || _swallowedUpdateParams.h;
- contentSizeChanged = contentSizeChanged || _swallowedUpdateParams.c;
- force = force || _swallowedUpdateParams.f;
- _swallowedUpdateParams = {};
- hostSizeChanged = hostSizeChanged === undefined ? false : hostSizeChanged;
- contentSizeChanged = contentSizeChanged === undefined ? false : contentSizeChanged;
- force = force === undefined ? false : force;
-
- if (_nativeScrollbarStyling && !(_nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y)) {
-
- _nativeScrollbarSize.x = 0;
- _nativeScrollbarSize.y = 0;
- }
- else {
-
- _nativeScrollbarSize = extendDeep({}, globals.nativeScrollbarSize);
- }
-
-
-
-
- _nativeScrollbarMinSize = {
- x: (_nativeScrollbarSize.x + (_nativeScrollbarIsOverlaid.x ? 0 : 3)) * 3,
- y: (_nativeScrollbarSize.y + (_nativeScrollbarIsOverlaid.y ? 0 : 3)) * 3
- };
- freezeResizeObserver(_sizeObserverElement);
- freezeResizeObserver(_sizeAutoObserverElement);
-
- var currScroll = {
- x: _viewportElement[_strScrollLeft](),
- y: _viewportElement[_strScrollTop]()
- };
- var currentPreparedOptionsScrollbars = _currentPreparedOptions.scrollbars;
- var currentPreparedOptionsTextarea = _currentPreparedOptions.textarea;
-
- var scrollbarsVisibility = currentPreparedOptionsScrollbars.visibility;
- var scrollbarsVisibilityChanged = checkCacheSingle(scrollbarsVisibility, _scrollbarsVisibilityCache, force);
-
- var scrollbarsAutoHide = currentPreparedOptionsScrollbars.autoHide;
- var scrollbarsAutoHideChanged = checkCacheSingle(scrollbarsAutoHide, _scrollbarsAutoHideCache, force);
-
- var scrollbarsClickScrolling = currentPreparedOptionsScrollbars.clickScrolling;
- var scrollbarsClickScrollingChanged = checkCacheSingle(scrollbarsClickScrolling, _scrollbarsClickScrollingCache, force);
-
- var scrollbarsDragScrolling = currentPreparedOptionsScrollbars.dragScrolling;
- var scrollbarsDragScrollingChanged = checkCacheSingle(scrollbarsDragScrolling, _scrollbarsDragScrollingCache, force);
-
- var className = _currentPreparedOptions.className;
- var classNameChanged = checkCacheSingle(className, _classNameCache, force);
-
- var resize = _currentPreparedOptions.resize;
- var resizeChanged = checkCacheSingle(resize, _resizeCache, force) && !_isBody;
-
- var textareaAutoWrapping = _isTextarea ? _targetElement.attr('wrap') !== 'off' : false;
- var textareaAutoWrappingChanged = checkCacheSingle(textareaAutoWrapping, _textareaAutoWrappingCache, force);
-
- var paddingAbsolute = _currentPreparedOptions.paddingAbsolute;
- var paddingAbsoluteChanged = checkCacheSingle(paddingAbsolute, _paddingAbsoluteCache, force);
-
- var clipAlways = _currentPreparedOptions.clipAlways;
- var clipAlwaysChanged = checkCacheSingle(clipAlways, _clipAlwaysCache, force);
-
- var sizeAutoCapable = _currentPreparedOptions.sizeAutoCapable && !_isBody;
- var sizeAutoCapableChanged = checkCacheSingle(sizeAutoCapable, _sizeAutoCapableCache, force);
-
- var ignoreOverlayScrollbarHiding = _currentPreparedOptions.nativeScrollbarsOverlaid.showNativeScrollbars;
- var ignoreOverlayScrollbarHidingChanged = checkCacheSingle(ignoreOverlayScrollbarHiding, _ignoreOverlayScrollbarHidingCache);
-
- var autoUpdate = _currentPreparedOptions.autoUpdate;
- var autoUpdateChanged = checkCacheSingle(autoUpdate, _autoUpdateCache);
-
- var overflowBehavior = _currentPreparedOptions.overflowBehavior;
- var overflowBehaviorChanged = checkCacheDouble(overflowBehavior, _overflowBehaviorCache, _strX, _strY, force);
-
- var textareaDynWidth = currentPreparedOptionsTextarea.dynWidth;
- var textareaDynWidthChanged = checkCacheSingle(_textareaDynWidthCache, textareaDynWidth);
-
- var textareaDynHeight = currentPreparedOptionsTextarea.dynHeight;
- var textareaDynHeightChanged = checkCacheSingle(_textareaDynHeightCache, textareaDynHeight);
-
- _scrollbarsAutoHideNever = scrollbarsAutoHide === 'n';
- _scrollbarsAutoHideScroll = scrollbarsAutoHide === 's';
- _scrollbarsAutoHideMove = scrollbarsAutoHide === 'm';
- _scrollbarsAutoHideLeave = scrollbarsAutoHide === 'l';
-
- _scrollbarsAutoHideDelay = currentPreparedOptionsScrollbars.autoHideDelay;
-
- _oldClassName = _classNameCache;
-
- _resizeNone = resize === 'n';
- _resizeBoth = resize === 'b';
- _resizeHorizontal = resize === 'h';
- _resizeVertical = resize === 'v';
-
- _normalizeRTLCache = _currentPreparedOptions.normalizeRTL;
-
- ignoreOverlayScrollbarHiding = ignoreOverlayScrollbarHiding && (_nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y);
-
- _scrollbarsVisibilityCache = scrollbarsVisibility;
- _scrollbarsAutoHideCache = scrollbarsAutoHide;
- _scrollbarsClickScrollingCache = scrollbarsClickScrolling;
- _scrollbarsDragScrollingCache = scrollbarsDragScrolling;
- _classNameCache = className;
- _resizeCache = resize;
- _textareaAutoWrappingCache = textareaAutoWrapping;
- _paddingAbsoluteCache = paddingAbsolute;
- _clipAlwaysCache = clipAlways;
- _sizeAutoCapableCache = sizeAutoCapable;
- _ignoreOverlayScrollbarHidingCache = ignoreOverlayScrollbarHiding;
- _autoUpdateCache = autoUpdate;
- _overflowBehaviorCache = extendDeep({}, overflowBehavior);
- _textareaDynWidthCache = textareaDynWidth;
- _textareaDynHeightCache = textareaDynHeight;
- _hasOverflowCache = _hasOverflowCache || { x: false, y: false };
-
- if (classNameChanged) {
- removeClass(_hostElement, _oldClassName + _strSpace + _classNameThemeNone);
- addClass(_hostElement, className !== undefined && className !== null && className.length > 0 ? className : _classNameThemeNone);
- }
-
- if (autoUpdateChanged) {
- if (autoUpdate === true) {
- disconnectMutationObservers();
- autoUpdateLoop.add(_base);
- }
- else if (autoUpdate === null) {
- if (_autoUpdateRecommended) {
- disconnectMutationObservers();
- autoUpdateLoop.add(_base);
- }
- else {
- autoUpdateLoop.remove(_base);
- connectMutationObservers();
- }
- }
- else {
- autoUpdateLoop.remove(_base);
- connectMutationObservers();
- }
- }
-
- if (sizeAutoCapableChanged) {
- if (sizeAutoCapable) {
- if (!_contentGlueElement) {
- _contentGlueElement = FRAMEWORK(generateDiv(_classNameContentGlueElement));
- _paddingElement.before(_contentGlueElement);
- }
- else {
- _contentGlueElement.show();
- }
- if (_sizeAutoObserverAdded) {
- _sizeAutoObserverElement.show();
- }
- else {
- _sizeAutoObserverElement = FRAMEWORK(generateDiv(_classNameSizeAutoObserverElement));
- _sizeAutoObserverElementNative = _sizeAutoObserverElement[0];
- _contentGlueElement.before(_sizeAutoObserverElement);
- var oldSize = {w: -1, h: -1};
- addResizeObserver(_sizeAutoObserverElement, function () {
- var newSize = {
- w: _sizeAutoObserverElementNative[LEXICON.oW],
- h: _sizeAutoObserverElementNative[LEXICON.oH]
- };
- if (checkCacheDouble(newSize, oldSize)) {
- if (_initialized && (_heightAutoCache && newSize.h > 0) || (_widthAutoCache && newSize.w > 0)) {
- update();
- }
- else if (_initialized && (!_heightAutoCache && newSize.h === 0) || (!_widthAutoCache && newSize.w === 0)) {
- update();
- }
- }
- oldSize = newSize;
- });
- _sizeAutoObserverAdded = true;
-
-
- if (_cssCalc !== null)
- _sizeAutoObserverElement.css(_strHeight, _cssCalc + '(100% + 1px)');
- }
- }
- else {
- if (_sizeAutoObserverAdded)
- _sizeAutoObserverElement.hide();
- if (_contentGlueElement)
- _contentGlueElement.hide();
- }
- }
-
- if (force) {
- _sizeObserverElement.find('*').trigger(_strScroll);
- if (_sizeAutoObserverAdded)
- _sizeAutoObserverElement.find('*').trigger(_strScroll);
- }
-
- var cssDirection = _hostElement.css('direction');
- var cssDirectionChanged = checkCacheSingle(cssDirection, _cssDirectionCache, force);
-
- var boxSizing = _hostElement.css('box-sizing');
- var boxSizingChanged = checkCacheSingle(boxSizing, _cssBoxSizingCache, force);
-
- var padding = {
- c: force,
- t: parseToZeroOrNumber(_hostElement.css(_strPaddingMinus + _strTop)),
- r: parseToZeroOrNumber(_hostElement.css(_strPaddingMinus + _strRight)),
- b: parseToZeroOrNumber(_hostElement.css(_strPaddingMinus + _strBottom)),
- l: parseToZeroOrNumber(_hostElement.css(_strPaddingMinus + _strLeft))
- };
-
- var sizeAutoObserverElementBCRect;
-
- try {
- sizeAutoObserverElementBCRect = _sizeAutoObserverAdded ? _sizeAutoObserverElementNative.getBoundingClientRect() : null;
- } catch (ex) {
- return;
- }
- _isRTL = cssDirection === 'rtl';
- _isBorderBox = (boxSizing === 'border-box');
- var isRTLLeft = _isRTL ? _strLeft : _strRight;
- var isRTLRight = _isRTL ? _strRight : _strLeft;
-
- var widthAutoResizeDetection = false;
- var widthAutoObserverDetection = (_sizeAutoObserverAdded && (_hostElement.css(_strFloat) !== 'none' )) ? (MATH.round(sizeAutoObserverElementBCRect.right - sizeAutoObserverElementBCRect.left) === 0) && (!paddingAbsolute ? (_hostElementNative[LEXICON.cW] - _paddingX) > 0 : true) : false;
- if (sizeAutoCapable && !widthAutoObserverDetection) {
- var tmpCurrHostWidth = _hostElementNative[LEXICON.oW];
- var tmpCurrContentGlueWidth = _contentGlueElement.css(_strWidth);
- _contentGlueElement.css(_strWidth, _strAuto);
- var tmpNewHostWidth = _hostElementNative[LEXICON.oW];
- _contentGlueElement.css(_strWidth, tmpCurrContentGlueWidth);
- widthAutoResizeDetection = tmpCurrHostWidth !== tmpNewHostWidth;
- if (!widthAutoResizeDetection) {
- _contentGlueElement.css(_strWidth, tmpCurrHostWidth + 1);
- tmpNewHostWidth = _hostElementNative[LEXICON.oW];
- _contentGlueElement.css(_strWidth, tmpCurrContentGlueWidth);
- widthAutoResizeDetection = tmpCurrHostWidth !== tmpNewHostWidth;
- }
- }
- var widthAuto = (widthAutoObserverDetection || widthAutoResizeDetection) && sizeAutoCapable && !displayIsHidden;
- var widthAutoChanged = checkCacheSingle(widthAuto, _widthAutoCache, force);
- var wasWidthAuto = !widthAuto && _widthAutoCache;
-
- var heightAuto = _sizeAutoObserverAdded && sizeAutoCapable && !displayIsHidden ? (MATH.round(sizeAutoObserverElementBCRect.bottom - sizeAutoObserverElementBCRect.top) === 0) : false;
- var heightAutoChanged = checkCacheSingle(heightAuto, _heightAutoCache, force);
- var wasHeightAuto = !heightAuto && _heightAutoCache;
-
-
- var strMinusWidth = '-' + _strWidth;
- var updateBorderX = (widthAuto && _isBorderBox) || !_isBorderBox;
- var updateBorderY = (heightAuto && _isBorderBox) || !_isBorderBox;
- var border = {
- c: force,
- t: updateBorderY ? parseToZeroOrNumber(_hostElement.css(_strBorderMinus + _strTop + strMinusWidth), true) : 0,
- r: updateBorderX ? parseToZeroOrNumber(_hostElement.css(_strBorderMinus + _strRight + strMinusWidth), true) : 0,
- b: updateBorderY ? parseToZeroOrNumber(_hostElement.css(_strBorderMinus + _strBottom + strMinusWidth), true) : 0,
- l: updateBorderX ? parseToZeroOrNumber(_hostElement.css(_strBorderMinus + _strLeft + strMinusWidth), true) : 0
- };
-
- var margin = {
- c: force,
- t: parseToZeroOrNumber(_hostElement.css(_strMarginMinus + _strTop)),
- r: parseToZeroOrNumber(_hostElement.css(_strMarginMinus + _strRight)),
- b: parseToZeroOrNumber(_hostElement.css(_strMarginMinus + _strBottom)),
- l: parseToZeroOrNumber(_hostElement.css(_strMarginMinus + _strLeft))
- };
-
- var cssMaxValue = {
- h: String(_hostElement.css(_strMaxMinus + _strHeight)),
- w: String(_hostElement.css(_strMaxMinus + _strWidth))
- };
-
- var contentElementCSS = { };
- var contentGlueElementCSS = { };
-
- var getHostSize = function() {
-
- return {
- w: _hostElementNative[LEXICON.cW],
- h: _hostElementNative[LEXICON.cH]
- };
- };
- var getViewportSize = function() {
-
-
-
- return {
- w: _paddingElementNative[LEXICON.oW] + MATH.max(0, _contentElementNative[LEXICON.cW] - _contentElementNative[LEXICON.sW]),
- h: _paddingElementNative[LEXICON.oH] + MATH.max(0, _contentElementNative[LEXICON.cH] - _contentElementNative[LEXICON.sH])
- };
- };
-
- var paddingAbsoluteX = _paddingX = padding.l + padding.r;
- var paddingAbsoluteY = _paddingY = padding.t + padding.b;
- paddingAbsoluteX *=
- paddingAbsoluteY *= paddingAbsolute ? 1 : 0;
- padding.c = checkCacheTRBL(padding, _cssPaddingCache);
-
- _borderX = border.l + border.r;
- _borderY = border.t + border.b;
- border.c = checkCacheTRBL(border, _cssBorderCache);
-
- _marginX = margin.l + margin.r;
- _marginY = margin.t + margin.b;
- margin.c = checkCacheTRBL(margin, _cssMarginCache);
-
- cssMaxValue.ih = parseToZeroOrNumber(cssMaxValue.h);
- cssMaxValue.iw = parseToZeroOrNumber(cssMaxValue.w);
- cssMaxValue.ch = cssMaxValue.h.indexOf('px') > -1;
- cssMaxValue.cw = cssMaxValue.w.indexOf('px') > -1;
- cssMaxValue.c = checkCacheDouble(cssMaxValue, _cssMaxValueCache, force);
-
- _cssDirectionCache = cssDirection;
- _cssBoxSizingCache = boxSizing;
- _widthAutoCache = widthAuto;
- _heightAutoCache = heightAuto;
- _cssPaddingCache = padding;
- _cssBorderCache = border;
- _cssMarginCache = margin;
- _cssMaxValueCache = cssMaxValue;
-
- if (cssDirectionChanged && _sizeAutoObserverAdded)
- _sizeAutoObserverElement.css(_strFloat, isRTLRight);
-
- if (padding.c || cssDirectionChanged || paddingAbsoluteChanged || widthAutoChanged || heightAutoChanged || boxSizingChanged || sizeAutoCapableChanged) {
- var paddingElementCSS = {};
- var textareaCSS = {};
- setTopRightBottomLeft(contentGlueElementCSS, _strMarginMinus, [-padding.t, -padding.r, -padding.b, -padding.l]);
- if (paddingAbsolute) {
- setTopRightBottomLeft(paddingElementCSS, _strEmpty, [padding.t, padding.r, padding.b, padding.l]);
- if (_isTextarea)
- setTopRightBottomLeft(textareaCSS, _strPaddingMinus);
- else
- setTopRightBottomLeft(contentElementCSS, _strPaddingMinus);
- }
- else {
- setTopRightBottomLeft(paddingElementCSS, _strEmpty);
- if (_isTextarea)
- setTopRightBottomLeft(textareaCSS, _strPaddingMinus, [padding.t, padding.r, padding.b, padding.l]);
- else
- setTopRightBottomLeft(contentElementCSS, _strPaddingMinus, [padding.t, padding.r, padding.b, padding.l]);
- }
- _paddingElement.css(paddingElementCSS);
- _targetElement.css(textareaCSS);
- }
-
- _viewportSize = getViewportSize();
-
- var textareaSize = _isTextarea ? textareaUpdate() : false;
-
- if (heightAuto && (heightAutoChanged || paddingAbsoluteChanged || boxSizingChanged || cssMaxValue.c || padding.c || border.c)) {
-
- contentElementCSS[_strMaxMinus + _strHeight] =
- (cssMaxValue.ch ? (cssMaxValue.ih - paddingAbsoluteY + (_isBorderBox ? -_borderY : _paddingY))
- : _strEmpty);
- contentElementCSS[_strHeight] = _strAuto;
- }
- else if (heightAutoChanged || paddingAbsoluteChanged) {
- contentElementCSS[_strMaxMinus + _strHeight] = _strEmpty;
- contentElementCSS[_strHeight] = _strHundredPercent;
- }
- if (widthAuto && (widthAutoChanged || paddingAbsoluteChanged || boxSizingChanged || cssMaxValue.c || padding.c || border.c || cssDirectionChanged)) {
-
- contentElementCSS[_strMaxMinus + _strWidth] =
- (cssMaxValue.cw ? (cssMaxValue.iw - paddingAbsoluteX + (_isBorderBox ? -_borderX : _paddingX)) +
- (_nativeScrollbarIsOverlaid.y ? _overlayScrollbarDummySize.y : 0)
- : _strEmpty);
- contentElementCSS[_strWidth] = _strAuto;
- contentGlueElementCSS[_strMaxMinus + _strWidth] = _strHundredPercent;
- }
- else if (widthAutoChanged || paddingAbsoluteChanged) {
- contentElementCSS[_strMaxMinus + _strWidth] = _strEmpty;
- contentElementCSS[_strWidth] = _strHundredPercent;
- contentElementCSS[_strFloat] = _strEmpty;
- contentGlueElementCSS[_strMaxMinus + _strWidth] = _strEmpty;
- }
- if (widthAuto) {
- if (!cssMaxValue.cw)
- contentElementCSS[_strMaxMinus + _strWidth] = _strEmpty;
- contentGlueElementCSS[_strWidth] = _isTextarea && textareaDynWidth ? textareaSize._dynamicWidth : _strAuto;
- contentElementCSS[_strWidth] = _strAuto;
- contentElementCSS[_strFloat] = isRTLRight;
- }
- else {
- contentGlueElementCSS[_strWidth] = _strEmpty;
- }
- if (heightAuto) {
- if (!cssMaxValue.ch)
- contentElementCSS[_strMaxMinus + _strHeight] = _strEmpty;
-
-
- contentGlueElementCSS[_strHeight] = _isTextarea ? textareaDynHeight ? textareaSize._dynamicHeight : _strAuto : _contentElementNative[LEXICON.cH];
- }
- else {
- contentGlueElementCSS[_strHeight] = _strEmpty;
- }
- if (sizeAutoCapable)
- _contentGlueElement.css(contentGlueElementCSS);
- _contentElement.css(contentElementCSS);
-
- contentElementCSS = {};
- contentGlueElementCSS = {};
-
- if (hostSizeChanged || contentSizeChanged || cssDirectionChanged || boxSizingChanged || paddingAbsoluteChanged || widthAutoChanged || widthAuto || heightAutoChanged || heightAuto || cssMaxValue.c || ignoreOverlayScrollbarHidingChanged || overflowBehaviorChanged || clipAlwaysChanged || resizeChanged || scrollbarsVisibilityChanged || scrollbarsAutoHideChanged || scrollbarsDragScrollingChanged || scrollbarsClickScrollingChanged || textareaDynWidthChanged || textareaDynHeightChanged || textareaAutoWrappingChanged || force) {
- var strOverflow = 'overflow';
- var strOverflowX = strOverflow + '-x';
- var strOverflowY = strOverflow + '-y';
- var strHidden = 'hidden';
- var strVisible = 'visible';
-
- var hideOverflow4CorrectMeasuring = _restrictedMeasuring ?
- (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y) ||
- (_viewportSize.w < _nativeScrollbarMinSize.y || _viewportSize.h < _nativeScrollbarMinSize.x) ||
- heightAuto || displayIsHiddenChanged
- : heightAuto;
-
-
- var viewportElementResetCSS = { };
- var resetXTmp = _hasOverflowCache.y && _hideOverflowCache.ys && !ignoreOverlayScrollbarHiding ? (_nativeScrollbarIsOverlaid.y ? _viewportElement.css(isRTLLeft) : -_nativeScrollbarSize.y) : 0;
- var resetBottomTmp = _hasOverflowCache.x && _hideOverflowCache.xs && !ignoreOverlayScrollbarHiding ? (_nativeScrollbarIsOverlaid.x ? _viewportElement.css(_strBottom) : -_nativeScrollbarSize.x) : 0;
- setTopRightBottomLeft(viewportElementResetCSS, _strEmpty);
- _viewportElement.css(viewportElementResetCSS);
- if(hideOverflow4CorrectMeasuring)
- _contentElement.css(strOverflow, strHidden);
-
- var contentMeasureElement = getContentMeasureElement();
-
- var contentMeasureElementGuaranty = _restrictedMeasuring && !hideOverflow4CorrectMeasuring ? _viewportElementNative : contentMeasureElement;
- var contentSize = {
-
- w: _isTextarea && textareaSize ? (textareaDynWidth ? textareaSize._dynamicWidth : textareaSize._originalWidth) : contentMeasureElement[LEXICON.cW],
- h: _isTextarea && textareaSize ? (textareaDynHeight ? textareaSize._dynamicHeight : textareaSize._originalHeight) : contentMeasureElement[LEXICON.cH]
- };
- var scrollSize = {
- w: MATH.max(contentMeasureElement[LEXICON.sW], contentMeasureElementGuaranty[LEXICON.sW]),
- h: MATH.max(contentMeasureElement[LEXICON.sH], contentMeasureElementGuaranty[LEXICON.sH])
- };
-
- viewportElementResetCSS[_strBottom] = wasHeightAuto ? _strEmpty : resetBottomTmp;
- viewportElementResetCSS[isRTLLeft] = wasWidthAuto ? _strEmpty : resetXTmp;
- _viewportElement.css(viewportElementResetCSS);
- _viewportSize = getViewportSize();
-
- var hostSize = getHostSize();
- var contentGlueSize = {
-
-
- w: MATH.max((widthAuto ? contentSize.w : scrollSize.w) + paddingAbsoluteX, hostSize.w),
- h: MATH.max((heightAuto ? contentSize.h : scrollSize.h) + paddingAbsoluteY, hostSize.h)
- };
- contentGlueSize.c = checkCacheDouble(contentGlueSize, _contentGlueSizeCache, force);
- _contentGlueSizeCache = contentGlueSize;
-
- if (sizeAutoCapable) {
-
- if (contentGlueSize.c || (heightAuto || widthAuto)) {
- contentGlueElementCSS[_strWidth] = contentGlueSize.w;
- contentGlueElementCSS[_strHeight] = contentGlueSize.h;
-
- if(!_isTextarea) {
- contentSize = {
-
- w: contentMeasureElement[LEXICON.cW],
- h: contentMeasureElement[LEXICON.cH]
- };
- }
- }
- var textareaCoverCSS = {};
- var setContentGlueElementCSSfunction = function(horizontal) {
- var scrollbarVars = getScrollbarVars(horizontal);
- var wh = scrollbarVars._w_h;
- var strWH = scrollbarVars._width_height;
- var autoSize = horizontal ? widthAuto : heightAuto;
- var borderSize = horizontal ? _borderX : _borderY;
- var paddingSize = horizontal ? _paddingX : _paddingY;
- var marginSize = horizontal ? _marginX : _marginY;
- var maxSize = contentGlueElementCSS[strWH] + (_isBorderBox ? borderSize : -paddingSize);
-
- if (!autoSize || (!autoSize && border.c))
- contentGlueElementCSS[strWH] = hostSize[wh] - (_isBorderBox ? 0 : paddingSize + borderSize) - 1 - marginSize;
-
- if (autoSize && cssMaxValue['c' + wh] && cssMaxValue['i' + wh] === maxSize)
- contentGlueElementCSS[strWH] = maxSize + (_isBorderBox ? 0 : paddingSize) + 1;
-
- if (autoSize && (contentSize[wh] < _viewportSize[wh]) && (horizontal ? (_isTextarea ? !textareaAutoWrapping : false) : true)) {
- if (_isTextarea)
- textareaCoverCSS[strWH] = parseToZeroOrNumber(_textareaCoverElement.css(strWH)) - 1;
- contentGlueElementCSS[strWH] -= 1;
- }
-
- if (contentSize[wh] > 0)
- contentGlueElementCSS[strWH] = MATH.max(1, contentGlueElementCSS[strWH]);
- };
- setContentGlueElementCSSfunction(true);
- setContentGlueElementCSSfunction(false);
- if (_isTextarea)
- _textareaCoverElement.css(textareaCoverCSS);
- _contentGlueElement.css(contentGlueElementCSS);
- }
- if (widthAuto)
- contentElementCSS[_strWidth] = _strHundredPercent;
- if (widthAuto && !_isBorderBox && !_mutationObserversConnected)
- contentElementCSS[_strFloat] = 'none';
-
- _contentElement.css(contentElementCSS);
- contentElementCSS = {};
-
- var contentScrollSize = {
- w: MATH.max(contentMeasureElement[LEXICON.sW], contentMeasureElementGuaranty[LEXICON.sW]),
- h: MATH.max(contentMeasureElement[LEXICON.sH], contentMeasureElementGuaranty[LEXICON.sH])
- };
- contentScrollSize.c = contentSizeChanged = checkCacheDouble(contentScrollSize, _contentScrollSizeCache, force);
- _contentScrollSizeCache = contentScrollSize;
-
- if(hideOverflow4CorrectMeasuring)
- _contentElement.css(strOverflow, _strEmpty);
-
-
- _viewportSize = getViewportSize();
- hostSize = getHostSize();
- hostSizeChanged = checkCacheDouble(hostSize, _hostSizeCache);
- _hostSizeCache = hostSize;
- var hideOverflowForceTextarea = _isTextarea && (_viewportSize.w === 0 || _viewportSize.h === 0);
- var previousOverflow = _overflowAmountCache;
- var overflowBehaviorIsVS = { };
- var overflowBehaviorIsVH = { };
- var overflowBehaviorIsS = { };
- var overflowAmount = { };
- var hasOverflow = { };
- var hideOverflow = { };
- var canScroll = { };
- var viewportRect = _paddingElementNative.getBoundingClientRect();
- var setOverflowVariables = function(horizontal) {
- var scrollbarVars = getScrollbarVars(horizontal);
- var scrollbarVarsInverted = getScrollbarVars(!horizontal);
- var xyI = scrollbarVarsInverted._x_y;
- var xy = scrollbarVars._x_y;
- var wh = scrollbarVars._w_h;
- var widthHeight = scrollbarVars._width_height;
- var scrollMax = _strScroll + scrollbarVars._Left_Top + 'Max';
- var fractionalOverflowAmount = viewportRect[widthHeight] ? MATH.abs(viewportRect[widthHeight] - _viewportSize[wh]) : 0;
- overflowBehaviorIsVS[xy] = overflowBehavior[xy] === 'v-s';
- overflowBehaviorIsVH[xy] = overflowBehavior[xy] === 'v-h';
- overflowBehaviorIsS[xy] = overflowBehavior[xy] === 's';
- overflowAmount[xy] = MATH.max(0, MATH.round((contentScrollSize[wh] - _viewportSize[wh]) * 100) / 100);
- overflowAmount[xy] *= (hideOverflowForceTextarea || (_viewportElementNative[scrollMax] === 0 && fractionalOverflowAmount > 0 && fractionalOverflowAmount < 1)) ? 0 : 1;
- hasOverflow[xy] = overflowAmount[xy] > 0;
-
-
-
- hideOverflow[xy] = overflowBehaviorIsVS[xy] || overflowBehaviorIsVH[xy] ? (hasOverflow[xyI] && !overflowBehaviorIsVS[xyI] && !overflowBehaviorIsVH[xyI]) : hasOverflow[xy];
- hideOverflow[xy + 's'] = hideOverflow[xy] ? (overflowBehaviorIsS[xy] || overflowBehaviorIsVS[xy]) : false;
- canScroll[xy] = hasOverflow[xy] && hideOverflow[xy + 's'];
- };
- setOverflowVariables(true);
- setOverflowVariables(false);
- overflowAmount.c = checkCacheDouble(overflowAmount, _overflowAmountCache, _strX, _strY, force);
- _overflowAmountCache = overflowAmount;
- hasOverflow.c = checkCacheDouble(hasOverflow, _hasOverflowCache, _strX, _strY, force);
- _hasOverflowCache = hasOverflow;
- hideOverflow.c = checkCacheDouble(hideOverflow, _hideOverflowCache, _strX, _strY, force);
- _hideOverflowCache = hideOverflow;
-
- if (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y) {
- var borderDesign = 'px solid transparent';
- var contentArrangeElementCSS = { };
- var arrangeContent = { };
- var arrangeChanged = force;
- var setContentElementCSS;
- if (hasOverflow.x || hasOverflow.y) {
- arrangeContent.w = _nativeScrollbarIsOverlaid.y && hasOverflow.y ? contentScrollSize.w + _overlayScrollbarDummySize.y : _strEmpty;
- arrangeContent.h = _nativeScrollbarIsOverlaid.x && hasOverflow.x ? contentScrollSize.h + _overlayScrollbarDummySize.x : _strEmpty;
- arrangeChanged = checkCacheSingle(arrangeContent, _arrangeContentSizeCache, force);
- _arrangeContentSizeCache = arrangeContent;
- }
- if (hasOverflow.c || hideOverflow.c || contentScrollSize.c || cssDirectionChanged || widthAutoChanged || heightAutoChanged || widthAuto || heightAuto || ignoreOverlayScrollbarHidingChanged) {
- contentElementCSS[_strMarginMinus + isRTLRight] = contentElementCSS[_strBorderMinus + isRTLRight] = _strEmpty;
- setContentElementCSS = function(horizontal) {
- var scrollbarVars = getScrollbarVars(horizontal);
- var scrollbarVarsInverted = getScrollbarVars(!horizontal);
- var xy = scrollbarVars._x_y;
- var strDirection = horizontal ? _strBottom : isRTLLeft;
- var invertedAutoSize = horizontal ? heightAuto : widthAuto;
- if (_nativeScrollbarIsOverlaid[xy] && hasOverflow[xy] && hideOverflow[xy + 's']) {
- contentElementCSS[_strMarginMinus + strDirection] = invertedAutoSize ? (ignoreOverlayScrollbarHiding ? _strEmpty : _overlayScrollbarDummySize[xy]) : _strEmpty;
- contentElementCSS[_strBorderMinus + strDirection] = ((horizontal ? !invertedAutoSize : true) && !ignoreOverlayScrollbarHiding) ? (_overlayScrollbarDummySize[xy] + borderDesign) : _strEmpty;
- }
- else {
- arrangeContent[scrollbarVarsInverted._w_h] =
- contentElementCSS[_strMarginMinus + strDirection] =
- contentElementCSS[_strBorderMinus + strDirection] = _strEmpty;
- arrangeChanged = true;
- }
- };
- setContentElementCSS(true);
- setContentElementCSS(false);
- }
- if (ignoreOverlayScrollbarHiding) {
- arrangeContent.w = arrangeContent.h = _strEmpty;
- arrangeChanged = true;
- }
- if (arrangeChanged) {
- contentArrangeElementCSS[_strWidth] = hideOverflow.y ? arrangeContent.w : _strEmpty;
- contentArrangeElementCSS[_strHeight] = hideOverflow.x ? arrangeContent.h : _strEmpty;
- if (!_contentArrangeElement) {
- _contentArrangeElement = FRAMEWORK(generateDiv(_classNameContentArrangeElement));
- _viewportElement.prepend(_contentArrangeElement);
- }
- _contentArrangeElement.css(contentArrangeElementCSS);
- }
- _contentElement.css(contentElementCSS);
- }
- var viewportElementCSS = {};
- var paddingElementCSS = {};
- var setViewportCSS;
- if (hostSizeChanged || hasOverflow.c || hideOverflow.c || contentScrollSize.c || overflowBehaviorChanged || boxSizingChanged || ignoreOverlayScrollbarHidingChanged || cssDirectionChanged || clipAlwaysChanged || heightAutoChanged) {
- viewportElementCSS[isRTLRight] = _strEmpty;
- setViewportCSS = function(horizontal) {
- var scrollbarVars = getScrollbarVars(horizontal);
- var scrollbarVarsInverted = getScrollbarVars(!horizontal);
- var xy = scrollbarVars._x_y;
- var XY = scrollbarVars._X_Y;
- var strDirection = horizontal ? _strBottom : isRTLLeft;
- var reset = function () {
- viewportElementCSS[strDirection] = _strEmpty;
- _contentBorderSize[scrollbarVarsInverted._w_h] = 0;
- };
- if (hasOverflow[xy] && hideOverflow[xy + 's']) {
- viewportElementCSS[strOverflow + XY] = _strScroll;
- if (!ignoreOverlayScrollbarHiding) {
- viewportElementCSS[strDirection] = -(_nativeScrollbarIsOverlaid[xy] ? _overlayScrollbarDummySize[xy] : _nativeScrollbarSize[xy]);
- _contentBorderSize[scrollbarVarsInverted._w_h] = _nativeScrollbarIsOverlaid[xy] ? _overlayScrollbarDummySize[scrollbarVarsInverted._x_y] : 0;
- }
- else
- reset();
- } else {
- viewportElementCSS[strOverflow + XY] = _strEmpty;
- reset();
- }
- };
- setViewportCSS(true);
- setViewportCSS(false);
-
-
-
-
- if ((_viewportSize.h < _nativeScrollbarMinSize.x || _viewportSize.w < _nativeScrollbarMinSize.y)
- && ((hasOverflow.x && hideOverflow.x && !_nativeScrollbarIsOverlaid.x) || (hasOverflow.y && hideOverflow.y && !_nativeScrollbarIsOverlaid.y))) {
- viewportElementCSS[_strPaddingMinus + _strTop] = _nativeScrollbarMinSize.x;
- viewportElementCSS[_strMarginMinus + _strTop] = -_nativeScrollbarMinSize.x;
- viewportElementCSS[_strPaddingMinus + isRTLRight] = _nativeScrollbarMinSize.y;
- viewportElementCSS[_strMarginMinus + isRTLRight] = -_nativeScrollbarMinSize.y;
- }
- else {
- viewportElementCSS[_strPaddingMinus + _strTop] =
- viewportElementCSS[_strMarginMinus + _strTop] =
- viewportElementCSS[_strPaddingMinus + isRTLRight] =
- viewportElementCSS[_strMarginMinus + isRTLRight] = _strEmpty;
- }
- viewportElementCSS[_strPaddingMinus + isRTLLeft] =
- viewportElementCSS[_strMarginMinus + isRTLLeft] = _strEmpty;
-
- if ((hasOverflow.x && hideOverflow.x) || (hasOverflow.y && hideOverflow.y) || hideOverflowForceTextarea) {
-
- if (_isTextarea && hideOverflowForceTextarea) {
- paddingElementCSS[strOverflowX] =
- paddingElementCSS[strOverflowY] = strHidden;
- }
- }
- else {
- if (!clipAlways || (overflowBehaviorIsVH.x || overflowBehaviorIsVS.x || overflowBehaviorIsVH.y || overflowBehaviorIsVS.y)) {
-
- if (_isTextarea) {
- paddingElementCSS[strOverflowX] =
- paddingElementCSS[strOverflowY] = _strEmpty;
- }
- viewportElementCSS[strOverflowX] =
- viewportElementCSS[strOverflowY] = strVisible;
- }
- }
- _paddingElement.css(paddingElementCSS);
- _viewportElement.css(viewportElementCSS);
- viewportElementCSS = { };
-
- if ((hasOverflow.c || boxSizingChanged || widthAutoChanged || heightAutoChanged) && !(_nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y)) {
- var elementStyle = _contentElementNative[LEXICON.s];
- var dump;
- elementStyle.webkitTransform = 'scale(1)';
- elementStyle.display = 'run-in';
- dump = _contentElementNative[LEXICON.oH];
- elementStyle.display = _strEmpty;
- elementStyle.webkitTransform = _strEmpty;
- }
-
- }
-
-
- contentElementCSS = {};
- if (cssDirectionChanged || widthAutoChanged || heightAutoChanged) {
- if (_isRTL && widthAuto) {
- var floatTmp = _contentElement.css(_strFloat);
- var posLeftWithoutFloat = MATH.round(_contentElement.css(_strFloat, _strEmpty).css(_strLeft, _strEmpty).position().left);
- _contentElement.css(_strFloat, floatTmp);
- var posLeftWithFloat = MATH.round(_contentElement.position().left);
- if (posLeftWithoutFloat !== posLeftWithFloat)
- contentElementCSS[_strLeft] = posLeftWithoutFloat;
- }
- else {
- contentElementCSS[_strLeft] = _strEmpty;
- }
- }
- _contentElement.css(contentElementCSS);
-
- if (_isTextarea && contentSizeChanged) {
- var textareaInfo = getTextareaInfo();
- if (textareaInfo) {
- var textareaRowsChanged = _textareaInfoCache === undefined ? true : textareaInfo._rows !== _textareaInfoCache._rows;
- var cursorRow = textareaInfo._cursorRow;
- var cursorCol = textareaInfo._cursorColumn;
- var widestRow = textareaInfo._widestRow;
- var lastRow = textareaInfo._rows;
- var lastCol = textareaInfo._columns;
- var cursorPos = textareaInfo._cursorPosition;
- var cursorMax = textareaInfo._cursorMax;
- var cursorIsLastPosition = (cursorPos >= cursorMax && _textareaHasFocus);
- var textareaScrollAmount = {
- x: (!textareaAutoWrapping && (cursorCol === lastCol && cursorRow === widestRow)) ? _overflowAmountCache.x : -1,
- y: (textareaAutoWrapping ? cursorIsLastPosition || textareaRowsChanged && (previousOverflow !== undefined ? (currScroll.y === previousOverflow.y) : false) : (cursorIsLastPosition || textareaRowsChanged) && cursorRow === lastRow) ? _overflowAmountCache.y : -1
- };
- currScroll.x = textareaScrollAmount.x > -1 ? (_isRTL && _normalizeRTLCache && _rtlScrollBehavior.i ? 0 : textareaScrollAmount.x) : currScroll.x;
- currScroll.y = textareaScrollAmount.y > -1 ? textareaScrollAmount.y : currScroll.y;
- }
- _textareaInfoCache = textareaInfo;
- }
- if (_isRTL && _rtlScrollBehavior.i && _nativeScrollbarIsOverlaid.y && hasOverflow.x && _normalizeRTLCache)
- currScroll.x += _contentBorderSize.w || 0;
- if(widthAuto)
- _hostElement[_strScrollLeft](0);
- if(heightAuto)
- _hostElement[_strScrollTop](0);
- _viewportElement[_strScrollLeft](currScroll.x)[_strScrollTop](currScroll.y);
-
- var scrollbarsVisibilityVisible = scrollbarsVisibility === 'v';
- var scrollbarsVisibilityHidden = scrollbarsVisibility === 'h';
- var scrollbarsVisibilityAuto = scrollbarsVisibility === 'a';
- var showScrollbarH = COMPATIBILITY.bind(refreshScrollbarAppearance, 0, true, true, canScroll.x);
- var showScrollbarV = COMPATIBILITY.bind(refreshScrollbarAppearance, 0, false, true, canScroll.y);
- var hideScrollbarH = COMPATIBILITY.bind(refreshScrollbarAppearance, 0, true, false, canScroll.x);
- var hideScrollbarV = COMPATIBILITY.bind(refreshScrollbarAppearance, 0, false, false, canScroll.y);
-
- if (hideOverflow.x || hideOverflow.y)
- addClass(_hostElement, _classNameHostOverflow);
- else
- removeClass(_hostElement, _classNameHostOverflow);
- if (hideOverflow.x)
- addClass(_hostElement, _classNameHostOverflowX);
- else
- removeClass(_hostElement, _classNameHostOverflowX);
- if (hideOverflow.y)
- addClass(_hostElement, _classNameHostOverflowY);
- else
- removeClass(_hostElement, _classNameHostOverflowY);
-
- if (cssDirectionChanged) {
- if (_isRTL)
- addClass(_hostElement, _classNameHostRTL);
- else
- removeClass(_hostElement, _classNameHostRTL);
- }
-
- if (_isBody)
- addClass(_hostElement, _classNameHostResizeDisabled);
- if (resizeChanged) {
- var addCornerEvents = function () { _scrollbarCornerElement.on(_strMouseTouchDownEvent, _resizeOnMouseTouchDown); };
- var removeCornerEvents = function () { _scrollbarCornerElement.off(_strMouseTouchDownEvent, _resizeOnMouseTouchDown); };
- removeClass(_scrollbarCornerElement, [
- _classNameHostResizeDisabled,
- _classNameScrollbarCornerResize,
- _classNameScrollbarCornerResizeB,
- _classNameScrollbarCornerResizeH,
- _classNameScrollbarCornerResizeV].join(_strSpace));
- if (_resizeNone) {
- addClass(_hostElement, _classNameHostResizeDisabled);
- removeCornerEvents();
- }
- else {
- addClass(_scrollbarCornerElement, _classNameScrollbarCornerResize);
- if (_resizeBoth)
- addClass(_scrollbarCornerElement, _classNameScrollbarCornerResizeB);
- else if (_resizeHorizontal)
- addClass(_scrollbarCornerElement, _classNameScrollbarCornerResizeH);
- else if (_resizeVertical)
- addClass(_scrollbarCornerElement, _classNameScrollbarCornerResizeV);
- removeCornerEvents();
- addCornerEvents();
- }
- }
-
- if (scrollbarsVisibilityChanged || overflowBehaviorChanged || hideOverflow.c || hasOverflow.c || ignoreOverlayScrollbarHidingChanged) {
- if (ignoreOverlayScrollbarHiding) {
- if (ignoreOverlayScrollbarHidingChanged) {
- removeClass(_hostElement, _classNameHostScrolling);
- if (ignoreOverlayScrollbarHiding) {
- hideScrollbarH();
- hideScrollbarV();
- }
- }
- }
- else if (scrollbarsVisibilityAuto) {
- if (canScroll.x)
- showScrollbarH();
- else
- hideScrollbarH();
- if (canScroll.y)
- showScrollbarV();
- else
- hideScrollbarV();
- }
- else if (scrollbarsVisibilityVisible) {
- showScrollbarH();
- showScrollbarV();
- }
- else if (scrollbarsVisibilityHidden) {
- hideScrollbarH();
- hideScrollbarV();
- }
- }
-
- if (scrollbarsAutoHideChanged || ignoreOverlayScrollbarHidingChanged) {
- if (_scrollbarsAutoHideLeave || _scrollbarsAutoHideMove) {
- setupHostMouseTouchEvents(true);
- setupHostMouseTouchEvents();
- }
- else {
- setupHostMouseTouchEvents(true);
- }
- if (_scrollbarsAutoHideNever)
- refreshScrollbarsAutoHide(true);
- else
- refreshScrollbarsAutoHide(false, true);
- }
-
- if (hostSizeChanged || overflowAmount.c || heightAutoChanged || widthAutoChanged || resizeChanged || boxSizingChanged || paddingAbsoluteChanged || ignoreOverlayScrollbarHidingChanged || cssDirectionChanged) {
- refreshScrollbarHandleLength(true);
- refreshScrollbarHandleOffset(true);
- refreshScrollbarHandleLength(false);
- refreshScrollbarHandleOffset(false);
- }
-
- if (scrollbarsClickScrollingChanged)
- refreshScrollbarsInteractive(true, scrollbarsClickScrolling);
- if (scrollbarsDragScrollingChanged)
- refreshScrollbarsInteractive(false, scrollbarsDragScrolling);
-
- if (cssDirectionChanged) {
- dispatchCallback("onDirectionChanged", {
- isRTL: _isRTL,
- dir: cssDirection
- });
- }
- if (hostSizeChanged) {
- dispatchCallback("onHostSizeChanged", {
- width: _hostSizeCache.w,
- height: _hostSizeCache.h
- });
- }
- if (contentSizeChanged) {
- dispatchCallback("onContentSizeChanged", {
- width: _contentScrollSizeCache.w,
- height: _contentScrollSizeCache.h
- });
- }
- if (hasOverflow.c || hideOverflow.c) {
- dispatchCallback("onOverflowChanged", {
- x: hasOverflow.x,
- y: hasOverflow.y,
- xScrollable: hideOverflow.xs,
- yScrollable: hideOverflow.ys,
- clipped: hideOverflow.x || hideOverflow.y
- });
- }
- if (overflowAmount.c) {
- dispatchCallback("onOverflowAmountChanged", {
- x: overflowAmount.x,
- y: overflowAmount.y
- });
- }
- }
-
- if (_isBody && (_hasOverflowCache.c || _bodyMinSizeCache.c)) {
-
- if (!_bodyMinSizeCache.f)
- bodyMinSizeChanged();
- if (_nativeScrollbarIsOverlaid.y && _hasOverflowCache.x)
- _contentElement.css(_strMinMinus + _strWidth, _bodyMinSizeCache.w + _overlayScrollbarDummySize.y);
- if (_nativeScrollbarIsOverlaid.x && _hasOverflowCache.y)
- _contentElement.css(_strMinMinus + _strHeight, _bodyMinSizeCache.h + _overlayScrollbarDummySize.x);
- _bodyMinSizeCache.c = false;
- }
- unfreezeResizeObserver(_sizeObserverElement);
- unfreezeResizeObserver(_sizeAutoObserverElement);
- dispatchCallback("onUpdated", { forced: force });
- }
-
-
- function setOptions(newOptions) {
- _currentOptions = extendDeep({}, _currentOptions, _pluginsOptions._validate(newOptions, _pluginsOptions._template, true));
- _currentPreparedOptions = extendDeep({}, _currentPreparedOptions, _pluginsOptions._validate(newOptions, _pluginsOptions._template, false, true));
- }
-
-
- function setupStructureDOM(destroy) {
- var adoptAttrs = _currentPreparedOptions.textarea.inheritedAttrs;
- var adoptAttrsMap = { };
- var applyAdoptedAttrs = function() {
- var applyAdoptedAttrsElm = destroy ? _targetElement : _hostElement;
- FRAMEWORK.each(adoptAttrsMap, function(k, v) {
- if(type(v) == TYPES.s) {
- if(k == LEXICON.c)
- applyAdoptedAttrsElm.addClass(v);
- else
- applyAdoptedAttrsElm.attr(k, v);
- }
- });
- };
- var hostElementClassNames = [
- _classNameHostElement,
- _classNameHostTextareaElement,
- _classNameHostResizeDisabled,
- _classNameHostRTL,
- _classNameHostScrollbarHorizontalHidden,
- _classNameHostScrollbarVerticalHidden,
- _classNameHostTransition,
- _classNameHostScrolling,
- _classNameHostOverflow,
- _classNameHostOverflowX,
- _classNameHostOverflowY,
- _classNameThemeNone,
- _classNameTextareaElement,
- _classNameTextInherit,
- _classNameCache].join(_strSpace);
- adoptAttrs = type(adoptAttrs) == TYPES.s ? adoptAttrs.split(' ') : adoptAttrs;
- if(type(adoptAttrs) == TYPES.a) {
- FRAMEWORK.each(adoptAttrs, function(i, v) {
- if(type(v) == TYPES.s)
- adoptAttrsMap[v] = destroy ? _hostElement.attr(v) : _targetElement.attr(v);
- });
- }
- if(!destroy) {
- if (_isTextarea) {
- var hostElementCSS = {};
- var parent = _targetElement.parent();
- _isTextareaHostGenerated = !(parent.hasClass(_classNameHostTextareaElement) && parent.children()[LEXICON.l] === 1);
- if (!_currentPreparedOptions.sizeAutoCapable) {
- hostElementCSS[_strWidth] = _targetElement.css(_strWidth);
- hostElementCSS[_strHeight] = _targetElement.css(_strHeight);
- }
- if(_isTextareaHostGenerated)
- _targetElement.wrap(generateDiv(_classNameHostTextareaElement));
- _hostElement = _targetElement.parent();
- _hostElement.css(hostElementCSS)
- .wrapInner(generateDiv(_classNameContentElement + _strSpace + _classNameTextInherit))
- .wrapInner(generateDiv(_classNameViewportElement + _strSpace + _classNameTextInherit))
- .wrapInner(generateDiv(_classNamePaddingElement + _strSpace + _classNameTextInherit));
- _contentElement = findFirst(_hostElement, _strDot + _classNameContentElement);
- _viewportElement = findFirst(_hostElement, _strDot + _classNameViewportElement);
- _paddingElement = findFirst(_hostElement, _strDot + _classNamePaddingElement);
- _textareaCoverElement = FRAMEWORK(generateDiv(_classNameTextareaCoverElement));
- _contentElement.prepend(_textareaCoverElement);
- addClass(_targetElement, _classNameTextareaElement + _strSpace + _classNameTextInherit);
- if(_isTextareaHostGenerated)
- applyAdoptedAttrs();
- }
- else {
- _hostElement = _targetElement;
- _hostElement.wrapInner(generateDiv(_classNameContentElement))
- .wrapInner(generateDiv(_classNameViewportElement))
- .wrapInner(generateDiv(_classNamePaddingElement));
- _contentElement = findFirst(_hostElement, _strDot + _classNameContentElement);
- _viewportElement = findFirst(_hostElement, _strDot + _classNameViewportElement);
- _paddingElement = findFirst(_hostElement, _strDot + _classNamePaddingElement);
- addClass(_targetElement, _classNameHostElement);
- }
- if (_nativeScrollbarStyling)
- addClass(_viewportElement, _nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y ? _classNameViewportNativeScrollbarsOverlaid : _classNameViewportNativeScrollbarsInvisible);
- if (_isBody)
- addClass(_htmlElement, _classNameHTMLElement);
- _sizeObserverElement = FRAMEWORK(generateDiv('os-resize-observer-host'));
- _hostElement.prepend(_sizeObserverElement);
- _sizeObserverElementNative = _sizeObserverElement[0];
- _hostElementNative = _hostElement[0];
- _paddingElementNative = _paddingElement[0];
- _viewportElementNative = _viewportElement[0];
- _contentElementNative = _contentElement[0];
- }
- else {
- _contentElement.contents()
- .unwrap()
- .unwrap()
- .unwrap();
- removeClass(_hostElement, hostElementClassNames);
- if (_isTextarea) {
- _targetElement.removeAttr(LEXICON.s);
- if(_isTextareaHostGenerated)
- applyAdoptedAttrs();
- removeClass(_targetElement, hostElementClassNames);
- remove(_textareaCoverElement);
- if(_isTextareaHostGenerated) {
- _targetElement.unwrap();
- remove(_hostElement);
- }
- else {
- addClass(_hostElement, _classNameHostTextareaElement);
- }
- }
- else {
- removeClass(_targetElement, _classNameHostElement);
- }
- if (_isBody)
- removeClass(_htmlElement, _classNameHTMLElement);
- remove(_sizeObserverElement);
- }
- }
-
- function setupStructureEvents(destroy) {
- var textareaKeyDownRestrictedKeyCodes = [
- 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 123,
- 33, 34,
- 37, 38, 39, 40,
- 16, 17, 18, 19, 20, 144
- ];
- var textareaKeyDownKeyCodesList = [ ];
- var textareaUpdateIntervalID;
- var scrollStopDelay = 175;
- var scrollStopTimeoutId;
- var strOnOff = destroy ? 'off' : 'on';
- var updateTextarea;
- var viewportOnScroll;
- if(!destroy && _isTextarea) {
- _textareaEvents = { };
- updateTextarea = function(doClearInterval) {
- textareaUpdate();
- _base.update(_strAuto);
- if(doClearInterval)
- clearInterval(textareaUpdateIntervalID);
- };
- _textareaEvents[_strScroll] = function(event) {
- _targetElement[_strScrollLeft](_rtlScrollBehavior.i && _normalizeRTLCache ? 9999999 : 0);
- _targetElement[_strScrollTop](0);
- COMPATIBILITY.prvD(event);
- COMPATIBILITY.stpP(event);
- return false;
- };
- _textareaEvents['drop'] = function() {
- setTimeout(function () {
- if(!_destroyed)
- updateTextarea();
- }, 50);
- };
- _textareaEvents['focus'] = function() {
- _textareaHasFocus = true;
- };
- _textareaEvents['focusout'] = function() {
- _textareaHasFocus = false;
- textareaKeyDownKeyCodesList = [ ];
- updateTextarea(true);
- };
- if (_msieVersion > 9 || !_autoUpdateRecommended) {
- _textareaEvents['input'] = function textareaOnInput() {
- updateTextarea();
- }
- }
- else {
- _textareaEvents[_strKeyDownEvent] = function textareaOnKeyDown(event) {
- var keyCode = event.keyCode;
- if (FRAMEWORK.inArray(keyCode, textareaKeyDownRestrictedKeyCodes) > -1)
- return;
- if (!textareaKeyDownKeyCodesList.length) {
- updateTextarea();
- textareaUpdateIntervalID = setInterval(updateTextarea, 1000 / 60);
- }
- if (FRAMEWORK.inArray(keyCode, textareaKeyDownKeyCodesList) === -1)
- textareaKeyDownKeyCodesList.push(keyCode);
- };
- _textareaEvents[_strKeyUpEvent] = function(event) {
- var keyCode = event.keyCode;
- var index = FRAMEWORK.inArray(keyCode, textareaKeyDownKeyCodesList);
- if (FRAMEWORK.inArray(keyCode, textareaKeyDownRestrictedKeyCodes) > -1)
- return;
- if (index > -1)
- textareaKeyDownKeyCodesList.splice(index, 1);
- if (!textareaKeyDownKeyCodesList.length)
- updateTextarea(true);
- };
- }
- }
- if (_isTextarea) {
- FRAMEWORK.each(_textareaEvents, function(key, value) {
- _targetElement[strOnOff](key, value);
- });
- }
- else {
- _contentElement[strOnOff](_strTransitionEndEvent, function (event) {
- if (_autoUpdateCache === true)
- return;
- event = event.originalEvent || event;
- if (isSizeAffectingCSSProperty(event.propertyName))
- update(_strAuto);
- });
- }
- if(!destroy) {
- viewportOnScroll = function(event) {
- if (_isSleeping)
- return;
- if (scrollStopTimeoutId !== undefined)
- clearTimeout(scrollStopTimeoutId);
- else {
- if (_scrollbarsAutoHideScroll || _scrollbarsAutoHideMove)
- refreshScrollbarsAutoHide(true);
- if (!nativeOverlayScrollbarsAreActive())
- addClass(_hostElement, _classNameHostScrolling);
- dispatchCallback("onScrollStart", event);
- }
-
-
-
- if(!_scrollbarsHandleAsync) {
- refreshScrollbarHandleOffset(true);
- refreshScrollbarHandleOffset(false);
- }
- dispatchCallback("onScroll", event);
- scrollStopTimeoutId = setTimeout(function () {
- if(!_destroyed) {
-
- clearTimeout(scrollStopTimeoutId);
- scrollStopTimeoutId = undefined;
- if (_scrollbarsAutoHideScroll || _scrollbarsAutoHideMove)
- refreshScrollbarsAutoHide(false);
- if (!nativeOverlayScrollbarsAreActive())
- removeClass(_hostElement, _classNameHostScrolling);
- dispatchCallback("onScrollStop", event);
- }
- }, scrollStopDelay);
- };
- if (_supportPassiveEvents)
- addPassiveEventListener(_viewportElement, _strScroll, viewportOnScroll);
- else
- _viewportElement.on(_strScroll, viewportOnScroll);
- }
- }
-
-
- function setupScrollbarsDOM(destroy) {
- if(!destroy) {
- _scrollbarHorizontalElement = FRAMEWORK(generateDiv(_classNameScrollbar + _strSpace + _classNameScrollbarHorizontal));
- _scrollbarHorizontalTrackElement = FRAMEWORK(generateDiv(_classNameScrollbarTrack));
- _scrollbarHorizontalHandleElement = FRAMEWORK(generateDiv(_classNameScrollbarHandle));
- _scrollbarVerticalElement = FRAMEWORK(generateDiv(_classNameScrollbar + _strSpace + _classNameScrollbarVertical));
- _scrollbarVerticalTrackElement = FRAMEWORK(generateDiv(_classNameScrollbarTrack));
- _scrollbarVerticalHandleElement = FRAMEWORK(generateDiv(_classNameScrollbarHandle));
- _scrollbarHorizontalElement.append(_scrollbarHorizontalTrackElement);
- _scrollbarHorizontalTrackElement.append(_scrollbarHorizontalHandleElement);
- _scrollbarVerticalElement.append(_scrollbarVerticalTrackElement);
- _scrollbarVerticalTrackElement.append(_scrollbarVerticalHandleElement);
- _paddingElement.after(_scrollbarVerticalElement);
- _paddingElement.after(_scrollbarHorizontalElement);
- }
- else {
- remove(_scrollbarHorizontalElement);
- remove(_scrollbarVerticalElement);
- }
- }
-
- function setupScrollbarEvents(isHorizontal) {
- var scrollbarVars = getScrollbarVars(isHorizontal);
- var scrollbarVarsInfo = scrollbarVars._info;
- var insideIFrame = _windowElementNative.top !== _windowElementNative;
- var xy = scrollbarVars._x_y;
- var XY = scrollbarVars._X_Y;
- var scroll = _strScroll + scrollbarVars._Left_Top;
- var strActive = 'active';
- var strSnapHandle = 'snapHandle';
- var scrollDurationFactor = 1;
- var increaseDecreaseScrollAmountKeyCodes = [ 16, 17 ];
- var trackTimeout;
- var mouseDownScroll;
- var mouseDownOffset;
- var mouseDownInvertedScale;
- function getPointerPosition(event) {
- return _msieVersion && insideIFrame ? event['screen' + XY] : COMPATIBILITY.page(event)[xy];
- }
- function getPreparedScrollbarsOption(name) {
- return _currentPreparedOptions.scrollbars[name];
- }
- function increaseTrackScrollAmount() {
- scrollDurationFactor = 0.5;
- }
- function decreaseTrackScrollAmount() {
- scrollDurationFactor = 1;
- }
- function documentKeyDown(event) {
- if (FRAMEWORK.inArray(event.keyCode, increaseDecreaseScrollAmountKeyCodes) > -1)
- increaseTrackScrollAmount();
- }
- function documentKeyUp(event) {
- if (FRAMEWORK.inArray(event.keyCode, increaseDecreaseScrollAmountKeyCodes) > -1)
- decreaseTrackScrollAmount();
- }
- function onMouseTouchDownContinue(event) {
- var originalEvent = event.originalEvent || event;
- var isTouchEvent = originalEvent.touches !== undefined;
- return _isSleeping || _destroyed || nativeOverlayScrollbarsAreActive() || !_scrollbarsDragScrollingCache || (isTouchEvent && !getPreparedScrollbarsOption('touchSupport')) ? false : COMPATIBILITY.mBtn(event) === 1 || isTouchEvent;
- }
- function documentDragMove(event) {
- if(onMouseTouchDownContinue(event)) {
- var trackLength = scrollbarVarsInfo._trackLength;
- var handleLength = scrollbarVarsInfo._handleLength;
- var scrollRange = scrollbarVarsInfo._maxScroll;
- var scrollRaw = (getPointerPosition(event) - mouseDownOffset) * mouseDownInvertedScale;
- var scrollDeltaPercent = scrollRaw / (trackLength - handleLength);
- var scrollDelta = (scrollRange * scrollDeltaPercent);
- scrollDelta = isFinite(scrollDelta) ? scrollDelta : 0;
- if (_isRTL && isHorizontal && !_rtlScrollBehavior.i)
- scrollDelta *= -1;
- _viewportElement[scroll](MATH.round(mouseDownScroll + scrollDelta));
- if(_scrollbarsHandleAsync)
- refreshScrollbarHandleOffset(isHorizontal, mouseDownScroll + scrollDelta);
- if (!_supportPassiveEvents)
- COMPATIBILITY.prvD(event);
- }
- else
- documentMouseTouchUp(event);
- }
- function documentMouseTouchUp(event) {
- event = event || event.originalEvent;
- _documentElement.off(_strMouseTouchMoveEvent, documentDragMove)
- .off(_strMouseTouchUpEvent, documentMouseTouchUp)
- .off(_strKeyDownEvent, documentKeyDown)
- .off(_strKeyUpEvent, documentKeyUp)
- .off(_strSelectStartEvent, documentOnSelectStart);
- if(_scrollbarsHandleAsync)
- refreshScrollbarHandleOffset(isHorizontal, true);
- _scrollbarsHandleAsync = false;
- removeClass(_bodyElement, _classNameDragging);
- removeClass(scrollbarVars._handle, strActive);
- removeClass(scrollbarVars._track, strActive);
- removeClass(scrollbarVars._scrollbar, strActive);
- mouseDownScroll = undefined;
- mouseDownOffset = undefined;
- mouseDownInvertedScale = 1;
- decreaseTrackScrollAmount();
- if (trackTimeout !== undefined) {
- _base.scrollStop();
- clearTimeout(trackTimeout);
- trackTimeout = undefined;
- }
- if(event) {
- var rect = _hostElementNative.getBoundingClientRect();
- var mouseInsideHost = event.clientX >= rect.left && event.clientX <= rect.right && event.clientY >= rect.top && event.clientY <= rect.bottom;
-
- if (!mouseInsideHost)
- hostOnMouseLeave();
- if (_scrollbarsAutoHideScroll || _scrollbarsAutoHideMove)
- refreshScrollbarsAutoHide(false);
- }
- }
- function onHandleMouseTouchDown(event) {
- mouseDownScroll = _viewportElement[scroll]();
- mouseDownScroll = isNaN(mouseDownScroll) ? 0 : mouseDownScroll;
- if (_isRTL && isHorizontal && !_rtlScrollBehavior.n || !_isRTL)
- mouseDownScroll = mouseDownScroll < 0 ? 0 : mouseDownScroll;
- mouseDownInvertedScale = getHostElementInvertedScale()[xy];
- mouseDownOffset = getPointerPosition(event);
- _scrollbarsHandleAsync = !getPreparedScrollbarsOption(strSnapHandle);
- addClass(_bodyElement, _classNameDragging);
- addClass(scrollbarVars._handle, strActive);
- addClass(scrollbarVars._scrollbar, strActive);
- _documentElement.on(_strMouseTouchMoveEvent, documentDragMove)
- .on(_strMouseTouchUpEvent, documentMouseTouchUp)
- .on(_strSelectStartEvent, documentOnSelectStart);
- if(_msieVersion || !_documentMixed)
- COMPATIBILITY.prvD(event);
- COMPATIBILITY.stpP(event);
- }
- scrollbarVars._handle.on(_strMouseTouchDownEvent, function(event) {
- if (onMouseTouchDownContinue(event))
- onHandleMouseTouchDown(event);
- });
- scrollbarVars._track.on(_strMouseTouchDownEvent, function(event) {
- if (onMouseTouchDownContinue(event)) {
- var scrollDistance = MATH.round(_viewportSize[scrollbarVars._w_h]);
- var trackOffset = scrollbarVars._track.offset()[scrollbarVars._left_top];
- var ctrlKey = event.ctrlKey;
- var instantScroll = event.shiftKey;
- var instantScrollTransition = instantScroll && ctrlKey;
- var isFirstIteration = true;
- var easing = 'linear';
- var decreaseScroll;
- var finishedCondition;
- var scrollActionFinsished = function(transition) {
- if(_scrollbarsHandleAsync)
- refreshScrollbarHandleOffset(isHorizontal, transition);
- };
- var scrollActionInstantFinished = function() {
- scrollActionFinsished();
- onHandleMouseTouchDown(event);
- };
- var scrollAction = function () {
- if(!_destroyed) {
- var mouseOffset = (mouseDownOffset - trackOffset) * mouseDownInvertedScale;
- var handleOffset = scrollbarVarsInfo._handleOffset;
- var trackLength = scrollbarVarsInfo._trackLength;
- var handleLength = scrollbarVarsInfo._handleLength;
- var scrollRange = scrollbarVarsInfo._maxScroll;
- var currScroll = scrollbarVarsInfo._currentScroll;
- var scrollDuration = 270 * scrollDurationFactor;
- var timeoutDelay = isFirstIteration ? MATH.max(400, scrollDuration) : scrollDuration;
- var instantScrollPosition = scrollRange * ((mouseOffset - (handleLength / 2)) / (trackLength - handleLength));
- var rtlIsNormal = _isRTL && isHorizontal && ((!_rtlScrollBehavior.i && !_rtlScrollBehavior.n) || _normalizeRTLCache);
- var decreaseScrollCondition = rtlIsNormal ? handleOffset < mouseOffset : handleOffset > mouseOffset;
- var scrollObj = { };
- var animationObj = {
- easing : easing,
- step : function(now) {
- if(_scrollbarsHandleAsync) {
- _viewportElement[scroll](now);
- refreshScrollbarHandleOffset(isHorizontal, now);
- }
- }
- };
- instantScrollPosition = isFinite(instantScrollPosition) ? instantScrollPosition : 0;
- instantScrollPosition = _isRTL && isHorizontal && !_rtlScrollBehavior.i ? (scrollRange - instantScrollPosition) : instantScrollPosition;
-
- if(instantScroll) {
- _viewportElement[scroll](instantScrollPosition);
- if(instantScrollTransition) {
-
-
- instantScrollPosition = _viewportElement[scroll]();
-
- _viewportElement[scroll](currScroll);
- instantScrollPosition = rtlIsNormal && _rtlScrollBehavior.i ? (scrollRange - instantScrollPosition) : instantScrollPosition;
- instantScrollPosition = rtlIsNormal && _rtlScrollBehavior.n ? -instantScrollPosition : instantScrollPosition;
- scrollObj[xy] = instantScrollPosition;
- _base.scroll(scrollObj, extendDeep(animationObj, {
- duration : 130,
- complete : scrollActionInstantFinished
- }));
- }
- else
- scrollActionInstantFinished();
- }
- else {
- decreaseScroll = isFirstIteration ? decreaseScrollCondition : decreaseScroll;
- finishedCondition = rtlIsNormal
- ? (decreaseScroll ? handleOffset + handleLength >= mouseOffset : handleOffset <= mouseOffset)
- : (decreaseScroll ? handleOffset <= mouseOffset : handleOffset + handleLength >= mouseOffset);
- if (finishedCondition) {
- clearTimeout(trackTimeout);
- _base.scrollStop();
- trackTimeout = undefined;
- scrollActionFinsished(true);
- }
- else {
- trackTimeout = setTimeout(scrollAction, timeoutDelay);
- scrollObj[xy] = (decreaseScroll ? '-=' : '+=') + scrollDistance;
- _base.scroll(scrollObj, extendDeep(animationObj, {
- duration: scrollDuration
- }));
- }
- isFirstIteration = false;
- }
- }
- };
- if (ctrlKey)
- increaseTrackScrollAmount();
- mouseDownInvertedScale = getHostElementInvertedScale()[xy];
- mouseDownOffset = COMPATIBILITY.page(event)[xy];
- _scrollbarsHandleAsync = !getPreparedScrollbarsOption(strSnapHandle);
- addClass(_bodyElement, _classNameDragging);
- addClass(scrollbarVars._track, strActive);
- addClass(scrollbarVars._scrollbar, strActive);
- _documentElement.on(_strMouseTouchUpEvent, documentMouseTouchUp)
- .on(_strKeyDownEvent, documentKeyDown)
- .on(_strKeyUpEvent, documentKeyUp)
- .on(_strSelectStartEvent, documentOnSelectStart);
- scrollAction();
- COMPATIBILITY.prvD(event);
- COMPATIBILITY.stpP(event);
- }
- }).on(_strMouseTouchEnter, function() {
- _scrollbarsHandleHovered = true;
- if (_scrollbarsAutoHideScroll || _scrollbarsAutoHideMove)
- refreshScrollbarsAutoHide(true);
- }).on(_strMouseTouchLeave, function() {
- _scrollbarsHandleHovered = false;
- if (_scrollbarsAutoHideScroll || _scrollbarsAutoHideMove)
- refreshScrollbarsAutoHide(false);
- });
- scrollbarVars._scrollbar.on(_strMouseTouchDownEvent, function(event) {
- COMPATIBILITY.stpP(event);
- });
- if (_supportTransition) {
- scrollbarVars._scrollbar.on(_strTransitionEndEvent, function(event) {
- if (event.target !== scrollbarVars._scrollbar[0])
- return;
- refreshScrollbarHandleLength(isHorizontal);
- refreshScrollbarHandleOffset(isHorizontal);
- });
- }
- }
-
- function refreshScrollbarAppearance(isHorizontal, shallBeVisible, canScroll) {
- var scrollbarClassName = isHorizontal ? _classNameHostScrollbarHorizontalHidden : _classNameHostScrollbarVerticalHidden;
- var scrollbarElement = isHorizontal ? _scrollbarHorizontalElement : _scrollbarVerticalElement;
- if (shallBeVisible)
- removeClass(_hostElement, scrollbarClassName);
- else
- addClass(_hostElement, scrollbarClassName);
- if (canScroll)
- removeClass(scrollbarElement, _classNameScrollbarUnusable);
- else
- addClass(scrollbarElement, _classNameScrollbarUnusable);
- }
-
- function refreshScrollbarsAutoHide(shallBeVisible, delayfree) {
- clearTimeout(_scrollbarsAutoHideTimeoutId);
- if (shallBeVisible) {
-
- removeClass(_scrollbarHorizontalElement, _classNameScrollbarAutoHidden);
-
- removeClass(_scrollbarVerticalElement, _classNameScrollbarAutoHidden);
- }
- else {
- var anyActive;
- var strActive = 'active';
- var hide = function () {
- if (!_scrollbarsHandleHovered && !_destroyed) {
- anyActive = _scrollbarHorizontalHandleElement.hasClass(strActive) || _scrollbarVerticalHandleElement.hasClass(strActive);
- if (!anyActive && (_scrollbarsAutoHideScroll || _scrollbarsAutoHideMove || _scrollbarsAutoHideLeave))
- addClass(_scrollbarHorizontalElement, _classNameScrollbarAutoHidden);
- if (!anyActive && (_scrollbarsAutoHideScroll || _scrollbarsAutoHideMove || _scrollbarsAutoHideLeave))
- addClass(_scrollbarVerticalElement, _classNameScrollbarAutoHidden);
- }
- };
- if (_scrollbarsAutoHideDelay > 0 && delayfree !== true)
- _scrollbarsAutoHideTimeoutId = setTimeout(hide, _scrollbarsAutoHideDelay);
- else
- hide();
- }
- }
-
- function refreshScrollbarHandleLength(isHorizontal) {
- var handleCSS = {};
- var scrollbarVars = getScrollbarVars(isHorizontal);
- var scrollbarVarsInfo = scrollbarVars._info;
- var digit = 1000000;
-
- var handleRatio = MATH.min(1, (_hostSizeCache[scrollbarVars._w_h] - (_paddingAbsoluteCache ? (isHorizontal ? _paddingX : _paddingY) : 0)) / _contentScrollSizeCache[scrollbarVars._w_h]);
- handleCSS[scrollbarVars._width_height] = (MATH.floor(handleRatio * 100 * digit) / digit) + "%";
- if (!nativeOverlayScrollbarsAreActive())
- scrollbarVars._handle.css(handleCSS);
-
- scrollbarVarsInfo._handleLength = scrollbarVars._handle[0]['offset' + scrollbarVars._Width_Height];
- scrollbarVarsInfo._handleLengthRatio = handleRatio;
- }
-
- function refreshScrollbarHandleOffset(isHorizontal, scrollOrTransition) {
- var transition = type(scrollOrTransition) == TYPES.b;
- var transitionDuration = 250;
- var isRTLisHorizontal = _isRTL && isHorizontal;
- var scrollbarVars = getScrollbarVars(isHorizontal);
- var scrollbarVarsInfo = scrollbarVars._info;
- var strTranslateBrace = 'translate(';
- var strTransform = VENDORS._cssProperty('transform');
- var strTransition = VENDORS._cssProperty('transition');
- var nativeScroll = isHorizontal ? _viewportElement[_strScrollLeft]() : _viewportElement[_strScrollTop]();
- var currentScroll = scrollOrTransition === undefined || transition ? nativeScroll : scrollOrTransition;
-
- var handleLength = scrollbarVarsInfo._handleLength;
- var trackLength = scrollbarVars._track[0]['offset' + scrollbarVars._Width_Height];
- var handleTrackDiff = trackLength - handleLength;
- var handleCSS = {};
- var transformOffset;
- var translateValue;
-
-
-
- var maxScroll = (_viewportElementNative[_strScroll + scrollbarVars._Width_Height] - _viewportElementNative['client' + scrollbarVars._Width_Height]) * (_rtlScrollBehavior.n && isRTLisHorizontal ? -1 : 1);
- var getScrollRatio = function(base) {
- return isNaN(base / maxScroll) ? 0 : MATH.max(0, MATH.min(1, base / maxScroll));
- };
- var getHandleOffset = function(scrollRatio) {
- var offset = handleTrackDiff * scrollRatio;
- offset = isNaN(offset) ? 0 : offset;
- offset = (isRTLisHorizontal && !_rtlScrollBehavior.i) ? (trackLength - handleLength - offset) : offset;
- offset = MATH.max(0, offset);
- return offset;
- };
- var scrollRatio = getScrollRatio(nativeScroll);
- var unsnappedScrollRatio = getScrollRatio(currentScroll);
- var handleOffset = getHandleOffset(unsnappedScrollRatio);
- var snappedHandleOffset = getHandleOffset(scrollRatio);
- scrollbarVarsInfo._maxScroll = maxScroll;
- scrollbarVarsInfo._currentScroll = nativeScroll;
- scrollbarVarsInfo._currentScrollRatio = scrollRatio;
- if (_supportTransform) {
- transformOffset = isRTLisHorizontal ? -(trackLength - handleLength - handleOffset) : handleOffset;
-
- translateValue = isHorizontal ? strTranslateBrace + transformOffset + 'px, 0)' : strTranslateBrace + '0, ' + transformOffset + 'px)';
- handleCSS[strTransform] = translateValue;
-
- if(_supportTransition)
- handleCSS[strTransition] = transition && MATH.abs(handleOffset - scrollbarVarsInfo._handleOffset) > 1 ? getCSSTransitionString(scrollbarVars._handle) + ', ' + (strTransform + _strSpace + transitionDuration + 'ms') : _strEmpty;
- }
- else
- handleCSS[scrollbarVars._left_top] = handleOffset;
-
- if (!nativeOverlayScrollbarsAreActive()) {
- scrollbarVars._handle.css(handleCSS);
-
- if(_supportTransform && _supportTransition && transition) {
- scrollbarVars._handle.one(_strTransitionEndEvent, function() {
- if(!_destroyed)
- scrollbarVars._handle.css(strTransition, _strEmpty);
- });
- }
- }
- scrollbarVarsInfo._handleOffset = handleOffset;
- scrollbarVarsInfo._snappedHandleOffset = snappedHandleOffset;
- scrollbarVarsInfo._trackLength = trackLength;
- }
-
- function refreshScrollbarsInteractive(isTrack, value) {
- var action = value ? 'removeClass' : 'addClass';
- var element1 = isTrack ? _scrollbarHorizontalTrackElement : _scrollbarHorizontalHandleElement;
- var element2 = isTrack ? _scrollbarVerticalTrackElement : _scrollbarVerticalHandleElement;
- var className = isTrack ? _classNameScrollbarTrackOff : _classNameScrollbarHandleOff;
- element1[action](className);
- element2[action](className);
- }
-
- function getScrollbarVars(isHorizontal) {
- return {
- _width_height: isHorizontal ? _strWidth : _strHeight,
- _Width_Height: isHorizontal ? 'Width' : 'Height',
- _left_top: isHorizontal ? _strLeft : _strTop,
- _Left_Top: isHorizontal ? 'Left' : 'Top',
- _x_y: isHorizontal ? _strX : _strY,
- _X_Y: isHorizontal ? 'X' : 'Y',
- _w_h: isHorizontal ? 'w' : 'h',
- _l_t: isHorizontal ? 'l' : 't',
- _track: isHorizontal ? _scrollbarHorizontalTrackElement : _scrollbarVerticalTrackElement,
- _handle: isHorizontal ? _scrollbarHorizontalHandleElement : _scrollbarVerticalHandleElement,
- _scrollbar: isHorizontal ? _scrollbarHorizontalElement : _scrollbarVerticalElement,
- _info: isHorizontal ? _scrollHorizontalInfo : _scrollVerticalInfo
- };
- }
-
-
- function setupScrollbarCornerDOM(destroy) {
- if(!destroy) {
- _scrollbarCornerElement = FRAMEWORK(generateDiv(_classNameScrollbarCorner));
- _hostElement.append(_scrollbarCornerElement);
- }
- else {
- remove(_scrollbarCornerElement);
- }
- }
-
- function setupScrollbarCornerEvents() {
- var insideIFrame = _windowElementNative.top !== _windowElementNative;
- var mouseDownPosition = { };
- var mouseDownSize = { };
- var mouseDownInvertedScale = { };
- _resizeOnMouseTouchDown = function(event) {
- if (onMouseTouchDownContinue(event)) {
- if (_mutationObserversConnected) {
- _resizeReconnectMutationObserver = true;
- disconnectMutationObservers();
- }
- mouseDownPosition = getCoordinates(event);
- mouseDownSize.w = _hostElementNative[LEXICON.oW] - (!_isBorderBox ? _paddingX : 0);
- mouseDownSize.h = _hostElementNative[LEXICON.oH] - (!_isBorderBox ? _paddingY : 0);
- mouseDownInvertedScale = getHostElementInvertedScale();
- _documentElement.on(_strSelectStartEvent, documentOnSelectStart)
- .on(_strMouseTouchMoveEvent, documentDragMove)
- .on(_strMouseTouchUpEvent, documentMouseTouchUp);
- addClass(_bodyElement, _classNameDragging);
- if (_scrollbarCornerElement.setCapture)
- _scrollbarCornerElement.setCapture();
- COMPATIBILITY.prvD(event);
- COMPATIBILITY.stpP(event);
- }
- };
- function documentDragMove(event) {
- if (onMouseTouchDownContinue(event)) {
- var pageOffset = getCoordinates(event);
- var hostElementCSS = { };
- if (_resizeHorizontal || _resizeBoth)
- hostElementCSS[_strWidth] = (mouseDownSize.w + (pageOffset.x - mouseDownPosition.x) * mouseDownInvertedScale.x);
- if (_resizeVertical || _resizeBoth)
- hostElementCSS[_strHeight] = (mouseDownSize.h + (pageOffset.y - mouseDownPosition.y) * mouseDownInvertedScale.y);
- _hostElement.css(hostElementCSS);
- COMPATIBILITY.stpP(event);
- }
- else {
- documentMouseTouchUp(event);
- }
- }
- function documentMouseTouchUp(event) {
- var eventIsTrusted = event !== undefined;
- _documentElement.off(_strSelectStartEvent, documentOnSelectStart)
- .off(_strMouseTouchMoveEvent, documentDragMove)
- .off(_strMouseTouchUpEvent, documentMouseTouchUp);
- removeClass(_bodyElement, _classNameDragging);
- if (_scrollbarCornerElement.releaseCapture)
- _scrollbarCornerElement.releaseCapture();
- if (eventIsTrusted) {
- if (_resizeReconnectMutationObserver)
- connectMutationObservers();
- _base.update(_strAuto);
- }
- _resizeReconnectMutationObserver = false;
- }
- function onMouseTouchDownContinue(event) {
- var originalEvent = event.originalEvent || event;
- var isTouchEvent = originalEvent.touches !== undefined;
- return _isSleeping || _destroyed ? false : COMPATIBILITY.mBtn(event) === 1 || isTouchEvent;
- }
- function getCoordinates(event) {
- return _msieVersion && insideIFrame ? { x : event.screenX , y : event.screenY } : COMPATIBILITY.page(event);
- }
- }
-
-
- function dispatchCallback(name, args) {
- if(_initialized) {
- var callback = _currentPreparedOptions.callbacks[name];
- var extensionOnName = name;
- var ext;
- if(extensionOnName.substr(0, 2) === "on")
- extensionOnName = extensionOnName.substr(2, 1).toLowerCase() + extensionOnName.substr(3);
- if(type(callback) == TYPES.f)
- callback.call(_base, args);
- FRAMEWORK.each(_extensions, function() {
- ext = this;
- if(type(ext.on) == TYPES.f)
- ext.on(extensionOnName, args);
- });
- }
- else if(!_destroyed)
- _callbacksInitQeueue.push({ n : name, a : args });
- }
-
- function setTopRightBottomLeft(targetCSSObject, prefix, values) {
- if (values === undefined)
- values = [_strEmpty, _strEmpty, _strEmpty, _strEmpty];
- targetCSSObject[prefix + _strTop] = values[0];
- targetCSSObject[prefix + _strRight] = values[1];
- targetCSSObject[prefix + _strBottom] = values[2];
- targetCSSObject[prefix + _strLeft] = values[3];
- }
-
- function getCSSTransitionString(element) {
- var transitionStr = VENDORS._cssProperty('transition');
- var assembledValue = element.css(transitionStr);
- if(assembledValue)
- return assembledValue;
- var regExpString = '\\s*(' + '([^,(]+(\\(.+?\\))?)+' + ')[\\s,]*';
- var regExpMain = new RegExp(regExpString);
- var regExpValidate = new RegExp('^(' + regExpString + ')+$');
- var properties = 'property duration timing-function delay'.split(' ');
- var result = [ ];
- var strResult;
- var valueArray;
- var i = 0;
- var j;
- var splitCssStyleByComma = function(str) {
- strResult = [ ];
- if (!str.match(regExpValidate))
- return str;
- while (str.match(regExpMain)) {
- strResult.push(RegExp.$1);
- str = str.replace(regExpMain, _strEmpty);
- }
- return strResult;
- };
- for (; i < properties[LEXICON.l]; i++) {
- valueArray = splitCssStyleByComma(element.css(transitionStr + '-' + properties[i]));
- for (j = 0; j < valueArray[LEXICON.l]; j++)
- result[j] = (result[j] ? result[j] + _strSpace : _strEmpty) + valueArray[j];
- }
- return result.join(', ');
- }
-
- function getHostElementInvertedScale() {
- var rect = _paddingElementNative.getBoundingClientRect();
- return {
- x : _supportTransform ? 1 / (MATH.round(rect.width) / _paddingElementNative[LEXICON.oW]) : 1,
- y : _supportTransform ? 1 / (MATH.round(rect.height) / _paddingElementNative[LEXICON.oH]) : 1
- };
- }
-
- function isHTMLElement(o) {
- var strOwnerDocument = 'ownerDocument';
- var strHTMLElement = 'HTMLElement';
- var wnd = o && o[strOwnerDocument] ? (o[strOwnerDocument].parentWindow || window) : window;
- return (
- typeof wnd[strHTMLElement] == TYPES.o ? o instanceof wnd[strHTMLElement] :
- o && typeof o == TYPES.o && o !== null && o.nodeType === 1 && typeof o.nodeName == TYPES.s
- );
- }
-
- function getArrayDifferences(a1, a2) {
- var a = [ ];
- var diff = [ ];
- var i;
- var k;
- for (i = 0; i < a1.length; i++)
- a[a1[i]] = true;
- for (i = 0; i < a2.length; i++) {
- if (a[a2[i]])
- delete a[a2[i]];
- else
- a[a2[i]] = true;
- }
- for (k in a)
- diff.push(k);
- return diff;
- }
-
- function parseToZeroOrNumber(value, toFloat) {
- var num = toFloat ? parseFloat(value) : parseInt(value, 10);
- return isNaN(num) ? 0 : num;
- }
-
- function getTextareaInfo() {
-
- var textareaCursorPosition = _targetElementNative.selectionStart;
- if (textareaCursorPosition === undefined)
- return;
- var strLength = 'length';
- var textareaValue = _targetElement.val();
- var textareaLength = textareaValue[strLength];
- var textareaRowSplit = textareaValue.split("\n");
- var textareaLastRow = textareaRowSplit[strLength];
- var textareaCurrentCursorRowSplit = textareaValue.substr(0, textareaCursorPosition).split("\n");
- var widestRow = 0;
- var textareaLastCol = 0;
- var cursorRow = textareaCurrentCursorRowSplit[strLength];
- var cursorCol = textareaCurrentCursorRowSplit[textareaCurrentCursorRowSplit[strLength] - 1][strLength];
- var rowCols;
- var i;
-
- for (i = 0; i < textareaRowSplit[strLength]; i++) {
- rowCols = textareaRowSplit[i][strLength];
- if (rowCols > textareaLastCol) {
- widestRow = i + 1;
- textareaLastCol = rowCols;
- }
- }
- return {
- _cursorRow: cursorRow,
- _cursorColumn: cursorCol,
- _rows: textareaLastRow,
- _columns: textareaLastCol,
- _widestRow: widestRow,
- _cursorPosition: textareaCursorPosition,
- _cursorMax: textareaLength
- };
- }
-
- function nativeOverlayScrollbarsAreActive() {
- return (_ignoreOverlayScrollbarHidingCache && (_nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y));
- }
-
- function getContentMeasureElement() {
- return _isTextarea ? _textareaCoverElement[0] : _contentElementNative;
- }
-
- function generateDiv(classesOrAttrs, content) {
- return '<div ' + (classesOrAttrs ? type(classesOrAttrs) == TYPES.s ?
- 'class="' + classesOrAttrs + '"' :
- (function() {
- var key;
- var attrs = '';
- if(FRAMEWORK.isPlainObject(classesOrAttrs)) {
- for (key in classesOrAttrs)
- attrs += (key === 'className' ? 'class' : key) + '="' + classesOrAttrs[key] + '" ';
- }
- return attrs;
- })() :
- _strEmpty) +
- '>' +
- (content ? content : _strEmpty) +
- '</div>';
- }
-
- function getObjectPropVal(obj, path) {
- var splits = path.split(_strDot);
- var i = 0;
- var val;
- for(; i < splits.length; i++) {
- if(!obj.hasOwnProperty(splits[i]))
- return;
- val = obj[splits[i]];
- if(i < splits.length && type(val) == TYPES.o)
- obj = val;
- }
- return val;
- }
-
- function setObjectPropVal(obj, path, val) {
- var splits = path.split(_strDot);
- var splitsLength = splits.length;
- var i = 0;
- var extendObj = { };
- var extendObjRoot = extendObj;
- for(; i < splitsLength; i++)
- extendObj = extendObj[splits[i]] = i + 1 < splitsLength ? { } : val;
- FRAMEWORK.extend(obj, extendObjRoot, true);
- }
-
-
- function checkCacheSingle(current, cache, force) {
- if (force === true)
- return force;
- if (cache === undefined)
- return true;
- else if (current !== cache)
- return true;
- return false;
- }
-
- function checkCacheDouble(current, cache, prop1, prop2, force) {
- if (force === true)
- return force;
- if (prop2 === undefined && force === undefined) {
- if (prop1 === true)
- return prop1;
- else
- prop1 = undefined;
- }
- prop1 = prop1 === undefined ? 'w' : prop1;
- prop2 = prop2 === undefined ? 'h' : prop2;
- if (cache === undefined)
- return true;
- else if (current[prop1] !== cache[prop1] || current[prop2] !== cache[prop2])
- return true;
- return false;
- }
-
- function checkCacheTRBL(current, cache) {
- if (cache === undefined)
- return true;
- else if (current.t !== cache.t ||
- current.r !== cache.r ||
- current.b !== cache.b ||
- current.l !== cache.l)
- return true;
- return false;
- }
-
-
- function type(obj) {
- return COMPATIBILITY.type(obj);
- }
-
- function extendDeep() {
- return FRAMEWORK.extend.apply(this, [ true ].concat([].slice.call(arguments)));
- }
-
- function addClass(el, classes) {
- return _frameworkProto.addClass.call(el, classes);
- }
-
- function removeClass(el, classes) {
- return _frameworkProto.removeClass.call(el, classes);
- }
-
- function remove(el) {
- return _frameworkProto.remove.call(el);
- }
-
- function findFirst(el, selector) {
- return _frameworkProto.find.call(el, selector).eq(0);
- }
-
-
- _base.sleep = function () {
- _isSleeping = true;
- };
-
- _base.update = function (force) {
- var attrsChanged;
- var contentSizeC;
- var isString = type(force) == TYPES.s;
- var imgElementSelector = 'img';
- var imgElementLoadEvent = 'load';
- var isPlus = isString && force.slice(-1) == '+';
- if(isString) {
- if (force.indexOf(_strAuto) === 0) {
- attrsChanged = meaningfulAttrsChanged();
- contentSizeC = updateAutoContentSizeChanged();
- if (attrsChanged || contentSizeC || isPlus)
- update(false, contentSizeC, false, isPlus);
- }
- else if (force === 'zoom')
- update(true, true);
- }
- else {
- force = _isSleeping || force;
- _isSleeping = false;
- update(false, false, force, true);
- }
- if(!_isTextarea) {
- _contentElement.find(imgElementSelector).each(function(i, el) {
- var index = COMPATIBILITY.inA(el, _imgs);
- if (index === -1)
- FRAMEWORK(el).off(imgElementLoadEvent, imgOnLoad).on(imgElementLoadEvent, imgOnLoad);
- });
- }
- };
-
- _base.options = function (newOptions, value) {
-
- if (FRAMEWORK.isEmptyObject(newOptions) || !FRAMEWORK.isPlainObject(newOptions)) {
- if (type(newOptions) == TYPES.s) {
- if (arguments.length > 1) {
- var option = { };
- setObjectPropVal(option, newOptions, value);
- setOptions(option);
- update();
- return;
- }
- else
- return getObjectPropVal(_currentOptions, newOptions);
- }
- else
- return _currentOptions;
- }
- setOptions(newOptions);
- var isSleepingTmp = _isSleeping || false;
- _isSleeping = false;
- update();
- _isSleeping = isSleepingTmp;
- };
-
- _base.destroy = function () {
- _destroyed = true;
-
- autoUpdateLoop.remove(_base);
-
- disconnectMutationObservers();
-
- removeResizeObserver(_sizeObserverElement);
- if (_sizeAutoObserverAdded)
- removeResizeObserver(_sizeAutoObserverElement);
-
- for(var extName in _extensions)
- _base.removeExt(extName);
-
- setupHostMouseTouchEvents(true);
-
- setupStructureEvents(true);
-
- if (_contentGlueElement)
- remove(_contentGlueElement);
- if (_contentArrangeElement)
- remove(_contentArrangeElement);
- if (_sizeAutoObserverAdded)
- remove(_sizeAutoObserverElement);
-
- setupScrollbarsDOM(true);
- setupScrollbarCornerDOM(true);
- setupStructureDOM(true);
-
- for(var i = 0; i < _imgs[LEXICON.l]; i++)
- FRAMEWORK(_imgs[i]).off('load', imgOnLoad);
- _imgs = undefined;
-
- INSTANCES(pluginTargetElement, 0);
- dispatchCallback("onDestroyed");
-
- for (var property in _base)
- delete _base[property];
- _base = undefined;
- };
-
- _base.scroll = function (coordinates, duration, easing, complete) {
- if (arguments.length === 0 || coordinates === undefined) {
- var infoX = _scrollHorizontalInfo;
- var infoY = _scrollVerticalInfo;
- var normalizeInvert = _normalizeRTLCache && _isRTL && _rtlScrollBehavior.i;
- var normalizeNegate = _normalizeRTLCache && _isRTL && _rtlScrollBehavior.n;
- var scrollX = infoX._currentScroll;
- var scrollXRatio = infoX._currentScrollRatio;
- var maxScrollX = infoX._maxScroll;
- scrollXRatio = normalizeInvert ? 1 - scrollXRatio : scrollXRatio;
- scrollX = normalizeInvert ? maxScrollX - scrollX : scrollX;
- scrollX *= normalizeNegate ? -1 : 1;
- maxScrollX *= normalizeNegate ? -1 : 1;
- return {
- position : {
- x : scrollX,
- y : infoY._currentScroll
- },
- ratio : {
- x : scrollXRatio,
- y : infoY._currentScrollRatio
- },
- max : {
- x : maxScrollX,
- y : infoY._maxScroll
- },
- handleOffset : {
- x : infoX._handleOffset,
- y : infoY._handleOffset
- },
- handleLength : {
- x : infoX._handleLength,
- y : infoY._handleLength
- },
- handleLengthRatio : {
- x : infoX._handleLengthRatio,
- y : infoY._handleLengthRatio
- },
- trackLength : {
- x : infoX._trackLength,
- y : infoY._trackLength
- },
- snappedHandleOffset : {
- x : infoX._snappedHandleOffset,
- y : infoY._snappedHandleOffset
- },
- isRTL: _isRTL,
- isRTLNormalized: _normalizeRTLCache
- };
- }
- var normalizeRTL = _normalizeRTLCache;
- var coordinatesXAxisProps = [_strX, _strLeft, 'l'];
- var coordinatesYAxisProps = [_strY, _strTop, 't'];
- var coordinatesOperators = ['+=', '-=', '*=', '/='];
- var durationIsObject = type(duration) == TYPES.o;
- var completeCallback = durationIsObject ? duration.complete : complete;
- var i;
- var finalScroll = { };
- var specialEasing = {};
- var doScrollLeft;
- var doScrollTop;
- var animationOptions;
- var strEnd = 'end';
- var strBegin = 'begin';
- var strCenter = 'center';
- var strNearest = 'nearest';
- var strAlways = 'always';
- var strNever = 'never';
- var strIfNeeded = 'ifneeded';
- var strLength = LEXICON.l;
- var settingsAxis;
- var settingsScroll;
- var settingsBlock;
- var settingsMargin;
- var finalElement;
- var elementObjSettingsAxisValues = [_strX, _strY, 'xy', 'yx'];
- var elementObjSettingsBlockValues = [strBegin, strEnd, strCenter, strNearest];
- var elementObjSettingsScrollValues = [strAlways, strNever, strIfNeeded];
- var coordinatesIsElementObj = coordinates.hasOwnProperty('el');
- var possibleElement = coordinatesIsElementObj ? coordinates.el : coordinates;
- var possibleElementIsJQuery = possibleElement instanceof FRAMEWORK || JQUERY ? possibleElement instanceof JQUERY : false;
- var possibleElementIsHTMLElement = possibleElementIsJQuery ? false : isHTMLElement(possibleElement);
- var proxyCompleteCallback = type(completeCallback) != TYPES.f ? undefined : function() {
- if(doScrollLeft)
- refreshScrollbarHandleOffset(true);
- if(doScrollTop)
- refreshScrollbarHandleOffset(false);
- completeCallback();
- };
- var checkSettingsStringValue = function (currValue, allowedValues) {
- for (i = 0; i < allowedValues[strLength]; i++) {
- if (currValue === allowedValues[i])
- return true;
- }
- return false;
- };
- var getRawScroll = function (isX, coordinates) {
- var coordinateProps = isX ? coordinatesXAxisProps : coordinatesYAxisProps;
- coordinates = type(coordinates) == TYPES.s || type(coordinates) == TYPES.n ? [ coordinates, coordinates ] : coordinates;
- if (type(coordinates) == TYPES.a)
- return isX ? coordinates[0] : coordinates[1];
- else if (type(coordinates) == TYPES.o) {
-
-
- for (i = 0; i < coordinateProps[strLength]; i++)
- if (coordinateProps[i] in coordinates)
- return coordinates[coordinateProps[i]];
- }
- };
- var getFinalScroll = function (isX, rawScroll) {
- var isString = type(rawScroll) == TYPES.s;
- if(isString)
- _base.update(_strAuto + '+');
- var operator;
- var amount;
- var scrollInfo = isX ? _scrollHorizontalInfo : _scrollVerticalInfo;
- var currScroll = scrollInfo._currentScroll;
- var maxScroll = scrollInfo._maxScroll;
- var mult = ' * ';
- var finalValue;
- var isRTLisX = _isRTL && isX;
- var normalizeShortcuts = isRTLisX && _rtlScrollBehavior.n && !normalizeRTL;
- var strReplace = 'replace';
- var evalFunc = eval;
- var possibleOperator;
- if (isString) {
-
- if (rawScroll[strLength] > 2) {
- possibleOperator = rawScroll.substr(0, 2);
- if(FRAMEWORK.inArray(possibleOperator, coordinatesOperators) > -1)
- operator = possibleOperator;
- }
-
- rawScroll = operator ? rawScroll.substr(2) : rawScroll;
- rawScroll = rawScroll
- [strReplace](/min/g, 0)
- [strReplace](/</g, 0)
- [strReplace](/max/g, (normalizeShortcuts ? '-' : _strEmpty) + _strHundredPercent)
- [strReplace](/>/g, (normalizeShortcuts ? '-' : _strEmpty) + _strHundredPercent)
- [strReplace](/px/g, _strEmpty)
- [strReplace](/%/g, mult + (maxScroll * (isRTLisX && _rtlScrollBehavior.n ? -1 : 1) / 100.0))
- [strReplace](/vw/g, mult + _viewportSize.w)
- [strReplace](/vh/g, mult + _viewportSize.h);
- amount = parseToZeroOrNumber(isNaN(rawScroll) ? parseToZeroOrNumber(evalFunc(rawScroll), true).toFixed() : rawScroll);
- }
- else {
- amount = rawScroll;
- }
- if (amount !== undefined && !isNaN(amount) && type(amount) == TYPES.n) {
- var normalizeIsRTLisX = normalizeRTL && isRTLisX;
- var operatorCurrScroll = currScroll * (normalizeIsRTLisX && _rtlScrollBehavior.n ? -1 : 1);
- var invert = normalizeIsRTLisX && _rtlScrollBehavior.i;
- var negate = normalizeIsRTLisX && _rtlScrollBehavior.n;
- operatorCurrScroll = invert ? (maxScroll - operatorCurrScroll) : operatorCurrScroll;
- switch (operator) {
- case '+=':
- finalValue = operatorCurrScroll + amount;
- break;
- case '-=':
- finalValue = operatorCurrScroll - amount;
- break;
- case '*=':
- finalValue = operatorCurrScroll * amount;
- break;
- case '/=':
- finalValue = operatorCurrScroll / amount;
- break;
- default:
- finalValue = amount;
- break;
- }
- finalValue = invert ? maxScroll - finalValue : finalValue;
- finalValue *= negate ? -1 : 1;
- finalValue = isRTLisX && _rtlScrollBehavior.n ? MATH.min(0, MATH.max(maxScroll, finalValue)) : MATH.max(0, MATH.min(maxScroll, finalValue));
- }
- return finalValue === currScroll ? undefined : finalValue;
- };
- var getPerAxisValue = function (value, valueInternalType, defaultValue, allowedValues) {
- var resultDefault = [ defaultValue, defaultValue ];
- var valueType = type(value);
- var valueArrLength;
- var valueArrItem;
-
- if (valueType == valueInternalType) {
- value = [value, value];
- }
- else if (valueType == TYPES.a) {
- valueArrLength = value[strLength];
- if (valueArrLength > 2 || valueArrLength < 1)
- value = resultDefault;
- else {
- if (valueArrLength === 1)
- value[1] = defaultValue;
- for (i = 0; i < valueArrLength; i++) {
- valueArrItem = value[i];
- if (type(valueArrItem) != valueInternalType || !checkSettingsStringValue(valueArrItem, allowedValues)) {
- value = resultDefault;
- break;
- }
- }
- }
- }
- else if (valueType == TYPES.o)
- value = [ value[_strX]|| defaultValue, value[_strY] || defaultValue];
- else
- value = resultDefault;
- return { x : value[0], y : value[1] };
- };
- var generateMargin = function (marginTopRightBottomLeftArray) {
- var result = [ ];
- var currValue;
- var currValueType;
- var valueDirections = [ _strTop, _strRight, _strBottom, _strLeft ];
- for(i = 0; i < marginTopRightBottomLeftArray[strLength]; i++) {
- if(i === valueDirections[strLength])
- break;
- currValue = marginTopRightBottomLeftArray[i];
- currValueType = type(currValue);
- if(currValueType == TYPES.b)
- result.push(currValue ? parseToZeroOrNumber(finalElement.css(_strMarginMinus + valueDirections[i])) : 0);
- else
- result.push(currValueType == TYPES.n ? currValue : 0);
- }
- return result;
- };
- if (possibleElementIsJQuery || possibleElementIsHTMLElement) {
-
- var margin = coordinatesIsElementObj ? coordinates.margin : 0;
- var axis = coordinatesIsElementObj ? coordinates.axis : 0;
- var scroll = coordinatesIsElementObj ? coordinates.scroll : 0;
- var block = coordinatesIsElementObj ? coordinates.block : 0;
- var marginDefault = [ 0, 0, 0, 0 ];
- var marginType = type(margin);
- var marginLength;
- finalElement = possibleElementIsJQuery ? possibleElement : FRAMEWORK(possibleElement);
- if (finalElement[strLength] === 0)
- return;
- _base.update(_strAuto + '+');
-
- if (marginType == TYPES.n || marginType == TYPES.b)
- margin = generateMargin([margin, margin, margin, margin]);
- else if (marginType == TYPES.a) {
- marginLength = margin[strLength];
- if(marginLength === 2)
- margin = generateMargin([margin[0], margin[1], margin[0], margin[1]]);
- else if(marginLength >= 4)
- margin = generateMargin(margin);
- else
- margin = marginDefault;
- }
- else if (marginType == TYPES.o)
- margin = generateMargin([margin[_strTop], margin[_strRight], margin[_strBottom], margin[_strLeft]]);
- else
- margin = marginDefault;
-
- settingsAxis = checkSettingsStringValue(axis, elementObjSettingsAxisValues) ? axis : 'xy';
- settingsScroll = getPerAxisValue(scroll, TYPES.s, strAlways, elementObjSettingsScrollValues);
- settingsBlock = getPerAxisValue(block, TYPES.s, strBegin, elementObjSettingsBlockValues);
- settingsMargin = margin;
- var viewportScroll = {
- l: _scrollHorizontalInfo._currentScroll,
- t: _scrollVerticalInfo._currentScroll
- };
-
- var viewportOffset = _paddingElement.offset();
-
- var elementOffset = finalElement.offset();
- var doNotScroll = {
- x : settingsScroll.x == strNever || settingsAxis == _strY,
- y : settingsScroll.y == strNever || settingsAxis == _strX
- };
- elementOffset[_strTop] -= settingsMargin[0];
- elementOffset[_strLeft] -= settingsMargin[3];
- var elementScrollCoordinates = {
- x: MATH.round(elementOffset[_strLeft] - viewportOffset[_strLeft] + viewportScroll.l),
- y: MATH.round(elementOffset[_strTop] - viewportOffset[_strTop] + viewportScroll.t)
- };
- if (_isRTL) {
- if (!_rtlScrollBehavior.n && !_rtlScrollBehavior.i)
- elementScrollCoordinates.x = MATH.round(viewportOffset[_strLeft] - elementOffset[_strLeft] + viewportScroll.l);
- if (_rtlScrollBehavior.n && normalizeRTL)
- elementScrollCoordinates.x *= -1;
- if (_rtlScrollBehavior.i && normalizeRTL)
- elementScrollCoordinates.x = MATH.round(viewportOffset[_strLeft] - elementOffset[_strLeft] + (_scrollHorizontalInfo._maxScroll - viewportScroll.l));
- }
-
- if (settingsBlock.x != strBegin || settingsBlock.y != strBegin || settingsScroll.x == strIfNeeded || settingsScroll.y == strIfNeeded || _isRTL) {
- var measuringElm = finalElement[0];
- var rawElementSize = _supportTransform ? measuringElm.getBoundingClientRect() : {
- width : measuringElm[LEXICON.oW],
- height : measuringElm[LEXICON.oH]
- };
- var elementSize = {
- w: rawElementSize[_strWidth] + settingsMargin[3] + settingsMargin[1],
- h: rawElementSize[_strHeight] + settingsMargin[0] + settingsMargin[2]
- };
- var finalizeBlock = function(isX) {
- var vars = getScrollbarVars(isX);
- var wh = vars._w_h;
- var lt = vars._left_top;
- var xy = vars._x_y;
- var blockIsEnd = settingsBlock[xy] == (isX ? _isRTL ? strBegin : strEnd : strEnd);
- var blockIsCenter = settingsBlock[xy] == strCenter;
- var blockIsNearest = settingsBlock[xy] == strNearest;
- var scrollNever = settingsScroll[xy] == strNever;
- var scrollIfNeeded = settingsScroll[xy] == strIfNeeded;
- var vpSize = _viewportSize[wh];
- var vpOffset = viewportOffset[lt];
- var elSize = elementSize[wh];
- var elOffset = elementOffset[lt];
- var divide = blockIsCenter ? 2 : 1;
- var elementCenterOffset = elOffset + (elSize / 2);
- var viewportCenterOffset = vpOffset + (vpSize / 2);
- var isInView =
- elSize <= vpSize
- && elOffset >= vpOffset
- && elOffset + elSize <= vpOffset + vpSize;
- if(scrollNever)
- doNotScroll[xy] = true;
- else if(!doNotScroll[xy]) {
- if (blockIsNearest || scrollIfNeeded) {
- doNotScroll[xy] = scrollIfNeeded ? isInView : false;
- blockIsEnd = elSize < vpSize ? elementCenterOffset > viewportCenterOffset : elementCenterOffset < viewportCenterOffset;
- }
- elementScrollCoordinates[xy] -= blockIsEnd || blockIsCenter ? ((vpSize / divide) - (elSize / divide)) * (isX && _isRTL && normalizeRTL ? -1 : 1) : 0;
- }
- };
- finalizeBlock(true);
- finalizeBlock(false);
- }
- if (doNotScroll.y)
- delete elementScrollCoordinates.y;
- if (doNotScroll.x)
- delete elementScrollCoordinates.x;
- coordinates = elementScrollCoordinates;
- }
- finalScroll[_strScrollLeft] = getFinalScroll(true, getRawScroll(true, coordinates));
- finalScroll[_strScrollTop] = getFinalScroll(false, getRawScroll(false, coordinates));
- doScrollLeft = finalScroll[_strScrollLeft] !== undefined;
- doScrollTop = finalScroll[_strScrollTop] !== undefined;
- if ((doScrollLeft || doScrollTop) && (duration > 0 || durationIsObject)) {
- if (durationIsObject) {
- duration.complete = proxyCompleteCallback;
- _viewportElement.animate(finalScroll, duration);
- }
- else {
- animationOptions = {
- duration: duration,
- complete: proxyCompleteCallback
- };
- if (type(easing) == TYPES.a || FRAMEWORK.isPlainObject(easing)) {
- specialEasing[_strScrollLeft] = easing[0] || easing.x;
- specialEasing[_strScrollTop] = easing[1] || easing.y;
- animationOptions.specialEasing = specialEasing;
- }
- else {
- animationOptions.easing = easing;
- }
- _viewportElement.animate(finalScroll, animationOptions);
- }
- }
- else {
- if (doScrollLeft)
- _viewportElement[_strScrollLeft](finalScroll[_strScrollLeft]);
- if (doScrollTop)
- _viewportElement[_strScrollTop](finalScroll[_strScrollTop]);
- }
- };
-
- _base.scrollStop = function (param1, param2, param3) {
- _viewportElement.stop(param1, param2, param3);
- return _base;
- };
-
- _base.getElements = function (elementName) {
- var obj = {
- target: _targetElementNative,
- host: _hostElementNative,
- padding: _paddingElementNative,
- viewport: _viewportElementNative,
- content: _contentElementNative,
- scrollbarHorizontal: {
- scrollbar: _scrollbarHorizontalElement[0],
- track: _scrollbarHorizontalTrackElement[0],
- handle: _scrollbarHorizontalHandleElement[0]
- },
- scrollbarVertical: {
- scrollbar: _scrollbarVerticalElement[0],
- track: _scrollbarVerticalTrackElement[0],
- handle: _scrollbarVerticalHandleElement[0]
- },
- scrollbarCorner: _scrollbarCornerElement[0]
- };
- return type(elementName) == TYPES.s ? getObjectPropVal(obj, elementName) : obj;
- };
-
- _base.getState = function (stateProperty) {
- var prepare = function (obj) {
- if (!FRAMEWORK.isPlainObject(obj))
- return obj;
- var extended = extendDeep({}, obj);
- var changePropertyName = function (from, to) {
- if (extended.hasOwnProperty(from)) {
- extended[to] = extended[from];
- delete extended[from];
- }
- };
- changePropertyName('w', _strWidth);
- changePropertyName('h', _strHeight);
- delete extended.c;
- return extended;
- };
- var obj = {
- sleeping: prepare(_isSleeping) || false,
- autoUpdate: prepare(!_mutationObserversConnected),
- widthAuto: prepare(_widthAutoCache),
- heightAuto: prepare(_heightAutoCache),
- padding: prepare(_cssPaddingCache),
- overflowAmount: prepare(_overflowAmountCache),
- hideOverflow: prepare(_hideOverflowCache),
- hasOverflow: prepare(_hasOverflowCache),
- contentScrollSize: prepare(_contentScrollSizeCache),
- viewportSize: prepare(_viewportSize),
- hostSize: prepare(_hostSizeCache),
- documentMixed : prepare(_documentMixed)
- };
- return type(stateProperty) == TYPES.s ? getObjectPropVal(obj, stateProperty) : obj;
- };
-
- _base.ext = function(extName) {
- var result;
- var privateMethods = _extensionsPrivateMethods.split(' ');
- var i = 0;
- if(type(extName) == TYPES.s) {
- if(_extensions.hasOwnProperty(extName)) {
- result = extendDeep({}, _extensions[extName]);
- for (; i < privateMethods.length; i++)
- delete result[privateMethods[i]];
- }
- }
- else {
- result = { };
- for(i in _extensions)
- result[i] = extendDeep({ }, _base.ext(i));
- }
- return result;
- };
-
- _base.addExt = function(extName, extensionOptions) {
- var registeredExtensionObj = window[PLUGINNAME].extension(extName);
- var instance;
- var instanceAdded;
- var instanceContract;
- var contractResult;
- var contractFulfilled = true;
- if(registeredExtensionObj) {
- if(!_extensions.hasOwnProperty(extName)) {
- instance = registeredExtensionObj.extensionFactory.call(_base,
- extendDeep({ }, registeredExtensionObj.defaultOptions),
- FRAMEWORK,
- COMPATIBILITY);
- if (instance) {
- instanceContract = instance.contract;
- if (type(instanceContract) == TYPES.f) {
- contractResult = instanceContract(window);
- contractFulfilled = type(contractResult) == TYPES.b ? contractResult : contractFulfilled;
- }
- if(contractFulfilled) {
- _extensions[extName] = instance;
- instanceAdded = instance.added;
- if(type(instanceAdded) == TYPES.f)
- instanceAdded(extensionOptions);
- return _base.ext(extName);
- }
- }
- }
- else
- return _base.ext(extName);
- }
- else
- console.warn("A extension with the name \"" + extName + "\" isn't registered.");
- };
-
- _base.removeExt = function(extName) {
- var instance = _extensions[extName];
- var instanceRemoved;
- if(instance) {
- delete _extensions[extName];
- instanceRemoved = instance.removed;
- if(type(instanceRemoved) == TYPES.f)
- instanceRemoved();
- return true;
- }
- return false;
- };
-
- function construct(targetElement, options, extensions) {
- _defaultOptions = globals.defaultOptions;
- _nativeScrollbarStyling = globals.nativeScrollbarStyling;
- _nativeScrollbarSize = extendDeep({}, globals.nativeScrollbarSize);
- _nativeScrollbarIsOverlaid = extendDeep({}, globals.nativeScrollbarIsOverlaid);
- _overlayScrollbarDummySize = extendDeep({}, globals.overlayScrollbarDummySize);
- _rtlScrollBehavior = extendDeep({}, globals.rtlScrollBehavior);
-
- setOptions(extendDeep({ }, _defaultOptions, _pluginsOptions._validate(options, _pluginsOptions._template, true)));
-
- if (_nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.x && !_currentPreparedOptions.nativeScrollbarsOverlaid.initialize) {
- dispatchCallback("onInitializationWithdrawn");
- return false;
- }
- _cssCalc = globals.cssCalc;
- _msieVersion = globals.msie;
- _autoUpdateRecommended = globals.autoUpdateRecommended;
- _supportTransition = globals.supportTransition;
- _supportTransform = globals.supportTransform;
- _supportPassiveEvents = globals.supportPassiveEvents;
- _supportResizeObserver = globals.supportResizeObserver;
- _supportMutationObserver = globals.supportMutationObserver;
- _restrictedMeasuring = globals.restrictedMeasuring;
- _documentElement = FRAMEWORK(targetElement.ownerDocument);
- _documentElementNative = _documentElement[0];
- _windowElement = FRAMEWORK(_documentElementNative.defaultView || _documentElementNative.parentWindow);
- _windowElementNative = _windowElement[0];
- _htmlElement = findFirst(_documentElement, 'html');
- _bodyElement = findFirst(_htmlElement, 'body');
- _targetElement = FRAMEWORK(targetElement);
- _targetElementNative = _targetElement[0];
- _isTextarea = _targetElement.is('textarea');
- _isBody = _targetElement.is('body');
- _documentMixed = _documentElementNative !== document;
- var initBodyScroll;
- if (_isBody) {
- initBodyScroll = {};
- initBodyScroll.l = MATH.max(_targetElement[_strScrollLeft](), _htmlElement[_strScrollLeft](), _windowElement[_strScrollLeft]());
- initBodyScroll.t = MATH.max(_targetElement[_strScrollTop](), _htmlElement[_strScrollTop](), _windowElement[_strScrollTop]());
- }
-
- setupStructureDOM();
- setupStructureEvents();
-
- setupScrollbarsDOM();
- setupScrollbarEvents(true);
- setupScrollbarEvents(false);
-
- setupScrollbarCornerDOM();
- setupScrollbarCornerEvents();
-
- createMutationObservers();
- if(_isBody) {
-
- _viewportElement[_strScrollLeft](initBodyScroll.l)[_strScrollTop](initBodyScroll.t);
-
- if(document.activeElement == targetElement && _viewportElementNative.focus) {
-
- _viewportElement.attr('tabindex', '-1');
- _viewportElementNative.focus();
-
- _viewportElement.one(_strMouseTouchDownEvent, function() {
- _viewportElement.removeAttr('tabindex');
- });
- }
- }
-
- addResizeObserver(_sizeObserverElement, hostOnResized);
-
- hostOnResized();
- _base.update(_strAuto);
-
- _initialized = true;
- dispatchCallback("onInitialized");
-
- FRAMEWORK.each(_callbacksInitQeueue, function(index, value) { dispatchCallback(value.n, value.a); });
- _callbacksInitQeueue = [ ];
-
- if(type(extensions) == TYPES.s)
- extensions = [ extensions ];
- if(COMPATIBILITY.isA(extensions))
- FRAMEWORK.each(extensions, function (index, value) {_base.addExt(value); });
- else if(FRAMEWORK.isPlainObject(extensions))
- FRAMEWORK.each(extensions, function (key, value) { _base.addExt(key, value); });
-
- setTimeout(function () {
- if (_supportTransition && !_destroyed)
- addClass(_hostElement, _classNameHostTransition);
- }, 333);
- return _initialized;
- }
- if (construct(pluginTargetElement, options, extensions)) {
- INSTANCES(pluginTargetElement, _base);
- return _base;
- }
- _base = undefined;
- }
-
- window[PLUGINNAME] = function(pluginTargetElements, options, extensions) {
- if(arguments[LEXICON.l] === 0)
- return this;
- var arr = [ ];
- var optsIsPlainObj = FRAMEWORK.isPlainObject(options);
- var inst;
- var result;
-
- if(!pluginTargetElements)
- return optsIsPlainObj || !options ? result : arr;
-
- pluginTargetElements = pluginTargetElements[LEXICON.l] != undefined ? pluginTargetElements : [ pluginTargetElements[0] || pluginTargetElements ];
- initOverlayScrollbarsStatics();
- if(pluginTargetElements[LEXICON.l] > 0) {
- if(optsIsPlainObj) {
- FRAMEWORK.each(pluginTargetElements, function (i, v) {
- inst = v;
- if(inst !== undefined)
- arr.push(OverlayScrollbarsInstance(inst, options, extensions, _pluginsGlobals, _pluginsAutoUpdateLoop));
- });
- }
- else {
- FRAMEWORK.each(pluginTargetElements, function(i, v) {
- inst = INSTANCES(v);
- if((options === '!' && inst instanceof window[PLUGINNAME]) || (COMPATIBILITY.type(options) == TYPES.f && options(v, inst)))
- arr.push(inst);
- else if(options === undefined)
- arr.push(inst);
- });
- }
- result = arr[LEXICON.l] === 1 ? arr[0] : arr;
- }
- return result;
- };
-
- window[PLUGINNAME].globals = function () {
- initOverlayScrollbarsStatics();
- var globals = FRAMEWORK.extend(true, { }, _pluginsGlobals);
- delete globals['msie'];
- return globals;
- };
-
- window[PLUGINNAME].defaultOptions = function(newDefaultOptions) {
- initOverlayScrollbarsStatics();
- var currDefaultOptions = _pluginsGlobals.defaultOptions;
- if(newDefaultOptions === undefined)
- return FRAMEWORK.extend(true, { }, currDefaultOptions);
-
- _pluginsGlobals.defaultOptions = FRAMEWORK.extend(true, { }, currDefaultOptions , _pluginsOptions._validate(newDefaultOptions, _pluginsOptions._template, true));
- };
-
- window[PLUGINNAME].extension = function(extensionName, extension, defaultOptions) {
- var extNameTypeString = COMPATIBILITY.type(extensionName) == TYPES.s;
- var argLen = arguments[LEXICON.l];
- var i = 0;
- if(argLen < 1 || !extNameTypeString) {
-
- return FRAMEWORK.extend(true, { length : _pluginsExtensions[LEXICON.l] }, _pluginsExtensions);
- }
- else if(extNameTypeString) {
- if(COMPATIBILITY.type(extension) == TYPES.f) {
-
- _pluginsExtensions.push({
- name : extensionName,
- extensionFactory : extension,
- defaultOptions : defaultOptions
- });
- }
- else {
- for(; i < _pluginsExtensions[LEXICON.l]; i++) {
- if (_pluginsExtensions[i].name === extensionName) {
- if(argLen > 1)
- _pluginsExtensions.splice(i, 1);
- else
- return FRAMEWORK.extend(true, { }, _pluginsExtensions[i]);
- }
- }
- }
- }
- };
- return window[PLUGINNAME];
- })();
- if(JQUERY && JQUERY.fn) {
-
- JQUERY.fn.overlayScrollbars = function (options, extensions) {
- var _elements = this;
- if(JQUERY.isPlainObject(options)) {
- JQUERY.each(_elements, function() { PLUGIN(this, options, extensions); });
- return _elements;
- }
- else
- return PLUGIN(_elements, options);
- };
- }
- return PLUGIN;
- }
- ));
|