theme.js 316 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482
  1. (function () {
  2. var modern = (function () {
  3. 'use strict';
  4. var global = tinymce.util.Tools.resolve('tinymce.ThemeManager');
  5. var global$1 = tinymce.util.Tools.resolve('tinymce.EditorManager');
  6. var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');
  7. var isBrandingEnabled = function (editor) {
  8. return editor.getParam('branding', true, 'boolean');
  9. };
  10. var hasMenubar = function (editor) {
  11. return getMenubar(editor) !== false;
  12. };
  13. var getMenubar = function (editor) {
  14. return editor.getParam('menubar');
  15. };
  16. var hasStatusbar = function (editor) {
  17. return editor.getParam('statusbar', true, 'boolean');
  18. };
  19. var getToolbarSize = function (editor) {
  20. return editor.getParam('toolbar_items_size');
  21. };
  22. var isReadOnly = function (editor) {
  23. return editor.getParam('readonly', false, 'boolean');
  24. };
  25. var getFixedToolbarContainer = function (editor) {
  26. return editor.getParam('fixed_toolbar_container');
  27. };
  28. var getInlineToolbarPositionHandler = function (editor) {
  29. return editor.getParam('inline_toolbar_position_handler');
  30. };
  31. var getMenu = function (editor) {
  32. return editor.getParam('menu');
  33. };
  34. var getRemovedMenuItems = function (editor) {
  35. return editor.getParam('removed_menuitems', '');
  36. };
  37. var getMinWidth = function (editor) {
  38. return editor.getParam('min_width', 100, 'number');
  39. };
  40. var getMinHeight = function (editor) {
  41. return editor.getParam('min_height', 100, 'number');
  42. };
  43. var getMaxWidth = function (editor) {
  44. return editor.getParam('max_width', 65535, 'number');
  45. };
  46. var getMaxHeight = function (editor) {
  47. return editor.getParam('max_height', 65535, 'number');
  48. };
  49. var isSkinDisabled = function (editor) {
  50. return editor.settings.skin === false;
  51. };
  52. var isInline = function (editor) {
  53. return editor.getParam('inline', false, 'boolean');
  54. };
  55. var getResize = function (editor) {
  56. var resize = editor.getParam('resize', 'vertical');
  57. if (resize === false) {
  58. return 'none';
  59. } else if (resize === 'both') {
  60. return 'both';
  61. } else {
  62. return 'vertical';
  63. }
  64. };
  65. var getSkinUrl = function (editor) {
  66. var settings = editor.settings;
  67. var skin = settings.skin;
  68. var skinUrl = settings.skin_url;
  69. if (skin !== false) {
  70. var skinName = skin ? skin : 'lightgray';
  71. if (skinUrl) {
  72. skinUrl = editor.documentBaseURI.toAbsolute(skinUrl);
  73. } else {
  74. skinUrl = global$1.baseURL + '/skins/' + skinName;
  75. }
  76. }
  77. return skinUrl;
  78. };
  79. var getIndexedToolbars = function (settings, defaultToolbar) {
  80. var toolbars = [];
  81. for (var i = 1; i < 10; i++) {
  82. var toolbar_1 = settings['toolbar' + i];
  83. if (!toolbar_1) {
  84. break;
  85. }
  86. toolbars.push(toolbar_1);
  87. }
  88. var mainToolbar = settings.toolbar ? [settings.toolbar] : [defaultToolbar];
  89. return toolbars.length > 0 ? toolbars : mainToolbar;
  90. };
  91. var getToolbars = function (editor) {
  92. var toolbar = editor.getParam('toolbar');
  93. var defaultToolbar = 'undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image';
  94. if (toolbar === false) {
  95. return [];
  96. } else if (global$2.isArray(toolbar)) {
  97. return global$2.grep(toolbar, function (toolbar) {
  98. return toolbar.length > 0;
  99. });
  100. } else {
  101. return getIndexedToolbars(editor.settings, defaultToolbar);
  102. }
  103. };
  104. var global$3 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');
  105. var global$4 = tinymce.util.Tools.resolve('tinymce.ui.Factory');
  106. var global$5 = tinymce.util.Tools.resolve('tinymce.util.I18n');
  107. var fireSkinLoaded = function (editor) {
  108. return editor.fire('SkinLoaded');
  109. };
  110. var fireResizeEditor = function (editor) {
  111. return editor.fire('ResizeEditor');
  112. };
  113. var fireBeforeRenderUI = function (editor) {
  114. return editor.fire('BeforeRenderUI');
  115. };
  116. var $_aycuj2t7jh8lz3jp = {
  117. fireSkinLoaded: fireSkinLoaded,
  118. fireResizeEditor: fireResizeEditor,
  119. fireBeforeRenderUI: fireBeforeRenderUI
  120. };
  121. var focus = function (panel, type) {
  122. return function () {
  123. var item = panel.find(type)[0];
  124. if (item) {
  125. item.focus(true);
  126. }
  127. };
  128. };
  129. var addKeys = function (editor, panel) {
  130. editor.shortcuts.add('Alt+F9', '', focus(panel, 'menubar'));
  131. editor.shortcuts.add('Alt+F10,F10', '', focus(panel, 'toolbar'));
  132. editor.shortcuts.add('Alt+F11', '', focus(panel, 'elementpath'));
  133. panel.on('cancel', function () {
  134. editor.focus();
  135. });
  136. };
  137. var $_47hpztt8jh8lz3jq = { addKeys: addKeys };
  138. var global$6 = tinymce.util.Tools.resolve('tinymce.geom.Rect');
  139. var global$7 = tinymce.util.Tools.resolve('tinymce.util.Delay');
  140. var noop = function () {
  141. var x = [];
  142. for (var _i = 0; _i < arguments.length; _i++) {
  143. x[_i] = arguments[_i];
  144. }
  145. };
  146. var noarg = function (f) {
  147. return function () {
  148. var x = [];
  149. for (var _i = 0; _i < arguments.length; _i++) {
  150. x[_i] = arguments[_i];
  151. }
  152. return f();
  153. };
  154. };
  155. var compose = function (fa, fb) {
  156. return function () {
  157. var x = [];
  158. for (var _i = 0; _i < arguments.length; _i++) {
  159. x[_i] = arguments[_i];
  160. }
  161. return fa(fb.apply(null, arguments));
  162. };
  163. };
  164. var constant = function (value) {
  165. return function () {
  166. return value;
  167. };
  168. };
  169. var identity = function (x) {
  170. return x;
  171. };
  172. var tripleEquals = function (a, b) {
  173. return a === b;
  174. };
  175. var curry = function (f) {
  176. var x = [];
  177. for (var _i = 1; _i < arguments.length; _i++) {
  178. x[_i - 1] = arguments[_i];
  179. }
  180. var args = new Array(arguments.length - 1);
  181. for (var i = 1; i < arguments.length; i++)
  182. args[i - 1] = arguments[i];
  183. return function () {
  184. var x = [];
  185. for (var _i = 0; _i < arguments.length; _i++) {
  186. x[_i] = arguments[_i];
  187. }
  188. var newArgs = new Array(arguments.length);
  189. for (var j = 0; j < newArgs.length; j++)
  190. newArgs[j] = arguments[j];
  191. var all = args.concat(newArgs);
  192. return f.apply(null, all);
  193. };
  194. };
  195. var not = function (f) {
  196. return function () {
  197. var x = [];
  198. for (var _i = 0; _i < arguments.length; _i++) {
  199. x[_i] = arguments[_i];
  200. }
  201. return !f.apply(null, arguments);
  202. };
  203. };
  204. var die = function (msg) {
  205. return function () {
  206. throw new Error(msg);
  207. };
  208. };
  209. var apply = function (f) {
  210. return f();
  211. };
  212. var call = function (f) {
  213. f();
  214. };
  215. var never = constant(false);
  216. var always = constant(true);
  217. var $_3pjweotejh8lz3k4 = {
  218. noop: noop,
  219. noarg: noarg,
  220. compose: compose,
  221. constant: constant,
  222. identity: identity,
  223. tripleEquals: tripleEquals,
  224. curry: curry,
  225. not: not,
  226. die: die,
  227. apply: apply,
  228. call: call,
  229. never: never,
  230. always: always
  231. };
  232. var never$1 = $_3pjweotejh8lz3k4.never;
  233. var always$1 = $_3pjweotejh8lz3k4.always;
  234. var none = function () {
  235. return NONE;
  236. };
  237. var NONE = function () {
  238. var eq = function (o) {
  239. return o.isNone();
  240. };
  241. var call = function (thunk) {
  242. return thunk();
  243. };
  244. var id = function (n) {
  245. return n;
  246. };
  247. var noop = function () {
  248. };
  249. var me = {
  250. fold: function (n, s) {
  251. return n();
  252. },
  253. is: never$1,
  254. isSome: never$1,
  255. isNone: always$1,
  256. getOr: id,
  257. getOrThunk: call,
  258. getOrDie: function (msg) {
  259. throw new Error(msg || 'error: getOrDie called on none.');
  260. },
  261. or: id,
  262. orThunk: call,
  263. map: none,
  264. ap: none,
  265. each: noop,
  266. bind: none,
  267. flatten: none,
  268. exists: never$1,
  269. forall: always$1,
  270. filter: none,
  271. equals: eq,
  272. equals_: eq,
  273. toArray: function () {
  274. return [];
  275. },
  276. toString: $_3pjweotejh8lz3k4.constant('none()')
  277. };
  278. if (Object.freeze)
  279. Object.freeze(me);
  280. return me;
  281. }();
  282. var some = function (a) {
  283. var constant_a = function () {
  284. return a;
  285. };
  286. var self = function () {
  287. return me;
  288. };
  289. var map = function (f) {
  290. return some(f(a));
  291. };
  292. var bind = function (f) {
  293. return f(a);
  294. };
  295. var me = {
  296. fold: function (n, s) {
  297. return s(a);
  298. },
  299. is: function (v) {
  300. return a === v;
  301. },
  302. isSome: always$1,
  303. isNone: never$1,
  304. getOr: constant_a,
  305. getOrThunk: constant_a,
  306. getOrDie: constant_a,
  307. or: self,
  308. orThunk: self,
  309. map: map,
  310. ap: function (optfab) {
  311. return optfab.fold(none, function (fab) {
  312. return some(fab(a));
  313. });
  314. },
  315. each: function (f) {
  316. f(a);
  317. },
  318. bind: bind,
  319. flatten: constant_a,
  320. exists: bind,
  321. forall: bind,
  322. filter: function (f) {
  323. return f(a) ? me : NONE;
  324. },
  325. equals: function (o) {
  326. return o.is(a);
  327. },
  328. equals_: function (o, elementEq) {
  329. return o.fold(never$1, function (b) {
  330. return elementEq(a, b);
  331. });
  332. },
  333. toArray: function () {
  334. return [a];
  335. },
  336. toString: function () {
  337. return 'some(' + a + ')';
  338. }
  339. };
  340. return me;
  341. };
  342. var from = function (value) {
  343. return value === null || value === undefined ? NONE : some(value);
  344. };
  345. var Option = {
  346. some: some,
  347. none: none,
  348. from: from
  349. };
  350. var getUiContainerDelta = function (ctrl) {
  351. var uiContainer = getUiContainer(ctrl);
  352. if (uiContainer && global$3.DOM.getStyle(uiContainer, 'position', true) !== 'static') {
  353. var containerPos = global$3.DOM.getPos(uiContainer);
  354. var dx = uiContainer.scrollLeft - containerPos.x;
  355. var dy = uiContainer.scrollTop - containerPos.y;
  356. return Option.some({
  357. x: dx,
  358. y: dy
  359. });
  360. } else {
  361. return Option.none();
  362. }
  363. };
  364. var setUiContainer = function (editor, ctrl) {
  365. var uiContainer = global$3.DOM.select(editor.settings.ui_container)[0];
  366. ctrl.getRoot().uiContainer = uiContainer;
  367. };
  368. var getUiContainer = function (ctrl) {
  369. return ctrl ? ctrl.getRoot().uiContainer : null;
  370. };
  371. var inheritUiContainer = function (fromCtrl, toCtrl) {
  372. return toCtrl.uiContainer = getUiContainer(fromCtrl);
  373. };
  374. var $_1jk3jvtcjh8lz3jy = {
  375. getUiContainerDelta: getUiContainerDelta,
  376. setUiContainer: setUiContainer,
  377. getUiContainer: getUiContainer,
  378. inheritUiContainer: inheritUiContainer
  379. };
  380. var createToolbar = function (editor, items, size) {
  381. var toolbarItems = [];
  382. var buttonGroup;
  383. if (!items) {
  384. return;
  385. }
  386. global$2.each(items.split(/[ ,]/), function (item) {
  387. var itemName;
  388. var bindSelectorChanged = function () {
  389. var selection = editor.selection;
  390. if (item.settings.stateSelector) {
  391. selection.selectorChanged(item.settings.stateSelector, function (state) {
  392. item.active(state);
  393. }, true);
  394. }
  395. if (item.settings.disabledStateSelector) {
  396. selection.selectorChanged(item.settings.disabledStateSelector, function (state) {
  397. item.disabled(state);
  398. });
  399. }
  400. };
  401. if (item === '|') {
  402. buttonGroup = null;
  403. } else {
  404. if (!buttonGroup) {
  405. buttonGroup = {
  406. type: 'buttongroup',
  407. items: []
  408. };
  409. toolbarItems.push(buttonGroup);
  410. }
  411. if (editor.buttons[item]) {
  412. itemName = item;
  413. item = editor.buttons[itemName];
  414. if (typeof item === 'function') {
  415. item = item();
  416. }
  417. item.type = item.type || 'button';
  418. item.size = size;
  419. item = global$4.create(item);
  420. buttonGroup.items.push(item);
  421. if (editor.initialized) {
  422. bindSelectorChanged();
  423. } else {
  424. editor.on('init', bindSelectorChanged);
  425. }
  426. }
  427. }
  428. });
  429. return {
  430. type: 'toolbar',
  431. layout: 'flow',
  432. items: toolbarItems
  433. };
  434. };
  435. var createToolbars = function (editor, size) {
  436. var toolbars = [];
  437. var addToolbar = function (items) {
  438. if (items) {
  439. toolbars.push(createToolbar(editor, items, size));
  440. }
  441. };
  442. global$2.each(getToolbars(editor), function (toolbar) {
  443. addToolbar(toolbar);
  444. });
  445. if (toolbars.length) {
  446. return {
  447. type: 'panel',
  448. layout: 'stack',
  449. classes: 'toolbar-grp',
  450. ariaRoot: true,
  451. ariaRemember: true,
  452. items: toolbars
  453. };
  454. }
  455. };
  456. var $_fudqhrtfjh8lz3k7 = {
  457. createToolbar: createToolbar,
  458. createToolbars: createToolbars
  459. };
  460. var DOM = global$3.DOM;
  461. var toClientRect = function (geomRect) {
  462. return {
  463. left: geomRect.x,
  464. top: geomRect.y,
  465. width: geomRect.w,
  466. height: geomRect.h,
  467. right: geomRect.x + geomRect.w,
  468. bottom: geomRect.y + geomRect.h
  469. };
  470. };
  471. var hideAllFloatingPanels = function (editor) {
  472. global$2.each(editor.contextToolbars, function (toolbar) {
  473. if (toolbar.panel) {
  474. toolbar.panel.hide();
  475. }
  476. });
  477. };
  478. var movePanelTo = function (panel, pos) {
  479. panel.moveTo(pos.left, pos.top);
  480. };
  481. var togglePositionClass = function (panel, relPos, predicate) {
  482. relPos = relPos ? relPos.substr(0, 2) : '';
  483. global$2.each({
  484. t: 'down',
  485. b: 'up'
  486. }, function (cls, pos) {
  487. panel.classes.toggle('arrow-' + cls, predicate(pos, relPos.substr(0, 1)));
  488. });
  489. global$2.each({
  490. l: 'left',
  491. r: 'right'
  492. }, function (cls, pos) {
  493. panel.classes.toggle('arrow-' + cls, predicate(pos, relPos.substr(1, 1)));
  494. });
  495. };
  496. var userConstrain = function (handler, x, y, elementRect, contentAreaRect, panelRect) {
  497. panelRect = toClientRect({
  498. x: x,
  499. y: y,
  500. w: panelRect.w,
  501. h: panelRect.h
  502. });
  503. if (handler) {
  504. panelRect = handler({
  505. elementRect: toClientRect(elementRect),
  506. contentAreaRect: toClientRect(contentAreaRect),
  507. panelRect: panelRect
  508. });
  509. }
  510. return panelRect;
  511. };
  512. var addContextualToolbars = function (editor) {
  513. var scrollContainer;
  514. var getContextToolbars = function () {
  515. return editor.contextToolbars || [];
  516. };
  517. var getElementRect = function (elm) {
  518. var pos, targetRect, root;
  519. pos = DOM.getPos(editor.getContentAreaContainer());
  520. targetRect = editor.dom.getRect(elm);
  521. root = editor.dom.getRoot();
  522. if (root.nodeName === 'BODY') {
  523. targetRect.x -= root.ownerDocument.documentElement.scrollLeft || root.scrollLeft;
  524. targetRect.y -= root.ownerDocument.documentElement.scrollTop || root.scrollTop;
  525. }
  526. targetRect.x += pos.x;
  527. targetRect.y += pos.y;
  528. return targetRect;
  529. };
  530. var reposition = function (match, shouldShow) {
  531. var relPos, panelRect, elementRect, contentAreaRect, panel, relRect, testPositions, smallElementWidthThreshold;
  532. var handler = getInlineToolbarPositionHandler(editor);
  533. if (editor.removed) {
  534. return;
  535. }
  536. if (!match || !match.toolbar.panel) {
  537. hideAllFloatingPanels(editor);
  538. return;
  539. }
  540. testPositions = [
  541. 'bc-tc',
  542. 'tc-bc',
  543. 'tl-bl',
  544. 'bl-tl',
  545. 'tr-br',
  546. 'br-tr'
  547. ];
  548. panel = match.toolbar.panel;
  549. if (shouldShow) {
  550. panel.show();
  551. }
  552. elementRect = getElementRect(match.element);
  553. panelRect = DOM.getRect(panel.getEl());
  554. contentAreaRect = DOM.getRect(editor.getContentAreaContainer() || editor.getBody());
  555. var delta = $_1jk3jvtcjh8lz3jy.getUiContainerDelta(panel).getOr({
  556. x: 0,
  557. y: 0
  558. });
  559. elementRect.x += delta.x;
  560. elementRect.y += delta.y;
  561. panelRect.x += delta.x;
  562. panelRect.y += delta.y;
  563. contentAreaRect.x += delta.x;
  564. contentAreaRect.y += delta.y;
  565. smallElementWidthThreshold = 25;
  566. if (DOM.getStyle(match.element, 'display', true) !== 'inline') {
  567. var clientRect = match.element.getBoundingClientRect();
  568. elementRect.w = clientRect.width;
  569. elementRect.h = clientRect.height;
  570. }
  571. if (!editor.inline) {
  572. contentAreaRect.w = editor.getDoc().documentElement.offsetWidth;
  573. }
  574. if (editor.selection.controlSelection.isResizable(match.element) && elementRect.w < smallElementWidthThreshold) {
  575. elementRect = global$6.inflate(elementRect, 0, 8);
  576. }
  577. relPos = global$6.findBestRelativePosition(panelRect, elementRect, contentAreaRect, testPositions);
  578. elementRect = global$6.clamp(elementRect, contentAreaRect);
  579. if (relPos) {
  580. relRect = global$6.relativePosition(panelRect, elementRect, relPos);
  581. movePanelTo(panel, userConstrain(handler, relRect.x, relRect.y, elementRect, contentAreaRect, panelRect));
  582. } else {
  583. contentAreaRect.h += panelRect.h;
  584. elementRect = global$6.intersect(contentAreaRect, elementRect);
  585. if (elementRect) {
  586. relPos = global$6.findBestRelativePosition(panelRect, elementRect, contentAreaRect, [
  587. 'bc-tc',
  588. 'bl-tl',
  589. 'br-tr'
  590. ]);
  591. if (relPos) {
  592. relRect = global$6.relativePosition(panelRect, elementRect, relPos);
  593. movePanelTo(panel, userConstrain(handler, relRect.x, relRect.y, elementRect, contentAreaRect, panelRect));
  594. } else {
  595. movePanelTo(panel, userConstrain(handler, elementRect.x, elementRect.y, elementRect, contentAreaRect, panelRect));
  596. }
  597. } else {
  598. panel.hide();
  599. }
  600. }
  601. togglePositionClass(panel, relPos, function (pos1, pos2) {
  602. return pos1 === pos2;
  603. });
  604. };
  605. var repositionHandler = function (show) {
  606. return function () {
  607. var execute = function () {
  608. if (editor.selection) {
  609. reposition(findFrontMostMatch(editor.selection.getNode()), show);
  610. }
  611. };
  612. global$7.requestAnimationFrame(execute);
  613. };
  614. };
  615. var bindScrollEvent = function (panel) {
  616. if (!scrollContainer) {
  617. var reposition_1 = repositionHandler(true);
  618. var uiContainer_1 = $_1jk3jvtcjh8lz3jy.getUiContainer(panel);
  619. scrollContainer = editor.selection.getScrollContainer() || editor.getWin();
  620. DOM.bind(scrollContainer, 'scroll', reposition_1);
  621. DOM.bind(uiContainer_1, 'scroll', reposition_1);
  622. editor.on('remove', function () {
  623. DOM.unbind(scrollContainer, 'scroll', reposition_1);
  624. DOM.unbind(uiContainer_1, 'scroll', reposition_1);
  625. });
  626. }
  627. };
  628. var showContextToolbar = function (match) {
  629. var panel;
  630. if (match.toolbar.panel) {
  631. match.toolbar.panel.show();
  632. reposition(match);
  633. return;
  634. }
  635. panel = global$4.create({
  636. type: 'floatpanel',
  637. role: 'dialog',
  638. classes: 'tinymce tinymce-inline arrow',
  639. ariaLabel: 'Inline toolbar',
  640. layout: 'flex',
  641. direction: 'column',
  642. align: 'stretch',
  643. autohide: false,
  644. autofix: true,
  645. fixed: true,
  646. border: 1,
  647. items: $_fudqhrtfjh8lz3k7.createToolbar(editor, match.toolbar.items),
  648. oncancel: function () {
  649. editor.focus();
  650. }
  651. });
  652. $_1jk3jvtcjh8lz3jy.setUiContainer(editor, panel);
  653. bindScrollEvent(panel);
  654. match.toolbar.panel = panel;
  655. panel.renderTo().reflow();
  656. reposition(match);
  657. };
  658. var hideAllContextToolbars = function () {
  659. global$2.each(getContextToolbars(), function (toolbar) {
  660. if (toolbar.panel) {
  661. toolbar.panel.hide();
  662. }
  663. });
  664. };
  665. var findFrontMostMatch = function (targetElm) {
  666. var i, y, parentsAndSelf;
  667. var toolbars = getContextToolbars();
  668. parentsAndSelf = editor.$(targetElm).parents().add(targetElm);
  669. for (i = parentsAndSelf.length - 1; i >= 0; i--) {
  670. for (y = toolbars.length - 1; y >= 0; y--) {
  671. if (toolbars[y].predicate(parentsAndSelf[i])) {
  672. return {
  673. toolbar: toolbars[y],
  674. element: parentsAndSelf[i]
  675. };
  676. }
  677. }
  678. }
  679. return null;
  680. };
  681. editor.on('click keyup setContent ObjectResized', function (e) {
  682. if (e.type === 'setcontent' && !e.selection) {
  683. return;
  684. }
  685. global$7.setEditorTimeout(editor, function () {
  686. var match;
  687. match = findFrontMostMatch(editor.selection.getNode());
  688. if (match) {
  689. hideAllContextToolbars();
  690. showContextToolbar(match);
  691. } else {
  692. hideAllContextToolbars();
  693. }
  694. });
  695. });
  696. editor.on('blur hide contextmenu', hideAllContextToolbars);
  697. editor.on('ObjectResizeStart', function () {
  698. var match = findFrontMostMatch(editor.selection.getNode());
  699. if (match && match.toolbar.panel) {
  700. match.toolbar.panel.hide();
  701. }
  702. });
  703. editor.on('ResizeEditor ResizeWindow', repositionHandler(true));
  704. editor.on('nodeChange', repositionHandler(false));
  705. editor.on('remove', function () {
  706. global$2.each(getContextToolbars(), function (toolbar) {
  707. if (toolbar.panel) {
  708. toolbar.panel.remove();
  709. }
  710. });
  711. editor.contextToolbars = {};
  712. });
  713. editor.shortcuts.add('ctrl+shift+e > ctrl+shift+p', '', function () {
  714. var match = findFrontMostMatch(editor.selection.getNode());
  715. if (match && match.toolbar.panel) {
  716. match.toolbar.panel.items()[0].focus();
  717. }
  718. });
  719. };
  720. var $_5kodmdt9jh8lz3js = { addContextualToolbars: addContextualToolbars };
  721. var typeOf = function (x) {
  722. if (x === null)
  723. return 'null';
  724. var t = typeof x;
  725. if (t === 'object' && Array.prototype.isPrototypeOf(x))
  726. return 'array';
  727. if (t === 'object' && String.prototype.isPrototypeOf(x))
  728. return 'string';
  729. return t;
  730. };
  731. var isType = function (type) {
  732. return function (value) {
  733. return typeOf(value) === type;
  734. };
  735. };
  736. var $_d8bie3tijh8lz3kn = {
  737. isString: isType('string'),
  738. isObject: isType('object'),
  739. isArray: isType('array'),
  740. isNull: isType('null'),
  741. isBoolean: isType('boolean'),
  742. isUndefined: isType('undefined'),
  743. isFunction: isType('function'),
  744. isNumber: isType('number')
  745. };
  746. var rawIndexOf = function () {
  747. var pIndexOf = Array.prototype.indexOf;
  748. var fastIndex = function (xs, x) {
  749. return pIndexOf.call(xs, x);
  750. };
  751. var slowIndex = function (xs, x) {
  752. return slowIndexOf(xs, x);
  753. };
  754. return pIndexOf === undefined ? slowIndex : fastIndex;
  755. }();
  756. var indexOf = function (xs, x) {
  757. var r = rawIndexOf(xs, x);
  758. return r === -1 ? Option.none() : Option.some(r);
  759. };
  760. var contains = function (xs, x) {
  761. return rawIndexOf(xs, x) > -1;
  762. };
  763. var exists = function (xs, pred) {
  764. return findIndex(xs, pred).isSome();
  765. };
  766. var range = function (num, f) {
  767. var r = [];
  768. for (var i = 0; i < num; i++) {
  769. r.push(f(i));
  770. }
  771. return r;
  772. };
  773. var chunk = function (array, size) {
  774. var r = [];
  775. for (var i = 0; i < array.length; i += size) {
  776. var s = array.slice(i, i + size);
  777. r.push(s);
  778. }
  779. return r;
  780. };
  781. var map = function (xs, f) {
  782. var len = xs.length;
  783. var r = new Array(len);
  784. for (var i = 0; i < len; i++) {
  785. var x = xs[i];
  786. r[i] = f(x, i, xs);
  787. }
  788. return r;
  789. };
  790. var each = function (xs, f) {
  791. for (var i = 0, len = xs.length; i < len; i++) {
  792. var x = xs[i];
  793. f(x, i, xs);
  794. }
  795. };
  796. var eachr = function (xs, f) {
  797. for (var i = xs.length - 1; i >= 0; i--) {
  798. var x = xs[i];
  799. f(x, i, xs);
  800. }
  801. };
  802. var partition = function (xs, pred) {
  803. var pass = [];
  804. var fail = [];
  805. for (var i = 0, len = xs.length; i < len; i++) {
  806. var x = xs[i];
  807. var arr = pred(x, i, xs) ? pass : fail;
  808. arr.push(x);
  809. }
  810. return {
  811. pass: pass,
  812. fail: fail
  813. };
  814. };
  815. var filter = function (xs, pred) {
  816. var r = [];
  817. for (var i = 0, len = xs.length; i < len; i++) {
  818. var x = xs[i];
  819. if (pred(x, i, xs)) {
  820. r.push(x);
  821. }
  822. }
  823. return r;
  824. };
  825. var groupBy = function (xs, f) {
  826. if (xs.length === 0) {
  827. return [];
  828. } else {
  829. var wasType = f(xs[0]);
  830. var r = [];
  831. var group = [];
  832. for (var i = 0, len = xs.length; i < len; i++) {
  833. var x = xs[i];
  834. var type = f(x);
  835. if (type !== wasType) {
  836. r.push(group);
  837. group = [];
  838. }
  839. wasType = type;
  840. group.push(x);
  841. }
  842. if (group.length !== 0) {
  843. r.push(group);
  844. }
  845. return r;
  846. }
  847. };
  848. var foldr = function (xs, f, acc) {
  849. eachr(xs, function (x) {
  850. acc = f(acc, x);
  851. });
  852. return acc;
  853. };
  854. var foldl = function (xs, f, acc) {
  855. each(xs, function (x) {
  856. acc = f(acc, x);
  857. });
  858. return acc;
  859. };
  860. var find = function (xs, pred) {
  861. for (var i = 0, len = xs.length; i < len; i++) {
  862. var x = xs[i];
  863. if (pred(x, i, xs)) {
  864. return Option.some(x);
  865. }
  866. }
  867. return Option.none();
  868. };
  869. var findIndex = function (xs, pred) {
  870. for (var i = 0, len = xs.length; i < len; i++) {
  871. var x = xs[i];
  872. if (pred(x, i, xs)) {
  873. return Option.some(i);
  874. }
  875. }
  876. return Option.none();
  877. };
  878. var slowIndexOf = function (xs, x) {
  879. for (var i = 0, len = xs.length; i < len; ++i) {
  880. if (xs[i] === x) {
  881. return i;
  882. }
  883. }
  884. return -1;
  885. };
  886. var push = Array.prototype.push;
  887. var flatten = function (xs) {
  888. var r = [];
  889. for (var i = 0, len = xs.length; i < len; ++i) {
  890. if (!Array.prototype.isPrototypeOf(xs[i]))
  891. throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);
  892. push.apply(r, xs[i]);
  893. }
  894. return r;
  895. };
  896. var bind = function (xs, f) {
  897. var output = map(xs, f);
  898. return flatten(output);
  899. };
  900. var forall = function (xs, pred) {
  901. for (var i = 0, len = xs.length; i < len; ++i) {
  902. var x = xs[i];
  903. if (pred(x, i, xs) !== true) {
  904. return false;
  905. }
  906. }
  907. return true;
  908. };
  909. var equal = function (a1, a2) {
  910. return a1.length === a2.length && forall(a1, function (x, i) {
  911. return x === a2[i];
  912. });
  913. };
  914. var slice = Array.prototype.slice;
  915. var reverse = function (xs) {
  916. var r = slice.call(xs, 0);
  917. r.reverse();
  918. return r;
  919. };
  920. var difference = function (a1, a2) {
  921. return filter(a1, function (x) {
  922. return !contains(a2, x);
  923. });
  924. };
  925. var mapToObject = function (xs, f) {
  926. var r = {};
  927. for (var i = 0, len = xs.length; i < len; i++) {
  928. var x = xs[i];
  929. r[String(x)] = f(x, i);
  930. }
  931. return r;
  932. };
  933. var pure = function (x) {
  934. return [x];
  935. };
  936. var sort = function (xs, comparator) {
  937. var copy = slice.call(xs, 0);
  938. copy.sort(comparator);
  939. return copy;
  940. };
  941. var head = function (xs) {
  942. return xs.length === 0 ? Option.none() : Option.some(xs[0]);
  943. };
  944. var last = function (xs) {
  945. return xs.length === 0 ? Option.none() : Option.some(xs[xs.length - 1]);
  946. };
  947. var from$1 = $_d8bie3tijh8lz3kn.isFunction(Array.from) ? Array.from : function (x) {
  948. return slice.call(x);
  949. };
  950. var $_f3qxhzthjh8lz3kg = {
  951. map: map,
  952. each: each,
  953. eachr: eachr,
  954. partition: partition,
  955. filter: filter,
  956. groupBy: groupBy,
  957. indexOf: indexOf,
  958. foldr: foldr,
  959. foldl: foldl,
  960. find: find,
  961. findIndex: findIndex,
  962. flatten: flatten,
  963. bind: bind,
  964. forall: forall,
  965. exists: exists,
  966. contains: contains,
  967. equal: equal,
  968. reverse: reverse,
  969. chunk: chunk,
  970. difference: difference,
  971. mapToObject: mapToObject,
  972. pure: pure,
  973. sort: sort,
  974. range: range,
  975. head: head,
  976. last: last,
  977. from: from$1
  978. };
  979. var defaultMenus = {
  980. file: {
  981. title: 'File',
  982. items: 'newdocument restoredraft | preview | print'
  983. },
  984. edit: {
  985. title: 'Edit',
  986. items: 'undo redo | cut copy paste pastetext | selectall'
  987. },
  988. view: {
  989. title: 'View',
  990. items: 'code | visualaid visualchars visualblocks | spellchecker | preview fullscreen'
  991. },
  992. insert: {
  993. title: 'Insert',
  994. items: 'image link media template codesample inserttable | charmap hr | pagebreak nonbreaking anchor toc | insertdatetime'
  995. },
  996. format: {
  997. title: 'Format',
  998. items: 'bold italic underline strikethrough superscript subscript codeformat | blockformats align | removeformat'
  999. },
  1000. tools: {
  1001. title: 'Tools',
  1002. items: 'spellchecker spellcheckerlanguage | a11ycheck code'
  1003. },
  1004. table: { title: 'Table' },
  1005. help: { title: 'Help' }
  1006. };
  1007. var delimiterMenuNamePair = function () {
  1008. return {
  1009. name: '|',
  1010. item: { text: '|' }
  1011. };
  1012. };
  1013. var createMenuNameItemPair = function (name, item) {
  1014. var menuItem = item ? {
  1015. name: name,
  1016. item: item
  1017. } : null;
  1018. return name === '|' ? delimiterMenuNamePair() : menuItem;
  1019. };
  1020. var hasItemName = function (namedMenuItems, name) {
  1021. return $_f3qxhzthjh8lz3kg.findIndex(namedMenuItems, function (namedMenuItem) {
  1022. return namedMenuItem.name === name;
  1023. }).isSome();
  1024. };
  1025. var isSeparator = function (namedMenuItem) {
  1026. return namedMenuItem && namedMenuItem.item.text === '|';
  1027. };
  1028. var cleanupMenu = function (namedMenuItems, removedMenuItems) {
  1029. var menuItemsPass1 = $_f3qxhzthjh8lz3kg.filter(namedMenuItems, function (namedMenuItem) {
  1030. return removedMenuItems.hasOwnProperty(namedMenuItem.name) === false;
  1031. });
  1032. var menuItemsPass2 = $_f3qxhzthjh8lz3kg.filter(menuItemsPass1, function (namedMenuItem, i, namedMenuItems) {
  1033. return !isSeparator(namedMenuItem) || !isSeparator(namedMenuItems[i - 1]);
  1034. });
  1035. return $_f3qxhzthjh8lz3kg.filter(menuItemsPass2, function (namedMenuItem, i, namedMenuItems) {
  1036. return !isSeparator(namedMenuItem) || i > 0 && i < namedMenuItems.length - 1;
  1037. });
  1038. };
  1039. var createMenu = function (editorMenuItems, menus, removedMenuItems, context) {
  1040. var menuButton, menu, namedMenuItems, isUserDefined;
  1041. if (menus) {
  1042. menu = menus[context];
  1043. isUserDefined = true;
  1044. } else {
  1045. menu = defaultMenus[context];
  1046. }
  1047. if (menu) {
  1048. menuButton = { text: menu.title };
  1049. namedMenuItems = [];
  1050. global$2.each((menu.items || '').split(/[ ,]/), function (name) {
  1051. var namedMenuItem = createMenuNameItemPair(name, editorMenuItems[name]);
  1052. if (namedMenuItem) {
  1053. namedMenuItems.push(namedMenuItem);
  1054. }
  1055. });
  1056. if (!isUserDefined) {
  1057. global$2.each(editorMenuItems, function (item, name) {
  1058. if (item.context === context && !hasItemName(namedMenuItems, name)) {
  1059. if (item.separator === 'before') {
  1060. namedMenuItems.push(delimiterMenuNamePair());
  1061. }
  1062. if (item.prependToContext) {
  1063. namedMenuItems.unshift(createMenuNameItemPair(name, item));
  1064. } else {
  1065. namedMenuItems.push(createMenuNameItemPair(name, item));
  1066. }
  1067. if (item.separator === 'after') {
  1068. namedMenuItems.push(delimiterMenuNamePair());
  1069. }
  1070. }
  1071. });
  1072. }
  1073. menuButton.menu = $_f3qxhzthjh8lz3kg.map(cleanupMenu(namedMenuItems, removedMenuItems), function (menuItem) {
  1074. return menuItem.item;
  1075. });
  1076. if (!menuButton.menu.length) {
  1077. return null;
  1078. }
  1079. }
  1080. return menuButton;
  1081. };
  1082. var getDefaultMenubar = function (editor) {
  1083. var name;
  1084. var defaultMenuBar = [];
  1085. var menu = getMenu(editor);
  1086. if (menu) {
  1087. for (name in menu) {
  1088. defaultMenuBar.push(name);
  1089. }
  1090. } else {
  1091. for (name in defaultMenus) {
  1092. defaultMenuBar.push(name);
  1093. }
  1094. }
  1095. return defaultMenuBar;
  1096. };
  1097. var createMenuButtons = function (editor) {
  1098. var menuButtons = [];
  1099. var defaultMenuBar = getDefaultMenubar(editor);
  1100. var removedMenuItems = global$2.makeMap(getRemovedMenuItems(editor).split(/[ ,]/));
  1101. var menubar = getMenubar(editor);
  1102. var enabledMenuNames = typeof menubar === 'string' ? menubar.split(/[ ,]/) : defaultMenuBar;
  1103. for (var i = 0; i < enabledMenuNames.length; i++) {
  1104. var menuItems = enabledMenuNames[i];
  1105. var menu = createMenu(editor.menuItems, getMenu(editor), removedMenuItems, menuItems);
  1106. if (menu) {
  1107. menuButtons.push(menu);
  1108. }
  1109. }
  1110. return menuButtons;
  1111. };
  1112. var $_8i78rftgjh8lz3ka = { createMenuButtons: createMenuButtons };
  1113. var DOM$1 = global$3.DOM;
  1114. var getSize = function (elm) {
  1115. return {
  1116. width: elm.clientWidth,
  1117. height: elm.clientHeight
  1118. };
  1119. };
  1120. var resizeTo = function (editor, width, height) {
  1121. var containerElm, iframeElm, containerSize, iframeSize;
  1122. containerElm = editor.getContainer();
  1123. iframeElm = editor.getContentAreaContainer().firstChild;
  1124. containerSize = getSize(containerElm);
  1125. iframeSize = getSize(iframeElm);
  1126. if (width !== null) {
  1127. width = Math.max(getMinWidth(editor), width);
  1128. width = Math.min(getMaxWidth(editor), width);
  1129. DOM$1.setStyle(containerElm, 'width', width + (containerSize.width - iframeSize.width));
  1130. DOM$1.setStyle(iframeElm, 'width', width);
  1131. }
  1132. height = Math.max(getMinHeight(editor), height);
  1133. height = Math.min(getMaxHeight(editor), height);
  1134. DOM$1.setStyle(iframeElm, 'height', height);
  1135. $_aycuj2t7jh8lz3jp.fireResizeEditor(editor);
  1136. };
  1137. var resizeBy = function (editor, dw, dh) {
  1138. var elm = editor.getContentAreaContainer();
  1139. resizeTo(editor, elm.clientWidth + dw, elm.clientHeight + dh);
  1140. };
  1141. var $_5toavetjjh8lz3ko = {
  1142. resizeTo: resizeTo,
  1143. resizeBy: resizeBy
  1144. };
  1145. var global$8 = tinymce.util.Tools.resolve('tinymce.Env');
  1146. var api = function (elm) {
  1147. return {
  1148. element: function () {
  1149. return elm;
  1150. }
  1151. };
  1152. };
  1153. var trigger = function (sidebar, panel, callbackName) {
  1154. var callback = sidebar.settings[callbackName];
  1155. if (callback) {
  1156. callback(api(panel.getEl('body')));
  1157. }
  1158. };
  1159. var hidePanels = function (name, container, sidebars) {
  1160. global$2.each(sidebars, function (sidebar) {
  1161. var panel = container.items().filter('#' + sidebar.name)[0];
  1162. if (panel && panel.visible() && sidebar.name !== name) {
  1163. trigger(sidebar, panel, 'onhide');
  1164. panel.visible(false);
  1165. }
  1166. });
  1167. };
  1168. var deactivateButtons = function (toolbar) {
  1169. toolbar.items().each(function (ctrl) {
  1170. ctrl.active(false);
  1171. });
  1172. };
  1173. var findSidebar = function (sidebars, name) {
  1174. return global$2.grep(sidebars, function (sidebar) {
  1175. return sidebar.name === name;
  1176. })[0];
  1177. };
  1178. var showPanel = function (editor, name, sidebars) {
  1179. return function (e) {
  1180. var btnCtrl = e.control;
  1181. var container = btnCtrl.parents().filter('panel')[0];
  1182. var panel = container.find('#' + name)[0];
  1183. var sidebar = findSidebar(sidebars, name);
  1184. hidePanels(name, container, sidebars);
  1185. deactivateButtons(btnCtrl.parent());
  1186. if (panel && panel.visible()) {
  1187. trigger(sidebar, panel, 'onhide');
  1188. panel.hide();
  1189. btnCtrl.active(false);
  1190. } else {
  1191. if (panel) {
  1192. panel.show();
  1193. trigger(sidebar, panel, 'onshow');
  1194. } else {
  1195. panel = global$4.create({
  1196. type: 'container',
  1197. name: name,
  1198. layout: 'stack',
  1199. classes: 'sidebar-panel',
  1200. html: ''
  1201. });
  1202. container.prepend(panel);
  1203. trigger(sidebar, panel, 'onrender');
  1204. trigger(sidebar, panel, 'onshow');
  1205. }
  1206. btnCtrl.active(true);
  1207. }
  1208. $_aycuj2t7jh8lz3jp.fireResizeEditor(editor);
  1209. };
  1210. };
  1211. var isModernBrowser = function () {
  1212. return !global$8.ie || global$8.ie >= 11;
  1213. };
  1214. var hasSidebar = function (editor) {
  1215. return isModernBrowser() && editor.sidebars ? editor.sidebars.length > 0 : false;
  1216. };
  1217. var createSidebar = function (editor) {
  1218. var buttons = global$2.map(editor.sidebars, function (sidebar) {
  1219. var settings = sidebar.settings;
  1220. return {
  1221. type: 'button',
  1222. icon: settings.icon,
  1223. image: settings.image,
  1224. tooltip: settings.tooltip,
  1225. onclick: showPanel(editor, sidebar.name, editor.sidebars)
  1226. };
  1227. });
  1228. return {
  1229. type: 'panel',
  1230. name: 'sidebar',
  1231. layout: 'stack',
  1232. classes: 'sidebar',
  1233. items: [{
  1234. type: 'toolbar',
  1235. layout: 'stack',
  1236. classes: 'sidebar-toolbar',
  1237. items: buttons
  1238. }]
  1239. };
  1240. };
  1241. var $_5buua9tkjh8lz3kq = {
  1242. hasSidebar: hasSidebar,
  1243. createSidebar: createSidebar
  1244. };
  1245. var fireSkinLoaded$1 = function (editor) {
  1246. var done = function () {
  1247. editor._skinLoaded = true;
  1248. $_aycuj2t7jh8lz3jp.fireSkinLoaded(editor);
  1249. };
  1250. return function () {
  1251. if (editor.initialized) {
  1252. done();
  1253. } else {
  1254. editor.on('init', done);
  1255. }
  1256. };
  1257. };
  1258. var $_231e94tmjh8lz3ku = { fireSkinLoaded: fireSkinLoaded$1 };
  1259. var DOM$2 = global$3.DOM;
  1260. var switchMode = function (panel) {
  1261. return function (e) {
  1262. panel.find('*').disabled(e.mode === 'readonly');
  1263. };
  1264. };
  1265. var editArea = function (border) {
  1266. return {
  1267. type: 'panel',
  1268. name: 'iframe',
  1269. layout: 'stack',
  1270. classes: 'edit-area',
  1271. border: border,
  1272. html: ''
  1273. };
  1274. };
  1275. var editAreaContainer = function (editor) {
  1276. return {
  1277. type: 'panel',
  1278. layout: 'stack',
  1279. classes: 'edit-aria-container',
  1280. border: '1 0 0 0',
  1281. items: [
  1282. editArea('0'),
  1283. $_5buua9tkjh8lz3kq.createSidebar(editor)
  1284. ]
  1285. };
  1286. };
  1287. var render = function (editor, theme, args) {
  1288. var panel, resizeHandleCtrl, startSize;
  1289. if (isSkinDisabled(editor) === false && args.skinUiCss) {
  1290. DOM$2.styleSheetLoader.load(args.skinUiCss, $_231e94tmjh8lz3ku.fireSkinLoaded(editor));
  1291. } else {
  1292. $_231e94tmjh8lz3ku.fireSkinLoaded(editor)();
  1293. }
  1294. panel = theme.panel = global$4.create({
  1295. type: 'panel',
  1296. role: 'application',
  1297. classes: 'tinymce',
  1298. style: 'visibility: hidden',
  1299. layout: 'stack',
  1300. border: 1,
  1301. items: [
  1302. {
  1303. type: 'container',
  1304. classes: 'top-part',
  1305. items: [
  1306. hasMenubar(editor) === false ? null : {
  1307. type: 'menubar',
  1308. border: '0 0 1 0',
  1309. items: $_8i78rftgjh8lz3ka.createMenuButtons(editor)
  1310. },
  1311. $_fudqhrtfjh8lz3k7.createToolbars(editor, getToolbarSize(editor))
  1312. ]
  1313. },
  1314. $_5buua9tkjh8lz3kq.hasSidebar(editor) ? editAreaContainer(editor) : editArea('1 0 0 0')
  1315. ]
  1316. });
  1317. $_1jk3jvtcjh8lz3jy.setUiContainer(editor, panel);
  1318. if (getResize(editor) !== 'none') {
  1319. resizeHandleCtrl = {
  1320. type: 'resizehandle',
  1321. direction: getResize(editor),
  1322. onResizeStart: function () {
  1323. var elm = editor.getContentAreaContainer().firstChild;
  1324. startSize = {
  1325. width: elm.clientWidth,
  1326. height: elm.clientHeight
  1327. };
  1328. },
  1329. onResize: function (e) {
  1330. if (getResize(editor) === 'both') {
  1331. $_5toavetjjh8lz3ko.resizeTo(editor, startSize.width + e.deltaX, startSize.height + e.deltaY);
  1332. } else {
  1333. $_5toavetjjh8lz3ko.resizeTo(editor, null, startSize.height + e.deltaY);
  1334. }
  1335. }
  1336. };
  1337. }
  1338. if (hasStatusbar(editor)) {
  1339. var linkHtml = '<a href="https://www.tinymce.com/?utm_campaign=editor_referral&amp;utm_medium=poweredby&amp;utm_source=tinymce" rel="noopener" target="_blank" role="presentation" tabindex="-1">tinymce</a>';
  1340. var html = global$5.translate([
  1341. 'Powered by {0}',
  1342. linkHtml
  1343. ]);
  1344. var brandingLabel = isBrandingEnabled(editor) ? {
  1345. type: 'label',
  1346. classes: 'branding',
  1347. html: ' ' + html
  1348. } : null;
  1349. panel.add({
  1350. type: 'panel',
  1351. name: 'statusbar',
  1352. classes: 'statusbar',
  1353. layout: 'flow',
  1354. border: '1 0 0 0',
  1355. ariaRoot: true,
  1356. items: [
  1357. {
  1358. type: 'elementpath',
  1359. editor: editor
  1360. },
  1361. resizeHandleCtrl,
  1362. brandingLabel
  1363. ]
  1364. });
  1365. }
  1366. $_aycuj2t7jh8lz3jp.fireBeforeRenderUI(editor);
  1367. editor.on('SwitchMode', switchMode(panel));
  1368. panel.renderBefore(args.targetNode).reflow();
  1369. if (isReadOnly(editor)) {
  1370. editor.setMode('readonly');
  1371. }
  1372. if (args.width) {
  1373. DOM$2.setStyle(panel.getEl(), 'width', args.width);
  1374. }
  1375. editor.on('remove', function () {
  1376. panel.remove();
  1377. panel = null;
  1378. });
  1379. $_47hpztt8jh8lz3jq.addKeys(editor, panel);
  1380. $_5kodmdt9jh8lz3js.addContextualToolbars(editor);
  1381. return {
  1382. iframeContainer: panel.find('#iframe')[0].getEl(),
  1383. editorContainer: panel.getEl()
  1384. };
  1385. };
  1386. var $_4cj0a3t3jh8lz3jk = { render: render };
  1387. var global$9 = tinymce.util.Tools.resolve('tinymce.dom.DomQuery');
  1388. var count = 0;
  1389. var funcs = {
  1390. id: function () {
  1391. return 'mceu_' + count++;
  1392. },
  1393. create: function (name, attrs, children) {
  1394. var elm = document.createElement(name);
  1395. global$3.DOM.setAttribs(elm, attrs);
  1396. if (typeof children === 'string') {
  1397. elm.innerHTML = children;
  1398. } else {
  1399. global$2.each(children, function (child) {
  1400. if (child.nodeType) {
  1401. elm.appendChild(child);
  1402. }
  1403. });
  1404. }
  1405. return elm;
  1406. },
  1407. createFragment: function (html) {
  1408. return global$3.DOM.createFragment(html);
  1409. },
  1410. getWindowSize: function () {
  1411. return global$3.DOM.getViewPort();
  1412. },
  1413. getSize: function (elm) {
  1414. var width, height;
  1415. if (elm.getBoundingClientRect) {
  1416. var rect = elm.getBoundingClientRect();
  1417. width = Math.max(rect.width || rect.right - rect.left, elm.offsetWidth);
  1418. height = Math.max(rect.height || rect.bottom - rect.bottom, elm.offsetHeight);
  1419. } else {
  1420. width = elm.offsetWidth;
  1421. height = elm.offsetHeight;
  1422. }
  1423. return {
  1424. width: width,
  1425. height: height
  1426. };
  1427. },
  1428. getPos: function (elm, root) {
  1429. return global$3.DOM.getPos(elm, root || funcs.getContainer());
  1430. },
  1431. getContainer: function () {
  1432. return global$8.container ? global$8.container : document.body;
  1433. },
  1434. getViewPort: function (win) {
  1435. return global$3.DOM.getViewPort(win);
  1436. },
  1437. get: function (id) {
  1438. return document.getElementById(id);
  1439. },
  1440. addClass: function (elm, cls) {
  1441. return global$3.DOM.addClass(elm, cls);
  1442. },
  1443. removeClass: function (elm, cls) {
  1444. return global$3.DOM.removeClass(elm, cls);
  1445. },
  1446. hasClass: function (elm, cls) {
  1447. return global$3.DOM.hasClass(elm, cls);
  1448. },
  1449. toggleClass: function (elm, cls, state) {
  1450. return global$3.DOM.toggleClass(elm, cls, state);
  1451. },
  1452. css: function (elm, name, value) {
  1453. return global$3.DOM.setStyle(elm, name, value);
  1454. },
  1455. getRuntimeStyle: function (elm, name) {
  1456. return global$3.DOM.getStyle(elm, name, true);
  1457. },
  1458. on: function (target, name, callback, scope) {
  1459. return global$3.DOM.bind(target, name, callback, scope);
  1460. },
  1461. off: function (target, name, callback) {
  1462. return global$3.DOM.unbind(target, name, callback);
  1463. },
  1464. fire: function (target, name, args) {
  1465. return global$3.DOM.fire(target, name, args);
  1466. },
  1467. innerHtml: function (elm, html) {
  1468. global$3.DOM.setHTML(elm, html);
  1469. }
  1470. };
  1471. var isStatic = function (elm) {
  1472. return funcs.getRuntimeStyle(elm, 'position') === 'static';
  1473. };
  1474. var isFixed = function (ctrl) {
  1475. return ctrl.state.get('fixed');
  1476. };
  1477. function calculateRelativePosition(ctrl, targetElm, rel) {
  1478. var ctrlElm, pos, x, y, selfW, selfH, targetW, targetH, viewport, size;
  1479. viewport = getWindowViewPort();
  1480. pos = funcs.getPos(targetElm, $_1jk3jvtcjh8lz3jy.getUiContainer(ctrl));
  1481. x = pos.x;
  1482. y = pos.y;
  1483. if (isFixed(ctrl) && isStatic(document.body)) {
  1484. x -= viewport.x;
  1485. y -= viewport.y;
  1486. }
  1487. ctrlElm = ctrl.getEl();
  1488. size = funcs.getSize(ctrlElm);
  1489. selfW = size.width;
  1490. selfH = size.height;
  1491. size = funcs.getSize(targetElm);
  1492. targetW = size.width;
  1493. targetH = size.height;
  1494. rel = (rel || '').split('');
  1495. if (rel[0] === 'b') {
  1496. y += targetH;
  1497. }
  1498. if (rel[1] === 'r') {
  1499. x += targetW;
  1500. }
  1501. if (rel[0] === 'c') {
  1502. y += Math.round(targetH / 2);
  1503. }
  1504. if (rel[1] === 'c') {
  1505. x += Math.round(targetW / 2);
  1506. }
  1507. if (rel[3] === 'b') {
  1508. y -= selfH;
  1509. }
  1510. if (rel[4] === 'r') {
  1511. x -= selfW;
  1512. }
  1513. if (rel[3] === 'c') {
  1514. y -= Math.round(selfH / 2);
  1515. }
  1516. if (rel[4] === 'c') {
  1517. x -= Math.round(selfW / 2);
  1518. }
  1519. return {
  1520. x: x,
  1521. y: y,
  1522. w: selfW,
  1523. h: selfH
  1524. };
  1525. }
  1526. var getUiContainerViewPort = function (customUiContainer) {
  1527. return {
  1528. x: 0,
  1529. y: 0,
  1530. w: customUiContainer.scrollWidth - 1,
  1531. h: customUiContainer.scrollHeight - 1
  1532. };
  1533. };
  1534. var getWindowViewPort = function () {
  1535. var win = window;
  1536. var x = Math.max(win.pageXOffset, document.body.scrollLeft, document.documentElement.scrollLeft);
  1537. var y = Math.max(win.pageYOffset, document.body.scrollTop, document.documentElement.scrollTop);
  1538. var w = win.innerWidth || document.documentElement.clientWidth;
  1539. var h = win.innerHeight || document.documentElement.clientHeight;
  1540. return {
  1541. x: x,
  1542. y: y,
  1543. w: x + w,
  1544. h: y + h
  1545. };
  1546. };
  1547. var getViewPortRect = function (ctrl) {
  1548. var customUiContainer = $_1jk3jvtcjh8lz3jy.getUiContainer(ctrl);
  1549. return customUiContainer && !isFixed(ctrl) ? getUiContainerViewPort(customUiContainer) : getWindowViewPort();
  1550. };
  1551. var $_d97gfctrjh8lz3lm = {
  1552. testMoveRel: function (elm, rels) {
  1553. var viewPortRect = getViewPortRect(this);
  1554. for (var i = 0; i < rels.length; i++) {
  1555. var pos = calculateRelativePosition(this, elm, rels[i]);
  1556. if (isFixed(this)) {
  1557. if (pos.x > 0 && pos.x + pos.w < viewPortRect.w && pos.y > 0 && pos.y + pos.h < viewPortRect.h) {
  1558. return rels[i];
  1559. }
  1560. } else {
  1561. if (pos.x > viewPortRect.x && pos.x + pos.w < viewPortRect.w && pos.y > viewPortRect.y && pos.y + pos.h < viewPortRect.h) {
  1562. return rels[i];
  1563. }
  1564. }
  1565. }
  1566. return rels[0];
  1567. },
  1568. moveRel: function (elm, rel) {
  1569. if (typeof rel !== 'string') {
  1570. rel = this.testMoveRel(elm, rel);
  1571. }
  1572. var pos = calculateRelativePosition(this, elm, rel);
  1573. return this.moveTo(pos.x, pos.y);
  1574. },
  1575. moveBy: function (dx, dy) {
  1576. var self = this, rect = self.layoutRect();
  1577. self.moveTo(rect.x + dx, rect.y + dy);
  1578. return self;
  1579. },
  1580. moveTo: function (x, y) {
  1581. var self = this;
  1582. function constrain(value, max, size) {
  1583. if (value < 0) {
  1584. return 0;
  1585. }
  1586. if (value + size > max) {
  1587. value = max - size;
  1588. return value < 0 ? 0 : value;
  1589. }
  1590. return value;
  1591. }
  1592. if (self.settings.constrainToViewport) {
  1593. var viewPortRect = getViewPortRect(this);
  1594. var layoutRect = self.layoutRect();
  1595. x = constrain(x, viewPortRect.w, layoutRect.w);
  1596. y = constrain(y, viewPortRect.h, layoutRect.h);
  1597. }
  1598. var uiContainer = $_1jk3jvtcjh8lz3jy.getUiContainer(self);
  1599. if (uiContainer && isStatic(uiContainer) && !isFixed(self)) {
  1600. x -= uiContainer.scrollLeft;
  1601. y -= uiContainer.scrollTop;
  1602. }
  1603. if (uiContainer) {
  1604. x += 1;
  1605. y += 1;
  1606. }
  1607. if (self.state.get('rendered')) {
  1608. self.layoutRect({
  1609. x: x,
  1610. y: y
  1611. }).repaint();
  1612. } else {
  1613. self.settings.x = x;
  1614. self.settings.y = y;
  1615. }
  1616. self.fire('move', {
  1617. x: x,
  1618. y: y
  1619. });
  1620. return self;
  1621. }
  1622. };
  1623. var global$10 = tinymce.util.Tools.resolve('tinymce.util.Class');
  1624. var global$11 = tinymce.util.Tools.resolve('tinymce.util.EventDispatcher');
  1625. var $_focdcktxjh8lz3mn = {
  1626. parseBox: function (value) {
  1627. var len;
  1628. var radix = 10;
  1629. if (!value) {
  1630. return;
  1631. }
  1632. if (typeof value === 'number') {
  1633. value = value || 0;
  1634. return {
  1635. top: value,
  1636. left: value,
  1637. bottom: value,
  1638. right: value
  1639. };
  1640. }
  1641. value = value.split(' ');
  1642. len = value.length;
  1643. if (len === 1) {
  1644. value[1] = value[2] = value[3] = value[0];
  1645. } else if (len === 2) {
  1646. value[2] = value[0];
  1647. value[3] = value[1];
  1648. } else if (len === 3) {
  1649. value[3] = value[1];
  1650. }
  1651. return {
  1652. top: parseInt(value[0], radix) || 0,
  1653. right: parseInt(value[1], radix) || 0,
  1654. bottom: parseInt(value[2], radix) || 0,
  1655. left: parseInt(value[3], radix) || 0
  1656. };
  1657. },
  1658. measureBox: function (elm, prefix) {
  1659. function getStyle(name) {
  1660. var defaultView = elm.ownerDocument.defaultView;
  1661. if (defaultView) {
  1662. var computedStyle = defaultView.getComputedStyle(elm, null);
  1663. if (computedStyle) {
  1664. name = name.replace(/[A-Z]/g, function (a) {
  1665. return '-' + a;
  1666. });
  1667. return computedStyle.getPropertyValue(name);
  1668. } else {
  1669. return null;
  1670. }
  1671. }
  1672. return elm.currentStyle[name];
  1673. }
  1674. function getSide(name) {
  1675. var val = parseFloat(getStyle(name));
  1676. return isNaN(val) ? 0 : val;
  1677. }
  1678. return {
  1679. top: getSide(prefix + 'TopWidth'),
  1680. right: getSide(prefix + 'RightWidth'),
  1681. bottom: getSide(prefix + 'BottomWidth'),
  1682. left: getSide(prefix + 'LeftWidth')
  1683. };
  1684. }
  1685. };
  1686. function noop$1() {
  1687. }
  1688. function ClassList(onchange) {
  1689. this.cls = [];
  1690. this.cls._map = {};
  1691. this.onchange = onchange || noop$1;
  1692. this.prefix = '';
  1693. }
  1694. global$2.extend(ClassList.prototype, {
  1695. add: function (cls) {
  1696. if (cls && !this.contains(cls)) {
  1697. this.cls._map[cls] = true;
  1698. this.cls.push(cls);
  1699. this._change();
  1700. }
  1701. return this;
  1702. },
  1703. remove: function (cls) {
  1704. if (this.contains(cls)) {
  1705. var i = void 0;
  1706. for (i = 0; i < this.cls.length; i++) {
  1707. if (this.cls[i] === cls) {
  1708. break;
  1709. }
  1710. }
  1711. this.cls.splice(i, 1);
  1712. delete this.cls._map[cls];
  1713. this._change();
  1714. }
  1715. return this;
  1716. },
  1717. toggle: function (cls, state) {
  1718. var curState = this.contains(cls);
  1719. if (curState !== state) {
  1720. if (curState) {
  1721. this.remove(cls);
  1722. } else {
  1723. this.add(cls);
  1724. }
  1725. this._change();
  1726. }
  1727. return this;
  1728. },
  1729. contains: function (cls) {
  1730. return !!this.cls._map[cls];
  1731. },
  1732. _change: function () {
  1733. delete this.clsValue;
  1734. this.onchange.call(this);
  1735. }
  1736. });
  1737. ClassList.prototype.toString = function () {
  1738. var value;
  1739. if (this.clsValue) {
  1740. return this.clsValue;
  1741. }
  1742. value = '';
  1743. for (var i = 0; i < this.cls.length; i++) {
  1744. if (i > 0) {
  1745. value += ' ';
  1746. }
  1747. value += this.prefix + this.cls[i];
  1748. }
  1749. return value;
  1750. };
  1751. function unique(array) {
  1752. var uniqueItems = [];
  1753. var i = array.length, item;
  1754. while (i--) {
  1755. item = array[i];
  1756. if (!item.__checked) {
  1757. uniqueItems.push(item);
  1758. item.__checked = 1;
  1759. }
  1760. }
  1761. i = uniqueItems.length;
  1762. while (i--) {
  1763. delete uniqueItems[i].__checked;
  1764. }
  1765. return uniqueItems;
  1766. }
  1767. var expression = /^([\w\\*]+)?(?:#([\w\-\\]+))?(?:\.([\w\\\.]+))?(?:\[\@?([\w\\]+)([\^\$\*!~]?=)([\w\\]+)\])?(?:\:(.+))?/i;
  1768. var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g;
  1769. var whiteSpace = /^\s*|\s*$/g;
  1770. var Collection;
  1771. var Selector = global$10.extend({
  1772. init: function (selector) {
  1773. var match = this.match;
  1774. function compileNameFilter(name) {
  1775. if (name) {
  1776. name = name.toLowerCase();
  1777. return function (item) {
  1778. return name === '*' || item.type === name;
  1779. };
  1780. }
  1781. }
  1782. function compileIdFilter(id) {
  1783. if (id) {
  1784. return function (item) {
  1785. return item._name === id;
  1786. };
  1787. }
  1788. }
  1789. function compileClassesFilter(classes) {
  1790. if (classes) {
  1791. classes = classes.split('.');
  1792. return function (item) {
  1793. var i = classes.length;
  1794. while (i--) {
  1795. if (!item.classes.contains(classes[i])) {
  1796. return false;
  1797. }
  1798. }
  1799. return true;
  1800. };
  1801. }
  1802. }
  1803. function compileAttrFilter(name, cmp, check) {
  1804. if (name) {
  1805. return function (item) {
  1806. var value = item[name] ? item[name]() : '';
  1807. return !cmp ? !!check : cmp === '=' ? value === check : cmp === '*=' ? value.indexOf(check) >= 0 : cmp === '~=' ? (' ' + value + ' ').indexOf(' ' + check + ' ') >= 0 : cmp === '!=' ? value !== check : cmp === '^=' ? value.indexOf(check) === 0 : cmp === '$=' ? value.substr(value.length - check.length) === check : false;
  1808. };
  1809. }
  1810. }
  1811. function compilePsuedoFilter(name) {
  1812. var notSelectors;
  1813. if (name) {
  1814. name = /(?:not\((.+)\))|(.+)/i.exec(name);
  1815. if (!name[1]) {
  1816. name = name[2];
  1817. return function (item, index, length) {
  1818. return name === 'first' ? index === 0 : name === 'last' ? index === length - 1 : name === 'even' ? index % 2 === 0 : name === 'odd' ? index % 2 === 1 : item[name] ? item[name]() : false;
  1819. };
  1820. }
  1821. notSelectors = parseChunks(name[1], []);
  1822. return function (item) {
  1823. return !match(item, notSelectors);
  1824. };
  1825. }
  1826. }
  1827. function compile(selector, filters, direct) {
  1828. var parts;
  1829. function add(filter) {
  1830. if (filter) {
  1831. filters.push(filter);
  1832. }
  1833. }
  1834. parts = expression.exec(selector.replace(whiteSpace, ''));
  1835. add(compileNameFilter(parts[1]));
  1836. add(compileIdFilter(parts[2]));
  1837. add(compileClassesFilter(parts[3]));
  1838. add(compileAttrFilter(parts[4], parts[5], parts[6]));
  1839. add(compilePsuedoFilter(parts[7]));
  1840. filters.pseudo = !!parts[7];
  1841. filters.direct = direct;
  1842. return filters;
  1843. }
  1844. function parseChunks(selector, selectors) {
  1845. var parts = [];
  1846. var extra, matches, i;
  1847. do {
  1848. chunker.exec('');
  1849. matches = chunker.exec(selector);
  1850. if (matches) {
  1851. selector = matches[3];
  1852. parts.push(matches[1]);
  1853. if (matches[2]) {
  1854. extra = matches[3];
  1855. break;
  1856. }
  1857. }
  1858. } while (matches);
  1859. if (extra) {
  1860. parseChunks(extra, selectors);
  1861. }
  1862. selector = [];
  1863. for (i = 0; i < parts.length; i++) {
  1864. if (parts[i] !== '>') {
  1865. selector.push(compile(parts[i], [], parts[i - 1] === '>'));
  1866. }
  1867. }
  1868. selectors.push(selector);
  1869. return selectors;
  1870. }
  1871. this._selectors = parseChunks(selector, []);
  1872. },
  1873. match: function (control, selectors) {
  1874. var i, l, si, sl, selector, fi, fl, filters, index, length, siblings, count, item;
  1875. selectors = selectors || this._selectors;
  1876. for (i = 0, l = selectors.length; i < l; i++) {
  1877. selector = selectors[i];
  1878. sl = selector.length;
  1879. item = control;
  1880. count = 0;
  1881. for (si = sl - 1; si >= 0; si--) {
  1882. filters = selector[si];
  1883. while (item) {
  1884. if (filters.pseudo) {
  1885. siblings = item.parent().items();
  1886. index = length = siblings.length;
  1887. while (index--) {
  1888. if (siblings[index] === item) {
  1889. break;
  1890. }
  1891. }
  1892. }
  1893. for (fi = 0, fl = filters.length; fi < fl; fi++) {
  1894. if (!filters[fi](item, index, length)) {
  1895. fi = fl + 1;
  1896. break;
  1897. }
  1898. }
  1899. if (fi === fl) {
  1900. count++;
  1901. break;
  1902. } else {
  1903. if (si === sl - 1) {
  1904. break;
  1905. }
  1906. }
  1907. item = item.parent();
  1908. }
  1909. }
  1910. if (count === sl) {
  1911. return true;
  1912. }
  1913. }
  1914. return false;
  1915. },
  1916. find: function (container) {
  1917. var matches = [], i, l;
  1918. var selectors = this._selectors;
  1919. function collect(items, selector, index) {
  1920. var i, l, fi, fl, item;
  1921. var filters = selector[index];
  1922. for (i = 0, l = items.length; i < l; i++) {
  1923. item = items[i];
  1924. for (fi = 0, fl = filters.length; fi < fl; fi++) {
  1925. if (!filters[fi](item, i, l)) {
  1926. fi = fl + 1;
  1927. break;
  1928. }
  1929. }
  1930. if (fi === fl) {
  1931. if (index === selector.length - 1) {
  1932. matches.push(item);
  1933. } else {
  1934. if (item.items) {
  1935. collect(item.items(), selector, index + 1);
  1936. }
  1937. }
  1938. } else if (filters.direct) {
  1939. return;
  1940. }
  1941. if (item.items) {
  1942. collect(item.items(), selector, index);
  1943. }
  1944. }
  1945. }
  1946. if (container.items) {
  1947. for (i = 0, l = selectors.length; i < l; i++) {
  1948. collect(container.items(), selectors[i], 0);
  1949. }
  1950. if (l > 1) {
  1951. matches = unique(matches);
  1952. }
  1953. }
  1954. if (!Collection) {
  1955. Collection = Selector.Collection;
  1956. }
  1957. return new Collection(matches);
  1958. }
  1959. });
  1960. var Collection$1;
  1961. var proto;
  1962. var push$1 = Array.prototype.push;
  1963. var slice$1 = Array.prototype.slice;
  1964. proto = {
  1965. length: 0,
  1966. init: function (items) {
  1967. if (items) {
  1968. this.add(items);
  1969. }
  1970. },
  1971. add: function (items) {
  1972. var self = this;
  1973. if (!global$2.isArray(items)) {
  1974. if (items instanceof Collection$1) {
  1975. self.add(items.toArray());
  1976. } else {
  1977. push$1.call(self, items);
  1978. }
  1979. } else {
  1980. push$1.apply(self, items);
  1981. }
  1982. return self;
  1983. },
  1984. set: function (items) {
  1985. var self = this;
  1986. var len = self.length;
  1987. var i;
  1988. self.length = 0;
  1989. self.add(items);
  1990. for (i = self.length; i < len; i++) {
  1991. delete self[i];
  1992. }
  1993. return self;
  1994. },
  1995. filter: function (selector) {
  1996. var self = this;
  1997. var i, l;
  1998. var matches = [];
  1999. var item, match;
  2000. if (typeof selector === 'string') {
  2001. selector = new Selector(selector);
  2002. match = function (item) {
  2003. return selector.match(item);
  2004. };
  2005. } else {
  2006. match = selector;
  2007. }
  2008. for (i = 0, l = self.length; i < l; i++) {
  2009. item = self[i];
  2010. if (match(item)) {
  2011. matches.push(item);
  2012. }
  2013. }
  2014. return new Collection$1(matches);
  2015. },
  2016. slice: function () {
  2017. return new Collection$1(slice$1.apply(this, arguments));
  2018. },
  2019. eq: function (index) {
  2020. return index === -1 ? this.slice(index) : this.slice(index, +index + 1);
  2021. },
  2022. each: function (callback) {
  2023. global$2.each(this, callback);
  2024. return this;
  2025. },
  2026. toArray: function () {
  2027. return global$2.toArray(this);
  2028. },
  2029. indexOf: function (ctrl) {
  2030. var self = this;
  2031. var i = self.length;
  2032. while (i--) {
  2033. if (self[i] === ctrl) {
  2034. break;
  2035. }
  2036. }
  2037. return i;
  2038. },
  2039. reverse: function () {
  2040. return new Collection$1(global$2.toArray(this).reverse());
  2041. },
  2042. hasClass: function (cls) {
  2043. return this[0] ? this[0].classes.contains(cls) : false;
  2044. },
  2045. prop: function (name, value) {
  2046. var self = this;
  2047. var item;
  2048. if (value !== undefined) {
  2049. self.each(function (item) {
  2050. if (item[name]) {
  2051. item[name](value);
  2052. }
  2053. });
  2054. return self;
  2055. }
  2056. item = self[0];
  2057. if (item && item[name]) {
  2058. return item[name]();
  2059. }
  2060. },
  2061. exec: function (name) {
  2062. var self = this, args = global$2.toArray(arguments).slice(1);
  2063. self.each(function (item) {
  2064. if (item[name]) {
  2065. item[name].apply(item, args);
  2066. }
  2067. });
  2068. return self;
  2069. },
  2070. remove: function () {
  2071. var i = this.length;
  2072. while (i--) {
  2073. this[i].remove();
  2074. }
  2075. return this;
  2076. },
  2077. addClass: function (cls) {
  2078. return this.each(function (item) {
  2079. item.classes.add(cls);
  2080. });
  2081. },
  2082. removeClass: function (cls) {
  2083. return this.each(function (item) {
  2084. item.classes.remove(cls);
  2085. });
  2086. }
  2087. };
  2088. global$2.each('fire on off show hide append prepend before after reflow'.split(' '), function (name) {
  2089. proto[name] = function () {
  2090. var args = global$2.toArray(arguments);
  2091. this.each(function (ctrl) {
  2092. if (name in ctrl) {
  2093. ctrl[name].apply(ctrl, args);
  2094. }
  2095. });
  2096. return this;
  2097. };
  2098. });
  2099. global$2.each('text name disabled active selected checked visible parent value data'.split(' '), function (name) {
  2100. proto[name] = function (value) {
  2101. return this.prop(name, value);
  2102. };
  2103. });
  2104. Collection$1 = global$10.extend(proto);
  2105. Selector.Collection = Collection$1;
  2106. var Collection$2 = Collection$1;
  2107. var Binding = function (settings) {
  2108. this.create = settings.create;
  2109. };
  2110. Binding.create = function (model, name) {
  2111. return new Binding({
  2112. create: function (otherModel, otherName) {
  2113. var bindings;
  2114. var fromSelfToOther = function (e) {
  2115. otherModel.set(otherName, e.value);
  2116. };
  2117. var fromOtherToSelf = function (e) {
  2118. model.set(name, e.value);
  2119. };
  2120. otherModel.on('change:' + otherName, fromOtherToSelf);
  2121. model.on('change:' + name, fromSelfToOther);
  2122. bindings = otherModel._bindings;
  2123. if (!bindings) {
  2124. bindings = otherModel._bindings = [];
  2125. otherModel.on('destroy', function () {
  2126. var i = bindings.length;
  2127. while (i--) {
  2128. bindings[i]();
  2129. }
  2130. });
  2131. }
  2132. bindings.push(function () {
  2133. model.off('change:' + name, fromSelfToOther);
  2134. });
  2135. return model.get(name);
  2136. }
  2137. });
  2138. };
  2139. var global$12 = tinymce.util.Tools.resolve('tinymce.util.Observable');
  2140. function isNode(node) {
  2141. return node.nodeType > 0;
  2142. }
  2143. function isEqual(a, b) {
  2144. var k, checked;
  2145. if (a === b) {
  2146. return true;
  2147. }
  2148. if (a === null || b === null) {
  2149. return a === b;
  2150. }
  2151. if (typeof a !== 'object' || typeof b !== 'object') {
  2152. return a === b;
  2153. }
  2154. if (global$2.isArray(b)) {
  2155. if (a.length !== b.length) {
  2156. return false;
  2157. }
  2158. k = a.length;
  2159. while (k--) {
  2160. if (!isEqual(a[k], b[k])) {
  2161. return false;
  2162. }
  2163. }
  2164. }
  2165. if (isNode(a) || isNode(b)) {
  2166. return a === b;
  2167. }
  2168. checked = {};
  2169. for (k in b) {
  2170. if (!isEqual(a[k], b[k])) {
  2171. return false;
  2172. }
  2173. checked[k] = true;
  2174. }
  2175. for (k in a) {
  2176. if (!checked[k] && !isEqual(a[k], b[k])) {
  2177. return false;
  2178. }
  2179. }
  2180. return true;
  2181. }
  2182. var ObservableObject = global$10.extend({
  2183. Mixins: [global$12],
  2184. init: function (data) {
  2185. var name, value;
  2186. data = data || {};
  2187. for (name in data) {
  2188. value = data[name];
  2189. if (value instanceof Binding) {
  2190. data[name] = value.create(this, name);
  2191. }
  2192. }
  2193. this.data = data;
  2194. },
  2195. set: function (name, value) {
  2196. var key, args;
  2197. var oldValue = this.data[name];
  2198. if (value instanceof Binding) {
  2199. value = value.create(this, name);
  2200. }
  2201. if (typeof name === 'object') {
  2202. for (key in name) {
  2203. this.set(key, name[key]);
  2204. }
  2205. return this;
  2206. }
  2207. if (!isEqual(oldValue, value)) {
  2208. this.data[name] = value;
  2209. args = {
  2210. target: this,
  2211. name: name,
  2212. value: value,
  2213. oldValue: oldValue
  2214. };
  2215. this.fire('change:' + name, args);
  2216. this.fire('change', args);
  2217. }
  2218. return this;
  2219. },
  2220. get: function (name) {
  2221. return this.data[name];
  2222. },
  2223. has: function (name) {
  2224. return name in this.data;
  2225. },
  2226. bind: function (name) {
  2227. return Binding.create(this, name);
  2228. },
  2229. destroy: function () {
  2230. this.fire('destroy');
  2231. }
  2232. });
  2233. var dirtyCtrls = {};
  2234. var animationFrameRequested;
  2235. var $_ef12j5u4jh8lz3nl = {
  2236. add: function (ctrl) {
  2237. var parent = ctrl.parent();
  2238. if (parent) {
  2239. if (!parent._layout || parent._layout.isNative()) {
  2240. return;
  2241. }
  2242. if (!dirtyCtrls[parent._id]) {
  2243. dirtyCtrls[parent._id] = parent;
  2244. }
  2245. if (!animationFrameRequested) {
  2246. animationFrameRequested = true;
  2247. global$7.requestAnimationFrame(function () {
  2248. var id, ctrl;
  2249. animationFrameRequested = false;
  2250. for (id in dirtyCtrls) {
  2251. ctrl = dirtyCtrls[id];
  2252. if (ctrl.state.get('rendered')) {
  2253. ctrl.reflow();
  2254. }
  2255. }
  2256. dirtyCtrls = {};
  2257. }, document.body);
  2258. }
  2259. }
  2260. },
  2261. remove: function (ctrl) {
  2262. if (dirtyCtrls[ctrl._id]) {
  2263. delete dirtyCtrls[ctrl._id];
  2264. }
  2265. }
  2266. };
  2267. var hasMouseWheelEventSupport = 'onmousewheel' in document;
  2268. var hasWheelEventSupport = false;
  2269. var classPrefix = 'mce-';
  2270. var Control;
  2271. var idCounter = 0;
  2272. var proto$1 = {
  2273. Statics: { classPrefix: classPrefix },
  2274. isRtl: function () {
  2275. return Control.rtl;
  2276. },
  2277. classPrefix: classPrefix,
  2278. init: function (settings) {
  2279. var self = this;
  2280. var classes, defaultClasses;
  2281. function applyClasses(classes) {
  2282. var i;
  2283. classes = classes.split(' ');
  2284. for (i = 0; i < classes.length; i++) {
  2285. self.classes.add(classes[i]);
  2286. }
  2287. }
  2288. self.settings = settings = global$2.extend({}, self.Defaults, settings);
  2289. self._id = settings.id || 'mceu_' + idCounter++;
  2290. self._aria = { role: settings.role };
  2291. self._elmCache = {};
  2292. self.$ = global$9;
  2293. self.state = new ObservableObject({
  2294. visible: true,
  2295. active: false,
  2296. disabled: false,
  2297. value: ''
  2298. });
  2299. self.data = new ObservableObject(settings.data);
  2300. self.classes = new ClassList(function () {
  2301. if (self.state.get('rendered')) {
  2302. self.getEl().className = this.toString();
  2303. }
  2304. });
  2305. self.classes.prefix = self.classPrefix;
  2306. classes = settings.classes;
  2307. if (classes) {
  2308. if (self.Defaults) {
  2309. defaultClasses = self.Defaults.classes;
  2310. if (defaultClasses && classes !== defaultClasses) {
  2311. applyClasses(defaultClasses);
  2312. }
  2313. }
  2314. applyClasses(classes);
  2315. }
  2316. global$2.each('title text name visible disabled active value'.split(' '), function (name) {
  2317. if (name in settings) {
  2318. self[name](settings[name]);
  2319. }
  2320. });
  2321. self.on('click', function () {
  2322. if (self.disabled()) {
  2323. return false;
  2324. }
  2325. });
  2326. self.settings = settings;
  2327. self.borderBox = $_focdcktxjh8lz3mn.parseBox(settings.border);
  2328. self.paddingBox = $_focdcktxjh8lz3mn.parseBox(settings.padding);
  2329. self.marginBox = $_focdcktxjh8lz3mn.parseBox(settings.margin);
  2330. if (settings.hidden) {
  2331. self.hide();
  2332. }
  2333. },
  2334. Properties: 'parent,name',
  2335. getContainerElm: function () {
  2336. var uiContainer = $_1jk3jvtcjh8lz3jy.getUiContainer(this);
  2337. return uiContainer ? uiContainer : funcs.getContainer();
  2338. },
  2339. getParentCtrl: function (elm) {
  2340. var ctrl;
  2341. var lookup = this.getRoot().controlIdLookup;
  2342. while (elm && lookup) {
  2343. ctrl = lookup[elm.id];
  2344. if (ctrl) {
  2345. break;
  2346. }
  2347. elm = elm.parentNode;
  2348. }
  2349. return ctrl;
  2350. },
  2351. initLayoutRect: function () {
  2352. var self = this;
  2353. var settings = self.settings;
  2354. var borderBox, layoutRect;
  2355. var elm = self.getEl();
  2356. var width, height, minWidth, minHeight, autoResize;
  2357. var startMinWidth, startMinHeight, initialSize;
  2358. borderBox = self.borderBox = self.borderBox || $_focdcktxjh8lz3mn.measureBox(elm, 'border');
  2359. self.paddingBox = self.paddingBox || $_focdcktxjh8lz3mn.measureBox(elm, 'padding');
  2360. self.marginBox = self.marginBox || $_focdcktxjh8lz3mn.measureBox(elm, 'margin');
  2361. initialSize = funcs.getSize(elm);
  2362. startMinWidth = settings.minWidth;
  2363. startMinHeight = settings.minHeight;
  2364. minWidth = startMinWidth || initialSize.width;
  2365. minHeight = startMinHeight || initialSize.height;
  2366. width = settings.width;
  2367. height = settings.height;
  2368. autoResize = settings.autoResize;
  2369. autoResize = typeof autoResize !== 'undefined' ? autoResize : !width && !height;
  2370. width = width || minWidth;
  2371. height = height || minHeight;
  2372. var deltaW = borderBox.left + borderBox.right;
  2373. var deltaH = borderBox.top + borderBox.bottom;
  2374. var maxW = settings.maxWidth || 65535;
  2375. var maxH = settings.maxHeight || 65535;
  2376. self._layoutRect = layoutRect = {
  2377. x: settings.x || 0,
  2378. y: settings.y || 0,
  2379. w: width,
  2380. h: height,
  2381. deltaW: deltaW,
  2382. deltaH: deltaH,
  2383. contentW: width - deltaW,
  2384. contentH: height - deltaH,
  2385. innerW: width - deltaW,
  2386. innerH: height - deltaH,
  2387. startMinWidth: startMinWidth || 0,
  2388. startMinHeight: startMinHeight || 0,
  2389. minW: Math.min(minWidth, maxW),
  2390. minH: Math.min(minHeight, maxH),
  2391. maxW: maxW,
  2392. maxH: maxH,
  2393. autoResize: autoResize,
  2394. scrollW: 0
  2395. };
  2396. self._lastLayoutRect = {};
  2397. return layoutRect;
  2398. },
  2399. layoutRect: function (newRect) {
  2400. var self = this;
  2401. var curRect = self._layoutRect, lastLayoutRect, size, deltaWidth, deltaHeight, repaintControls;
  2402. if (!curRect) {
  2403. curRect = self.initLayoutRect();
  2404. }
  2405. if (newRect) {
  2406. deltaWidth = curRect.deltaW;
  2407. deltaHeight = curRect.deltaH;
  2408. if (newRect.x !== undefined) {
  2409. curRect.x = newRect.x;
  2410. }
  2411. if (newRect.y !== undefined) {
  2412. curRect.y = newRect.y;
  2413. }
  2414. if (newRect.minW !== undefined) {
  2415. curRect.minW = newRect.minW;
  2416. }
  2417. if (newRect.minH !== undefined) {
  2418. curRect.minH = newRect.minH;
  2419. }
  2420. size = newRect.w;
  2421. if (size !== undefined) {
  2422. size = size < curRect.minW ? curRect.minW : size;
  2423. size = size > curRect.maxW ? curRect.maxW : size;
  2424. curRect.w = size;
  2425. curRect.innerW = size - deltaWidth;
  2426. }
  2427. size = newRect.h;
  2428. if (size !== undefined) {
  2429. size = size < curRect.minH ? curRect.minH : size;
  2430. size = size > curRect.maxH ? curRect.maxH : size;
  2431. curRect.h = size;
  2432. curRect.innerH = size - deltaHeight;
  2433. }
  2434. size = newRect.innerW;
  2435. if (size !== undefined) {
  2436. size = size < curRect.minW - deltaWidth ? curRect.minW - deltaWidth : size;
  2437. size = size > curRect.maxW - deltaWidth ? curRect.maxW - deltaWidth : size;
  2438. curRect.innerW = size;
  2439. curRect.w = size + deltaWidth;
  2440. }
  2441. size = newRect.innerH;
  2442. if (size !== undefined) {
  2443. size = size < curRect.minH - deltaHeight ? curRect.minH - deltaHeight : size;
  2444. size = size > curRect.maxH - deltaHeight ? curRect.maxH - deltaHeight : size;
  2445. curRect.innerH = size;
  2446. curRect.h = size + deltaHeight;
  2447. }
  2448. if (newRect.contentW !== undefined) {
  2449. curRect.contentW = newRect.contentW;
  2450. }
  2451. if (newRect.contentH !== undefined) {
  2452. curRect.contentH = newRect.contentH;
  2453. }
  2454. lastLayoutRect = self._lastLayoutRect;
  2455. if (lastLayoutRect.x !== curRect.x || lastLayoutRect.y !== curRect.y || lastLayoutRect.w !== curRect.w || lastLayoutRect.h !== curRect.h) {
  2456. repaintControls = Control.repaintControls;
  2457. if (repaintControls) {
  2458. if (repaintControls.map && !repaintControls.map[self._id]) {
  2459. repaintControls.push(self);
  2460. repaintControls.map[self._id] = true;
  2461. }
  2462. }
  2463. lastLayoutRect.x = curRect.x;
  2464. lastLayoutRect.y = curRect.y;
  2465. lastLayoutRect.w = curRect.w;
  2466. lastLayoutRect.h = curRect.h;
  2467. }
  2468. return self;
  2469. }
  2470. return curRect;
  2471. },
  2472. repaint: function () {
  2473. var self = this;
  2474. var style, bodyStyle, bodyElm, rect, borderBox;
  2475. var borderW, borderH, lastRepaintRect, round, value;
  2476. round = !document.createRange ? Math.round : function (value) {
  2477. return value;
  2478. };
  2479. style = self.getEl().style;
  2480. rect = self._layoutRect;
  2481. lastRepaintRect = self._lastRepaintRect || {};
  2482. borderBox = self.borderBox;
  2483. borderW = borderBox.left + borderBox.right;
  2484. borderH = borderBox.top + borderBox.bottom;
  2485. if (rect.x !== lastRepaintRect.x) {
  2486. style.left = round(rect.x) + 'px';
  2487. lastRepaintRect.x = rect.x;
  2488. }
  2489. if (rect.y !== lastRepaintRect.y) {
  2490. style.top = round(rect.y) + 'px';
  2491. lastRepaintRect.y = rect.y;
  2492. }
  2493. if (rect.w !== lastRepaintRect.w) {
  2494. value = round(rect.w - borderW);
  2495. style.width = (value >= 0 ? value : 0) + 'px';
  2496. lastRepaintRect.w = rect.w;
  2497. }
  2498. if (rect.h !== lastRepaintRect.h) {
  2499. value = round(rect.h - borderH);
  2500. style.height = (value >= 0 ? value : 0) + 'px';
  2501. lastRepaintRect.h = rect.h;
  2502. }
  2503. if (self._hasBody && rect.innerW !== lastRepaintRect.innerW) {
  2504. value = round(rect.innerW);
  2505. bodyElm = self.getEl('body');
  2506. if (bodyElm) {
  2507. bodyStyle = bodyElm.style;
  2508. bodyStyle.width = (value >= 0 ? value : 0) + 'px';
  2509. }
  2510. lastRepaintRect.innerW = rect.innerW;
  2511. }
  2512. if (self._hasBody && rect.innerH !== lastRepaintRect.innerH) {
  2513. value = round(rect.innerH);
  2514. bodyElm = bodyElm || self.getEl('body');
  2515. if (bodyElm) {
  2516. bodyStyle = bodyStyle || bodyElm.style;
  2517. bodyStyle.height = (value >= 0 ? value : 0) + 'px';
  2518. }
  2519. lastRepaintRect.innerH = rect.innerH;
  2520. }
  2521. self._lastRepaintRect = lastRepaintRect;
  2522. self.fire('repaint', {}, false);
  2523. },
  2524. updateLayoutRect: function () {
  2525. var self = this;
  2526. self.parent()._lastRect = null;
  2527. funcs.css(self.getEl(), {
  2528. width: '',
  2529. height: ''
  2530. });
  2531. self._layoutRect = self._lastRepaintRect = self._lastLayoutRect = null;
  2532. self.initLayoutRect();
  2533. },
  2534. on: function (name, callback) {
  2535. var self = this;
  2536. function resolveCallbackName(name) {
  2537. var callback, scope;
  2538. if (typeof name !== 'string') {
  2539. return name;
  2540. }
  2541. return function (e) {
  2542. if (!callback) {
  2543. self.parentsAndSelf().each(function (ctrl) {
  2544. var callbacks = ctrl.settings.callbacks;
  2545. if (callbacks && (callback = callbacks[name])) {
  2546. scope = ctrl;
  2547. return false;
  2548. }
  2549. });
  2550. }
  2551. if (!callback) {
  2552. e.action = name;
  2553. this.fire('execute', e);
  2554. return;
  2555. }
  2556. return callback.call(scope, e);
  2557. };
  2558. }
  2559. getEventDispatcher(self).on(name, resolveCallbackName(callback));
  2560. return self;
  2561. },
  2562. off: function (name, callback) {
  2563. getEventDispatcher(this).off(name, callback);
  2564. return this;
  2565. },
  2566. fire: function (name, args, bubble) {
  2567. var self = this;
  2568. args = args || {};
  2569. if (!args.control) {
  2570. args.control = self;
  2571. }
  2572. args = getEventDispatcher(self).fire(name, args);
  2573. if (bubble !== false && self.parent) {
  2574. var parent_1 = self.parent();
  2575. while (parent_1 && !args.isPropagationStopped()) {
  2576. parent_1.fire(name, args, false);
  2577. parent_1 = parent_1.parent();
  2578. }
  2579. }
  2580. return args;
  2581. },
  2582. hasEventListeners: function (name) {
  2583. return getEventDispatcher(this).has(name);
  2584. },
  2585. parents: function (selector) {
  2586. var self = this;
  2587. var ctrl, parents = new Collection$2();
  2588. for (ctrl = self.parent(); ctrl; ctrl = ctrl.parent()) {
  2589. parents.add(ctrl);
  2590. }
  2591. if (selector) {
  2592. parents = parents.filter(selector);
  2593. }
  2594. return parents;
  2595. },
  2596. parentsAndSelf: function (selector) {
  2597. return new Collection$2(this).add(this.parents(selector));
  2598. },
  2599. next: function () {
  2600. var parentControls = this.parent().items();
  2601. return parentControls[parentControls.indexOf(this) + 1];
  2602. },
  2603. prev: function () {
  2604. var parentControls = this.parent().items();
  2605. return parentControls[parentControls.indexOf(this) - 1];
  2606. },
  2607. innerHtml: function (html) {
  2608. this.$el.html(html);
  2609. return this;
  2610. },
  2611. getEl: function (suffix) {
  2612. var id = suffix ? this._id + '-' + suffix : this._id;
  2613. if (!this._elmCache[id]) {
  2614. this._elmCache[id] = global$9('#' + id)[0];
  2615. }
  2616. return this._elmCache[id];
  2617. },
  2618. show: function () {
  2619. return this.visible(true);
  2620. },
  2621. hide: function () {
  2622. return this.visible(false);
  2623. },
  2624. focus: function () {
  2625. try {
  2626. this.getEl().focus();
  2627. } catch (ex) {
  2628. }
  2629. return this;
  2630. },
  2631. blur: function () {
  2632. this.getEl().blur();
  2633. return this;
  2634. },
  2635. aria: function (name, value) {
  2636. var self = this, elm = self.getEl(self.ariaTarget);
  2637. if (typeof value === 'undefined') {
  2638. return self._aria[name];
  2639. }
  2640. self._aria[name] = value;
  2641. if (self.state.get('rendered')) {
  2642. elm.setAttribute(name === 'role' ? name : 'aria-' + name, value);
  2643. }
  2644. return self;
  2645. },
  2646. encode: function (text, translate) {
  2647. if (translate !== false) {
  2648. text = this.translate(text);
  2649. }
  2650. return (text || '').replace(/[&<>"]/g, function (match) {
  2651. return '&#' + match.charCodeAt(0) + ';';
  2652. });
  2653. },
  2654. translate: function (text) {
  2655. return Control.translate ? Control.translate(text) : text;
  2656. },
  2657. before: function (items) {
  2658. var self = this, parent = self.parent();
  2659. if (parent) {
  2660. parent.insert(items, parent.items().indexOf(self), true);
  2661. }
  2662. return self;
  2663. },
  2664. after: function (items) {
  2665. var self = this, parent = self.parent();
  2666. if (parent) {
  2667. parent.insert(items, parent.items().indexOf(self));
  2668. }
  2669. return self;
  2670. },
  2671. remove: function () {
  2672. var self = this;
  2673. var elm = self.getEl();
  2674. var parent = self.parent();
  2675. var newItems, i;
  2676. if (self.items) {
  2677. var controls = self.items().toArray();
  2678. i = controls.length;
  2679. while (i--) {
  2680. controls[i].remove();
  2681. }
  2682. }
  2683. if (parent && parent.items) {
  2684. newItems = [];
  2685. parent.items().each(function (item) {
  2686. if (item !== self) {
  2687. newItems.push(item);
  2688. }
  2689. });
  2690. parent.items().set(newItems);
  2691. parent._lastRect = null;
  2692. }
  2693. if (self._eventsRoot && self._eventsRoot === self) {
  2694. global$9(elm).off();
  2695. }
  2696. var lookup = self.getRoot().controlIdLookup;
  2697. if (lookup) {
  2698. delete lookup[self._id];
  2699. }
  2700. if (elm && elm.parentNode) {
  2701. elm.parentNode.removeChild(elm);
  2702. }
  2703. self.state.set('rendered', false);
  2704. self.state.destroy();
  2705. self.fire('remove');
  2706. return self;
  2707. },
  2708. renderBefore: function (elm) {
  2709. global$9(elm).before(this.renderHtml());
  2710. this.postRender();
  2711. return this;
  2712. },
  2713. renderTo: function (elm) {
  2714. global$9(elm || this.getContainerElm()).append(this.renderHtml());
  2715. this.postRender();
  2716. return this;
  2717. },
  2718. preRender: function () {
  2719. },
  2720. render: function () {
  2721. },
  2722. renderHtml: function () {
  2723. return '<div id="' + this._id + '" class="' + this.classes + '"></div>';
  2724. },
  2725. postRender: function () {
  2726. var self = this;
  2727. var settings = self.settings;
  2728. var elm, box, parent, name, parentEventsRoot;
  2729. self.$el = global$9(self.getEl());
  2730. self.state.set('rendered', true);
  2731. for (name in settings) {
  2732. if (name.indexOf('on') === 0) {
  2733. self.on(name.substr(2), settings[name]);
  2734. }
  2735. }
  2736. if (self._eventsRoot) {
  2737. for (parent = self.parent(); !parentEventsRoot && parent; parent = parent.parent()) {
  2738. parentEventsRoot = parent._eventsRoot;
  2739. }
  2740. if (parentEventsRoot) {
  2741. for (name in parentEventsRoot._nativeEvents) {
  2742. self._nativeEvents[name] = true;
  2743. }
  2744. }
  2745. }
  2746. bindPendingEvents(self);
  2747. if (settings.style) {
  2748. elm = self.getEl();
  2749. if (elm) {
  2750. elm.setAttribute('style', settings.style);
  2751. elm.style.cssText = settings.style;
  2752. }
  2753. }
  2754. if (self.settings.border) {
  2755. box = self.borderBox;
  2756. self.$el.css({
  2757. 'border-top-width': box.top,
  2758. 'border-right-width': box.right,
  2759. 'border-bottom-width': box.bottom,
  2760. 'border-left-width': box.left
  2761. });
  2762. }
  2763. var root = self.getRoot();
  2764. if (!root.controlIdLookup) {
  2765. root.controlIdLookup = {};
  2766. }
  2767. root.controlIdLookup[self._id] = self;
  2768. for (var key in self._aria) {
  2769. self.aria(key, self._aria[key]);
  2770. }
  2771. if (self.state.get('visible') === false) {
  2772. self.getEl().style.display = 'none';
  2773. }
  2774. self.bindStates();
  2775. self.state.on('change:visible', function (e) {
  2776. var state = e.value;
  2777. var parentCtrl;
  2778. if (self.state.get('rendered')) {
  2779. self.getEl().style.display = state === false ? 'none' : '';
  2780. self.getEl().getBoundingClientRect();
  2781. }
  2782. parentCtrl = self.parent();
  2783. if (parentCtrl) {
  2784. parentCtrl._lastRect = null;
  2785. }
  2786. self.fire(state ? 'show' : 'hide');
  2787. $_ef12j5u4jh8lz3nl.add(self);
  2788. });
  2789. self.fire('postrender', {}, false);
  2790. },
  2791. bindStates: function () {
  2792. },
  2793. scrollIntoView: function (align) {
  2794. function getOffset(elm, rootElm) {
  2795. var x, y, parent = elm;
  2796. x = y = 0;
  2797. while (parent && parent !== rootElm && parent.nodeType) {
  2798. x += parent.offsetLeft || 0;
  2799. y += parent.offsetTop || 0;
  2800. parent = parent.offsetParent;
  2801. }
  2802. return {
  2803. x: x,
  2804. y: y
  2805. };
  2806. }
  2807. var elm = this.getEl(), parentElm = elm.parentNode;
  2808. var x, y, width, height, parentWidth, parentHeight;
  2809. var pos = getOffset(elm, parentElm);
  2810. x = pos.x;
  2811. y = pos.y;
  2812. width = elm.offsetWidth;
  2813. height = elm.offsetHeight;
  2814. parentWidth = parentElm.clientWidth;
  2815. parentHeight = parentElm.clientHeight;
  2816. if (align === 'end') {
  2817. x -= parentWidth - width;
  2818. y -= parentHeight - height;
  2819. } else if (align === 'center') {
  2820. x -= parentWidth / 2 - width / 2;
  2821. y -= parentHeight / 2 - height / 2;
  2822. }
  2823. parentElm.scrollLeft = x;
  2824. parentElm.scrollTop = y;
  2825. return this;
  2826. },
  2827. getRoot: function () {
  2828. var ctrl = this, rootControl;
  2829. var parents = [];
  2830. while (ctrl) {
  2831. if (ctrl.rootControl) {
  2832. rootControl = ctrl.rootControl;
  2833. break;
  2834. }
  2835. parents.push(ctrl);
  2836. rootControl = ctrl;
  2837. ctrl = ctrl.parent();
  2838. }
  2839. if (!rootControl) {
  2840. rootControl = this;
  2841. }
  2842. var i = parents.length;
  2843. while (i--) {
  2844. parents[i].rootControl = rootControl;
  2845. }
  2846. return rootControl;
  2847. },
  2848. reflow: function () {
  2849. $_ef12j5u4jh8lz3nl.remove(this);
  2850. var parent = this.parent();
  2851. if (parent && parent._layout && !parent._layout.isNative()) {
  2852. parent.reflow();
  2853. }
  2854. return this;
  2855. }
  2856. };
  2857. global$2.each('text title visible disabled active value'.split(' '), function (name) {
  2858. proto$1[name] = function (value) {
  2859. if (arguments.length === 0) {
  2860. return this.state.get(name);
  2861. }
  2862. if (typeof value !== 'undefined') {
  2863. this.state.set(name, value);
  2864. }
  2865. return this;
  2866. };
  2867. });
  2868. Control = global$10.extend(proto$1);
  2869. function getEventDispatcher(obj) {
  2870. if (!obj._eventDispatcher) {
  2871. obj._eventDispatcher = new global$11({
  2872. scope: obj,
  2873. toggleEvent: function (name, state) {
  2874. if (state && global$11.isNative(name)) {
  2875. if (!obj._nativeEvents) {
  2876. obj._nativeEvents = {};
  2877. }
  2878. obj._nativeEvents[name] = true;
  2879. if (obj.state.get('rendered')) {
  2880. bindPendingEvents(obj);
  2881. }
  2882. }
  2883. }
  2884. });
  2885. }
  2886. return obj._eventDispatcher;
  2887. }
  2888. function bindPendingEvents(eventCtrl) {
  2889. var i, l, parents, eventRootCtrl, nativeEvents, name;
  2890. function delegate(e) {
  2891. var control = eventCtrl.getParentCtrl(e.target);
  2892. if (control) {
  2893. control.fire(e.type, e);
  2894. }
  2895. }
  2896. function mouseLeaveHandler() {
  2897. var ctrl = eventRootCtrl._lastHoverCtrl;
  2898. if (ctrl) {
  2899. ctrl.fire('mouseleave', { target: ctrl.getEl() });
  2900. ctrl.parents().each(function (ctrl) {
  2901. ctrl.fire('mouseleave', { target: ctrl.getEl() });
  2902. });
  2903. eventRootCtrl._lastHoverCtrl = null;
  2904. }
  2905. }
  2906. function mouseEnterHandler(e) {
  2907. var ctrl = eventCtrl.getParentCtrl(e.target), lastCtrl = eventRootCtrl._lastHoverCtrl, idx = 0, i, parents, lastParents;
  2908. if (ctrl !== lastCtrl) {
  2909. eventRootCtrl._lastHoverCtrl = ctrl;
  2910. parents = ctrl.parents().toArray().reverse();
  2911. parents.push(ctrl);
  2912. if (lastCtrl) {
  2913. lastParents = lastCtrl.parents().toArray().reverse();
  2914. lastParents.push(lastCtrl);
  2915. for (idx = 0; idx < lastParents.length; idx++) {
  2916. if (parents[idx] !== lastParents[idx]) {
  2917. break;
  2918. }
  2919. }
  2920. for (i = lastParents.length - 1; i >= idx; i--) {
  2921. lastCtrl = lastParents[i];
  2922. lastCtrl.fire('mouseleave', { target: lastCtrl.getEl() });
  2923. }
  2924. }
  2925. for (i = idx; i < parents.length; i++) {
  2926. ctrl = parents[i];
  2927. ctrl.fire('mouseenter', { target: ctrl.getEl() });
  2928. }
  2929. }
  2930. }
  2931. function fixWheelEvent(e) {
  2932. e.preventDefault();
  2933. if (e.type === 'mousewheel') {
  2934. e.deltaY = -1 / 40 * e.wheelDelta;
  2935. if (e.wheelDeltaX) {
  2936. e.deltaX = -1 / 40 * e.wheelDeltaX;
  2937. }
  2938. } else {
  2939. e.deltaX = 0;
  2940. e.deltaY = e.detail;
  2941. }
  2942. e = eventCtrl.fire('wheel', e);
  2943. }
  2944. nativeEvents = eventCtrl._nativeEvents;
  2945. if (nativeEvents) {
  2946. parents = eventCtrl.parents().toArray();
  2947. parents.unshift(eventCtrl);
  2948. for (i = 0, l = parents.length; !eventRootCtrl && i < l; i++) {
  2949. eventRootCtrl = parents[i]._eventsRoot;
  2950. }
  2951. if (!eventRootCtrl) {
  2952. eventRootCtrl = parents[parents.length - 1] || eventCtrl;
  2953. }
  2954. eventCtrl._eventsRoot = eventRootCtrl;
  2955. for (l = i, i = 0; i < l; i++) {
  2956. parents[i]._eventsRoot = eventRootCtrl;
  2957. }
  2958. var eventRootDelegates = eventRootCtrl._delegates;
  2959. if (!eventRootDelegates) {
  2960. eventRootDelegates = eventRootCtrl._delegates = {};
  2961. }
  2962. for (name in nativeEvents) {
  2963. if (!nativeEvents) {
  2964. return false;
  2965. }
  2966. if (name === 'wheel' && !hasWheelEventSupport) {
  2967. if (hasMouseWheelEventSupport) {
  2968. global$9(eventCtrl.getEl()).on('mousewheel', fixWheelEvent);
  2969. } else {
  2970. global$9(eventCtrl.getEl()).on('DOMMouseScroll', fixWheelEvent);
  2971. }
  2972. continue;
  2973. }
  2974. if (name === 'mouseenter' || name === 'mouseleave') {
  2975. if (!eventRootCtrl._hasMouseEnter) {
  2976. global$9(eventRootCtrl.getEl()).on('mouseleave', mouseLeaveHandler).on('mouseover', mouseEnterHandler);
  2977. eventRootCtrl._hasMouseEnter = 1;
  2978. }
  2979. } else if (!eventRootDelegates[name]) {
  2980. global$9(eventRootCtrl.getEl()).on(name, delegate);
  2981. eventRootDelegates[name] = true;
  2982. }
  2983. nativeEvents[name] = false;
  2984. }
  2985. }
  2986. }
  2987. var Control$1 = Control;
  2988. var hasTabstopData = function (elm) {
  2989. return elm.getAttribute('data-mce-tabstop') ? true : false;
  2990. };
  2991. function KeyboardNavigation (settings) {
  2992. var root = settings.root;
  2993. var focusedElement, focusedControl;
  2994. function isElement(node) {
  2995. return node && node.nodeType === 1;
  2996. }
  2997. try {
  2998. focusedElement = document.activeElement;
  2999. } catch (ex) {
  3000. focusedElement = document.body;
  3001. }
  3002. focusedControl = root.getParentCtrl(focusedElement);
  3003. function getRole(elm) {
  3004. elm = elm || focusedElement;
  3005. if (isElement(elm)) {
  3006. return elm.getAttribute('role');
  3007. }
  3008. return null;
  3009. }
  3010. function getParentRole(elm) {
  3011. var role, parent = elm || focusedElement;
  3012. while (parent = parent.parentNode) {
  3013. if (role = getRole(parent)) {
  3014. return role;
  3015. }
  3016. }
  3017. }
  3018. function getAriaProp(name) {
  3019. var elm = focusedElement;
  3020. if (isElement(elm)) {
  3021. return elm.getAttribute('aria-' + name);
  3022. }
  3023. }
  3024. function isTextInputElement(elm) {
  3025. var tagName = elm.tagName.toUpperCase();
  3026. return tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT';
  3027. }
  3028. function canFocus(elm) {
  3029. if (isTextInputElement(elm) && !elm.hidden) {
  3030. return true;
  3031. }
  3032. if (hasTabstopData(elm)) {
  3033. return true;
  3034. }
  3035. if (/^(button|menuitem|checkbox|tab|menuitemcheckbox|option|gridcell|slider)$/.test(getRole(elm))) {
  3036. return true;
  3037. }
  3038. return false;
  3039. }
  3040. function getFocusElements(elm) {
  3041. var elements = [];
  3042. function collect(elm) {
  3043. if (elm.nodeType !== 1 || elm.style.display === 'none' || elm.disabled) {
  3044. return;
  3045. }
  3046. if (canFocus(elm)) {
  3047. elements.push(elm);
  3048. }
  3049. for (var i = 0; i < elm.childNodes.length; i++) {
  3050. collect(elm.childNodes[i]);
  3051. }
  3052. }
  3053. collect(elm || root.getEl());
  3054. return elements;
  3055. }
  3056. function getNavigationRoot(targetControl) {
  3057. var navigationRoot, controls;
  3058. targetControl = targetControl || focusedControl;
  3059. controls = targetControl.parents().toArray();
  3060. controls.unshift(targetControl);
  3061. for (var i = 0; i < controls.length; i++) {
  3062. navigationRoot = controls[i];
  3063. if (navigationRoot.settings.ariaRoot) {
  3064. break;
  3065. }
  3066. }
  3067. return navigationRoot;
  3068. }
  3069. function focusFirst(targetControl) {
  3070. var navigationRoot = getNavigationRoot(targetControl);
  3071. var focusElements = getFocusElements(navigationRoot.getEl());
  3072. if (navigationRoot.settings.ariaRemember && 'lastAriaIndex' in navigationRoot) {
  3073. moveFocusToIndex(navigationRoot.lastAriaIndex, focusElements);
  3074. } else {
  3075. moveFocusToIndex(0, focusElements);
  3076. }
  3077. }
  3078. function moveFocusToIndex(idx, elements) {
  3079. if (idx < 0) {
  3080. idx = elements.length - 1;
  3081. } else if (idx >= elements.length) {
  3082. idx = 0;
  3083. }
  3084. if (elements[idx]) {
  3085. elements[idx].focus();
  3086. }
  3087. return idx;
  3088. }
  3089. function moveFocus(dir, elements) {
  3090. var idx = -1;
  3091. var navigationRoot = getNavigationRoot();
  3092. elements = elements || getFocusElements(navigationRoot.getEl());
  3093. for (var i = 0; i < elements.length; i++) {
  3094. if (elements[i] === focusedElement) {
  3095. idx = i;
  3096. }
  3097. }
  3098. idx += dir;
  3099. navigationRoot.lastAriaIndex = moveFocusToIndex(idx, elements);
  3100. }
  3101. function left() {
  3102. var parentRole = getParentRole();
  3103. if (parentRole === 'tablist') {
  3104. moveFocus(-1, getFocusElements(focusedElement.parentNode));
  3105. } else if (focusedControl.parent().submenu) {
  3106. cancel();
  3107. } else {
  3108. moveFocus(-1);
  3109. }
  3110. }
  3111. function right() {
  3112. var role = getRole(), parentRole = getParentRole();
  3113. if (parentRole === 'tablist') {
  3114. moveFocus(1, getFocusElements(focusedElement.parentNode));
  3115. } else if (role === 'menuitem' && parentRole === 'menu' && getAriaProp('haspopup')) {
  3116. enter();
  3117. } else {
  3118. moveFocus(1);
  3119. }
  3120. }
  3121. function up() {
  3122. moveFocus(-1);
  3123. }
  3124. function down() {
  3125. var role = getRole(), parentRole = getParentRole();
  3126. if (role === 'menuitem' && parentRole === 'menubar') {
  3127. enter();
  3128. } else if (role === 'button' && getAriaProp('haspopup')) {
  3129. enter({ key: 'down' });
  3130. } else {
  3131. moveFocus(1);
  3132. }
  3133. }
  3134. function tab(e) {
  3135. var parentRole = getParentRole();
  3136. if (parentRole === 'tablist') {
  3137. var elm = getFocusElements(focusedControl.getEl('body'))[0];
  3138. if (elm) {
  3139. elm.focus();
  3140. }
  3141. } else {
  3142. moveFocus(e.shiftKey ? -1 : 1);
  3143. }
  3144. }
  3145. function cancel() {
  3146. focusedControl.fire('cancel');
  3147. }
  3148. function enter(aria) {
  3149. aria = aria || {};
  3150. focusedControl.fire('click', {
  3151. target: focusedElement,
  3152. aria: aria
  3153. });
  3154. }
  3155. root.on('keydown', function (e) {
  3156. function handleNonTabOrEscEvent(e, handler) {
  3157. if (isTextInputElement(focusedElement) || hasTabstopData(focusedElement)) {
  3158. return;
  3159. }
  3160. if (getRole(focusedElement) === 'slider') {
  3161. return;
  3162. }
  3163. if (handler(e) !== false) {
  3164. e.preventDefault();
  3165. }
  3166. }
  3167. if (e.isDefaultPrevented()) {
  3168. return;
  3169. }
  3170. switch (e.keyCode) {
  3171. case 37:
  3172. handleNonTabOrEscEvent(e, left);
  3173. break;
  3174. case 39:
  3175. handleNonTabOrEscEvent(e, right);
  3176. break;
  3177. case 38:
  3178. handleNonTabOrEscEvent(e, up);
  3179. break;
  3180. case 40:
  3181. handleNonTabOrEscEvent(e, down);
  3182. break;
  3183. case 27:
  3184. cancel();
  3185. break;
  3186. case 14:
  3187. case 13:
  3188. case 32:
  3189. handleNonTabOrEscEvent(e, enter);
  3190. break;
  3191. case 9:
  3192. tab(e);
  3193. e.preventDefault();
  3194. break;
  3195. }
  3196. });
  3197. root.on('focusin', function (e) {
  3198. focusedElement = e.target;
  3199. focusedControl = e.control;
  3200. });
  3201. return { focusFirst: focusFirst };
  3202. }
  3203. var selectorCache = {};
  3204. var Container = Control$1.extend({
  3205. init: function (settings) {
  3206. var self = this;
  3207. self._super(settings);
  3208. settings = self.settings;
  3209. if (settings.fixed) {
  3210. self.state.set('fixed', true);
  3211. }
  3212. self._items = new Collection$2();
  3213. if (self.isRtl()) {
  3214. self.classes.add('rtl');
  3215. }
  3216. self.bodyClasses = new ClassList(function () {
  3217. if (self.state.get('rendered')) {
  3218. self.getEl('body').className = this.toString();
  3219. }
  3220. });
  3221. self.bodyClasses.prefix = self.classPrefix;
  3222. self.classes.add('container');
  3223. self.bodyClasses.add('container-body');
  3224. if (settings.containerCls) {
  3225. self.classes.add(settings.containerCls);
  3226. }
  3227. self._layout = global$4.create((settings.layout || '') + 'layout');
  3228. if (self.settings.items) {
  3229. self.add(self.settings.items);
  3230. } else {
  3231. self.add(self.render());
  3232. }
  3233. self._hasBody = true;
  3234. },
  3235. items: function () {
  3236. return this._items;
  3237. },
  3238. find: function (selector) {
  3239. selector = selectorCache[selector] = selectorCache[selector] || new Selector(selector);
  3240. return selector.find(this);
  3241. },
  3242. add: function (items) {
  3243. var self = this;
  3244. self.items().add(self.create(items)).parent(self);
  3245. return self;
  3246. },
  3247. focus: function (keyboard) {
  3248. var self = this;
  3249. var focusCtrl, keyboardNav, items;
  3250. if (keyboard) {
  3251. keyboardNav = self.keyboardNav || self.parents().eq(-1)[0].keyboardNav;
  3252. if (keyboardNav) {
  3253. keyboardNav.focusFirst(self);
  3254. return;
  3255. }
  3256. }
  3257. items = self.find('*');
  3258. if (self.statusbar) {
  3259. items.add(self.statusbar.items());
  3260. }
  3261. items.each(function (ctrl) {
  3262. if (ctrl.settings.autofocus) {
  3263. focusCtrl = null;
  3264. return false;
  3265. }
  3266. if (ctrl.canFocus) {
  3267. focusCtrl = focusCtrl || ctrl;
  3268. }
  3269. });
  3270. if (focusCtrl) {
  3271. focusCtrl.focus();
  3272. }
  3273. return self;
  3274. },
  3275. replace: function (oldItem, newItem) {
  3276. var ctrlElm;
  3277. var items = this.items();
  3278. var i = items.length;
  3279. while (i--) {
  3280. if (items[i] === oldItem) {
  3281. items[i] = newItem;
  3282. break;
  3283. }
  3284. }
  3285. if (i >= 0) {
  3286. ctrlElm = newItem.getEl();
  3287. if (ctrlElm) {
  3288. ctrlElm.parentNode.removeChild(ctrlElm);
  3289. }
  3290. ctrlElm = oldItem.getEl();
  3291. if (ctrlElm) {
  3292. ctrlElm.parentNode.removeChild(ctrlElm);
  3293. }
  3294. }
  3295. newItem.parent(this);
  3296. },
  3297. create: function (items) {
  3298. var self = this;
  3299. var settings;
  3300. var ctrlItems = [];
  3301. if (!global$2.isArray(items)) {
  3302. items = [items];
  3303. }
  3304. global$2.each(items, function (item) {
  3305. if (item) {
  3306. if (!(item instanceof Control$1)) {
  3307. if (typeof item === 'string') {
  3308. item = { type: item };
  3309. }
  3310. settings = global$2.extend({}, self.settings.defaults, item);
  3311. item.type = settings.type = settings.type || item.type || self.settings.defaultType || (settings.defaults ? settings.defaults.type : null);
  3312. item = global$4.create(settings);
  3313. }
  3314. ctrlItems.push(item);
  3315. }
  3316. });
  3317. return ctrlItems;
  3318. },
  3319. renderNew: function () {
  3320. var self = this;
  3321. self.items().each(function (ctrl, index) {
  3322. var containerElm;
  3323. ctrl.parent(self);
  3324. if (!ctrl.state.get('rendered')) {
  3325. containerElm = self.getEl('body');
  3326. if (containerElm.hasChildNodes() && index <= containerElm.childNodes.length - 1) {
  3327. global$9(containerElm.childNodes[index]).before(ctrl.renderHtml());
  3328. } else {
  3329. global$9(containerElm).append(ctrl.renderHtml());
  3330. }
  3331. ctrl.postRender();
  3332. $_ef12j5u4jh8lz3nl.add(ctrl);
  3333. }
  3334. });
  3335. self._layout.applyClasses(self.items().filter(':visible'));
  3336. self._lastRect = null;
  3337. return self;
  3338. },
  3339. append: function (items) {
  3340. return this.add(items).renderNew();
  3341. },
  3342. prepend: function (items) {
  3343. var self = this;
  3344. self.items().set(self.create(items).concat(self.items().toArray()));
  3345. return self.renderNew();
  3346. },
  3347. insert: function (items, index, before) {
  3348. var self = this;
  3349. var curItems, beforeItems, afterItems;
  3350. items = self.create(items);
  3351. curItems = self.items();
  3352. if (!before && index < curItems.length - 1) {
  3353. index += 1;
  3354. }
  3355. if (index >= 0 && index < curItems.length) {
  3356. beforeItems = curItems.slice(0, index).toArray();
  3357. afterItems = curItems.slice(index).toArray();
  3358. curItems.set(beforeItems.concat(items, afterItems));
  3359. }
  3360. return self.renderNew();
  3361. },
  3362. fromJSON: function (data) {
  3363. var self = this;
  3364. for (var name_1 in data) {
  3365. self.find('#' + name_1).value(data[name_1]);
  3366. }
  3367. return self;
  3368. },
  3369. toJSON: function () {
  3370. var self = this, data = {};
  3371. self.find('*').each(function (ctrl) {
  3372. var name = ctrl.name(), value = ctrl.value();
  3373. if (name && typeof value !== 'undefined') {
  3374. data[name] = value;
  3375. }
  3376. });
  3377. return data;
  3378. },
  3379. renderHtml: function () {
  3380. var self = this, layout = self._layout, role = this.settings.role;
  3381. self.preRender();
  3382. layout.preRender(self);
  3383. return '<div id="' + self._id + '" class="' + self.classes + '"' + (role ? ' role="' + this.settings.role + '"' : '') + '>' + '<div id="' + self._id + '-body" class="' + self.bodyClasses + '">' + (self.settings.html || '') + layout.renderHtml(self) + '</div>' + '</div>';
  3384. },
  3385. postRender: function () {
  3386. var self = this;
  3387. var box;
  3388. self.items().exec('postRender');
  3389. self._super();
  3390. self._layout.postRender(self);
  3391. self.state.set('rendered', true);
  3392. if (self.settings.style) {
  3393. self.$el.css(self.settings.style);
  3394. }
  3395. if (self.settings.border) {
  3396. box = self.borderBox;
  3397. self.$el.css({
  3398. 'border-top-width': box.top,
  3399. 'border-right-width': box.right,
  3400. 'border-bottom-width': box.bottom,
  3401. 'border-left-width': box.left
  3402. });
  3403. }
  3404. if (!self.parent()) {
  3405. self.keyboardNav = KeyboardNavigation({ root: self });
  3406. }
  3407. return self;
  3408. },
  3409. initLayoutRect: function () {
  3410. var self = this, layoutRect = self._super();
  3411. self._layout.recalc(self);
  3412. return layoutRect;
  3413. },
  3414. recalc: function () {
  3415. var self = this;
  3416. var rect = self._layoutRect;
  3417. var lastRect = self._lastRect;
  3418. if (!lastRect || lastRect.w !== rect.w || lastRect.h !== rect.h) {
  3419. self._layout.recalc(self);
  3420. rect = self.layoutRect();
  3421. self._lastRect = {
  3422. x: rect.x,
  3423. y: rect.y,
  3424. w: rect.w,
  3425. h: rect.h
  3426. };
  3427. return true;
  3428. }
  3429. },
  3430. reflow: function () {
  3431. var i;
  3432. $_ef12j5u4jh8lz3nl.remove(this);
  3433. if (this.visible()) {
  3434. Control$1.repaintControls = [];
  3435. Control$1.repaintControls.map = {};
  3436. this.recalc();
  3437. i = Control$1.repaintControls.length;
  3438. while (i--) {
  3439. Control$1.repaintControls[i].repaint();
  3440. }
  3441. if (this.settings.layout !== 'flow' && this.settings.layout !== 'stack') {
  3442. this.repaint();
  3443. }
  3444. Control$1.repaintControls = [];
  3445. }
  3446. return this;
  3447. }
  3448. });
  3449. function getDocumentSize(doc) {
  3450. var documentElement, body, scrollWidth, clientWidth;
  3451. var offsetWidth, scrollHeight, clientHeight, offsetHeight;
  3452. var max = Math.max;
  3453. documentElement = doc.documentElement;
  3454. body = doc.body;
  3455. scrollWidth = max(documentElement.scrollWidth, body.scrollWidth);
  3456. clientWidth = max(documentElement.clientWidth, body.clientWidth);
  3457. offsetWidth = max(documentElement.offsetWidth, body.offsetWidth);
  3458. scrollHeight = max(documentElement.scrollHeight, body.scrollHeight);
  3459. clientHeight = max(documentElement.clientHeight, body.clientHeight);
  3460. offsetHeight = max(documentElement.offsetHeight, body.offsetHeight);
  3461. return {
  3462. width: scrollWidth < offsetWidth ? clientWidth : scrollWidth,
  3463. height: scrollHeight < offsetHeight ? clientHeight : scrollHeight
  3464. };
  3465. }
  3466. function updateWithTouchData(e) {
  3467. var keys, i;
  3468. if (e.changedTouches) {
  3469. keys = 'screenX screenY pageX pageY clientX clientY'.split(' ');
  3470. for (i = 0; i < keys.length; i++) {
  3471. e[keys[i]] = e.changedTouches[0][keys[i]];
  3472. }
  3473. }
  3474. }
  3475. function DragHelper (id, settings) {
  3476. var $eventOverlay;
  3477. var doc = settings.document || document;
  3478. var downButton;
  3479. var start, stop, drag, startX, startY;
  3480. settings = settings || {};
  3481. var handleElement = doc.getElementById(settings.handle || id);
  3482. start = function (e) {
  3483. var docSize = getDocumentSize(doc);
  3484. var handleElm, cursor;
  3485. updateWithTouchData(e);
  3486. e.preventDefault();
  3487. downButton = e.button;
  3488. handleElm = handleElement;
  3489. startX = e.screenX;
  3490. startY = e.screenY;
  3491. if (window.getComputedStyle) {
  3492. cursor = window.getComputedStyle(handleElm, null).getPropertyValue('cursor');
  3493. } else {
  3494. cursor = handleElm.runtimeStyle.cursor;
  3495. }
  3496. $eventOverlay = global$9('<div></div>').css({
  3497. position: 'absolute',
  3498. top: 0,
  3499. left: 0,
  3500. width: docSize.width,
  3501. height: docSize.height,
  3502. zIndex: 2147483647,
  3503. opacity: 0.0001,
  3504. cursor: cursor
  3505. }).appendTo(doc.body);
  3506. global$9(doc).on('mousemove touchmove', drag).on('mouseup touchend', stop);
  3507. settings.start(e);
  3508. };
  3509. drag = function (e) {
  3510. updateWithTouchData(e);
  3511. if (e.button !== downButton) {
  3512. return stop(e);
  3513. }
  3514. e.deltaX = e.screenX - startX;
  3515. e.deltaY = e.screenY - startY;
  3516. e.preventDefault();
  3517. settings.drag(e);
  3518. };
  3519. stop = function (e) {
  3520. updateWithTouchData(e);
  3521. global$9(doc).off('mousemove touchmove', drag).off('mouseup touchend', stop);
  3522. $eventOverlay.remove();
  3523. if (settings.stop) {
  3524. settings.stop(e);
  3525. }
  3526. };
  3527. this.destroy = function () {
  3528. global$9(handleElement).off();
  3529. };
  3530. global$9(handleElement).on('mousedown touchstart', start);
  3531. }
  3532. var $_4acv48u6jh8lz3ns = {
  3533. init: function () {
  3534. var self = this;
  3535. self.on('repaint', self.renderScroll);
  3536. },
  3537. renderScroll: function () {
  3538. var self = this, margin = 2;
  3539. function repaintScroll() {
  3540. var hasScrollH, hasScrollV, bodyElm;
  3541. function repaintAxis(axisName, posName, sizeName, contentSizeName, hasScroll, ax) {
  3542. var containerElm, scrollBarElm, scrollThumbElm;
  3543. var containerSize, scrollSize, ratio, rect;
  3544. var posNameLower, sizeNameLower;
  3545. scrollBarElm = self.getEl('scroll' + axisName);
  3546. if (scrollBarElm) {
  3547. posNameLower = posName.toLowerCase();
  3548. sizeNameLower = sizeName.toLowerCase();
  3549. global$9(self.getEl('absend')).css(posNameLower, self.layoutRect()[contentSizeName] - 1);
  3550. if (!hasScroll) {
  3551. global$9(scrollBarElm).css('display', 'none');
  3552. return;
  3553. }
  3554. global$9(scrollBarElm).css('display', 'block');
  3555. containerElm = self.getEl('body');
  3556. scrollThumbElm = self.getEl('scroll' + axisName + 't');
  3557. containerSize = containerElm['client' + sizeName] - margin * 2;
  3558. containerSize -= hasScrollH && hasScrollV ? scrollBarElm['client' + ax] : 0;
  3559. scrollSize = containerElm['scroll' + sizeName];
  3560. ratio = containerSize / scrollSize;
  3561. rect = {};
  3562. rect[posNameLower] = containerElm['offset' + posName] + margin;
  3563. rect[sizeNameLower] = containerSize;
  3564. global$9(scrollBarElm).css(rect);
  3565. rect = {};
  3566. rect[posNameLower] = containerElm['scroll' + posName] * ratio;
  3567. rect[sizeNameLower] = containerSize * ratio;
  3568. global$9(scrollThumbElm).css(rect);
  3569. }
  3570. }
  3571. bodyElm = self.getEl('body');
  3572. hasScrollH = bodyElm.scrollWidth > bodyElm.clientWidth;
  3573. hasScrollV = bodyElm.scrollHeight > bodyElm.clientHeight;
  3574. repaintAxis('h', 'Left', 'Width', 'contentW', hasScrollH, 'Height');
  3575. repaintAxis('v', 'Top', 'Height', 'contentH', hasScrollV, 'Width');
  3576. }
  3577. function addScroll() {
  3578. function addScrollAxis(axisName, posName, sizeName, deltaPosName, ax) {
  3579. var scrollStart;
  3580. var axisId = self._id + '-scroll' + axisName, prefix = self.classPrefix;
  3581. global$9(self.getEl()).append('<div id="' + axisId + '" class="' + prefix + 'scrollbar ' + prefix + 'scrollbar-' + axisName + '">' + '<div id="' + axisId + 't" class="' + prefix + 'scrollbar-thumb"></div>' + '</div>');
  3582. self.draghelper = new DragHelper(axisId + 't', {
  3583. start: function () {
  3584. scrollStart = self.getEl('body')['scroll' + posName];
  3585. global$9('#' + axisId).addClass(prefix + 'active');
  3586. },
  3587. drag: function (e) {
  3588. var ratio, hasScrollH, hasScrollV, containerSize;
  3589. var layoutRect = self.layoutRect();
  3590. hasScrollH = layoutRect.contentW > layoutRect.innerW;
  3591. hasScrollV = layoutRect.contentH > layoutRect.innerH;
  3592. containerSize = self.getEl('body')['client' + sizeName] - margin * 2;
  3593. containerSize -= hasScrollH && hasScrollV ? self.getEl('scroll' + axisName)['client' + ax] : 0;
  3594. ratio = containerSize / self.getEl('body')['scroll' + sizeName];
  3595. self.getEl('body')['scroll' + posName] = scrollStart + e['delta' + deltaPosName] / ratio;
  3596. },
  3597. stop: function () {
  3598. global$9('#' + axisId).removeClass(prefix + 'active');
  3599. }
  3600. });
  3601. }
  3602. self.classes.add('scroll');
  3603. addScrollAxis('v', 'Top', 'Height', 'Y', 'Width');
  3604. addScrollAxis('h', 'Left', 'Width', 'X', 'Height');
  3605. }
  3606. if (self.settings.autoScroll) {
  3607. if (!self._hasScroll) {
  3608. self._hasScroll = true;
  3609. addScroll();
  3610. self.on('wheel', function (e) {
  3611. var bodyEl = self.getEl('body');
  3612. bodyEl.scrollLeft += (e.deltaX || 0) * 10;
  3613. bodyEl.scrollTop += e.deltaY * 10;
  3614. repaintScroll();
  3615. });
  3616. global$9(self.getEl('body')).on('scroll', repaintScroll);
  3617. }
  3618. repaintScroll();
  3619. }
  3620. }
  3621. };
  3622. var Panel = Container.extend({
  3623. Defaults: {
  3624. layout: 'fit',
  3625. containerCls: 'panel'
  3626. },
  3627. Mixins: [$_4acv48u6jh8lz3ns],
  3628. renderHtml: function () {
  3629. var self = this;
  3630. var layout = self._layout;
  3631. var innerHtml = self.settings.html;
  3632. self.preRender();
  3633. layout.preRender(self);
  3634. if (typeof innerHtml === 'undefined') {
  3635. innerHtml = '<div id="' + self._id + '-body" class="' + self.bodyClasses + '">' + layout.renderHtml(self) + '</div>';
  3636. } else {
  3637. if (typeof innerHtml === 'function') {
  3638. innerHtml = innerHtml.call(self);
  3639. }
  3640. self._hasBody = false;
  3641. }
  3642. return '<div id="' + self._id + '" class="' + self.classes + '" hidefocus="1" tabindex="-1" role="group">' + (self._preBodyHtml || '') + innerHtml + '</div>';
  3643. }
  3644. });
  3645. var $_8a2gtru8jh8lz3ny = {
  3646. resizeToContent: function () {
  3647. this._layoutRect.autoResize = true;
  3648. this._lastRect = null;
  3649. this.reflow();
  3650. },
  3651. resizeTo: function (w, h) {
  3652. if (w <= 1 || h <= 1) {
  3653. var rect = funcs.getWindowSize();
  3654. w = w <= 1 ? w * rect.w : w;
  3655. h = h <= 1 ? h * rect.h : h;
  3656. }
  3657. this._layoutRect.autoResize = false;
  3658. return this.layoutRect({
  3659. minW: w,
  3660. minH: h,
  3661. w: w,
  3662. h: h
  3663. }).reflow();
  3664. },
  3665. resizeBy: function (dw, dh) {
  3666. var self = this, rect = self.layoutRect();
  3667. return self.resizeTo(rect.w + dw, rect.h + dh);
  3668. }
  3669. };
  3670. var documentClickHandler;
  3671. var documentScrollHandler;
  3672. var windowResizeHandler;
  3673. var visiblePanels = [];
  3674. var zOrder = [];
  3675. var hasModal;
  3676. function isChildOf(ctrl, parent) {
  3677. while (ctrl) {
  3678. if (ctrl === parent) {
  3679. return true;
  3680. }
  3681. ctrl = ctrl.parent();
  3682. }
  3683. }
  3684. function skipOrHidePanels(e) {
  3685. var i = visiblePanels.length;
  3686. while (i--) {
  3687. var panel = visiblePanels[i], clickCtrl = panel.getParentCtrl(e.target);
  3688. if (panel.settings.autohide) {
  3689. if (clickCtrl) {
  3690. if (isChildOf(clickCtrl, panel) || panel.parent() === clickCtrl) {
  3691. continue;
  3692. }
  3693. }
  3694. e = panel.fire('autohide', { target: e.target });
  3695. if (!e.isDefaultPrevented()) {
  3696. panel.hide();
  3697. }
  3698. }
  3699. }
  3700. }
  3701. function bindDocumentClickHandler() {
  3702. if (!documentClickHandler) {
  3703. documentClickHandler = function (e) {
  3704. if (e.button === 2) {
  3705. return;
  3706. }
  3707. skipOrHidePanels(e);
  3708. };
  3709. global$9(document).on('click touchstart', documentClickHandler);
  3710. }
  3711. }
  3712. function bindDocumentScrollHandler() {
  3713. if (!documentScrollHandler) {
  3714. documentScrollHandler = function () {
  3715. var i;
  3716. i = visiblePanels.length;
  3717. while (i--) {
  3718. repositionPanel(visiblePanels[i]);
  3719. }
  3720. };
  3721. global$9(window).on('scroll', documentScrollHandler);
  3722. }
  3723. }
  3724. function bindWindowResizeHandler() {
  3725. if (!windowResizeHandler) {
  3726. var docElm_1 = document.documentElement;
  3727. var clientWidth_1 = docElm_1.clientWidth, clientHeight_1 = docElm_1.clientHeight;
  3728. windowResizeHandler = function () {
  3729. if (!document.all || clientWidth_1 !== docElm_1.clientWidth || clientHeight_1 !== docElm_1.clientHeight) {
  3730. clientWidth_1 = docElm_1.clientWidth;
  3731. clientHeight_1 = docElm_1.clientHeight;
  3732. FloatPanel.hideAll();
  3733. }
  3734. };
  3735. global$9(window).on('resize', windowResizeHandler);
  3736. }
  3737. }
  3738. function repositionPanel(panel) {
  3739. var scrollY = funcs.getViewPort().y;
  3740. function toggleFixedChildPanels(fixed, deltaY) {
  3741. var parent;
  3742. for (var i = 0; i < visiblePanels.length; i++) {
  3743. if (visiblePanels[i] !== panel) {
  3744. parent = visiblePanels[i].parent();
  3745. while (parent && (parent = parent.parent())) {
  3746. if (parent === panel) {
  3747. visiblePanels[i].fixed(fixed).moveBy(0, deltaY).repaint();
  3748. }
  3749. }
  3750. }
  3751. }
  3752. }
  3753. if (panel.settings.autofix) {
  3754. if (!panel.state.get('fixed')) {
  3755. panel._autoFixY = panel.layoutRect().y;
  3756. if (panel._autoFixY < scrollY) {
  3757. panel.fixed(true).layoutRect({ y: 0 }).repaint();
  3758. toggleFixedChildPanels(true, scrollY - panel._autoFixY);
  3759. }
  3760. } else {
  3761. if (panel._autoFixY > scrollY) {
  3762. panel.fixed(false).layoutRect({ y: panel._autoFixY }).repaint();
  3763. toggleFixedChildPanels(false, panel._autoFixY - scrollY);
  3764. }
  3765. }
  3766. }
  3767. }
  3768. function addRemove(add, ctrl) {
  3769. var i, zIndex = FloatPanel.zIndex || 65535, topModal;
  3770. if (add) {
  3771. zOrder.push(ctrl);
  3772. } else {
  3773. i = zOrder.length;
  3774. while (i--) {
  3775. if (zOrder[i] === ctrl) {
  3776. zOrder.splice(i, 1);
  3777. }
  3778. }
  3779. }
  3780. if (zOrder.length) {
  3781. for (i = 0; i < zOrder.length; i++) {
  3782. if (zOrder[i].modal) {
  3783. zIndex++;
  3784. topModal = zOrder[i];
  3785. }
  3786. zOrder[i].getEl().style.zIndex = zIndex;
  3787. zOrder[i].zIndex = zIndex;
  3788. zIndex++;
  3789. }
  3790. }
  3791. var modalBlockEl = global$9('#' + ctrl.classPrefix + 'modal-block', ctrl.getContainerElm())[0];
  3792. if (topModal) {
  3793. global$9(modalBlockEl).css('z-index', topModal.zIndex - 1);
  3794. } else if (modalBlockEl) {
  3795. modalBlockEl.parentNode.removeChild(modalBlockEl);
  3796. hasModal = false;
  3797. }
  3798. FloatPanel.currentZIndex = zIndex;
  3799. }
  3800. var FloatPanel = Panel.extend({
  3801. Mixins: [
  3802. $_d97gfctrjh8lz3lm,
  3803. $_8a2gtru8jh8lz3ny
  3804. ],
  3805. init: function (settings) {
  3806. var self = this;
  3807. self._super(settings);
  3808. self._eventsRoot = self;
  3809. self.classes.add('floatpanel');
  3810. if (settings.autohide) {
  3811. bindDocumentClickHandler();
  3812. bindWindowResizeHandler();
  3813. visiblePanels.push(self);
  3814. }
  3815. if (settings.autofix) {
  3816. bindDocumentScrollHandler();
  3817. self.on('move', function () {
  3818. repositionPanel(this);
  3819. });
  3820. }
  3821. self.on('postrender show', function (e) {
  3822. if (e.control === self) {
  3823. var $modalBlockEl_1;
  3824. var prefix_1 = self.classPrefix;
  3825. if (self.modal && !hasModal) {
  3826. $modalBlockEl_1 = global$9('#' + prefix_1 + 'modal-block', self.getContainerElm());
  3827. if (!$modalBlockEl_1[0]) {
  3828. $modalBlockEl_1 = global$9('<div id="' + prefix_1 + 'modal-block" class="' + prefix_1 + 'reset ' + prefix_1 + 'fade"></div>').appendTo(self.getContainerElm());
  3829. }
  3830. global$7.setTimeout(function () {
  3831. $modalBlockEl_1.addClass(prefix_1 + 'in');
  3832. global$9(self.getEl()).addClass(prefix_1 + 'in');
  3833. });
  3834. hasModal = true;
  3835. }
  3836. addRemove(true, self);
  3837. }
  3838. });
  3839. self.on('show', function () {
  3840. self.parents().each(function (ctrl) {
  3841. if (ctrl.state.get('fixed')) {
  3842. self.fixed(true);
  3843. return false;
  3844. }
  3845. });
  3846. });
  3847. if (settings.popover) {
  3848. self._preBodyHtml = '<div class="' + self.classPrefix + 'arrow"></div>';
  3849. self.classes.add('popover').add('bottom').add(self.isRtl() ? 'end' : 'start');
  3850. }
  3851. self.aria('label', settings.ariaLabel);
  3852. self.aria('labelledby', self._id);
  3853. self.aria('describedby', self.describedBy || self._id + '-none');
  3854. },
  3855. fixed: function (state) {
  3856. var self = this;
  3857. if (self.state.get('fixed') !== state) {
  3858. if (self.state.get('rendered')) {
  3859. var viewport = funcs.getViewPort();
  3860. if (state) {
  3861. self.layoutRect().y -= viewport.y;
  3862. } else {
  3863. self.layoutRect().y += viewport.y;
  3864. }
  3865. }
  3866. self.classes.toggle('fixed', state);
  3867. self.state.set('fixed', state);
  3868. }
  3869. return self;
  3870. },
  3871. show: function () {
  3872. var self = this;
  3873. var i;
  3874. var state = self._super();
  3875. i = visiblePanels.length;
  3876. while (i--) {
  3877. if (visiblePanels[i] === self) {
  3878. break;
  3879. }
  3880. }
  3881. if (i === -1) {
  3882. visiblePanels.push(self);
  3883. }
  3884. return state;
  3885. },
  3886. hide: function () {
  3887. removeVisiblePanel(this);
  3888. addRemove(false, this);
  3889. return this._super();
  3890. },
  3891. hideAll: function () {
  3892. FloatPanel.hideAll();
  3893. },
  3894. close: function () {
  3895. var self = this;
  3896. if (!self.fire('close').isDefaultPrevented()) {
  3897. self.remove();
  3898. addRemove(false, self);
  3899. }
  3900. return self;
  3901. },
  3902. remove: function () {
  3903. removeVisiblePanel(this);
  3904. this._super();
  3905. },
  3906. postRender: function () {
  3907. var self = this;
  3908. if (self.settings.bodyRole) {
  3909. this.getEl('body').setAttribute('role', self.settings.bodyRole);
  3910. }
  3911. return self._super();
  3912. }
  3913. });
  3914. FloatPanel.hideAll = function () {
  3915. var i = visiblePanels.length;
  3916. while (i--) {
  3917. var panel = visiblePanels[i];
  3918. if (panel && panel.settings.autohide) {
  3919. panel.hide();
  3920. visiblePanels.splice(i, 1);
  3921. }
  3922. }
  3923. };
  3924. function removeVisiblePanel(panel) {
  3925. var i;
  3926. i = visiblePanels.length;
  3927. while (i--) {
  3928. if (visiblePanels[i] === panel) {
  3929. visiblePanels.splice(i, 1);
  3930. }
  3931. }
  3932. i = zOrder.length;
  3933. while (i--) {
  3934. if (zOrder[i] === panel) {
  3935. zOrder.splice(i, 1);
  3936. }
  3937. }
  3938. }
  3939. var isFixed$1 = function (inlineToolbarContainer, editor) {
  3940. return !!(inlineToolbarContainer && !editor.settings.ui_container);
  3941. };
  3942. var render$1 = function (editor, theme, args) {
  3943. var panel, inlineToolbarContainer;
  3944. var DOM = global$3.DOM;
  3945. var fixedToolbarContainer = getFixedToolbarContainer(editor);
  3946. if (fixedToolbarContainer) {
  3947. inlineToolbarContainer = DOM.select(fixedToolbarContainer)[0];
  3948. }
  3949. var reposition = function () {
  3950. if (panel && panel.moveRel && panel.visible() && !panel._fixed) {
  3951. var scrollContainer = editor.selection.getScrollContainer(), body = editor.getBody();
  3952. var deltaX = 0, deltaY = 0;
  3953. if (scrollContainer) {
  3954. var bodyPos = DOM.getPos(body), scrollContainerPos = DOM.getPos(scrollContainer);
  3955. deltaX = Math.max(0, scrollContainerPos.x - bodyPos.x);
  3956. deltaY = Math.max(0, scrollContainerPos.y - bodyPos.y);
  3957. }
  3958. panel.fixed(false).moveRel(body, editor.rtl ? [
  3959. 'tr-br',
  3960. 'br-tr'
  3961. ] : [
  3962. 'tl-bl',
  3963. 'bl-tl',
  3964. 'tr-br'
  3965. ]).moveBy(deltaX, deltaY);
  3966. }
  3967. };
  3968. var show = function () {
  3969. if (panel) {
  3970. panel.show();
  3971. reposition();
  3972. DOM.addClass(editor.getBody(), 'mce-edit-focus');
  3973. }
  3974. };
  3975. var hide = function () {
  3976. if (panel) {
  3977. panel.hide();
  3978. FloatPanel.hideAll();
  3979. DOM.removeClass(editor.getBody(), 'mce-edit-focus');
  3980. }
  3981. };
  3982. var render = function () {
  3983. if (panel) {
  3984. if (!panel.visible()) {
  3985. show();
  3986. }
  3987. return;
  3988. }
  3989. panel = theme.panel = global$4.create({
  3990. type: inlineToolbarContainer ? 'panel' : 'floatpanel',
  3991. role: 'application',
  3992. classes: 'tinymce tinymce-inline',
  3993. layout: 'flex',
  3994. direction: 'column',
  3995. align: 'stretch',
  3996. autohide: false,
  3997. autofix: isFixed$1(inlineToolbarContainer, editor),
  3998. fixed: isFixed$1(inlineToolbarContainer, editor),
  3999. border: 1,
  4000. items: [
  4001. hasMenubar(editor) === false ? null : {
  4002. type: 'menubar',
  4003. border: '0 0 1 0',
  4004. items: $_8i78rftgjh8lz3ka.createMenuButtons(editor)
  4005. },
  4006. $_fudqhrtfjh8lz3k7.createToolbars(editor, getToolbarSize(editor))
  4007. ]
  4008. });
  4009. $_1jk3jvtcjh8lz3jy.setUiContainer(editor, panel);
  4010. $_aycuj2t7jh8lz3jp.fireBeforeRenderUI(editor);
  4011. if (inlineToolbarContainer) {
  4012. panel.renderTo(inlineToolbarContainer).reflow();
  4013. } else {
  4014. panel.renderTo().reflow();
  4015. }
  4016. $_47hpztt8jh8lz3jq.addKeys(editor, panel);
  4017. show();
  4018. $_5kodmdt9jh8lz3js.addContextualToolbars(editor);
  4019. editor.on('nodeChange', reposition);
  4020. editor.on('ResizeWindow', reposition);
  4021. editor.on('activate', show);
  4022. editor.on('deactivate', hide);
  4023. editor.nodeChanged();
  4024. };
  4025. editor.settings.content_editable = true;
  4026. editor.on('focus', function () {
  4027. if (isSkinDisabled(editor) === false && args.skinUiCss) {
  4028. DOM.styleSheetLoader.load(args.skinUiCss, render, render);
  4029. } else {
  4030. render();
  4031. }
  4032. });
  4033. editor.on('blur hide', hide);
  4034. editor.on('remove', function () {
  4035. if (panel) {
  4036. panel.remove();
  4037. panel = null;
  4038. }
  4039. });
  4040. if (isSkinDisabled(editor) === false && args.skinUiCss) {
  4041. DOM.styleSheetLoader.load(args.skinUiCss, $_231e94tmjh8lz3ku.fireSkinLoaded(editor));
  4042. } else {
  4043. $_231e94tmjh8lz3ku.fireSkinLoaded(editor)();
  4044. }
  4045. return {};
  4046. };
  4047. var $_7wdylstnjh8lz3kv = { render: render$1 };
  4048. function Throbber (elm, inline) {
  4049. var self = this;
  4050. var state;
  4051. var classPrefix = Control$1.classPrefix;
  4052. var timer;
  4053. self.show = function (time, callback) {
  4054. function render() {
  4055. if (state) {
  4056. global$9(elm).append('<div class="' + classPrefix + 'throbber' + (inline ? ' ' + classPrefix + 'throbber-inline' : '') + '"></div>');
  4057. if (callback) {
  4058. callback();
  4059. }
  4060. }
  4061. }
  4062. self.hide();
  4063. state = true;
  4064. if (time) {
  4065. timer = global$7.setTimeout(render, time);
  4066. } else {
  4067. render();
  4068. }
  4069. return self;
  4070. };
  4071. self.hide = function () {
  4072. var child = elm.lastChild;
  4073. global$7.clearTimeout(timer);
  4074. if (child && child.className.indexOf('throbber') !== -1) {
  4075. child.parentNode.removeChild(child);
  4076. }
  4077. state = false;
  4078. return self;
  4079. };
  4080. }
  4081. var setup = function (editor, theme) {
  4082. var throbber;
  4083. editor.on('ProgressState', function (e) {
  4084. throbber = throbber || new Throbber(theme.panel.getEl('body'));
  4085. if (e.state) {
  4086. throbber.show(e.time);
  4087. } else {
  4088. throbber.hide();
  4089. }
  4090. });
  4091. };
  4092. var $_e9w0qfu9jh8lz3nz = { setup: setup };
  4093. var renderUI = function (editor, theme, args) {
  4094. var skinUrl = getSkinUrl(editor);
  4095. if (skinUrl) {
  4096. args.skinUiCss = skinUrl + '/skin.min.css';
  4097. editor.contentCSS.push(skinUrl + '/content' + (editor.inline ? '.inline' : '') + '.min.css');
  4098. }
  4099. $_e9w0qfu9jh8lz3nz.setup(editor, theme);
  4100. return isInline(editor) ? $_7wdylstnjh8lz3kv.render(editor, theme, args) : $_4cj0a3t3jh8lz3jk.render(editor, theme, args);
  4101. };
  4102. var $_5ent4szjh8lz3ja = { renderUI: renderUI };
  4103. var Tooltip = Control$1.extend({
  4104. Mixins: [$_d97gfctrjh8lz3lm],
  4105. Defaults: { classes: 'widget tooltip tooltip-n' },
  4106. renderHtml: function () {
  4107. var self = this, prefix = self.classPrefix;
  4108. return '<div id="' + self._id + '" class="' + self.classes + '" role="presentation">' + '<div class="' + prefix + 'tooltip-arrow"></div>' + '<div class="' + prefix + 'tooltip-inner">' + self.encode(self.state.get('text')) + '</div>' + '</div>';
  4109. },
  4110. bindStates: function () {
  4111. var self = this;
  4112. self.state.on('change:text', function (e) {
  4113. self.getEl().lastChild.innerHTML = self.encode(e.value);
  4114. });
  4115. return self._super();
  4116. },
  4117. repaint: function () {
  4118. var self = this;
  4119. var style, rect;
  4120. style = self.getEl().style;
  4121. rect = self._layoutRect;
  4122. style.left = rect.x + 'px';
  4123. style.top = rect.y + 'px';
  4124. style.zIndex = 65535 + 65535;
  4125. }
  4126. });
  4127. var Widget = Control$1.extend({
  4128. init: function (settings) {
  4129. var self = this;
  4130. self._super(settings);
  4131. settings = self.settings;
  4132. self.canFocus = true;
  4133. if (settings.tooltip && Widget.tooltips !== false) {
  4134. self.on('mouseenter', function (e) {
  4135. var tooltip = self.tooltip().moveTo(-65535);
  4136. if (e.control === self) {
  4137. var rel = tooltip.text(settings.tooltip).show().testMoveRel(self.getEl(), [
  4138. 'bc-tc',
  4139. 'bc-tl',
  4140. 'bc-tr'
  4141. ]);
  4142. tooltip.classes.toggle('tooltip-n', rel === 'bc-tc');
  4143. tooltip.classes.toggle('tooltip-nw', rel === 'bc-tl');
  4144. tooltip.classes.toggle('tooltip-ne', rel === 'bc-tr');
  4145. tooltip.moveRel(self.getEl(), rel);
  4146. } else {
  4147. tooltip.hide();
  4148. }
  4149. });
  4150. self.on('mouseleave mousedown click', function () {
  4151. self.tooltip().remove();
  4152. self._tooltip = null;
  4153. });
  4154. }
  4155. self.aria('label', settings.ariaLabel || settings.tooltip);
  4156. },
  4157. tooltip: function () {
  4158. if (!this._tooltip) {
  4159. this._tooltip = new Tooltip({ type: 'tooltip' });
  4160. $_1jk3jvtcjh8lz3jy.inheritUiContainer(this, this._tooltip);
  4161. this._tooltip.renderTo();
  4162. }
  4163. return this._tooltip;
  4164. },
  4165. postRender: function () {
  4166. var self = this, settings = self.settings;
  4167. self._super();
  4168. if (!self.parent() && (settings.width || settings.height)) {
  4169. self.initLayoutRect();
  4170. self.repaint();
  4171. }
  4172. if (settings.autofocus) {
  4173. self.focus();
  4174. }
  4175. },
  4176. bindStates: function () {
  4177. var self = this;
  4178. function disable(state) {
  4179. self.aria('disabled', state);
  4180. self.classes.toggle('disabled', state);
  4181. }
  4182. function active(state) {
  4183. self.aria('pressed', state);
  4184. self.classes.toggle('active', state);
  4185. }
  4186. self.state.on('change:disabled', function (e) {
  4187. disable(e.value);
  4188. });
  4189. self.state.on('change:active', function (e) {
  4190. active(e.value);
  4191. });
  4192. if (self.state.get('disabled')) {
  4193. disable(true);
  4194. }
  4195. if (self.state.get('active')) {
  4196. active(true);
  4197. }
  4198. return self._super();
  4199. },
  4200. remove: function () {
  4201. this._super();
  4202. if (this._tooltip) {
  4203. this._tooltip.remove();
  4204. this._tooltip = null;
  4205. }
  4206. }
  4207. });
  4208. var Progress = Widget.extend({
  4209. Defaults: { value: 0 },
  4210. init: function (settings) {
  4211. var self = this;
  4212. self._super(settings);
  4213. self.classes.add('progress');
  4214. if (!self.settings.filter) {
  4215. self.settings.filter = function (value) {
  4216. return Math.round(value);
  4217. };
  4218. }
  4219. },
  4220. renderHtml: function () {
  4221. var self = this, id = self._id, prefix = this.classPrefix;
  4222. return '<div id="' + id + '" class="' + self.classes + '">' + '<div class="' + prefix + 'bar-container">' + '<div class="' + prefix + 'bar"></div>' + '</div>' + '<div class="' + prefix + 'text">0%</div>' + '</div>';
  4223. },
  4224. postRender: function () {
  4225. var self = this;
  4226. self._super();
  4227. self.value(self.settings.value);
  4228. return self;
  4229. },
  4230. bindStates: function () {
  4231. var self = this;
  4232. function setValue(value) {
  4233. value = self.settings.filter(value);
  4234. self.getEl().lastChild.innerHTML = value + '%';
  4235. self.getEl().firstChild.firstChild.style.width = value + '%';
  4236. }
  4237. self.state.on('change:value', function (e) {
  4238. setValue(e.value);
  4239. });
  4240. setValue(self.state.get('value'));
  4241. return self._super();
  4242. }
  4243. });
  4244. var updateLiveRegion = function (ctx, text) {
  4245. ctx.getEl().lastChild.textContent = text + (ctx.progressBar ? ' ' + ctx.progressBar.value() + '%' : '');
  4246. };
  4247. var Notification = Control$1.extend({
  4248. Mixins: [$_d97gfctrjh8lz3lm],
  4249. Defaults: { classes: 'widget notification' },
  4250. init: function (settings) {
  4251. var self = this;
  4252. self._super(settings);
  4253. self.maxWidth = settings.maxWidth;
  4254. if (settings.text) {
  4255. self.text(settings.text);
  4256. }
  4257. if (settings.icon) {
  4258. self.icon = settings.icon;
  4259. }
  4260. if (settings.color) {
  4261. self.color = settings.color;
  4262. }
  4263. if (settings.type) {
  4264. self.classes.add('notification-' + settings.type);
  4265. }
  4266. if (settings.timeout && (settings.timeout < 0 || settings.timeout > 0) && !settings.closeButton) {
  4267. self.closeButton = false;
  4268. } else {
  4269. self.classes.add('has-close');
  4270. self.closeButton = true;
  4271. }
  4272. if (settings.progressBar) {
  4273. self.progressBar = new Progress();
  4274. }
  4275. self.on('click', function (e) {
  4276. if (e.target.className.indexOf(self.classPrefix + 'close') !== -1) {
  4277. self.close();
  4278. }
  4279. });
  4280. },
  4281. renderHtml: function () {
  4282. var self = this;
  4283. var prefix = self.classPrefix;
  4284. var icon = '', closeButton = '', progressBar = '', notificationStyle = '';
  4285. if (self.icon) {
  4286. icon = '<i class="' + prefix + 'ico' + ' ' + prefix + 'i-' + self.icon + '"></i>';
  4287. }
  4288. notificationStyle = ' style="max-width: ' + self.maxWidth + 'px;' + (self.color ? 'background-color: ' + self.color + ';"' : '"');
  4289. if (self.closeButton) {
  4290. closeButton = '<button type="button" class="' + prefix + 'close" aria-hidden="true">\xD7</button>';
  4291. }
  4292. if (self.progressBar) {
  4293. progressBar = self.progressBar.renderHtml();
  4294. }
  4295. return '<div id="' + self._id + '" class="' + self.classes + '"' + notificationStyle + ' role="presentation">' + icon + '<div class="' + prefix + 'notification-inner">' + self.state.get('text') + '</div>' + progressBar + closeButton + '<div style="clip: rect(1px, 1px, 1px, 1px);height: 1px;overflow: hidden;position: absolute;width: 1px;"' + ' aria-live="assertive" aria-relevant="additions" aria-atomic="true"></div>' + '</div>';
  4296. },
  4297. postRender: function () {
  4298. var self = this;
  4299. global$7.setTimeout(function () {
  4300. self.$el.addClass(self.classPrefix + 'in');
  4301. updateLiveRegion(self, self.state.get('text'));
  4302. }, 100);
  4303. return self._super();
  4304. },
  4305. bindStates: function () {
  4306. var self = this;
  4307. self.state.on('change:text', function (e) {
  4308. self.getEl().firstChild.innerHTML = e.value;
  4309. updateLiveRegion(self, e.value);
  4310. });
  4311. if (self.progressBar) {
  4312. self.progressBar.bindStates();
  4313. self.progressBar.state.on('change:value', function (e) {
  4314. updateLiveRegion(self, self.state.get('text'));
  4315. });
  4316. }
  4317. return self._super();
  4318. },
  4319. close: function () {
  4320. var self = this;
  4321. if (!self.fire('close').isDefaultPrevented()) {
  4322. self.remove();
  4323. }
  4324. return self;
  4325. },
  4326. repaint: function () {
  4327. var self = this;
  4328. var style, rect;
  4329. style = self.getEl().style;
  4330. rect = self._layoutRect;
  4331. style.left = rect.x + 'px';
  4332. style.top = rect.y + 'px';
  4333. style.zIndex = 65535 - 1;
  4334. }
  4335. });
  4336. function NotificationManagerImpl (editor) {
  4337. var getEditorContainer = function (editor) {
  4338. return editor.inline ? editor.getElement() : editor.getContentAreaContainer();
  4339. };
  4340. var getContainerWidth = function () {
  4341. var container = getEditorContainer(editor);
  4342. return funcs.getSize(container).width;
  4343. };
  4344. var prePositionNotifications = function (notifications) {
  4345. $_f3qxhzthjh8lz3kg.each(notifications, function (notification) {
  4346. notification.moveTo(0, 0);
  4347. });
  4348. };
  4349. var positionNotifications = function (notifications) {
  4350. if (notifications.length > 0) {
  4351. var firstItem = notifications.slice(0, 1)[0];
  4352. var container = getEditorContainer(editor);
  4353. firstItem.moveRel(container, 'tc-tc');
  4354. $_f3qxhzthjh8lz3kg.each(notifications, function (notification, index) {
  4355. if (index > 0) {
  4356. notification.moveRel(notifications[index - 1].getEl(), 'bc-tc');
  4357. }
  4358. });
  4359. }
  4360. };
  4361. var reposition = function (notifications) {
  4362. prePositionNotifications(notifications);
  4363. positionNotifications(notifications);
  4364. };
  4365. var open = function (args, closeCallback) {
  4366. var extendedArgs = global$2.extend(args, { maxWidth: getContainerWidth() });
  4367. var notif = new Notification(extendedArgs);
  4368. notif.args = extendedArgs;
  4369. if (extendedArgs.timeout > 0) {
  4370. notif.timer = setTimeout(function () {
  4371. notif.close();
  4372. closeCallback();
  4373. }, extendedArgs.timeout);
  4374. }
  4375. notif.on('close', function () {
  4376. closeCallback();
  4377. });
  4378. notif.renderTo();
  4379. return notif;
  4380. };
  4381. var close = function (notification) {
  4382. notification.close();
  4383. };
  4384. var getArgs = function (notification) {
  4385. return notification.args;
  4386. };
  4387. return {
  4388. open: open,
  4389. close: close,
  4390. reposition: reposition,
  4391. getArgs: getArgs
  4392. };
  4393. }
  4394. var windows = [];
  4395. var oldMetaValue = '';
  4396. function toggleFullScreenState(state) {
  4397. var noScaleMetaValue = 'width=device-width,initial-scale=1.0,user-scalable=0,minimum-scale=1.0,maximum-scale=1.0';
  4398. var viewport = global$9('meta[name=viewport]')[0], contentValue;
  4399. if (global$8.overrideViewPort === false) {
  4400. return;
  4401. }
  4402. if (!viewport) {
  4403. viewport = document.createElement('meta');
  4404. viewport.setAttribute('name', 'viewport');
  4405. document.getElementsByTagName('head')[0].appendChild(viewport);
  4406. }
  4407. contentValue = viewport.getAttribute('content');
  4408. if (contentValue && typeof oldMetaValue !== 'undefined') {
  4409. oldMetaValue = contentValue;
  4410. }
  4411. viewport.setAttribute('content', state ? noScaleMetaValue : oldMetaValue);
  4412. }
  4413. function toggleBodyFullScreenClasses(classPrefix, state) {
  4414. if (checkFullscreenWindows() && state === false) {
  4415. global$9([
  4416. document.documentElement,
  4417. document.body
  4418. ]).removeClass(classPrefix + 'fullscreen');
  4419. }
  4420. }
  4421. function checkFullscreenWindows() {
  4422. for (var i = 0; i < windows.length; i++) {
  4423. if (windows[i]._fullscreen) {
  4424. return true;
  4425. }
  4426. }
  4427. return false;
  4428. }
  4429. function handleWindowResize() {
  4430. if (!global$8.desktop) {
  4431. var lastSize_1 = {
  4432. w: window.innerWidth,
  4433. h: window.innerHeight
  4434. };
  4435. global$7.setInterval(function () {
  4436. var w = window.innerWidth, h = window.innerHeight;
  4437. if (lastSize_1.w !== w || lastSize_1.h !== h) {
  4438. lastSize_1 = {
  4439. w: w,
  4440. h: h
  4441. };
  4442. global$9(window).trigger('resize');
  4443. }
  4444. }, 100);
  4445. }
  4446. function reposition() {
  4447. var i;
  4448. var rect = funcs.getWindowSize();
  4449. var layoutRect;
  4450. for (i = 0; i < windows.length; i++) {
  4451. layoutRect = windows[i].layoutRect();
  4452. windows[i].moveTo(windows[i].settings.x || Math.max(0, rect.w / 2 - layoutRect.w / 2), windows[i].settings.y || Math.max(0, rect.h / 2 - layoutRect.h / 2));
  4453. }
  4454. }
  4455. global$9(window).on('resize', reposition);
  4456. }
  4457. var Window = FloatPanel.extend({
  4458. modal: true,
  4459. Defaults: {
  4460. border: 1,
  4461. layout: 'flex',
  4462. containerCls: 'panel',
  4463. role: 'dialog',
  4464. callbacks: {
  4465. submit: function () {
  4466. this.fire('submit', { data: this.toJSON() });
  4467. },
  4468. close: function () {
  4469. this.close();
  4470. }
  4471. }
  4472. },
  4473. init: function (settings) {
  4474. var self = this;
  4475. self._super(settings);
  4476. if (self.isRtl()) {
  4477. self.classes.add('rtl');
  4478. }
  4479. self.classes.add('window');
  4480. self.bodyClasses.add('window-body');
  4481. self.state.set('fixed', true);
  4482. if (settings.buttons) {
  4483. self.statusbar = new Panel({
  4484. layout: 'flex',
  4485. border: '1 0 0 0',
  4486. spacing: 3,
  4487. padding: 10,
  4488. align: 'center',
  4489. pack: self.isRtl() ? 'start' : 'end',
  4490. defaults: { type: 'button' },
  4491. items: settings.buttons
  4492. });
  4493. self.statusbar.classes.add('foot');
  4494. self.statusbar.parent(self);
  4495. }
  4496. self.on('click', function (e) {
  4497. var closeClass = self.classPrefix + 'close';
  4498. if (funcs.hasClass(e.target, closeClass) || funcs.hasClass(e.target.parentNode, closeClass)) {
  4499. self.close();
  4500. }
  4501. });
  4502. self.on('cancel', function () {
  4503. self.close();
  4504. });
  4505. self.on('move', function (e) {
  4506. if (e.control === self) {
  4507. FloatPanel.hideAll();
  4508. }
  4509. });
  4510. self.aria('describedby', self.describedBy || self._id + '-none');
  4511. self.aria('label', settings.title);
  4512. self._fullscreen = false;
  4513. },
  4514. recalc: function () {
  4515. var self = this;
  4516. var statusbar = self.statusbar;
  4517. var layoutRect, width, x, needsRecalc;
  4518. if (self._fullscreen) {
  4519. self.layoutRect(funcs.getWindowSize());
  4520. self.layoutRect().contentH = self.layoutRect().innerH;
  4521. }
  4522. self._super();
  4523. layoutRect = self.layoutRect();
  4524. if (self.settings.title && !self._fullscreen) {
  4525. width = layoutRect.headerW;
  4526. if (width > layoutRect.w) {
  4527. x = layoutRect.x - Math.max(0, width / 2);
  4528. self.layoutRect({
  4529. w: width,
  4530. x: x
  4531. });
  4532. needsRecalc = true;
  4533. }
  4534. }
  4535. if (statusbar) {
  4536. statusbar.layoutRect({ w: self.layoutRect().innerW }).recalc();
  4537. width = statusbar.layoutRect().minW + layoutRect.deltaW;
  4538. if (width > layoutRect.w) {
  4539. x = layoutRect.x - Math.max(0, width - layoutRect.w);
  4540. self.layoutRect({
  4541. w: width,
  4542. x: x
  4543. });
  4544. needsRecalc = true;
  4545. }
  4546. }
  4547. if (needsRecalc) {
  4548. self.recalc();
  4549. }
  4550. },
  4551. initLayoutRect: function () {
  4552. var self = this;
  4553. var layoutRect = self._super();
  4554. var deltaH = 0, headEl;
  4555. if (self.settings.title && !self._fullscreen) {
  4556. headEl = self.getEl('head');
  4557. var size = funcs.getSize(headEl);
  4558. layoutRect.headerW = size.width;
  4559. layoutRect.headerH = size.height;
  4560. deltaH += layoutRect.headerH;
  4561. }
  4562. if (self.statusbar) {
  4563. deltaH += self.statusbar.layoutRect().h;
  4564. }
  4565. layoutRect.deltaH += deltaH;
  4566. layoutRect.minH += deltaH;
  4567. layoutRect.h += deltaH;
  4568. var rect = funcs.getWindowSize();
  4569. layoutRect.x = self.settings.x || Math.max(0, rect.w / 2 - layoutRect.w / 2);
  4570. layoutRect.y = self.settings.y || Math.max(0, rect.h / 2 - layoutRect.h / 2);
  4571. return layoutRect;
  4572. },
  4573. renderHtml: function () {
  4574. var self = this, layout = self._layout, id = self._id, prefix = self.classPrefix;
  4575. var settings = self.settings;
  4576. var headerHtml = '', footerHtml = '', html = settings.html;
  4577. self.preRender();
  4578. layout.preRender(self);
  4579. if (settings.title) {
  4580. headerHtml = '<div id="' + id + '-head" class="' + prefix + 'window-head">' + '<div id="' + id + '-title" class="' + prefix + 'title">' + self.encode(settings.title) + '</div>' + '<div id="' + id + '-dragh" class="' + prefix + 'dragh"></div>' + '<button type="button" class="' + prefix + 'close" aria-hidden="true">' + '<i class="mce-ico mce-i-remove"></i>' + '</button>' + '</div>';
  4581. }
  4582. if (settings.url) {
  4583. html = '<iframe src="' + settings.url + '" tabindex="-1"></iframe>';
  4584. }
  4585. if (typeof html === 'undefined') {
  4586. html = layout.renderHtml(self);
  4587. }
  4588. if (self.statusbar) {
  4589. footerHtml = self.statusbar.renderHtml();
  4590. }
  4591. return '<div id="' + id + '" class="' + self.classes + '" hidefocus="1">' + '<div class="' + self.classPrefix + 'reset" role="application">' + headerHtml + '<div id="' + id + '-body" class="' + self.bodyClasses + '">' + html + '</div>' + footerHtml + '</div>' + '</div>';
  4592. },
  4593. fullscreen: function (state) {
  4594. var self = this;
  4595. var documentElement = document.documentElement;
  4596. var slowRendering;
  4597. var prefix = self.classPrefix;
  4598. var layoutRect;
  4599. if (state !== self._fullscreen) {
  4600. global$9(window).on('resize', function () {
  4601. var time;
  4602. if (self._fullscreen) {
  4603. if (!slowRendering) {
  4604. time = new Date().getTime();
  4605. var rect = funcs.getWindowSize();
  4606. self.moveTo(0, 0).resizeTo(rect.w, rect.h);
  4607. if (new Date().getTime() - time > 50) {
  4608. slowRendering = true;
  4609. }
  4610. } else {
  4611. if (!self._timer) {
  4612. self._timer = global$7.setTimeout(function () {
  4613. var rect = funcs.getWindowSize();
  4614. self.moveTo(0, 0).resizeTo(rect.w, rect.h);
  4615. self._timer = 0;
  4616. }, 50);
  4617. }
  4618. }
  4619. }
  4620. });
  4621. layoutRect = self.layoutRect();
  4622. self._fullscreen = state;
  4623. if (!state) {
  4624. self.borderBox = $_focdcktxjh8lz3mn.parseBox(self.settings.border);
  4625. self.getEl('head').style.display = '';
  4626. layoutRect.deltaH += layoutRect.headerH;
  4627. global$9([
  4628. documentElement,
  4629. document.body
  4630. ]).removeClass(prefix + 'fullscreen');
  4631. self.classes.remove('fullscreen');
  4632. self.moveTo(self._initial.x, self._initial.y).resizeTo(self._initial.w, self._initial.h);
  4633. } else {
  4634. self._initial = {
  4635. x: layoutRect.x,
  4636. y: layoutRect.y,
  4637. w: layoutRect.w,
  4638. h: layoutRect.h
  4639. };
  4640. self.borderBox = $_focdcktxjh8lz3mn.parseBox('0');
  4641. self.getEl('head').style.display = 'none';
  4642. layoutRect.deltaH -= layoutRect.headerH + 2;
  4643. global$9([
  4644. documentElement,
  4645. document.body
  4646. ]).addClass(prefix + 'fullscreen');
  4647. self.classes.add('fullscreen');
  4648. var rect = funcs.getWindowSize();
  4649. self.moveTo(0, 0).resizeTo(rect.w, rect.h);
  4650. }
  4651. }
  4652. return self.reflow();
  4653. },
  4654. postRender: function () {
  4655. var self = this;
  4656. var startPos;
  4657. setTimeout(function () {
  4658. self.classes.add('in');
  4659. self.fire('open');
  4660. }, 0);
  4661. self._super();
  4662. if (self.statusbar) {
  4663. self.statusbar.postRender();
  4664. }
  4665. self.focus();
  4666. this.dragHelper = new DragHelper(self._id + '-dragh', {
  4667. start: function () {
  4668. startPos = {
  4669. x: self.layoutRect().x,
  4670. y: self.layoutRect().y
  4671. };
  4672. },
  4673. drag: function (e) {
  4674. self.moveTo(startPos.x + e.deltaX, startPos.y + e.deltaY);
  4675. }
  4676. });
  4677. self.on('submit', function (e) {
  4678. if (!e.isDefaultPrevented()) {
  4679. self.close();
  4680. }
  4681. });
  4682. windows.push(self);
  4683. toggleFullScreenState(true);
  4684. },
  4685. submit: function () {
  4686. return this.fire('submit', { data: this.toJSON() });
  4687. },
  4688. remove: function () {
  4689. var self = this;
  4690. var i;
  4691. self.dragHelper.destroy();
  4692. self._super();
  4693. if (self.statusbar) {
  4694. this.statusbar.remove();
  4695. }
  4696. toggleBodyFullScreenClasses(self.classPrefix, false);
  4697. i = windows.length;
  4698. while (i--) {
  4699. if (windows[i] === self) {
  4700. windows.splice(i, 1);
  4701. }
  4702. }
  4703. toggleFullScreenState(windows.length > 0);
  4704. },
  4705. getContentWindow: function () {
  4706. var ifr = this.getEl().getElementsByTagName('iframe')[0];
  4707. return ifr ? ifr.contentWindow : null;
  4708. }
  4709. });
  4710. handleWindowResize();
  4711. var MessageBox = Window.extend({
  4712. init: function (settings) {
  4713. settings = {
  4714. border: 1,
  4715. padding: 20,
  4716. layout: 'flex',
  4717. pack: 'center',
  4718. align: 'center',
  4719. containerCls: 'panel',
  4720. autoScroll: true,
  4721. buttons: {
  4722. type: 'button',
  4723. text: 'Ok',
  4724. action: 'ok'
  4725. },
  4726. items: {
  4727. type: 'label',
  4728. multiline: true,
  4729. maxWidth: 500,
  4730. maxHeight: 200
  4731. }
  4732. };
  4733. this._super(settings);
  4734. },
  4735. Statics: {
  4736. OK: 1,
  4737. OK_CANCEL: 2,
  4738. YES_NO: 3,
  4739. YES_NO_CANCEL: 4,
  4740. msgBox: function (settings) {
  4741. var buttons;
  4742. var callback = settings.callback || function () {
  4743. };
  4744. function createButton(text, status, primary) {
  4745. return {
  4746. type: 'button',
  4747. text: text,
  4748. subtype: primary ? 'primary' : '',
  4749. onClick: function (e) {
  4750. e.control.parents()[1].close();
  4751. callback(status);
  4752. }
  4753. };
  4754. }
  4755. switch (settings.buttons) {
  4756. case MessageBox.OK_CANCEL:
  4757. buttons = [
  4758. createButton('Ok', true, true),
  4759. createButton('Cancel', false)
  4760. ];
  4761. break;
  4762. case MessageBox.YES_NO:
  4763. case MessageBox.YES_NO_CANCEL:
  4764. buttons = [
  4765. createButton('Yes', 1, true),
  4766. createButton('No', 0)
  4767. ];
  4768. if (settings.buttons === MessageBox.YES_NO_CANCEL) {
  4769. buttons.push(createButton('Cancel', -1));
  4770. }
  4771. break;
  4772. default:
  4773. buttons = [createButton('Ok', true, true)];
  4774. break;
  4775. }
  4776. return new Window({
  4777. padding: 20,
  4778. x: settings.x,
  4779. y: settings.y,
  4780. minWidth: 300,
  4781. minHeight: 100,
  4782. layout: 'flex',
  4783. pack: 'center',
  4784. align: 'center',
  4785. buttons: buttons,
  4786. title: settings.title,
  4787. role: 'alertdialog',
  4788. items: {
  4789. type: 'label',
  4790. multiline: true,
  4791. maxWidth: 500,
  4792. maxHeight: 200,
  4793. text: settings.text
  4794. },
  4795. onPostRender: function () {
  4796. this.aria('describedby', this.items()[0]._id);
  4797. },
  4798. onClose: settings.onClose,
  4799. onCancel: function () {
  4800. callback(false);
  4801. }
  4802. }).renderTo(document.body).reflow();
  4803. },
  4804. alert: function (settings, callback) {
  4805. if (typeof settings === 'string') {
  4806. settings = { text: settings };
  4807. }
  4808. settings.callback = callback;
  4809. return MessageBox.msgBox(settings);
  4810. },
  4811. confirm: function (settings, callback) {
  4812. if (typeof settings === 'string') {
  4813. settings = { text: settings };
  4814. }
  4815. settings.callback = callback;
  4816. settings.buttons = MessageBox.OK_CANCEL;
  4817. return MessageBox.msgBox(settings);
  4818. }
  4819. }
  4820. });
  4821. function WindowManagerImpl (editor) {
  4822. var open = function (args, params, closeCallback) {
  4823. var win;
  4824. args.title = args.title || ' ';
  4825. args.url = args.url || args.file;
  4826. if (args.url) {
  4827. args.width = parseInt(args.width || 320, 10);
  4828. args.height = parseInt(args.height || 240, 10);
  4829. }
  4830. if (args.body) {
  4831. args.items = {
  4832. defaults: args.defaults,
  4833. type: args.bodyType || 'form',
  4834. items: args.body,
  4835. data: args.data,
  4836. callbacks: args.commands
  4837. };
  4838. }
  4839. if (!args.url && !args.buttons) {
  4840. args.buttons = [
  4841. {
  4842. text: 'Ok',
  4843. subtype: 'primary',
  4844. onclick: function () {
  4845. win.find('form')[0].submit();
  4846. }
  4847. },
  4848. {
  4849. text: 'Cancel',
  4850. onclick: function () {
  4851. win.close();
  4852. }
  4853. }
  4854. ];
  4855. }
  4856. win = new Window(args);
  4857. win.on('close', function () {
  4858. closeCallback(win);
  4859. });
  4860. if (args.data) {
  4861. win.on('postRender', function () {
  4862. this.find('*').each(function (ctrl) {
  4863. var name = ctrl.name();
  4864. if (name in args.data) {
  4865. ctrl.value(args.data[name]);
  4866. }
  4867. });
  4868. });
  4869. }
  4870. win.features = args || {};
  4871. win.params = params || {};
  4872. win = win.renderTo(document.body).reflow();
  4873. return win;
  4874. };
  4875. var alert = function (message, choiceCallback, closeCallback) {
  4876. var win;
  4877. win = MessageBox.alert(message, function () {
  4878. choiceCallback();
  4879. });
  4880. win.on('close', function () {
  4881. closeCallback(win);
  4882. });
  4883. return win;
  4884. };
  4885. var confirm = function (message, choiceCallback, closeCallback) {
  4886. var win;
  4887. win = MessageBox.confirm(message, function (state) {
  4888. choiceCallback(state);
  4889. });
  4890. win.on('close', function () {
  4891. closeCallback(win);
  4892. });
  4893. return win;
  4894. };
  4895. var close = function (window) {
  4896. window.close();
  4897. };
  4898. var getParams = function (window) {
  4899. return window.params;
  4900. };
  4901. var setParams = function (window, params) {
  4902. window.params = params;
  4903. };
  4904. return {
  4905. open: open,
  4906. alert: alert,
  4907. confirm: confirm,
  4908. close: close,
  4909. getParams: getParams,
  4910. setParams: setParams
  4911. };
  4912. }
  4913. var get = function (editor) {
  4914. var renderUI = function (args) {
  4915. return $_5ent4szjh8lz3ja.renderUI(editor, this, args);
  4916. };
  4917. var resizeTo = function (w, h) {
  4918. return $_5toavetjjh8lz3ko.resizeTo(editor, w, h);
  4919. };
  4920. var resizeBy = function (dw, dh) {
  4921. return $_5toavetjjh8lz3ko.resizeBy(editor, dw, dh);
  4922. };
  4923. var getNotificationManagerImpl = function () {
  4924. return NotificationManagerImpl(editor);
  4925. };
  4926. var getWindowManagerImpl = function () {
  4927. return WindowManagerImpl(editor);
  4928. };
  4929. return {
  4930. renderUI: renderUI,
  4931. resizeTo: resizeTo,
  4932. resizeBy: resizeBy,
  4933. getNotificationManagerImpl: getNotificationManagerImpl,
  4934. getWindowManagerImpl: getWindowManagerImpl
  4935. };
  4936. };
  4937. var $_1os0v5syjh8lz3j9 = { get: get };
  4938. var Layout = global$10.extend({
  4939. Defaults: {
  4940. firstControlClass: 'first',
  4941. lastControlClass: 'last'
  4942. },
  4943. init: function (settings) {
  4944. this.settings = global$2.extend({}, this.Defaults, settings);
  4945. },
  4946. preRender: function (container) {
  4947. container.bodyClasses.add(this.settings.containerClass);
  4948. },
  4949. applyClasses: function (items) {
  4950. var self = this;
  4951. var settings = self.settings;
  4952. var firstClass, lastClass, firstItem, lastItem;
  4953. firstClass = settings.firstControlClass;
  4954. lastClass = settings.lastControlClass;
  4955. items.each(function (item) {
  4956. item.classes.remove(firstClass).remove(lastClass).add(settings.controlClass);
  4957. if (item.visible()) {
  4958. if (!firstItem) {
  4959. firstItem = item;
  4960. }
  4961. lastItem = item;
  4962. }
  4963. });
  4964. if (firstItem) {
  4965. firstItem.classes.add(firstClass);
  4966. }
  4967. if (lastItem) {
  4968. lastItem.classes.add(lastClass);
  4969. }
  4970. },
  4971. renderHtml: function (container) {
  4972. var self = this;
  4973. var html = '';
  4974. self.applyClasses(container.items());
  4975. container.items().each(function (item) {
  4976. html += item.renderHtml();
  4977. });
  4978. return html;
  4979. },
  4980. recalc: function () {
  4981. },
  4982. postRender: function () {
  4983. },
  4984. isNative: function () {
  4985. return false;
  4986. }
  4987. });
  4988. var AbsoluteLayout = Layout.extend({
  4989. Defaults: {
  4990. containerClass: 'abs-layout',
  4991. controlClass: 'abs-layout-item'
  4992. },
  4993. recalc: function (container) {
  4994. container.items().filter(':visible').each(function (ctrl) {
  4995. var settings = ctrl.settings;
  4996. ctrl.layoutRect({
  4997. x: settings.x,
  4998. y: settings.y,
  4999. w: settings.w,
  5000. h: settings.h
  5001. });
  5002. if (ctrl.recalc) {
  5003. ctrl.recalc();
  5004. }
  5005. });
  5006. },
  5007. renderHtml: function (container) {
  5008. return '<div id="' + container._id + '-absend" class="' + container.classPrefix + 'abs-end"></div>' + this._super(container);
  5009. }
  5010. });
  5011. var Button = Widget.extend({
  5012. Defaults: {
  5013. classes: 'widget btn',
  5014. role: 'button'
  5015. },
  5016. init: function (settings) {
  5017. var self = this;
  5018. var size;
  5019. self._super(settings);
  5020. settings = self.settings;
  5021. size = self.settings.size;
  5022. self.on('click mousedown', function (e) {
  5023. e.preventDefault();
  5024. });
  5025. self.on('touchstart', function (e) {
  5026. self.fire('click', e);
  5027. e.preventDefault();
  5028. });
  5029. if (settings.subtype) {
  5030. self.classes.add(settings.subtype);
  5031. }
  5032. if (size) {
  5033. self.classes.add('btn-' + size);
  5034. }
  5035. if (settings.icon) {
  5036. self.icon(settings.icon);
  5037. }
  5038. },
  5039. icon: function (icon) {
  5040. if (!arguments.length) {
  5041. return this.state.get('icon');
  5042. }
  5043. this.state.set('icon', icon);
  5044. return this;
  5045. },
  5046. repaint: function () {
  5047. var btnElm = this.getEl().firstChild;
  5048. var btnStyle;
  5049. if (btnElm) {
  5050. btnStyle = btnElm.style;
  5051. btnStyle.width = btnStyle.height = '100%';
  5052. }
  5053. this._super();
  5054. },
  5055. renderHtml: function () {
  5056. var self = this, id = self._id, prefix = self.classPrefix;
  5057. var icon = self.state.get('icon'), image;
  5058. var text = self.state.get('text');
  5059. var textHtml = '';
  5060. var ariaPressed;
  5061. var settings = self.settings;
  5062. image = settings.image;
  5063. if (image) {
  5064. icon = 'none';
  5065. if (typeof image !== 'string') {
  5066. image = window.getSelection ? image[0] : image[1];
  5067. }
  5068. image = ' style="background-image: url(\'' + image + '\')"';
  5069. } else {
  5070. image = '';
  5071. }
  5072. if (text) {
  5073. self.classes.add('btn-has-text');
  5074. textHtml = '<span class="' + prefix + 'txt">' + self.encode(text) + '</span>';
  5075. }
  5076. icon = icon ? prefix + 'ico ' + prefix + 'i-' + icon : '';
  5077. ariaPressed = typeof settings.active === 'boolean' ? ' aria-pressed="' + settings.active + '"' : '';
  5078. return '<div id="' + id + '" class="' + self.classes + '" tabindex="-1"' + ariaPressed + '>' + '<button id="' + id + '-button" role="presentation" type="button" tabindex="-1">' + (icon ? '<i class="' + icon + '"' + image + '></i>' : '') + textHtml + '</button>' + '</div>';
  5079. },
  5080. bindStates: function () {
  5081. var self = this, $ = self.$, textCls = self.classPrefix + 'txt';
  5082. function setButtonText(text) {
  5083. var $span = $('span.' + textCls, self.getEl());
  5084. if (text) {
  5085. if (!$span[0]) {
  5086. $('button:first', self.getEl()).append('<span class="' + textCls + '"></span>');
  5087. $span = $('span.' + textCls, self.getEl());
  5088. }
  5089. $span.html(self.encode(text));
  5090. } else {
  5091. $span.remove();
  5092. }
  5093. self.classes.toggle('btn-has-text', !!text);
  5094. }
  5095. self.state.on('change:text', function (e) {
  5096. setButtonText(e.value);
  5097. });
  5098. self.state.on('change:icon', function (e) {
  5099. var icon = e.value;
  5100. var prefix = self.classPrefix;
  5101. self.settings.icon = icon;
  5102. icon = icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : '';
  5103. var btnElm = self.getEl().firstChild;
  5104. var iconElm = btnElm.getElementsByTagName('i')[0];
  5105. if (icon) {
  5106. if (!iconElm || iconElm !== btnElm.firstChild) {
  5107. iconElm = document.createElement('i');
  5108. btnElm.insertBefore(iconElm, btnElm.firstChild);
  5109. }
  5110. iconElm.className = icon;
  5111. } else if (iconElm) {
  5112. btnElm.removeChild(iconElm);
  5113. }
  5114. setButtonText(self.state.get('text'));
  5115. });
  5116. return self._super();
  5117. }
  5118. });
  5119. var BrowseButton = Button.extend({
  5120. init: function (settings) {
  5121. var self = this;
  5122. settings = global$2.extend({
  5123. text: 'Browse...',
  5124. multiple: false,
  5125. accept: null
  5126. }, settings);
  5127. self._super(settings);
  5128. self.classes.add('browsebutton');
  5129. if (settings.multiple) {
  5130. self.classes.add('multiple');
  5131. }
  5132. },
  5133. postRender: function () {
  5134. var self = this;
  5135. var input = funcs.create('input', {
  5136. type: 'file',
  5137. id: self._id + '-browse',
  5138. accept: self.settings.accept
  5139. });
  5140. self._super();
  5141. global$9(input).on('change', function (e) {
  5142. var files = e.target.files;
  5143. self.value = function () {
  5144. if (!files.length) {
  5145. return null;
  5146. } else if (self.settings.multiple) {
  5147. return files;
  5148. } else {
  5149. return files[0];
  5150. }
  5151. };
  5152. e.preventDefault();
  5153. if (files.length) {
  5154. self.fire('change', e);
  5155. }
  5156. });
  5157. global$9(input).on('click', function (e) {
  5158. e.stopPropagation();
  5159. });
  5160. global$9(self.getEl('button')).on('click', function (e) {
  5161. e.stopPropagation();
  5162. input.click();
  5163. });
  5164. self.getEl().appendChild(input);
  5165. },
  5166. remove: function () {
  5167. global$9(this.getEl('button')).off();
  5168. global$9(this.getEl('input')).off();
  5169. this._super();
  5170. }
  5171. });
  5172. var ButtonGroup = Container.extend({
  5173. Defaults: {
  5174. defaultType: 'button',
  5175. role: 'group'
  5176. },
  5177. renderHtml: function () {
  5178. var self = this, layout = self._layout;
  5179. self.classes.add('btn-group');
  5180. self.preRender();
  5181. layout.preRender(self);
  5182. return '<div id="' + self._id + '" class="' + self.classes + '">' + '<div id="' + self._id + '-body">' + (self.settings.html || '') + layout.renderHtml(self) + '</div>' + '</div>';
  5183. }
  5184. });
  5185. var Checkbox = Widget.extend({
  5186. Defaults: {
  5187. classes: 'checkbox',
  5188. role: 'checkbox',
  5189. checked: false
  5190. },
  5191. init: function (settings) {
  5192. var self = this;
  5193. self._super(settings);
  5194. self.on('click mousedown', function (e) {
  5195. e.preventDefault();
  5196. });
  5197. self.on('click', function (e) {
  5198. e.preventDefault();
  5199. if (!self.disabled()) {
  5200. self.checked(!self.checked());
  5201. }
  5202. });
  5203. self.checked(self.settings.checked);
  5204. },
  5205. checked: function (state) {
  5206. if (!arguments.length) {
  5207. return this.state.get('checked');
  5208. }
  5209. this.state.set('checked', state);
  5210. return this;
  5211. },
  5212. value: function (state) {
  5213. if (!arguments.length) {
  5214. return this.checked();
  5215. }
  5216. return this.checked(state);
  5217. },
  5218. renderHtml: function () {
  5219. var self = this, id = self._id, prefix = self.classPrefix;
  5220. return '<div id="' + id + '" class="' + self.classes + '" unselectable="on" aria-labelledby="' + id + '-al" tabindex="-1">' + '<i class="' + prefix + 'ico ' + prefix + 'i-checkbox"></i>' + '<span id="' + id + '-al" class="' + prefix + 'label">' + self.encode(self.state.get('text')) + '</span>' + '</div>';
  5221. },
  5222. bindStates: function () {
  5223. var self = this;
  5224. function checked(state) {
  5225. self.classes.toggle('checked', state);
  5226. self.aria('checked', state);
  5227. }
  5228. self.state.on('change:text', function (e) {
  5229. self.getEl('al').firstChild.data = self.translate(e.value);
  5230. });
  5231. self.state.on('change:checked change:value', function (e) {
  5232. self.fire('change');
  5233. checked(e.value);
  5234. });
  5235. self.state.on('change:icon', function (e) {
  5236. var icon = e.value;
  5237. var prefix = self.classPrefix;
  5238. if (typeof icon === 'undefined') {
  5239. return self.settings.icon;
  5240. }
  5241. self.settings.icon = icon;
  5242. icon = icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : '';
  5243. var btnElm = self.getEl().firstChild;
  5244. var iconElm = btnElm.getElementsByTagName('i')[0];
  5245. if (icon) {
  5246. if (!iconElm || iconElm !== btnElm.firstChild) {
  5247. iconElm = document.createElement('i');
  5248. btnElm.insertBefore(iconElm, btnElm.firstChild);
  5249. }
  5250. iconElm.className = icon;
  5251. } else if (iconElm) {
  5252. btnElm.removeChild(iconElm);
  5253. }
  5254. });
  5255. if (self.state.get('checked')) {
  5256. checked(true);
  5257. }
  5258. return self._super();
  5259. }
  5260. });
  5261. var global$13 = tinymce.util.Tools.resolve('tinymce.util.VK');
  5262. var ComboBox = Widget.extend({
  5263. init: function (settings) {
  5264. var self = this;
  5265. self._super(settings);
  5266. settings = self.settings;
  5267. self.classes.add('combobox');
  5268. self.subinput = true;
  5269. self.ariaTarget = 'inp';
  5270. settings.menu = settings.menu || settings.values;
  5271. if (settings.menu) {
  5272. settings.icon = 'caret';
  5273. }
  5274. self.on('click', function (e) {
  5275. var elm = e.target;
  5276. var root = self.getEl();
  5277. if (!global$9.contains(root, elm) && elm !== root) {
  5278. return;
  5279. }
  5280. while (elm && elm !== root) {
  5281. if (elm.id && elm.id.indexOf('-open') !== -1) {
  5282. self.fire('action');
  5283. if (settings.menu) {
  5284. self.showMenu();
  5285. if (e.aria) {
  5286. self.menu.items()[0].focus();
  5287. }
  5288. }
  5289. }
  5290. elm = elm.parentNode;
  5291. }
  5292. });
  5293. self.on('keydown', function (e) {
  5294. var rootControl;
  5295. if (e.keyCode === 13 && e.target.nodeName === 'INPUT') {
  5296. e.preventDefault();
  5297. self.parents().reverse().each(function (ctrl) {
  5298. if (ctrl.toJSON) {
  5299. rootControl = ctrl;
  5300. return false;
  5301. }
  5302. });
  5303. self.fire('submit', { data: rootControl.toJSON() });
  5304. }
  5305. });
  5306. self.on('keyup', function (e) {
  5307. if (e.target.nodeName === 'INPUT') {
  5308. var oldValue = self.state.get('value');
  5309. var newValue = e.target.value;
  5310. if (newValue !== oldValue) {
  5311. self.state.set('value', newValue);
  5312. self.fire('autocomplete', e);
  5313. }
  5314. }
  5315. });
  5316. self.on('mouseover', function (e) {
  5317. var tooltip = self.tooltip().moveTo(-65535);
  5318. if (self.statusLevel() && e.target.className.indexOf(self.classPrefix + 'status') !== -1) {
  5319. var statusMessage = self.statusMessage() || 'Ok';
  5320. var rel = tooltip.text(statusMessage).show().testMoveRel(e.target, [
  5321. 'bc-tc',
  5322. 'bc-tl',
  5323. 'bc-tr'
  5324. ]);
  5325. tooltip.classes.toggle('tooltip-n', rel === 'bc-tc');
  5326. tooltip.classes.toggle('tooltip-nw', rel === 'bc-tl');
  5327. tooltip.classes.toggle('tooltip-ne', rel === 'bc-tr');
  5328. tooltip.moveRel(e.target, rel);
  5329. }
  5330. });
  5331. },
  5332. statusLevel: function (value) {
  5333. if (arguments.length > 0) {
  5334. this.state.set('statusLevel', value);
  5335. }
  5336. return this.state.get('statusLevel');
  5337. },
  5338. statusMessage: function (value) {
  5339. if (arguments.length > 0) {
  5340. this.state.set('statusMessage', value);
  5341. }
  5342. return this.state.get('statusMessage');
  5343. },
  5344. showMenu: function () {
  5345. var self = this;
  5346. var settings = self.settings;
  5347. var menu;
  5348. if (!self.menu) {
  5349. menu = settings.menu || [];
  5350. if (menu.length) {
  5351. menu = {
  5352. type: 'menu',
  5353. items: menu
  5354. };
  5355. } else {
  5356. menu.type = menu.type || 'menu';
  5357. }
  5358. self.menu = global$4.create(menu).parent(self).renderTo(self.getContainerElm());
  5359. self.fire('createmenu');
  5360. self.menu.reflow();
  5361. self.menu.on('cancel', function (e) {
  5362. if (e.control === self.menu) {
  5363. self.focus();
  5364. }
  5365. });
  5366. self.menu.on('show hide', function (e) {
  5367. e.control.items().each(function (ctrl) {
  5368. ctrl.active(ctrl.value() === self.value());
  5369. });
  5370. }).fire('show');
  5371. self.menu.on('select', function (e) {
  5372. self.value(e.control.value());
  5373. });
  5374. self.on('focusin', function (e) {
  5375. if (e.target.tagName.toUpperCase() === 'INPUT') {
  5376. self.menu.hide();
  5377. }
  5378. });
  5379. self.aria('expanded', true);
  5380. }
  5381. self.menu.show();
  5382. self.menu.layoutRect({ w: self.layoutRect().w });
  5383. self.menu.moveRel(self.getEl(), self.isRtl() ? [
  5384. 'br-tr',
  5385. 'tr-br'
  5386. ] : [
  5387. 'bl-tl',
  5388. 'tl-bl'
  5389. ]);
  5390. },
  5391. focus: function () {
  5392. this.getEl('inp').focus();
  5393. },
  5394. repaint: function () {
  5395. var self = this, elm = self.getEl(), openElm = self.getEl('open'), rect = self.layoutRect();
  5396. var width, lineHeight, innerPadding = 0;
  5397. var inputElm = elm.firstChild;
  5398. if (self.statusLevel() && self.statusLevel() !== 'none') {
  5399. innerPadding = parseInt(funcs.getRuntimeStyle(inputElm, 'padding-right'), 10) - parseInt(funcs.getRuntimeStyle(inputElm, 'padding-left'), 10);
  5400. }
  5401. if (openElm) {
  5402. width = rect.w - funcs.getSize(openElm).width - 10;
  5403. } else {
  5404. width = rect.w - 10;
  5405. }
  5406. var doc = document;
  5407. if (doc.all && (!doc.documentMode || doc.documentMode <= 8)) {
  5408. lineHeight = self.layoutRect().h - 2 + 'px';
  5409. }
  5410. global$9(inputElm).css({
  5411. width: width - innerPadding,
  5412. lineHeight: lineHeight
  5413. });
  5414. self._super();
  5415. return self;
  5416. },
  5417. postRender: function () {
  5418. var self = this;
  5419. global$9(this.getEl('inp')).on('change', function (e) {
  5420. self.state.set('value', e.target.value);
  5421. self.fire('change', e);
  5422. });
  5423. return self._super();
  5424. },
  5425. renderHtml: function () {
  5426. var self = this, id = self._id, settings = self.settings, prefix = self.classPrefix;
  5427. var value = self.state.get('value') || '';
  5428. var icon, text, openBtnHtml = '', extraAttrs = '', statusHtml = '';
  5429. if ('spellcheck' in settings) {
  5430. extraAttrs += ' spellcheck="' + settings.spellcheck + '"';
  5431. }
  5432. if (settings.maxLength) {
  5433. extraAttrs += ' maxlength="' + settings.maxLength + '"';
  5434. }
  5435. if (settings.size) {
  5436. extraAttrs += ' size="' + settings.size + '"';
  5437. }
  5438. if (settings.subtype) {
  5439. extraAttrs += ' type="' + settings.subtype + '"';
  5440. }
  5441. statusHtml = '<i id="' + id + '-status" class="mce-status mce-ico" style="display: none"></i>';
  5442. if (self.disabled()) {
  5443. extraAttrs += ' disabled="disabled"';
  5444. }
  5445. icon = settings.icon;
  5446. if (icon && icon !== 'caret') {
  5447. icon = prefix + 'ico ' + prefix + 'i-' + settings.icon;
  5448. }
  5449. text = self.state.get('text');
  5450. if (icon || text) {
  5451. openBtnHtml = '<div id="' + id + '-open" class="' + prefix + 'btn ' + prefix + 'open" tabIndex="-1" role="button">' + '<button id="' + id + '-action" type="button" hidefocus="1" tabindex="-1">' + (icon !== 'caret' ? '<i class="' + icon + '"></i>' : '<i class="' + prefix + 'caret"></i>') + (text ? (icon ? ' ' : '') + text : '') + '</button>' + '</div>';
  5452. self.classes.add('has-open');
  5453. }
  5454. return '<div id="' + id + '" class="' + self.classes + '">' + '<input id="' + id + '-inp" class="' + prefix + 'textbox" value="' + self.encode(value, false) + '" hidefocus="1"' + extraAttrs + ' placeholder="' + self.encode(settings.placeholder) + '" />' + statusHtml + openBtnHtml + '</div>';
  5455. },
  5456. value: function (value) {
  5457. if (arguments.length) {
  5458. this.state.set('value', value);
  5459. return this;
  5460. }
  5461. if (this.state.get('rendered')) {
  5462. this.state.set('value', this.getEl('inp').value);
  5463. }
  5464. return this.state.get('value');
  5465. },
  5466. showAutoComplete: function (items, term) {
  5467. var self = this;
  5468. if (items.length === 0) {
  5469. self.hideMenu();
  5470. return;
  5471. }
  5472. var insert = function (value, title) {
  5473. return function () {
  5474. self.fire('selectitem', {
  5475. title: title,
  5476. value: value
  5477. });
  5478. };
  5479. };
  5480. if (self.menu) {
  5481. self.menu.items().remove();
  5482. } else {
  5483. self.menu = global$4.create({
  5484. type: 'menu',
  5485. classes: 'combobox-menu',
  5486. layout: 'flow'
  5487. }).parent(self).renderTo();
  5488. }
  5489. global$2.each(items, function (item) {
  5490. self.menu.add({
  5491. text: item.title,
  5492. url: item.previewUrl,
  5493. match: term,
  5494. classes: 'menu-item-ellipsis',
  5495. onclick: insert(item.value, item.title)
  5496. });
  5497. });
  5498. self.menu.renderNew();
  5499. self.hideMenu();
  5500. self.menu.on('cancel', function (e) {
  5501. if (e.control.parent() === self.menu) {
  5502. e.stopPropagation();
  5503. self.focus();
  5504. self.hideMenu();
  5505. }
  5506. });
  5507. self.menu.on('select', function () {
  5508. self.focus();
  5509. });
  5510. var maxW = self.layoutRect().w;
  5511. self.menu.layoutRect({
  5512. w: maxW,
  5513. minW: 0,
  5514. maxW: maxW
  5515. });
  5516. self.menu.repaint();
  5517. self.menu.reflow();
  5518. self.menu.show();
  5519. self.menu.moveRel(self.getEl(), self.isRtl() ? [
  5520. 'br-tr',
  5521. 'tr-br'
  5522. ] : [
  5523. 'bl-tl',
  5524. 'tl-bl'
  5525. ]);
  5526. },
  5527. hideMenu: function () {
  5528. if (this.menu) {
  5529. this.menu.hide();
  5530. }
  5531. },
  5532. bindStates: function () {
  5533. var self = this;
  5534. self.state.on('change:value', function (e) {
  5535. if (self.getEl('inp').value !== e.value) {
  5536. self.getEl('inp').value = e.value;
  5537. }
  5538. });
  5539. self.state.on('change:disabled', function (e) {
  5540. self.getEl('inp').disabled = e.value;
  5541. });
  5542. self.state.on('change:statusLevel', function (e) {
  5543. var statusIconElm = self.getEl('status');
  5544. var prefix = self.classPrefix, value = e.value;
  5545. funcs.css(statusIconElm, 'display', value === 'none' ? 'none' : '');
  5546. funcs.toggleClass(statusIconElm, prefix + 'i-checkmark', value === 'ok');
  5547. funcs.toggleClass(statusIconElm, prefix + 'i-warning', value === 'warn');
  5548. funcs.toggleClass(statusIconElm, prefix + 'i-error', value === 'error');
  5549. self.classes.toggle('has-status', value !== 'none');
  5550. self.repaint();
  5551. });
  5552. funcs.on(self.getEl('status'), 'mouseleave', function () {
  5553. self.tooltip().hide();
  5554. });
  5555. self.on('cancel', function (e) {
  5556. if (self.menu && self.menu.visible()) {
  5557. e.stopPropagation();
  5558. self.hideMenu();
  5559. }
  5560. });
  5561. var focusIdx = function (idx, menu) {
  5562. if (menu && menu.items().length > 0) {
  5563. menu.items().eq(idx)[0].focus();
  5564. }
  5565. };
  5566. self.on('keydown', function (e) {
  5567. var keyCode = e.keyCode;
  5568. if (e.target.nodeName === 'INPUT') {
  5569. if (keyCode === global$13.DOWN) {
  5570. e.preventDefault();
  5571. self.fire('autocomplete');
  5572. focusIdx(0, self.menu);
  5573. } else if (keyCode === global$13.UP) {
  5574. e.preventDefault();
  5575. focusIdx(-1, self.menu);
  5576. }
  5577. }
  5578. });
  5579. return self._super();
  5580. },
  5581. remove: function () {
  5582. global$9(this.getEl('inp')).off();
  5583. if (this.menu) {
  5584. this.menu.remove();
  5585. }
  5586. this._super();
  5587. }
  5588. });
  5589. var ColorBox = ComboBox.extend({
  5590. init: function (settings) {
  5591. var self = this;
  5592. settings.spellcheck = false;
  5593. if (settings.onaction) {
  5594. settings.icon = 'none';
  5595. }
  5596. self._super(settings);
  5597. self.classes.add('colorbox');
  5598. self.on('change keyup postrender', function () {
  5599. self.repaintColor(self.value());
  5600. });
  5601. },
  5602. repaintColor: function (value) {
  5603. var openElm = this.getEl('open');
  5604. var elm = openElm ? openElm.getElementsByTagName('i')[0] : null;
  5605. if (elm) {
  5606. try {
  5607. elm.style.background = value;
  5608. } catch (ex) {
  5609. }
  5610. }
  5611. },
  5612. bindStates: function () {
  5613. var self = this;
  5614. self.state.on('change:value', function (e) {
  5615. if (self.state.get('rendered')) {
  5616. self.repaintColor(e.value);
  5617. }
  5618. });
  5619. return self._super();
  5620. }
  5621. });
  5622. var PanelButton = Button.extend({
  5623. showPanel: function () {
  5624. var self = this, settings = self.settings;
  5625. self.classes.add('opened');
  5626. if (!self.panel) {
  5627. var panelSettings = settings.panel;
  5628. if (panelSettings.type) {
  5629. panelSettings = {
  5630. layout: 'grid',
  5631. items: panelSettings
  5632. };
  5633. }
  5634. panelSettings.role = panelSettings.role || 'dialog';
  5635. panelSettings.popover = true;
  5636. panelSettings.autohide = true;
  5637. panelSettings.ariaRoot = true;
  5638. self.panel = new FloatPanel(panelSettings).on('hide', function () {
  5639. self.classes.remove('opened');
  5640. }).on('cancel', function (e) {
  5641. e.stopPropagation();
  5642. self.focus();
  5643. self.hidePanel();
  5644. }).parent(self).renderTo(self.getContainerElm());
  5645. self.panel.fire('show');
  5646. self.panel.reflow();
  5647. } else {
  5648. self.panel.show();
  5649. }
  5650. var rtlRels = [
  5651. 'bc-tc',
  5652. 'bc-tl',
  5653. 'bc-tr'
  5654. ];
  5655. var ltrRels = [
  5656. 'bc-tc',
  5657. 'bc-tr',
  5658. 'bc-tl',
  5659. 'tc-bc',
  5660. 'tc-br',
  5661. 'tc-bl'
  5662. ];
  5663. var rel = self.panel.testMoveRel(self.getEl(), settings.popoverAlign || (self.isRtl() ? rtlRels : ltrRels));
  5664. self.panel.classes.toggle('start', rel.substr(-1) === 'l');
  5665. self.panel.classes.toggle('end', rel.substr(-1) === 'r');
  5666. var isTop = rel.substr(0, 1) === 't';
  5667. self.panel.classes.toggle('bottom', !isTop);
  5668. self.panel.classes.toggle('top', isTop);
  5669. self.panel.moveRel(self.getEl(), rel);
  5670. },
  5671. hidePanel: function () {
  5672. var self = this;
  5673. if (self.panel) {
  5674. self.panel.hide();
  5675. }
  5676. },
  5677. postRender: function () {
  5678. var self = this;
  5679. self.aria('haspopup', true);
  5680. self.on('click', function (e) {
  5681. if (e.control === self) {
  5682. if (self.panel && self.panel.visible()) {
  5683. self.hidePanel();
  5684. } else {
  5685. self.showPanel();
  5686. self.panel.focus(!!e.aria);
  5687. }
  5688. }
  5689. });
  5690. return self._super();
  5691. },
  5692. remove: function () {
  5693. if (this.panel) {
  5694. this.panel.remove();
  5695. this.panel = null;
  5696. }
  5697. return this._super();
  5698. }
  5699. });
  5700. var DOM$3 = global$3.DOM;
  5701. var ColorButton = PanelButton.extend({
  5702. init: function (settings) {
  5703. this._super(settings);
  5704. this.classes.add('splitbtn');
  5705. this.classes.add('colorbutton');
  5706. },
  5707. color: function (color) {
  5708. if (color) {
  5709. this._color = color;
  5710. this.getEl('preview').style.backgroundColor = color;
  5711. return this;
  5712. }
  5713. return this._color;
  5714. },
  5715. resetColor: function () {
  5716. this._color = null;
  5717. this.getEl('preview').style.backgroundColor = null;
  5718. return this;
  5719. },
  5720. renderHtml: function () {
  5721. var self = this, id = self._id, prefix = self.classPrefix, text = self.state.get('text');
  5722. var icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : '';
  5723. var image = self.settings.image ? ' style="background-image: url(\'' + self.settings.image + '\')"' : '';
  5724. var textHtml = '';
  5725. if (text) {
  5726. self.classes.add('btn-has-text');
  5727. textHtml = '<span class="' + prefix + 'txt">' + self.encode(text) + '</span>';
  5728. }
  5729. return '<div id="' + id + '" class="' + self.classes + '" role="button" tabindex="-1" aria-haspopup="true">' + '<button role="presentation" hidefocus="1" type="button" tabindex="-1">' + (icon ? '<i class="' + icon + '"' + image + '></i>' : '') + '<span id="' + id + '-preview" class="' + prefix + 'preview"></span>' + textHtml + '</button>' + '<button type="button" class="' + prefix + 'open" hidefocus="1" tabindex="-1">' + ' <i class="' + prefix + 'caret"></i>' + '</button>' + '</div>';
  5730. },
  5731. postRender: function () {
  5732. var self = this, onClickHandler = self.settings.onclick;
  5733. self.on('click', function (e) {
  5734. if (e.aria && e.aria.key === 'down') {
  5735. return;
  5736. }
  5737. if (e.control === self && !DOM$3.getParent(e.target, '.' + self.classPrefix + 'open')) {
  5738. e.stopImmediatePropagation();
  5739. onClickHandler.call(self, e);
  5740. }
  5741. });
  5742. delete self.settings.onclick;
  5743. return self._super();
  5744. }
  5745. });
  5746. var global$14 = tinymce.util.Tools.resolve('tinymce.util.Color');
  5747. var ColorPicker = Widget.extend({
  5748. Defaults: { classes: 'widget colorpicker' },
  5749. init: function (settings) {
  5750. this._super(settings);
  5751. },
  5752. postRender: function () {
  5753. var self = this;
  5754. var color = self.color();
  5755. var hsv, hueRootElm, huePointElm, svRootElm, svPointElm;
  5756. hueRootElm = self.getEl('h');
  5757. huePointElm = self.getEl('hp');
  5758. svRootElm = self.getEl('sv');
  5759. svPointElm = self.getEl('svp');
  5760. function getPos(elm, event) {
  5761. var pos = funcs.getPos(elm);
  5762. var x, y;
  5763. x = event.pageX - pos.x;
  5764. y = event.pageY - pos.y;
  5765. x = Math.max(0, Math.min(x / elm.clientWidth, 1));
  5766. y = Math.max(0, Math.min(y / elm.clientHeight, 1));
  5767. return {
  5768. x: x,
  5769. y: y
  5770. };
  5771. }
  5772. function updateColor(hsv, hueUpdate) {
  5773. var hue = (360 - hsv.h) / 360;
  5774. funcs.css(huePointElm, { top: hue * 100 + '%' });
  5775. if (!hueUpdate) {
  5776. funcs.css(svPointElm, {
  5777. left: hsv.s + '%',
  5778. top: 100 - hsv.v + '%'
  5779. });
  5780. }
  5781. svRootElm.style.background = global$14({
  5782. s: 100,
  5783. v: 100,
  5784. h: hsv.h
  5785. }).toHex();
  5786. self.color().parse({
  5787. s: hsv.s,
  5788. v: hsv.v,
  5789. h: hsv.h
  5790. });
  5791. }
  5792. function updateSaturationAndValue(e) {
  5793. var pos;
  5794. pos = getPos(svRootElm, e);
  5795. hsv.s = pos.x * 100;
  5796. hsv.v = (1 - pos.y) * 100;
  5797. updateColor(hsv);
  5798. self.fire('change');
  5799. }
  5800. function updateHue(e) {
  5801. var pos;
  5802. pos = getPos(hueRootElm, e);
  5803. hsv = color.toHsv();
  5804. hsv.h = (1 - pos.y) * 360;
  5805. updateColor(hsv, true);
  5806. self.fire('change');
  5807. }
  5808. self._repaint = function () {
  5809. hsv = color.toHsv();
  5810. updateColor(hsv);
  5811. };
  5812. self._super();
  5813. self._svdraghelper = new DragHelper(self._id + '-sv', {
  5814. start: updateSaturationAndValue,
  5815. drag: updateSaturationAndValue
  5816. });
  5817. self._hdraghelper = new DragHelper(self._id + '-h', {
  5818. start: updateHue,
  5819. drag: updateHue
  5820. });
  5821. self._repaint();
  5822. },
  5823. rgb: function () {
  5824. return this.color().toRgb();
  5825. },
  5826. value: function (value) {
  5827. var self = this;
  5828. if (arguments.length) {
  5829. self.color().parse(value);
  5830. if (self._rendered) {
  5831. self._repaint();
  5832. }
  5833. } else {
  5834. return self.color().toHex();
  5835. }
  5836. },
  5837. color: function () {
  5838. if (!this._color) {
  5839. this._color = global$14();
  5840. }
  5841. return this._color;
  5842. },
  5843. renderHtml: function () {
  5844. var self = this;
  5845. var id = self._id;
  5846. var prefix = self.classPrefix;
  5847. var hueHtml;
  5848. var stops = '#ff0000,#ff0080,#ff00ff,#8000ff,#0000ff,#0080ff,#00ffff,#00ff80,#00ff00,#80ff00,#ffff00,#ff8000,#ff0000';
  5849. function getOldIeFallbackHtml() {
  5850. var i, l, html = '', gradientPrefix, stopsList;
  5851. gradientPrefix = 'filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr=';
  5852. stopsList = stops.split(',');
  5853. for (i = 0, l = stopsList.length - 1; i < l; i++) {
  5854. html += '<div class="' + prefix + 'colorpicker-h-chunk" style="' + 'height:' + 100 / l + '%;' + gradientPrefix + stopsList[i] + ',endColorstr=' + stopsList[i + 1] + ');' + '-ms-' + gradientPrefix + stopsList[i] + ',endColorstr=' + stopsList[i + 1] + ')' + '"></div>';
  5855. }
  5856. return html;
  5857. }
  5858. var gradientCssText = 'background: -ms-linear-gradient(top,' + stops + ');' + 'background: linear-gradient(to bottom,' + stops + ');';
  5859. hueHtml = '<div id="' + id + '-h" class="' + prefix + 'colorpicker-h" style="' + gradientCssText + '">' + getOldIeFallbackHtml() + '<div id="' + id + '-hp" class="' + prefix + 'colorpicker-h-marker"></div>' + '</div>';
  5860. return '<div id="' + id + '" class="' + self.classes + '">' + '<div id="' + id + '-sv" class="' + prefix + 'colorpicker-sv">' + '<div class="' + prefix + 'colorpicker-overlay1">' + '<div class="' + prefix + 'colorpicker-overlay2">' + '<div id="' + id + '-svp" class="' + prefix + 'colorpicker-selector1">' + '<div class="' + prefix + 'colorpicker-selector2"></div>' + '</div>' + '</div>' + '</div>' + '</div>' + hueHtml + '</div>';
  5861. }
  5862. });
  5863. var DropZone = Widget.extend({
  5864. init: function (settings) {
  5865. var self = this;
  5866. settings = global$2.extend({
  5867. height: 100,
  5868. text: 'Drop an image here',
  5869. multiple: false,
  5870. accept: null
  5871. }, settings);
  5872. self._super(settings);
  5873. self.classes.add('dropzone');
  5874. if (settings.multiple) {
  5875. self.classes.add('multiple');
  5876. }
  5877. },
  5878. renderHtml: function () {
  5879. var self = this;
  5880. var attrs, elm;
  5881. var cfg = self.settings;
  5882. attrs = {
  5883. id: self._id,
  5884. hidefocus: '1'
  5885. };
  5886. elm = funcs.create('div', attrs, '<span>' + this.translate(cfg.text) + '</span>');
  5887. if (cfg.height) {
  5888. funcs.css(elm, 'height', cfg.height + 'px');
  5889. }
  5890. if (cfg.width) {
  5891. funcs.css(elm, 'width', cfg.width + 'px');
  5892. }
  5893. elm.className = self.classes;
  5894. return elm.outerHTML;
  5895. },
  5896. postRender: function () {
  5897. var self = this;
  5898. var toggleDragClass = function (e) {
  5899. e.preventDefault();
  5900. self.classes.toggle('dragenter');
  5901. self.getEl().className = self.classes;
  5902. };
  5903. var filter = function (files) {
  5904. var accept = self.settings.accept;
  5905. if (typeof accept !== 'string') {
  5906. return files;
  5907. }
  5908. var re = new RegExp('(' + accept.split(/\s*,\s*/).join('|') + ')$', 'i');
  5909. return global$2.grep(files, function (file) {
  5910. return re.test(file.name);
  5911. });
  5912. };
  5913. self._super();
  5914. self.$el.on('dragover', function (e) {
  5915. e.preventDefault();
  5916. });
  5917. self.$el.on('dragenter', toggleDragClass);
  5918. self.$el.on('dragleave', toggleDragClass);
  5919. self.$el.on('drop', function (e) {
  5920. e.preventDefault();
  5921. if (self.state.get('disabled')) {
  5922. return;
  5923. }
  5924. var files = filter(e.dataTransfer.files);
  5925. self.value = function () {
  5926. if (!files.length) {
  5927. return null;
  5928. } else if (self.settings.multiple) {
  5929. return files;
  5930. } else {
  5931. return files[0];
  5932. }
  5933. };
  5934. if (files.length) {
  5935. self.fire('change', e);
  5936. }
  5937. });
  5938. },
  5939. remove: function () {
  5940. this.$el.off();
  5941. this._super();
  5942. }
  5943. });
  5944. var Path = Widget.extend({
  5945. init: function (settings) {
  5946. var self = this;
  5947. if (!settings.delimiter) {
  5948. settings.delimiter = '\xBB';
  5949. }
  5950. self._super(settings);
  5951. self.classes.add('path');
  5952. self.canFocus = true;
  5953. self.on('click', function (e) {
  5954. var index;
  5955. var target = e.target;
  5956. if (index = target.getAttribute('data-index')) {
  5957. self.fire('select', {
  5958. value: self.row()[index],
  5959. index: index
  5960. });
  5961. }
  5962. });
  5963. self.row(self.settings.row);
  5964. },
  5965. focus: function () {
  5966. var self = this;
  5967. self.getEl().firstChild.focus();
  5968. return self;
  5969. },
  5970. row: function (row) {
  5971. if (!arguments.length) {
  5972. return this.state.get('row');
  5973. }
  5974. this.state.set('row', row);
  5975. return this;
  5976. },
  5977. renderHtml: function () {
  5978. var self = this;
  5979. return '<div id="' + self._id + '" class="' + self.classes + '">' + self._getDataPathHtml(self.state.get('row')) + '</div>';
  5980. },
  5981. bindStates: function () {
  5982. var self = this;
  5983. self.state.on('change:row', function (e) {
  5984. self.innerHtml(self._getDataPathHtml(e.value));
  5985. });
  5986. return self._super();
  5987. },
  5988. _getDataPathHtml: function (data) {
  5989. var self = this;
  5990. var parts = data || [];
  5991. var i, l, html = '';
  5992. var prefix = self.classPrefix;
  5993. for (i = 0, l = parts.length; i < l; i++) {
  5994. html += (i > 0 ? '<div class="' + prefix + 'divider" aria-hidden="true"> ' + self.settings.delimiter + ' </div>' : '') + '<div role="button" class="' + prefix + 'path-item' + (i === l - 1 ? ' ' + prefix + 'last' : '') + '" data-index="' + i + '" tabindex="-1" id="' + self._id + '-' + i + '" aria-level="' + (i + 1) + '">' + parts[i].name + '</div>';
  5995. }
  5996. if (!html) {
  5997. html = '<div class="' + prefix + 'path-item">\xA0</div>';
  5998. }
  5999. return html;
  6000. }
  6001. });
  6002. var ElementPath = Path.extend({
  6003. postRender: function () {
  6004. var self = this, editor = self.settings.editor;
  6005. function isHidden(elm) {
  6006. if (elm.nodeType === 1) {
  6007. if (elm.nodeName === 'BR' || !!elm.getAttribute('data-mce-bogus')) {
  6008. return true;
  6009. }
  6010. if (elm.getAttribute('data-mce-type') === 'bookmark') {
  6011. return true;
  6012. }
  6013. }
  6014. return false;
  6015. }
  6016. if (editor.settings.elementpath !== false) {
  6017. self.on('select', function (e) {
  6018. editor.focus();
  6019. editor.selection.select(this.row()[e.index].element);
  6020. editor.nodeChanged();
  6021. });
  6022. editor.on('nodeChange', function (e) {
  6023. var outParents = [];
  6024. var parents = e.parents;
  6025. var i = parents.length;
  6026. while (i--) {
  6027. if (parents[i].nodeType === 1 && !isHidden(parents[i])) {
  6028. var args = editor.fire('ResolveName', {
  6029. name: parents[i].nodeName.toLowerCase(),
  6030. target: parents[i]
  6031. });
  6032. if (!args.isDefaultPrevented()) {
  6033. outParents.push({
  6034. name: args.name,
  6035. element: parents[i]
  6036. });
  6037. }
  6038. if (args.isPropagationStopped()) {
  6039. break;
  6040. }
  6041. }
  6042. }
  6043. self.row(outParents);
  6044. });
  6045. }
  6046. return self._super();
  6047. }
  6048. });
  6049. var FormItem = Container.extend({
  6050. Defaults: {
  6051. layout: 'flex',
  6052. align: 'center',
  6053. defaults: { flex: 1 }
  6054. },
  6055. renderHtml: function () {
  6056. var self = this, layout = self._layout, prefix = self.classPrefix;
  6057. self.classes.add('formitem');
  6058. layout.preRender(self);
  6059. return '<div id="' + self._id + '" class="' + self.classes + '" hidefocus="1" tabindex="-1">' + (self.settings.title ? '<div id="' + self._id + '-title" class="' + prefix + 'title">' + self.settings.title + '</div>' : '') + '<div id="' + self._id + '-body" class="' + self.bodyClasses + '">' + (self.settings.html || '') + layout.renderHtml(self) + '</div>' + '</div>';
  6060. }
  6061. });
  6062. var Form = Container.extend({
  6063. Defaults: {
  6064. containerCls: 'form',
  6065. layout: 'flex',
  6066. direction: 'column',
  6067. align: 'stretch',
  6068. flex: 1,
  6069. padding: 15,
  6070. labelGap: 30,
  6071. spacing: 10,
  6072. callbacks: {
  6073. submit: function () {
  6074. this.submit();
  6075. }
  6076. }
  6077. },
  6078. preRender: function () {
  6079. var self = this, items = self.items();
  6080. if (!self.settings.formItemDefaults) {
  6081. self.settings.formItemDefaults = {
  6082. layout: 'flex',
  6083. autoResize: 'overflow',
  6084. defaults: { flex: 1 }
  6085. };
  6086. }
  6087. items.each(function (ctrl) {
  6088. var formItem;
  6089. var label = ctrl.settings.label;
  6090. if (label) {
  6091. formItem = new FormItem(global$2.extend({
  6092. items: {
  6093. type: 'label',
  6094. id: ctrl._id + '-l',
  6095. text: label,
  6096. flex: 0,
  6097. forId: ctrl._id,
  6098. disabled: ctrl.disabled()
  6099. }
  6100. }, self.settings.formItemDefaults));
  6101. formItem.type = 'formitem';
  6102. ctrl.aria('labelledby', ctrl._id + '-l');
  6103. if (typeof ctrl.settings.flex === 'undefined') {
  6104. ctrl.settings.flex = 1;
  6105. }
  6106. self.replace(ctrl, formItem);
  6107. formItem.add(ctrl);
  6108. }
  6109. });
  6110. },
  6111. submit: function () {
  6112. return this.fire('submit', { data: this.toJSON() });
  6113. },
  6114. postRender: function () {
  6115. var self = this;
  6116. self._super();
  6117. self.fromJSON(self.settings.data);
  6118. },
  6119. bindStates: function () {
  6120. var self = this;
  6121. self._super();
  6122. function recalcLabels() {
  6123. var maxLabelWidth = 0;
  6124. var labels = [];
  6125. var i, labelGap, items;
  6126. if (self.settings.labelGapCalc === false) {
  6127. return;
  6128. }
  6129. if (self.settings.labelGapCalc === 'children') {
  6130. items = self.find('formitem');
  6131. } else {
  6132. items = self.items();
  6133. }
  6134. items.filter('formitem').each(function (item) {
  6135. var labelCtrl = item.items()[0], labelWidth = labelCtrl.getEl().clientWidth;
  6136. maxLabelWidth = labelWidth > maxLabelWidth ? labelWidth : maxLabelWidth;
  6137. labels.push(labelCtrl);
  6138. });
  6139. labelGap = self.settings.labelGap || 0;
  6140. i = labels.length;
  6141. while (i--) {
  6142. labels[i].settings.minWidth = maxLabelWidth + labelGap;
  6143. }
  6144. }
  6145. self.on('show', recalcLabels);
  6146. recalcLabels();
  6147. }
  6148. });
  6149. var FieldSet = Form.extend({
  6150. Defaults: {
  6151. containerCls: 'fieldset',
  6152. layout: 'flex',
  6153. direction: 'column',
  6154. align: 'stretch',
  6155. flex: 1,
  6156. padding: '25 15 5 15',
  6157. labelGap: 30,
  6158. spacing: 10,
  6159. border: 1
  6160. },
  6161. renderHtml: function () {
  6162. var self = this, layout = self._layout, prefix = self.classPrefix;
  6163. self.preRender();
  6164. layout.preRender(self);
  6165. return '<fieldset id="' + self._id + '" class="' + self.classes + '" hidefocus="1" tabindex="-1">' + (self.settings.title ? '<legend id="' + self._id + '-title" class="' + prefix + 'fieldset-title">' + self.settings.title + '</legend>' : '') + '<div id="' + self._id + '-body" class="' + self.bodyClasses + '">' + (self.settings.html || '') + layout.renderHtml(self) + '</div>' + '</fieldset>';
  6166. }
  6167. });
  6168. var unique$1 = 0;
  6169. var generate = function (prefix) {
  6170. var date = new Date();
  6171. var time = date.getTime();
  6172. var random = Math.floor(Math.random() * 1000000000);
  6173. unique$1++;
  6174. return prefix + '_' + random + unique$1 + String(time);
  6175. };
  6176. var $_gdeezvv5jh8lz3rl = { generate: generate };
  6177. var fromHtml = function (html, scope) {
  6178. var doc = scope || document;
  6179. var div = doc.createElement('div');
  6180. div.innerHTML = html;
  6181. if (!div.hasChildNodes() || div.childNodes.length > 1) {
  6182. console.error('HTML does not have a single root node', html);
  6183. throw 'HTML must have a single root node';
  6184. }
  6185. return fromDom(div.childNodes[0]);
  6186. };
  6187. var fromTag = function (tag, scope) {
  6188. var doc = scope || document;
  6189. var node = doc.createElement(tag);
  6190. return fromDom(node);
  6191. };
  6192. var fromText = function (text, scope) {
  6193. var doc = scope || document;
  6194. var node = doc.createTextNode(text);
  6195. return fromDom(node);
  6196. };
  6197. var fromDom = function (node) {
  6198. if (node === null || node === undefined)
  6199. throw new Error('Node cannot be null or undefined');
  6200. return { dom: $_3pjweotejh8lz3k4.constant(node) };
  6201. };
  6202. var fromPoint = function (doc, x, y) {
  6203. return Option.from(doc.dom().elementFromPoint(x, y)).map(fromDom);
  6204. };
  6205. var $_3bkrfxv6jh8lz3rm = {
  6206. fromHtml: fromHtml,
  6207. fromTag: fromTag,
  6208. fromText: fromText,
  6209. fromDom: fromDom,
  6210. fromPoint: fromPoint
  6211. };
  6212. var cached = function (f) {
  6213. var called = false;
  6214. var r;
  6215. return function () {
  6216. if (!called) {
  6217. called = true;
  6218. r = f.apply(null, arguments);
  6219. }
  6220. return r;
  6221. };
  6222. };
  6223. var $_8me1xevajh8lz3s0 = { cached: cached };
  6224. var $_8xkvw6vcjh8lz3s2 = {
  6225. ATTRIBUTE: 2,
  6226. CDATA_SECTION: 4,
  6227. COMMENT: 8,
  6228. DOCUMENT: 9,
  6229. DOCUMENT_TYPE: 10,
  6230. DOCUMENT_FRAGMENT: 11,
  6231. ELEMENT: 1,
  6232. TEXT: 3,
  6233. PROCESSING_INSTRUCTION: 7,
  6234. ENTITY_REFERENCE: 5,
  6235. ENTITY: 6,
  6236. NOTATION: 12
  6237. };
  6238. var name = function (element) {
  6239. var r = element.dom().nodeName;
  6240. return r.toLowerCase();
  6241. };
  6242. var type = function (element) {
  6243. return element.dom().nodeType;
  6244. };
  6245. var value = function (element) {
  6246. return element.dom().nodeValue;
  6247. };
  6248. var isType$1 = function (t) {
  6249. return function (element) {
  6250. return type(element) === t;
  6251. };
  6252. };
  6253. var isComment = function (element) {
  6254. return type(element) === $_8xkvw6vcjh8lz3s2.COMMENT || name(element) === '#comment';
  6255. };
  6256. var isElement = isType$1($_8xkvw6vcjh8lz3s2.ELEMENT);
  6257. var isText = isType$1($_8xkvw6vcjh8lz3s2.TEXT);
  6258. var isDocument = isType$1($_8xkvw6vcjh8lz3s2.DOCUMENT);
  6259. var $_11h2nlvbjh8lz3s1 = {
  6260. name: name,
  6261. type: type,
  6262. value: value,
  6263. isElement: isElement,
  6264. isText: isText,
  6265. isDocument: isDocument,
  6266. isComment: isComment
  6267. };
  6268. var inBody = function (element) {
  6269. var dom = $_11h2nlvbjh8lz3s1.isText(element) ? element.dom().parentNode : element.dom();
  6270. return dom !== undefined && dom !== null && dom.ownerDocument.body.contains(dom);
  6271. };
  6272. var body = $_8me1xevajh8lz3s0.cached(function () {
  6273. return getBody($_3bkrfxv6jh8lz3rm.fromDom(document));
  6274. });
  6275. var getBody = function (doc) {
  6276. var body = doc.dom().body;
  6277. if (body === null || body === undefined)
  6278. throw 'Body is not available yet';
  6279. return $_3bkrfxv6jh8lz3rm.fromDom(body);
  6280. };
  6281. var $_35bizev9jh8lz3rx = {
  6282. body: body,
  6283. getBody: getBody,
  6284. inBody: inBody
  6285. };
  6286. function Immutable () {
  6287. var fields = [];
  6288. for (var _i = 0; _i < arguments.length; _i++) {
  6289. fields[_i] = arguments[_i];
  6290. }
  6291. return function () {
  6292. var values = [];
  6293. for (var _i = 0; _i < arguments.length; _i++) {
  6294. values[_i] = arguments[_i];
  6295. }
  6296. if (fields.length !== values.length) {
  6297. throw new Error('Wrong number of arguments to struct. Expected "[' + fields.length + ']", got ' + values.length + ' arguments');
  6298. }
  6299. var struct = {};
  6300. $_f3qxhzthjh8lz3kg.each(fields, function (name, i) {
  6301. struct[name] = $_3pjweotejh8lz3k4.constant(values[i]);
  6302. });
  6303. return struct;
  6304. };
  6305. }
  6306. var keys = function () {
  6307. var fastKeys = Object.keys;
  6308. var slowKeys = function (o) {
  6309. var r = [];
  6310. for (var i in o) {
  6311. if (o.hasOwnProperty(i)) {
  6312. r.push(i);
  6313. }
  6314. }
  6315. return r;
  6316. };
  6317. return fastKeys === undefined ? slowKeys : fastKeys;
  6318. }();
  6319. var each$1 = function (obj, f) {
  6320. var props = keys(obj);
  6321. for (var k = 0, len = props.length; k < len; k++) {
  6322. var i = props[k];
  6323. var x = obj[i];
  6324. f(x, i, obj);
  6325. }
  6326. };
  6327. var objectMap = function (obj, f) {
  6328. return tupleMap(obj, function (x, i, obj) {
  6329. return {
  6330. k: i,
  6331. v: f(x, i, obj)
  6332. };
  6333. });
  6334. };
  6335. var tupleMap = function (obj, f) {
  6336. var r = {};
  6337. each$1(obj, function (x, i) {
  6338. var tuple = f(x, i, obj);
  6339. r[tuple.k] = tuple.v;
  6340. });
  6341. return r;
  6342. };
  6343. var bifilter = function (obj, pred) {
  6344. var t = {};
  6345. var f = {};
  6346. each$1(obj, function (x, i) {
  6347. var branch = pred(x, i) ? t : f;
  6348. branch[i] = x;
  6349. });
  6350. return {
  6351. t: t,
  6352. f: f
  6353. };
  6354. };
  6355. var mapToArray = function (obj, f) {
  6356. var r = [];
  6357. each$1(obj, function (value, name) {
  6358. r.push(f(value, name));
  6359. });
  6360. return r;
  6361. };
  6362. var find$1 = function (obj, pred) {
  6363. var props = keys(obj);
  6364. for (var k = 0, len = props.length; k < len; k++) {
  6365. var i = props[k];
  6366. var x = obj[i];
  6367. if (pred(x, i, obj)) {
  6368. return Option.some(x);
  6369. }
  6370. }
  6371. return Option.none();
  6372. };
  6373. var values = function (obj) {
  6374. return mapToArray(obj, function (v) {
  6375. return v;
  6376. });
  6377. };
  6378. var size = function (obj) {
  6379. return values(obj).length;
  6380. };
  6381. var $_el35e0vhjh8lz3sl = {
  6382. bifilter: bifilter,
  6383. each: each$1,
  6384. map: objectMap,
  6385. mapToArray: mapToArray,
  6386. tupleMap: tupleMap,
  6387. find: find$1,
  6388. keys: keys,
  6389. values: values,
  6390. size: size
  6391. };
  6392. var sort$1 = function (arr) {
  6393. return arr.slice(0).sort();
  6394. };
  6395. var reqMessage = function (required, keys) {
  6396. throw new Error('All required keys (' + sort$1(required).join(', ') + ') were not specified. Specified keys were: ' + sort$1(keys).join(', ') + '.');
  6397. };
  6398. var unsuppMessage = function (unsupported) {
  6399. throw new Error('Unsupported keys for object: ' + sort$1(unsupported).join(', '));
  6400. };
  6401. var validateStrArr = function (label, array) {
  6402. if (!$_d8bie3tijh8lz3kn.isArray(array))
  6403. throw new Error('The ' + label + ' fields must be an array. Was: ' + array + '.');
  6404. $_f3qxhzthjh8lz3kg.each(array, function (a) {
  6405. if (!$_d8bie3tijh8lz3kn.isString(a))
  6406. throw new Error('The value ' + a + ' in the ' + label + ' fields was not a string.');
  6407. });
  6408. };
  6409. var invalidTypeMessage = function (incorrect, type) {
  6410. throw new Error('All values need to be of type: ' + type + '. Keys (' + sort$1(incorrect).join(', ') + ') were not.');
  6411. };
  6412. var checkDupes = function (everything) {
  6413. var sorted = sort$1(everything);
  6414. var dupe = $_f3qxhzthjh8lz3kg.find(sorted, function (s, i) {
  6415. return i < sorted.length - 1 && s === sorted[i + 1];
  6416. });
  6417. dupe.each(function (d) {
  6418. throw new Error('The field: ' + d + ' occurs more than once in the combined fields: [' + sorted.join(', ') + '].');
  6419. });
  6420. };
  6421. var $_6xoomwvijh8lz3sn = {
  6422. sort: sort$1,
  6423. reqMessage: reqMessage,
  6424. unsuppMessage: unsuppMessage,
  6425. validateStrArr: validateStrArr,
  6426. invalidTypeMessage: invalidTypeMessage,
  6427. checkDupes: checkDupes
  6428. };
  6429. function MixedBag (required, optional) {
  6430. var everything = required.concat(optional);
  6431. if (everything.length === 0)
  6432. throw new Error('You must specify at least one required or optional field.');
  6433. $_6xoomwvijh8lz3sn.validateStrArr('required', required);
  6434. $_6xoomwvijh8lz3sn.validateStrArr('optional', optional);
  6435. $_6xoomwvijh8lz3sn.checkDupes(everything);
  6436. return function (obj) {
  6437. var keys = $_el35e0vhjh8lz3sl.keys(obj);
  6438. var allReqd = $_f3qxhzthjh8lz3kg.forall(required, function (req) {
  6439. return $_f3qxhzthjh8lz3kg.contains(keys, req);
  6440. });
  6441. if (!allReqd)
  6442. $_6xoomwvijh8lz3sn.reqMessage(required, keys);
  6443. var unsupported = $_f3qxhzthjh8lz3kg.filter(keys, function (key) {
  6444. return !$_f3qxhzthjh8lz3kg.contains(everything, key);
  6445. });
  6446. if (unsupported.length > 0)
  6447. $_6xoomwvijh8lz3sn.unsuppMessage(unsupported);
  6448. var r = {};
  6449. $_f3qxhzthjh8lz3kg.each(required, function (req) {
  6450. r[req] = $_3pjweotejh8lz3k4.constant(obj[req]);
  6451. });
  6452. $_f3qxhzthjh8lz3kg.each(optional, function (opt) {
  6453. r[opt] = $_3pjweotejh8lz3k4.constant(Object.prototype.hasOwnProperty.call(obj, opt) ? Option.some(obj[opt]) : Option.none());
  6454. });
  6455. return r;
  6456. };
  6457. }
  6458. var $_57mdu6vejh8lz3sg = {
  6459. immutable: Immutable,
  6460. immutableBag: MixedBag
  6461. };
  6462. var toArray = function (target, f) {
  6463. var r = [];
  6464. var recurse = function (e) {
  6465. r.push(e);
  6466. return f(e);
  6467. };
  6468. var cur = f(target);
  6469. do {
  6470. cur = cur.bind(recurse);
  6471. } while (cur.isSome());
  6472. return r;
  6473. };
  6474. var $_861s8bvjjh8lz3sp = { toArray: toArray };
  6475. var global$15 = typeof window !== 'undefined' ? window : Function('return this;')();
  6476. var path = function (parts, scope) {
  6477. var o = scope !== undefined && scope !== null ? scope : global$15;
  6478. for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i)
  6479. o = o[parts[i]];
  6480. return o;
  6481. };
  6482. var resolve = function (p, scope) {
  6483. var parts = p.split('.');
  6484. return path(parts, scope);
  6485. };
  6486. var step = function (o, part) {
  6487. if (o[part] === undefined || o[part] === null)
  6488. o[part] = {};
  6489. return o[part];
  6490. };
  6491. var forge = function (parts, target) {
  6492. var o = target !== undefined ? target : global$15;
  6493. for (var i = 0; i < parts.length; ++i)
  6494. o = step(o, parts[i]);
  6495. return o;
  6496. };
  6497. var namespace = function (name, target) {
  6498. var parts = name.split('.');
  6499. return forge(parts, target);
  6500. };
  6501. var $_1cxe7nvnjh8lz3td = {
  6502. path: path,
  6503. resolve: resolve,
  6504. forge: forge,
  6505. namespace: namespace
  6506. };
  6507. var unsafe = function (name, scope) {
  6508. return $_1cxe7nvnjh8lz3td.resolve(name, scope);
  6509. };
  6510. var getOrDie = function (name, scope) {
  6511. var actual = unsafe(name, scope);
  6512. if (actual === undefined || actual === null)
  6513. throw name + ' not available on this browser';
  6514. return actual;
  6515. };
  6516. var $_eol4qgvmjh8lz3t9 = { getOrDie: getOrDie };
  6517. var node = function () {
  6518. var f = $_eol4qgvmjh8lz3t9.getOrDie('Node');
  6519. return f;
  6520. };
  6521. var compareDocumentPosition = function (a, b, match) {
  6522. return (a.compareDocumentPosition(b) & match) !== 0;
  6523. };
  6524. var documentPositionPreceding = function (a, b) {
  6525. return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_PRECEDING);
  6526. };
  6527. var documentPositionContainedBy = function (a, b) {
  6528. return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_CONTAINED_BY);
  6529. };
  6530. var $_7n27kvvljh8lz3t8 = {
  6531. documentPositionPreceding: documentPositionPreceding,
  6532. documentPositionContainedBy: documentPositionContainedBy
  6533. };
  6534. var firstMatch = function (regexes, s) {
  6535. for (var i = 0; i < regexes.length; i++) {
  6536. var x = regexes[i];
  6537. if (x.test(s))
  6538. return x;
  6539. }
  6540. return undefined;
  6541. };
  6542. var find$2 = function (regexes, agent) {
  6543. var r = firstMatch(regexes, agent);
  6544. if (!r)
  6545. return {
  6546. major: 0,
  6547. minor: 0
  6548. };
  6549. var group = function (i) {
  6550. return Number(agent.replace(r, '$' + i));
  6551. };
  6552. return nu(group(1), group(2));
  6553. };
  6554. var detect = function (versionRegexes, agent) {
  6555. var cleanedAgent = String(agent).toLowerCase();
  6556. if (versionRegexes.length === 0)
  6557. return unknown();
  6558. return find$2(versionRegexes, cleanedAgent);
  6559. };
  6560. var unknown = function () {
  6561. return nu(0, 0);
  6562. };
  6563. var nu = function (major, minor) {
  6564. return {
  6565. major: major,
  6566. minor: minor
  6567. };
  6568. };
  6569. var $_afos0kvsjh8lz3tm = {
  6570. nu: nu,
  6571. detect: detect,
  6572. unknown: unknown
  6573. };
  6574. var edge = 'Edge';
  6575. var chrome = 'Chrome';
  6576. var ie = 'IE';
  6577. var opera = 'Opera';
  6578. var firefox = 'Firefox';
  6579. var safari = 'Safari';
  6580. var isBrowser = function (name, current) {
  6581. return function () {
  6582. return current === name;
  6583. };
  6584. };
  6585. var unknown$1 = function () {
  6586. return nu$1({
  6587. current: undefined,
  6588. version: $_afos0kvsjh8lz3tm.unknown()
  6589. });
  6590. };
  6591. var nu$1 = function (info) {
  6592. var current = info.current;
  6593. var version = info.version;
  6594. return {
  6595. current: current,
  6596. version: version,
  6597. isEdge: isBrowser(edge, current),
  6598. isChrome: isBrowser(chrome, current),
  6599. isIE: isBrowser(ie, current),
  6600. isOpera: isBrowser(opera, current),
  6601. isFirefox: isBrowser(firefox, current),
  6602. isSafari: isBrowser(safari, current)
  6603. };
  6604. };
  6605. var $_fidpetvrjh8lz3tj = {
  6606. unknown: unknown$1,
  6607. nu: nu$1,
  6608. edge: $_3pjweotejh8lz3k4.constant(edge),
  6609. chrome: $_3pjweotejh8lz3k4.constant(chrome),
  6610. ie: $_3pjweotejh8lz3k4.constant(ie),
  6611. opera: $_3pjweotejh8lz3k4.constant(opera),
  6612. firefox: $_3pjweotejh8lz3k4.constant(firefox),
  6613. safari: $_3pjweotejh8lz3k4.constant(safari)
  6614. };
  6615. var windows$1 = 'Windows';
  6616. var ios = 'iOS';
  6617. var android = 'Android';
  6618. var linux = 'Linux';
  6619. var osx = 'OSX';
  6620. var solaris = 'Solaris';
  6621. var freebsd = 'FreeBSD';
  6622. var isOS = function (name, current) {
  6623. return function () {
  6624. return current === name;
  6625. };
  6626. };
  6627. var unknown$2 = function () {
  6628. return nu$2({
  6629. current: undefined,
  6630. version: $_afos0kvsjh8lz3tm.unknown()
  6631. });
  6632. };
  6633. var nu$2 = function (info) {
  6634. var current = info.current;
  6635. var version = info.version;
  6636. return {
  6637. current: current,
  6638. version: version,
  6639. isWindows: isOS(windows$1, current),
  6640. isiOS: isOS(ios, current),
  6641. isAndroid: isOS(android, current),
  6642. isOSX: isOS(osx, current),
  6643. isLinux: isOS(linux, current),
  6644. isSolaris: isOS(solaris, current),
  6645. isFreeBSD: isOS(freebsd, current)
  6646. };
  6647. };
  6648. var $_1z8n9kvtjh8lz3to = {
  6649. unknown: unknown$2,
  6650. nu: nu$2,
  6651. windows: $_3pjweotejh8lz3k4.constant(windows$1),
  6652. ios: $_3pjweotejh8lz3k4.constant(ios),
  6653. android: $_3pjweotejh8lz3k4.constant(android),
  6654. linux: $_3pjweotejh8lz3k4.constant(linux),
  6655. osx: $_3pjweotejh8lz3k4.constant(osx),
  6656. solaris: $_3pjweotejh8lz3k4.constant(solaris),
  6657. freebsd: $_3pjweotejh8lz3k4.constant(freebsd)
  6658. };
  6659. function DeviceType (os, browser, userAgent) {
  6660. var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;
  6661. var isiPhone = os.isiOS() && !isiPad;
  6662. var isAndroid3 = os.isAndroid() && os.version.major === 3;
  6663. var isAndroid4 = os.isAndroid() && os.version.major === 4;
  6664. var isTablet = isiPad || isAndroid3 || isAndroid4 && /mobile/i.test(userAgent) === true;
  6665. var isTouch = os.isiOS() || os.isAndroid();
  6666. var isPhone = isTouch && !isTablet;
  6667. var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;
  6668. return {
  6669. isiPad: $_3pjweotejh8lz3k4.constant(isiPad),
  6670. isiPhone: $_3pjweotejh8lz3k4.constant(isiPhone),
  6671. isTablet: $_3pjweotejh8lz3k4.constant(isTablet),
  6672. isPhone: $_3pjweotejh8lz3k4.constant(isPhone),
  6673. isTouch: $_3pjweotejh8lz3k4.constant(isTouch),
  6674. isAndroid: os.isAndroid,
  6675. isiOS: os.isiOS,
  6676. isWebView: $_3pjweotejh8lz3k4.constant(iOSwebview)
  6677. };
  6678. }
  6679. var detect$1 = function (candidates, userAgent) {
  6680. var agent = String(userAgent).toLowerCase();
  6681. return $_f3qxhzthjh8lz3kg.find(candidates, function (candidate) {
  6682. return candidate.search(agent);
  6683. });
  6684. };
  6685. var detectBrowser = function (browsers, userAgent) {
  6686. return detect$1(browsers, userAgent).map(function (browser) {
  6687. var version = $_afos0kvsjh8lz3tm.detect(browser.versionRegexes, userAgent);
  6688. return {
  6689. current: browser.name,
  6690. version: version
  6691. };
  6692. });
  6693. };
  6694. var detectOs = function (oses, userAgent) {
  6695. return detect$1(oses, userAgent).map(function (os) {
  6696. var version = $_afos0kvsjh8lz3tm.detect(os.versionRegexes, userAgent);
  6697. return {
  6698. current: os.name,
  6699. version: version
  6700. };
  6701. });
  6702. };
  6703. var $_bvrih8vvjh8lz3tv = {
  6704. detectBrowser: detectBrowser,
  6705. detectOs: detectOs
  6706. };
  6707. var addToStart = function (str, prefix) {
  6708. return prefix + str;
  6709. };
  6710. var addToEnd = function (str, suffix) {
  6711. return str + suffix;
  6712. };
  6713. var removeFromStart = function (str, numChars) {
  6714. return str.substring(numChars);
  6715. };
  6716. var removeFromEnd = function (str, numChars) {
  6717. return str.substring(0, str.length - numChars);
  6718. };
  6719. var $_enj27ovyjh8lz3u7 = {
  6720. addToStart: addToStart,
  6721. addToEnd: addToEnd,
  6722. removeFromStart: removeFromStart,
  6723. removeFromEnd: removeFromEnd
  6724. };
  6725. var first = function (str, count) {
  6726. return str.substr(0, count);
  6727. };
  6728. var last$1 = function (str, count) {
  6729. return str.substr(str.length - count, str.length);
  6730. };
  6731. var head$1 = function (str) {
  6732. return str === '' ? Option.none() : Option.some(str.substr(0, 1));
  6733. };
  6734. var tail = function (str) {
  6735. return str === '' ? Option.none() : Option.some(str.substring(1));
  6736. };
  6737. var $_49etxbvzjh8lz3u8 = {
  6738. first: first,
  6739. last: last$1,
  6740. head: head$1,
  6741. tail: tail
  6742. };
  6743. var checkRange = function (str, substr, start) {
  6744. if (substr === '')
  6745. return true;
  6746. if (str.length < substr.length)
  6747. return false;
  6748. var x = str.substr(start, start + substr.length);
  6749. return x === substr;
  6750. };
  6751. var supplant = function (str, obj) {
  6752. var isStringOrNumber = function (a) {
  6753. var t = typeof a;
  6754. return t === 'string' || t === 'number';
  6755. };
  6756. return str.replace(/\${([^{}]*)}/g, function (a, b) {
  6757. var value = obj[b];
  6758. return isStringOrNumber(value) ? value : a;
  6759. });
  6760. };
  6761. var removeLeading = function (str, prefix) {
  6762. return startsWith(str, prefix) ? $_enj27ovyjh8lz3u7.removeFromStart(str, prefix.length) : str;
  6763. };
  6764. var removeTrailing = function (str, prefix) {
  6765. return endsWith(str, prefix) ? $_enj27ovyjh8lz3u7.removeFromEnd(str, prefix.length) : str;
  6766. };
  6767. var ensureLeading = function (str, prefix) {
  6768. return startsWith(str, prefix) ? str : $_enj27ovyjh8lz3u7.addToStart(str, prefix);
  6769. };
  6770. var ensureTrailing = function (str, prefix) {
  6771. return endsWith(str, prefix) ? str : $_enj27ovyjh8lz3u7.addToEnd(str, prefix);
  6772. };
  6773. var contains$1 = function (str, substr) {
  6774. return str.indexOf(substr) !== -1;
  6775. };
  6776. var capitalize = function (str) {
  6777. return $_49etxbvzjh8lz3u8.head(str).bind(function (head) {
  6778. return $_49etxbvzjh8lz3u8.tail(str).map(function (tail) {
  6779. return head.toUpperCase() + tail;
  6780. });
  6781. }).getOr(str);
  6782. };
  6783. var startsWith = function (str, prefix) {
  6784. return checkRange(str, prefix, 0);
  6785. };
  6786. var endsWith = function (str, suffix) {
  6787. return checkRange(str, suffix, str.length - suffix.length);
  6788. };
  6789. var trim = function (str) {
  6790. return str.replace(/^\s+|\s+$/g, '');
  6791. };
  6792. var lTrim = function (str) {
  6793. return str.replace(/^\s+/g, '');
  6794. };
  6795. var rTrim = function (str) {
  6796. return str.replace(/\s+$/g, '');
  6797. };
  6798. var $_2absfgvxjh8lz3u4 = {
  6799. supplant: supplant,
  6800. startsWith: startsWith,
  6801. removeLeading: removeLeading,
  6802. removeTrailing: removeTrailing,
  6803. ensureLeading: ensureLeading,
  6804. ensureTrailing: ensureTrailing,
  6805. endsWith: endsWith,
  6806. contains: contains$1,
  6807. trim: trim,
  6808. lTrim: lTrim,
  6809. rTrim: rTrim,
  6810. capitalize: capitalize
  6811. };
  6812. var normalVersionRegex = /.*?version\/\ ?([0-9]+)\.([0-9]+).*/;
  6813. var checkContains = function (target) {
  6814. return function (uastring) {
  6815. return $_2absfgvxjh8lz3u4.contains(uastring, target);
  6816. };
  6817. };
  6818. var browsers = [
  6819. {
  6820. name: 'Edge',
  6821. versionRegexes: [/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],
  6822. search: function (uastring) {
  6823. var monstrosity = $_2absfgvxjh8lz3u4.contains(uastring, 'edge/') && $_2absfgvxjh8lz3u4.contains(uastring, 'chrome') && $_2absfgvxjh8lz3u4.contains(uastring, 'safari') && $_2absfgvxjh8lz3u4.contains(uastring, 'applewebkit');
  6824. return monstrosity;
  6825. }
  6826. },
  6827. {
  6828. name: 'Chrome',
  6829. versionRegexes: [
  6830. /.*?chrome\/([0-9]+)\.([0-9]+).*/,
  6831. normalVersionRegex
  6832. ],
  6833. search: function (uastring) {
  6834. return $_2absfgvxjh8lz3u4.contains(uastring, 'chrome') && !$_2absfgvxjh8lz3u4.contains(uastring, 'chromeframe');
  6835. }
  6836. },
  6837. {
  6838. name: 'IE',
  6839. versionRegexes: [
  6840. /.*?msie\ ?([0-9]+)\.([0-9]+).*/,
  6841. /.*?rv:([0-9]+)\.([0-9]+).*/
  6842. ],
  6843. search: function (uastring) {
  6844. return $_2absfgvxjh8lz3u4.contains(uastring, 'msie') || $_2absfgvxjh8lz3u4.contains(uastring, 'trident');
  6845. }
  6846. },
  6847. {
  6848. name: 'Opera',
  6849. versionRegexes: [
  6850. normalVersionRegex,
  6851. /.*?opera\/([0-9]+)\.([0-9]+).*/
  6852. ],
  6853. search: checkContains('opera')
  6854. },
  6855. {
  6856. name: 'Firefox',
  6857. versionRegexes: [/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],
  6858. search: checkContains('firefox')
  6859. },
  6860. {
  6861. name: 'Safari',
  6862. versionRegexes: [
  6863. normalVersionRegex,
  6864. /.*?cpu os ([0-9]+)_([0-9]+).*/
  6865. ],
  6866. search: function (uastring) {
  6867. return ($_2absfgvxjh8lz3u4.contains(uastring, 'safari') || $_2absfgvxjh8lz3u4.contains(uastring, 'mobile/')) && $_2absfgvxjh8lz3u4.contains(uastring, 'applewebkit');
  6868. }
  6869. }
  6870. ];
  6871. var oses = [
  6872. {
  6873. name: 'Windows',
  6874. search: checkContains('win'),
  6875. versionRegexes: [/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]
  6876. },
  6877. {
  6878. name: 'iOS',
  6879. search: function (uastring) {
  6880. return $_2absfgvxjh8lz3u4.contains(uastring, 'iphone') || $_2absfgvxjh8lz3u4.contains(uastring, 'ipad');
  6881. },
  6882. versionRegexes: [
  6883. /.*?version\/\ ?([0-9]+)\.([0-9]+).*/,
  6884. /.*cpu os ([0-9]+)_([0-9]+).*/,
  6885. /.*cpu iphone os ([0-9]+)_([0-9]+).*/
  6886. ]
  6887. },
  6888. {
  6889. name: 'Android',
  6890. search: checkContains('android'),
  6891. versionRegexes: [/.*?android\ ?([0-9]+)\.([0-9]+).*/]
  6892. },
  6893. {
  6894. name: 'OSX',
  6895. search: checkContains('os x'),
  6896. versionRegexes: [/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]
  6897. },
  6898. {
  6899. name: 'Linux',
  6900. search: checkContains('linux'),
  6901. versionRegexes: []
  6902. },
  6903. {
  6904. name: 'Solaris',
  6905. search: checkContains('sunos'),
  6906. versionRegexes: []
  6907. },
  6908. {
  6909. name: 'FreeBSD',
  6910. search: checkContains('freebsd'),
  6911. versionRegexes: []
  6912. }
  6913. ];
  6914. var $_dne06dvwjh8lz3ty = {
  6915. browsers: $_3pjweotejh8lz3k4.constant(browsers),
  6916. oses: $_3pjweotejh8lz3k4.constant(oses)
  6917. };
  6918. var detect$2 = function (userAgent) {
  6919. var browsers = $_dne06dvwjh8lz3ty.browsers();
  6920. var oses = $_dne06dvwjh8lz3ty.oses();
  6921. var browser = $_bvrih8vvjh8lz3tv.detectBrowser(browsers, userAgent).fold($_fidpetvrjh8lz3tj.unknown, $_fidpetvrjh8lz3tj.nu);
  6922. var os = $_bvrih8vvjh8lz3tv.detectOs(oses, userAgent).fold($_1z8n9kvtjh8lz3to.unknown, $_1z8n9kvtjh8lz3to.nu);
  6923. var deviceType = DeviceType(os, browser, userAgent);
  6924. return {
  6925. browser: browser,
  6926. os: os,
  6927. deviceType: deviceType
  6928. };
  6929. };
  6930. var $_8gsy8vqjh8lz3ti = { detect: detect$2 };
  6931. var detect$3 = $_8me1xevajh8lz3s0.cached(function () {
  6932. var userAgent = navigator.userAgent;
  6933. return $_8gsy8vqjh8lz3ti.detect(userAgent);
  6934. });
  6935. var $_2rbkegvpjh8lz3tf = { detect: detect$3 };
  6936. var ELEMENT = $_8xkvw6vcjh8lz3s2.ELEMENT;
  6937. var DOCUMENT = $_8xkvw6vcjh8lz3s2.DOCUMENT;
  6938. var is = function (element, selector) {
  6939. var elem = element.dom();
  6940. if (elem.nodeType !== ELEMENT)
  6941. return false;
  6942. else if (elem.matches !== undefined)
  6943. return elem.matches(selector);
  6944. else if (elem.msMatchesSelector !== undefined)
  6945. return elem.msMatchesSelector(selector);
  6946. else if (elem.webkitMatchesSelector !== undefined)
  6947. return elem.webkitMatchesSelector(selector);
  6948. else if (elem.mozMatchesSelector !== undefined)
  6949. return elem.mozMatchesSelector(selector);
  6950. else
  6951. throw new Error('Browser lacks native selectors');
  6952. };
  6953. var bypassSelector = function (dom) {
  6954. return dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT || dom.childElementCount === 0;
  6955. };
  6956. var all = function (selector, scope) {
  6957. var base = scope === undefined ? document : scope.dom();
  6958. return bypassSelector(base) ? [] : $_f3qxhzthjh8lz3kg.map(base.querySelectorAll(selector), $_3bkrfxv6jh8lz3rm.fromDom);
  6959. };
  6960. var one = function (selector, scope) {
  6961. var base = scope === undefined ? document : scope.dom();
  6962. return bypassSelector(base) ? Option.none() : Option.from(base.querySelector(selector)).map($_3bkrfxv6jh8lz3rm.fromDom);
  6963. };
  6964. var $_2nczsvw0jh8lz3ua = {
  6965. all: all,
  6966. is: is,
  6967. one: one
  6968. };
  6969. var eq = function (e1, e2) {
  6970. return e1.dom() === e2.dom();
  6971. };
  6972. var isEqualNode = function (e1, e2) {
  6973. return e1.dom().isEqualNode(e2.dom());
  6974. };
  6975. var member = function (element, elements) {
  6976. return $_f3qxhzthjh8lz3kg.exists(elements, $_3pjweotejh8lz3k4.curry(eq, element));
  6977. };
  6978. var regularContains = function (e1, e2) {
  6979. var d1 = e1.dom(), d2 = e2.dom();
  6980. return d1 === d2 ? false : d1.contains(d2);
  6981. };
  6982. var ieContains = function (e1, e2) {
  6983. return $_7n27kvvljh8lz3t8.documentPositionContainedBy(e1.dom(), e2.dom());
  6984. };
  6985. var browser = $_2rbkegvpjh8lz3tf.detect().browser;
  6986. var contains$2 = browser.isIE() ? ieContains : regularContains;
  6987. var $_9ypjy6vkjh8lz3sq = {
  6988. eq: eq,
  6989. isEqualNode: isEqualNode,
  6990. member: member,
  6991. contains: contains$2,
  6992. is: $_2nczsvw0jh8lz3ua.is
  6993. };
  6994. var owner = function (element) {
  6995. return $_3bkrfxv6jh8lz3rm.fromDom(element.dom().ownerDocument);
  6996. };
  6997. var documentElement = function (element) {
  6998. var doc = owner(element);
  6999. return $_3bkrfxv6jh8lz3rm.fromDom(doc.dom().documentElement);
  7000. };
  7001. var defaultView = function (element) {
  7002. var el = element.dom();
  7003. var defaultView = el.ownerDocument.defaultView;
  7004. return $_3bkrfxv6jh8lz3rm.fromDom(defaultView);
  7005. };
  7006. var parent = function (element) {
  7007. var dom = element.dom();
  7008. return Option.from(dom.parentNode).map($_3bkrfxv6jh8lz3rm.fromDom);
  7009. };
  7010. var findIndex$1 = function (element) {
  7011. return parent(element).bind(function (p) {
  7012. var kin = children(p);
  7013. return $_f3qxhzthjh8lz3kg.findIndex(kin, function (elem) {
  7014. return $_9ypjy6vkjh8lz3sq.eq(element, elem);
  7015. });
  7016. });
  7017. };
  7018. var parents = function (element, isRoot) {
  7019. var stop = $_d8bie3tijh8lz3kn.isFunction(isRoot) ? isRoot : $_3pjweotejh8lz3k4.constant(false);
  7020. var dom = element.dom();
  7021. var ret = [];
  7022. while (dom.parentNode !== null && dom.parentNode !== undefined) {
  7023. var rawParent = dom.parentNode;
  7024. var parent = $_3bkrfxv6jh8lz3rm.fromDom(rawParent);
  7025. ret.push(parent);
  7026. if (stop(parent) === true)
  7027. break;
  7028. else
  7029. dom = rawParent;
  7030. }
  7031. return ret;
  7032. };
  7033. var siblings = function (element) {
  7034. var filterSelf = function (elements) {
  7035. return $_f3qxhzthjh8lz3kg.filter(elements, function (x) {
  7036. return !$_9ypjy6vkjh8lz3sq.eq(element, x);
  7037. });
  7038. };
  7039. return parent(element).map(children).map(filterSelf).getOr([]);
  7040. };
  7041. var offsetParent = function (element) {
  7042. var dom = element.dom();
  7043. return Option.from(dom.offsetParent).map($_3bkrfxv6jh8lz3rm.fromDom);
  7044. };
  7045. var prevSibling = function (element) {
  7046. var dom = element.dom();
  7047. return Option.from(dom.previousSibling).map($_3bkrfxv6jh8lz3rm.fromDom);
  7048. };
  7049. var nextSibling = function (element) {
  7050. var dom = element.dom();
  7051. return Option.from(dom.nextSibling).map($_3bkrfxv6jh8lz3rm.fromDom);
  7052. };
  7053. var prevSiblings = function (element) {
  7054. return $_f3qxhzthjh8lz3kg.reverse($_861s8bvjjh8lz3sp.toArray(element, prevSibling));
  7055. };
  7056. var nextSiblings = function (element) {
  7057. return $_861s8bvjjh8lz3sp.toArray(element, nextSibling);
  7058. };
  7059. var children = function (element) {
  7060. var dom = element.dom();
  7061. return $_f3qxhzthjh8lz3kg.map(dom.childNodes, $_3bkrfxv6jh8lz3rm.fromDom);
  7062. };
  7063. var child = function (element, index) {
  7064. var children = element.dom().childNodes;
  7065. return Option.from(children[index]).map($_3bkrfxv6jh8lz3rm.fromDom);
  7066. };
  7067. var firstChild = function (element) {
  7068. return child(element, 0);
  7069. };
  7070. var lastChild = function (element) {
  7071. return child(element, element.dom().childNodes.length - 1);
  7072. };
  7073. var childNodesCount = function (element) {
  7074. return element.dom().childNodes.length;
  7075. };
  7076. var hasChildNodes = function (element) {
  7077. return element.dom().hasChildNodes();
  7078. };
  7079. var spot = $_57mdu6vejh8lz3sg.immutable('element', 'offset');
  7080. var leaf = function (element, offset) {
  7081. var cs = children(element);
  7082. return cs.length > 0 && offset < cs.length ? spot(cs[offset], 0) : spot(element, offset);
  7083. };
  7084. var $_3jmbxmvdjh8lz3s4 = {
  7085. owner: owner,
  7086. defaultView: defaultView,
  7087. documentElement: documentElement,
  7088. parent: parent,
  7089. findIndex: findIndex$1,
  7090. parents: parents,
  7091. siblings: siblings,
  7092. prevSibling: prevSibling,
  7093. offsetParent: offsetParent,
  7094. prevSiblings: prevSiblings,
  7095. nextSibling: nextSibling,
  7096. nextSiblings: nextSiblings,
  7097. children: children,
  7098. child: child,
  7099. firstChild: firstChild,
  7100. lastChild: lastChild,
  7101. childNodesCount: childNodesCount,
  7102. hasChildNodes: hasChildNodes,
  7103. leaf: leaf
  7104. };
  7105. var all$1 = function (predicate) {
  7106. return descendants($_35bizev9jh8lz3rx.body(), predicate);
  7107. };
  7108. var ancestors = function (scope, predicate, isRoot) {
  7109. return $_f3qxhzthjh8lz3kg.filter($_3jmbxmvdjh8lz3s4.parents(scope, isRoot), predicate);
  7110. };
  7111. var siblings$1 = function (scope, predicate) {
  7112. return $_f3qxhzthjh8lz3kg.filter($_3jmbxmvdjh8lz3s4.siblings(scope), predicate);
  7113. };
  7114. var children$1 = function (scope, predicate) {
  7115. return $_f3qxhzthjh8lz3kg.filter($_3jmbxmvdjh8lz3s4.children(scope), predicate);
  7116. };
  7117. var descendants = function (scope, predicate) {
  7118. var result = [];
  7119. $_f3qxhzthjh8lz3kg.each($_3jmbxmvdjh8lz3s4.children(scope), function (x) {
  7120. if (predicate(x)) {
  7121. result = result.concat([x]);
  7122. }
  7123. result = result.concat(descendants(x, predicate));
  7124. });
  7125. return result;
  7126. };
  7127. var $_dz5cwuv8jh8lz3rt = {
  7128. all: all$1,
  7129. ancestors: ancestors,
  7130. siblings: siblings$1,
  7131. children: children$1,
  7132. descendants: descendants
  7133. };
  7134. var all$2 = function (selector) {
  7135. return $_2nczsvw0jh8lz3ua.all(selector);
  7136. };
  7137. var ancestors$1 = function (scope, selector, isRoot) {
  7138. return $_dz5cwuv8jh8lz3rt.ancestors(scope, function (e) {
  7139. return $_2nczsvw0jh8lz3ua.is(e, selector);
  7140. }, isRoot);
  7141. };
  7142. var siblings$2 = function (scope, selector) {
  7143. return $_dz5cwuv8jh8lz3rt.siblings(scope, function (e) {
  7144. return $_2nczsvw0jh8lz3ua.is(e, selector);
  7145. });
  7146. };
  7147. var children$2 = function (scope, selector) {
  7148. return $_dz5cwuv8jh8lz3rt.children(scope, function (e) {
  7149. return $_2nczsvw0jh8lz3ua.is(e, selector);
  7150. });
  7151. };
  7152. var descendants$1 = function (scope, selector) {
  7153. return $_2nczsvw0jh8lz3ua.all(selector, scope);
  7154. };
  7155. var $_am3j0fv7jh8lz3rs = {
  7156. all: all$2,
  7157. ancestors: ancestors$1,
  7158. siblings: siblings$2,
  7159. children: children$2,
  7160. descendants: descendants$1
  7161. };
  7162. var trim$1 = global$2.trim;
  7163. var hasContentEditableState = function (value) {
  7164. return function (node) {
  7165. if (node && node.nodeType === 1) {
  7166. if (node.contentEditable === value) {
  7167. return true;
  7168. }
  7169. if (node.getAttribute('data-mce-contenteditable') === value) {
  7170. return true;
  7171. }
  7172. }
  7173. return false;
  7174. };
  7175. };
  7176. var isContentEditableTrue = hasContentEditableState('true');
  7177. var isContentEditableFalse = hasContentEditableState('false');
  7178. var create = function (type, title, url, level, attach) {
  7179. return {
  7180. type: type,
  7181. title: title,
  7182. url: url,
  7183. level: level,
  7184. attach: attach
  7185. };
  7186. };
  7187. var isChildOfContentEditableTrue = function (node) {
  7188. while (node = node.parentNode) {
  7189. var value = node.contentEditable;
  7190. if (value && value !== 'inherit') {
  7191. return isContentEditableTrue(node);
  7192. }
  7193. }
  7194. return false;
  7195. };
  7196. var select = function (selector, root) {
  7197. return $_f3qxhzthjh8lz3kg.map($_am3j0fv7jh8lz3rs.descendants($_3bkrfxv6jh8lz3rm.fromDom(root), selector), function (element) {
  7198. return element.dom();
  7199. });
  7200. };
  7201. var getElementText = function (elm) {
  7202. return elm.innerText || elm.textContent;
  7203. };
  7204. var getOrGenerateId = function (elm) {
  7205. return elm.id ? elm.id : $_gdeezvv5jh8lz3rl.generate('h');
  7206. };
  7207. var isAnchor = function (elm) {
  7208. return elm && elm.nodeName === 'A' && (elm.id || elm.name);
  7209. };
  7210. var isValidAnchor = function (elm) {
  7211. return isAnchor(elm) && isEditable(elm);
  7212. };
  7213. var isHeader = function (elm) {
  7214. return elm && /^(H[1-6])$/.test(elm.nodeName);
  7215. };
  7216. var isEditable = function (elm) {
  7217. return isChildOfContentEditableTrue(elm) && !isContentEditableFalse(elm);
  7218. };
  7219. var isValidHeader = function (elm) {
  7220. return isHeader(elm) && isEditable(elm);
  7221. };
  7222. var getLevel = function (elm) {
  7223. return isHeader(elm) ? parseInt(elm.nodeName.substr(1), 10) : 0;
  7224. };
  7225. var headerTarget = function (elm) {
  7226. var headerId = getOrGenerateId(elm);
  7227. var attach = function () {
  7228. elm.id = headerId;
  7229. };
  7230. return create('header', getElementText(elm), '#' + headerId, getLevel(elm), attach);
  7231. };
  7232. var anchorTarget = function (elm) {
  7233. var anchorId = elm.id || elm.name;
  7234. var anchorText = getElementText(elm);
  7235. return create('anchor', anchorText ? anchorText : '#' + anchorId, '#' + anchorId, 0, $_3pjweotejh8lz3k4.noop);
  7236. };
  7237. var getHeaderTargets = function (elms) {
  7238. return $_f3qxhzthjh8lz3kg.map($_f3qxhzthjh8lz3kg.filter(elms, isValidHeader), headerTarget);
  7239. };
  7240. var getAnchorTargets = function (elms) {
  7241. return $_f3qxhzthjh8lz3kg.map($_f3qxhzthjh8lz3kg.filter(elms, isValidAnchor), anchorTarget);
  7242. };
  7243. var getTargetElements = function (elm) {
  7244. var elms = select('h1,h2,h3,h4,h5,h6,a:not([href])', elm);
  7245. return elms;
  7246. };
  7247. var hasTitle = function (target) {
  7248. return trim$1(target.title).length > 0;
  7249. };
  7250. var find$3 = function (elm) {
  7251. var elms = getTargetElements(elm);
  7252. return $_f3qxhzthjh8lz3kg.filter(getHeaderTargets(elms).concat(getAnchorTargets(elms)), hasTitle);
  7253. };
  7254. var $_p3wpev4jh8lz3ra = { find: find$3 };
  7255. var getActiveEditor = function () {
  7256. return window.tinymce ? window.tinymce.activeEditor : global$1.activeEditor;
  7257. };
  7258. var history = {};
  7259. var HISTORY_LENGTH = 5;
  7260. var clearHistory = function () {
  7261. history = {};
  7262. };
  7263. var toMenuItem = function (target) {
  7264. return {
  7265. title: target.title,
  7266. value: {
  7267. title: { raw: target.title },
  7268. url: target.url,
  7269. attach: target.attach
  7270. }
  7271. };
  7272. };
  7273. var toMenuItems = function (targets) {
  7274. return global$2.map(targets, toMenuItem);
  7275. };
  7276. var staticMenuItem = function (title, url) {
  7277. return {
  7278. title: title,
  7279. value: {
  7280. title: title,
  7281. url: url,
  7282. attach: $_3pjweotejh8lz3k4.noop
  7283. }
  7284. };
  7285. };
  7286. var isUniqueUrl = function (url, targets) {
  7287. var foundTarget = $_f3qxhzthjh8lz3kg.exists(targets, function (target) {
  7288. return target.url === url;
  7289. });
  7290. return !foundTarget;
  7291. };
  7292. var getSetting = function (editorSettings, name, defaultValue) {
  7293. var value = name in editorSettings ? editorSettings[name] : defaultValue;
  7294. return value === false ? null : value;
  7295. };
  7296. var createMenuItems = function (term, targets, fileType, editorSettings) {
  7297. var separator = { title: '-' };
  7298. var fromHistoryMenuItems = function (history) {
  7299. var historyItems = history.hasOwnProperty(fileType) ? history[fileType] : [];
  7300. var uniqueHistory = $_f3qxhzthjh8lz3kg.filter(historyItems, function (url) {
  7301. return isUniqueUrl(url, targets);
  7302. });
  7303. return global$2.map(uniqueHistory, function (url) {
  7304. return {
  7305. title: url,
  7306. value: {
  7307. title: url,
  7308. url: url,
  7309. attach: $_3pjweotejh8lz3k4.noop
  7310. }
  7311. };
  7312. });
  7313. };
  7314. var fromMenuItems = function (type) {
  7315. var filteredTargets = $_f3qxhzthjh8lz3kg.filter(targets, function (target) {
  7316. return target.type === type;
  7317. });
  7318. return toMenuItems(filteredTargets);
  7319. };
  7320. var anchorMenuItems = function () {
  7321. var anchorMenuItems = fromMenuItems('anchor');
  7322. var topAnchor = getSetting(editorSettings, 'anchor_top', '#top');
  7323. var bottomAchor = getSetting(editorSettings, 'anchor_bottom', '#bottom');
  7324. if (topAnchor !== null) {
  7325. anchorMenuItems.unshift(staticMenuItem('<top>', topAnchor));
  7326. }
  7327. if (bottomAchor !== null) {
  7328. anchorMenuItems.push(staticMenuItem('<bottom>', bottomAchor));
  7329. }
  7330. return anchorMenuItems;
  7331. };
  7332. var join = function (items) {
  7333. return $_f3qxhzthjh8lz3kg.foldl(items, function (a, b) {
  7334. var bothEmpty = a.length === 0 || b.length === 0;
  7335. return bothEmpty ? a.concat(b) : a.concat(separator, b);
  7336. }, []);
  7337. };
  7338. if (editorSettings.typeahead_urls === false) {
  7339. return [];
  7340. }
  7341. return fileType === 'file' ? join([
  7342. filterByQuery(term, fromHistoryMenuItems(history)),
  7343. filterByQuery(term, fromMenuItems('header')),
  7344. filterByQuery(term, anchorMenuItems())
  7345. ]) : filterByQuery(term, fromHistoryMenuItems(history));
  7346. };
  7347. var addToHistory = function (url, fileType) {
  7348. var items = history[fileType];
  7349. if (!/^https?/.test(url)) {
  7350. return;
  7351. }
  7352. if (items) {
  7353. if ($_f3qxhzthjh8lz3kg.indexOf(items, url).isNone()) {
  7354. history[fileType] = items.slice(0, HISTORY_LENGTH).concat(url);
  7355. }
  7356. } else {
  7357. history[fileType] = [url];
  7358. }
  7359. };
  7360. var filterByQuery = function (term, menuItems) {
  7361. var lowerCaseTerm = term.toLowerCase();
  7362. var result = global$2.grep(menuItems, function (item) {
  7363. return item.title.toLowerCase().indexOf(lowerCaseTerm) !== -1;
  7364. });
  7365. return result.length === 1 && result[0].title === term ? [] : result;
  7366. };
  7367. var getTitle = function (linkDetails) {
  7368. var title = linkDetails.title;
  7369. return title.raw ? title.raw : title;
  7370. };
  7371. var setupAutoCompleteHandler = function (ctrl, editorSettings, bodyElm, fileType) {
  7372. var autocomplete = function (term) {
  7373. var linkTargets = $_p3wpev4jh8lz3ra.find(bodyElm);
  7374. var menuItems = createMenuItems(term, linkTargets, fileType, editorSettings);
  7375. ctrl.showAutoComplete(menuItems, term);
  7376. };
  7377. ctrl.on('autocomplete', function () {
  7378. autocomplete(ctrl.value());
  7379. });
  7380. ctrl.on('selectitem', function (e) {
  7381. var linkDetails = e.value;
  7382. ctrl.value(linkDetails.url);
  7383. var title = getTitle(linkDetails);
  7384. if (fileType === 'image') {
  7385. ctrl.fire('change', {
  7386. meta: {
  7387. alt: title,
  7388. attach: linkDetails.attach
  7389. }
  7390. });
  7391. } else {
  7392. ctrl.fire('change', {
  7393. meta: {
  7394. text: title,
  7395. attach: linkDetails.attach
  7396. }
  7397. });
  7398. }
  7399. ctrl.focus();
  7400. });
  7401. ctrl.on('click', function (e) {
  7402. if (ctrl.value().length === 0 && e.target.nodeName === 'INPUT') {
  7403. autocomplete('');
  7404. }
  7405. });
  7406. ctrl.on('PostRender', function () {
  7407. ctrl.getRoot().on('submit', function (e) {
  7408. if (!e.isDefaultPrevented()) {
  7409. addToHistory(ctrl.value(), fileType);
  7410. }
  7411. });
  7412. });
  7413. };
  7414. var statusToUiState = function (result) {
  7415. var status = result.status, message = result.message;
  7416. if (status === 'valid') {
  7417. return {
  7418. status: 'ok',
  7419. message: message
  7420. };
  7421. } else if (status === 'unknown') {
  7422. return {
  7423. status: 'warn',
  7424. message: message
  7425. };
  7426. } else if (status === 'invalid') {
  7427. return {
  7428. status: 'warn',
  7429. message: message
  7430. };
  7431. } else {
  7432. return {
  7433. status: 'none',
  7434. message: ''
  7435. };
  7436. }
  7437. };
  7438. var setupLinkValidatorHandler = function (ctrl, editorSettings, fileType) {
  7439. var validatorHandler = editorSettings.filepicker_validator_handler;
  7440. if (validatorHandler) {
  7441. var validateUrl_1 = function (url) {
  7442. if (url.length === 0) {
  7443. ctrl.statusLevel('none');
  7444. return;
  7445. }
  7446. validatorHandler({
  7447. url: url,
  7448. type: fileType
  7449. }, function (result) {
  7450. var uiState = statusToUiState(result);
  7451. ctrl.statusMessage(uiState.message);
  7452. ctrl.statusLevel(uiState.status);
  7453. });
  7454. };
  7455. ctrl.state.on('change:value', function (e) {
  7456. validateUrl_1(e.value);
  7457. });
  7458. }
  7459. };
  7460. var FilePicker = ComboBox.extend({
  7461. Statics: { clearHistory: clearHistory },
  7462. init: function (settings) {
  7463. var self = this, editor = getActiveEditor(), editorSettings = editor.settings;
  7464. var actionCallback, fileBrowserCallback, fileBrowserCallbackTypes;
  7465. var fileType = settings.filetype;
  7466. settings.spellcheck = false;
  7467. fileBrowserCallbackTypes = editorSettings.file_picker_types || editorSettings.file_browser_callback_types;
  7468. if (fileBrowserCallbackTypes) {
  7469. fileBrowserCallbackTypes = global$2.makeMap(fileBrowserCallbackTypes, /[, ]/);
  7470. }
  7471. if (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[fileType]) {
  7472. fileBrowserCallback = editorSettings.file_picker_callback;
  7473. if (fileBrowserCallback && (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[fileType])) {
  7474. actionCallback = function () {
  7475. var meta = self.fire('beforecall').meta;
  7476. meta = global$2.extend({ filetype: fileType }, meta);
  7477. fileBrowserCallback.call(editor, function (value, meta) {
  7478. self.value(value).fire('change', { meta: meta });
  7479. }, self.value(), meta);
  7480. };
  7481. } else {
  7482. fileBrowserCallback = editorSettings.file_browser_callback;
  7483. if (fileBrowserCallback && (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[fileType])) {
  7484. actionCallback = function () {
  7485. fileBrowserCallback(self.getEl('inp').id, self.value(), fileType, window);
  7486. };
  7487. }
  7488. }
  7489. }
  7490. if (actionCallback) {
  7491. settings.icon = 'browse';
  7492. settings.onaction = actionCallback;
  7493. }
  7494. self._super(settings);
  7495. self.classes.add('filepicker');
  7496. setupAutoCompleteHandler(self, editorSettings, editor.getBody(), fileType);
  7497. setupLinkValidatorHandler(self, editorSettings, fileType);
  7498. }
  7499. });
  7500. var FitLayout = AbsoluteLayout.extend({
  7501. recalc: function (container) {
  7502. var contLayoutRect = container.layoutRect(), paddingBox = container.paddingBox;
  7503. container.items().filter(':visible').each(function (ctrl) {
  7504. ctrl.layoutRect({
  7505. x: paddingBox.left,
  7506. y: paddingBox.top,
  7507. w: contLayoutRect.innerW - paddingBox.right - paddingBox.left,
  7508. h: contLayoutRect.innerH - paddingBox.top - paddingBox.bottom
  7509. });
  7510. if (ctrl.recalc) {
  7511. ctrl.recalc();
  7512. }
  7513. });
  7514. }
  7515. });
  7516. var FlexLayout = AbsoluteLayout.extend({
  7517. recalc: function (container) {
  7518. var i, l, items, contLayoutRect, contPaddingBox, contSettings, align, pack, spacing, totalFlex, availableSpace, direction;
  7519. var ctrl, ctrlLayoutRect, ctrlSettings, flex;
  7520. var maxSizeItems = [];
  7521. var size, maxSize, ratio, rect, pos, maxAlignEndPos;
  7522. var sizeName, minSizeName, posName, maxSizeName, beforeName, innerSizeName, deltaSizeName, contentSizeName;
  7523. var alignAxisName, alignInnerSizeName, alignSizeName, alignMinSizeName, alignBeforeName, alignAfterName;
  7524. var alignDeltaSizeName, alignContentSizeName;
  7525. var max = Math.max, min = Math.min;
  7526. items = container.items().filter(':visible');
  7527. contLayoutRect = container.layoutRect();
  7528. contPaddingBox = container.paddingBox;
  7529. contSettings = container.settings;
  7530. direction = container.isRtl() ? contSettings.direction || 'row-reversed' : contSettings.direction;
  7531. align = contSettings.align;
  7532. pack = container.isRtl() ? contSettings.pack || 'end' : contSettings.pack;
  7533. spacing = contSettings.spacing || 0;
  7534. if (direction === 'row-reversed' || direction === 'column-reverse') {
  7535. items = items.set(items.toArray().reverse());
  7536. direction = direction.split('-')[0];
  7537. }
  7538. if (direction === 'column') {
  7539. posName = 'y';
  7540. sizeName = 'h';
  7541. minSizeName = 'minH';
  7542. maxSizeName = 'maxH';
  7543. innerSizeName = 'innerH';
  7544. beforeName = 'top';
  7545. deltaSizeName = 'deltaH';
  7546. contentSizeName = 'contentH';
  7547. alignBeforeName = 'left';
  7548. alignSizeName = 'w';
  7549. alignAxisName = 'x';
  7550. alignInnerSizeName = 'innerW';
  7551. alignMinSizeName = 'minW';
  7552. alignAfterName = 'right';
  7553. alignDeltaSizeName = 'deltaW';
  7554. alignContentSizeName = 'contentW';
  7555. } else {
  7556. posName = 'x';
  7557. sizeName = 'w';
  7558. minSizeName = 'minW';
  7559. maxSizeName = 'maxW';
  7560. innerSizeName = 'innerW';
  7561. beforeName = 'left';
  7562. deltaSizeName = 'deltaW';
  7563. contentSizeName = 'contentW';
  7564. alignBeforeName = 'top';
  7565. alignSizeName = 'h';
  7566. alignAxisName = 'y';
  7567. alignInnerSizeName = 'innerH';
  7568. alignMinSizeName = 'minH';
  7569. alignAfterName = 'bottom';
  7570. alignDeltaSizeName = 'deltaH';
  7571. alignContentSizeName = 'contentH';
  7572. }
  7573. availableSpace = contLayoutRect[innerSizeName] - contPaddingBox[beforeName] - contPaddingBox[beforeName];
  7574. maxAlignEndPos = totalFlex = 0;
  7575. for (i = 0, l = items.length; i < l; i++) {
  7576. ctrl = items[i];
  7577. ctrlLayoutRect = ctrl.layoutRect();
  7578. ctrlSettings = ctrl.settings;
  7579. flex = ctrlSettings.flex;
  7580. availableSpace -= i < l - 1 ? spacing : 0;
  7581. if (flex > 0) {
  7582. totalFlex += flex;
  7583. if (ctrlLayoutRect[maxSizeName]) {
  7584. maxSizeItems.push(ctrl);
  7585. }
  7586. ctrlLayoutRect.flex = flex;
  7587. }
  7588. availableSpace -= ctrlLayoutRect[minSizeName];
  7589. size = contPaddingBox[alignBeforeName] + ctrlLayoutRect[alignMinSizeName] + contPaddingBox[alignAfterName];
  7590. if (size > maxAlignEndPos) {
  7591. maxAlignEndPos = size;
  7592. }
  7593. }
  7594. rect = {};
  7595. if (availableSpace < 0) {
  7596. rect[minSizeName] = contLayoutRect[minSizeName] - availableSpace + contLayoutRect[deltaSizeName];
  7597. } else {
  7598. rect[minSizeName] = contLayoutRect[innerSizeName] - availableSpace + contLayoutRect[deltaSizeName];
  7599. }
  7600. rect[alignMinSizeName] = maxAlignEndPos + contLayoutRect[alignDeltaSizeName];
  7601. rect[contentSizeName] = contLayoutRect[innerSizeName] - availableSpace;
  7602. rect[alignContentSizeName] = maxAlignEndPos;
  7603. rect.minW = min(rect.minW, contLayoutRect.maxW);
  7604. rect.minH = min(rect.minH, contLayoutRect.maxH);
  7605. rect.minW = max(rect.minW, contLayoutRect.startMinWidth);
  7606. rect.minH = max(rect.minH, contLayoutRect.startMinHeight);
  7607. if (contLayoutRect.autoResize && (rect.minW !== contLayoutRect.minW || rect.minH !== contLayoutRect.minH)) {
  7608. rect.w = rect.minW;
  7609. rect.h = rect.minH;
  7610. container.layoutRect(rect);
  7611. this.recalc(container);
  7612. if (container._lastRect === null) {
  7613. var parentCtrl = container.parent();
  7614. if (parentCtrl) {
  7615. parentCtrl._lastRect = null;
  7616. parentCtrl.recalc();
  7617. }
  7618. }
  7619. return;
  7620. }
  7621. ratio = availableSpace / totalFlex;
  7622. for (i = 0, l = maxSizeItems.length; i < l; i++) {
  7623. ctrl = maxSizeItems[i];
  7624. ctrlLayoutRect = ctrl.layoutRect();
  7625. maxSize = ctrlLayoutRect[maxSizeName];
  7626. size = ctrlLayoutRect[minSizeName] + ctrlLayoutRect.flex * ratio;
  7627. if (size > maxSize) {
  7628. availableSpace -= ctrlLayoutRect[maxSizeName] - ctrlLayoutRect[minSizeName];
  7629. totalFlex -= ctrlLayoutRect.flex;
  7630. ctrlLayoutRect.flex = 0;
  7631. ctrlLayoutRect.maxFlexSize = maxSize;
  7632. } else {
  7633. ctrlLayoutRect.maxFlexSize = 0;
  7634. }
  7635. }
  7636. ratio = availableSpace / totalFlex;
  7637. pos = contPaddingBox[beforeName];
  7638. rect = {};
  7639. if (totalFlex === 0) {
  7640. if (pack === 'end') {
  7641. pos = availableSpace + contPaddingBox[beforeName];
  7642. } else if (pack === 'center') {
  7643. pos = Math.round(contLayoutRect[innerSizeName] / 2 - (contLayoutRect[innerSizeName] - availableSpace) / 2) + contPaddingBox[beforeName];
  7644. if (pos < 0) {
  7645. pos = contPaddingBox[beforeName];
  7646. }
  7647. } else if (pack === 'justify') {
  7648. pos = contPaddingBox[beforeName];
  7649. spacing = Math.floor(availableSpace / (items.length - 1));
  7650. }
  7651. }
  7652. rect[alignAxisName] = contPaddingBox[alignBeforeName];
  7653. for (i = 0, l = items.length; i < l; i++) {
  7654. ctrl = items[i];
  7655. ctrlLayoutRect = ctrl.layoutRect();
  7656. size = ctrlLayoutRect.maxFlexSize || ctrlLayoutRect[minSizeName];
  7657. if (align === 'center') {
  7658. rect[alignAxisName] = Math.round(contLayoutRect[alignInnerSizeName] / 2 - ctrlLayoutRect[alignSizeName] / 2);
  7659. } else if (align === 'stretch') {
  7660. rect[alignSizeName] = max(ctrlLayoutRect[alignMinSizeName] || 0, contLayoutRect[alignInnerSizeName] - contPaddingBox[alignBeforeName] - contPaddingBox[alignAfterName]);
  7661. rect[alignAxisName] = contPaddingBox[alignBeforeName];
  7662. } else if (align === 'end') {
  7663. rect[alignAxisName] = contLayoutRect[alignInnerSizeName] - ctrlLayoutRect[alignSizeName] - contPaddingBox.top;
  7664. }
  7665. if (ctrlLayoutRect.flex > 0) {
  7666. size += ctrlLayoutRect.flex * ratio;
  7667. }
  7668. rect[sizeName] = size;
  7669. rect[posName] = pos;
  7670. ctrl.layoutRect(rect);
  7671. if (ctrl.recalc) {
  7672. ctrl.recalc();
  7673. }
  7674. pos += size + spacing;
  7675. }
  7676. }
  7677. });
  7678. var FlowLayout = Layout.extend({
  7679. Defaults: {
  7680. containerClass: 'flow-layout',
  7681. controlClass: 'flow-layout-item',
  7682. endClass: 'break'
  7683. },
  7684. recalc: function (container) {
  7685. container.items().filter(':visible').each(function (ctrl) {
  7686. if (ctrl.recalc) {
  7687. ctrl.recalc();
  7688. }
  7689. });
  7690. },
  7691. isNative: function () {
  7692. return true;
  7693. }
  7694. });
  7695. function ClosestOrAncestor (is, ancestor, scope, a, isRoot) {
  7696. return is(scope, a) ? Option.some(scope) : $_d8bie3tijh8lz3kn.isFunction(isRoot) && isRoot(scope) ? Option.none() : ancestor(scope, a, isRoot);
  7697. }
  7698. var first$1 = function (predicate) {
  7699. return descendant($_35bizev9jh8lz3rx.body(), predicate);
  7700. };
  7701. var ancestor = function (scope, predicate, isRoot) {
  7702. var element = scope.dom();
  7703. var stop = $_d8bie3tijh8lz3kn.isFunction(isRoot) ? isRoot : $_3pjweotejh8lz3k4.constant(false);
  7704. while (element.parentNode) {
  7705. element = element.parentNode;
  7706. var el = $_3bkrfxv6jh8lz3rm.fromDom(element);
  7707. if (predicate(el))
  7708. return Option.some(el);
  7709. else if (stop(el))
  7710. break;
  7711. }
  7712. return Option.none();
  7713. };
  7714. var closest = function (scope, predicate, isRoot) {
  7715. var is = function (scope) {
  7716. return predicate(scope);
  7717. };
  7718. return ClosestOrAncestor(is, ancestor, scope, predicate, isRoot);
  7719. };
  7720. var sibling = function (scope, predicate) {
  7721. var element = scope.dom();
  7722. if (!element.parentNode)
  7723. return Option.none();
  7724. return child$1($_3bkrfxv6jh8lz3rm.fromDom(element.parentNode), function (x) {
  7725. return !$_9ypjy6vkjh8lz3sq.eq(scope, x) && predicate(x);
  7726. });
  7727. };
  7728. var child$1 = function (scope, predicate) {
  7729. var result = $_f3qxhzthjh8lz3kg.find(scope.dom().childNodes, $_3pjweotejh8lz3k4.compose(predicate, $_3bkrfxv6jh8lz3rm.fromDom));
  7730. return result.map($_3bkrfxv6jh8lz3rm.fromDom);
  7731. };
  7732. var descendant = function (scope, predicate) {
  7733. var descend = function (element) {
  7734. for (var i = 0; i < element.childNodes.length; i++) {
  7735. if (predicate($_3bkrfxv6jh8lz3rm.fromDom(element.childNodes[i])))
  7736. return Option.some($_3bkrfxv6jh8lz3rm.fromDom(element.childNodes[i]));
  7737. var res = descend(element.childNodes[i]);
  7738. if (res.isSome())
  7739. return res;
  7740. }
  7741. return Option.none();
  7742. };
  7743. return descend(scope.dom());
  7744. };
  7745. var $_5a72sw6jh8lz3uv = {
  7746. first: first$1,
  7747. ancestor: ancestor,
  7748. closest: closest,
  7749. sibling: sibling,
  7750. child: child$1,
  7751. descendant: descendant
  7752. };
  7753. var first$2 = function (selector) {
  7754. return $_2nczsvw0jh8lz3ua.one(selector);
  7755. };
  7756. var ancestor$1 = function (scope, selector, isRoot) {
  7757. return $_5a72sw6jh8lz3uv.ancestor(scope, function (e) {
  7758. return $_2nczsvw0jh8lz3ua.is(e, selector);
  7759. }, isRoot);
  7760. };
  7761. var sibling$1 = function (scope, selector) {
  7762. return $_5a72sw6jh8lz3uv.sibling(scope, function (e) {
  7763. return $_2nczsvw0jh8lz3ua.is(e, selector);
  7764. });
  7765. };
  7766. var child$2 = function (scope, selector) {
  7767. return $_5a72sw6jh8lz3uv.child(scope, function (e) {
  7768. return $_2nczsvw0jh8lz3ua.is(e, selector);
  7769. });
  7770. };
  7771. var descendant$1 = function (scope, selector) {
  7772. return $_2nczsvw0jh8lz3ua.one(selector, scope);
  7773. };
  7774. var closest$1 = function (scope, selector, isRoot) {
  7775. return ClosestOrAncestor($_2nczsvw0jh8lz3ua.is, ancestor$1, scope, selector, isRoot);
  7776. };
  7777. var $_9rr9rgw5jh8lz3uu = {
  7778. first: first$2,
  7779. ancestor: ancestor$1,
  7780. sibling: sibling$1,
  7781. child: child$2,
  7782. descendant: descendant$1,
  7783. closest: closest$1
  7784. };
  7785. var toggleFormat = function (editor, fmt) {
  7786. return function () {
  7787. editor.execCommand('mceToggleFormat', false, fmt);
  7788. };
  7789. };
  7790. var addFormatChangedListener = function (editor, name, changed) {
  7791. var handler = function (state) {
  7792. changed(state, name);
  7793. };
  7794. if (editor.formatter) {
  7795. editor.formatter.formatChanged(name, handler);
  7796. } else {
  7797. editor.on('init', function () {
  7798. editor.formatter.formatChanged(name, handler);
  7799. });
  7800. }
  7801. };
  7802. var postRenderFormatToggle = function (editor, name) {
  7803. return function (e) {
  7804. addFormatChangedListener(editor, name, function (state) {
  7805. e.control.active(state);
  7806. });
  7807. };
  7808. };
  7809. var register = function (editor) {
  7810. var alignFormats = [
  7811. 'alignleft',
  7812. 'aligncenter',
  7813. 'alignright',
  7814. 'alignjustify'
  7815. ];
  7816. var defaultAlign = 'alignleft';
  7817. var alignMenuItems = [
  7818. {
  7819. text: 'Left',
  7820. icon: 'alignleft',
  7821. onclick: toggleFormat(editor, 'alignleft')
  7822. },
  7823. {
  7824. text: 'Center',
  7825. icon: 'aligncenter',
  7826. onclick: toggleFormat(editor, 'aligncenter')
  7827. },
  7828. {
  7829. text: 'Right',
  7830. icon: 'alignright',
  7831. onclick: toggleFormat(editor, 'alignright')
  7832. },
  7833. {
  7834. text: 'Justify',
  7835. icon: 'alignjustify',
  7836. onclick: toggleFormat(editor, 'alignjustify')
  7837. }
  7838. ];
  7839. editor.addMenuItem('align', {
  7840. text: 'Align',
  7841. menu: alignMenuItems
  7842. });
  7843. editor.addButton('align', {
  7844. type: 'menubutton',
  7845. icon: defaultAlign,
  7846. menu: alignMenuItems,
  7847. onShowMenu: function (e) {
  7848. var menu = e.control.menu;
  7849. global$2.each(alignFormats, function (formatName, idx) {
  7850. menu.items().eq(idx).each(function (item) {
  7851. return item.active(editor.formatter.match(formatName));
  7852. });
  7853. });
  7854. },
  7855. onPostRender: function (e) {
  7856. var ctrl = e.control;
  7857. global$2.each(alignFormats, function (formatName, idx) {
  7858. addFormatChangedListener(editor, formatName, function (state) {
  7859. ctrl.icon(defaultAlign);
  7860. if (state) {
  7861. ctrl.icon(formatName);
  7862. }
  7863. });
  7864. });
  7865. }
  7866. });
  7867. global$2.each({
  7868. alignleft: [
  7869. 'Align left',
  7870. 'JustifyLeft'
  7871. ],
  7872. aligncenter: [
  7873. 'Align center',
  7874. 'JustifyCenter'
  7875. ],
  7876. alignright: [
  7877. 'Align right',
  7878. 'JustifyRight'
  7879. ],
  7880. alignjustify: [
  7881. 'Justify',
  7882. 'JustifyFull'
  7883. ],
  7884. alignnone: [
  7885. 'No alignment',
  7886. 'JustifyNone'
  7887. ]
  7888. }, function (item, name) {
  7889. editor.addButton(name, {
  7890. active: false,
  7891. tooltip: item[0],
  7892. cmd: item[1],
  7893. onPostRender: postRenderFormatToggle(editor, name)
  7894. });
  7895. });
  7896. };
  7897. var $_a6x5k4w8jh8lz3vh = { register: register };
  7898. var getFirstFont = function (fontFamily) {
  7899. return fontFamily ? fontFamily.split(',')[0] : '';
  7900. };
  7901. var findMatchingValue = function (items, fontFamily) {
  7902. var font = fontFamily ? fontFamily.toLowerCase() : '';
  7903. var value;
  7904. global$2.each(items, function (item) {
  7905. if (item.value.toLowerCase() === font) {
  7906. value = item.value;
  7907. }
  7908. });
  7909. global$2.each(items, function (item) {
  7910. if (!value && getFirstFont(item.value).toLowerCase() === getFirstFont(font).toLowerCase()) {
  7911. value = item.value;
  7912. }
  7913. });
  7914. return value;
  7915. };
  7916. var createFontNameListBoxChangeHandler = function (editor, items) {
  7917. return function () {
  7918. var self = this;
  7919. editor.on('init nodeChange', function (e) {
  7920. var fontFamily = editor.queryCommandValue('FontName');
  7921. var match = findMatchingValue(items, fontFamily);
  7922. self.value(match ? match : null);
  7923. if (!match && fontFamily) {
  7924. self.text(getFirstFont(fontFamily));
  7925. }
  7926. });
  7927. };
  7928. };
  7929. var createFormats = function (formats) {
  7930. formats = formats.replace(/;$/, '').split(';');
  7931. var i = formats.length;
  7932. while (i--) {
  7933. formats[i] = formats[i].split('=');
  7934. }
  7935. return formats;
  7936. };
  7937. var getFontItems = function (editor) {
  7938. var defaultFontsFormats = 'Andale Mono=andale mono,monospace;' + 'Arial=arial,helvetica,sans-serif;' + 'Arial Black=arial black,sans-serif;' + 'Book Antiqua=book antiqua,palatino,serif;' + 'Comic Sans MS=comic sans ms,sans-serif;' + 'Courier New=courier new,courier,monospace;' + 'Georgia=georgia,palatino,serif;' + 'Helvetica=helvetica,arial,sans-serif;' + 'Impact=impact,sans-serif;' + 'Symbol=symbol;' + 'Tahoma=tahoma,arial,helvetica,sans-serif;' + 'Terminal=terminal,monaco,monospace;' + 'Times New Roman=times new roman,times,serif;' + 'Trebuchet MS=trebuchet ms,geneva,sans-serif;' + 'Verdana=verdana,geneva,sans-serif;' + 'Webdings=webdings;' + 'Wingdings=wingdings,zapf dingbats';
  7939. var fonts = createFormats(editor.settings.font_formats || defaultFontsFormats);
  7940. return global$2.map(fonts, function (font) {
  7941. return {
  7942. text: { raw: font[0] },
  7943. value: font[1],
  7944. textStyle: font[1].indexOf('dings') === -1 ? 'font-family:' + font[1] : ''
  7945. };
  7946. });
  7947. };
  7948. var registerButtons = function (editor) {
  7949. editor.addButton('fontselect', function () {
  7950. var items = getFontItems(editor);
  7951. return {
  7952. type: 'listbox',
  7953. text: 'Font Family',
  7954. tooltip: 'Font Family',
  7955. values: items,
  7956. fixedWidth: true,
  7957. onPostRender: createFontNameListBoxChangeHandler(editor, items),
  7958. onselect: function (e) {
  7959. if (e.control.settings.value) {
  7960. editor.execCommand('FontName', false, e.control.settings.value);
  7961. }
  7962. }
  7963. };
  7964. });
  7965. };
  7966. var register$1 = function (editor) {
  7967. registerButtons(editor);
  7968. };
  7969. var $_4hdsyewajh8lz3vk = { register: register$1 };
  7970. var round = function (number, precision) {
  7971. var factor = Math.pow(10, precision);
  7972. return Math.round(number * factor) / factor;
  7973. };
  7974. var toPt = function (fontSize, precision) {
  7975. if (/[0-9.]+px$/.test(fontSize)) {
  7976. return round(parseInt(fontSize, 10) * 72 / 96, precision || 0) + 'pt';
  7977. }
  7978. return fontSize;
  7979. };
  7980. var findMatchingValue$1 = function (items, pt, px) {
  7981. var value;
  7982. global$2.each(items, function (item) {
  7983. if (item.value === px) {
  7984. value = px;
  7985. } else if (item.value === pt) {
  7986. value = pt;
  7987. }
  7988. });
  7989. return value;
  7990. };
  7991. var createFontSizeListBoxChangeHandler = function (editor, items) {
  7992. return function () {
  7993. var self = this;
  7994. editor.on('init nodeChange', function (e) {
  7995. var px, pt, precision, match;
  7996. px = editor.queryCommandValue('FontSize');
  7997. if (px) {
  7998. for (precision = 3; !match && precision >= 0; precision--) {
  7999. pt = toPt(px, precision);
  8000. match = findMatchingValue$1(items, pt, px);
  8001. }
  8002. }
  8003. self.value(match ? match : null);
  8004. if (!match) {
  8005. self.text(pt);
  8006. }
  8007. });
  8008. };
  8009. };
  8010. var getFontSizeItems = function (editor) {
  8011. var defaultFontsizeFormats = '8pt 10pt 12pt 14pt 18pt 24pt 36pt';
  8012. var fontsizeFormats = editor.settings.fontsize_formats || defaultFontsizeFormats;
  8013. return global$2.map(fontsizeFormats.split(' '), function (item) {
  8014. var text = item, value = item;
  8015. var values = item.split('=');
  8016. if (values.length > 1) {
  8017. text = values[0];
  8018. value = values[1];
  8019. }
  8020. return {
  8021. text: text,
  8022. value: value
  8023. };
  8024. });
  8025. };
  8026. var registerButtons$1 = function (editor) {
  8027. editor.addButton('fontsizeselect', function () {
  8028. var items = getFontSizeItems(editor);
  8029. return {
  8030. type: 'listbox',
  8031. text: 'Font Sizes',
  8032. tooltip: 'Font Sizes',
  8033. values: items,
  8034. fixedWidth: true,
  8035. onPostRender: createFontSizeListBoxChangeHandler(editor, items),
  8036. onclick: function (e) {
  8037. if (e.control.settings.value) {
  8038. editor.execCommand('FontSize', false, e.control.settings.value);
  8039. }
  8040. }
  8041. };
  8042. });
  8043. };
  8044. var register$2 = function (editor) {
  8045. registerButtons$1(editor);
  8046. };
  8047. var $_du9atdwbjh8lz3vn = { register: register$2 };
  8048. var hideMenuObjects = function (editor, menu) {
  8049. var count = menu.length;
  8050. global$2.each(menu, function (item) {
  8051. if (item.menu) {
  8052. item.hidden = hideMenuObjects(editor, item.menu) === 0;
  8053. }
  8054. var formatName = item.format;
  8055. if (formatName) {
  8056. item.hidden = !editor.formatter.canApply(formatName);
  8057. }
  8058. if (item.hidden) {
  8059. count--;
  8060. }
  8061. });
  8062. return count;
  8063. };
  8064. var hideFormatMenuItems = function (editor, menu) {
  8065. var count = menu.items().length;
  8066. menu.items().each(function (item) {
  8067. if (item.menu) {
  8068. item.visible(hideFormatMenuItems(editor, item.menu) > 0);
  8069. }
  8070. if (!item.menu && item.settings.menu) {
  8071. item.visible(hideMenuObjects(editor, item.settings.menu) > 0);
  8072. }
  8073. var formatName = item.settings.format;
  8074. if (formatName) {
  8075. item.visible(editor.formatter.canApply(formatName));
  8076. }
  8077. if (!item.visible()) {
  8078. count--;
  8079. }
  8080. });
  8081. return count;
  8082. };
  8083. var createFormatMenu = function (editor) {
  8084. var count = 0;
  8085. var newFormats = [];
  8086. var defaultStyleFormats = [
  8087. {
  8088. title: 'Headings',
  8089. items: [
  8090. {
  8091. title: 'Heading 1',
  8092. format: 'h1'
  8093. },
  8094. {
  8095. title: 'Heading 2',
  8096. format: 'h2'
  8097. },
  8098. {
  8099. title: 'Heading 3',
  8100. format: 'h3'
  8101. },
  8102. {
  8103. title: 'Heading 4',
  8104. format: 'h4'
  8105. },
  8106. {
  8107. title: 'Heading 5',
  8108. format: 'h5'
  8109. },
  8110. {
  8111. title: 'Heading 6',
  8112. format: 'h6'
  8113. }
  8114. ]
  8115. },
  8116. {
  8117. title: 'Inline',
  8118. items: [
  8119. {
  8120. title: 'Bold',
  8121. icon: 'bold',
  8122. format: 'bold'
  8123. },
  8124. {
  8125. title: 'Italic',
  8126. icon: 'italic',
  8127. format: 'italic'
  8128. },
  8129. {
  8130. title: 'Underline',
  8131. icon: 'underline',
  8132. format: 'underline'
  8133. },
  8134. {
  8135. title: 'Strikethrough',
  8136. icon: 'strikethrough',
  8137. format: 'strikethrough'
  8138. },
  8139. {
  8140. title: 'Superscript',
  8141. icon: 'superscript',
  8142. format: 'superscript'
  8143. },
  8144. {
  8145. title: 'Subscript',
  8146. icon: 'subscript',
  8147. format: 'subscript'
  8148. },
  8149. {
  8150. title: 'Code',
  8151. icon: 'code',
  8152. format: 'code'
  8153. }
  8154. ]
  8155. },
  8156. {
  8157. title: 'Blocks',
  8158. items: [
  8159. {
  8160. title: 'Paragraph',
  8161. format: 'p'
  8162. },
  8163. {
  8164. title: 'Blockquote',
  8165. format: 'blockquote'
  8166. },
  8167. {
  8168. title: 'Div',
  8169. format: 'div'
  8170. },
  8171. {
  8172. title: 'Pre',
  8173. format: 'pre'
  8174. }
  8175. ]
  8176. },
  8177. {
  8178. title: 'Alignment',
  8179. items: [
  8180. {
  8181. title: 'Left',
  8182. icon: 'alignleft',
  8183. format: 'alignleft'
  8184. },
  8185. {
  8186. title: 'Center',
  8187. icon: 'aligncenter',
  8188. format: 'aligncenter'
  8189. },
  8190. {
  8191. title: 'Right',
  8192. icon: 'alignright',
  8193. format: 'alignright'
  8194. },
  8195. {
  8196. title: 'Justify',
  8197. icon: 'alignjustify',
  8198. format: 'alignjustify'
  8199. }
  8200. ]
  8201. }
  8202. ];
  8203. var createMenu = function (formats) {
  8204. var menu = [];
  8205. if (!formats) {
  8206. return;
  8207. }
  8208. global$2.each(formats, function (format) {
  8209. var menuItem = {
  8210. text: format.title,
  8211. icon: format.icon
  8212. };
  8213. if (format.items) {
  8214. menuItem.menu = createMenu(format.items);
  8215. } else {
  8216. var formatName = format.format || 'custom' + count++;
  8217. if (!format.format) {
  8218. format.name = formatName;
  8219. newFormats.push(format);
  8220. }
  8221. menuItem.format = formatName;
  8222. menuItem.cmd = format.cmd;
  8223. }
  8224. menu.push(menuItem);
  8225. });
  8226. return menu;
  8227. };
  8228. var createStylesMenu = function () {
  8229. var menu;
  8230. if (editor.settings.style_formats_merge) {
  8231. if (editor.settings.style_formats) {
  8232. menu = createMenu(defaultStyleFormats.concat(editor.settings.style_formats));
  8233. } else {
  8234. menu = createMenu(defaultStyleFormats);
  8235. }
  8236. } else {
  8237. menu = createMenu(editor.settings.style_formats || defaultStyleFormats);
  8238. }
  8239. return menu;
  8240. };
  8241. editor.on('init', function () {
  8242. global$2.each(newFormats, function (format) {
  8243. editor.formatter.register(format.name, format);
  8244. });
  8245. });
  8246. return {
  8247. type: 'menu',
  8248. items: createStylesMenu(),
  8249. onPostRender: function (e) {
  8250. editor.fire('renderFormatsMenu', { control: e.control });
  8251. },
  8252. itemDefaults: {
  8253. preview: true,
  8254. textStyle: function () {
  8255. if (this.settings.format) {
  8256. return editor.formatter.getCssText(this.settings.format);
  8257. }
  8258. },
  8259. onPostRender: function () {
  8260. var self = this;
  8261. self.parent().on('show', function () {
  8262. var formatName, command;
  8263. formatName = self.settings.format;
  8264. if (formatName) {
  8265. self.disabled(!editor.formatter.canApply(formatName));
  8266. self.active(editor.formatter.match(formatName));
  8267. }
  8268. command = self.settings.cmd;
  8269. if (command) {
  8270. self.active(editor.queryCommandState(command));
  8271. }
  8272. });
  8273. },
  8274. onclick: function () {
  8275. if (this.settings.format) {
  8276. toggleFormat(editor, this.settings.format)();
  8277. }
  8278. if (this.settings.cmd) {
  8279. editor.execCommand(this.settings.cmd);
  8280. }
  8281. }
  8282. }
  8283. };
  8284. };
  8285. var registerMenuItems = function (editor, formatMenu) {
  8286. editor.addMenuItem('formats', {
  8287. text: 'Formats',
  8288. menu: formatMenu
  8289. });
  8290. };
  8291. var registerButtons$2 = function (editor, formatMenu) {
  8292. editor.addButton('styleselect', {
  8293. type: 'menubutton',
  8294. text: 'Formats',
  8295. menu: formatMenu,
  8296. onShowMenu: function () {
  8297. if (editor.settings.style_formats_autohide) {
  8298. hideFormatMenuItems(editor, this.menu);
  8299. }
  8300. }
  8301. });
  8302. };
  8303. var register$3 = function (editor) {
  8304. var formatMenu = createFormatMenu(editor);
  8305. registerMenuItems(editor, formatMenu);
  8306. registerButtons$2(editor, formatMenu);
  8307. };
  8308. var $_5xlhbcwcjh8lz3vr = { register: register$3 };
  8309. var defaultBlocks = 'Paragraph=p;' + 'Heading 1=h1;' + 'Heading 2=h2;' + 'Heading 3=h3;' + 'Heading 4=h4;' + 'Heading 5=h5;' + 'Heading 6=h6;' + 'Preformatted=pre';
  8310. var createFormats$1 = function (formats) {
  8311. formats = formats.replace(/;$/, '').split(';');
  8312. var i = formats.length;
  8313. while (i--) {
  8314. formats[i] = formats[i].split('=');
  8315. }
  8316. return formats;
  8317. };
  8318. var createListBoxChangeHandler = function (editor, items, formatName) {
  8319. return function () {
  8320. var self = this;
  8321. editor.on('nodeChange', function (e) {
  8322. var formatter = editor.formatter;
  8323. var value = null;
  8324. global$2.each(e.parents, function (node) {
  8325. global$2.each(items, function (item) {
  8326. if (formatName) {
  8327. if (formatter.matchNode(node, formatName, { value: item.value })) {
  8328. value = item.value;
  8329. }
  8330. } else {
  8331. if (formatter.matchNode(node, item.value)) {
  8332. value = item.value;
  8333. }
  8334. }
  8335. if (value) {
  8336. return false;
  8337. }
  8338. });
  8339. if (value) {
  8340. return false;
  8341. }
  8342. });
  8343. self.value(value);
  8344. });
  8345. };
  8346. };
  8347. var lazyFormatSelectBoxItems = function (editor, blocks) {
  8348. return function () {
  8349. var items = [];
  8350. global$2.each(blocks, function (block) {
  8351. items.push({
  8352. text: block[0],
  8353. value: block[1],
  8354. textStyle: function () {
  8355. return editor.formatter.getCssText(block[1]);
  8356. }
  8357. });
  8358. });
  8359. return {
  8360. type: 'listbox',
  8361. text: blocks[0][0],
  8362. values: items,
  8363. fixedWidth: true,
  8364. onselect: function (e) {
  8365. if (e.control) {
  8366. var fmt = e.control.value();
  8367. toggleFormat(editor, fmt)();
  8368. }
  8369. },
  8370. onPostRender: createListBoxChangeHandler(editor, items)
  8371. };
  8372. };
  8373. };
  8374. var buildMenuItems = function (editor, blocks) {
  8375. return global$2.map(blocks, function (block) {
  8376. return {
  8377. text: block[0],
  8378. onclick: toggleFormat(editor, block[1]),
  8379. textStyle: function () {
  8380. return editor.formatter.getCssText(block[1]);
  8381. }
  8382. };
  8383. });
  8384. };
  8385. var register$4 = function (editor) {
  8386. var blocks = createFormats$1(editor.settings.block_formats || defaultBlocks);
  8387. editor.addMenuItem('blockformats', {
  8388. text: 'Blocks',
  8389. menu: buildMenuItems(editor, blocks)
  8390. });
  8391. editor.addButton('formatselect', lazyFormatSelectBoxItems(editor, blocks));
  8392. };
  8393. var $_bj8nxmwdjh8lz3vw = { register: register$4 };
  8394. var createCustomMenuItems = function (editor, names) {
  8395. var items, nameList;
  8396. if (typeof names === 'string') {
  8397. nameList = names.split(' ');
  8398. } else if (global$2.isArray(names)) {
  8399. return $_f3qxhzthjh8lz3kg.flatten(global$2.map(names, function (names) {
  8400. return createCustomMenuItems(editor, names);
  8401. }));
  8402. }
  8403. items = global$2.grep(nameList, function (name) {
  8404. return name === '|' || name in editor.menuItems;
  8405. });
  8406. return global$2.map(items, function (name) {
  8407. return name === '|' ? { text: '-' } : editor.menuItems[name];
  8408. });
  8409. };
  8410. var isSeparator$1 = function (menuItem) {
  8411. return menuItem && menuItem.text === '-';
  8412. };
  8413. var trimMenuItems = function (menuItems) {
  8414. var menuItems2 = $_f3qxhzthjh8lz3kg.filter(menuItems, function (menuItem, i, menuItems) {
  8415. return !isSeparator$1(menuItem) || !isSeparator$1(menuItems[i - 1]);
  8416. });
  8417. return $_f3qxhzthjh8lz3kg.filter(menuItems2, function (menuItem, i, menuItems) {
  8418. return !isSeparator$1(menuItem) || i > 0 && i < menuItems.length - 1;
  8419. });
  8420. };
  8421. var createContextMenuItems = function (editor, context) {
  8422. var outputMenuItems = [{ text: '-' }];
  8423. var menuItems = global$2.grep(editor.menuItems, function (menuItem) {
  8424. return menuItem.context === context;
  8425. });
  8426. global$2.each(menuItems, function (menuItem) {
  8427. if (menuItem.separator === 'before') {
  8428. outputMenuItems.push({ text: '|' });
  8429. }
  8430. if (menuItem.prependToContext) {
  8431. outputMenuItems.unshift(menuItem);
  8432. } else {
  8433. outputMenuItems.push(menuItem);
  8434. }
  8435. if (menuItem.separator === 'after') {
  8436. outputMenuItems.push({ text: '|' });
  8437. }
  8438. });
  8439. return outputMenuItems;
  8440. };
  8441. var createInsertMenu = function (editor) {
  8442. var insertButtonItems = editor.settings.insert_button_items;
  8443. if (insertButtonItems) {
  8444. return trimMenuItems(createCustomMenuItems(editor, insertButtonItems));
  8445. } else {
  8446. return trimMenuItems(createContextMenuItems(editor, 'insert'));
  8447. }
  8448. };
  8449. var registerButtons$3 = function (editor) {
  8450. editor.addButton('insert', {
  8451. type: 'menubutton',
  8452. icon: 'insert',
  8453. menu: [],
  8454. oncreatemenu: function () {
  8455. this.menu.add(createInsertMenu(editor));
  8456. this.menu.renderNew();
  8457. }
  8458. });
  8459. };
  8460. var register$5 = function (editor) {
  8461. registerButtons$3(editor);
  8462. };
  8463. var $_drvzmkwejh8lz3vz = { register: register$5 };
  8464. var registerFormatButtons = function (editor) {
  8465. global$2.each({
  8466. bold: 'Bold',
  8467. italic: 'Italic',
  8468. underline: 'Underline',
  8469. strikethrough: 'Strikethrough',
  8470. subscript: 'Subscript',
  8471. superscript: 'Superscript'
  8472. }, function (text, name) {
  8473. editor.addButton(name, {
  8474. active: false,
  8475. tooltip: text,
  8476. onPostRender: postRenderFormatToggle(editor, name),
  8477. onclick: toggleFormat(editor, name)
  8478. });
  8479. });
  8480. };
  8481. var registerCommandButtons = function (editor) {
  8482. global$2.each({
  8483. outdent: [
  8484. 'Decrease indent',
  8485. 'Outdent'
  8486. ],
  8487. indent: [
  8488. 'Increase indent',
  8489. 'Indent'
  8490. ],
  8491. cut: [
  8492. 'Cut',
  8493. 'Cut'
  8494. ],
  8495. copy: [
  8496. 'Copy',
  8497. 'Copy'
  8498. ],
  8499. paste: [
  8500. 'Paste',
  8501. 'Paste'
  8502. ],
  8503. help: [
  8504. 'Help',
  8505. 'mceHelp'
  8506. ],
  8507. selectall: [
  8508. 'Select all',
  8509. 'SelectAll'
  8510. ],
  8511. visualaid: [
  8512. 'Visual aids',
  8513. 'mceToggleVisualAid'
  8514. ],
  8515. newdocument: [
  8516. 'New document',
  8517. 'mceNewDocument'
  8518. ],
  8519. removeformat: [
  8520. 'Clear formatting',
  8521. 'RemoveFormat'
  8522. ],
  8523. remove: [
  8524. 'Remove',
  8525. 'Delete'
  8526. ]
  8527. }, function (item, name) {
  8528. editor.addButton(name, {
  8529. tooltip: item[0],
  8530. cmd: item[1]
  8531. });
  8532. });
  8533. };
  8534. var registerCommandToggleButtons = function (editor) {
  8535. global$2.each({
  8536. blockquote: [
  8537. 'Blockquote',
  8538. 'mceBlockQuote'
  8539. ],
  8540. subscript: [
  8541. 'Subscript',
  8542. 'Subscript'
  8543. ],
  8544. superscript: [
  8545. 'Superscript',
  8546. 'Superscript'
  8547. ]
  8548. }, function (item, name) {
  8549. editor.addButton(name, {
  8550. active: false,
  8551. tooltip: item[0],
  8552. cmd: item[1],
  8553. onPostRender: postRenderFormatToggle(editor, name)
  8554. });
  8555. });
  8556. };
  8557. var registerButtons$4 = function (editor) {
  8558. registerFormatButtons(editor);
  8559. registerCommandButtons(editor);
  8560. registerCommandToggleButtons(editor);
  8561. };
  8562. var registerMenuItems$1 = function (editor) {
  8563. global$2.each({
  8564. bold: [
  8565. 'Bold',
  8566. 'Bold',
  8567. 'Meta+B'
  8568. ],
  8569. italic: [
  8570. 'Italic',
  8571. 'Italic',
  8572. 'Meta+I'
  8573. ],
  8574. underline: [
  8575. 'Underline',
  8576. 'Underline',
  8577. 'Meta+U'
  8578. ],
  8579. strikethrough: [
  8580. 'Strikethrough',
  8581. 'Strikethrough'
  8582. ],
  8583. subscript: [
  8584. 'Subscript',
  8585. 'Subscript'
  8586. ],
  8587. superscript: [
  8588. 'Superscript',
  8589. 'Superscript'
  8590. ],
  8591. removeformat: [
  8592. 'Clear formatting',
  8593. 'RemoveFormat'
  8594. ],
  8595. newdocument: [
  8596. 'New document',
  8597. 'mceNewDocument'
  8598. ],
  8599. cut: [
  8600. 'Cut',
  8601. 'Cut',
  8602. 'Meta+X'
  8603. ],
  8604. copy: [
  8605. 'Copy',
  8606. 'Copy',
  8607. 'Meta+C'
  8608. ],
  8609. paste: [
  8610. 'Paste',
  8611. 'Paste',
  8612. 'Meta+V'
  8613. ],
  8614. selectall: [
  8615. 'Select all',
  8616. 'SelectAll',
  8617. 'Meta+A'
  8618. ]
  8619. }, function (item, name) {
  8620. editor.addMenuItem(name, {
  8621. text: item[0],
  8622. icon: name,
  8623. shortcut: item[2],
  8624. cmd: item[1]
  8625. });
  8626. });
  8627. editor.addMenuItem('codeformat', {
  8628. text: 'Code',
  8629. icon: 'code',
  8630. onclick: toggleFormat(editor, 'code')
  8631. });
  8632. };
  8633. var register$6 = function (editor) {
  8634. registerButtons$4(editor);
  8635. registerMenuItems$1(editor);
  8636. };
  8637. var $_2d67dwfjh8lz3w2 = { register: register$6 };
  8638. var toggleUndoRedoState = function (editor, type) {
  8639. return function () {
  8640. var self = this;
  8641. var checkState = function () {
  8642. var typeFn = type === 'redo' ? 'hasRedo' : 'hasUndo';
  8643. return editor.undoManager ? editor.undoManager[typeFn]() : false;
  8644. };
  8645. self.disabled(!checkState());
  8646. editor.on('Undo Redo AddUndo TypingUndo ClearUndos SwitchMode', function () {
  8647. self.disabled(editor.readonly || !checkState());
  8648. });
  8649. };
  8650. };
  8651. var registerMenuItems$2 = function (editor) {
  8652. editor.addMenuItem('undo', {
  8653. text: 'Undo',
  8654. icon: 'undo',
  8655. shortcut: 'Meta+Z',
  8656. onPostRender: toggleUndoRedoState(editor, 'undo'),
  8657. cmd: 'undo'
  8658. });
  8659. editor.addMenuItem('redo', {
  8660. text: 'Redo',
  8661. icon: 'redo',
  8662. shortcut: 'Meta+Y',
  8663. onPostRender: toggleUndoRedoState(editor, 'redo'),
  8664. cmd: 'redo'
  8665. });
  8666. };
  8667. var registerButtons$5 = function (editor) {
  8668. editor.addButton('undo', {
  8669. tooltip: 'Undo',
  8670. onPostRender: toggleUndoRedoState(editor, 'undo'),
  8671. cmd: 'undo'
  8672. });
  8673. editor.addButton('redo', {
  8674. tooltip: 'Redo',
  8675. onPostRender: toggleUndoRedoState(editor, 'redo'),
  8676. cmd: 'redo'
  8677. });
  8678. };
  8679. var register$7 = function (editor) {
  8680. registerMenuItems$2(editor);
  8681. registerButtons$5(editor);
  8682. };
  8683. var $_cd5m9xwgjh8lz3w5 = { register: register$7 };
  8684. var toggleVisualAidState = function (editor) {
  8685. return function () {
  8686. var self = this;
  8687. editor.on('VisualAid', function (e) {
  8688. self.active(e.hasVisual);
  8689. });
  8690. self.active(editor.hasVisual);
  8691. };
  8692. };
  8693. var registerMenuItems$3 = function (editor) {
  8694. editor.addMenuItem('visualaid', {
  8695. text: 'Visual aids',
  8696. selectable: true,
  8697. onPostRender: toggleVisualAidState(editor),
  8698. cmd: 'mceToggleVisualAid'
  8699. });
  8700. };
  8701. var register$8 = function (editor) {
  8702. registerMenuItems$3(editor);
  8703. };
  8704. var $_1ojpofwhjh8lz3w6 = { register: register$8 };
  8705. var setupEnvironment = function () {
  8706. Widget.tooltips = !global$8.iOS;
  8707. Control$1.translate = function (text) {
  8708. return global$1.translate(text);
  8709. };
  8710. };
  8711. var setupUiContainer = function (editor) {
  8712. if (editor.settings.ui_container) {
  8713. global$8.container = $_9rr9rgw5jh8lz3uu.descendant($_3bkrfxv6jh8lz3rm.fromDom(document.body), editor.settings.ui_container).fold($_3pjweotejh8lz3k4.constant(null), function (elm) {
  8714. return elm.dom();
  8715. });
  8716. }
  8717. };
  8718. var setupRtlMode = function (editor) {
  8719. if (editor.rtl) {
  8720. Control$1.rtl = true;
  8721. }
  8722. };
  8723. var setupHideFloatPanels = function (editor) {
  8724. editor.on('mousedown', function () {
  8725. FloatPanel.hideAll();
  8726. });
  8727. };
  8728. var setup$1 = function (editor) {
  8729. setupRtlMode(editor);
  8730. setupHideFloatPanels(editor);
  8731. setupUiContainer(editor);
  8732. setupEnvironment();
  8733. $_bj8nxmwdjh8lz3vw.register(editor);
  8734. $_a6x5k4w8jh8lz3vh.register(editor);
  8735. $_2d67dwfjh8lz3w2.register(editor);
  8736. $_cd5m9xwgjh8lz3w5.register(editor);
  8737. $_du9atdwbjh8lz3vn.register(editor);
  8738. $_4hdsyewajh8lz3vk.register(editor);
  8739. $_5xlhbcwcjh8lz3vr.register(editor);
  8740. $_1ojpofwhjh8lz3w6.register(editor);
  8741. $_drvzmkwejh8lz3vz.register(editor);
  8742. };
  8743. var $_4qdht3w4jh8lz3uo = { setup: setup$1 };
  8744. var GridLayout = AbsoluteLayout.extend({
  8745. recalc: function (container) {
  8746. var settings, rows, cols, items, contLayoutRect, width, height, rect, ctrlLayoutRect, ctrl, x, y, posX, posY, ctrlSettings, contPaddingBox, align, spacingH, spacingV, alignH, alignV, maxX, maxY;
  8747. var colWidths = [];
  8748. var rowHeights = [];
  8749. var ctrlMinWidth, ctrlMinHeight, availableWidth, availableHeight, reverseRows, idx;
  8750. settings = container.settings;
  8751. items = container.items().filter(':visible');
  8752. contLayoutRect = container.layoutRect();
  8753. cols = settings.columns || Math.ceil(Math.sqrt(items.length));
  8754. rows = Math.ceil(items.length / cols);
  8755. spacingH = settings.spacingH || settings.spacing || 0;
  8756. spacingV = settings.spacingV || settings.spacing || 0;
  8757. alignH = settings.alignH || settings.align;
  8758. alignV = settings.alignV || settings.align;
  8759. contPaddingBox = container.paddingBox;
  8760. reverseRows = 'reverseRows' in settings ? settings.reverseRows : container.isRtl();
  8761. if (alignH && typeof alignH === 'string') {
  8762. alignH = [alignH];
  8763. }
  8764. if (alignV && typeof alignV === 'string') {
  8765. alignV = [alignV];
  8766. }
  8767. for (x = 0; x < cols; x++) {
  8768. colWidths.push(0);
  8769. }
  8770. for (y = 0; y < rows; y++) {
  8771. rowHeights.push(0);
  8772. }
  8773. for (y = 0; y < rows; y++) {
  8774. for (x = 0; x < cols; x++) {
  8775. ctrl = items[y * cols + x];
  8776. if (!ctrl) {
  8777. break;
  8778. }
  8779. ctrlLayoutRect = ctrl.layoutRect();
  8780. ctrlMinWidth = ctrlLayoutRect.minW;
  8781. ctrlMinHeight = ctrlLayoutRect.minH;
  8782. colWidths[x] = ctrlMinWidth > colWidths[x] ? ctrlMinWidth : colWidths[x];
  8783. rowHeights[y] = ctrlMinHeight > rowHeights[y] ? ctrlMinHeight : rowHeights[y];
  8784. }
  8785. }
  8786. availableWidth = contLayoutRect.innerW - contPaddingBox.left - contPaddingBox.right;
  8787. for (maxX = 0, x = 0; x < cols; x++) {
  8788. maxX += colWidths[x] + (x > 0 ? spacingH : 0);
  8789. availableWidth -= (x > 0 ? spacingH : 0) + colWidths[x];
  8790. }
  8791. availableHeight = contLayoutRect.innerH - contPaddingBox.top - contPaddingBox.bottom;
  8792. for (maxY = 0, y = 0; y < rows; y++) {
  8793. maxY += rowHeights[y] + (y > 0 ? spacingV : 0);
  8794. availableHeight -= (y > 0 ? spacingV : 0) + rowHeights[y];
  8795. }
  8796. maxX += contPaddingBox.left + contPaddingBox.right;
  8797. maxY += contPaddingBox.top + contPaddingBox.bottom;
  8798. rect = {};
  8799. rect.minW = maxX + (contLayoutRect.w - contLayoutRect.innerW);
  8800. rect.minH = maxY + (contLayoutRect.h - contLayoutRect.innerH);
  8801. rect.contentW = rect.minW - contLayoutRect.deltaW;
  8802. rect.contentH = rect.minH - contLayoutRect.deltaH;
  8803. rect.minW = Math.min(rect.minW, contLayoutRect.maxW);
  8804. rect.minH = Math.min(rect.minH, contLayoutRect.maxH);
  8805. rect.minW = Math.max(rect.minW, contLayoutRect.startMinWidth);
  8806. rect.minH = Math.max(rect.minH, contLayoutRect.startMinHeight);
  8807. if (contLayoutRect.autoResize && (rect.minW !== contLayoutRect.minW || rect.minH !== contLayoutRect.minH)) {
  8808. rect.w = rect.minW;
  8809. rect.h = rect.minH;
  8810. container.layoutRect(rect);
  8811. this.recalc(container);
  8812. if (container._lastRect === null) {
  8813. var parentCtrl = container.parent();
  8814. if (parentCtrl) {
  8815. parentCtrl._lastRect = null;
  8816. parentCtrl.recalc();
  8817. }
  8818. }
  8819. return;
  8820. }
  8821. if (contLayoutRect.autoResize) {
  8822. rect = container.layoutRect(rect);
  8823. rect.contentW = rect.minW - contLayoutRect.deltaW;
  8824. rect.contentH = rect.minH - contLayoutRect.deltaH;
  8825. }
  8826. var flexV;
  8827. if (settings.packV === 'start') {
  8828. flexV = 0;
  8829. } else {
  8830. flexV = availableHeight > 0 ? Math.floor(availableHeight / rows) : 0;
  8831. }
  8832. var totalFlex = 0;
  8833. var flexWidths = settings.flexWidths;
  8834. if (flexWidths) {
  8835. for (x = 0; x < flexWidths.length; x++) {
  8836. totalFlex += flexWidths[x];
  8837. }
  8838. } else {
  8839. totalFlex = cols;
  8840. }
  8841. var ratio = availableWidth / totalFlex;
  8842. for (x = 0; x < cols; x++) {
  8843. colWidths[x] += flexWidths ? flexWidths[x] * ratio : ratio;
  8844. }
  8845. posY = contPaddingBox.top;
  8846. for (y = 0; y < rows; y++) {
  8847. posX = contPaddingBox.left;
  8848. height = rowHeights[y] + flexV;
  8849. for (x = 0; x < cols; x++) {
  8850. if (reverseRows) {
  8851. idx = y * cols + cols - 1 - x;
  8852. } else {
  8853. idx = y * cols + x;
  8854. }
  8855. ctrl = items[idx];
  8856. if (!ctrl) {
  8857. break;
  8858. }
  8859. ctrlSettings = ctrl.settings;
  8860. ctrlLayoutRect = ctrl.layoutRect();
  8861. width = Math.max(colWidths[x], ctrlLayoutRect.startMinWidth);
  8862. ctrlLayoutRect.x = posX;
  8863. ctrlLayoutRect.y = posY;
  8864. align = ctrlSettings.alignH || (alignH ? alignH[x] || alignH[0] : null);
  8865. if (align === 'center') {
  8866. ctrlLayoutRect.x = posX + width / 2 - ctrlLayoutRect.w / 2;
  8867. } else if (align === 'right') {
  8868. ctrlLayoutRect.x = posX + width - ctrlLayoutRect.w;
  8869. } else if (align === 'stretch') {
  8870. ctrlLayoutRect.w = width;
  8871. }
  8872. align = ctrlSettings.alignV || (alignV ? alignV[x] || alignV[0] : null);
  8873. if (align === 'center') {
  8874. ctrlLayoutRect.y = posY + height / 2 - ctrlLayoutRect.h / 2;
  8875. } else if (align === 'bottom') {
  8876. ctrlLayoutRect.y = posY + height - ctrlLayoutRect.h;
  8877. } else if (align === 'stretch') {
  8878. ctrlLayoutRect.h = height;
  8879. }
  8880. ctrl.layoutRect(ctrlLayoutRect);
  8881. posX += width + spacingH;
  8882. if (ctrl.recalc) {
  8883. ctrl.recalc();
  8884. }
  8885. }
  8886. posY += height + spacingV;
  8887. }
  8888. }
  8889. });
  8890. var Iframe$1 = Widget.extend({
  8891. renderHtml: function () {
  8892. var self = this;
  8893. self.classes.add('iframe');
  8894. self.canFocus = false;
  8895. return '<iframe id="' + self._id + '" class="' + self.classes + '" tabindex="-1" src="' + (self.settings.url || 'javascript:\'\'') + '" frameborder="0"></iframe>';
  8896. },
  8897. src: function (src) {
  8898. this.getEl().src = src;
  8899. },
  8900. html: function (html, callback) {
  8901. var self = this, body = this.getEl().contentWindow.document.body;
  8902. if (!body) {
  8903. global$7.setTimeout(function () {
  8904. self.html(html);
  8905. });
  8906. } else {
  8907. body.innerHTML = html;
  8908. if (callback) {
  8909. callback();
  8910. }
  8911. }
  8912. return this;
  8913. }
  8914. });
  8915. var InfoBox = Widget.extend({
  8916. init: function (settings) {
  8917. var self = this;
  8918. self._super(settings);
  8919. self.classes.add('widget').add('infobox');
  8920. self.canFocus = false;
  8921. },
  8922. severity: function (level) {
  8923. this.classes.remove('error');
  8924. this.classes.remove('warning');
  8925. this.classes.remove('success');
  8926. this.classes.add(level);
  8927. },
  8928. help: function (state) {
  8929. this.state.set('help', state);
  8930. },
  8931. renderHtml: function () {
  8932. var self = this, prefix = self.classPrefix;
  8933. return '<div id="' + self._id + '" class="' + self.classes + '">' + '<div id="' + self._id + '-body">' + self.encode(self.state.get('text')) + '<button role="button" tabindex="-1">' + '<i class="' + prefix + 'ico ' + prefix + 'i-help"></i>' + '</button>' + '</div>' + '</div>';
  8934. },
  8935. bindStates: function () {
  8936. var self = this;
  8937. self.state.on('change:text', function (e) {
  8938. self.getEl('body').firstChild.data = self.encode(e.value);
  8939. if (self.state.get('rendered')) {
  8940. self.updateLayoutRect();
  8941. }
  8942. });
  8943. self.state.on('change:help', function (e) {
  8944. self.classes.toggle('has-help', e.value);
  8945. if (self.state.get('rendered')) {
  8946. self.updateLayoutRect();
  8947. }
  8948. });
  8949. return self._super();
  8950. }
  8951. });
  8952. var Label = Widget.extend({
  8953. init: function (settings) {
  8954. var self = this;
  8955. self._super(settings);
  8956. self.classes.add('widget').add('label');
  8957. self.canFocus = false;
  8958. if (settings.multiline) {
  8959. self.classes.add('autoscroll');
  8960. }
  8961. if (settings.strong) {
  8962. self.classes.add('strong');
  8963. }
  8964. },
  8965. initLayoutRect: function () {
  8966. var self = this, layoutRect = self._super();
  8967. if (self.settings.multiline) {
  8968. var size = funcs.getSize(self.getEl());
  8969. if (size.width > layoutRect.maxW) {
  8970. layoutRect.minW = layoutRect.maxW;
  8971. self.classes.add('multiline');
  8972. }
  8973. self.getEl().style.width = layoutRect.minW + 'px';
  8974. layoutRect.startMinH = layoutRect.h = layoutRect.minH = Math.min(layoutRect.maxH, funcs.getSize(self.getEl()).height);
  8975. }
  8976. return layoutRect;
  8977. },
  8978. repaint: function () {
  8979. var self = this;
  8980. if (!self.settings.multiline) {
  8981. self.getEl().style.lineHeight = self.layoutRect().h + 'px';
  8982. }
  8983. return self._super();
  8984. },
  8985. severity: function (level) {
  8986. this.classes.remove('error');
  8987. this.classes.remove('warning');
  8988. this.classes.remove('success');
  8989. this.classes.add(level);
  8990. },
  8991. renderHtml: function () {
  8992. var self = this;
  8993. var targetCtrl, forName, forId = self.settings.forId;
  8994. var text = self.settings.html ? self.settings.html : self.encode(self.state.get('text'));
  8995. if (!forId && (forName = self.settings.forName)) {
  8996. targetCtrl = self.getRoot().find('#' + forName)[0];
  8997. if (targetCtrl) {
  8998. forId = targetCtrl._id;
  8999. }
  9000. }
  9001. if (forId) {
  9002. return '<label id="' + self._id + '" class="' + self.classes + '"' + (forId ? ' for="' + forId + '"' : '') + '>' + text + '</label>';
  9003. }
  9004. return '<span id="' + self._id + '" class="' + self.classes + '">' + text + '</span>';
  9005. },
  9006. bindStates: function () {
  9007. var self = this;
  9008. self.state.on('change:text', function (e) {
  9009. self.innerHtml(self.encode(e.value));
  9010. if (self.state.get('rendered')) {
  9011. self.updateLayoutRect();
  9012. }
  9013. });
  9014. return self._super();
  9015. }
  9016. });
  9017. var Toolbar$1 = Container.extend({
  9018. Defaults: {
  9019. role: 'toolbar',
  9020. layout: 'flow'
  9021. },
  9022. init: function (settings) {
  9023. var self = this;
  9024. self._super(settings);
  9025. self.classes.add('toolbar');
  9026. },
  9027. postRender: function () {
  9028. var self = this;
  9029. self.items().each(function (ctrl) {
  9030. ctrl.classes.add('toolbar-item');
  9031. });
  9032. return self._super();
  9033. }
  9034. });
  9035. var MenuBar = Toolbar$1.extend({
  9036. Defaults: {
  9037. role: 'menubar',
  9038. containerCls: 'menubar',
  9039. ariaRoot: true,
  9040. defaults: { type: 'menubutton' }
  9041. }
  9042. });
  9043. function isChildOf$1(node, parent) {
  9044. while (node) {
  9045. if (parent === node) {
  9046. return true;
  9047. }
  9048. node = node.parentNode;
  9049. }
  9050. return false;
  9051. }
  9052. var MenuButton = Button.extend({
  9053. init: function (settings) {
  9054. var self = this;
  9055. self._renderOpen = true;
  9056. self._super(settings);
  9057. settings = self.settings;
  9058. self.classes.add('menubtn');
  9059. if (settings.fixedWidth) {
  9060. self.classes.add('fixed-width');
  9061. }
  9062. self.aria('haspopup', true);
  9063. self.state.set('menu', settings.menu || self.render());
  9064. },
  9065. showMenu: function (toggle) {
  9066. var self = this;
  9067. var menu;
  9068. if (self.menu && self.menu.visible() && toggle !== false) {
  9069. return self.hideMenu();
  9070. }
  9071. if (!self.menu) {
  9072. menu = self.state.get('menu') || [];
  9073. self.classes.add('opened');
  9074. if (menu.length) {
  9075. menu = {
  9076. type: 'menu',
  9077. animate: true,
  9078. items: menu
  9079. };
  9080. } else {
  9081. menu.type = menu.type || 'menu';
  9082. menu.animate = true;
  9083. }
  9084. if (!menu.renderTo) {
  9085. self.menu = global$4.create(menu).parent(self).renderTo();
  9086. } else {
  9087. self.menu = menu.parent(self).show().renderTo();
  9088. }
  9089. self.fire('createmenu');
  9090. self.menu.reflow();
  9091. self.menu.on('cancel', function (e) {
  9092. if (e.control.parent() === self.menu) {
  9093. e.stopPropagation();
  9094. self.focus();
  9095. self.hideMenu();
  9096. }
  9097. });
  9098. self.menu.on('select', function () {
  9099. self.focus();
  9100. });
  9101. self.menu.on('show hide', function (e) {
  9102. if (e.control === self.menu) {
  9103. self.activeMenu(e.type === 'show');
  9104. self.classes.toggle('opened', e.type === 'show');
  9105. }
  9106. self.aria('expanded', e.type === 'show');
  9107. }).fire('show');
  9108. }
  9109. self.menu.show();
  9110. self.menu.layoutRect({ w: self.layoutRect().w });
  9111. self.menu.repaint();
  9112. self.menu.moveRel(self.getEl(), self.isRtl() ? [
  9113. 'br-tr',
  9114. 'tr-br'
  9115. ] : [
  9116. 'bl-tl',
  9117. 'tl-bl'
  9118. ]);
  9119. self.fire('showmenu');
  9120. },
  9121. hideMenu: function () {
  9122. var self = this;
  9123. if (self.menu) {
  9124. self.menu.items().each(function (item) {
  9125. if (item.hideMenu) {
  9126. item.hideMenu();
  9127. }
  9128. });
  9129. self.menu.hide();
  9130. }
  9131. },
  9132. activeMenu: function (state) {
  9133. this.classes.toggle('active', state);
  9134. },
  9135. renderHtml: function () {
  9136. var self = this, id = self._id, prefix = self.classPrefix;
  9137. var icon = self.settings.icon, image;
  9138. var text = self.state.get('text');
  9139. var textHtml = '';
  9140. image = self.settings.image;
  9141. if (image) {
  9142. icon = 'none';
  9143. if (typeof image !== 'string') {
  9144. image = window.getSelection ? image[0] : image[1];
  9145. }
  9146. image = ' style="background-image: url(\'' + image + '\')"';
  9147. } else {
  9148. image = '';
  9149. }
  9150. if (text) {
  9151. self.classes.add('btn-has-text');
  9152. textHtml = '<span class="' + prefix + 'txt">' + self.encode(text) + '</span>';
  9153. }
  9154. icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + icon : '';
  9155. self.aria('role', self.parent() instanceof MenuBar ? 'menuitem' : 'button');
  9156. return '<div id="' + id + '" class="' + self.classes + '" tabindex="-1" aria-labelledby="' + id + '">' + '<button id="' + id + '-open" role="presentation" type="button" tabindex="-1">' + (icon ? '<i class="' + icon + '"' + image + '></i>' : '') + textHtml + ' <i class="' + prefix + 'caret"></i>' + '</button>' + '</div>';
  9157. },
  9158. postRender: function () {
  9159. var self = this;
  9160. self.on('click', function (e) {
  9161. if (e.control === self && isChildOf$1(e.target, self.getEl())) {
  9162. self.focus();
  9163. self.showMenu(!e.aria);
  9164. if (e.aria) {
  9165. self.menu.items().filter(':visible')[0].focus();
  9166. }
  9167. }
  9168. });
  9169. self.on('mouseenter', function (e) {
  9170. var overCtrl = e.control;
  9171. var parent = self.parent();
  9172. var hasVisibleSiblingMenu;
  9173. if (overCtrl && parent && overCtrl instanceof MenuButton && overCtrl.parent() === parent) {
  9174. parent.items().filter('MenuButton').each(function (ctrl) {
  9175. if (ctrl.hideMenu && ctrl !== overCtrl) {
  9176. if (ctrl.menu && ctrl.menu.visible()) {
  9177. hasVisibleSiblingMenu = true;
  9178. }
  9179. ctrl.hideMenu();
  9180. }
  9181. });
  9182. if (hasVisibleSiblingMenu) {
  9183. overCtrl.focus();
  9184. overCtrl.showMenu();
  9185. }
  9186. }
  9187. });
  9188. return self._super();
  9189. },
  9190. bindStates: function () {
  9191. var self = this;
  9192. self.state.on('change:menu', function () {
  9193. if (self.menu) {
  9194. self.menu.remove();
  9195. }
  9196. self.menu = null;
  9197. });
  9198. return self._super();
  9199. },
  9200. remove: function () {
  9201. this._super();
  9202. if (this.menu) {
  9203. this.menu.remove();
  9204. }
  9205. }
  9206. });
  9207. var Menu = FloatPanel.extend({
  9208. Defaults: {
  9209. defaultType: 'menuitem',
  9210. border: 1,
  9211. layout: 'stack',
  9212. role: 'application',
  9213. bodyRole: 'menu',
  9214. ariaRoot: true
  9215. },
  9216. init: function (settings) {
  9217. var self = this;
  9218. settings.autohide = true;
  9219. settings.constrainToViewport = true;
  9220. if (typeof settings.items === 'function') {
  9221. settings.itemsFactory = settings.items;
  9222. settings.items = [];
  9223. }
  9224. if (settings.itemDefaults) {
  9225. var items = settings.items;
  9226. var i = items.length;
  9227. while (i--) {
  9228. items[i] = global$2.extend({}, settings.itemDefaults, items[i]);
  9229. }
  9230. }
  9231. self._super(settings);
  9232. self.classes.add('menu');
  9233. if (settings.animate && global$8.ie !== 11) {
  9234. self.classes.add('animate');
  9235. }
  9236. },
  9237. repaint: function () {
  9238. this.classes.toggle('menu-align', true);
  9239. this._super();
  9240. this.getEl().style.height = '';
  9241. this.getEl('body').style.height = '';
  9242. return this;
  9243. },
  9244. cancel: function () {
  9245. var self = this;
  9246. self.hideAll();
  9247. self.fire('select');
  9248. },
  9249. load: function () {
  9250. var self = this;
  9251. var time, factory;
  9252. function hideThrobber() {
  9253. if (self.throbber) {
  9254. self.throbber.hide();
  9255. self.throbber = null;
  9256. }
  9257. }
  9258. factory = self.settings.itemsFactory;
  9259. if (!factory) {
  9260. return;
  9261. }
  9262. if (!self.throbber) {
  9263. self.throbber = new Throbber(self.getEl('body'), true);
  9264. if (self.items().length === 0) {
  9265. self.throbber.show();
  9266. self.fire('loading');
  9267. } else {
  9268. self.throbber.show(100, function () {
  9269. self.items().remove();
  9270. self.fire('loading');
  9271. });
  9272. }
  9273. self.on('hide close', hideThrobber);
  9274. }
  9275. self.requestTime = time = new Date().getTime();
  9276. self.settings.itemsFactory(function (items) {
  9277. if (items.length === 0) {
  9278. self.hide();
  9279. return;
  9280. }
  9281. if (self.requestTime !== time) {
  9282. return;
  9283. }
  9284. self.getEl().style.width = '';
  9285. self.getEl('body').style.width = '';
  9286. hideThrobber();
  9287. self.items().remove();
  9288. self.getEl('body').innerHTML = '';
  9289. self.add(items);
  9290. self.renderNew();
  9291. self.fire('loaded');
  9292. });
  9293. },
  9294. hideAll: function () {
  9295. var self = this;
  9296. this.find('menuitem').exec('hideMenu');
  9297. return self._super();
  9298. },
  9299. preRender: function () {
  9300. var self = this;
  9301. self.items().each(function (ctrl) {
  9302. var settings = ctrl.settings;
  9303. if (settings.icon || settings.image || settings.selectable) {
  9304. self._hasIcons = true;
  9305. return false;
  9306. }
  9307. });
  9308. if (self.settings.itemsFactory) {
  9309. self.on('postrender', function () {
  9310. if (self.settings.itemsFactory) {
  9311. self.load();
  9312. }
  9313. });
  9314. }
  9315. self.on('show hide', function (e) {
  9316. if (e.control === self) {
  9317. if (e.type === 'show') {
  9318. global$7.setTimeout(function () {
  9319. self.classes.add('in');
  9320. }, 0);
  9321. } else {
  9322. self.classes.remove('in');
  9323. }
  9324. }
  9325. });
  9326. return self._super();
  9327. }
  9328. });
  9329. var ListBox = MenuButton.extend({
  9330. init: function (settings) {
  9331. var self = this;
  9332. var values, selected, selectedText, lastItemCtrl;
  9333. function setSelected(menuValues) {
  9334. for (var i = 0; i < menuValues.length; i++) {
  9335. selected = menuValues[i].selected || settings.value === menuValues[i].value;
  9336. if (selected) {
  9337. selectedText = selectedText || menuValues[i].text;
  9338. self.state.set('value', menuValues[i].value);
  9339. return true;
  9340. }
  9341. if (menuValues[i].menu) {
  9342. if (setSelected(menuValues[i].menu)) {
  9343. return true;
  9344. }
  9345. }
  9346. }
  9347. }
  9348. self._super(settings);
  9349. settings = self.settings;
  9350. self._values = values = settings.values;
  9351. if (values) {
  9352. if (typeof settings.value !== 'undefined') {
  9353. setSelected(values);
  9354. }
  9355. if (!selected && values.length > 0) {
  9356. selectedText = values[0].text;
  9357. self.state.set('value', values[0].value);
  9358. }
  9359. self.state.set('menu', values);
  9360. }
  9361. self.state.set('text', settings.text || selectedText);
  9362. self.classes.add('listbox');
  9363. self.on('select', function (e) {
  9364. var ctrl = e.control;
  9365. if (lastItemCtrl) {
  9366. e.lastControl = lastItemCtrl;
  9367. }
  9368. if (settings.multiple) {
  9369. ctrl.active(!ctrl.active());
  9370. } else {
  9371. self.value(e.control.value());
  9372. }
  9373. lastItemCtrl = ctrl;
  9374. });
  9375. },
  9376. value: function (value) {
  9377. if (arguments.length === 0) {
  9378. return this.state.get('value');
  9379. }
  9380. if (typeof value === 'undefined') {
  9381. return this;
  9382. }
  9383. if (this.settings.values) {
  9384. var matchingValues = global$2.grep(this.settings.values, function (a) {
  9385. return a.value === value;
  9386. });
  9387. if (matchingValues.length > 0) {
  9388. this.state.set('value', value);
  9389. } else if (value === null) {
  9390. this.state.set('value', null);
  9391. }
  9392. } else {
  9393. this.state.set('value', value);
  9394. }
  9395. return this;
  9396. },
  9397. bindStates: function () {
  9398. var self = this;
  9399. function activateMenuItemsByValue(menu, value) {
  9400. if (menu instanceof Menu) {
  9401. menu.items().each(function (ctrl) {
  9402. if (!ctrl.hasMenus()) {
  9403. ctrl.active(ctrl.value() === value);
  9404. }
  9405. });
  9406. }
  9407. }
  9408. function getSelectedItem(menuValues, value) {
  9409. var selectedItem;
  9410. if (!menuValues) {
  9411. return;
  9412. }
  9413. for (var i = 0; i < menuValues.length; i++) {
  9414. if (menuValues[i].value === value) {
  9415. return menuValues[i];
  9416. }
  9417. if (menuValues[i].menu) {
  9418. selectedItem = getSelectedItem(menuValues[i].menu, value);
  9419. if (selectedItem) {
  9420. return selectedItem;
  9421. }
  9422. }
  9423. }
  9424. }
  9425. self.on('show', function (e) {
  9426. activateMenuItemsByValue(e.control, self.value());
  9427. });
  9428. self.state.on('change:value', function (e) {
  9429. var selectedItem = getSelectedItem(self.state.get('menu'), e.value);
  9430. if (selectedItem) {
  9431. self.text(selectedItem.text);
  9432. } else {
  9433. self.text(self.settings.text);
  9434. }
  9435. });
  9436. return self._super();
  9437. }
  9438. });
  9439. var toggleTextStyle = function (ctrl, state) {
  9440. var textStyle = ctrl._textStyle;
  9441. if (textStyle) {
  9442. var textElm = ctrl.getEl('text');
  9443. textElm.setAttribute('style', textStyle);
  9444. if (state) {
  9445. textElm.style.color = '';
  9446. textElm.style.backgroundColor = '';
  9447. }
  9448. }
  9449. };
  9450. var MenuItem = Widget.extend({
  9451. Defaults: {
  9452. border: 0,
  9453. role: 'menuitem'
  9454. },
  9455. init: function (settings) {
  9456. var self = this;
  9457. var text;
  9458. self._super(settings);
  9459. settings = self.settings;
  9460. self.classes.add('menu-item');
  9461. if (settings.menu) {
  9462. self.classes.add('menu-item-expand');
  9463. }
  9464. if (settings.preview) {
  9465. self.classes.add('menu-item-preview');
  9466. }
  9467. text = self.state.get('text');
  9468. if (text === '-' || text === '|') {
  9469. self.classes.add('menu-item-sep');
  9470. self.aria('role', 'separator');
  9471. self.state.set('text', '-');
  9472. }
  9473. if (settings.selectable) {
  9474. self.aria('role', 'menuitemcheckbox');
  9475. self.classes.add('menu-item-checkbox');
  9476. settings.icon = 'selected';
  9477. }
  9478. if (!settings.preview && !settings.selectable) {
  9479. self.classes.add('menu-item-normal');
  9480. }
  9481. self.on('mousedown', function (e) {
  9482. e.preventDefault();
  9483. });
  9484. if (settings.menu && !settings.ariaHideMenu) {
  9485. self.aria('haspopup', true);
  9486. }
  9487. },
  9488. hasMenus: function () {
  9489. return !!this.settings.menu;
  9490. },
  9491. showMenu: function () {
  9492. var self = this;
  9493. var settings = self.settings;
  9494. var menu;
  9495. var parent = self.parent();
  9496. parent.items().each(function (ctrl) {
  9497. if (ctrl !== self) {
  9498. ctrl.hideMenu();
  9499. }
  9500. });
  9501. if (settings.menu) {
  9502. menu = self.menu;
  9503. if (!menu) {
  9504. menu = settings.menu;
  9505. if (menu.length) {
  9506. menu = {
  9507. type: 'menu',
  9508. items: menu
  9509. };
  9510. } else {
  9511. menu.type = menu.type || 'menu';
  9512. }
  9513. if (parent.settings.itemDefaults) {
  9514. menu.itemDefaults = parent.settings.itemDefaults;
  9515. }
  9516. menu = self.menu = global$4.create(menu).parent(self).renderTo();
  9517. menu.reflow();
  9518. menu.on('cancel', function (e) {
  9519. e.stopPropagation();
  9520. self.focus();
  9521. menu.hide();
  9522. });
  9523. menu.on('show hide', function (e) {
  9524. if (e.control.items) {
  9525. e.control.items().each(function (ctrl) {
  9526. ctrl.active(ctrl.settings.selected);
  9527. });
  9528. }
  9529. }).fire('show');
  9530. menu.on('hide', function (e) {
  9531. if (e.control === menu) {
  9532. self.classes.remove('selected');
  9533. }
  9534. });
  9535. menu.submenu = true;
  9536. } else {
  9537. menu.show();
  9538. }
  9539. menu._parentMenu = parent;
  9540. menu.classes.add('menu-sub');
  9541. var rel = menu.testMoveRel(self.getEl(), self.isRtl() ? [
  9542. 'tl-tr',
  9543. 'bl-br',
  9544. 'tr-tl',
  9545. 'br-bl'
  9546. ] : [
  9547. 'tr-tl',
  9548. 'br-bl',
  9549. 'tl-tr',
  9550. 'bl-br'
  9551. ]);
  9552. menu.moveRel(self.getEl(), rel);
  9553. menu.rel = rel;
  9554. rel = 'menu-sub-' + rel;
  9555. menu.classes.remove(menu._lastRel).add(rel);
  9556. menu._lastRel = rel;
  9557. self.classes.add('selected');
  9558. self.aria('expanded', true);
  9559. }
  9560. },
  9561. hideMenu: function () {
  9562. var self = this;
  9563. if (self.menu) {
  9564. self.menu.items().each(function (item) {
  9565. if (item.hideMenu) {
  9566. item.hideMenu();
  9567. }
  9568. });
  9569. self.menu.hide();
  9570. self.aria('expanded', false);
  9571. }
  9572. return self;
  9573. },
  9574. renderHtml: function () {
  9575. var self = this;
  9576. var id = self._id;
  9577. var settings = self.settings;
  9578. var prefix = self.classPrefix;
  9579. var text = self.state.get('text');
  9580. var icon = self.settings.icon, image = '', shortcut = settings.shortcut;
  9581. var url = self.encode(settings.url), iconHtml = '';
  9582. function convertShortcut(shortcut) {
  9583. var i, value, replace = {};
  9584. if (global$8.mac) {
  9585. replace = {
  9586. alt: '&#x2325;',
  9587. ctrl: '&#x2318;',
  9588. shift: '&#x21E7;',
  9589. meta: '&#x2318;'
  9590. };
  9591. } else {
  9592. replace = { meta: 'Ctrl' };
  9593. }
  9594. shortcut = shortcut.split('+');
  9595. for (i = 0; i < shortcut.length; i++) {
  9596. value = replace[shortcut[i].toLowerCase()];
  9597. if (value) {
  9598. shortcut[i] = value;
  9599. }
  9600. }
  9601. return shortcut.join('+');
  9602. }
  9603. function escapeRegExp(str) {
  9604. return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
  9605. }
  9606. function markMatches(text) {
  9607. var match = settings.match || '';
  9608. return match ? text.replace(new RegExp(escapeRegExp(match), 'gi'), function (match) {
  9609. return '!mce~match[' + match + ']mce~match!';
  9610. }) : text;
  9611. }
  9612. function boldMatches(text) {
  9613. return text.replace(new RegExp(escapeRegExp('!mce~match['), 'g'), '<b>').replace(new RegExp(escapeRegExp(']mce~match!'), 'g'), '</b>');
  9614. }
  9615. if (icon) {
  9616. self.parent().classes.add('menu-has-icons');
  9617. }
  9618. if (settings.image) {
  9619. image = ' style="background-image: url(\'' + settings.image + '\')"';
  9620. }
  9621. if (shortcut) {
  9622. shortcut = convertShortcut(shortcut);
  9623. }
  9624. icon = prefix + 'ico ' + prefix + 'i-' + (self.settings.icon || 'none');
  9625. iconHtml = text !== '-' ? '<i class="' + icon + '"' + image + '></i>\xA0' : '';
  9626. text = boldMatches(self.encode(markMatches(text)));
  9627. url = boldMatches(self.encode(markMatches(url)));
  9628. return '<div id="' + id + '" class="' + self.classes + '" tabindex="-1">' + iconHtml + (text !== '-' ? '<span id="' + id + '-text" class="' + prefix + 'text">' + text + '</span>' : '') + (shortcut ? '<div id="' + id + '-shortcut" class="' + prefix + 'menu-shortcut">' + shortcut + '</div>' : '') + (settings.menu ? '<div class="' + prefix + 'caret"></div>' : '') + (url ? '<div class="' + prefix + 'menu-item-link">' + url + '</div>' : '') + '</div>';
  9629. },
  9630. postRender: function () {
  9631. var self = this, settings = self.settings;
  9632. var textStyle = settings.textStyle;
  9633. if (typeof textStyle === 'function') {
  9634. textStyle = textStyle.call(this);
  9635. }
  9636. if (textStyle) {
  9637. var textElm = self.getEl('text');
  9638. if (textElm) {
  9639. textElm.setAttribute('style', textStyle);
  9640. self._textStyle = textStyle;
  9641. }
  9642. }
  9643. self.on('mouseenter click', function (e) {
  9644. if (e.control === self) {
  9645. if (!settings.menu && e.type === 'click') {
  9646. self.fire('select');
  9647. global$7.requestAnimationFrame(function () {
  9648. self.parent().hideAll();
  9649. });
  9650. } else {
  9651. self.showMenu();
  9652. if (e.aria) {
  9653. self.menu.focus(true);
  9654. }
  9655. }
  9656. }
  9657. });
  9658. self._super();
  9659. return self;
  9660. },
  9661. hover: function () {
  9662. var self = this;
  9663. self.parent().items().each(function (ctrl) {
  9664. ctrl.classes.remove('selected');
  9665. });
  9666. self.classes.toggle('selected', true);
  9667. return self;
  9668. },
  9669. active: function (state) {
  9670. toggleTextStyle(this, state);
  9671. if (typeof state !== 'undefined') {
  9672. this.aria('checked', state);
  9673. }
  9674. return this._super(state);
  9675. },
  9676. remove: function () {
  9677. this._super();
  9678. if (this.menu) {
  9679. this.menu.remove();
  9680. }
  9681. }
  9682. });
  9683. var Radio = Checkbox.extend({
  9684. Defaults: {
  9685. classes: 'radio',
  9686. role: 'radio'
  9687. }
  9688. });
  9689. var ResizeHandle = Widget.extend({
  9690. renderHtml: function () {
  9691. var self = this, prefix = self.classPrefix;
  9692. self.classes.add('resizehandle');
  9693. if (self.settings.direction === 'both') {
  9694. self.classes.add('resizehandle-both');
  9695. }
  9696. self.canFocus = false;
  9697. return '<div id="' + self._id + '" class="' + self.classes + '">' + '<i class="' + prefix + 'ico ' + prefix + 'i-resize"></i>' + '</div>';
  9698. },
  9699. postRender: function () {
  9700. var self = this;
  9701. self._super();
  9702. self.resizeDragHelper = new DragHelper(this._id, {
  9703. start: function () {
  9704. self.fire('ResizeStart');
  9705. },
  9706. drag: function (e) {
  9707. if (self.settings.direction !== 'both') {
  9708. e.deltaX = 0;
  9709. }
  9710. self.fire('Resize', e);
  9711. },
  9712. stop: function () {
  9713. self.fire('ResizeEnd');
  9714. }
  9715. });
  9716. },
  9717. remove: function () {
  9718. if (this.resizeDragHelper) {
  9719. this.resizeDragHelper.destroy();
  9720. }
  9721. return this._super();
  9722. }
  9723. });
  9724. function createOptions(options) {
  9725. var strOptions = '';
  9726. if (options) {
  9727. for (var i = 0; i < options.length; i++) {
  9728. strOptions += '<option value="' + options[i] + '">' + options[i] + '</option>';
  9729. }
  9730. }
  9731. return strOptions;
  9732. }
  9733. var SelectBox = Widget.extend({
  9734. Defaults: {
  9735. classes: 'selectbox',
  9736. role: 'selectbox',
  9737. options: []
  9738. },
  9739. init: function (settings) {
  9740. var self = this;
  9741. self._super(settings);
  9742. if (self.settings.size) {
  9743. self.size = self.settings.size;
  9744. }
  9745. if (self.settings.options) {
  9746. self._options = self.settings.options;
  9747. }
  9748. self.on('keydown', function (e) {
  9749. var rootControl;
  9750. if (e.keyCode === 13) {
  9751. e.preventDefault();
  9752. self.parents().reverse().each(function (ctrl) {
  9753. if (ctrl.toJSON) {
  9754. rootControl = ctrl;
  9755. return false;
  9756. }
  9757. });
  9758. self.fire('submit', { data: rootControl.toJSON() });
  9759. }
  9760. });
  9761. },
  9762. options: function (state) {
  9763. if (!arguments.length) {
  9764. return this.state.get('options');
  9765. }
  9766. this.state.set('options', state);
  9767. return this;
  9768. },
  9769. renderHtml: function () {
  9770. var self = this;
  9771. var options, size = '';
  9772. options = createOptions(self._options);
  9773. if (self.size) {
  9774. size = ' size = "' + self.size + '"';
  9775. }
  9776. return '<select id="' + self._id + '" class="' + self.classes + '"' + size + '>' + options + '</select>';
  9777. },
  9778. bindStates: function () {
  9779. var self = this;
  9780. self.state.on('change:options', function (e) {
  9781. self.getEl().innerHTML = createOptions(e.value);
  9782. });
  9783. return self._super();
  9784. }
  9785. });
  9786. function constrain(value, minVal, maxVal) {
  9787. if (value < minVal) {
  9788. value = minVal;
  9789. }
  9790. if (value > maxVal) {
  9791. value = maxVal;
  9792. }
  9793. return value;
  9794. }
  9795. function setAriaProp(el, name, value) {
  9796. el.setAttribute('aria-' + name, value);
  9797. }
  9798. function updateSliderHandle(ctrl, value) {
  9799. var maxHandlePos, shortSizeName, sizeName, stylePosName, styleValue, handleEl;
  9800. if (ctrl.settings.orientation === 'v') {
  9801. stylePosName = 'top';
  9802. sizeName = 'height';
  9803. shortSizeName = 'h';
  9804. } else {
  9805. stylePosName = 'left';
  9806. sizeName = 'width';
  9807. shortSizeName = 'w';
  9808. }
  9809. handleEl = ctrl.getEl('handle');
  9810. maxHandlePos = (ctrl.layoutRect()[shortSizeName] || 100) - funcs.getSize(handleEl)[sizeName];
  9811. styleValue = maxHandlePos * ((value - ctrl._minValue) / (ctrl._maxValue - ctrl._minValue)) + 'px';
  9812. handleEl.style[stylePosName] = styleValue;
  9813. handleEl.style.height = ctrl.layoutRect().h + 'px';
  9814. setAriaProp(handleEl, 'valuenow', value);
  9815. setAriaProp(handleEl, 'valuetext', '' + ctrl.settings.previewFilter(value));
  9816. setAriaProp(handleEl, 'valuemin', ctrl._minValue);
  9817. setAriaProp(handleEl, 'valuemax', ctrl._maxValue);
  9818. }
  9819. var Slider = Widget.extend({
  9820. init: function (settings) {
  9821. var self = this;
  9822. if (!settings.previewFilter) {
  9823. settings.previewFilter = function (value) {
  9824. return Math.round(value * 100) / 100;
  9825. };
  9826. }
  9827. self._super(settings);
  9828. self.classes.add('slider');
  9829. if (settings.orientation === 'v') {
  9830. self.classes.add('vertical');
  9831. }
  9832. self._minValue = $_d8bie3tijh8lz3kn.isNumber(settings.minValue) ? settings.minValue : 0;
  9833. self._maxValue = $_d8bie3tijh8lz3kn.isNumber(settings.maxValue) ? settings.maxValue : 100;
  9834. self._initValue = self.state.get('value');
  9835. },
  9836. renderHtml: function () {
  9837. var self = this, id = self._id, prefix = self.classPrefix;
  9838. return '<div id="' + id + '" class="' + self.classes + '">' + '<div id="' + id + '-handle" class="' + prefix + 'slider-handle" role="slider" tabindex="-1"></div>' + '</div>';
  9839. },
  9840. reset: function () {
  9841. this.value(this._initValue).repaint();
  9842. },
  9843. postRender: function () {
  9844. var self = this;
  9845. var minValue, maxValue, screenCordName, stylePosName, sizeName, shortSizeName;
  9846. function toFraction(min, max, val) {
  9847. return (val + min) / (max - min);
  9848. }
  9849. function fromFraction(min, max, val) {
  9850. return val * (max - min) - min;
  9851. }
  9852. function handleKeyboard(minValue, maxValue) {
  9853. function alter(delta) {
  9854. var value;
  9855. value = self.value();
  9856. value = fromFraction(minValue, maxValue, toFraction(minValue, maxValue, value) + delta * 0.05);
  9857. value = constrain(value, minValue, maxValue);
  9858. self.value(value);
  9859. self.fire('dragstart', { value: value });
  9860. self.fire('drag', { value: value });
  9861. self.fire('dragend', { value: value });
  9862. }
  9863. self.on('keydown', function (e) {
  9864. switch (e.keyCode) {
  9865. case 37:
  9866. case 38:
  9867. alter(-1);
  9868. break;
  9869. case 39:
  9870. case 40:
  9871. alter(1);
  9872. break;
  9873. }
  9874. });
  9875. }
  9876. function handleDrag(minValue, maxValue, handleEl) {
  9877. var startPos, startHandlePos, maxHandlePos, handlePos, value;
  9878. self._dragHelper = new DragHelper(self._id, {
  9879. handle: self._id + '-handle',
  9880. start: function (e) {
  9881. startPos = e[screenCordName];
  9882. startHandlePos = parseInt(self.getEl('handle').style[stylePosName], 10);
  9883. maxHandlePos = (self.layoutRect()[shortSizeName] || 100) - funcs.getSize(handleEl)[sizeName];
  9884. self.fire('dragstart', { value: value });
  9885. },
  9886. drag: function (e) {
  9887. var delta = e[screenCordName] - startPos;
  9888. handlePos = constrain(startHandlePos + delta, 0, maxHandlePos);
  9889. handleEl.style[stylePosName] = handlePos + 'px';
  9890. value = minValue + handlePos / maxHandlePos * (maxValue - minValue);
  9891. self.value(value);
  9892. self.tooltip().text('' + self.settings.previewFilter(value)).show().moveRel(handleEl, 'bc tc');
  9893. self.fire('drag', { value: value });
  9894. },
  9895. stop: function () {
  9896. self.tooltip().hide();
  9897. self.fire('dragend', { value: value });
  9898. }
  9899. });
  9900. }
  9901. minValue = self._minValue;
  9902. maxValue = self._maxValue;
  9903. if (self.settings.orientation === 'v') {
  9904. screenCordName = 'screenY';
  9905. stylePosName = 'top';
  9906. sizeName = 'height';
  9907. shortSizeName = 'h';
  9908. } else {
  9909. screenCordName = 'screenX';
  9910. stylePosName = 'left';
  9911. sizeName = 'width';
  9912. shortSizeName = 'w';
  9913. }
  9914. self._super();
  9915. handleKeyboard(minValue, maxValue);
  9916. handleDrag(minValue, maxValue, self.getEl('handle'));
  9917. },
  9918. repaint: function () {
  9919. this._super();
  9920. updateSliderHandle(this, this.value());
  9921. },
  9922. bindStates: function () {
  9923. var self = this;
  9924. self.state.on('change:value', function (e) {
  9925. updateSliderHandle(self, e.value);
  9926. });
  9927. return self._super();
  9928. }
  9929. });
  9930. var Spacer = Widget.extend({
  9931. renderHtml: function () {
  9932. var self = this;
  9933. self.classes.add('spacer');
  9934. self.canFocus = false;
  9935. return '<div id="' + self._id + '" class="' + self.classes + '"></div>';
  9936. }
  9937. });
  9938. var SplitButton = MenuButton.extend({
  9939. Defaults: {
  9940. classes: 'widget btn splitbtn',
  9941. role: 'button'
  9942. },
  9943. repaint: function () {
  9944. var self = this;
  9945. var elm = self.getEl();
  9946. var rect = self.layoutRect();
  9947. var mainButtonElm, menuButtonElm;
  9948. self._super();
  9949. mainButtonElm = elm.firstChild;
  9950. menuButtonElm = elm.lastChild;
  9951. global$9(mainButtonElm).css({
  9952. width: rect.w - funcs.getSize(menuButtonElm).width,
  9953. height: rect.h - 2
  9954. });
  9955. global$9(menuButtonElm).css({ height: rect.h - 2 });
  9956. return self;
  9957. },
  9958. activeMenu: function (state) {
  9959. var self = this;
  9960. global$9(self.getEl().lastChild).toggleClass(self.classPrefix + 'active', state);
  9961. },
  9962. renderHtml: function () {
  9963. var self = this;
  9964. var id = self._id;
  9965. var prefix = self.classPrefix;
  9966. var image;
  9967. var icon = self.state.get('icon');
  9968. var text = self.state.get('text');
  9969. var settings = self.settings;
  9970. var textHtml = '', ariaPressed;
  9971. image = settings.image;
  9972. if (image) {
  9973. icon = 'none';
  9974. if (typeof image !== 'string') {
  9975. image = window.getSelection ? image[0] : image[1];
  9976. }
  9977. image = ' style="background-image: url(\'' + image + '\')"';
  9978. } else {
  9979. image = '';
  9980. }
  9981. icon = settings.icon ? prefix + 'ico ' + prefix + 'i-' + icon : '';
  9982. if (text) {
  9983. self.classes.add('btn-has-text');
  9984. textHtml = '<span class="' + prefix + 'txt">' + self.encode(text) + '</span>';
  9985. }
  9986. ariaPressed = typeof settings.active === 'boolean' ? ' aria-pressed="' + settings.active + '"' : '';
  9987. return '<div id="' + id + '" class="' + self.classes + '" role="button"' + ariaPressed + ' tabindex="-1">' + '<button type="button" hidefocus="1" tabindex="-1">' + (icon ? '<i class="' + icon + '"' + image + '></i>' : '') + textHtml + '</button>' + '<button type="button" class="' + prefix + 'open" hidefocus="1" tabindex="-1">' + (self._menuBtnText ? (icon ? '\xA0' : '') + self._menuBtnText : '') + ' <i class="' + prefix + 'caret"></i>' + '</button>' + '</div>';
  9988. },
  9989. postRender: function () {
  9990. var self = this, onClickHandler = self.settings.onclick;
  9991. self.on('click', function (e) {
  9992. var node = e.target;
  9993. if (e.control === this) {
  9994. while (node) {
  9995. if (e.aria && e.aria.key !== 'down' || node.nodeName === 'BUTTON' && node.className.indexOf('open') === -1) {
  9996. e.stopImmediatePropagation();
  9997. if (onClickHandler) {
  9998. onClickHandler.call(this, e);
  9999. }
  10000. return;
  10001. }
  10002. node = node.parentNode;
  10003. }
  10004. }
  10005. });
  10006. delete self.settings.onclick;
  10007. return self._super();
  10008. }
  10009. });
  10010. var StackLayout = FlowLayout.extend({
  10011. Defaults: {
  10012. containerClass: 'stack-layout',
  10013. controlClass: 'stack-layout-item',
  10014. endClass: 'break'
  10015. },
  10016. isNative: function () {
  10017. return true;
  10018. }
  10019. });
  10020. var TabPanel = Panel.extend({
  10021. Defaults: {
  10022. layout: 'absolute',
  10023. defaults: { type: 'panel' }
  10024. },
  10025. activateTab: function (idx) {
  10026. var activeTabElm;
  10027. if (this.activeTabId) {
  10028. activeTabElm = this.getEl(this.activeTabId);
  10029. global$9(activeTabElm).removeClass(this.classPrefix + 'active');
  10030. activeTabElm.setAttribute('aria-selected', 'false');
  10031. }
  10032. this.activeTabId = 't' + idx;
  10033. activeTabElm = this.getEl('t' + idx);
  10034. activeTabElm.setAttribute('aria-selected', 'true');
  10035. global$9(activeTabElm).addClass(this.classPrefix + 'active');
  10036. this.items()[idx].show().fire('showtab');
  10037. this.reflow();
  10038. this.items().each(function (item, i) {
  10039. if (idx !== i) {
  10040. item.hide();
  10041. }
  10042. });
  10043. },
  10044. renderHtml: function () {
  10045. var self = this;
  10046. var layout = self._layout;
  10047. var tabsHtml = '';
  10048. var prefix = self.classPrefix;
  10049. self.preRender();
  10050. layout.preRender(self);
  10051. self.items().each(function (ctrl, i) {
  10052. var id = self._id + '-t' + i;
  10053. ctrl.aria('role', 'tabpanel');
  10054. ctrl.aria('labelledby', id);
  10055. tabsHtml += '<div id="' + id + '" class="' + prefix + 'tab" ' + 'unselectable="on" role="tab" aria-controls="' + ctrl._id + '" aria-selected="false" tabIndex="-1">' + self.encode(ctrl.settings.title) + '</div>';
  10056. });
  10057. return '<div id="' + self._id + '" class="' + self.classes + '" hidefocus="1" tabindex="-1">' + '<div id="' + self._id + '-head" class="' + prefix + 'tabs" role="tablist">' + tabsHtml + '</div>' + '<div id="' + self._id + '-body" class="' + self.bodyClasses + '">' + layout.renderHtml(self) + '</div>' + '</div>';
  10058. },
  10059. postRender: function () {
  10060. var self = this;
  10061. self._super();
  10062. self.settings.activeTab = self.settings.activeTab || 0;
  10063. self.activateTab(self.settings.activeTab);
  10064. this.on('click', function (e) {
  10065. var targetParent = e.target.parentNode;
  10066. if (targetParent && targetParent.id === self._id + '-head') {
  10067. var i = targetParent.childNodes.length;
  10068. while (i--) {
  10069. if (targetParent.childNodes[i] === e.target) {
  10070. self.activateTab(i);
  10071. }
  10072. }
  10073. }
  10074. });
  10075. },
  10076. initLayoutRect: function () {
  10077. var self = this;
  10078. var rect, minW, minH;
  10079. minW = funcs.getSize(self.getEl('head')).width;
  10080. minW = minW < 0 ? 0 : minW;
  10081. minH = 0;
  10082. self.items().each(function (item) {
  10083. minW = Math.max(minW, item.layoutRect().minW);
  10084. minH = Math.max(minH, item.layoutRect().minH);
  10085. });
  10086. self.items().each(function (ctrl) {
  10087. ctrl.settings.x = 0;
  10088. ctrl.settings.y = 0;
  10089. ctrl.settings.w = minW;
  10090. ctrl.settings.h = minH;
  10091. ctrl.layoutRect({
  10092. x: 0,
  10093. y: 0,
  10094. w: minW,
  10095. h: minH
  10096. });
  10097. });
  10098. var headH = funcs.getSize(self.getEl('head')).height;
  10099. self.settings.minWidth = minW;
  10100. self.settings.minHeight = minH + headH;
  10101. rect = self._super();
  10102. rect.deltaH += headH;
  10103. rect.innerH = rect.h - rect.deltaH;
  10104. return rect;
  10105. }
  10106. });
  10107. var TextBox = Widget.extend({
  10108. init: function (settings) {
  10109. var self = this;
  10110. self._super(settings);
  10111. self.classes.add('textbox');
  10112. if (settings.multiline) {
  10113. self.classes.add('multiline');
  10114. } else {
  10115. self.on('keydown', function (e) {
  10116. var rootControl;
  10117. if (e.keyCode === 13) {
  10118. e.preventDefault();
  10119. self.parents().reverse().each(function (ctrl) {
  10120. if (ctrl.toJSON) {
  10121. rootControl = ctrl;
  10122. return false;
  10123. }
  10124. });
  10125. self.fire('submit', { data: rootControl.toJSON() });
  10126. }
  10127. });
  10128. self.on('keyup', function (e) {
  10129. self.state.set('value', e.target.value);
  10130. });
  10131. }
  10132. },
  10133. repaint: function () {
  10134. var self = this;
  10135. var style, rect, borderBox, borderW, borderH = 0, lastRepaintRect;
  10136. style = self.getEl().style;
  10137. rect = self._layoutRect;
  10138. lastRepaintRect = self._lastRepaintRect || {};
  10139. var doc = document;
  10140. if (!self.settings.multiline && doc.all && (!doc.documentMode || doc.documentMode <= 8)) {
  10141. style.lineHeight = rect.h - borderH + 'px';
  10142. }
  10143. borderBox = self.borderBox;
  10144. borderW = borderBox.left + borderBox.right + 8;
  10145. borderH = borderBox.top + borderBox.bottom + (self.settings.multiline ? 8 : 0);
  10146. if (rect.x !== lastRepaintRect.x) {
  10147. style.left = rect.x + 'px';
  10148. lastRepaintRect.x = rect.x;
  10149. }
  10150. if (rect.y !== lastRepaintRect.y) {
  10151. style.top = rect.y + 'px';
  10152. lastRepaintRect.y = rect.y;
  10153. }
  10154. if (rect.w !== lastRepaintRect.w) {
  10155. style.width = rect.w - borderW + 'px';
  10156. lastRepaintRect.w = rect.w;
  10157. }
  10158. if (rect.h !== lastRepaintRect.h) {
  10159. style.height = rect.h - borderH + 'px';
  10160. lastRepaintRect.h = rect.h;
  10161. }
  10162. self._lastRepaintRect = lastRepaintRect;
  10163. self.fire('repaint', {}, false);
  10164. return self;
  10165. },
  10166. renderHtml: function () {
  10167. var self = this;
  10168. var settings = self.settings;
  10169. var attrs, elm;
  10170. attrs = {
  10171. id: self._id,
  10172. hidefocus: '1'
  10173. };
  10174. global$2.each([
  10175. 'rows',
  10176. 'spellcheck',
  10177. 'maxLength',
  10178. 'size',
  10179. 'readonly',
  10180. 'min',
  10181. 'max',
  10182. 'step',
  10183. 'list',
  10184. 'pattern',
  10185. 'placeholder',
  10186. 'required',
  10187. 'multiple'
  10188. ], function (name) {
  10189. attrs[name] = settings[name];
  10190. });
  10191. if (self.disabled()) {
  10192. attrs.disabled = 'disabled';
  10193. }
  10194. if (settings.subtype) {
  10195. attrs.type = settings.subtype;
  10196. }
  10197. elm = funcs.create(settings.multiline ? 'textarea' : 'input', attrs);
  10198. elm.value = self.state.get('value');
  10199. elm.className = self.classes.toString();
  10200. return elm.outerHTML;
  10201. },
  10202. value: function (value) {
  10203. if (arguments.length) {
  10204. this.state.set('value', value);
  10205. return this;
  10206. }
  10207. if (this.state.get('rendered')) {
  10208. this.state.set('value', this.getEl().value);
  10209. }
  10210. return this.state.get('value');
  10211. },
  10212. postRender: function () {
  10213. var self = this;
  10214. self.getEl().value = self.state.get('value');
  10215. self._super();
  10216. self.$el.on('change', function (e) {
  10217. self.state.set('value', e.target.value);
  10218. self.fire('change', e);
  10219. });
  10220. },
  10221. bindStates: function () {
  10222. var self = this;
  10223. self.state.on('change:value', function (e) {
  10224. if (self.getEl().value !== e.value) {
  10225. self.getEl().value = e.value;
  10226. }
  10227. });
  10228. self.state.on('change:disabled', function (e) {
  10229. self.getEl().disabled = e.value;
  10230. });
  10231. return self._super();
  10232. },
  10233. remove: function () {
  10234. this.$el.off();
  10235. this._super();
  10236. }
  10237. });
  10238. var getApi = function () {
  10239. return {
  10240. Selector: Selector,
  10241. Collection: Collection$2,
  10242. ReflowQueue: $_ef12j5u4jh8lz3nl,
  10243. Control: Control$1,
  10244. Factory: global$4,
  10245. KeyboardNavigation: KeyboardNavigation,
  10246. Container: Container,
  10247. DragHelper: DragHelper,
  10248. Scrollable: $_4acv48u6jh8lz3ns,
  10249. Panel: Panel,
  10250. Movable: $_d97gfctrjh8lz3lm,
  10251. Resizable: $_8a2gtru8jh8lz3ny,
  10252. FloatPanel: FloatPanel,
  10253. Window: Window,
  10254. MessageBox: MessageBox,
  10255. Tooltip: Tooltip,
  10256. Widget: Widget,
  10257. Progress: Progress,
  10258. Notification: Notification,
  10259. Layout: Layout,
  10260. AbsoluteLayout: AbsoluteLayout,
  10261. Button: Button,
  10262. ButtonGroup: ButtonGroup,
  10263. Checkbox: Checkbox,
  10264. ComboBox: ComboBox,
  10265. ColorBox: ColorBox,
  10266. PanelButton: PanelButton,
  10267. ColorButton: ColorButton,
  10268. ColorPicker: ColorPicker,
  10269. Path: Path,
  10270. ElementPath: ElementPath,
  10271. FormItem: FormItem,
  10272. Form: Form,
  10273. FieldSet: FieldSet,
  10274. FilePicker: FilePicker,
  10275. FitLayout: FitLayout,
  10276. FlexLayout: FlexLayout,
  10277. FlowLayout: FlowLayout,
  10278. FormatControls: $_4qdht3w4jh8lz3uo,
  10279. GridLayout: GridLayout,
  10280. Iframe: Iframe$1,
  10281. InfoBox: InfoBox,
  10282. Label: Label,
  10283. Toolbar: Toolbar$1,
  10284. MenuBar: MenuBar,
  10285. MenuButton: MenuButton,
  10286. MenuItem: MenuItem,
  10287. Throbber: Throbber,
  10288. Menu: Menu,
  10289. ListBox: ListBox,
  10290. Radio: Radio,
  10291. ResizeHandle: ResizeHandle,
  10292. SelectBox: SelectBox,
  10293. Slider: Slider,
  10294. Spacer: Spacer,
  10295. SplitButton: SplitButton,
  10296. StackLayout: StackLayout,
  10297. TabPanel: TabPanel,
  10298. TextBox: TextBox,
  10299. DropZone: DropZone,
  10300. BrowseButton: BrowseButton
  10301. };
  10302. };
  10303. var appendTo = function (target) {
  10304. if (target.ui) {
  10305. global$2.each(getApi(), function (ref, key) {
  10306. target.ui[key] = ref;
  10307. });
  10308. } else {
  10309. target.ui = getApi();
  10310. }
  10311. };
  10312. var registerToFactory = function () {
  10313. global$2.each(getApi(), function (ref, key) {
  10314. global$4.add(key, ref);
  10315. });
  10316. };
  10317. var Api = {
  10318. appendTo: appendTo,
  10319. registerToFactory: registerToFactory
  10320. };
  10321. Api.registerToFactory();
  10322. Api.appendTo(window.tinymce ? window.tinymce : {});
  10323. global.add('modern', function (editor) {
  10324. $_4qdht3w4jh8lz3uo.setup(editor);
  10325. return $_1os0v5syjh8lz3j9.get(editor);
  10326. });
  10327. function Theme () {
  10328. }
  10329. return Theme;
  10330. }());
  10331. })();