theme.js 321 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302830383048305830683078308830983108311831283138314831583168317831883198320832183228323832483258326832783288329833083318332833383348335833683378338833983408341834283438344834583468347834883498350835183528353835483558356835783588359836083618362836383648365836683678368836983708371837283738374837583768377837883798380838183828383838483858386838783888389839083918392839383948395839683978398839984008401840284038404840584068407840884098410841184128413841484158416841784188419842084218422842384248425842684278428842984308431843284338434843584368437843884398440844184428443844484458446844784488449845084518452845384548455845684578458845984608461846284638464846584668467846884698470847184728473847484758476847784788479848084818482848384848485848684878488848984908491849284938494849584968497849884998500850185028503850485058506850785088509851085118512851385148515851685178518851985208521852285238524852585268527852885298530853185328533853485358536853785388539854085418542854385448545854685478548854985508551855285538554855585568557855885598560856185628563856485658566856785688569857085718572857385748575857685778578857985808581858285838584858585868587858885898590859185928593859485958596859785988599860086018602860386048605860686078608860986108611861286138614861586168617861886198620862186228623862486258626862786288629863086318632863386348635863686378638863986408641864286438644864586468647864886498650865186528653865486558656865786588659866086618662866386648665866686678668866986708671867286738674867586768677867886798680868186828683868486858686868786888689869086918692869386948695869686978698869987008701870287038704870587068707870887098710871187128713871487158716871787188719872087218722872387248725872687278728872987308731873287338734873587368737873887398740874187428743874487458746874787488749875087518752875387548755875687578758875987608761876287638764876587668767876887698770877187728773877487758776877787788779878087818782878387848785878687878788878987908791879287938794879587968797879887998800880188028803880488058806880788088809881088118812881388148815881688178818881988208821882288238824882588268827882888298830883188328833883488358836883788388839884088418842884388448845884688478848884988508851885288538854885588568857885888598860886188628863886488658866886788688869887088718872887388748875887688778878887988808881888288838884888588868887888888898890889188928893889488958896889788988899890089018902890389048905890689078908890989108911891289138914891589168917891889198920892189228923892489258926892789288929893089318932893389348935893689378938893989408941894289438944894589468947894889498950895189528953895489558956895789588959896089618962896389648965896689678968896989708971897289738974897589768977897889798980898189828983898489858986898789888989899089918992899389948995899689978998899990009001900290039004900590069007900890099010901190129013901490159016901790189019902090219022902390249025902690279028902990309031903290339034903590369037903890399040904190429043904490459046904790489049905090519052905390549055905690579058905990609061906290639064906590669067906890699070907190729073907490759076907790789079908090819082908390849085908690879088908990909091909290939094909590969097909890999100910191029103910491059106910791089109911091119112911391149115911691179118911991209121912291239124912591269127912891299130913191329133913491359136913791389139914091419142914391449145914691479148914991509151915291539154915591569157915891599160916191629163916491659166916791689169917091719172917391749175917691779178917991809181918291839184918591869187918891899190919191929193919491959196919791989199920092019202920392049205920692079208920992109211921292139214921592169217921892199220922192229223922492259226922792289229923092319232923392349235923692379238923992409241924292439244924592469247924892499250925192529253925492559256925792589259926092619262926392649265926692679268926992709271927292739274927592769277927892799280928192829283928492859286928792889289929092919292929392949295929692979298929993009301930293039304930593069307930893099310931193129313931493159316931793189319932093219322932393249325932693279328932993309331933293339334933593369337933893399340934193429343934493459346934793489349935093519352935393549355935693579358935993609361936293639364936593669367936893699370937193729373937493759376937793789379938093819382938393849385938693879388938993909391939293939394939593969397939893999400940194029403940494059406940794089409941094119412941394149415941694179418941994209421942294239424942594269427942894299430943194329433943494359436943794389439944094419442944394449445944694479448944994509451945294539454945594569457945894599460946194629463946494659466946794689469947094719472947394749475947694779478947994809481948294839484948594869487948894899490949194929493949494959496949794989499950095019502950395049505950695079508950995109511951295139514951595169517951895199520952195229523952495259526952795289529953095319532953395349535953695379538953995409541954295439544954595469547954895499550955195529553955495559556955795589559956095619562956395649565956695679568956995709571957295739574957595769577957895799580958195829583958495859586958795889589959095919592959395949595959695979598959996009601960296039604960596069607960896099610961196129613961496159616961796189619962096219622962396249625962696279628962996309631963296339634963596369637963896399640964196429643964496459646964796489649965096519652965396549655965696579658965996609661966296639664966596669667966896699670967196729673967496759676967796789679968096819682968396849685968696879688968996909691969296939694969596969697969896999700970197029703970497059706970797089709971097119712971397149715971697179718971997209721972297239724972597269727972897299730973197329733973497359736973797389739974097419742974397449745974697479748974997509751975297539754975597569757975897599760976197629763976497659766976797689769977097719772977397749775977697779778977997809781978297839784978597869787978897899790979197929793979497959796979797989799980098019802980398049805980698079808980998109811981298139814981598169817981898199820982198229823982498259826982798289829983098319832983398349835983698379838983998409841984298439844984598469847984898499850985198529853985498559856985798589859986098619862986398649865986698679868986998709871987298739874987598769877987898799880988198829883988498859886988798889889989098919892989398949895989698979898989999009901990299039904990599069907990899099910991199129913991499159916991799189919992099219922992399249925992699279928992999309931993299339934993599369937993899399940994199429943994499459946994799489949995099519952995399549955995699579958995999609961996299639964996599669967996899699970997199729973997499759976997799789979998099819982998399849985998699879988998999909991999299939994999599969997999899991000010001100021000310004100051000610007100081000910010100111001210013100141001510016100171001810019100201002110022100231002410025100261002710028100291003010031100321003310034100351003610037100381003910040100411004210043100441004510046100471004810049100501005110052100531005410055100561005710058100591006010061100621006310064100651006610067100681006910070100711007210073100741007510076100771007810079100801008110082100831008410085100861008710088100891009010091100921009310094100951009610097100981009910100101011010210103101041010510106101071010810109101101011110112101131011410115101161011710118101191012010121101221012310124101251012610127101281012910130101311013210133101341013510136101371013810139101401014110142101431014410145101461014710148101491015010151101521015310154101551015610157101581015910160101611016210163101641016510166101671016810169101701017110172101731017410175101761017710178101791018010181101821018310184101851018610187101881018910190101911019210193101941019510196101971019810199102001020110202102031020410205102061020710208102091021010211102121021310214102151021610217102181021910220102211022210223102241022510226102271022810229102301023110232102331023410235102361023710238102391024010241102421024310244102451024610247102481024910250102511025210253102541025510256102571025810259102601026110262102631026410265102661026710268102691027010271102721027310274102751027610277102781027910280102811028210283102841028510286102871028810289102901029110292102931029410295102961029710298102991030010301103021030310304103051030610307103081030910310103111031210313103141031510316103171031810319103201032110322103231032410325103261032710328103291033010331103321033310334103351033610337103381033910340103411034210343103441034510346103471034810349103501035110352103531035410355103561035710358103591036010361103621036310364103651036610367103681036910370103711037210373103741037510376103771037810379103801038110382103831038410385103861038710388103891039010391103921039310394103951039610397103981039910400104011040210403104041040510406104071040810409104101041110412104131041410415104161041710418104191042010421104221042310424104251042610427104281042910430104311043210433104341043510436104371043810439104401044110442104431044410445104461044710448104491045010451104521045310454104551045610457104581045910460104611046210463104641046510466104671046810469104701047110472104731047410475104761047710478104791048010481104821048310484104851048610487104881048910490104911049210493104941049510496104971049810499105001050110502105031050410505105061050710508105091051010511105121051310514105151051610517105181051910520105211052210523105241052510526105271052810529105301053110532105331053410535105361053710538105391054010541105421054310544105451054610547105481054910550105511055210553105541055510556105571055810559105601056110562105631056410565105661056710568105691057010571105721057310574105751057610577105781057910580105811058210583105841058510586105871058810589105901059110592105931059410595105961059710598105991060010601106021060310604106051060610607106081060910610106111061210613106141061510616106171061810619106201062110622106231062410625106261062710628106291063010631106321063310634106351063610637106381063910640106411064210643106441064510646106471064810649106501065110652106531065410655106561065710658106591066010661106621066310664106651066610667106681066910670106711067210673106741067510676
  1. (function () {
  2. var inlite = (function () {
  3. 'use strict';
  4. var global = tinymce.util.Tools.resolve('tinymce.ThemeManager');
  5. var global$1 = tinymce.util.Tools.resolve('tinymce.Env');
  6. var global$2 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');
  7. var global$3 = tinymce.util.Tools.resolve('tinymce.util.Delay');
  8. var flatten = function (arr) {
  9. return arr.reduce(function (results, item) {
  10. return Array.isArray(item) ? results.concat(flatten(item)) : results.concat(item);
  11. }, []);
  12. };
  13. var $_3r98o9174jh8lz7kx = { flatten: flatten };
  14. var result = function (id, rect) {
  15. return {
  16. id: id,
  17. rect: rect
  18. };
  19. };
  20. var match = function (editor, matchers) {
  21. for (var i = 0; i < matchers.length; i++) {
  22. var f = matchers[i];
  23. var result_1 = f(editor);
  24. if (result_1) {
  25. return result_1;
  26. }
  27. }
  28. return null;
  29. };
  30. var $_fb7717176jh8lz7l0 = {
  31. match: match,
  32. result: result
  33. };
  34. var fromClientRect = function (clientRect) {
  35. return {
  36. x: clientRect.left,
  37. y: clientRect.top,
  38. w: clientRect.width,
  39. h: clientRect.height
  40. };
  41. };
  42. var toClientRect = function (geomRect) {
  43. return {
  44. left: geomRect.x,
  45. top: geomRect.y,
  46. width: geomRect.w,
  47. height: geomRect.h,
  48. right: geomRect.x + geomRect.w,
  49. bottom: geomRect.y + geomRect.h
  50. };
  51. };
  52. var $_1loe4y178jh8lz7l4 = {
  53. fromClientRect: fromClientRect,
  54. toClientRect: toClientRect
  55. };
  56. var toAbsolute = function (rect) {
  57. var vp = global$2.DOM.getViewPort();
  58. return {
  59. x: rect.x + vp.x,
  60. y: rect.y + vp.y,
  61. w: rect.w,
  62. h: rect.h
  63. };
  64. };
  65. var measureElement = function (elm) {
  66. var clientRect = elm.getBoundingClientRect();
  67. return toAbsolute({
  68. x: clientRect.left,
  69. y: clientRect.top,
  70. w: Math.max(elm.clientWidth, elm.offsetWidth),
  71. h: Math.max(elm.clientHeight, elm.offsetHeight)
  72. });
  73. };
  74. var getElementRect = function (editor, elm) {
  75. return measureElement(elm);
  76. };
  77. var getPageAreaRect = function (editor) {
  78. return measureElement(editor.getElement().ownerDocument.body);
  79. };
  80. var getContentAreaRect = function (editor) {
  81. return measureElement(editor.getContentAreaContainer() || editor.getBody());
  82. };
  83. var getSelectionRect = function (editor) {
  84. var clientRect = editor.selection.getBoundingClientRect();
  85. return clientRect ? toAbsolute($_1loe4y178jh8lz7l4.fromClientRect(clientRect)) : null;
  86. };
  87. var $_82t0yo177jh8lz7l1 = {
  88. getElementRect: getElementRect,
  89. getPageAreaRect: getPageAreaRect,
  90. getContentAreaRect: getContentAreaRect,
  91. getSelectionRect: getSelectionRect
  92. };
  93. var element = function (element, predicateIds) {
  94. return function (editor) {
  95. for (var i = 0; i < predicateIds.length; i++) {
  96. if (predicateIds[i].predicate(element)) {
  97. var result = $_fb7717176jh8lz7l0.result(predicateIds[i].id, $_82t0yo177jh8lz7l1.getElementRect(editor, element));
  98. return result;
  99. }
  100. }
  101. return null;
  102. };
  103. };
  104. var parent = function (elements, predicateIds) {
  105. return function (editor) {
  106. for (var i = 0; i < elements.length; i++) {
  107. for (var x = 0; x < predicateIds.length; x++) {
  108. if (predicateIds[x].predicate(elements[i])) {
  109. return $_fb7717176jh8lz7l0.result(predicateIds[x].id, $_82t0yo177jh8lz7l1.getElementRect(editor, elements[i]));
  110. }
  111. }
  112. }
  113. return null;
  114. };
  115. };
  116. var $_qzsc7175jh8lz7ky = {
  117. element: element,
  118. parent: parent
  119. };
  120. var global$4 = tinymce.util.Tools.resolve('tinymce.util.Tools');
  121. var create = function (id, predicate) {
  122. return {
  123. id: id,
  124. predicate: predicate
  125. };
  126. };
  127. var fromContextToolbars = function (toolbars) {
  128. return global$4.map(toolbars, function (toolbar) {
  129. return create(toolbar.id, toolbar.predicate);
  130. });
  131. };
  132. var $_56g1zb179jh8lz7l5 = {
  133. create: create,
  134. fromContextToolbars: fromContextToolbars
  135. };
  136. var textSelection = function (id) {
  137. return function (editor) {
  138. if (!editor.selection.isCollapsed()) {
  139. var result = $_fb7717176jh8lz7l0.result(id, $_82t0yo177jh8lz7l1.getSelectionRect(editor));
  140. return result;
  141. }
  142. return null;
  143. };
  144. };
  145. var emptyTextBlock = function (elements, id) {
  146. return function (editor) {
  147. var i;
  148. var textBlockElementsMap = editor.schema.getTextBlockElements();
  149. for (i = 0; i < elements.length; i++) {
  150. if (elements[i].nodeName === 'TABLE') {
  151. return null;
  152. }
  153. }
  154. for (i = 0; i < elements.length; i++) {
  155. if (elements[i].nodeName in textBlockElementsMap) {
  156. if (editor.dom.isEmpty(elements[i])) {
  157. return $_fb7717176jh8lz7l0.result(id, $_82t0yo177jh8lz7l1.getSelectionRect(editor));
  158. }
  159. return null;
  160. }
  161. }
  162. return null;
  163. };
  164. };
  165. var $_fqowya17bjh8lz7l6 = {
  166. textSelection: textSelection,
  167. emptyTextBlock: emptyTextBlock
  168. };
  169. var fireSkinLoaded = function (editor) {
  170. editor.fire('SkinLoaded');
  171. };
  172. var fireBeforeRenderUI = function (editor) {
  173. return editor.fire('BeforeRenderUI');
  174. };
  175. var $_dincot17djh8lz7l9 = {
  176. fireSkinLoaded: fireSkinLoaded,
  177. fireBeforeRenderUI: fireBeforeRenderUI
  178. };
  179. var global$5 = tinymce.util.Tools.resolve('tinymce.EditorManager');
  180. var isType = function (type) {
  181. return function (value) {
  182. return typeof value === type;
  183. };
  184. };
  185. var isArray = function (value) {
  186. return Array.isArray(value);
  187. };
  188. var isNull = function (value) {
  189. return value === null;
  190. };
  191. var isObject = function (predicate) {
  192. return function (value) {
  193. return !isNull(value) && !isArray(value) && predicate(value);
  194. };
  195. };
  196. var isString = function (value) {
  197. return isType('string')(value);
  198. };
  199. var isNumber = function (value) {
  200. return isType('number')(value);
  201. };
  202. var isFunction = function (value) {
  203. return isType('function')(value);
  204. };
  205. var isBoolean = function (value) {
  206. return isType('boolean')(value);
  207. };
  208. var $_795vzu17hjh8lz7lf = {
  209. isString: isString,
  210. isNumber: isNumber,
  211. isBoolean: isBoolean,
  212. isFunction: isFunction,
  213. isObject: isObject(isType('object')),
  214. isNull: isNull,
  215. isArray: isArray
  216. };
  217. var validDefaultOrDie = function (value, predicate) {
  218. if (predicate(value)) {
  219. return true;
  220. }
  221. throw new Error('Default value doesn\'t match requested type.');
  222. };
  223. var getByTypeOr = function (predicate) {
  224. return function (editor, name, defaultValue) {
  225. var settings = editor.settings;
  226. validDefaultOrDie(defaultValue, predicate);
  227. return name in settings && predicate(settings[name]) ? settings[name] : defaultValue;
  228. };
  229. };
  230. var splitNoEmpty = function (str, delim) {
  231. return str.split(delim).filter(function (item) {
  232. return item.length > 0;
  233. });
  234. };
  235. var itemsToArray = function (value, defaultValue) {
  236. var stringToItemsArray = function (value) {
  237. return typeof value === 'string' ? splitNoEmpty(value, /[ ,]/) : value;
  238. };
  239. var boolToItemsArray = function (value, defaultValue) {
  240. return value === false ? [] : defaultValue;
  241. };
  242. if ($_795vzu17hjh8lz7lf.isArray(value)) {
  243. return value;
  244. } else if ($_795vzu17hjh8lz7lf.isString(value)) {
  245. return stringToItemsArray(value);
  246. } else if ($_795vzu17hjh8lz7lf.isBoolean(value)) {
  247. return boolToItemsArray(value, defaultValue);
  248. }
  249. return defaultValue;
  250. };
  251. var getToolbarItemsOr = function (predicate) {
  252. return function (editor, name, defaultValue) {
  253. var value = name in editor.settings ? editor.settings[name] : defaultValue;
  254. validDefaultOrDie(defaultValue, predicate);
  255. return itemsToArray(value, defaultValue);
  256. };
  257. };
  258. var $_4mwpdv17gjh8lz7ld = {
  259. getStringOr: getByTypeOr($_795vzu17hjh8lz7lf.isString),
  260. getBoolOr: getByTypeOr($_795vzu17hjh8lz7lf.isBoolean),
  261. getNumberOr: getByTypeOr($_795vzu17hjh8lz7lf.isNumber),
  262. getHandlerOr: getByTypeOr($_795vzu17hjh8lz7lf.isFunction),
  263. getToolbarItemsOr: getToolbarItemsOr($_795vzu17hjh8lz7lf.isArray)
  264. };
  265. var global$6 = tinymce.util.Tools.resolve('tinymce.geom.Rect');
  266. var result$1 = function (rect, position) {
  267. return {
  268. rect: rect,
  269. position: position
  270. };
  271. };
  272. var moveTo = function (rect, toRect) {
  273. return {
  274. x: toRect.x,
  275. y: toRect.y,
  276. w: rect.w,
  277. h: rect.h
  278. };
  279. };
  280. var calcByPositions = function (testPositions1, testPositions2, targetRect, contentAreaRect, panelRect) {
  281. var relPos, relRect, outputPanelRect;
  282. var paddedContentRect = {
  283. x: contentAreaRect.x,
  284. y: contentAreaRect.y,
  285. w: contentAreaRect.w + (contentAreaRect.w < panelRect.w + targetRect.w ? panelRect.w : 0),
  286. h: contentAreaRect.h + (contentAreaRect.h < panelRect.h + targetRect.h ? panelRect.h : 0)
  287. };
  288. relPos = global$6.findBestRelativePosition(panelRect, targetRect, paddedContentRect, testPositions1);
  289. targetRect = global$6.clamp(targetRect, paddedContentRect);
  290. if (relPos) {
  291. relRect = global$6.relativePosition(panelRect, targetRect, relPos);
  292. outputPanelRect = moveTo(panelRect, relRect);
  293. return result$1(outputPanelRect, relPos);
  294. }
  295. targetRect = global$6.intersect(paddedContentRect, targetRect);
  296. if (targetRect) {
  297. relPos = global$6.findBestRelativePosition(panelRect, targetRect, paddedContentRect, testPositions2);
  298. if (relPos) {
  299. relRect = global$6.relativePosition(panelRect, targetRect, relPos);
  300. outputPanelRect = moveTo(panelRect, relRect);
  301. return result$1(outputPanelRect, relPos);
  302. }
  303. outputPanelRect = moveTo(panelRect, targetRect);
  304. return result$1(outputPanelRect, relPos);
  305. }
  306. return null;
  307. };
  308. var calcInsert = function (targetRect, contentAreaRect, panelRect) {
  309. return calcByPositions([
  310. 'cr-cl',
  311. 'cl-cr'
  312. ], [
  313. 'bc-tc',
  314. 'bl-tl',
  315. 'br-tr'
  316. ], targetRect, contentAreaRect, panelRect);
  317. };
  318. var calc = function (targetRect, contentAreaRect, panelRect) {
  319. return calcByPositions([
  320. 'tc-bc',
  321. 'bc-tc',
  322. 'tl-bl',
  323. 'bl-tl',
  324. 'tr-br',
  325. 'br-tr',
  326. 'cr-cl',
  327. 'cl-cr'
  328. ], [
  329. 'bc-tc',
  330. 'bl-tl',
  331. 'br-tr',
  332. 'cr-cl'
  333. ], targetRect, contentAreaRect, panelRect);
  334. };
  335. var userConstrain = function (handler, targetRect, contentAreaRect, panelRect) {
  336. var userConstrainedPanelRect;
  337. if (typeof handler === 'function') {
  338. userConstrainedPanelRect = handler({
  339. elementRect: $_1loe4y178jh8lz7l4.toClientRect(targetRect),
  340. contentAreaRect: $_1loe4y178jh8lz7l4.toClientRect(contentAreaRect),
  341. panelRect: $_1loe4y178jh8lz7l4.toClientRect(panelRect)
  342. });
  343. return $_1loe4y178jh8lz7l4.fromClientRect(userConstrainedPanelRect);
  344. }
  345. return panelRect;
  346. };
  347. var defaultHandler = function (rects) {
  348. return rects.panelRect;
  349. };
  350. var $_7c1jsb17ijh8lz7lh = {
  351. calcInsert: calcInsert,
  352. calc: calc,
  353. userConstrain: userConstrain,
  354. defaultHandler: defaultHandler
  355. };
  356. var toAbsoluteUrl = function (editor, url) {
  357. return editor.documentBaseURI.toAbsolute(url);
  358. };
  359. var urlFromName = function (name) {
  360. var prefix = global$5.baseURL + '/skins/';
  361. return name ? prefix + name : prefix + 'lightgray';
  362. };
  363. var getTextSelectionToolbarItems = function (editor) {
  364. return $_4mwpdv17gjh8lz7ld.getToolbarItemsOr(editor, 'selection_toolbar', [
  365. 'bold',
  366. 'italic',
  367. '|',
  368. 'quicklink',
  369. 'h2',
  370. 'h3',
  371. 'blockquote'
  372. ]);
  373. };
  374. var getInsertToolbarItems = function (editor) {
  375. return $_4mwpdv17gjh8lz7ld.getToolbarItemsOr(editor, 'insert_toolbar', [
  376. 'quickimage',
  377. 'quicktable'
  378. ]);
  379. };
  380. var getPositionHandler = function (editor) {
  381. return $_4mwpdv17gjh8lz7ld.getHandlerOr(editor, 'inline_toolbar_position_handler', $_7c1jsb17ijh8lz7lh.defaultHandler);
  382. };
  383. var getSkinUrl = function (editor) {
  384. var settings = editor.settings;
  385. return settings.skin_url ? toAbsoluteUrl(editor, settings.skin_url) : urlFromName(settings.skin);
  386. };
  387. var isSkinDisabled = function (editor) {
  388. return editor.settings.skin === false;
  389. };
  390. var $_frnzmx17ejh8lz7lb = {
  391. getTextSelectionToolbarItems: getTextSelectionToolbarItems,
  392. getInsertToolbarItems: getInsertToolbarItems,
  393. getPositionHandler: getPositionHandler,
  394. getSkinUrl: getSkinUrl,
  395. isSkinDisabled: isSkinDisabled
  396. };
  397. var fireSkinLoaded$1 = function (editor, callback) {
  398. var done = function () {
  399. editor._skinLoaded = true;
  400. $_dincot17djh8lz7l9.fireSkinLoaded(editor);
  401. callback();
  402. };
  403. if (editor.initialized) {
  404. done();
  405. } else {
  406. editor.on('init', done);
  407. }
  408. };
  409. var load = function (editor, callback) {
  410. var skinUrl = $_frnzmx17ejh8lz7lb.getSkinUrl(editor);
  411. var done = function () {
  412. fireSkinLoaded$1(editor, callback);
  413. };
  414. if ($_frnzmx17ejh8lz7lb.isSkinDisabled(editor)) {
  415. done();
  416. } else {
  417. global$2.DOM.styleSheetLoader.load(skinUrl + '/skin.min.css', done);
  418. editor.contentCSS.push(skinUrl + '/content.inline.min.css');
  419. }
  420. };
  421. var $_a37m1717cjh8lz7l8 = { load: load };
  422. var getSelectionElements = function (editor) {
  423. var node = editor.selection.getNode();
  424. var elms = editor.dom.getParents(node, '*');
  425. return elms;
  426. };
  427. var createToolbar = function (editor, selector, id, items) {
  428. var selectorPredicate = function (elm) {
  429. return editor.dom.is(elm, selector);
  430. };
  431. return {
  432. predicate: selectorPredicate,
  433. id: id,
  434. items: items
  435. };
  436. };
  437. var getToolbars = function (editor) {
  438. var contextToolbars = editor.contextToolbars;
  439. return $_3r98o9174jh8lz7kx.flatten([
  440. contextToolbars ? contextToolbars : [],
  441. createToolbar(editor, 'img', 'image', 'alignleft aligncenter alignright')
  442. ]);
  443. };
  444. var findMatchResult = function (editor, toolbars) {
  445. var result, elements, contextToolbarsPredicateIds;
  446. elements = getSelectionElements(editor);
  447. contextToolbarsPredicateIds = $_56g1zb179jh8lz7l5.fromContextToolbars(toolbars);
  448. result = $_fb7717176jh8lz7l0.match(editor, [
  449. $_qzsc7175jh8lz7ky.element(elements[0], contextToolbarsPredicateIds),
  450. $_fqowya17bjh8lz7l6.textSelection('text'),
  451. $_fqowya17bjh8lz7l6.emptyTextBlock(elements, 'insert'),
  452. $_qzsc7175jh8lz7ky.parent(elements, contextToolbarsPredicateIds)
  453. ]);
  454. return result && result.rect ? result : null;
  455. };
  456. var editorHasFocus = function (editor) {
  457. return document.activeElement === editor.getBody();
  458. };
  459. var togglePanel = function (editor, panel) {
  460. var toggle = function () {
  461. var toolbars = getToolbars(editor);
  462. var result = findMatchResult(editor, toolbars);
  463. if (result) {
  464. panel.show(editor, result.id, result.rect, toolbars);
  465. } else {
  466. panel.hide();
  467. }
  468. };
  469. return function () {
  470. if (!editor.removed && editorHasFocus(editor)) {
  471. toggle();
  472. }
  473. };
  474. };
  475. var repositionPanel = function (editor, panel) {
  476. return function () {
  477. var toolbars = getToolbars(editor);
  478. var result = findMatchResult(editor, toolbars);
  479. if (result) {
  480. panel.reposition(editor, result.id, result.rect);
  481. }
  482. };
  483. };
  484. var ignoreWhenFormIsVisible = function (editor, panel, f) {
  485. return function () {
  486. if (!editor.removed && !panel.inForm()) {
  487. f();
  488. }
  489. };
  490. };
  491. var bindContextualToolbarsEvents = function (editor, panel) {
  492. var throttledTogglePanel = global$3.throttle(togglePanel(editor, panel), 0);
  493. var throttledTogglePanelWhenNotInForm = global$3.throttle(ignoreWhenFormIsVisible(editor, panel, togglePanel(editor, panel)), 0);
  494. var reposition = repositionPanel(editor, panel);
  495. editor.on('blur hide ObjectResizeStart', panel.hide);
  496. editor.on('click', throttledTogglePanel);
  497. editor.on('nodeChange mouseup', throttledTogglePanelWhenNotInForm);
  498. editor.on('ResizeEditor keyup', throttledTogglePanel);
  499. editor.on('ResizeWindow', reposition);
  500. global$2.DOM.bind(global$1.container, 'scroll', reposition);
  501. editor.on('remove', function () {
  502. global$2.DOM.unbind(global$1.container, 'scroll', reposition);
  503. panel.remove();
  504. });
  505. editor.shortcuts.add('Alt+F10,F10', '', panel.focus);
  506. };
  507. var overrideLinkShortcut = function (editor, panel) {
  508. editor.shortcuts.remove('meta+k');
  509. editor.shortcuts.add('meta+k', '', function () {
  510. var toolbars = getToolbars(editor);
  511. var result = $_fb7717176jh8lz7l0.match(editor, [$_fqowya17bjh8lz7l6.textSelection('quicklink')]);
  512. if (result) {
  513. panel.show(editor, result.id, result.rect, toolbars);
  514. }
  515. });
  516. };
  517. var renderInlineUI = function (editor, panel) {
  518. $_a37m1717cjh8lz7l8.load(editor, function () {
  519. bindContextualToolbarsEvents(editor, panel);
  520. overrideLinkShortcut(editor, panel);
  521. });
  522. return {};
  523. };
  524. var fail = function (message) {
  525. throw new Error(message);
  526. };
  527. var renderUI = function (editor, panel) {
  528. return editor.inline ? renderInlineUI(editor, panel) : fail('inlite theme only supports inline mode.');
  529. };
  530. var $_fduguf170jh8lz7ks = { renderUI: renderUI };
  531. var noop = function () {
  532. var x = [];
  533. for (var _i = 0; _i < arguments.length; _i++) {
  534. x[_i] = arguments[_i];
  535. }
  536. };
  537. var noarg = function (f) {
  538. return function () {
  539. var x = [];
  540. for (var _i = 0; _i < arguments.length; _i++) {
  541. x[_i] = arguments[_i];
  542. }
  543. return f();
  544. };
  545. };
  546. var compose = function (fa, fb) {
  547. return function () {
  548. var x = [];
  549. for (var _i = 0; _i < arguments.length; _i++) {
  550. x[_i] = arguments[_i];
  551. }
  552. return fa(fb.apply(null, arguments));
  553. };
  554. };
  555. var constant = function (value) {
  556. return function () {
  557. return value;
  558. };
  559. };
  560. var identity = function (x) {
  561. return x;
  562. };
  563. var tripleEquals = function (a, b) {
  564. return a === b;
  565. };
  566. var curry = function (f) {
  567. var x = [];
  568. for (var _i = 1; _i < arguments.length; _i++) {
  569. x[_i - 1] = arguments[_i];
  570. }
  571. var args = new Array(arguments.length - 1);
  572. for (var i = 1; i < arguments.length; i++)
  573. args[i - 1] = arguments[i];
  574. return function () {
  575. var x = [];
  576. for (var _i = 0; _i < arguments.length; _i++) {
  577. x[_i] = arguments[_i];
  578. }
  579. var newArgs = new Array(arguments.length);
  580. for (var j = 0; j < newArgs.length; j++)
  581. newArgs[j] = arguments[j];
  582. var all = args.concat(newArgs);
  583. return f.apply(null, all);
  584. };
  585. };
  586. var not = function (f) {
  587. return function () {
  588. var x = [];
  589. for (var _i = 0; _i < arguments.length; _i++) {
  590. x[_i] = arguments[_i];
  591. }
  592. return !f.apply(null, arguments);
  593. };
  594. };
  595. var die = function (msg) {
  596. return function () {
  597. throw new Error(msg);
  598. };
  599. };
  600. var apply = function (f) {
  601. return f();
  602. };
  603. var call = function (f) {
  604. f();
  605. };
  606. var never = constant(false);
  607. var always = constant(true);
  608. var $_2jrs7h17njh8lz7m6 = {
  609. noop: noop,
  610. noarg: noarg,
  611. compose: compose,
  612. constant: constant,
  613. identity: identity,
  614. tripleEquals: tripleEquals,
  615. curry: curry,
  616. not: not,
  617. die: die,
  618. apply: apply,
  619. call: call,
  620. never: never,
  621. always: always
  622. };
  623. var never$1 = $_2jrs7h17njh8lz7m6.never;
  624. var always$1 = $_2jrs7h17njh8lz7m6.always;
  625. var none = function () {
  626. return NONE;
  627. };
  628. var NONE = function () {
  629. var eq = function (o) {
  630. return o.isNone();
  631. };
  632. var call = function (thunk) {
  633. return thunk();
  634. };
  635. var id = function (n) {
  636. return n;
  637. };
  638. var noop = function () {
  639. };
  640. var me = {
  641. fold: function (n, s) {
  642. return n();
  643. },
  644. is: never$1,
  645. isSome: never$1,
  646. isNone: always$1,
  647. getOr: id,
  648. getOrThunk: call,
  649. getOrDie: function (msg) {
  650. throw new Error(msg || 'error: getOrDie called on none.');
  651. },
  652. or: id,
  653. orThunk: call,
  654. map: none,
  655. ap: none,
  656. each: noop,
  657. bind: none,
  658. flatten: none,
  659. exists: never$1,
  660. forall: always$1,
  661. filter: none,
  662. equals: eq,
  663. equals_: eq,
  664. toArray: function () {
  665. return [];
  666. },
  667. toString: $_2jrs7h17njh8lz7m6.constant('none()')
  668. };
  669. if (Object.freeze)
  670. Object.freeze(me);
  671. return me;
  672. }();
  673. var some = function (a) {
  674. var constant_a = function () {
  675. return a;
  676. };
  677. var self = function () {
  678. return me;
  679. };
  680. var map = function (f) {
  681. return some(f(a));
  682. };
  683. var bind = function (f) {
  684. return f(a);
  685. };
  686. var me = {
  687. fold: function (n, s) {
  688. return s(a);
  689. },
  690. is: function (v) {
  691. return a === v;
  692. },
  693. isSome: always$1,
  694. isNone: never$1,
  695. getOr: constant_a,
  696. getOrThunk: constant_a,
  697. getOrDie: constant_a,
  698. or: self,
  699. orThunk: self,
  700. map: map,
  701. ap: function (optfab) {
  702. return optfab.fold(none, function (fab) {
  703. return some(fab(a));
  704. });
  705. },
  706. each: function (f) {
  707. f(a);
  708. },
  709. bind: bind,
  710. flatten: constant_a,
  711. exists: bind,
  712. forall: bind,
  713. filter: function (f) {
  714. return f(a) ? me : NONE;
  715. },
  716. equals: function (o) {
  717. return o.is(a);
  718. },
  719. equals_: function (o, elementEq) {
  720. return o.fold(never$1, function (b) {
  721. return elementEq(a, b);
  722. });
  723. },
  724. toArray: function () {
  725. return [a];
  726. },
  727. toString: function () {
  728. return 'some(' + a + ')';
  729. }
  730. };
  731. return me;
  732. };
  733. var from = function (value) {
  734. return value === null || value === undefined ? NONE : some(value);
  735. };
  736. var Option = {
  737. some: some,
  738. none: none,
  739. from: from
  740. };
  741. var typeOf = function (x) {
  742. if (x === null)
  743. return 'null';
  744. var t = typeof x;
  745. if (t === 'object' && Array.prototype.isPrototypeOf(x))
  746. return 'array';
  747. if (t === 'object' && String.prototype.isPrototypeOf(x))
  748. return 'string';
  749. return t;
  750. };
  751. var isType$1 = function (type) {
  752. return function (value) {
  753. return typeOf(value) === type;
  754. };
  755. };
  756. var $_55hqur17ojh8lz7m9 = {
  757. isString: isType$1('string'),
  758. isObject: isType$1('object'),
  759. isArray: isType$1('array'),
  760. isNull: isType$1('null'),
  761. isBoolean: isType$1('boolean'),
  762. isUndefined: isType$1('undefined'),
  763. isFunction: isType$1('function'),
  764. isNumber: isType$1('number')
  765. };
  766. var rawIndexOf = function () {
  767. var pIndexOf = Array.prototype.indexOf;
  768. var fastIndex = function (xs, x) {
  769. return pIndexOf.call(xs, x);
  770. };
  771. var slowIndex = function (xs, x) {
  772. return slowIndexOf(xs, x);
  773. };
  774. return pIndexOf === undefined ? slowIndex : fastIndex;
  775. }();
  776. var indexOf = function (xs, x) {
  777. var r = rawIndexOf(xs, x);
  778. return r === -1 ? Option.none() : Option.some(r);
  779. };
  780. var contains = function (xs, x) {
  781. return rawIndexOf(xs, x) > -1;
  782. };
  783. var exists = function (xs, pred) {
  784. return findIndex(xs, pred).isSome();
  785. };
  786. var range = function (num, f) {
  787. var r = [];
  788. for (var i = 0; i < num; i++) {
  789. r.push(f(i));
  790. }
  791. return r;
  792. };
  793. var chunk = function (array, size) {
  794. var r = [];
  795. for (var i = 0; i < array.length; i += size) {
  796. var s = array.slice(i, i + size);
  797. r.push(s);
  798. }
  799. return r;
  800. };
  801. var map = function (xs, f) {
  802. var len = xs.length;
  803. var r = new Array(len);
  804. for (var i = 0; i < len; i++) {
  805. var x = xs[i];
  806. r[i] = f(x, i, xs);
  807. }
  808. return r;
  809. };
  810. var each = function (xs, f) {
  811. for (var i = 0, len = xs.length; i < len; i++) {
  812. var x = xs[i];
  813. f(x, i, xs);
  814. }
  815. };
  816. var eachr = function (xs, f) {
  817. for (var i = xs.length - 1; i >= 0; i--) {
  818. var x = xs[i];
  819. f(x, i, xs);
  820. }
  821. };
  822. var partition = function (xs, pred) {
  823. var pass = [];
  824. var fail = [];
  825. for (var i = 0, len = xs.length; i < len; i++) {
  826. var x = xs[i];
  827. var arr = pred(x, i, xs) ? pass : fail;
  828. arr.push(x);
  829. }
  830. return {
  831. pass: pass,
  832. fail: fail
  833. };
  834. };
  835. var filter = function (xs, pred) {
  836. var r = [];
  837. for (var i = 0, len = xs.length; i < len; i++) {
  838. var x = xs[i];
  839. if (pred(x, i, xs)) {
  840. r.push(x);
  841. }
  842. }
  843. return r;
  844. };
  845. var groupBy = function (xs, f) {
  846. if (xs.length === 0) {
  847. return [];
  848. } else {
  849. var wasType = f(xs[0]);
  850. var r = [];
  851. var group = [];
  852. for (var i = 0, len = xs.length; i < len; i++) {
  853. var x = xs[i];
  854. var type = f(x);
  855. if (type !== wasType) {
  856. r.push(group);
  857. group = [];
  858. }
  859. wasType = type;
  860. group.push(x);
  861. }
  862. if (group.length !== 0) {
  863. r.push(group);
  864. }
  865. return r;
  866. }
  867. };
  868. var foldr = function (xs, f, acc) {
  869. eachr(xs, function (x) {
  870. acc = f(acc, x);
  871. });
  872. return acc;
  873. };
  874. var foldl = function (xs, f, acc) {
  875. each(xs, function (x) {
  876. acc = f(acc, x);
  877. });
  878. return acc;
  879. };
  880. var find = function (xs, pred) {
  881. for (var i = 0, len = xs.length; i < len; i++) {
  882. var x = xs[i];
  883. if (pred(x, i, xs)) {
  884. return Option.some(x);
  885. }
  886. }
  887. return Option.none();
  888. };
  889. var findIndex = function (xs, pred) {
  890. for (var i = 0, len = xs.length; i < len; i++) {
  891. var x = xs[i];
  892. if (pred(x, i, xs)) {
  893. return Option.some(i);
  894. }
  895. }
  896. return Option.none();
  897. };
  898. var slowIndexOf = function (xs, x) {
  899. for (var i = 0, len = xs.length; i < len; ++i) {
  900. if (xs[i] === x) {
  901. return i;
  902. }
  903. }
  904. return -1;
  905. };
  906. var push = Array.prototype.push;
  907. var flatten$1 = function (xs) {
  908. var r = [];
  909. for (var i = 0, len = xs.length; i < len; ++i) {
  910. if (!Array.prototype.isPrototypeOf(xs[i]))
  911. throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);
  912. push.apply(r, xs[i]);
  913. }
  914. return r;
  915. };
  916. var bind = function (xs, f) {
  917. var output = map(xs, f);
  918. return flatten$1(output);
  919. };
  920. var forall = function (xs, pred) {
  921. for (var i = 0, len = xs.length; i < len; ++i) {
  922. var x = xs[i];
  923. if (pred(x, i, xs) !== true) {
  924. return false;
  925. }
  926. }
  927. return true;
  928. };
  929. var equal = function (a1, a2) {
  930. return a1.length === a2.length && forall(a1, function (x, i) {
  931. return x === a2[i];
  932. });
  933. };
  934. var slice = Array.prototype.slice;
  935. var reverse = function (xs) {
  936. var r = slice.call(xs, 0);
  937. r.reverse();
  938. return r;
  939. };
  940. var difference = function (a1, a2) {
  941. return filter(a1, function (x) {
  942. return !contains(a2, x);
  943. });
  944. };
  945. var mapToObject = function (xs, f) {
  946. var r = {};
  947. for (var i = 0, len = xs.length; i < len; i++) {
  948. var x = xs[i];
  949. r[String(x)] = f(x, i);
  950. }
  951. return r;
  952. };
  953. var pure = function (x) {
  954. return [x];
  955. };
  956. var sort = function (xs, comparator) {
  957. var copy = slice.call(xs, 0);
  958. copy.sort(comparator);
  959. return copy;
  960. };
  961. var head = function (xs) {
  962. return xs.length === 0 ? Option.none() : Option.some(xs[0]);
  963. };
  964. var last = function (xs) {
  965. return xs.length === 0 ? Option.none() : Option.some(xs[xs.length - 1]);
  966. };
  967. var from$1 = $_55hqur17ojh8lz7m9.isFunction(Array.from) ? Array.from : function (x) {
  968. return slice.call(x);
  969. };
  970. var $_qgcal17ljh8lz7ly = {
  971. map: map,
  972. each: each,
  973. eachr: eachr,
  974. partition: partition,
  975. filter: filter,
  976. groupBy: groupBy,
  977. indexOf: indexOf,
  978. foldr: foldr,
  979. foldl: foldl,
  980. find: find,
  981. findIndex: findIndex,
  982. flatten: flatten$1,
  983. bind: bind,
  984. forall: forall,
  985. exists: exists,
  986. contains: contains,
  987. equal: equal,
  988. reverse: reverse,
  989. chunk: chunk,
  990. difference: difference,
  991. mapToObject: mapToObject,
  992. pure: pure,
  993. sort: sort,
  994. range: range,
  995. head: head,
  996. last: last,
  997. from: from$1
  998. };
  999. var count = 0;
  1000. var funcs = {
  1001. id: function () {
  1002. return 'mceu_' + count++;
  1003. },
  1004. create: function (name, attrs, children) {
  1005. var elm = document.createElement(name);
  1006. global$2.DOM.setAttribs(elm, attrs);
  1007. if (typeof children === 'string') {
  1008. elm.innerHTML = children;
  1009. } else {
  1010. global$4.each(children, function (child) {
  1011. if (child.nodeType) {
  1012. elm.appendChild(child);
  1013. }
  1014. });
  1015. }
  1016. return elm;
  1017. },
  1018. createFragment: function (html) {
  1019. return global$2.DOM.createFragment(html);
  1020. },
  1021. getWindowSize: function () {
  1022. return global$2.DOM.getViewPort();
  1023. },
  1024. getSize: function (elm) {
  1025. var width, height;
  1026. if (elm.getBoundingClientRect) {
  1027. var rect = elm.getBoundingClientRect();
  1028. width = Math.max(rect.width || rect.right - rect.left, elm.offsetWidth);
  1029. height = Math.max(rect.height || rect.bottom - rect.bottom, elm.offsetHeight);
  1030. } else {
  1031. width = elm.offsetWidth;
  1032. height = elm.offsetHeight;
  1033. }
  1034. return {
  1035. width: width,
  1036. height: height
  1037. };
  1038. },
  1039. getPos: function (elm, root) {
  1040. return global$2.DOM.getPos(elm, root || funcs.getContainer());
  1041. },
  1042. getContainer: function () {
  1043. return global$1.container ? global$1.container : document.body;
  1044. },
  1045. getViewPort: function (win) {
  1046. return global$2.DOM.getViewPort(win);
  1047. },
  1048. get: function (id) {
  1049. return document.getElementById(id);
  1050. },
  1051. addClass: function (elm, cls) {
  1052. return global$2.DOM.addClass(elm, cls);
  1053. },
  1054. removeClass: function (elm, cls) {
  1055. return global$2.DOM.removeClass(elm, cls);
  1056. },
  1057. hasClass: function (elm, cls) {
  1058. return global$2.DOM.hasClass(elm, cls);
  1059. },
  1060. toggleClass: function (elm, cls, state) {
  1061. return global$2.DOM.toggleClass(elm, cls, state);
  1062. },
  1063. css: function (elm, name, value) {
  1064. return global$2.DOM.setStyle(elm, name, value);
  1065. },
  1066. getRuntimeStyle: function (elm, name) {
  1067. return global$2.DOM.getStyle(elm, name, true);
  1068. },
  1069. on: function (target, name, callback, scope) {
  1070. return global$2.DOM.bind(target, name, callback, scope);
  1071. },
  1072. off: function (target, name, callback) {
  1073. return global$2.DOM.unbind(target, name, callback);
  1074. },
  1075. fire: function (target, name, args) {
  1076. return global$2.DOM.fire(target, name, args);
  1077. },
  1078. innerHtml: function (elm, html) {
  1079. global$2.DOM.setHTML(elm, html);
  1080. }
  1081. };
  1082. var global$7 = tinymce.util.Tools.resolve('tinymce.dom.DomQuery');
  1083. var global$8 = tinymce.util.Tools.resolve('tinymce.util.Class');
  1084. var global$9 = tinymce.util.Tools.resolve('tinymce.util.EventDispatcher');
  1085. var $_889epm17vjh8lz7n9 = {
  1086. parseBox: function (value) {
  1087. var len;
  1088. var radix = 10;
  1089. if (!value) {
  1090. return;
  1091. }
  1092. if (typeof value === 'number') {
  1093. value = value || 0;
  1094. return {
  1095. top: value,
  1096. left: value,
  1097. bottom: value,
  1098. right: value
  1099. };
  1100. }
  1101. value = value.split(' ');
  1102. len = value.length;
  1103. if (len === 1) {
  1104. value[1] = value[2] = value[3] = value[0];
  1105. } else if (len === 2) {
  1106. value[2] = value[0];
  1107. value[3] = value[1];
  1108. } else if (len === 3) {
  1109. value[3] = value[1];
  1110. }
  1111. return {
  1112. top: parseInt(value[0], radix) || 0,
  1113. right: parseInt(value[1], radix) || 0,
  1114. bottom: parseInt(value[2], radix) || 0,
  1115. left: parseInt(value[3], radix) || 0
  1116. };
  1117. },
  1118. measureBox: function (elm, prefix) {
  1119. function getStyle(name) {
  1120. var defaultView = elm.ownerDocument.defaultView;
  1121. if (defaultView) {
  1122. var computedStyle = defaultView.getComputedStyle(elm, null);
  1123. if (computedStyle) {
  1124. name = name.replace(/[A-Z]/g, function (a) {
  1125. return '-' + a;
  1126. });
  1127. return computedStyle.getPropertyValue(name);
  1128. } else {
  1129. return null;
  1130. }
  1131. }
  1132. return elm.currentStyle[name];
  1133. }
  1134. function getSide(name) {
  1135. var val = parseFloat(getStyle(name));
  1136. return isNaN(val) ? 0 : val;
  1137. }
  1138. return {
  1139. top: getSide(prefix + 'TopWidth'),
  1140. right: getSide(prefix + 'RightWidth'),
  1141. bottom: getSide(prefix + 'BottomWidth'),
  1142. left: getSide(prefix + 'LeftWidth')
  1143. };
  1144. }
  1145. };
  1146. function noop$1() {
  1147. }
  1148. function ClassList(onchange) {
  1149. this.cls = [];
  1150. this.cls._map = {};
  1151. this.onchange = onchange || noop$1;
  1152. this.prefix = '';
  1153. }
  1154. global$4.extend(ClassList.prototype, {
  1155. add: function (cls) {
  1156. if (cls && !this.contains(cls)) {
  1157. this.cls._map[cls] = true;
  1158. this.cls.push(cls);
  1159. this._change();
  1160. }
  1161. return this;
  1162. },
  1163. remove: function (cls) {
  1164. if (this.contains(cls)) {
  1165. var i = void 0;
  1166. for (i = 0; i < this.cls.length; i++) {
  1167. if (this.cls[i] === cls) {
  1168. break;
  1169. }
  1170. }
  1171. this.cls.splice(i, 1);
  1172. delete this.cls._map[cls];
  1173. this._change();
  1174. }
  1175. return this;
  1176. },
  1177. toggle: function (cls, state) {
  1178. var curState = this.contains(cls);
  1179. if (curState !== state) {
  1180. if (curState) {
  1181. this.remove(cls);
  1182. } else {
  1183. this.add(cls);
  1184. }
  1185. this._change();
  1186. }
  1187. return this;
  1188. },
  1189. contains: function (cls) {
  1190. return !!this.cls._map[cls];
  1191. },
  1192. _change: function () {
  1193. delete this.clsValue;
  1194. this.onchange.call(this);
  1195. }
  1196. });
  1197. ClassList.prototype.toString = function () {
  1198. var value;
  1199. if (this.clsValue) {
  1200. return this.clsValue;
  1201. }
  1202. value = '';
  1203. for (var i = 0; i < this.cls.length; i++) {
  1204. if (i > 0) {
  1205. value += ' ';
  1206. }
  1207. value += this.prefix + this.cls[i];
  1208. }
  1209. return value;
  1210. };
  1211. function unique(array) {
  1212. var uniqueItems = [];
  1213. var i = array.length, item;
  1214. while (i--) {
  1215. item = array[i];
  1216. if (!item.__checked) {
  1217. uniqueItems.push(item);
  1218. item.__checked = 1;
  1219. }
  1220. }
  1221. i = uniqueItems.length;
  1222. while (i--) {
  1223. delete uniqueItems[i].__checked;
  1224. }
  1225. return uniqueItems;
  1226. }
  1227. var expression = /^([\w\\*]+)?(?:#([\w\-\\]+))?(?:\.([\w\\\.]+))?(?:\[\@?([\w\\]+)([\^\$\*!~]?=)([\w\\]+)\])?(?:\:(.+))?/i;
  1228. var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g;
  1229. var whiteSpace = /^\s*|\s*$/g;
  1230. var Collection;
  1231. var Selector = global$8.extend({
  1232. init: function (selector) {
  1233. var match = this.match;
  1234. function compileNameFilter(name) {
  1235. if (name) {
  1236. name = name.toLowerCase();
  1237. return function (item) {
  1238. return name === '*' || item.type === name;
  1239. };
  1240. }
  1241. }
  1242. function compileIdFilter(id) {
  1243. if (id) {
  1244. return function (item) {
  1245. return item._name === id;
  1246. };
  1247. }
  1248. }
  1249. function compileClassesFilter(classes) {
  1250. if (classes) {
  1251. classes = classes.split('.');
  1252. return function (item) {
  1253. var i = classes.length;
  1254. while (i--) {
  1255. if (!item.classes.contains(classes[i])) {
  1256. return false;
  1257. }
  1258. }
  1259. return true;
  1260. };
  1261. }
  1262. }
  1263. function compileAttrFilter(name, cmp, check) {
  1264. if (name) {
  1265. return function (item) {
  1266. var value = item[name] ? item[name]() : '';
  1267. 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;
  1268. };
  1269. }
  1270. }
  1271. function compilePsuedoFilter(name) {
  1272. var notSelectors;
  1273. if (name) {
  1274. name = /(?:not\((.+)\))|(.+)/i.exec(name);
  1275. if (!name[1]) {
  1276. name = name[2];
  1277. return function (item, index, length) {
  1278. 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;
  1279. };
  1280. }
  1281. notSelectors = parseChunks(name[1], []);
  1282. return function (item) {
  1283. return !match(item, notSelectors);
  1284. };
  1285. }
  1286. }
  1287. function compile(selector, filters, direct) {
  1288. var parts;
  1289. function add(filter) {
  1290. if (filter) {
  1291. filters.push(filter);
  1292. }
  1293. }
  1294. parts = expression.exec(selector.replace(whiteSpace, ''));
  1295. add(compileNameFilter(parts[1]));
  1296. add(compileIdFilter(parts[2]));
  1297. add(compileClassesFilter(parts[3]));
  1298. add(compileAttrFilter(parts[4], parts[5], parts[6]));
  1299. add(compilePsuedoFilter(parts[7]));
  1300. filters.pseudo = !!parts[7];
  1301. filters.direct = direct;
  1302. return filters;
  1303. }
  1304. function parseChunks(selector, selectors) {
  1305. var parts = [];
  1306. var extra, matches, i;
  1307. do {
  1308. chunker.exec('');
  1309. matches = chunker.exec(selector);
  1310. if (matches) {
  1311. selector = matches[3];
  1312. parts.push(matches[1]);
  1313. if (matches[2]) {
  1314. extra = matches[3];
  1315. break;
  1316. }
  1317. }
  1318. } while (matches);
  1319. if (extra) {
  1320. parseChunks(extra, selectors);
  1321. }
  1322. selector = [];
  1323. for (i = 0; i < parts.length; i++) {
  1324. if (parts[i] !== '>') {
  1325. selector.push(compile(parts[i], [], parts[i - 1] === '>'));
  1326. }
  1327. }
  1328. selectors.push(selector);
  1329. return selectors;
  1330. }
  1331. this._selectors = parseChunks(selector, []);
  1332. },
  1333. match: function (control, selectors) {
  1334. var i, l, si, sl, selector, fi, fl, filters, index, length, siblings, count, item;
  1335. selectors = selectors || this._selectors;
  1336. for (i = 0, l = selectors.length; i < l; i++) {
  1337. selector = selectors[i];
  1338. sl = selector.length;
  1339. item = control;
  1340. count = 0;
  1341. for (si = sl - 1; si >= 0; si--) {
  1342. filters = selector[si];
  1343. while (item) {
  1344. if (filters.pseudo) {
  1345. siblings = item.parent().items();
  1346. index = length = siblings.length;
  1347. while (index--) {
  1348. if (siblings[index] === item) {
  1349. break;
  1350. }
  1351. }
  1352. }
  1353. for (fi = 0, fl = filters.length; fi < fl; fi++) {
  1354. if (!filters[fi](item, index, length)) {
  1355. fi = fl + 1;
  1356. break;
  1357. }
  1358. }
  1359. if (fi === fl) {
  1360. count++;
  1361. break;
  1362. } else {
  1363. if (si === sl - 1) {
  1364. break;
  1365. }
  1366. }
  1367. item = item.parent();
  1368. }
  1369. }
  1370. if (count === sl) {
  1371. return true;
  1372. }
  1373. }
  1374. return false;
  1375. },
  1376. find: function (container) {
  1377. var matches = [], i, l;
  1378. var selectors = this._selectors;
  1379. function collect(items, selector, index) {
  1380. var i, l, fi, fl, item;
  1381. var filters = selector[index];
  1382. for (i = 0, l = items.length; i < l; i++) {
  1383. item = items[i];
  1384. for (fi = 0, fl = filters.length; fi < fl; fi++) {
  1385. if (!filters[fi](item, i, l)) {
  1386. fi = fl + 1;
  1387. break;
  1388. }
  1389. }
  1390. if (fi === fl) {
  1391. if (index === selector.length - 1) {
  1392. matches.push(item);
  1393. } else {
  1394. if (item.items) {
  1395. collect(item.items(), selector, index + 1);
  1396. }
  1397. }
  1398. } else if (filters.direct) {
  1399. return;
  1400. }
  1401. if (item.items) {
  1402. collect(item.items(), selector, index);
  1403. }
  1404. }
  1405. }
  1406. if (container.items) {
  1407. for (i = 0, l = selectors.length; i < l; i++) {
  1408. collect(container.items(), selectors[i], 0);
  1409. }
  1410. if (l > 1) {
  1411. matches = unique(matches);
  1412. }
  1413. }
  1414. if (!Collection) {
  1415. Collection = Selector.Collection;
  1416. }
  1417. return new Collection(matches);
  1418. }
  1419. });
  1420. var Collection$1;
  1421. var proto;
  1422. var push$1 = Array.prototype.push;
  1423. var slice$1 = Array.prototype.slice;
  1424. proto = {
  1425. length: 0,
  1426. init: function (items) {
  1427. if (items) {
  1428. this.add(items);
  1429. }
  1430. },
  1431. add: function (items) {
  1432. var self = this;
  1433. if (!global$4.isArray(items)) {
  1434. if (items instanceof Collection$1) {
  1435. self.add(items.toArray());
  1436. } else {
  1437. push$1.call(self, items);
  1438. }
  1439. } else {
  1440. push$1.apply(self, items);
  1441. }
  1442. return self;
  1443. },
  1444. set: function (items) {
  1445. var self = this;
  1446. var len = self.length;
  1447. var i;
  1448. self.length = 0;
  1449. self.add(items);
  1450. for (i = self.length; i < len; i++) {
  1451. delete self[i];
  1452. }
  1453. return self;
  1454. },
  1455. filter: function (selector) {
  1456. var self = this;
  1457. var i, l;
  1458. var matches = [];
  1459. var item, match;
  1460. if (typeof selector === 'string') {
  1461. selector = new Selector(selector);
  1462. match = function (item) {
  1463. return selector.match(item);
  1464. };
  1465. } else {
  1466. match = selector;
  1467. }
  1468. for (i = 0, l = self.length; i < l; i++) {
  1469. item = self[i];
  1470. if (match(item)) {
  1471. matches.push(item);
  1472. }
  1473. }
  1474. return new Collection$1(matches);
  1475. },
  1476. slice: function () {
  1477. return new Collection$1(slice$1.apply(this, arguments));
  1478. },
  1479. eq: function (index) {
  1480. return index === -1 ? this.slice(index) : this.slice(index, +index + 1);
  1481. },
  1482. each: function (callback) {
  1483. global$4.each(this, callback);
  1484. return this;
  1485. },
  1486. toArray: function () {
  1487. return global$4.toArray(this);
  1488. },
  1489. indexOf: function (ctrl) {
  1490. var self = this;
  1491. var i = self.length;
  1492. while (i--) {
  1493. if (self[i] === ctrl) {
  1494. break;
  1495. }
  1496. }
  1497. return i;
  1498. },
  1499. reverse: function () {
  1500. return new Collection$1(global$4.toArray(this).reverse());
  1501. },
  1502. hasClass: function (cls) {
  1503. return this[0] ? this[0].classes.contains(cls) : false;
  1504. },
  1505. prop: function (name, value) {
  1506. var self = this;
  1507. var item;
  1508. if (value !== undefined) {
  1509. self.each(function (item) {
  1510. if (item[name]) {
  1511. item[name](value);
  1512. }
  1513. });
  1514. return self;
  1515. }
  1516. item = self[0];
  1517. if (item && item[name]) {
  1518. return item[name]();
  1519. }
  1520. },
  1521. exec: function (name) {
  1522. var self = this, args = global$4.toArray(arguments).slice(1);
  1523. self.each(function (item) {
  1524. if (item[name]) {
  1525. item[name].apply(item, args);
  1526. }
  1527. });
  1528. return self;
  1529. },
  1530. remove: function () {
  1531. var i = this.length;
  1532. while (i--) {
  1533. this[i].remove();
  1534. }
  1535. return this;
  1536. },
  1537. addClass: function (cls) {
  1538. return this.each(function (item) {
  1539. item.classes.add(cls);
  1540. });
  1541. },
  1542. removeClass: function (cls) {
  1543. return this.each(function (item) {
  1544. item.classes.remove(cls);
  1545. });
  1546. }
  1547. };
  1548. global$4.each('fire on off show hide append prepend before after reflow'.split(' '), function (name) {
  1549. proto[name] = function () {
  1550. var args = global$4.toArray(arguments);
  1551. this.each(function (ctrl) {
  1552. if (name in ctrl) {
  1553. ctrl[name].apply(ctrl, args);
  1554. }
  1555. });
  1556. return this;
  1557. };
  1558. });
  1559. global$4.each('text name disabled active selected checked visible parent value data'.split(' '), function (name) {
  1560. proto[name] = function (value) {
  1561. return this.prop(name, value);
  1562. };
  1563. });
  1564. Collection$1 = global$8.extend(proto);
  1565. Selector.Collection = Collection$1;
  1566. var Collection$2 = Collection$1;
  1567. var Binding = function (settings) {
  1568. this.create = settings.create;
  1569. };
  1570. Binding.create = function (model, name) {
  1571. return new Binding({
  1572. create: function (otherModel, otherName) {
  1573. var bindings;
  1574. var fromSelfToOther = function (e) {
  1575. otherModel.set(otherName, e.value);
  1576. };
  1577. var fromOtherToSelf = function (e) {
  1578. model.set(name, e.value);
  1579. };
  1580. otherModel.on('change:' + otherName, fromOtherToSelf);
  1581. model.on('change:' + name, fromSelfToOther);
  1582. bindings = otherModel._bindings;
  1583. if (!bindings) {
  1584. bindings = otherModel._bindings = [];
  1585. otherModel.on('destroy', function () {
  1586. var i = bindings.length;
  1587. while (i--) {
  1588. bindings[i]();
  1589. }
  1590. });
  1591. }
  1592. bindings.push(function () {
  1593. model.off('change:' + name, fromSelfToOther);
  1594. });
  1595. return model.get(name);
  1596. }
  1597. });
  1598. };
  1599. var global$10 = tinymce.util.Tools.resolve('tinymce.util.Observable');
  1600. function isNode(node) {
  1601. return node.nodeType > 0;
  1602. }
  1603. function isEqual(a, b) {
  1604. var k, checked;
  1605. if (a === b) {
  1606. return true;
  1607. }
  1608. if (a === null || b === null) {
  1609. return a === b;
  1610. }
  1611. if (typeof a !== 'object' || typeof b !== 'object') {
  1612. return a === b;
  1613. }
  1614. if (global$4.isArray(b)) {
  1615. if (a.length !== b.length) {
  1616. return false;
  1617. }
  1618. k = a.length;
  1619. while (k--) {
  1620. if (!isEqual(a[k], b[k])) {
  1621. return false;
  1622. }
  1623. }
  1624. }
  1625. if (isNode(a) || isNode(b)) {
  1626. return a === b;
  1627. }
  1628. checked = {};
  1629. for (k in b) {
  1630. if (!isEqual(a[k], b[k])) {
  1631. return false;
  1632. }
  1633. checked[k] = true;
  1634. }
  1635. for (k in a) {
  1636. if (!checked[k] && !isEqual(a[k], b[k])) {
  1637. return false;
  1638. }
  1639. }
  1640. return true;
  1641. }
  1642. var ObservableObject = global$8.extend({
  1643. Mixins: [global$10],
  1644. init: function (data) {
  1645. var name, value;
  1646. data = data || {};
  1647. for (name in data) {
  1648. value = data[name];
  1649. if (value instanceof Binding) {
  1650. data[name] = value.create(this, name);
  1651. }
  1652. }
  1653. this.data = data;
  1654. },
  1655. set: function (name, value) {
  1656. var key, args;
  1657. var oldValue = this.data[name];
  1658. if (value instanceof Binding) {
  1659. value = value.create(this, name);
  1660. }
  1661. if (typeof name === 'object') {
  1662. for (key in name) {
  1663. this.set(key, name[key]);
  1664. }
  1665. return this;
  1666. }
  1667. if (!isEqual(oldValue, value)) {
  1668. this.data[name] = value;
  1669. args = {
  1670. target: this,
  1671. name: name,
  1672. value: value,
  1673. oldValue: oldValue
  1674. };
  1675. this.fire('change:' + name, args);
  1676. this.fire('change', args);
  1677. }
  1678. return this;
  1679. },
  1680. get: function (name) {
  1681. return this.data[name];
  1682. },
  1683. has: function (name) {
  1684. return name in this.data;
  1685. },
  1686. bind: function (name) {
  1687. return Binding.create(this, name);
  1688. },
  1689. destroy: function () {
  1690. this.fire('destroy');
  1691. }
  1692. });
  1693. var dirtyCtrls = {};
  1694. var animationFrameRequested;
  1695. var $_dipgfl182jh8lz7nt = {
  1696. add: function (ctrl) {
  1697. var parent = ctrl.parent();
  1698. if (parent) {
  1699. if (!parent._layout || parent._layout.isNative()) {
  1700. return;
  1701. }
  1702. if (!dirtyCtrls[parent._id]) {
  1703. dirtyCtrls[parent._id] = parent;
  1704. }
  1705. if (!animationFrameRequested) {
  1706. animationFrameRequested = true;
  1707. global$3.requestAnimationFrame(function () {
  1708. var id, ctrl;
  1709. animationFrameRequested = false;
  1710. for (id in dirtyCtrls) {
  1711. ctrl = dirtyCtrls[id];
  1712. if (ctrl.state.get('rendered')) {
  1713. ctrl.reflow();
  1714. }
  1715. }
  1716. dirtyCtrls = {};
  1717. }, document.body);
  1718. }
  1719. }
  1720. },
  1721. remove: function (ctrl) {
  1722. if (dirtyCtrls[ctrl._id]) {
  1723. delete dirtyCtrls[ctrl._id];
  1724. }
  1725. }
  1726. };
  1727. var getUiContainerDelta = function (ctrl) {
  1728. var uiContainer = getUiContainer(ctrl);
  1729. if (uiContainer && global$2.DOM.getStyle(uiContainer, 'position', true) !== 'static') {
  1730. var containerPos = global$2.DOM.getPos(uiContainer);
  1731. var dx = uiContainer.scrollLeft - containerPos.x;
  1732. var dy = uiContainer.scrollTop - containerPos.y;
  1733. return Option.some({
  1734. x: dx,
  1735. y: dy
  1736. });
  1737. } else {
  1738. return Option.none();
  1739. }
  1740. };
  1741. var setUiContainer = function (editor, ctrl) {
  1742. var uiContainer = global$2.DOM.select(editor.settings.ui_container)[0];
  1743. ctrl.getRoot().uiContainer = uiContainer;
  1744. };
  1745. var getUiContainer = function (ctrl) {
  1746. return ctrl ? ctrl.getRoot().uiContainer : null;
  1747. };
  1748. var inheritUiContainer = function (fromCtrl, toCtrl) {
  1749. return toCtrl.uiContainer = getUiContainer(fromCtrl);
  1750. };
  1751. var $_exab1j183jh8lz7nu = {
  1752. getUiContainerDelta: getUiContainerDelta,
  1753. setUiContainer: setUiContainer,
  1754. getUiContainer: getUiContainer,
  1755. inheritUiContainer: inheritUiContainer
  1756. };
  1757. var hasMouseWheelEventSupport = 'onmousewheel' in document;
  1758. var hasWheelEventSupport = false;
  1759. var classPrefix = 'mce-';
  1760. var Control;
  1761. var idCounter = 0;
  1762. var proto$1 = {
  1763. Statics: { classPrefix: classPrefix },
  1764. isRtl: function () {
  1765. return Control.rtl;
  1766. },
  1767. classPrefix: classPrefix,
  1768. init: function (settings) {
  1769. var self = this;
  1770. var classes, defaultClasses;
  1771. function applyClasses(classes) {
  1772. var i;
  1773. classes = classes.split(' ');
  1774. for (i = 0; i < classes.length; i++) {
  1775. self.classes.add(classes[i]);
  1776. }
  1777. }
  1778. self.settings = settings = global$4.extend({}, self.Defaults, settings);
  1779. self._id = settings.id || 'mceu_' + idCounter++;
  1780. self._aria = { role: settings.role };
  1781. self._elmCache = {};
  1782. self.$ = global$7;
  1783. self.state = new ObservableObject({
  1784. visible: true,
  1785. active: false,
  1786. disabled: false,
  1787. value: ''
  1788. });
  1789. self.data = new ObservableObject(settings.data);
  1790. self.classes = new ClassList(function () {
  1791. if (self.state.get('rendered')) {
  1792. self.getEl().className = this.toString();
  1793. }
  1794. });
  1795. self.classes.prefix = self.classPrefix;
  1796. classes = settings.classes;
  1797. if (classes) {
  1798. if (self.Defaults) {
  1799. defaultClasses = self.Defaults.classes;
  1800. if (defaultClasses && classes !== defaultClasses) {
  1801. applyClasses(defaultClasses);
  1802. }
  1803. }
  1804. applyClasses(classes);
  1805. }
  1806. global$4.each('title text name visible disabled active value'.split(' '), function (name) {
  1807. if (name in settings) {
  1808. self[name](settings[name]);
  1809. }
  1810. });
  1811. self.on('click', function () {
  1812. if (self.disabled()) {
  1813. return false;
  1814. }
  1815. });
  1816. self.settings = settings;
  1817. self.borderBox = $_889epm17vjh8lz7n9.parseBox(settings.border);
  1818. self.paddingBox = $_889epm17vjh8lz7n9.parseBox(settings.padding);
  1819. self.marginBox = $_889epm17vjh8lz7n9.parseBox(settings.margin);
  1820. if (settings.hidden) {
  1821. self.hide();
  1822. }
  1823. },
  1824. Properties: 'parent,name',
  1825. getContainerElm: function () {
  1826. var uiContainer = $_exab1j183jh8lz7nu.getUiContainer(this);
  1827. return uiContainer ? uiContainer : funcs.getContainer();
  1828. },
  1829. getParentCtrl: function (elm) {
  1830. var ctrl;
  1831. var lookup = this.getRoot().controlIdLookup;
  1832. while (elm && lookup) {
  1833. ctrl = lookup[elm.id];
  1834. if (ctrl) {
  1835. break;
  1836. }
  1837. elm = elm.parentNode;
  1838. }
  1839. return ctrl;
  1840. },
  1841. initLayoutRect: function () {
  1842. var self = this;
  1843. var settings = self.settings;
  1844. var borderBox, layoutRect;
  1845. var elm = self.getEl();
  1846. var width, height, minWidth, minHeight, autoResize;
  1847. var startMinWidth, startMinHeight, initialSize;
  1848. borderBox = self.borderBox = self.borderBox || $_889epm17vjh8lz7n9.measureBox(elm, 'border');
  1849. self.paddingBox = self.paddingBox || $_889epm17vjh8lz7n9.measureBox(elm, 'padding');
  1850. self.marginBox = self.marginBox || $_889epm17vjh8lz7n9.measureBox(elm, 'margin');
  1851. initialSize = funcs.getSize(elm);
  1852. startMinWidth = settings.minWidth;
  1853. startMinHeight = settings.minHeight;
  1854. minWidth = startMinWidth || initialSize.width;
  1855. minHeight = startMinHeight || initialSize.height;
  1856. width = settings.width;
  1857. height = settings.height;
  1858. autoResize = settings.autoResize;
  1859. autoResize = typeof autoResize !== 'undefined' ? autoResize : !width && !height;
  1860. width = width || minWidth;
  1861. height = height || minHeight;
  1862. var deltaW = borderBox.left + borderBox.right;
  1863. var deltaH = borderBox.top + borderBox.bottom;
  1864. var maxW = settings.maxWidth || 65535;
  1865. var maxH = settings.maxHeight || 65535;
  1866. self._layoutRect = layoutRect = {
  1867. x: settings.x || 0,
  1868. y: settings.y || 0,
  1869. w: width,
  1870. h: height,
  1871. deltaW: deltaW,
  1872. deltaH: deltaH,
  1873. contentW: width - deltaW,
  1874. contentH: height - deltaH,
  1875. innerW: width - deltaW,
  1876. innerH: height - deltaH,
  1877. startMinWidth: startMinWidth || 0,
  1878. startMinHeight: startMinHeight || 0,
  1879. minW: Math.min(minWidth, maxW),
  1880. minH: Math.min(minHeight, maxH),
  1881. maxW: maxW,
  1882. maxH: maxH,
  1883. autoResize: autoResize,
  1884. scrollW: 0
  1885. };
  1886. self._lastLayoutRect = {};
  1887. return layoutRect;
  1888. },
  1889. layoutRect: function (newRect) {
  1890. var self = this;
  1891. var curRect = self._layoutRect, lastLayoutRect, size, deltaWidth, deltaHeight, repaintControls;
  1892. if (!curRect) {
  1893. curRect = self.initLayoutRect();
  1894. }
  1895. if (newRect) {
  1896. deltaWidth = curRect.deltaW;
  1897. deltaHeight = curRect.deltaH;
  1898. if (newRect.x !== undefined) {
  1899. curRect.x = newRect.x;
  1900. }
  1901. if (newRect.y !== undefined) {
  1902. curRect.y = newRect.y;
  1903. }
  1904. if (newRect.minW !== undefined) {
  1905. curRect.minW = newRect.minW;
  1906. }
  1907. if (newRect.minH !== undefined) {
  1908. curRect.minH = newRect.minH;
  1909. }
  1910. size = newRect.w;
  1911. if (size !== undefined) {
  1912. size = size < curRect.minW ? curRect.minW : size;
  1913. size = size > curRect.maxW ? curRect.maxW : size;
  1914. curRect.w = size;
  1915. curRect.innerW = size - deltaWidth;
  1916. }
  1917. size = newRect.h;
  1918. if (size !== undefined) {
  1919. size = size < curRect.minH ? curRect.minH : size;
  1920. size = size > curRect.maxH ? curRect.maxH : size;
  1921. curRect.h = size;
  1922. curRect.innerH = size - deltaHeight;
  1923. }
  1924. size = newRect.innerW;
  1925. if (size !== undefined) {
  1926. size = size < curRect.minW - deltaWidth ? curRect.minW - deltaWidth : size;
  1927. size = size > curRect.maxW - deltaWidth ? curRect.maxW - deltaWidth : size;
  1928. curRect.innerW = size;
  1929. curRect.w = size + deltaWidth;
  1930. }
  1931. size = newRect.innerH;
  1932. if (size !== undefined) {
  1933. size = size < curRect.minH - deltaHeight ? curRect.minH - deltaHeight : size;
  1934. size = size > curRect.maxH - deltaHeight ? curRect.maxH - deltaHeight : size;
  1935. curRect.innerH = size;
  1936. curRect.h = size + deltaHeight;
  1937. }
  1938. if (newRect.contentW !== undefined) {
  1939. curRect.contentW = newRect.contentW;
  1940. }
  1941. if (newRect.contentH !== undefined) {
  1942. curRect.contentH = newRect.contentH;
  1943. }
  1944. lastLayoutRect = self._lastLayoutRect;
  1945. if (lastLayoutRect.x !== curRect.x || lastLayoutRect.y !== curRect.y || lastLayoutRect.w !== curRect.w || lastLayoutRect.h !== curRect.h) {
  1946. repaintControls = Control.repaintControls;
  1947. if (repaintControls) {
  1948. if (repaintControls.map && !repaintControls.map[self._id]) {
  1949. repaintControls.push(self);
  1950. repaintControls.map[self._id] = true;
  1951. }
  1952. }
  1953. lastLayoutRect.x = curRect.x;
  1954. lastLayoutRect.y = curRect.y;
  1955. lastLayoutRect.w = curRect.w;
  1956. lastLayoutRect.h = curRect.h;
  1957. }
  1958. return self;
  1959. }
  1960. return curRect;
  1961. },
  1962. repaint: function () {
  1963. var self = this;
  1964. var style, bodyStyle, bodyElm, rect, borderBox;
  1965. var borderW, borderH, lastRepaintRect, round, value;
  1966. round = !document.createRange ? Math.round : function (value) {
  1967. return value;
  1968. };
  1969. style = self.getEl().style;
  1970. rect = self._layoutRect;
  1971. lastRepaintRect = self._lastRepaintRect || {};
  1972. borderBox = self.borderBox;
  1973. borderW = borderBox.left + borderBox.right;
  1974. borderH = borderBox.top + borderBox.bottom;
  1975. if (rect.x !== lastRepaintRect.x) {
  1976. style.left = round(rect.x) + 'px';
  1977. lastRepaintRect.x = rect.x;
  1978. }
  1979. if (rect.y !== lastRepaintRect.y) {
  1980. style.top = round(rect.y) + 'px';
  1981. lastRepaintRect.y = rect.y;
  1982. }
  1983. if (rect.w !== lastRepaintRect.w) {
  1984. value = round(rect.w - borderW);
  1985. style.width = (value >= 0 ? value : 0) + 'px';
  1986. lastRepaintRect.w = rect.w;
  1987. }
  1988. if (rect.h !== lastRepaintRect.h) {
  1989. value = round(rect.h - borderH);
  1990. style.height = (value >= 0 ? value : 0) + 'px';
  1991. lastRepaintRect.h = rect.h;
  1992. }
  1993. if (self._hasBody && rect.innerW !== lastRepaintRect.innerW) {
  1994. value = round(rect.innerW);
  1995. bodyElm = self.getEl('body');
  1996. if (bodyElm) {
  1997. bodyStyle = bodyElm.style;
  1998. bodyStyle.width = (value >= 0 ? value : 0) + 'px';
  1999. }
  2000. lastRepaintRect.innerW = rect.innerW;
  2001. }
  2002. if (self._hasBody && rect.innerH !== lastRepaintRect.innerH) {
  2003. value = round(rect.innerH);
  2004. bodyElm = bodyElm || self.getEl('body');
  2005. if (bodyElm) {
  2006. bodyStyle = bodyStyle || bodyElm.style;
  2007. bodyStyle.height = (value >= 0 ? value : 0) + 'px';
  2008. }
  2009. lastRepaintRect.innerH = rect.innerH;
  2010. }
  2011. self._lastRepaintRect = lastRepaintRect;
  2012. self.fire('repaint', {}, false);
  2013. },
  2014. updateLayoutRect: function () {
  2015. var self = this;
  2016. self.parent()._lastRect = null;
  2017. funcs.css(self.getEl(), {
  2018. width: '',
  2019. height: ''
  2020. });
  2021. self._layoutRect = self._lastRepaintRect = self._lastLayoutRect = null;
  2022. self.initLayoutRect();
  2023. },
  2024. on: function (name, callback) {
  2025. var self = this;
  2026. function resolveCallbackName(name) {
  2027. var callback, scope;
  2028. if (typeof name !== 'string') {
  2029. return name;
  2030. }
  2031. return function (e) {
  2032. if (!callback) {
  2033. self.parentsAndSelf().each(function (ctrl) {
  2034. var callbacks = ctrl.settings.callbacks;
  2035. if (callbacks && (callback = callbacks[name])) {
  2036. scope = ctrl;
  2037. return false;
  2038. }
  2039. });
  2040. }
  2041. if (!callback) {
  2042. e.action = name;
  2043. this.fire('execute', e);
  2044. return;
  2045. }
  2046. return callback.call(scope, e);
  2047. };
  2048. }
  2049. getEventDispatcher(self).on(name, resolveCallbackName(callback));
  2050. return self;
  2051. },
  2052. off: function (name, callback) {
  2053. getEventDispatcher(this).off(name, callback);
  2054. return this;
  2055. },
  2056. fire: function (name, args, bubble) {
  2057. var self = this;
  2058. args = args || {};
  2059. if (!args.control) {
  2060. args.control = self;
  2061. }
  2062. args = getEventDispatcher(self).fire(name, args);
  2063. if (bubble !== false && self.parent) {
  2064. var parent_1 = self.parent();
  2065. while (parent_1 && !args.isPropagationStopped()) {
  2066. parent_1.fire(name, args, false);
  2067. parent_1 = parent_1.parent();
  2068. }
  2069. }
  2070. return args;
  2071. },
  2072. hasEventListeners: function (name) {
  2073. return getEventDispatcher(this).has(name);
  2074. },
  2075. parents: function (selector) {
  2076. var self = this;
  2077. var ctrl, parents = new Collection$2();
  2078. for (ctrl = self.parent(); ctrl; ctrl = ctrl.parent()) {
  2079. parents.add(ctrl);
  2080. }
  2081. if (selector) {
  2082. parents = parents.filter(selector);
  2083. }
  2084. return parents;
  2085. },
  2086. parentsAndSelf: function (selector) {
  2087. return new Collection$2(this).add(this.parents(selector));
  2088. },
  2089. next: function () {
  2090. var parentControls = this.parent().items();
  2091. return parentControls[parentControls.indexOf(this) + 1];
  2092. },
  2093. prev: function () {
  2094. var parentControls = this.parent().items();
  2095. return parentControls[parentControls.indexOf(this) - 1];
  2096. },
  2097. innerHtml: function (html) {
  2098. this.$el.html(html);
  2099. return this;
  2100. },
  2101. getEl: function (suffix) {
  2102. var id = suffix ? this._id + '-' + suffix : this._id;
  2103. if (!this._elmCache[id]) {
  2104. this._elmCache[id] = global$7('#' + id)[0];
  2105. }
  2106. return this._elmCache[id];
  2107. },
  2108. show: function () {
  2109. return this.visible(true);
  2110. },
  2111. hide: function () {
  2112. return this.visible(false);
  2113. },
  2114. focus: function () {
  2115. try {
  2116. this.getEl().focus();
  2117. } catch (ex) {
  2118. }
  2119. return this;
  2120. },
  2121. blur: function () {
  2122. this.getEl().blur();
  2123. return this;
  2124. },
  2125. aria: function (name, value) {
  2126. var self = this, elm = self.getEl(self.ariaTarget);
  2127. if (typeof value === 'undefined') {
  2128. return self._aria[name];
  2129. }
  2130. self._aria[name] = value;
  2131. if (self.state.get('rendered')) {
  2132. elm.setAttribute(name === 'role' ? name : 'aria-' + name, value);
  2133. }
  2134. return self;
  2135. },
  2136. encode: function (text, translate) {
  2137. if (translate !== false) {
  2138. text = this.translate(text);
  2139. }
  2140. return (text || '').replace(/[&<>"]/g, function (match) {
  2141. return '&#' + match.charCodeAt(0) + ';';
  2142. });
  2143. },
  2144. translate: function (text) {
  2145. return Control.translate ? Control.translate(text) : text;
  2146. },
  2147. before: function (items) {
  2148. var self = this, parent = self.parent();
  2149. if (parent) {
  2150. parent.insert(items, parent.items().indexOf(self), true);
  2151. }
  2152. return self;
  2153. },
  2154. after: function (items) {
  2155. var self = this, parent = self.parent();
  2156. if (parent) {
  2157. parent.insert(items, parent.items().indexOf(self));
  2158. }
  2159. return self;
  2160. },
  2161. remove: function () {
  2162. var self = this;
  2163. var elm = self.getEl();
  2164. var parent = self.parent();
  2165. var newItems, i;
  2166. if (self.items) {
  2167. var controls = self.items().toArray();
  2168. i = controls.length;
  2169. while (i--) {
  2170. controls[i].remove();
  2171. }
  2172. }
  2173. if (parent && parent.items) {
  2174. newItems = [];
  2175. parent.items().each(function (item) {
  2176. if (item !== self) {
  2177. newItems.push(item);
  2178. }
  2179. });
  2180. parent.items().set(newItems);
  2181. parent._lastRect = null;
  2182. }
  2183. if (self._eventsRoot && self._eventsRoot === self) {
  2184. global$7(elm).off();
  2185. }
  2186. var lookup = self.getRoot().controlIdLookup;
  2187. if (lookup) {
  2188. delete lookup[self._id];
  2189. }
  2190. if (elm && elm.parentNode) {
  2191. elm.parentNode.removeChild(elm);
  2192. }
  2193. self.state.set('rendered', false);
  2194. self.state.destroy();
  2195. self.fire('remove');
  2196. return self;
  2197. },
  2198. renderBefore: function (elm) {
  2199. global$7(elm).before(this.renderHtml());
  2200. this.postRender();
  2201. return this;
  2202. },
  2203. renderTo: function (elm) {
  2204. global$7(elm || this.getContainerElm()).append(this.renderHtml());
  2205. this.postRender();
  2206. return this;
  2207. },
  2208. preRender: function () {
  2209. },
  2210. render: function () {
  2211. },
  2212. renderHtml: function () {
  2213. return '<div id="' + this._id + '" class="' + this.classes + '"></div>';
  2214. },
  2215. postRender: function () {
  2216. var self = this;
  2217. var settings = self.settings;
  2218. var elm, box, parent, name, parentEventsRoot;
  2219. self.$el = global$7(self.getEl());
  2220. self.state.set('rendered', true);
  2221. for (name in settings) {
  2222. if (name.indexOf('on') === 0) {
  2223. self.on(name.substr(2), settings[name]);
  2224. }
  2225. }
  2226. if (self._eventsRoot) {
  2227. for (parent = self.parent(); !parentEventsRoot && parent; parent = parent.parent()) {
  2228. parentEventsRoot = parent._eventsRoot;
  2229. }
  2230. if (parentEventsRoot) {
  2231. for (name in parentEventsRoot._nativeEvents) {
  2232. self._nativeEvents[name] = true;
  2233. }
  2234. }
  2235. }
  2236. bindPendingEvents(self);
  2237. if (settings.style) {
  2238. elm = self.getEl();
  2239. if (elm) {
  2240. elm.setAttribute('style', settings.style);
  2241. elm.style.cssText = settings.style;
  2242. }
  2243. }
  2244. if (self.settings.border) {
  2245. box = self.borderBox;
  2246. self.$el.css({
  2247. 'border-top-width': box.top,
  2248. 'border-right-width': box.right,
  2249. 'border-bottom-width': box.bottom,
  2250. 'border-left-width': box.left
  2251. });
  2252. }
  2253. var root = self.getRoot();
  2254. if (!root.controlIdLookup) {
  2255. root.controlIdLookup = {};
  2256. }
  2257. root.controlIdLookup[self._id] = self;
  2258. for (var key in self._aria) {
  2259. self.aria(key, self._aria[key]);
  2260. }
  2261. if (self.state.get('visible') === false) {
  2262. self.getEl().style.display = 'none';
  2263. }
  2264. self.bindStates();
  2265. self.state.on('change:visible', function (e) {
  2266. var state = e.value;
  2267. var parentCtrl;
  2268. if (self.state.get('rendered')) {
  2269. self.getEl().style.display = state === false ? 'none' : '';
  2270. self.getEl().getBoundingClientRect();
  2271. }
  2272. parentCtrl = self.parent();
  2273. if (parentCtrl) {
  2274. parentCtrl._lastRect = null;
  2275. }
  2276. self.fire(state ? 'show' : 'hide');
  2277. $_dipgfl182jh8lz7nt.add(self);
  2278. });
  2279. self.fire('postrender', {}, false);
  2280. },
  2281. bindStates: function () {
  2282. },
  2283. scrollIntoView: function (align) {
  2284. function getOffset(elm, rootElm) {
  2285. var x, y, parent = elm;
  2286. x = y = 0;
  2287. while (parent && parent !== rootElm && parent.nodeType) {
  2288. x += parent.offsetLeft || 0;
  2289. y += parent.offsetTop || 0;
  2290. parent = parent.offsetParent;
  2291. }
  2292. return {
  2293. x: x,
  2294. y: y
  2295. };
  2296. }
  2297. var elm = this.getEl(), parentElm = elm.parentNode;
  2298. var x, y, width, height, parentWidth, parentHeight;
  2299. var pos = getOffset(elm, parentElm);
  2300. x = pos.x;
  2301. y = pos.y;
  2302. width = elm.offsetWidth;
  2303. height = elm.offsetHeight;
  2304. parentWidth = parentElm.clientWidth;
  2305. parentHeight = parentElm.clientHeight;
  2306. if (align === 'end') {
  2307. x -= parentWidth - width;
  2308. y -= parentHeight - height;
  2309. } else if (align === 'center') {
  2310. x -= parentWidth / 2 - width / 2;
  2311. y -= parentHeight / 2 - height / 2;
  2312. }
  2313. parentElm.scrollLeft = x;
  2314. parentElm.scrollTop = y;
  2315. return this;
  2316. },
  2317. getRoot: function () {
  2318. var ctrl = this, rootControl;
  2319. var parents = [];
  2320. while (ctrl) {
  2321. if (ctrl.rootControl) {
  2322. rootControl = ctrl.rootControl;
  2323. break;
  2324. }
  2325. parents.push(ctrl);
  2326. rootControl = ctrl;
  2327. ctrl = ctrl.parent();
  2328. }
  2329. if (!rootControl) {
  2330. rootControl = this;
  2331. }
  2332. var i = parents.length;
  2333. while (i--) {
  2334. parents[i].rootControl = rootControl;
  2335. }
  2336. return rootControl;
  2337. },
  2338. reflow: function () {
  2339. $_dipgfl182jh8lz7nt.remove(this);
  2340. var parent = this.parent();
  2341. if (parent && parent._layout && !parent._layout.isNative()) {
  2342. parent.reflow();
  2343. }
  2344. return this;
  2345. }
  2346. };
  2347. global$4.each('text title visible disabled active value'.split(' '), function (name) {
  2348. proto$1[name] = function (value) {
  2349. if (arguments.length === 0) {
  2350. return this.state.get(name);
  2351. }
  2352. if (typeof value !== 'undefined') {
  2353. this.state.set(name, value);
  2354. }
  2355. return this;
  2356. };
  2357. });
  2358. Control = global$8.extend(proto$1);
  2359. function getEventDispatcher(obj) {
  2360. if (!obj._eventDispatcher) {
  2361. obj._eventDispatcher = new global$9({
  2362. scope: obj,
  2363. toggleEvent: function (name, state) {
  2364. if (state && global$9.isNative(name)) {
  2365. if (!obj._nativeEvents) {
  2366. obj._nativeEvents = {};
  2367. }
  2368. obj._nativeEvents[name] = true;
  2369. if (obj.state.get('rendered')) {
  2370. bindPendingEvents(obj);
  2371. }
  2372. }
  2373. }
  2374. });
  2375. }
  2376. return obj._eventDispatcher;
  2377. }
  2378. function bindPendingEvents(eventCtrl) {
  2379. var i, l, parents, eventRootCtrl, nativeEvents, name;
  2380. function delegate(e) {
  2381. var control = eventCtrl.getParentCtrl(e.target);
  2382. if (control) {
  2383. control.fire(e.type, e);
  2384. }
  2385. }
  2386. function mouseLeaveHandler() {
  2387. var ctrl = eventRootCtrl._lastHoverCtrl;
  2388. if (ctrl) {
  2389. ctrl.fire('mouseleave', { target: ctrl.getEl() });
  2390. ctrl.parents().each(function (ctrl) {
  2391. ctrl.fire('mouseleave', { target: ctrl.getEl() });
  2392. });
  2393. eventRootCtrl._lastHoverCtrl = null;
  2394. }
  2395. }
  2396. function mouseEnterHandler(e) {
  2397. var ctrl = eventCtrl.getParentCtrl(e.target), lastCtrl = eventRootCtrl._lastHoverCtrl, idx = 0, i, parents, lastParents;
  2398. if (ctrl !== lastCtrl) {
  2399. eventRootCtrl._lastHoverCtrl = ctrl;
  2400. parents = ctrl.parents().toArray().reverse();
  2401. parents.push(ctrl);
  2402. if (lastCtrl) {
  2403. lastParents = lastCtrl.parents().toArray().reverse();
  2404. lastParents.push(lastCtrl);
  2405. for (idx = 0; idx < lastParents.length; idx++) {
  2406. if (parents[idx] !== lastParents[idx]) {
  2407. break;
  2408. }
  2409. }
  2410. for (i = lastParents.length - 1; i >= idx; i--) {
  2411. lastCtrl = lastParents[i];
  2412. lastCtrl.fire('mouseleave', { target: lastCtrl.getEl() });
  2413. }
  2414. }
  2415. for (i = idx; i < parents.length; i++) {
  2416. ctrl = parents[i];
  2417. ctrl.fire('mouseenter', { target: ctrl.getEl() });
  2418. }
  2419. }
  2420. }
  2421. function fixWheelEvent(e) {
  2422. e.preventDefault();
  2423. if (e.type === 'mousewheel') {
  2424. e.deltaY = -1 / 40 * e.wheelDelta;
  2425. if (e.wheelDeltaX) {
  2426. e.deltaX = -1 / 40 * e.wheelDeltaX;
  2427. }
  2428. } else {
  2429. e.deltaX = 0;
  2430. e.deltaY = e.detail;
  2431. }
  2432. e = eventCtrl.fire('wheel', e);
  2433. }
  2434. nativeEvents = eventCtrl._nativeEvents;
  2435. if (nativeEvents) {
  2436. parents = eventCtrl.parents().toArray();
  2437. parents.unshift(eventCtrl);
  2438. for (i = 0, l = parents.length; !eventRootCtrl && i < l; i++) {
  2439. eventRootCtrl = parents[i]._eventsRoot;
  2440. }
  2441. if (!eventRootCtrl) {
  2442. eventRootCtrl = parents[parents.length - 1] || eventCtrl;
  2443. }
  2444. eventCtrl._eventsRoot = eventRootCtrl;
  2445. for (l = i, i = 0; i < l; i++) {
  2446. parents[i]._eventsRoot = eventRootCtrl;
  2447. }
  2448. var eventRootDelegates = eventRootCtrl._delegates;
  2449. if (!eventRootDelegates) {
  2450. eventRootDelegates = eventRootCtrl._delegates = {};
  2451. }
  2452. for (name in nativeEvents) {
  2453. if (!nativeEvents) {
  2454. return false;
  2455. }
  2456. if (name === 'wheel' && !hasWheelEventSupport) {
  2457. if (hasMouseWheelEventSupport) {
  2458. global$7(eventCtrl.getEl()).on('mousewheel', fixWheelEvent);
  2459. } else {
  2460. global$7(eventCtrl.getEl()).on('DOMMouseScroll', fixWheelEvent);
  2461. }
  2462. continue;
  2463. }
  2464. if (name === 'mouseenter' || name === 'mouseleave') {
  2465. if (!eventRootCtrl._hasMouseEnter) {
  2466. global$7(eventRootCtrl.getEl()).on('mouseleave', mouseLeaveHandler).on('mouseover', mouseEnterHandler);
  2467. eventRootCtrl._hasMouseEnter = 1;
  2468. }
  2469. } else if (!eventRootDelegates[name]) {
  2470. global$7(eventRootCtrl.getEl()).on(name, delegate);
  2471. eventRootDelegates[name] = true;
  2472. }
  2473. nativeEvents[name] = false;
  2474. }
  2475. }
  2476. }
  2477. var Control$1 = Control;
  2478. var isStatic = function (elm) {
  2479. return funcs.getRuntimeStyle(elm, 'position') === 'static';
  2480. };
  2481. var isFixed = function (ctrl) {
  2482. return ctrl.state.get('fixed');
  2483. };
  2484. function calculateRelativePosition(ctrl, targetElm, rel) {
  2485. var ctrlElm, pos, x, y, selfW, selfH, targetW, targetH, viewport, size;
  2486. viewport = getWindowViewPort();
  2487. pos = funcs.getPos(targetElm, $_exab1j183jh8lz7nu.getUiContainer(ctrl));
  2488. x = pos.x;
  2489. y = pos.y;
  2490. if (isFixed(ctrl) && isStatic(document.body)) {
  2491. x -= viewport.x;
  2492. y -= viewport.y;
  2493. }
  2494. ctrlElm = ctrl.getEl();
  2495. size = funcs.getSize(ctrlElm);
  2496. selfW = size.width;
  2497. selfH = size.height;
  2498. size = funcs.getSize(targetElm);
  2499. targetW = size.width;
  2500. targetH = size.height;
  2501. rel = (rel || '').split('');
  2502. if (rel[0] === 'b') {
  2503. y += targetH;
  2504. }
  2505. if (rel[1] === 'r') {
  2506. x += targetW;
  2507. }
  2508. if (rel[0] === 'c') {
  2509. y += Math.round(targetH / 2);
  2510. }
  2511. if (rel[1] === 'c') {
  2512. x += Math.round(targetW / 2);
  2513. }
  2514. if (rel[3] === 'b') {
  2515. y -= selfH;
  2516. }
  2517. if (rel[4] === 'r') {
  2518. x -= selfW;
  2519. }
  2520. if (rel[3] === 'c') {
  2521. y -= Math.round(selfH / 2);
  2522. }
  2523. if (rel[4] === 'c') {
  2524. x -= Math.round(selfW / 2);
  2525. }
  2526. return {
  2527. x: x,
  2528. y: y,
  2529. w: selfW,
  2530. h: selfH
  2531. };
  2532. }
  2533. var getUiContainerViewPort = function (customUiContainer) {
  2534. return {
  2535. x: 0,
  2536. y: 0,
  2537. w: customUiContainer.scrollWidth - 1,
  2538. h: customUiContainer.scrollHeight - 1
  2539. };
  2540. };
  2541. var getWindowViewPort = function () {
  2542. var win = window;
  2543. var x = Math.max(win.pageXOffset, document.body.scrollLeft, document.documentElement.scrollLeft);
  2544. var y = Math.max(win.pageYOffset, document.body.scrollTop, document.documentElement.scrollTop);
  2545. var w = win.innerWidth || document.documentElement.clientWidth;
  2546. var h = win.innerHeight || document.documentElement.clientHeight;
  2547. return {
  2548. x: x,
  2549. y: y,
  2550. w: x + w,
  2551. h: y + h
  2552. };
  2553. };
  2554. var getViewPortRect = function (ctrl) {
  2555. var customUiContainer = $_exab1j183jh8lz7nu.getUiContainer(ctrl);
  2556. return customUiContainer && !isFixed(ctrl) ? getUiContainerViewPort(customUiContainer) : getWindowViewPort();
  2557. };
  2558. var $_ben1dh184jh8lz7ny = {
  2559. testMoveRel: function (elm, rels) {
  2560. var viewPortRect = getViewPortRect(this);
  2561. for (var i = 0; i < rels.length; i++) {
  2562. var pos = calculateRelativePosition(this, elm, rels[i]);
  2563. if (isFixed(this)) {
  2564. if (pos.x > 0 && pos.x + pos.w < viewPortRect.w && pos.y > 0 && pos.y + pos.h < viewPortRect.h) {
  2565. return rels[i];
  2566. }
  2567. } else {
  2568. if (pos.x > viewPortRect.x && pos.x + pos.w < viewPortRect.w && pos.y > viewPortRect.y && pos.y + pos.h < viewPortRect.h) {
  2569. return rels[i];
  2570. }
  2571. }
  2572. }
  2573. return rels[0];
  2574. },
  2575. moveRel: function (elm, rel) {
  2576. if (typeof rel !== 'string') {
  2577. rel = this.testMoveRel(elm, rel);
  2578. }
  2579. var pos = calculateRelativePosition(this, elm, rel);
  2580. return this.moveTo(pos.x, pos.y);
  2581. },
  2582. moveBy: function (dx, dy) {
  2583. var self = this, rect = self.layoutRect();
  2584. self.moveTo(rect.x + dx, rect.y + dy);
  2585. return self;
  2586. },
  2587. moveTo: function (x, y) {
  2588. var self = this;
  2589. function constrain(value, max, size) {
  2590. if (value < 0) {
  2591. return 0;
  2592. }
  2593. if (value + size > max) {
  2594. value = max - size;
  2595. return value < 0 ? 0 : value;
  2596. }
  2597. return value;
  2598. }
  2599. if (self.settings.constrainToViewport) {
  2600. var viewPortRect = getViewPortRect(this);
  2601. var layoutRect = self.layoutRect();
  2602. x = constrain(x, viewPortRect.w, layoutRect.w);
  2603. y = constrain(y, viewPortRect.h, layoutRect.h);
  2604. }
  2605. var uiContainer = $_exab1j183jh8lz7nu.getUiContainer(self);
  2606. if (uiContainer && isStatic(uiContainer) && !isFixed(self)) {
  2607. x -= uiContainer.scrollLeft;
  2608. y -= uiContainer.scrollTop;
  2609. }
  2610. if (uiContainer) {
  2611. x += 1;
  2612. y += 1;
  2613. }
  2614. if (self.state.get('rendered')) {
  2615. self.layoutRect({
  2616. x: x,
  2617. y: y
  2618. }).repaint();
  2619. } else {
  2620. self.settings.x = x;
  2621. self.settings.y = y;
  2622. }
  2623. self.fire('move', {
  2624. x: x,
  2625. y: y
  2626. });
  2627. return self;
  2628. }
  2629. };
  2630. var Tooltip = Control$1.extend({
  2631. Mixins: [$_ben1dh184jh8lz7ny],
  2632. Defaults: { classes: 'widget tooltip tooltip-n' },
  2633. renderHtml: function () {
  2634. var self = this, prefix = self.classPrefix;
  2635. 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>';
  2636. },
  2637. bindStates: function () {
  2638. var self = this;
  2639. self.state.on('change:text', function (e) {
  2640. self.getEl().lastChild.innerHTML = self.encode(e.value);
  2641. });
  2642. return self._super();
  2643. },
  2644. repaint: function () {
  2645. var self = this;
  2646. var style, rect;
  2647. style = self.getEl().style;
  2648. rect = self._layoutRect;
  2649. style.left = rect.x + 'px';
  2650. style.top = rect.y + 'px';
  2651. style.zIndex = 65535 + 65535;
  2652. }
  2653. });
  2654. var Widget = Control$1.extend({
  2655. init: function (settings) {
  2656. var self = this;
  2657. self._super(settings);
  2658. settings = self.settings;
  2659. self.canFocus = true;
  2660. if (settings.tooltip && Widget.tooltips !== false) {
  2661. self.on('mouseenter', function (e) {
  2662. var tooltip = self.tooltip().moveTo(-65535);
  2663. if (e.control === self) {
  2664. var rel = tooltip.text(settings.tooltip).show().testMoveRel(self.getEl(), [
  2665. 'bc-tc',
  2666. 'bc-tl',
  2667. 'bc-tr'
  2668. ]);
  2669. tooltip.classes.toggle('tooltip-n', rel === 'bc-tc');
  2670. tooltip.classes.toggle('tooltip-nw', rel === 'bc-tl');
  2671. tooltip.classes.toggle('tooltip-ne', rel === 'bc-tr');
  2672. tooltip.moveRel(self.getEl(), rel);
  2673. } else {
  2674. tooltip.hide();
  2675. }
  2676. });
  2677. self.on('mouseleave mousedown click', function () {
  2678. self.tooltip().remove();
  2679. self._tooltip = null;
  2680. });
  2681. }
  2682. self.aria('label', settings.ariaLabel || settings.tooltip);
  2683. },
  2684. tooltip: function () {
  2685. if (!this._tooltip) {
  2686. this._tooltip = new Tooltip({ type: 'tooltip' });
  2687. $_exab1j183jh8lz7nu.inheritUiContainer(this, this._tooltip);
  2688. this._tooltip.renderTo();
  2689. }
  2690. return this._tooltip;
  2691. },
  2692. postRender: function () {
  2693. var self = this, settings = self.settings;
  2694. self._super();
  2695. if (!self.parent() && (settings.width || settings.height)) {
  2696. self.initLayoutRect();
  2697. self.repaint();
  2698. }
  2699. if (settings.autofocus) {
  2700. self.focus();
  2701. }
  2702. },
  2703. bindStates: function () {
  2704. var self = this;
  2705. function disable(state) {
  2706. self.aria('disabled', state);
  2707. self.classes.toggle('disabled', state);
  2708. }
  2709. function active(state) {
  2710. self.aria('pressed', state);
  2711. self.classes.toggle('active', state);
  2712. }
  2713. self.state.on('change:disabled', function (e) {
  2714. disable(e.value);
  2715. });
  2716. self.state.on('change:active', function (e) {
  2717. active(e.value);
  2718. });
  2719. if (self.state.get('disabled')) {
  2720. disable(true);
  2721. }
  2722. if (self.state.get('active')) {
  2723. active(true);
  2724. }
  2725. return self._super();
  2726. },
  2727. remove: function () {
  2728. this._super();
  2729. if (this._tooltip) {
  2730. this._tooltip.remove();
  2731. this._tooltip = null;
  2732. }
  2733. }
  2734. });
  2735. var Progress = Widget.extend({
  2736. Defaults: { value: 0 },
  2737. init: function (settings) {
  2738. var self = this;
  2739. self._super(settings);
  2740. self.classes.add('progress');
  2741. if (!self.settings.filter) {
  2742. self.settings.filter = function (value) {
  2743. return Math.round(value);
  2744. };
  2745. }
  2746. },
  2747. renderHtml: function () {
  2748. var self = this, id = self._id, prefix = this.classPrefix;
  2749. 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>';
  2750. },
  2751. postRender: function () {
  2752. var self = this;
  2753. self._super();
  2754. self.value(self.settings.value);
  2755. return self;
  2756. },
  2757. bindStates: function () {
  2758. var self = this;
  2759. function setValue(value) {
  2760. value = self.settings.filter(value);
  2761. self.getEl().lastChild.innerHTML = value + '%';
  2762. self.getEl().firstChild.firstChild.style.width = value + '%';
  2763. }
  2764. self.state.on('change:value', function (e) {
  2765. setValue(e.value);
  2766. });
  2767. setValue(self.state.get('value'));
  2768. return self._super();
  2769. }
  2770. });
  2771. var updateLiveRegion = function (ctx, text) {
  2772. ctx.getEl().lastChild.textContent = text + (ctx.progressBar ? ' ' + ctx.progressBar.value() + '%' : '');
  2773. };
  2774. var Notification = Control$1.extend({
  2775. Mixins: [$_ben1dh184jh8lz7ny],
  2776. Defaults: { classes: 'widget notification' },
  2777. init: function (settings) {
  2778. var self = this;
  2779. self._super(settings);
  2780. self.maxWidth = settings.maxWidth;
  2781. if (settings.text) {
  2782. self.text(settings.text);
  2783. }
  2784. if (settings.icon) {
  2785. self.icon = settings.icon;
  2786. }
  2787. if (settings.color) {
  2788. self.color = settings.color;
  2789. }
  2790. if (settings.type) {
  2791. self.classes.add('notification-' + settings.type);
  2792. }
  2793. if (settings.timeout && (settings.timeout < 0 || settings.timeout > 0) && !settings.closeButton) {
  2794. self.closeButton = false;
  2795. } else {
  2796. self.classes.add('has-close');
  2797. self.closeButton = true;
  2798. }
  2799. if (settings.progressBar) {
  2800. self.progressBar = new Progress();
  2801. }
  2802. self.on('click', function (e) {
  2803. if (e.target.className.indexOf(self.classPrefix + 'close') !== -1) {
  2804. self.close();
  2805. }
  2806. });
  2807. },
  2808. renderHtml: function () {
  2809. var self = this;
  2810. var prefix = self.classPrefix;
  2811. var icon = '', closeButton = '', progressBar = '', notificationStyle = '';
  2812. if (self.icon) {
  2813. icon = '<i class="' + prefix + 'ico' + ' ' + prefix + 'i-' + self.icon + '"></i>';
  2814. }
  2815. notificationStyle = ' style="max-width: ' + self.maxWidth + 'px;' + (self.color ? 'background-color: ' + self.color + ';"' : '"');
  2816. if (self.closeButton) {
  2817. closeButton = '<button type="button" class="' + prefix + 'close" aria-hidden="true">\xD7</button>';
  2818. }
  2819. if (self.progressBar) {
  2820. progressBar = self.progressBar.renderHtml();
  2821. }
  2822. 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>';
  2823. },
  2824. postRender: function () {
  2825. var self = this;
  2826. global$3.setTimeout(function () {
  2827. self.$el.addClass(self.classPrefix + 'in');
  2828. updateLiveRegion(self, self.state.get('text'));
  2829. }, 100);
  2830. return self._super();
  2831. },
  2832. bindStates: function () {
  2833. var self = this;
  2834. self.state.on('change:text', function (e) {
  2835. self.getEl().firstChild.innerHTML = e.value;
  2836. updateLiveRegion(self, e.value);
  2837. });
  2838. if (self.progressBar) {
  2839. self.progressBar.bindStates();
  2840. self.progressBar.state.on('change:value', function (e) {
  2841. updateLiveRegion(self, self.state.get('text'));
  2842. });
  2843. }
  2844. return self._super();
  2845. },
  2846. close: function () {
  2847. var self = this;
  2848. if (!self.fire('close').isDefaultPrevented()) {
  2849. self.remove();
  2850. }
  2851. return self;
  2852. },
  2853. repaint: function () {
  2854. var self = this;
  2855. var style, rect;
  2856. style = self.getEl().style;
  2857. rect = self._layoutRect;
  2858. style.left = rect.x + 'px';
  2859. style.top = rect.y + 'px';
  2860. style.zIndex = 65535 - 1;
  2861. }
  2862. });
  2863. function NotificationManagerImpl (editor) {
  2864. var getEditorContainer = function (editor) {
  2865. return editor.inline ? editor.getElement() : editor.getContentAreaContainer();
  2866. };
  2867. var getContainerWidth = function () {
  2868. var container = getEditorContainer(editor);
  2869. return funcs.getSize(container).width;
  2870. };
  2871. var prePositionNotifications = function (notifications) {
  2872. $_qgcal17ljh8lz7ly.each(notifications, function (notification) {
  2873. notification.moveTo(0, 0);
  2874. });
  2875. };
  2876. var positionNotifications = function (notifications) {
  2877. if (notifications.length > 0) {
  2878. var firstItem = notifications.slice(0, 1)[0];
  2879. var container = getEditorContainer(editor);
  2880. firstItem.moveRel(container, 'tc-tc');
  2881. $_qgcal17ljh8lz7ly.each(notifications, function (notification, index) {
  2882. if (index > 0) {
  2883. notification.moveRel(notifications[index - 1].getEl(), 'bc-tc');
  2884. }
  2885. });
  2886. }
  2887. };
  2888. var reposition = function (notifications) {
  2889. prePositionNotifications(notifications);
  2890. positionNotifications(notifications);
  2891. };
  2892. var open = function (args, closeCallback) {
  2893. var extendedArgs = global$4.extend(args, { maxWidth: getContainerWidth() });
  2894. var notif = new Notification(extendedArgs);
  2895. notif.args = extendedArgs;
  2896. if (extendedArgs.timeout > 0) {
  2897. notif.timer = setTimeout(function () {
  2898. notif.close();
  2899. closeCallback();
  2900. }, extendedArgs.timeout);
  2901. }
  2902. notif.on('close', function () {
  2903. closeCallback();
  2904. });
  2905. notif.renderTo();
  2906. return notif;
  2907. };
  2908. var close = function (notification) {
  2909. notification.close();
  2910. };
  2911. var getArgs = function (notification) {
  2912. return notification.args;
  2913. };
  2914. return {
  2915. open: open,
  2916. close: close,
  2917. reposition: reposition,
  2918. getArgs: getArgs
  2919. };
  2920. }
  2921. function getDocumentSize(doc) {
  2922. var documentElement, body, scrollWidth, clientWidth;
  2923. var offsetWidth, scrollHeight, clientHeight, offsetHeight;
  2924. var max = Math.max;
  2925. documentElement = doc.documentElement;
  2926. body = doc.body;
  2927. scrollWidth = max(documentElement.scrollWidth, body.scrollWidth);
  2928. clientWidth = max(documentElement.clientWidth, body.clientWidth);
  2929. offsetWidth = max(documentElement.offsetWidth, body.offsetWidth);
  2930. scrollHeight = max(documentElement.scrollHeight, body.scrollHeight);
  2931. clientHeight = max(documentElement.clientHeight, body.clientHeight);
  2932. offsetHeight = max(documentElement.offsetHeight, body.offsetHeight);
  2933. return {
  2934. width: scrollWidth < offsetWidth ? clientWidth : scrollWidth,
  2935. height: scrollHeight < offsetHeight ? clientHeight : scrollHeight
  2936. };
  2937. }
  2938. function updateWithTouchData(e) {
  2939. var keys, i;
  2940. if (e.changedTouches) {
  2941. keys = 'screenX screenY pageX pageY clientX clientY'.split(' ');
  2942. for (i = 0; i < keys.length; i++) {
  2943. e[keys[i]] = e.changedTouches[0][keys[i]];
  2944. }
  2945. }
  2946. }
  2947. function DragHelper (id, settings) {
  2948. var $eventOverlay;
  2949. var doc = settings.document || document;
  2950. var downButton;
  2951. var start, stop, drag, startX, startY;
  2952. settings = settings || {};
  2953. var handleElement = doc.getElementById(settings.handle || id);
  2954. start = function (e) {
  2955. var docSize = getDocumentSize(doc);
  2956. var handleElm, cursor;
  2957. updateWithTouchData(e);
  2958. e.preventDefault();
  2959. downButton = e.button;
  2960. handleElm = handleElement;
  2961. startX = e.screenX;
  2962. startY = e.screenY;
  2963. if (window.getComputedStyle) {
  2964. cursor = window.getComputedStyle(handleElm, null).getPropertyValue('cursor');
  2965. } else {
  2966. cursor = handleElm.runtimeStyle.cursor;
  2967. }
  2968. $eventOverlay = global$7('<div></div>').css({
  2969. position: 'absolute',
  2970. top: 0,
  2971. left: 0,
  2972. width: docSize.width,
  2973. height: docSize.height,
  2974. zIndex: 2147483647,
  2975. opacity: 0.0001,
  2976. cursor: cursor
  2977. }).appendTo(doc.body);
  2978. global$7(doc).on('mousemove touchmove', drag).on('mouseup touchend', stop);
  2979. settings.start(e);
  2980. };
  2981. drag = function (e) {
  2982. updateWithTouchData(e);
  2983. if (e.button !== downButton) {
  2984. return stop(e);
  2985. }
  2986. e.deltaX = e.screenX - startX;
  2987. e.deltaY = e.screenY - startY;
  2988. e.preventDefault();
  2989. settings.drag(e);
  2990. };
  2991. stop = function (e) {
  2992. updateWithTouchData(e);
  2993. global$7(doc).off('mousemove touchmove', drag).off('mouseup touchend', stop);
  2994. $eventOverlay.remove();
  2995. if (settings.stop) {
  2996. settings.stop(e);
  2997. }
  2998. };
  2999. this.destroy = function () {
  3000. global$7(handleElement).off();
  3001. };
  3002. global$7(handleElement).on('mousedown touchstart', start);
  3003. }
  3004. var global$11 = tinymce.util.Tools.resolve('tinymce.ui.Factory');
  3005. var hasTabstopData = function (elm) {
  3006. return elm.getAttribute('data-mce-tabstop') ? true : false;
  3007. };
  3008. function KeyboardNavigation (settings) {
  3009. var root = settings.root;
  3010. var focusedElement, focusedControl;
  3011. function isElement(node) {
  3012. return node && node.nodeType === 1;
  3013. }
  3014. try {
  3015. focusedElement = document.activeElement;
  3016. } catch (ex) {
  3017. focusedElement = document.body;
  3018. }
  3019. focusedControl = root.getParentCtrl(focusedElement);
  3020. function getRole(elm) {
  3021. elm = elm || focusedElement;
  3022. if (isElement(elm)) {
  3023. return elm.getAttribute('role');
  3024. }
  3025. return null;
  3026. }
  3027. function getParentRole(elm) {
  3028. var role, parent = elm || focusedElement;
  3029. while (parent = parent.parentNode) {
  3030. if (role = getRole(parent)) {
  3031. return role;
  3032. }
  3033. }
  3034. }
  3035. function getAriaProp(name) {
  3036. var elm = focusedElement;
  3037. if (isElement(elm)) {
  3038. return elm.getAttribute('aria-' + name);
  3039. }
  3040. }
  3041. function isTextInputElement(elm) {
  3042. var tagName = elm.tagName.toUpperCase();
  3043. return tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT';
  3044. }
  3045. function canFocus(elm) {
  3046. if (isTextInputElement(elm) && !elm.hidden) {
  3047. return true;
  3048. }
  3049. if (hasTabstopData(elm)) {
  3050. return true;
  3051. }
  3052. if (/^(button|menuitem|checkbox|tab|menuitemcheckbox|option|gridcell|slider)$/.test(getRole(elm))) {
  3053. return true;
  3054. }
  3055. return false;
  3056. }
  3057. function getFocusElements(elm) {
  3058. var elements = [];
  3059. function collect(elm) {
  3060. if (elm.nodeType !== 1 || elm.style.display === 'none' || elm.disabled) {
  3061. return;
  3062. }
  3063. if (canFocus(elm)) {
  3064. elements.push(elm);
  3065. }
  3066. for (var i = 0; i < elm.childNodes.length; i++) {
  3067. collect(elm.childNodes[i]);
  3068. }
  3069. }
  3070. collect(elm || root.getEl());
  3071. return elements;
  3072. }
  3073. function getNavigationRoot(targetControl) {
  3074. var navigationRoot, controls;
  3075. targetControl = targetControl || focusedControl;
  3076. controls = targetControl.parents().toArray();
  3077. controls.unshift(targetControl);
  3078. for (var i = 0; i < controls.length; i++) {
  3079. navigationRoot = controls[i];
  3080. if (navigationRoot.settings.ariaRoot) {
  3081. break;
  3082. }
  3083. }
  3084. return navigationRoot;
  3085. }
  3086. function focusFirst(targetControl) {
  3087. var navigationRoot = getNavigationRoot(targetControl);
  3088. var focusElements = getFocusElements(navigationRoot.getEl());
  3089. if (navigationRoot.settings.ariaRemember && 'lastAriaIndex' in navigationRoot) {
  3090. moveFocusToIndex(navigationRoot.lastAriaIndex, focusElements);
  3091. } else {
  3092. moveFocusToIndex(0, focusElements);
  3093. }
  3094. }
  3095. function moveFocusToIndex(idx, elements) {
  3096. if (idx < 0) {
  3097. idx = elements.length - 1;
  3098. } else if (idx >= elements.length) {
  3099. idx = 0;
  3100. }
  3101. if (elements[idx]) {
  3102. elements[idx].focus();
  3103. }
  3104. return idx;
  3105. }
  3106. function moveFocus(dir, elements) {
  3107. var idx = -1;
  3108. var navigationRoot = getNavigationRoot();
  3109. elements = elements || getFocusElements(navigationRoot.getEl());
  3110. for (var i = 0; i < elements.length; i++) {
  3111. if (elements[i] === focusedElement) {
  3112. idx = i;
  3113. }
  3114. }
  3115. idx += dir;
  3116. navigationRoot.lastAriaIndex = moveFocusToIndex(idx, elements);
  3117. }
  3118. function left() {
  3119. var parentRole = getParentRole();
  3120. if (parentRole === 'tablist') {
  3121. moveFocus(-1, getFocusElements(focusedElement.parentNode));
  3122. } else if (focusedControl.parent().submenu) {
  3123. cancel();
  3124. } else {
  3125. moveFocus(-1);
  3126. }
  3127. }
  3128. function right() {
  3129. var role = getRole(), parentRole = getParentRole();
  3130. if (parentRole === 'tablist') {
  3131. moveFocus(1, getFocusElements(focusedElement.parentNode));
  3132. } else if (role === 'menuitem' && parentRole === 'menu' && getAriaProp('haspopup')) {
  3133. enter();
  3134. } else {
  3135. moveFocus(1);
  3136. }
  3137. }
  3138. function up() {
  3139. moveFocus(-1);
  3140. }
  3141. function down() {
  3142. var role = getRole(), parentRole = getParentRole();
  3143. if (role === 'menuitem' && parentRole === 'menubar') {
  3144. enter();
  3145. } else if (role === 'button' && getAriaProp('haspopup')) {
  3146. enter({ key: 'down' });
  3147. } else {
  3148. moveFocus(1);
  3149. }
  3150. }
  3151. function tab(e) {
  3152. var parentRole = getParentRole();
  3153. if (parentRole === 'tablist') {
  3154. var elm = getFocusElements(focusedControl.getEl('body'))[0];
  3155. if (elm) {
  3156. elm.focus();
  3157. }
  3158. } else {
  3159. moveFocus(e.shiftKey ? -1 : 1);
  3160. }
  3161. }
  3162. function cancel() {
  3163. focusedControl.fire('cancel');
  3164. }
  3165. function enter(aria) {
  3166. aria = aria || {};
  3167. focusedControl.fire('click', {
  3168. target: focusedElement,
  3169. aria: aria
  3170. });
  3171. }
  3172. root.on('keydown', function (e) {
  3173. function handleNonTabOrEscEvent(e, handler) {
  3174. if (isTextInputElement(focusedElement) || hasTabstopData(focusedElement)) {
  3175. return;
  3176. }
  3177. if (getRole(focusedElement) === 'slider') {
  3178. return;
  3179. }
  3180. if (handler(e) !== false) {
  3181. e.preventDefault();
  3182. }
  3183. }
  3184. if (e.isDefaultPrevented()) {
  3185. return;
  3186. }
  3187. switch (e.keyCode) {
  3188. case 37:
  3189. handleNonTabOrEscEvent(e, left);
  3190. break;
  3191. case 39:
  3192. handleNonTabOrEscEvent(e, right);
  3193. break;
  3194. case 38:
  3195. handleNonTabOrEscEvent(e, up);
  3196. break;
  3197. case 40:
  3198. handleNonTabOrEscEvent(e, down);
  3199. break;
  3200. case 27:
  3201. cancel();
  3202. break;
  3203. case 14:
  3204. case 13:
  3205. case 32:
  3206. handleNonTabOrEscEvent(e, enter);
  3207. break;
  3208. case 9:
  3209. tab(e);
  3210. e.preventDefault();
  3211. break;
  3212. }
  3213. });
  3214. root.on('focusin', function (e) {
  3215. focusedElement = e.target;
  3216. focusedControl = e.control;
  3217. });
  3218. return { focusFirst: focusFirst };
  3219. }
  3220. var selectorCache = {};
  3221. var Container = Control$1.extend({
  3222. init: function (settings) {
  3223. var self = this;
  3224. self._super(settings);
  3225. settings = self.settings;
  3226. if (settings.fixed) {
  3227. self.state.set('fixed', true);
  3228. }
  3229. self._items = new Collection$2();
  3230. if (self.isRtl()) {
  3231. self.classes.add('rtl');
  3232. }
  3233. self.bodyClasses = new ClassList(function () {
  3234. if (self.state.get('rendered')) {
  3235. self.getEl('body').className = this.toString();
  3236. }
  3237. });
  3238. self.bodyClasses.prefix = self.classPrefix;
  3239. self.classes.add('container');
  3240. self.bodyClasses.add('container-body');
  3241. if (settings.containerCls) {
  3242. self.classes.add(settings.containerCls);
  3243. }
  3244. self._layout = global$11.create((settings.layout || '') + 'layout');
  3245. if (self.settings.items) {
  3246. self.add(self.settings.items);
  3247. } else {
  3248. self.add(self.render());
  3249. }
  3250. self._hasBody = true;
  3251. },
  3252. items: function () {
  3253. return this._items;
  3254. },
  3255. find: function (selector) {
  3256. selector = selectorCache[selector] = selectorCache[selector] || new Selector(selector);
  3257. return selector.find(this);
  3258. },
  3259. add: function (items) {
  3260. var self = this;
  3261. self.items().add(self.create(items)).parent(self);
  3262. return self;
  3263. },
  3264. focus: function (keyboard) {
  3265. var self = this;
  3266. var focusCtrl, keyboardNav, items;
  3267. if (keyboard) {
  3268. keyboardNav = self.keyboardNav || self.parents().eq(-1)[0].keyboardNav;
  3269. if (keyboardNav) {
  3270. keyboardNav.focusFirst(self);
  3271. return;
  3272. }
  3273. }
  3274. items = self.find('*');
  3275. if (self.statusbar) {
  3276. items.add(self.statusbar.items());
  3277. }
  3278. items.each(function (ctrl) {
  3279. if (ctrl.settings.autofocus) {
  3280. focusCtrl = null;
  3281. return false;
  3282. }
  3283. if (ctrl.canFocus) {
  3284. focusCtrl = focusCtrl || ctrl;
  3285. }
  3286. });
  3287. if (focusCtrl) {
  3288. focusCtrl.focus();
  3289. }
  3290. return self;
  3291. },
  3292. replace: function (oldItem, newItem) {
  3293. var ctrlElm;
  3294. var items = this.items();
  3295. var i = items.length;
  3296. while (i--) {
  3297. if (items[i] === oldItem) {
  3298. items[i] = newItem;
  3299. break;
  3300. }
  3301. }
  3302. if (i >= 0) {
  3303. ctrlElm = newItem.getEl();
  3304. if (ctrlElm) {
  3305. ctrlElm.parentNode.removeChild(ctrlElm);
  3306. }
  3307. ctrlElm = oldItem.getEl();
  3308. if (ctrlElm) {
  3309. ctrlElm.parentNode.removeChild(ctrlElm);
  3310. }
  3311. }
  3312. newItem.parent(this);
  3313. },
  3314. create: function (items) {
  3315. var self = this;
  3316. var settings;
  3317. var ctrlItems = [];
  3318. if (!global$4.isArray(items)) {
  3319. items = [items];
  3320. }
  3321. global$4.each(items, function (item) {
  3322. if (item) {
  3323. if (!(item instanceof Control$1)) {
  3324. if (typeof item === 'string') {
  3325. item = { type: item };
  3326. }
  3327. settings = global$4.extend({}, self.settings.defaults, item);
  3328. item.type = settings.type = settings.type || item.type || self.settings.defaultType || (settings.defaults ? settings.defaults.type : null);
  3329. item = global$11.create(settings);
  3330. }
  3331. ctrlItems.push(item);
  3332. }
  3333. });
  3334. return ctrlItems;
  3335. },
  3336. renderNew: function () {
  3337. var self = this;
  3338. self.items().each(function (ctrl, index) {
  3339. var containerElm;
  3340. ctrl.parent(self);
  3341. if (!ctrl.state.get('rendered')) {
  3342. containerElm = self.getEl('body');
  3343. if (containerElm.hasChildNodes() && index <= containerElm.childNodes.length - 1) {
  3344. global$7(containerElm.childNodes[index]).before(ctrl.renderHtml());
  3345. } else {
  3346. global$7(containerElm).append(ctrl.renderHtml());
  3347. }
  3348. ctrl.postRender();
  3349. $_dipgfl182jh8lz7nt.add(ctrl);
  3350. }
  3351. });
  3352. self._layout.applyClasses(self.items().filter(':visible'));
  3353. self._lastRect = null;
  3354. return self;
  3355. },
  3356. append: function (items) {
  3357. return this.add(items).renderNew();
  3358. },
  3359. prepend: function (items) {
  3360. var self = this;
  3361. self.items().set(self.create(items).concat(self.items().toArray()));
  3362. return self.renderNew();
  3363. },
  3364. insert: function (items, index, before) {
  3365. var self = this;
  3366. var curItems, beforeItems, afterItems;
  3367. items = self.create(items);
  3368. curItems = self.items();
  3369. if (!before && index < curItems.length - 1) {
  3370. index += 1;
  3371. }
  3372. if (index >= 0 && index < curItems.length) {
  3373. beforeItems = curItems.slice(0, index).toArray();
  3374. afterItems = curItems.slice(index).toArray();
  3375. curItems.set(beforeItems.concat(items, afterItems));
  3376. }
  3377. return self.renderNew();
  3378. },
  3379. fromJSON: function (data) {
  3380. var self = this;
  3381. for (var name_1 in data) {
  3382. self.find('#' + name_1).value(data[name_1]);
  3383. }
  3384. return self;
  3385. },
  3386. toJSON: function () {
  3387. var self = this, data = {};
  3388. self.find('*').each(function (ctrl) {
  3389. var name = ctrl.name(), value = ctrl.value();
  3390. if (name && typeof value !== 'undefined') {
  3391. data[name] = value;
  3392. }
  3393. });
  3394. return data;
  3395. },
  3396. renderHtml: function () {
  3397. var self = this, layout = self._layout, role = this.settings.role;
  3398. self.preRender();
  3399. layout.preRender(self);
  3400. 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>';
  3401. },
  3402. postRender: function () {
  3403. var self = this;
  3404. var box;
  3405. self.items().exec('postRender');
  3406. self._super();
  3407. self._layout.postRender(self);
  3408. self.state.set('rendered', true);
  3409. if (self.settings.style) {
  3410. self.$el.css(self.settings.style);
  3411. }
  3412. if (self.settings.border) {
  3413. box = self.borderBox;
  3414. self.$el.css({
  3415. 'border-top-width': box.top,
  3416. 'border-right-width': box.right,
  3417. 'border-bottom-width': box.bottom,
  3418. 'border-left-width': box.left
  3419. });
  3420. }
  3421. if (!self.parent()) {
  3422. self.keyboardNav = KeyboardNavigation({ root: self });
  3423. }
  3424. return self;
  3425. },
  3426. initLayoutRect: function () {
  3427. var self = this, layoutRect = self._super();
  3428. self._layout.recalc(self);
  3429. return layoutRect;
  3430. },
  3431. recalc: function () {
  3432. var self = this;
  3433. var rect = self._layoutRect;
  3434. var lastRect = self._lastRect;
  3435. if (!lastRect || lastRect.w !== rect.w || lastRect.h !== rect.h) {
  3436. self._layout.recalc(self);
  3437. rect = self.layoutRect();
  3438. self._lastRect = {
  3439. x: rect.x,
  3440. y: rect.y,
  3441. w: rect.w,
  3442. h: rect.h
  3443. };
  3444. return true;
  3445. }
  3446. },
  3447. reflow: function () {
  3448. var i;
  3449. $_dipgfl182jh8lz7nt.remove(this);
  3450. if (this.visible()) {
  3451. Control$1.repaintControls = [];
  3452. Control$1.repaintControls.map = {};
  3453. this.recalc();
  3454. i = Control$1.repaintControls.length;
  3455. while (i--) {
  3456. Control$1.repaintControls[i].repaint();
  3457. }
  3458. if (this.settings.layout !== 'flow' && this.settings.layout !== 'stack') {
  3459. this.repaint();
  3460. }
  3461. Control$1.repaintControls = [];
  3462. }
  3463. return this;
  3464. }
  3465. });
  3466. var $_1ecd7e18gjh8lz7pl = {
  3467. init: function () {
  3468. var self = this;
  3469. self.on('repaint', self.renderScroll);
  3470. },
  3471. renderScroll: function () {
  3472. var self = this, margin = 2;
  3473. function repaintScroll() {
  3474. var hasScrollH, hasScrollV, bodyElm;
  3475. function repaintAxis(axisName, posName, sizeName, contentSizeName, hasScroll, ax) {
  3476. var containerElm, scrollBarElm, scrollThumbElm;
  3477. var containerSize, scrollSize, ratio, rect;
  3478. var posNameLower, sizeNameLower;
  3479. scrollBarElm = self.getEl('scroll' + axisName);
  3480. if (scrollBarElm) {
  3481. posNameLower = posName.toLowerCase();
  3482. sizeNameLower = sizeName.toLowerCase();
  3483. global$7(self.getEl('absend')).css(posNameLower, self.layoutRect()[contentSizeName] - 1);
  3484. if (!hasScroll) {
  3485. global$7(scrollBarElm).css('display', 'none');
  3486. return;
  3487. }
  3488. global$7(scrollBarElm).css('display', 'block');
  3489. containerElm = self.getEl('body');
  3490. scrollThumbElm = self.getEl('scroll' + axisName + 't');
  3491. containerSize = containerElm['client' + sizeName] - margin * 2;
  3492. containerSize -= hasScrollH && hasScrollV ? scrollBarElm['client' + ax] : 0;
  3493. scrollSize = containerElm['scroll' + sizeName];
  3494. ratio = containerSize / scrollSize;
  3495. rect = {};
  3496. rect[posNameLower] = containerElm['offset' + posName] + margin;
  3497. rect[sizeNameLower] = containerSize;
  3498. global$7(scrollBarElm).css(rect);
  3499. rect = {};
  3500. rect[posNameLower] = containerElm['scroll' + posName] * ratio;
  3501. rect[sizeNameLower] = containerSize * ratio;
  3502. global$7(scrollThumbElm).css(rect);
  3503. }
  3504. }
  3505. bodyElm = self.getEl('body');
  3506. hasScrollH = bodyElm.scrollWidth > bodyElm.clientWidth;
  3507. hasScrollV = bodyElm.scrollHeight > bodyElm.clientHeight;
  3508. repaintAxis('h', 'Left', 'Width', 'contentW', hasScrollH, 'Height');
  3509. repaintAxis('v', 'Top', 'Height', 'contentH', hasScrollV, 'Width');
  3510. }
  3511. function addScroll() {
  3512. function addScrollAxis(axisName, posName, sizeName, deltaPosName, ax) {
  3513. var scrollStart;
  3514. var axisId = self._id + '-scroll' + axisName, prefix = self.classPrefix;
  3515. global$7(self.getEl()).append('<div id="' + axisId + '" class="' + prefix + 'scrollbar ' + prefix + 'scrollbar-' + axisName + '">' + '<div id="' + axisId + 't" class="' + prefix + 'scrollbar-thumb"></div>' + '</div>');
  3516. self.draghelper = new DragHelper(axisId + 't', {
  3517. start: function () {
  3518. scrollStart = self.getEl('body')['scroll' + posName];
  3519. global$7('#' + axisId).addClass(prefix + 'active');
  3520. },
  3521. drag: function (e) {
  3522. var ratio, hasScrollH, hasScrollV, containerSize;
  3523. var layoutRect = self.layoutRect();
  3524. hasScrollH = layoutRect.contentW > layoutRect.innerW;
  3525. hasScrollV = layoutRect.contentH > layoutRect.innerH;
  3526. containerSize = self.getEl('body')['client' + sizeName] - margin * 2;
  3527. containerSize -= hasScrollH && hasScrollV ? self.getEl('scroll' + axisName)['client' + ax] : 0;
  3528. ratio = containerSize / self.getEl('body')['scroll' + sizeName];
  3529. self.getEl('body')['scroll' + posName] = scrollStart + e['delta' + deltaPosName] / ratio;
  3530. },
  3531. stop: function () {
  3532. global$7('#' + axisId).removeClass(prefix + 'active');
  3533. }
  3534. });
  3535. }
  3536. self.classes.add('scroll');
  3537. addScrollAxis('v', 'Top', 'Height', 'Y', 'Width');
  3538. addScrollAxis('h', 'Left', 'Width', 'X', 'Height');
  3539. }
  3540. if (self.settings.autoScroll) {
  3541. if (!self._hasScroll) {
  3542. self._hasScroll = true;
  3543. addScroll();
  3544. self.on('wheel', function (e) {
  3545. var bodyEl = self.getEl('body');
  3546. bodyEl.scrollLeft += (e.deltaX || 0) * 10;
  3547. bodyEl.scrollTop += e.deltaY * 10;
  3548. repaintScroll();
  3549. });
  3550. global$7(self.getEl('body')).on('scroll', repaintScroll);
  3551. }
  3552. repaintScroll();
  3553. }
  3554. }
  3555. };
  3556. var Panel = Container.extend({
  3557. Defaults: {
  3558. layout: 'fit',
  3559. containerCls: 'panel'
  3560. },
  3561. Mixins: [$_1ecd7e18gjh8lz7pl],
  3562. renderHtml: function () {
  3563. var self = this;
  3564. var layout = self._layout;
  3565. var innerHtml = self.settings.html;
  3566. self.preRender();
  3567. layout.preRender(self);
  3568. if (typeof innerHtml === 'undefined') {
  3569. innerHtml = '<div id="' + self._id + '-body" class="' + self.bodyClasses + '">' + layout.renderHtml(self) + '</div>';
  3570. } else {
  3571. if (typeof innerHtml === 'function') {
  3572. innerHtml = innerHtml.call(self);
  3573. }
  3574. self._hasBody = false;
  3575. }
  3576. return '<div id="' + self._id + '" class="' + self.classes + '" hidefocus="1" tabindex="-1" role="group">' + (self._preBodyHtml || '') + innerHtml + '</div>';
  3577. }
  3578. });
  3579. var $_1a5lul18hjh8lz7pp = {
  3580. resizeToContent: function () {
  3581. this._layoutRect.autoResize = true;
  3582. this._lastRect = null;
  3583. this.reflow();
  3584. },
  3585. resizeTo: function (w, h) {
  3586. if (w <= 1 || h <= 1) {
  3587. var rect = funcs.getWindowSize();
  3588. w = w <= 1 ? w * rect.w : w;
  3589. h = h <= 1 ? h * rect.h : h;
  3590. }
  3591. this._layoutRect.autoResize = false;
  3592. return this.layoutRect({
  3593. minW: w,
  3594. minH: h,
  3595. w: w,
  3596. h: h
  3597. }).reflow();
  3598. },
  3599. resizeBy: function (dw, dh) {
  3600. var self = this, rect = self.layoutRect();
  3601. return self.resizeTo(rect.w + dw, rect.h + dh);
  3602. }
  3603. };
  3604. var documentClickHandler;
  3605. var documentScrollHandler;
  3606. var windowResizeHandler;
  3607. var visiblePanels = [];
  3608. var zOrder = [];
  3609. var hasModal;
  3610. function isChildOf(ctrl, parent) {
  3611. while (ctrl) {
  3612. if (ctrl === parent) {
  3613. return true;
  3614. }
  3615. ctrl = ctrl.parent();
  3616. }
  3617. }
  3618. function skipOrHidePanels(e) {
  3619. var i = visiblePanels.length;
  3620. while (i--) {
  3621. var panel = visiblePanels[i], clickCtrl = panel.getParentCtrl(e.target);
  3622. if (panel.settings.autohide) {
  3623. if (clickCtrl) {
  3624. if (isChildOf(clickCtrl, panel) || panel.parent() === clickCtrl) {
  3625. continue;
  3626. }
  3627. }
  3628. e = panel.fire('autohide', { target: e.target });
  3629. if (!e.isDefaultPrevented()) {
  3630. panel.hide();
  3631. }
  3632. }
  3633. }
  3634. }
  3635. function bindDocumentClickHandler() {
  3636. if (!documentClickHandler) {
  3637. documentClickHandler = function (e) {
  3638. if (e.button === 2) {
  3639. return;
  3640. }
  3641. skipOrHidePanels(e);
  3642. };
  3643. global$7(document).on('click touchstart', documentClickHandler);
  3644. }
  3645. }
  3646. function bindDocumentScrollHandler() {
  3647. if (!documentScrollHandler) {
  3648. documentScrollHandler = function () {
  3649. var i;
  3650. i = visiblePanels.length;
  3651. while (i--) {
  3652. repositionPanel$1(visiblePanels[i]);
  3653. }
  3654. };
  3655. global$7(window).on('scroll', documentScrollHandler);
  3656. }
  3657. }
  3658. function bindWindowResizeHandler() {
  3659. if (!windowResizeHandler) {
  3660. var docElm_1 = document.documentElement;
  3661. var clientWidth_1 = docElm_1.clientWidth, clientHeight_1 = docElm_1.clientHeight;
  3662. windowResizeHandler = function () {
  3663. if (!document.all || clientWidth_1 !== docElm_1.clientWidth || clientHeight_1 !== docElm_1.clientHeight) {
  3664. clientWidth_1 = docElm_1.clientWidth;
  3665. clientHeight_1 = docElm_1.clientHeight;
  3666. FloatPanel.hideAll();
  3667. }
  3668. };
  3669. global$7(window).on('resize', windowResizeHandler);
  3670. }
  3671. }
  3672. function repositionPanel$1(panel) {
  3673. var scrollY = funcs.getViewPort().y;
  3674. function toggleFixedChildPanels(fixed, deltaY) {
  3675. var parent;
  3676. for (var i = 0; i < visiblePanels.length; i++) {
  3677. if (visiblePanels[i] !== panel) {
  3678. parent = visiblePanels[i].parent();
  3679. while (parent && (parent = parent.parent())) {
  3680. if (parent === panel) {
  3681. visiblePanels[i].fixed(fixed).moveBy(0, deltaY).repaint();
  3682. }
  3683. }
  3684. }
  3685. }
  3686. }
  3687. if (panel.settings.autofix) {
  3688. if (!panel.state.get('fixed')) {
  3689. panel._autoFixY = panel.layoutRect().y;
  3690. if (panel._autoFixY < scrollY) {
  3691. panel.fixed(true).layoutRect({ y: 0 }).repaint();
  3692. toggleFixedChildPanels(true, scrollY - panel._autoFixY);
  3693. }
  3694. } else {
  3695. if (panel._autoFixY > scrollY) {
  3696. panel.fixed(false).layoutRect({ y: panel._autoFixY }).repaint();
  3697. toggleFixedChildPanels(false, panel._autoFixY - scrollY);
  3698. }
  3699. }
  3700. }
  3701. }
  3702. function addRemove(add, ctrl) {
  3703. var i, zIndex = FloatPanel.zIndex || 65535, topModal;
  3704. if (add) {
  3705. zOrder.push(ctrl);
  3706. } else {
  3707. i = zOrder.length;
  3708. while (i--) {
  3709. if (zOrder[i] === ctrl) {
  3710. zOrder.splice(i, 1);
  3711. }
  3712. }
  3713. }
  3714. if (zOrder.length) {
  3715. for (i = 0; i < zOrder.length; i++) {
  3716. if (zOrder[i].modal) {
  3717. zIndex++;
  3718. topModal = zOrder[i];
  3719. }
  3720. zOrder[i].getEl().style.zIndex = zIndex;
  3721. zOrder[i].zIndex = zIndex;
  3722. zIndex++;
  3723. }
  3724. }
  3725. var modalBlockEl = global$7('#' + ctrl.classPrefix + 'modal-block', ctrl.getContainerElm())[0];
  3726. if (topModal) {
  3727. global$7(modalBlockEl).css('z-index', topModal.zIndex - 1);
  3728. } else if (modalBlockEl) {
  3729. modalBlockEl.parentNode.removeChild(modalBlockEl);
  3730. hasModal = false;
  3731. }
  3732. FloatPanel.currentZIndex = zIndex;
  3733. }
  3734. var FloatPanel = Panel.extend({
  3735. Mixins: [
  3736. $_ben1dh184jh8lz7ny,
  3737. $_1a5lul18hjh8lz7pp
  3738. ],
  3739. init: function (settings) {
  3740. var self = this;
  3741. self._super(settings);
  3742. self._eventsRoot = self;
  3743. self.classes.add('floatpanel');
  3744. if (settings.autohide) {
  3745. bindDocumentClickHandler();
  3746. bindWindowResizeHandler();
  3747. visiblePanels.push(self);
  3748. }
  3749. if (settings.autofix) {
  3750. bindDocumentScrollHandler();
  3751. self.on('move', function () {
  3752. repositionPanel$1(this);
  3753. });
  3754. }
  3755. self.on('postrender show', function (e) {
  3756. if (e.control === self) {
  3757. var $modalBlockEl_1;
  3758. var prefix_1 = self.classPrefix;
  3759. if (self.modal && !hasModal) {
  3760. $modalBlockEl_1 = global$7('#' + prefix_1 + 'modal-block', self.getContainerElm());
  3761. if (!$modalBlockEl_1[0]) {
  3762. $modalBlockEl_1 = global$7('<div id="' + prefix_1 + 'modal-block" class="' + prefix_1 + 'reset ' + prefix_1 + 'fade"></div>').appendTo(self.getContainerElm());
  3763. }
  3764. global$3.setTimeout(function () {
  3765. $modalBlockEl_1.addClass(prefix_1 + 'in');
  3766. global$7(self.getEl()).addClass(prefix_1 + 'in');
  3767. });
  3768. hasModal = true;
  3769. }
  3770. addRemove(true, self);
  3771. }
  3772. });
  3773. self.on('show', function () {
  3774. self.parents().each(function (ctrl) {
  3775. if (ctrl.state.get('fixed')) {
  3776. self.fixed(true);
  3777. return false;
  3778. }
  3779. });
  3780. });
  3781. if (settings.popover) {
  3782. self._preBodyHtml = '<div class="' + self.classPrefix + 'arrow"></div>';
  3783. self.classes.add('popover').add('bottom').add(self.isRtl() ? 'end' : 'start');
  3784. }
  3785. self.aria('label', settings.ariaLabel);
  3786. self.aria('labelledby', self._id);
  3787. self.aria('describedby', self.describedBy || self._id + '-none');
  3788. },
  3789. fixed: function (state) {
  3790. var self = this;
  3791. if (self.state.get('fixed') !== state) {
  3792. if (self.state.get('rendered')) {
  3793. var viewport = funcs.getViewPort();
  3794. if (state) {
  3795. self.layoutRect().y -= viewport.y;
  3796. } else {
  3797. self.layoutRect().y += viewport.y;
  3798. }
  3799. }
  3800. self.classes.toggle('fixed', state);
  3801. self.state.set('fixed', state);
  3802. }
  3803. return self;
  3804. },
  3805. show: function () {
  3806. var self = this;
  3807. var i;
  3808. var state = self._super();
  3809. i = visiblePanels.length;
  3810. while (i--) {
  3811. if (visiblePanels[i] === self) {
  3812. break;
  3813. }
  3814. }
  3815. if (i === -1) {
  3816. visiblePanels.push(self);
  3817. }
  3818. return state;
  3819. },
  3820. hide: function () {
  3821. removeVisiblePanel(this);
  3822. addRemove(false, this);
  3823. return this._super();
  3824. },
  3825. hideAll: function () {
  3826. FloatPanel.hideAll();
  3827. },
  3828. close: function () {
  3829. var self = this;
  3830. if (!self.fire('close').isDefaultPrevented()) {
  3831. self.remove();
  3832. addRemove(false, self);
  3833. }
  3834. return self;
  3835. },
  3836. remove: function () {
  3837. removeVisiblePanel(this);
  3838. this._super();
  3839. },
  3840. postRender: function () {
  3841. var self = this;
  3842. if (self.settings.bodyRole) {
  3843. this.getEl('body').setAttribute('role', self.settings.bodyRole);
  3844. }
  3845. return self._super();
  3846. }
  3847. });
  3848. FloatPanel.hideAll = function () {
  3849. var i = visiblePanels.length;
  3850. while (i--) {
  3851. var panel = visiblePanels[i];
  3852. if (panel && panel.settings.autohide) {
  3853. panel.hide();
  3854. visiblePanels.splice(i, 1);
  3855. }
  3856. }
  3857. };
  3858. function removeVisiblePanel(panel) {
  3859. var i;
  3860. i = visiblePanels.length;
  3861. while (i--) {
  3862. if (visiblePanels[i] === panel) {
  3863. visiblePanels.splice(i, 1);
  3864. }
  3865. }
  3866. i = zOrder.length;
  3867. while (i--) {
  3868. if (zOrder[i] === panel) {
  3869. zOrder.splice(i, 1);
  3870. }
  3871. }
  3872. }
  3873. var windows = [];
  3874. var oldMetaValue = '';
  3875. function toggleFullScreenState(state) {
  3876. var noScaleMetaValue = 'width=device-width,initial-scale=1.0,user-scalable=0,minimum-scale=1.0,maximum-scale=1.0';
  3877. var viewport = global$7('meta[name=viewport]')[0], contentValue;
  3878. if (global$1.overrideViewPort === false) {
  3879. return;
  3880. }
  3881. if (!viewport) {
  3882. viewport = document.createElement('meta');
  3883. viewport.setAttribute('name', 'viewport');
  3884. document.getElementsByTagName('head')[0].appendChild(viewport);
  3885. }
  3886. contentValue = viewport.getAttribute('content');
  3887. if (contentValue && typeof oldMetaValue !== 'undefined') {
  3888. oldMetaValue = contentValue;
  3889. }
  3890. viewport.setAttribute('content', state ? noScaleMetaValue : oldMetaValue);
  3891. }
  3892. function toggleBodyFullScreenClasses(classPrefix, state) {
  3893. if (checkFullscreenWindows() && state === false) {
  3894. global$7([
  3895. document.documentElement,
  3896. document.body
  3897. ]).removeClass(classPrefix + 'fullscreen');
  3898. }
  3899. }
  3900. function checkFullscreenWindows() {
  3901. for (var i = 0; i < windows.length; i++) {
  3902. if (windows[i]._fullscreen) {
  3903. return true;
  3904. }
  3905. }
  3906. return false;
  3907. }
  3908. function handleWindowResize() {
  3909. if (!global$1.desktop) {
  3910. var lastSize_1 = {
  3911. w: window.innerWidth,
  3912. h: window.innerHeight
  3913. };
  3914. global$3.setInterval(function () {
  3915. var w = window.innerWidth, h = window.innerHeight;
  3916. if (lastSize_1.w !== w || lastSize_1.h !== h) {
  3917. lastSize_1 = {
  3918. w: w,
  3919. h: h
  3920. };
  3921. global$7(window).trigger('resize');
  3922. }
  3923. }, 100);
  3924. }
  3925. function reposition() {
  3926. var i;
  3927. var rect = funcs.getWindowSize();
  3928. var layoutRect;
  3929. for (i = 0; i < windows.length; i++) {
  3930. layoutRect = windows[i].layoutRect();
  3931. 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));
  3932. }
  3933. }
  3934. global$7(window).on('resize', reposition);
  3935. }
  3936. var Window = FloatPanel.extend({
  3937. modal: true,
  3938. Defaults: {
  3939. border: 1,
  3940. layout: 'flex',
  3941. containerCls: 'panel',
  3942. role: 'dialog',
  3943. callbacks: {
  3944. submit: function () {
  3945. this.fire('submit', { data: this.toJSON() });
  3946. },
  3947. close: function () {
  3948. this.close();
  3949. }
  3950. }
  3951. },
  3952. init: function (settings) {
  3953. var self = this;
  3954. self._super(settings);
  3955. if (self.isRtl()) {
  3956. self.classes.add('rtl');
  3957. }
  3958. self.classes.add('window');
  3959. self.bodyClasses.add('window-body');
  3960. self.state.set('fixed', true);
  3961. if (settings.buttons) {
  3962. self.statusbar = new Panel({
  3963. layout: 'flex',
  3964. border: '1 0 0 0',
  3965. spacing: 3,
  3966. padding: 10,
  3967. align: 'center',
  3968. pack: self.isRtl() ? 'start' : 'end',
  3969. defaults: { type: 'button' },
  3970. items: settings.buttons
  3971. });
  3972. self.statusbar.classes.add('foot');
  3973. self.statusbar.parent(self);
  3974. }
  3975. self.on('click', function (e) {
  3976. var closeClass = self.classPrefix + 'close';
  3977. if (funcs.hasClass(e.target, closeClass) || funcs.hasClass(e.target.parentNode, closeClass)) {
  3978. self.close();
  3979. }
  3980. });
  3981. self.on('cancel', function () {
  3982. self.close();
  3983. });
  3984. self.on('move', function (e) {
  3985. if (e.control === self) {
  3986. FloatPanel.hideAll();
  3987. }
  3988. });
  3989. self.aria('describedby', self.describedBy || self._id + '-none');
  3990. self.aria('label', settings.title);
  3991. self._fullscreen = false;
  3992. },
  3993. recalc: function () {
  3994. var self = this;
  3995. var statusbar = self.statusbar;
  3996. var layoutRect, width, x, needsRecalc;
  3997. if (self._fullscreen) {
  3998. self.layoutRect(funcs.getWindowSize());
  3999. self.layoutRect().contentH = self.layoutRect().innerH;
  4000. }
  4001. self._super();
  4002. layoutRect = self.layoutRect();
  4003. if (self.settings.title && !self._fullscreen) {
  4004. width = layoutRect.headerW;
  4005. if (width > layoutRect.w) {
  4006. x = layoutRect.x - Math.max(0, width / 2);
  4007. self.layoutRect({
  4008. w: width,
  4009. x: x
  4010. });
  4011. needsRecalc = true;
  4012. }
  4013. }
  4014. if (statusbar) {
  4015. statusbar.layoutRect({ w: self.layoutRect().innerW }).recalc();
  4016. width = statusbar.layoutRect().minW + layoutRect.deltaW;
  4017. if (width > layoutRect.w) {
  4018. x = layoutRect.x - Math.max(0, width - layoutRect.w);
  4019. self.layoutRect({
  4020. w: width,
  4021. x: x
  4022. });
  4023. needsRecalc = true;
  4024. }
  4025. }
  4026. if (needsRecalc) {
  4027. self.recalc();
  4028. }
  4029. },
  4030. initLayoutRect: function () {
  4031. var self = this;
  4032. var layoutRect = self._super();
  4033. var deltaH = 0, headEl;
  4034. if (self.settings.title && !self._fullscreen) {
  4035. headEl = self.getEl('head');
  4036. var size = funcs.getSize(headEl);
  4037. layoutRect.headerW = size.width;
  4038. layoutRect.headerH = size.height;
  4039. deltaH += layoutRect.headerH;
  4040. }
  4041. if (self.statusbar) {
  4042. deltaH += self.statusbar.layoutRect().h;
  4043. }
  4044. layoutRect.deltaH += deltaH;
  4045. layoutRect.minH += deltaH;
  4046. layoutRect.h += deltaH;
  4047. var rect = funcs.getWindowSize();
  4048. layoutRect.x = self.settings.x || Math.max(0, rect.w / 2 - layoutRect.w / 2);
  4049. layoutRect.y = self.settings.y || Math.max(0, rect.h / 2 - layoutRect.h / 2);
  4050. return layoutRect;
  4051. },
  4052. renderHtml: function () {
  4053. var self = this, layout = self._layout, id = self._id, prefix = self.classPrefix;
  4054. var settings = self.settings;
  4055. var headerHtml = '', footerHtml = '', html = settings.html;
  4056. self.preRender();
  4057. layout.preRender(self);
  4058. if (settings.title) {
  4059. 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>';
  4060. }
  4061. if (settings.url) {
  4062. html = '<iframe src="' + settings.url + '" tabindex="-1"></iframe>';
  4063. }
  4064. if (typeof html === 'undefined') {
  4065. html = layout.renderHtml(self);
  4066. }
  4067. if (self.statusbar) {
  4068. footerHtml = self.statusbar.renderHtml();
  4069. }
  4070. 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>';
  4071. },
  4072. fullscreen: function (state) {
  4073. var self = this;
  4074. var documentElement = document.documentElement;
  4075. var slowRendering;
  4076. var prefix = self.classPrefix;
  4077. var layoutRect;
  4078. if (state !== self._fullscreen) {
  4079. global$7(window).on('resize', function () {
  4080. var time;
  4081. if (self._fullscreen) {
  4082. if (!slowRendering) {
  4083. time = new Date().getTime();
  4084. var rect = funcs.getWindowSize();
  4085. self.moveTo(0, 0).resizeTo(rect.w, rect.h);
  4086. if (new Date().getTime() - time > 50) {
  4087. slowRendering = true;
  4088. }
  4089. } else {
  4090. if (!self._timer) {
  4091. self._timer = global$3.setTimeout(function () {
  4092. var rect = funcs.getWindowSize();
  4093. self.moveTo(0, 0).resizeTo(rect.w, rect.h);
  4094. self._timer = 0;
  4095. }, 50);
  4096. }
  4097. }
  4098. }
  4099. });
  4100. layoutRect = self.layoutRect();
  4101. self._fullscreen = state;
  4102. if (!state) {
  4103. self.borderBox = $_889epm17vjh8lz7n9.parseBox(self.settings.border);
  4104. self.getEl('head').style.display = '';
  4105. layoutRect.deltaH += layoutRect.headerH;
  4106. global$7([
  4107. documentElement,
  4108. document.body
  4109. ]).removeClass(prefix + 'fullscreen');
  4110. self.classes.remove('fullscreen');
  4111. self.moveTo(self._initial.x, self._initial.y).resizeTo(self._initial.w, self._initial.h);
  4112. } else {
  4113. self._initial = {
  4114. x: layoutRect.x,
  4115. y: layoutRect.y,
  4116. w: layoutRect.w,
  4117. h: layoutRect.h
  4118. };
  4119. self.borderBox = $_889epm17vjh8lz7n9.parseBox('0');
  4120. self.getEl('head').style.display = 'none';
  4121. layoutRect.deltaH -= layoutRect.headerH + 2;
  4122. global$7([
  4123. documentElement,
  4124. document.body
  4125. ]).addClass(prefix + 'fullscreen');
  4126. self.classes.add('fullscreen');
  4127. var rect = funcs.getWindowSize();
  4128. self.moveTo(0, 0).resizeTo(rect.w, rect.h);
  4129. }
  4130. }
  4131. return self.reflow();
  4132. },
  4133. postRender: function () {
  4134. var self = this;
  4135. var startPos;
  4136. setTimeout(function () {
  4137. self.classes.add('in');
  4138. self.fire('open');
  4139. }, 0);
  4140. self._super();
  4141. if (self.statusbar) {
  4142. self.statusbar.postRender();
  4143. }
  4144. self.focus();
  4145. this.dragHelper = new DragHelper(self._id + '-dragh', {
  4146. start: function () {
  4147. startPos = {
  4148. x: self.layoutRect().x,
  4149. y: self.layoutRect().y
  4150. };
  4151. },
  4152. drag: function (e) {
  4153. self.moveTo(startPos.x + e.deltaX, startPos.y + e.deltaY);
  4154. }
  4155. });
  4156. self.on('submit', function (e) {
  4157. if (!e.isDefaultPrevented()) {
  4158. self.close();
  4159. }
  4160. });
  4161. windows.push(self);
  4162. toggleFullScreenState(true);
  4163. },
  4164. submit: function () {
  4165. return this.fire('submit', { data: this.toJSON() });
  4166. },
  4167. remove: function () {
  4168. var self = this;
  4169. var i;
  4170. self.dragHelper.destroy();
  4171. self._super();
  4172. if (self.statusbar) {
  4173. this.statusbar.remove();
  4174. }
  4175. toggleBodyFullScreenClasses(self.classPrefix, false);
  4176. i = windows.length;
  4177. while (i--) {
  4178. if (windows[i] === self) {
  4179. windows.splice(i, 1);
  4180. }
  4181. }
  4182. toggleFullScreenState(windows.length > 0);
  4183. },
  4184. getContentWindow: function () {
  4185. var ifr = this.getEl().getElementsByTagName('iframe')[0];
  4186. return ifr ? ifr.contentWindow : null;
  4187. }
  4188. });
  4189. handleWindowResize();
  4190. var MessageBox = Window.extend({
  4191. init: function (settings) {
  4192. settings = {
  4193. border: 1,
  4194. padding: 20,
  4195. layout: 'flex',
  4196. pack: 'center',
  4197. align: 'center',
  4198. containerCls: 'panel',
  4199. autoScroll: true,
  4200. buttons: {
  4201. type: 'button',
  4202. text: 'Ok',
  4203. action: 'ok'
  4204. },
  4205. items: {
  4206. type: 'label',
  4207. multiline: true,
  4208. maxWidth: 500,
  4209. maxHeight: 200
  4210. }
  4211. };
  4212. this._super(settings);
  4213. },
  4214. Statics: {
  4215. OK: 1,
  4216. OK_CANCEL: 2,
  4217. YES_NO: 3,
  4218. YES_NO_CANCEL: 4,
  4219. msgBox: function (settings) {
  4220. var buttons;
  4221. var callback = settings.callback || function () {
  4222. };
  4223. function createButton(text, status, primary) {
  4224. return {
  4225. type: 'button',
  4226. text: text,
  4227. subtype: primary ? 'primary' : '',
  4228. onClick: function (e) {
  4229. e.control.parents()[1].close();
  4230. callback(status);
  4231. }
  4232. };
  4233. }
  4234. switch (settings.buttons) {
  4235. case MessageBox.OK_CANCEL:
  4236. buttons = [
  4237. createButton('Ok', true, true),
  4238. createButton('Cancel', false)
  4239. ];
  4240. break;
  4241. case MessageBox.YES_NO:
  4242. case MessageBox.YES_NO_CANCEL:
  4243. buttons = [
  4244. createButton('Yes', 1, true),
  4245. createButton('No', 0)
  4246. ];
  4247. if (settings.buttons === MessageBox.YES_NO_CANCEL) {
  4248. buttons.push(createButton('Cancel', -1));
  4249. }
  4250. break;
  4251. default:
  4252. buttons = [createButton('Ok', true, true)];
  4253. break;
  4254. }
  4255. return new Window({
  4256. padding: 20,
  4257. x: settings.x,
  4258. y: settings.y,
  4259. minWidth: 300,
  4260. minHeight: 100,
  4261. layout: 'flex',
  4262. pack: 'center',
  4263. align: 'center',
  4264. buttons: buttons,
  4265. title: settings.title,
  4266. role: 'alertdialog',
  4267. items: {
  4268. type: 'label',
  4269. multiline: true,
  4270. maxWidth: 500,
  4271. maxHeight: 200,
  4272. text: settings.text
  4273. },
  4274. onPostRender: function () {
  4275. this.aria('describedby', this.items()[0]._id);
  4276. },
  4277. onClose: settings.onClose,
  4278. onCancel: function () {
  4279. callback(false);
  4280. }
  4281. }).renderTo(document.body).reflow();
  4282. },
  4283. alert: function (settings, callback) {
  4284. if (typeof settings === 'string') {
  4285. settings = { text: settings };
  4286. }
  4287. settings.callback = callback;
  4288. return MessageBox.msgBox(settings);
  4289. },
  4290. confirm: function (settings, callback) {
  4291. if (typeof settings === 'string') {
  4292. settings = { text: settings };
  4293. }
  4294. settings.callback = callback;
  4295. settings.buttons = MessageBox.OK_CANCEL;
  4296. return MessageBox.msgBox(settings);
  4297. }
  4298. }
  4299. });
  4300. function WindowManagerImpl (editor) {
  4301. var open = function (args, params, closeCallback) {
  4302. var win;
  4303. args.title = args.title || ' ';
  4304. args.url = args.url || args.file;
  4305. if (args.url) {
  4306. args.width = parseInt(args.width || 320, 10);
  4307. args.height = parseInt(args.height || 240, 10);
  4308. }
  4309. if (args.body) {
  4310. args.items = {
  4311. defaults: args.defaults,
  4312. type: args.bodyType || 'form',
  4313. items: args.body,
  4314. data: args.data,
  4315. callbacks: args.commands
  4316. };
  4317. }
  4318. if (!args.url && !args.buttons) {
  4319. args.buttons = [
  4320. {
  4321. text: 'Ok',
  4322. subtype: 'primary',
  4323. onclick: function () {
  4324. win.find('form')[0].submit();
  4325. }
  4326. },
  4327. {
  4328. text: 'Cancel',
  4329. onclick: function () {
  4330. win.close();
  4331. }
  4332. }
  4333. ];
  4334. }
  4335. win = new Window(args);
  4336. win.on('close', function () {
  4337. closeCallback(win);
  4338. });
  4339. if (args.data) {
  4340. win.on('postRender', function () {
  4341. this.find('*').each(function (ctrl) {
  4342. var name = ctrl.name();
  4343. if (name in args.data) {
  4344. ctrl.value(args.data[name]);
  4345. }
  4346. });
  4347. });
  4348. }
  4349. win.features = args || {};
  4350. win.params = params || {};
  4351. win = win.renderTo(document.body).reflow();
  4352. return win;
  4353. };
  4354. var alert = function (message, choiceCallback, closeCallback) {
  4355. var win;
  4356. win = MessageBox.alert(message, function () {
  4357. choiceCallback();
  4358. });
  4359. win.on('close', function () {
  4360. closeCallback(win);
  4361. });
  4362. return win;
  4363. };
  4364. var confirm = function (message, choiceCallback, closeCallback) {
  4365. var win;
  4366. win = MessageBox.confirm(message, function (state) {
  4367. choiceCallback(state);
  4368. });
  4369. win.on('close', function () {
  4370. closeCallback(win);
  4371. });
  4372. return win;
  4373. };
  4374. var close = function (window) {
  4375. window.close();
  4376. };
  4377. var getParams = function (window) {
  4378. return window.params;
  4379. };
  4380. var setParams = function (window, params) {
  4381. window.params = params;
  4382. };
  4383. return {
  4384. open: open,
  4385. alert: alert,
  4386. confirm: confirm,
  4387. close: close,
  4388. getParams: getParams,
  4389. setParams: setParams
  4390. };
  4391. }
  4392. var get = function (editor, panel) {
  4393. var renderUI = function () {
  4394. return $_fduguf170jh8lz7ks.renderUI(editor, panel);
  4395. };
  4396. return {
  4397. renderUI: renderUI,
  4398. getNotificationManagerImpl: function () {
  4399. return NotificationManagerImpl(editor);
  4400. },
  4401. getWindowManagerImpl: function () {
  4402. return WindowManagerImpl(editor);
  4403. }
  4404. };
  4405. };
  4406. var $_952h616zjh8lz7kr = { get: get };
  4407. var global$12 = typeof window !== 'undefined' ? window : Function('return this;')();
  4408. var path = function (parts, scope) {
  4409. var o = scope !== undefined && scope !== null ? scope : global$12;
  4410. for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i)
  4411. o = o[parts[i]];
  4412. return o;
  4413. };
  4414. var resolve = function (p, scope) {
  4415. var parts = p.split('.');
  4416. return path(parts, scope);
  4417. };
  4418. var step = function (o, part) {
  4419. if (o[part] === undefined || o[part] === null)
  4420. o[part] = {};
  4421. return o[part];
  4422. };
  4423. var forge = function (parts, target) {
  4424. var o = target !== undefined ? target : global$12;
  4425. for (var i = 0; i < parts.length; ++i)
  4426. o = step(o, parts[i]);
  4427. return o;
  4428. };
  4429. var namespace = function (name, target) {
  4430. var parts = name.split('.');
  4431. return forge(parts, target);
  4432. };
  4433. var $_3zfq6518njh8lz7q1 = {
  4434. path: path,
  4435. resolve: resolve,
  4436. forge: forge,
  4437. namespace: namespace
  4438. };
  4439. var unsafe = function (name, scope) {
  4440. return $_3zfq6518njh8lz7q1.resolve(name, scope);
  4441. };
  4442. var getOrDie = function (name, scope) {
  4443. var actual = unsafe(name, scope);
  4444. if (actual === undefined || actual === null)
  4445. throw name + ' not available on this browser';
  4446. return actual;
  4447. };
  4448. var $_791eis18mjh8lz7py = { getOrDie: getOrDie };
  4449. function FileReader () {
  4450. var f = $_791eis18mjh8lz7py.getOrDie('FileReader');
  4451. return new f();
  4452. }
  4453. var global$13 = tinymce.util.Tools.resolve('tinymce.util.Promise');
  4454. var blobToBase64 = function (blob) {
  4455. return new global$13(function (resolve) {
  4456. var reader = new FileReader();
  4457. reader.onloadend = function () {
  4458. resolve(reader.result.split(',')[1]);
  4459. };
  4460. reader.readAsDataURL(blob);
  4461. });
  4462. };
  4463. var $_cxmuw818kjh8lz7pu = { blobToBase64: blobToBase64 };
  4464. var pickFile = function () {
  4465. return new global$13(function (resolve) {
  4466. var fileInput;
  4467. fileInput = document.createElement('input');
  4468. fileInput.type = 'file';
  4469. fileInput.style.position = 'fixed';
  4470. fileInput.style.left = 0;
  4471. fileInput.style.top = 0;
  4472. fileInput.style.opacity = 0.001;
  4473. document.body.appendChild(fileInput);
  4474. fileInput.onchange = function (e) {
  4475. resolve(Array.prototype.slice.call(e.target.files));
  4476. };
  4477. fileInput.click();
  4478. fileInput.parentNode.removeChild(fileInput);
  4479. });
  4480. };
  4481. var $_8djtgr18qjh8lz7q4 = { pickFile: pickFile };
  4482. var count$1 = 0;
  4483. var seed = function () {
  4484. var rnd = function () {
  4485. return Math.round(Math.random() * 4294967295).toString(36);
  4486. };
  4487. return 's' + Date.now().toString(36) + rnd() + rnd() + rnd();
  4488. };
  4489. var uuid = function (prefix) {
  4490. return prefix + count$1++ + seed();
  4491. };
  4492. var $_bp4qdf18sjh8lz7q8 = { uuid: uuid };
  4493. var create$1 = function (dom, rng) {
  4494. var bookmark = {};
  4495. function setupEndPoint(start) {
  4496. var offsetNode, container, offset;
  4497. container = rng[start ? 'startContainer' : 'endContainer'];
  4498. offset = rng[start ? 'startOffset' : 'endOffset'];
  4499. if (container.nodeType === 1) {
  4500. offsetNode = dom.create('span', { 'data-mce-type': 'bookmark' });
  4501. if (container.hasChildNodes()) {
  4502. offset = Math.min(offset, container.childNodes.length - 1);
  4503. if (start) {
  4504. container.insertBefore(offsetNode, container.childNodes[offset]);
  4505. } else {
  4506. dom.insertAfter(offsetNode, container.childNodes[offset]);
  4507. }
  4508. } else {
  4509. container.appendChild(offsetNode);
  4510. }
  4511. container = offsetNode;
  4512. offset = 0;
  4513. }
  4514. bookmark[start ? 'startContainer' : 'endContainer'] = container;
  4515. bookmark[start ? 'startOffset' : 'endOffset'] = offset;
  4516. }
  4517. setupEndPoint(true);
  4518. if (!rng.collapsed) {
  4519. setupEndPoint();
  4520. }
  4521. return bookmark;
  4522. };
  4523. var resolve$1 = function (dom, bookmark) {
  4524. function restoreEndPoint(start) {
  4525. var container, offset, node;
  4526. function nodeIndex(container) {
  4527. var node = container.parentNode.firstChild, idx = 0;
  4528. while (node) {
  4529. if (node === container) {
  4530. return idx;
  4531. }
  4532. if (node.nodeType !== 1 || node.getAttribute('data-mce-type') !== 'bookmark') {
  4533. idx++;
  4534. }
  4535. node = node.nextSibling;
  4536. }
  4537. return -1;
  4538. }
  4539. container = node = bookmark[start ? 'startContainer' : 'endContainer'];
  4540. offset = bookmark[start ? 'startOffset' : 'endOffset'];
  4541. if (!container) {
  4542. return;
  4543. }
  4544. if (container.nodeType === 1) {
  4545. offset = nodeIndex(container);
  4546. container = container.parentNode;
  4547. dom.remove(node);
  4548. }
  4549. bookmark[start ? 'startContainer' : 'endContainer'] = container;
  4550. bookmark[start ? 'startOffset' : 'endOffset'] = offset;
  4551. }
  4552. restoreEndPoint(true);
  4553. restoreEndPoint();
  4554. var rng = dom.createRng();
  4555. rng.setStart(bookmark.startContainer, bookmark.startOffset);
  4556. if (bookmark.endContainer) {
  4557. rng.setEnd(bookmark.endContainer, bookmark.endOffset);
  4558. }
  4559. return rng;
  4560. };
  4561. var $_8zzspk18ujh8lz7qb = {
  4562. create: create$1,
  4563. resolve: resolve$1
  4564. };
  4565. var global$14 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');
  4566. var global$15 = tinymce.util.Tools.resolve('tinymce.dom.RangeUtils');
  4567. var getSelectedElements = function (rootElm, startNode, endNode) {
  4568. var walker, node;
  4569. var elms = [];
  4570. walker = new global$14(startNode, rootElm);
  4571. for (node = startNode; node; node = walker.next()) {
  4572. if (node.nodeType === 1) {
  4573. elms.push(node);
  4574. }
  4575. if (node === endNode) {
  4576. break;
  4577. }
  4578. }
  4579. return elms;
  4580. };
  4581. var unwrapElements = function (editor, elms) {
  4582. var bookmark, dom, selection;
  4583. dom = editor.dom;
  4584. selection = editor.selection;
  4585. bookmark = $_8zzspk18ujh8lz7qb.create(dom, selection.getRng());
  4586. global$4.each(elms, function (elm) {
  4587. editor.dom.remove(elm, true);
  4588. });
  4589. selection.setRng($_8zzspk18ujh8lz7qb.resolve(dom, bookmark));
  4590. };
  4591. var isLink = function (elm) {
  4592. return elm.nodeName === 'A' && elm.hasAttribute('href');
  4593. };
  4594. var getParentAnchorOrSelf = function (dom, elm) {
  4595. var anchorElm = dom.getParent(elm, isLink);
  4596. return anchorElm ? anchorElm : elm;
  4597. };
  4598. var getSelectedAnchors = function (editor) {
  4599. var startElm, endElm, rootElm, anchorElms, selection, dom, rng;
  4600. selection = editor.selection;
  4601. dom = editor.dom;
  4602. rng = selection.getRng();
  4603. startElm = getParentAnchorOrSelf(dom, global$15.getNode(rng.startContainer, rng.startOffset));
  4604. endElm = global$15.getNode(rng.endContainer, rng.endOffset);
  4605. rootElm = editor.getBody();
  4606. anchorElms = global$4.grep(getSelectedElements(rootElm, startElm, endElm), isLink);
  4607. return anchorElms;
  4608. };
  4609. var unlinkSelection = function (editor) {
  4610. unwrapElements(editor, getSelectedAnchors(editor));
  4611. };
  4612. var $_5urhtf18tjh8lz7q9 = { unlinkSelection: unlinkSelection };
  4613. var createTableHtml = function (cols, rows) {
  4614. var x, y, html;
  4615. html = '<table data-mce-id="mce" style="width: 100%">';
  4616. html += '<tbody>';
  4617. for (y = 0; y < rows; y++) {
  4618. html += '<tr>';
  4619. for (x = 0; x < cols; x++) {
  4620. html += '<td><br></td>';
  4621. }
  4622. html += '</tr>';
  4623. }
  4624. html += '</tbody>';
  4625. html += '</table>';
  4626. return html;
  4627. };
  4628. var getInsertedElement = function (editor) {
  4629. var elms = editor.dom.select('*[data-mce-id]');
  4630. return elms[0];
  4631. };
  4632. var insertTableHtml = function (editor, cols, rows) {
  4633. editor.undoManager.transact(function () {
  4634. var tableElm, cellElm;
  4635. editor.insertContent(createTableHtml(cols, rows));
  4636. tableElm = getInsertedElement(editor);
  4637. tableElm.removeAttribute('data-mce-id');
  4638. cellElm = editor.dom.select('td,th', tableElm);
  4639. editor.selection.setCursorLocation(cellElm[0], 0);
  4640. });
  4641. };
  4642. var insertTable = function (editor, cols, rows) {
  4643. editor.plugins.table ? editor.plugins.table.insertTable(cols, rows) : insertTableHtml(editor, cols, rows);
  4644. };
  4645. var formatBlock = function (editor, formatName) {
  4646. editor.execCommand('FormatBlock', false, formatName);
  4647. };
  4648. var insertBlob = function (editor, base64, blob) {
  4649. var blobCache, blobInfo;
  4650. blobCache = editor.editorUpload.blobCache;
  4651. blobInfo = blobCache.create($_bp4qdf18sjh8lz7q8.uuid('mceu'), blob, base64);
  4652. blobCache.add(blobInfo);
  4653. editor.insertContent(editor.dom.createHTML('img', { src: blobInfo.blobUri() }));
  4654. };
  4655. var collapseSelectionToEnd = function (editor) {
  4656. editor.selection.collapse(false);
  4657. };
  4658. var unlink = function (editor) {
  4659. editor.focus();
  4660. $_5urhtf18tjh8lz7q9.unlinkSelection(editor);
  4661. collapseSelectionToEnd(editor);
  4662. };
  4663. var changeHref = function (editor, elm, url) {
  4664. editor.focus();
  4665. editor.dom.setAttrib(elm, 'href', url);
  4666. collapseSelectionToEnd(editor);
  4667. };
  4668. var insertLink = function (editor, url) {
  4669. editor.execCommand('mceInsertLink', false, { href: url });
  4670. collapseSelectionToEnd(editor);
  4671. };
  4672. var updateOrInsertLink = function (editor, url) {
  4673. var elm = editor.dom.getParent(editor.selection.getStart(), 'a[href]');
  4674. elm ? changeHref(editor, elm, url) : insertLink(editor, url);
  4675. };
  4676. var createLink = function (editor, url) {
  4677. url.trim().length === 0 ? unlink(editor) : updateOrInsertLink(editor, url);
  4678. };
  4679. var $_3usbxv18rjh8lz7q5 = {
  4680. insertTable: insertTable,
  4681. formatBlock: formatBlock,
  4682. insertBlob: insertBlob,
  4683. createLink: createLink,
  4684. unlink: unlink
  4685. };
  4686. var addHeaderButtons = function (editor) {
  4687. var formatBlock = function (name) {
  4688. return function () {
  4689. $_3usbxv18rjh8lz7q5.formatBlock(editor, name);
  4690. };
  4691. };
  4692. for (var i = 1; i < 6; i++) {
  4693. var name_1 = 'h' + i;
  4694. editor.addButton(name_1, {
  4695. text: name_1.toUpperCase(),
  4696. tooltip: 'Heading ' + i,
  4697. stateSelector: name_1,
  4698. onclick: formatBlock(name_1),
  4699. onPostRender: function () {
  4700. var span = this.getEl().firstChild.firstChild;
  4701. span.style.fontWeight = 'bold';
  4702. }
  4703. });
  4704. }
  4705. };
  4706. var addToEditor = function (editor, panel) {
  4707. editor.addButton('quicklink', {
  4708. icon: 'link',
  4709. tooltip: 'Insert/Edit link',
  4710. stateSelector: 'a[href]',
  4711. onclick: function () {
  4712. panel.showForm(editor, 'quicklink');
  4713. }
  4714. });
  4715. editor.addButton('quickimage', {
  4716. icon: 'image',
  4717. tooltip: 'Insert image',
  4718. onclick: function () {
  4719. $_8djtgr18qjh8lz7q4.pickFile().then(function (files) {
  4720. var blob = files[0];
  4721. $_cxmuw818kjh8lz7pu.blobToBase64(blob).then(function (base64) {
  4722. $_3usbxv18rjh8lz7q5.insertBlob(editor, base64, blob);
  4723. });
  4724. });
  4725. }
  4726. });
  4727. editor.addButton('quicktable', {
  4728. icon: 'table',
  4729. tooltip: 'Insert table',
  4730. onclick: function () {
  4731. panel.hide();
  4732. $_3usbxv18rjh8lz7q5.insertTable(editor, 2, 2);
  4733. }
  4734. });
  4735. addHeaderButtons(editor);
  4736. };
  4737. var $_67na6j18jjh8lz7pt = { addToEditor: addToEditor };
  4738. var getUiContainerDelta$1 = function () {
  4739. var uiContainer = global$1.container;
  4740. if (uiContainer && global$2.DOM.getStyle(uiContainer, 'position', true) !== 'static') {
  4741. var containerPos = global$2.DOM.getPos(uiContainer);
  4742. var dx = containerPos.x - uiContainer.scrollLeft;
  4743. var dy = containerPos.y - uiContainer.scrollTop;
  4744. return Option.some({
  4745. x: dx,
  4746. y: dy
  4747. });
  4748. } else {
  4749. return Option.none();
  4750. }
  4751. };
  4752. var $_4oiq8718yjh8lz7qi = { getUiContainerDelta: getUiContainerDelta$1 };
  4753. var isDomainLike = function (href) {
  4754. return /^www\.|\.(com|org|edu|gov|uk|net|ca|de|jp|fr|au|us|ru|ch|it|nl|se|no|es|mil)$/i.test(href.trim());
  4755. };
  4756. var isAbsolute = function (href) {
  4757. return /^https?:\/\//.test(href.trim());
  4758. };
  4759. var $_g5hvgx190jh8lz7r0 = {
  4760. isDomainLike: isDomainLike,
  4761. isAbsolute: isAbsolute
  4762. };
  4763. var focusFirstTextBox = function (form) {
  4764. form.find('textbox').eq(0).each(function (ctrl) {
  4765. ctrl.focus();
  4766. });
  4767. };
  4768. var createForm = function (name, spec) {
  4769. var form = global$11.create(global$4.extend({
  4770. type: 'form',
  4771. layout: 'flex',
  4772. direction: 'row',
  4773. padding: 5,
  4774. name: name,
  4775. spacing: 3
  4776. }, spec));
  4777. form.on('show', function () {
  4778. focusFirstTextBox(form);
  4779. });
  4780. return form;
  4781. };
  4782. var toggleVisibility = function (ctrl, state) {
  4783. return state ? ctrl.show() : ctrl.hide();
  4784. };
  4785. var askAboutPrefix = function (editor, href) {
  4786. return new global$13(function (resolve) {
  4787. editor.windowManager.confirm('The URL you entered seems to be an external link. Do you want to add the required http:// prefix?', function (result) {
  4788. var output = result === true ? 'http://' + href : href;
  4789. resolve(output);
  4790. });
  4791. });
  4792. };
  4793. var convertLinkToAbsolute = function (editor, href) {
  4794. return !$_g5hvgx190jh8lz7r0.isAbsolute(href) && $_g5hvgx190jh8lz7r0.isDomainLike(href) ? askAboutPrefix(editor, href) : global$13.resolve(href);
  4795. };
  4796. var createQuickLinkForm = function (editor, hide) {
  4797. var attachState = {};
  4798. var unlink = function () {
  4799. editor.focus();
  4800. $_3usbxv18rjh8lz7q5.unlink(editor);
  4801. hide();
  4802. };
  4803. var onChangeHandler = function (e) {
  4804. var meta = e.meta;
  4805. if (meta && meta.attach) {
  4806. attachState = {
  4807. href: this.value(),
  4808. attach: meta.attach
  4809. };
  4810. }
  4811. };
  4812. var onShowHandler = function (e) {
  4813. if (e.control === this) {
  4814. var elm = void 0, linkurl = '';
  4815. elm = editor.dom.getParent(editor.selection.getStart(), 'a[href]');
  4816. if (elm) {
  4817. linkurl = editor.dom.getAttrib(elm, 'href');
  4818. }
  4819. this.fromJSON({ linkurl: linkurl });
  4820. toggleVisibility(this.find('#unlink'), elm);
  4821. this.find('#linkurl')[0].focus();
  4822. }
  4823. };
  4824. return createForm('quicklink', {
  4825. items: [
  4826. {
  4827. type: 'button',
  4828. name: 'unlink',
  4829. icon: 'unlink',
  4830. onclick: unlink,
  4831. tooltip: 'Remove link'
  4832. },
  4833. {
  4834. type: 'filepicker',
  4835. name: 'linkurl',
  4836. placeholder: 'Paste or type a link',
  4837. filetype: 'file',
  4838. onchange: onChangeHandler
  4839. },
  4840. {
  4841. type: 'button',
  4842. icon: 'checkmark',
  4843. subtype: 'primary',
  4844. tooltip: 'Ok',
  4845. onclick: 'submit'
  4846. }
  4847. ],
  4848. onshow: onShowHandler,
  4849. onsubmit: function (e) {
  4850. convertLinkToAbsolute(editor, e.data.linkurl).then(function (url) {
  4851. editor.undoManager.transact(function () {
  4852. if (url === attachState.href) {
  4853. attachState.attach();
  4854. attachState = {};
  4855. }
  4856. $_3usbxv18rjh8lz7q5.createLink(editor, url);
  4857. });
  4858. hide();
  4859. });
  4860. }
  4861. });
  4862. };
  4863. var $_fopz0018zjh8lz7qx = { createQuickLinkForm: createQuickLinkForm };
  4864. var getSelectorStateResult = function (itemName, item) {
  4865. var result = function (selector, handler) {
  4866. return {
  4867. selector: selector,
  4868. handler: handler
  4869. };
  4870. };
  4871. var activeHandler = function (state) {
  4872. item.active(state);
  4873. };
  4874. var disabledHandler = function (state) {
  4875. item.disabled(state);
  4876. };
  4877. if (item.settings.stateSelector) {
  4878. return result(item.settings.stateSelector, activeHandler);
  4879. }
  4880. if (item.settings.disabledStateSelector) {
  4881. return result(item.settings.disabledStateSelector, disabledHandler);
  4882. }
  4883. return null;
  4884. };
  4885. var bindSelectorChanged = function (editor, itemName, item) {
  4886. return function () {
  4887. var result = getSelectorStateResult(itemName, item);
  4888. if (result !== null) {
  4889. editor.selection.selectorChanged(result.selector, result.handler);
  4890. }
  4891. };
  4892. };
  4893. var itemsToArray$1 = function (items) {
  4894. if ($_795vzu17hjh8lz7lf.isArray(items)) {
  4895. return items;
  4896. } else if ($_795vzu17hjh8lz7lf.isString(items)) {
  4897. return items.split(/[ ,]/);
  4898. }
  4899. return [];
  4900. };
  4901. var create$2 = function (editor, name, items) {
  4902. var toolbarItems = [];
  4903. var buttonGroup;
  4904. if (!items) {
  4905. return;
  4906. }
  4907. global$4.each(itemsToArray$1(items), function (item) {
  4908. if (item === '|') {
  4909. buttonGroup = null;
  4910. } else {
  4911. if (editor.buttons[item]) {
  4912. if (!buttonGroup) {
  4913. buttonGroup = {
  4914. type: 'buttongroup',
  4915. items: []
  4916. };
  4917. toolbarItems.push(buttonGroup);
  4918. }
  4919. var button = editor.buttons[item];
  4920. if ($_795vzu17hjh8lz7lf.isFunction(button)) {
  4921. button = button();
  4922. }
  4923. button.type = button.type || 'button';
  4924. button = global$11.create(button);
  4925. button.on('postRender', bindSelectorChanged(editor, item, button));
  4926. buttonGroup.items.push(button);
  4927. }
  4928. }
  4929. });
  4930. return global$11.create({
  4931. type: 'toolbar',
  4932. layout: 'flow',
  4933. name: name,
  4934. items: toolbarItems
  4935. });
  4936. };
  4937. var $_5zu088191jh8lz7r1 = { create: create$2 };
  4938. var create$3 = function () {
  4939. var panel, currentRect;
  4940. var createToolbars = function (editor, toolbars) {
  4941. return global$4.map(toolbars, function (toolbar) {
  4942. return $_5zu088191jh8lz7r1.create(editor, toolbar.id, toolbar.items);
  4943. });
  4944. };
  4945. var hasToolbarItems = function (toolbar) {
  4946. return toolbar.items().length > 0;
  4947. };
  4948. var create = function (editor, toolbars) {
  4949. var items = createToolbars(editor, toolbars).concat([
  4950. $_5zu088191jh8lz7r1.create(editor, 'text', $_frnzmx17ejh8lz7lb.getTextSelectionToolbarItems(editor)),
  4951. $_5zu088191jh8lz7r1.create(editor, 'insert', $_frnzmx17ejh8lz7lb.getInsertToolbarItems(editor)),
  4952. $_fopz0018zjh8lz7qx.createQuickLinkForm(editor, hide)
  4953. ]);
  4954. return global$11.create({
  4955. type: 'floatpanel',
  4956. role: 'dialog',
  4957. classes: 'tinymce tinymce-inline arrow',
  4958. ariaLabel: 'Inline toolbar',
  4959. layout: 'flex',
  4960. direction: 'column',
  4961. align: 'stretch',
  4962. autohide: false,
  4963. autofix: true,
  4964. fixed: true,
  4965. border: 1,
  4966. items: global$4.grep(items, hasToolbarItems),
  4967. oncancel: function () {
  4968. editor.focus();
  4969. }
  4970. });
  4971. };
  4972. var showPanel = function (panel) {
  4973. if (panel) {
  4974. panel.show();
  4975. }
  4976. };
  4977. var movePanelTo = function (panel, pos) {
  4978. panel.moveTo(pos.x, pos.y);
  4979. };
  4980. var togglePositionClass = function (panel, relPos) {
  4981. relPos = relPos ? relPos.substr(0, 2) : '';
  4982. global$4.each({
  4983. t: 'down',
  4984. b: 'up',
  4985. c: 'center'
  4986. }, function (cls, pos) {
  4987. panel.classes.toggle('arrow-' + cls, pos === relPos.substr(0, 1));
  4988. });
  4989. if (relPos === 'cr') {
  4990. panel.classes.toggle('arrow-left', true);
  4991. panel.classes.toggle('arrow-right', false);
  4992. } else if (relPos === 'cl') {
  4993. panel.classes.toggle('arrow-left', true);
  4994. panel.classes.toggle('arrow-right', true);
  4995. } else {
  4996. global$4.each({
  4997. l: 'left',
  4998. r: 'right'
  4999. }, function (cls, pos) {
  5000. panel.classes.toggle('arrow-' + cls, pos === relPos.substr(1, 1));
  5001. });
  5002. }
  5003. };
  5004. var showToolbar = function (panel, id) {
  5005. var toolbars = panel.items().filter('#' + id);
  5006. if (toolbars.length > 0) {
  5007. toolbars[0].show();
  5008. panel.reflow();
  5009. return true;
  5010. }
  5011. return false;
  5012. };
  5013. var repositionPanelAt = function (panel, id, editor, targetRect) {
  5014. var contentAreaRect, panelRect, result, userConstainHandler;
  5015. userConstainHandler = $_frnzmx17ejh8lz7lb.getPositionHandler(editor);
  5016. contentAreaRect = $_82t0yo177jh8lz7l1.getContentAreaRect(editor);
  5017. panelRect = global$2.DOM.getRect(panel.getEl());
  5018. if (id === 'insert') {
  5019. result = $_7c1jsb17ijh8lz7lh.calcInsert(targetRect, contentAreaRect, panelRect);
  5020. } else {
  5021. result = $_7c1jsb17ijh8lz7lh.calc(targetRect, contentAreaRect, panelRect);
  5022. }
  5023. if (result) {
  5024. var delta = $_4oiq8718yjh8lz7qi.getUiContainerDelta().getOr({
  5025. x: 0,
  5026. y: 0
  5027. });
  5028. var transposedPanelRect = {
  5029. x: result.rect.x - delta.x,
  5030. y: result.rect.y - delta.y,
  5031. w: result.rect.w,
  5032. h: result.rect.h
  5033. };
  5034. currentRect = targetRect;
  5035. movePanelTo(panel, $_7c1jsb17ijh8lz7lh.userConstrain(userConstainHandler, targetRect, contentAreaRect, transposedPanelRect));
  5036. togglePositionClass(panel, result.position);
  5037. return true;
  5038. } else {
  5039. return false;
  5040. }
  5041. };
  5042. var showPanelAt = function (panel, id, editor, targetRect) {
  5043. showPanel(panel);
  5044. panel.items().hide();
  5045. if (!showToolbar(panel, id)) {
  5046. hide();
  5047. return;
  5048. }
  5049. if (repositionPanelAt(panel, id, editor, targetRect) === false) {
  5050. hide();
  5051. }
  5052. };
  5053. var hasFormVisible = function () {
  5054. return panel.items().filter('form:visible').length > 0;
  5055. };
  5056. var showForm = function (editor, id) {
  5057. if (panel) {
  5058. panel.items().hide();
  5059. if (!showToolbar(panel, id)) {
  5060. hide();
  5061. return;
  5062. }
  5063. var contentAreaRect = void 0, panelRect = void 0, result = void 0, userConstainHandler = void 0;
  5064. showPanel(panel);
  5065. panel.items().hide();
  5066. showToolbar(panel, id);
  5067. userConstainHandler = $_frnzmx17ejh8lz7lb.getPositionHandler(editor);
  5068. contentAreaRect = $_82t0yo177jh8lz7l1.getContentAreaRect(editor);
  5069. panelRect = global$2.DOM.getRect(panel.getEl());
  5070. result = $_7c1jsb17ijh8lz7lh.calc(currentRect, contentAreaRect, panelRect);
  5071. if (result) {
  5072. panelRect = result.rect;
  5073. movePanelTo(panel, $_7c1jsb17ijh8lz7lh.userConstrain(userConstainHandler, currentRect, contentAreaRect, panelRect));
  5074. togglePositionClass(panel, result.position);
  5075. }
  5076. }
  5077. };
  5078. var show = function (editor, id, targetRect, toolbars) {
  5079. if (!panel) {
  5080. $_dincot17djh8lz7l9.fireBeforeRenderUI(editor);
  5081. panel = create(editor, toolbars);
  5082. panel.renderTo().reflow().moveTo(targetRect.x, targetRect.y);
  5083. editor.nodeChanged();
  5084. }
  5085. showPanelAt(panel, id, editor, targetRect);
  5086. };
  5087. var reposition = function (editor, id, targetRect) {
  5088. if (panel) {
  5089. repositionPanelAt(panel, id, editor, targetRect);
  5090. }
  5091. };
  5092. var hide = function () {
  5093. if (panel) {
  5094. panel.hide();
  5095. }
  5096. };
  5097. var focus = function () {
  5098. if (panel) {
  5099. panel.find('toolbar:visible').eq(0).each(function (item) {
  5100. item.focus(true);
  5101. });
  5102. }
  5103. };
  5104. var remove = function () {
  5105. if (panel) {
  5106. panel.remove();
  5107. panel = null;
  5108. }
  5109. };
  5110. var inForm = function () {
  5111. return panel && panel.visible() && hasFormVisible();
  5112. };
  5113. return {
  5114. show: show,
  5115. showForm: showForm,
  5116. reposition: reposition,
  5117. inForm: inForm,
  5118. hide: hide,
  5119. focus: focus,
  5120. remove: remove
  5121. };
  5122. };
  5123. var Layout$1 = global$8.extend({
  5124. Defaults: {
  5125. firstControlClass: 'first',
  5126. lastControlClass: 'last'
  5127. },
  5128. init: function (settings) {
  5129. this.settings = global$4.extend({}, this.Defaults, settings);
  5130. },
  5131. preRender: function (container) {
  5132. container.bodyClasses.add(this.settings.containerClass);
  5133. },
  5134. applyClasses: function (items) {
  5135. var self = this;
  5136. var settings = self.settings;
  5137. var firstClass, lastClass, firstItem, lastItem;
  5138. firstClass = settings.firstControlClass;
  5139. lastClass = settings.lastControlClass;
  5140. items.each(function (item) {
  5141. item.classes.remove(firstClass).remove(lastClass).add(settings.controlClass);
  5142. if (item.visible()) {
  5143. if (!firstItem) {
  5144. firstItem = item;
  5145. }
  5146. lastItem = item;
  5147. }
  5148. });
  5149. if (firstItem) {
  5150. firstItem.classes.add(firstClass);
  5151. }
  5152. if (lastItem) {
  5153. lastItem.classes.add(lastClass);
  5154. }
  5155. },
  5156. renderHtml: function (container) {
  5157. var self = this;
  5158. var html = '';
  5159. self.applyClasses(container.items());
  5160. container.items().each(function (item) {
  5161. html += item.renderHtml();
  5162. });
  5163. return html;
  5164. },
  5165. recalc: function () {
  5166. },
  5167. postRender: function () {
  5168. },
  5169. isNative: function () {
  5170. return false;
  5171. }
  5172. });
  5173. var AbsoluteLayout = Layout$1.extend({
  5174. Defaults: {
  5175. containerClass: 'abs-layout',
  5176. controlClass: 'abs-layout-item'
  5177. },
  5178. recalc: function (container) {
  5179. container.items().filter(':visible').each(function (ctrl) {
  5180. var settings = ctrl.settings;
  5181. ctrl.layoutRect({
  5182. x: settings.x,
  5183. y: settings.y,
  5184. w: settings.w,
  5185. h: settings.h
  5186. });
  5187. if (ctrl.recalc) {
  5188. ctrl.recalc();
  5189. }
  5190. });
  5191. },
  5192. renderHtml: function (container) {
  5193. return '<div id="' + container._id + '-absend" class="' + container.classPrefix + 'abs-end"></div>' + this._super(container);
  5194. }
  5195. });
  5196. var Button = Widget.extend({
  5197. Defaults: {
  5198. classes: 'widget btn',
  5199. role: 'button'
  5200. },
  5201. init: function (settings) {
  5202. var self = this;
  5203. var size;
  5204. self._super(settings);
  5205. settings = self.settings;
  5206. size = self.settings.size;
  5207. self.on('click mousedown', function (e) {
  5208. e.preventDefault();
  5209. });
  5210. self.on('touchstart', function (e) {
  5211. self.fire('click', e);
  5212. e.preventDefault();
  5213. });
  5214. if (settings.subtype) {
  5215. self.classes.add(settings.subtype);
  5216. }
  5217. if (size) {
  5218. self.classes.add('btn-' + size);
  5219. }
  5220. if (settings.icon) {
  5221. self.icon(settings.icon);
  5222. }
  5223. },
  5224. icon: function (icon) {
  5225. if (!arguments.length) {
  5226. return this.state.get('icon');
  5227. }
  5228. this.state.set('icon', icon);
  5229. return this;
  5230. },
  5231. repaint: function () {
  5232. var btnElm = this.getEl().firstChild;
  5233. var btnStyle;
  5234. if (btnElm) {
  5235. btnStyle = btnElm.style;
  5236. btnStyle.width = btnStyle.height = '100%';
  5237. }
  5238. this._super();
  5239. },
  5240. renderHtml: function () {
  5241. var self = this, id = self._id, prefix = self.classPrefix;
  5242. var icon = self.state.get('icon'), image;
  5243. var text = self.state.get('text');
  5244. var textHtml = '';
  5245. var ariaPressed;
  5246. var settings = self.settings;
  5247. image = settings.image;
  5248. if (image) {
  5249. icon = 'none';
  5250. if (typeof image !== 'string') {
  5251. image = window.getSelection ? image[0] : image[1];
  5252. }
  5253. image = ' style="background-image: url(\'' + image + '\')"';
  5254. } else {
  5255. image = '';
  5256. }
  5257. if (text) {
  5258. self.classes.add('btn-has-text');
  5259. textHtml = '<span class="' + prefix + 'txt">' + self.encode(text) + '</span>';
  5260. }
  5261. icon = icon ? prefix + 'ico ' + prefix + 'i-' + icon : '';
  5262. ariaPressed = typeof settings.active === 'boolean' ? ' aria-pressed="' + settings.active + '"' : '';
  5263. 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>';
  5264. },
  5265. bindStates: function () {
  5266. var self = this, $ = self.$, textCls = self.classPrefix + 'txt';
  5267. function setButtonText(text) {
  5268. var $span = $('span.' + textCls, self.getEl());
  5269. if (text) {
  5270. if (!$span[0]) {
  5271. $('button:first', self.getEl()).append('<span class="' + textCls + '"></span>');
  5272. $span = $('span.' + textCls, self.getEl());
  5273. }
  5274. $span.html(self.encode(text));
  5275. } else {
  5276. $span.remove();
  5277. }
  5278. self.classes.toggle('btn-has-text', !!text);
  5279. }
  5280. self.state.on('change:text', function (e) {
  5281. setButtonText(e.value);
  5282. });
  5283. self.state.on('change:icon', function (e) {
  5284. var icon = e.value;
  5285. var prefix = self.classPrefix;
  5286. self.settings.icon = icon;
  5287. icon = icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : '';
  5288. var btnElm = self.getEl().firstChild;
  5289. var iconElm = btnElm.getElementsByTagName('i')[0];
  5290. if (icon) {
  5291. if (!iconElm || iconElm !== btnElm.firstChild) {
  5292. iconElm = document.createElement('i');
  5293. btnElm.insertBefore(iconElm, btnElm.firstChild);
  5294. }
  5295. iconElm.className = icon;
  5296. } else if (iconElm) {
  5297. btnElm.removeChild(iconElm);
  5298. }
  5299. setButtonText(self.state.get('text'));
  5300. });
  5301. return self._super();
  5302. }
  5303. });
  5304. var BrowseButton = Button.extend({
  5305. init: function (settings) {
  5306. var self = this;
  5307. settings = global$4.extend({
  5308. text: 'Browse...',
  5309. multiple: false,
  5310. accept: null
  5311. }, settings);
  5312. self._super(settings);
  5313. self.classes.add('browsebutton');
  5314. if (settings.multiple) {
  5315. self.classes.add('multiple');
  5316. }
  5317. },
  5318. postRender: function () {
  5319. var self = this;
  5320. var input = funcs.create('input', {
  5321. type: 'file',
  5322. id: self._id + '-browse',
  5323. accept: self.settings.accept
  5324. });
  5325. self._super();
  5326. global$7(input).on('change', function (e) {
  5327. var files = e.target.files;
  5328. self.value = function () {
  5329. if (!files.length) {
  5330. return null;
  5331. } else if (self.settings.multiple) {
  5332. return files;
  5333. } else {
  5334. return files[0];
  5335. }
  5336. };
  5337. e.preventDefault();
  5338. if (files.length) {
  5339. self.fire('change', e);
  5340. }
  5341. });
  5342. global$7(input).on('click', function (e) {
  5343. e.stopPropagation();
  5344. });
  5345. global$7(self.getEl('button')).on('click', function (e) {
  5346. e.stopPropagation();
  5347. input.click();
  5348. });
  5349. self.getEl().appendChild(input);
  5350. },
  5351. remove: function () {
  5352. global$7(this.getEl('button')).off();
  5353. global$7(this.getEl('input')).off();
  5354. this._super();
  5355. }
  5356. });
  5357. var ButtonGroup = Container.extend({
  5358. Defaults: {
  5359. defaultType: 'button',
  5360. role: 'group'
  5361. },
  5362. renderHtml: function () {
  5363. var self = this, layout = self._layout;
  5364. self.classes.add('btn-group');
  5365. self.preRender();
  5366. layout.preRender(self);
  5367. return '<div id="' + self._id + '" class="' + self.classes + '">' + '<div id="' + self._id + '-body">' + (self.settings.html || '') + layout.renderHtml(self) + '</div>' + '</div>';
  5368. }
  5369. });
  5370. var Checkbox = Widget.extend({
  5371. Defaults: {
  5372. classes: 'checkbox',
  5373. role: 'checkbox',
  5374. checked: false
  5375. },
  5376. init: function (settings) {
  5377. var self = this;
  5378. self._super(settings);
  5379. self.on('click mousedown', function (e) {
  5380. e.preventDefault();
  5381. });
  5382. self.on('click', function (e) {
  5383. e.preventDefault();
  5384. if (!self.disabled()) {
  5385. self.checked(!self.checked());
  5386. }
  5387. });
  5388. self.checked(self.settings.checked);
  5389. },
  5390. checked: function (state) {
  5391. if (!arguments.length) {
  5392. return this.state.get('checked');
  5393. }
  5394. this.state.set('checked', state);
  5395. return this;
  5396. },
  5397. value: function (state) {
  5398. if (!arguments.length) {
  5399. return this.checked();
  5400. }
  5401. return this.checked(state);
  5402. },
  5403. renderHtml: function () {
  5404. var self = this, id = self._id, prefix = self.classPrefix;
  5405. 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>';
  5406. },
  5407. bindStates: function () {
  5408. var self = this;
  5409. function checked(state) {
  5410. self.classes.toggle('checked', state);
  5411. self.aria('checked', state);
  5412. }
  5413. self.state.on('change:text', function (e) {
  5414. self.getEl('al').firstChild.data = self.translate(e.value);
  5415. });
  5416. self.state.on('change:checked change:value', function (e) {
  5417. self.fire('change');
  5418. checked(e.value);
  5419. });
  5420. self.state.on('change:icon', function (e) {
  5421. var icon = e.value;
  5422. var prefix = self.classPrefix;
  5423. if (typeof icon === 'undefined') {
  5424. return self.settings.icon;
  5425. }
  5426. self.settings.icon = icon;
  5427. icon = icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : '';
  5428. var btnElm = self.getEl().firstChild;
  5429. var iconElm = btnElm.getElementsByTagName('i')[0];
  5430. if (icon) {
  5431. if (!iconElm || iconElm !== btnElm.firstChild) {
  5432. iconElm = document.createElement('i');
  5433. btnElm.insertBefore(iconElm, btnElm.firstChild);
  5434. }
  5435. iconElm.className = icon;
  5436. } else if (iconElm) {
  5437. btnElm.removeChild(iconElm);
  5438. }
  5439. });
  5440. if (self.state.get('checked')) {
  5441. checked(true);
  5442. }
  5443. return self._super();
  5444. }
  5445. });
  5446. var global$16 = tinymce.util.Tools.resolve('tinymce.util.VK');
  5447. var ComboBox = Widget.extend({
  5448. init: function (settings) {
  5449. var self = this;
  5450. self._super(settings);
  5451. settings = self.settings;
  5452. self.classes.add('combobox');
  5453. self.subinput = true;
  5454. self.ariaTarget = 'inp';
  5455. settings.menu = settings.menu || settings.values;
  5456. if (settings.menu) {
  5457. settings.icon = 'caret';
  5458. }
  5459. self.on('click', function (e) {
  5460. var elm = e.target;
  5461. var root = self.getEl();
  5462. if (!global$7.contains(root, elm) && elm !== root) {
  5463. return;
  5464. }
  5465. while (elm && elm !== root) {
  5466. if (elm.id && elm.id.indexOf('-open') !== -1) {
  5467. self.fire('action');
  5468. if (settings.menu) {
  5469. self.showMenu();
  5470. if (e.aria) {
  5471. self.menu.items()[0].focus();
  5472. }
  5473. }
  5474. }
  5475. elm = elm.parentNode;
  5476. }
  5477. });
  5478. self.on('keydown', function (e) {
  5479. var rootControl;
  5480. if (e.keyCode === 13 && e.target.nodeName === 'INPUT') {
  5481. e.preventDefault();
  5482. self.parents().reverse().each(function (ctrl) {
  5483. if (ctrl.toJSON) {
  5484. rootControl = ctrl;
  5485. return false;
  5486. }
  5487. });
  5488. self.fire('submit', { data: rootControl.toJSON() });
  5489. }
  5490. });
  5491. self.on('keyup', function (e) {
  5492. if (e.target.nodeName === 'INPUT') {
  5493. var oldValue = self.state.get('value');
  5494. var newValue = e.target.value;
  5495. if (newValue !== oldValue) {
  5496. self.state.set('value', newValue);
  5497. self.fire('autocomplete', e);
  5498. }
  5499. }
  5500. });
  5501. self.on('mouseover', function (e) {
  5502. var tooltip = self.tooltip().moveTo(-65535);
  5503. if (self.statusLevel() && e.target.className.indexOf(self.classPrefix + 'status') !== -1) {
  5504. var statusMessage = self.statusMessage() || 'Ok';
  5505. var rel = tooltip.text(statusMessage).show().testMoveRel(e.target, [
  5506. 'bc-tc',
  5507. 'bc-tl',
  5508. 'bc-tr'
  5509. ]);
  5510. tooltip.classes.toggle('tooltip-n', rel === 'bc-tc');
  5511. tooltip.classes.toggle('tooltip-nw', rel === 'bc-tl');
  5512. tooltip.classes.toggle('tooltip-ne', rel === 'bc-tr');
  5513. tooltip.moveRel(e.target, rel);
  5514. }
  5515. });
  5516. },
  5517. statusLevel: function (value) {
  5518. if (arguments.length > 0) {
  5519. this.state.set('statusLevel', value);
  5520. }
  5521. return this.state.get('statusLevel');
  5522. },
  5523. statusMessage: function (value) {
  5524. if (arguments.length > 0) {
  5525. this.state.set('statusMessage', value);
  5526. }
  5527. return this.state.get('statusMessage');
  5528. },
  5529. showMenu: function () {
  5530. var self = this;
  5531. var settings = self.settings;
  5532. var menu;
  5533. if (!self.menu) {
  5534. menu = settings.menu || [];
  5535. if (menu.length) {
  5536. menu = {
  5537. type: 'menu',
  5538. items: menu
  5539. };
  5540. } else {
  5541. menu.type = menu.type || 'menu';
  5542. }
  5543. self.menu = global$11.create(menu).parent(self).renderTo(self.getContainerElm());
  5544. self.fire('createmenu');
  5545. self.menu.reflow();
  5546. self.menu.on('cancel', function (e) {
  5547. if (e.control === self.menu) {
  5548. self.focus();
  5549. }
  5550. });
  5551. self.menu.on('show hide', function (e) {
  5552. e.control.items().each(function (ctrl) {
  5553. ctrl.active(ctrl.value() === self.value());
  5554. });
  5555. }).fire('show');
  5556. self.menu.on('select', function (e) {
  5557. self.value(e.control.value());
  5558. });
  5559. self.on('focusin', function (e) {
  5560. if (e.target.tagName.toUpperCase() === 'INPUT') {
  5561. self.menu.hide();
  5562. }
  5563. });
  5564. self.aria('expanded', true);
  5565. }
  5566. self.menu.show();
  5567. self.menu.layoutRect({ w: self.layoutRect().w });
  5568. self.menu.moveRel(self.getEl(), self.isRtl() ? [
  5569. 'br-tr',
  5570. 'tr-br'
  5571. ] : [
  5572. 'bl-tl',
  5573. 'tl-bl'
  5574. ]);
  5575. },
  5576. focus: function () {
  5577. this.getEl('inp').focus();
  5578. },
  5579. repaint: function () {
  5580. var self = this, elm = self.getEl(), openElm = self.getEl('open'), rect = self.layoutRect();
  5581. var width, lineHeight, innerPadding = 0;
  5582. var inputElm = elm.firstChild;
  5583. if (self.statusLevel() && self.statusLevel() !== 'none') {
  5584. innerPadding = parseInt(funcs.getRuntimeStyle(inputElm, 'padding-right'), 10) - parseInt(funcs.getRuntimeStyle(inputElm, 'padding-left'), 10);
  5585. }
  5586. if (openElm) {
  5587. width = rect.w - funcs.getSize(openElm).width - 10;
  5588. } else {
  5589. width = rect.w - 10;
  5590. }
  5591. var doc = document;
  5592. if (doc.all && (!doc.documentMode || doc.documentMode <= 8)) {
  5593. lineHeight = self.layoutRect().h - 2 + 'px';
  5594. }
  5595. global$7(inputElm).css({
  5596. width: width - innerPadding,
  5597. lineHeight: lineHeight
  5598. });
  5599. self._super();
  5600. return self;
  5601. },
  5602. postRender: function () {
  5603. var self = this;
  5604. global$7(this.getEl('inp')).on('change', function (e) {
  5605. self.state.set('value', e.target.value);
  5606. self.fire('change', e);
  5607. });
  5608. return self._super();
  5609. },
  5610. renderHtml: function () {
  5611. var self = this, id = self._id, settings = self.settings, prefix = self.classPrefix;
  5612. var value = self.state.get('value') || '';
  5613. var icon, text, openBtnHtml = '', extraAttrs = '', statusHtml = '';
  5614. if ('spellcheck' in settings) {
  5615. extraAttrs += ' spellcheck="' + settings.spellcheck + '"';
  5616. }
  5617. if (settings.maxLength) {
  5618. extraAttrs += ' maxlength="' + settings.maxLength + '"';
  5619. }
  5620. if (settings.size) {
  5621. extraAttrs += ' size="' + settings.size + '"';
  5622. }
  5623. if (settings.subtype) {
  5624. extraAttrs += ' type="' + settings.subtype + '"';
  5625. }
  5626. statusHtml = '<i id="' + id + '-status" class="mce-status mce-ico" style="display: none"></i>';
  5627. if (self.disabled()) {
  5628. extraAttrs += ' disabled="disabled"';
  5629. }
  5630. icon = settings.icon;
  5631. if (icon && icon !== 'caret') {
  5632. icon = prefix + 'ico ' + prefix + 'i-' + settings.icon;
  5633. }
  5634. text = self.state.get('text');
  5635. if (icon || text) {
  5636. 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>';
  5637. self.classes.add('has-open');
  5638. }
  5639. 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>';
  5640. },
  5641. value: function (value) {
  5642. if (arguments.length) {
  5643. this.state.set('value', value);
  5644. return this;
  5645. }
  5646. if (this.state.get('rendered')) {
  5647. this.state.set('value', this.getEl('inp').value);
  5648. }
  5649. return this.state.get('value');
  5650. },
  5651. showAutoComplete: function (items, term) {
  5652. var self = this;
  5653. if (items.length === 0) {
  5654. self.hideMenu();
  5655. return;
  5656. }
  5657. var insert = function (value, title) {
  5658. return function () {
  5659. self.fire('selectitem', {
  5660. title: title,
  5661. value: value
  5662. });
  5663. };
  5664. };
  5665. if (self.menu) {
  5666. self.menu.items().remove();
  5667. } else {
  5668. self.menu = global$11.create({
  5669. type: 'menu',
  5670. classes: 'combobox-menu',
  5671. layout: 'flow'
  5672. }).parent(self).renderTo();
  5673. }
  5674. global$4.each(items, function (item) {
  5675. self.menu.add({
  5676. text: item.title,
  5677. url: item.previewUrl,
  5678. match: term,
  5679. classes: 'menu-item-ellipsis',
  5680. onclick: insert(item.value, item.title)
  5681. });
  5682. });
  5683. self.menu.renderNew();
  5684. self.hideMenu();
  5685. self.menu.on('cancel', function (e) {
  5686. if (e.control.parent() === self.menu) {
  5687. e.stopPropagation();
  5688. self.focus();
  5689. self.hideMenu();
  5690. }
  5691. });
  5692. self.menu.on('select', function () {
  5693. self.focus();
  5694. });
  5695. var maxW = self.layoutRect().w;
  5696. self.menu.layoutRect({
  5697. w: maxW,
  5698. minW: 0,
  5699. maxW: maxW
  5700. });
  5701. self.menu.repaint();
  5702. self.menu.reflow();
  5703. self.menu.show();
  5704. self.menu.moveRel(self.getEl(), self.isRtl() ? [
  5705. 'br-tr',
  5706. 'tr-br'
  5707. ] : [
  5708. 'bl-tl',
  5709. 'tl-bl'
  5710. ]);
  5711. },
  5712. hideMenu: function () {
  5713. if (this.menu) {
  5714. this.menu.hide();
  5715. }
  5716. },
  5717. bindStates: function () {
  5718. var self = this;
  5719. self.state.on('change:value', function (e) {
  5720. if (self.getEl('inp').value !== e.value) {
  5721. self.getEl('inp').value = e.value;
  5722. }
  5723. });
  5724. self.state.on('change:disabled', function (e) {
  5725. self.getEl('inp').disabled = e.value;
  5726. });
  5727. self.state.on('change:statusLevel', function (e) {
  5728. var statusIconElm = self.getEl('status');
  5729. var prefix = self.classPrefix, value = e.value;
  5730. funcs.css(statusIconElm, 'display', value === 'none' ? 'none' : '');
  5731. funcs.toggleClass(statusIconElm, prefix + 'i-checkmark', value === 'ok');
  5732. funcs.toggleClass(statusIconElm, prefix + 'i-warning', value === 'warn');
  5733. funcs.toggleClass(statusIconElm, prefix + 'i-error', value === 'error');
  5734. self.classes.toggle('has-status', value !== 'none');
  5735. self.repaint();
  5736. });
  5737. funcs.on(self.getEl('status'), 'mouseleave', function () {
  5738. self.tooltip().hide();
  5739. });
  5740. self.on('cancel', function (e) {
  5741. if (self.menu && self.menu.visible()) {
  5742. e.stopPropagation();
  5743. self.hideMenu();
  5744. }
  5745. });
  5746. var focusIdx = function (idx, menu) {
  5747. if (menu && menu.items().length > 0) {
  5748. menu.items().eq(idx)[0].focus();
  5749. }
  5750. };
  5751. self.on('keydown', function (e) {
  5752. var keyCode = e.keyCode;
  5753. if (e.target.nodeName === 'INPUT') {
  5754. if (keyCode === global$16.DOWN) {
  5755. e.preventDefault();
  5756. self.fire('autocomplete');
  5757. focusIdx(0, self.menu);
  5758. } else if (keyCode === global$16.UP) {
  5759. e.preventDefault();
  5760. focusIdx(-1, self.menu);
  5761. }
  5762. }
  5763. });
  5764. return self._super();
  5765. },
  5766. remove: function () {
  5767. global$7(this.getEl('inp')).off();
  5768. if (this.menu) {
  5769. this.menu.remove();
  5770. }
  5771. this._super();
  5772. }
  5773. });
  5774. var ColorBox = ComboBox.extend({
  5775. init: function (settings) {
  5776. var self = this;
  5777. settings.spellcheck = false;
  5778. if (settings.onaction) {
  5779. settings.icon = 'none';
  5780. }
  5781. self._super(settings);
  5782. self.classes.add('colorbox');
  5783. self.on('change keyup postrender', function () {
  5784. self.repaintColor(self.value());
  5785. });
  5786. },
  5787. repaintColor: function (value) {
  5788. var openElm = this.getEl('open');
  5789. var elm = openElm ? openElm.getElementsByTagName('i')[0] : null;
  5790. if (elm) {
  5791. try {
  5792. elm.style.background = value;
  5793. } catch (ex) {
  5794. }
  5795. }
  5796. },
  5797. bindStates: function () {
  5798. var self = this;
  5799. self.state.on('change:value', function (e) {
  5800. if (self.state.get('rendered')) {
  5801. self.repaintColor(e.value);
  5802. }
  5803. });
  5804. return self._super();
  5805. }
  5806. });
  5807. var PanelButton = Button.extend({
  5808. showPanel: function () {
  5809. var self = this, settings = self.settings;
  5810. self.classes.add('opened');
  5811. if (!self.panel) {
  5812. var panelSettings = settings.panel;
  5813. if (panelSettings.type) {
  5814. panelSettings = {
  5815. layout: 'grid',
  5816. items: panelSettings
  5817. };
  5818. }
  5819. panelSettings.role = panelSettings.role || 'dialog';
  5820. panelSettings.popover = true;
  5821. panelSettings.autohide = true;
  5822. panelSettings.ariaRoot = true;
  5823. self.panel = new FloatPanel(panelSettings).on('hide', function () {
  5824. self.classes.remove('opened');
  5825. }).on('cancel', function (e) {
  5826. e.stopPropagation();
  5827. self.focus();
  5828. self.hidePanel();
  5829. }).parent(self).renderTo(self.getContainerElm());
  5830. self.panel.fire('show');
  5831. self.panel.reflow();
  5832. } else {
  5833. self.panel.show();
  5834. }
  5835. var rtlRels = [
  5836. 'bc-tc',
  5837. 'bc-tl',
  5838. 'bc-tr'
  5839. ];
  5840. var ltrRels = [
  5841. 'bc-tc',
  5842. 'bc-tr',
  5843. 'bc-tl',
  5844. 'tc-bc',
  5845. 'tc-br',
  5846. 'tc-bl'
  5847. ];
  5848. var rel = self.panel.testMoveRel(self.getEl(), settings.popoverAlign || (self.isRtl() ? rtlRels : ltrRels));
  5849. self.panel.classes.toggle('start', rel.substr(-1) === 'l');
  5850. self.panel.classes.toggle('end', rel.substr(-1) === 'r');
  5851. var isTop = rel.substr(0, 1) === 't';
  5852. self.panel.classes.toggle('bottom', !isTop);
  5853. self.panel.classes.toggle('top', isTop);
  5854. self.panel.moveRel(self.getEl(), rel);
  5855. },
  5856. hidePanel: function () {
  5857. var self = this;
  5858. if (self.panel) {
  5859. self.panel.hide();
  5860. }
  5861. },
  5862. postRender: function () {
  5863. var self = this;
  5864. self.aria('haspopup', true);
  5865. self.on('click', function (e) {
  5866. if (e.control === self) {
  5867. if (self.panel && self.panel.visible()) {
  5868. self.hidePanel();
  5869. } else {
  5870. self.showPanel();
  5871. self.panel.focus(!!e.aria);
  5872. }
  5873. }
  5874. });
  5875. return self._super();
  5876. },
  5877. remove: function () {
  5878. if (this.panel) {
  5879. this.panel.remove();
  5880. this.panel = null;
  5881. }
  5882. return this._super();
  5883. }
  5884. });
  5885. var DOM = global$2.DOM;
  5886. var ColorButton = PanelButton.extend({
  5887. init: function (settings) {
  5888. this._super(settings);
  5889. this.classes.add('splitbtn');
  5890. this.classes.add('colorbutton');
  5891. },
  5892. color: function (color) {
  5893. if (color) {
  5894. this._color = color;
  5895. this.getEl('preview').style.backgroundColor = color;
  5896. return this;
  5897. }
  5898. return this._color;
  5899. },
  5900. resetColor: function () {
  5901. this._color = null;
  5902. this.getEl('preview').style.backgroundColor = null;
  5903. return this;
  5904. },
  5905. renderHtml: function () {
  5906. var self = this, id = self._id, prefix = self.classPrefix, text = self.state.get('text');
  5907. var icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : '';
  5908. var image = self.settings.image ? ' style="background-image: url(\'' + self.settings.image + '\')"' : '';
  5909. var textHtml = '';
  5910. if (text) {
  5911. self.classes.add('btn-has-text');
  5912. textHtml = '<span class="' + prefix + 'txt">' + self.encode(text) + '</span>';
  5913. }
  5914. 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>';
  5915. },
  5916. postRender: function () {
  5917. var self = this, onClickHandler = self.settings.onclick;
  5918. self.on('click', function (e) {
  5919. if (e.aria && e.aria.key === 'down') {
  5920. return;
  5921. }
  5922. if (e.control === self && !DOM.getParent(e.target, '.' + self.classPrefix + 'open')) {
  5923. e.stopImmediatePropagation();
  5924. onClickHandler.call(self, e);
  5925. }
  5926. });
  5927. delete self.settings.onclick;
  5928. return self._super();
  5929. }
  5930. });
  5931. var global$17 = tinymce.util.Tools.resolve('tinymce.util.Color');
  5932. var ColorPicker = Widget.extend({
  5933. Defaults: { classes: 'widget colorpicker' },
  5934. init: function (settings) {
  5935. this._super(settings);
  5936. },
  5937. postRender: function () {
  5938. var self = this;
  5939. var color = self.color();
  5940. var hsv, hueRootElm, huePointElm, svRootElm, svPointElm;
  5941. hueRootElm = self.getEl('h');
  5942. huePointElm = self.getEl('hp');
  5943. svRootElm = self.getEl('sv');
  5944. svPointElm = self.getEl('svp');
  5945. function getPos(elm, event) {
  5946. var pos = funcs.getPos(elm);
  5947. var x, y;
  5948. x = event.pageX - pos.x;
  5949. y = event.pageY - pos.y;
  5950. x = Math.max(0, Math.min(x / elm.clientWidth, 1));
  5951. y = Math.max(0, Math.min(y / elm.clientHeight, 1));
  5952. return {
  5953. x: x,
  5954. y: y
  5955. };
  5956. }
  5957. function updateColor(hsv, hueUpdate) {
  5958. var hue = (360 - hsv.h) / 360;
  5959. funcs.css(huePointElm, { top: hue * 100 + '%' });
  5960. if (!hueUpdate) {
  5961. funcs.css(svPointElm, {
  5962. left: hsv.s + '%',
  5963. top: 100 - hsv.v + '%'
  5964. });
  5965. }
  5966. svRootElm.style.background = global$17({
  5967. s: 100,
  5968. v: 100,
  5969. h: hsv.h
  5970. }).toHex();
  5971. self.color().parse({
  5972. s: hsv.s,
  5973. v: hsv.v,
  5974. h: hsv.h
  5975. });
  5976. }
  5977. function updateSaturationAndValue(e) {
  5978. var pos;
  5979. pos = getPos(svRootElm, e);
  5980. hsv.s = pos.x * 100;
  5981. hsv.v = (1 - pos.y) * 100;
  5982. updateColor(hsv);
  5983. self.fire('change');
  5984. }
  5985. function updateHue(e) {
  5986. var pos;
  5987. pos = getPos(hueRootElm, e);
  5988. hsv = color.toHsv();
  5989. hsv.h = (1 - pos.y) * 360;
  5990. updateColor(hsv, true);
  5991. self.fire('change');
  5992. }
  5993. self._repaint = function () {
  5994. hsv = color.toHsv();
  5995. updateColor(hsv);
  5996. };
  5997. self._super();
  5998. self._svdraghelper = new DragHelper(self._id + '-sv', {
  5999. start: updateSaturationAndValue,
  6000. drag: updateSaturationAndValue
  6001. });
  6002. self._hdraghelper = new DragHelper(self._id + '-h', {
  6003. start: updateHue,
  6004. drag: updateHue
  6005. });
  6006. self._repaint();
  6007. },
  6008. rgb: function () {
  6009. return this.color().toRgb();
  6010. },
  6011. value: function (value) {
  6012. var self = this;
  6013. if (arguments.length) {
  6014. self.color().parse(value);
  6015. if (self._rendered) {
  6016. self._repaint();
  6017. }
  6018. } else {
  6019. return self.color().toHex();
  6020. }
  6021. },
  6022. color: function () {
  6023. if (!this._color) {
  6024. this._color = global$17();
  6025. }
  6026. return this._color;
  6027. },
  6028. renderHtml: function () {
  6029. var self = this;
  6030. var id = self._id;
  6031. var prefix = self.classPrefix;
  6032. var hueHtml;
  6033. var stops = '#ff0000,#ff0080,#ff00ff,#8000ff,#0000ff,#0080ff,#00ffff,#00ff80,#00ff00,#80ff00,#ffff00,#ff8000,#ff0000';
  6034. function getOldIeFallbackHtml() {
  6035. var i, l, html = '', gradientPrefix, stopsList;
  6036. gradientPrefix = 'filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr=';
  6037. stopsList = stops.split(',');
  6038. for (i = 0, l = stopsList.length - 1; i < l; i++) {
  6039. 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>';
  6040. }
  6041. return html;
  6042. }
  6043. var gradientCssText = 'background: -ms-linear-gradient(top,' + stops + ');' + 'background: linear-gradient(to bottom,' + stops + ');';
  6044. hueHtml = '<div id="' + id + '-h" class="' + prefix + 'colorpicker-h" style="' + gradientCssText + '">' + getOldIeFallbackHtml() + '<div id="' + id + '-hp" class="' + prefix + 'colorpicker-h-marker"></div>' + '</div>';
  6045. 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>';
  6046. }
  6047. });
  6048. var DropZone = Widget.extend({
  6049. init: function (settings) {
  6050. var self = this;
  6051. settings = global$4.extend({
  6052. height: 100,
  6053. text: 'Drop an image here',
  6054. multiple: false,
  6055. accept: null
  6056. }, settings);
  6057. self._super(settings);
  6058. self.classes.add('dropzone');
  6059. if (settings.multiple) {
  6060. self.classes.add('multiple');
  6061. }
  6062. },
  6063. renderHtml: function () {
  6064. var self = this;
  6065. var attrs, elm;
  6066. var cfg = self.settings;
  6067. attrs = {
  6068. id: self._id,
  6069. hidefocus: '1'
  6070. };
  6071. elm = funcs.create('div', attrs, '<span>' + this.translate(cfg.text) + '</span>');
  6072. if (cfg.height) {
  6073. funcs.css(elm, 'height', cfg.height + 'px');
  6074. }
  6075. if (cfg.width) {
  6076. funcs.css(elm, 'width', cfg.width + 'px');
  6077. }
  6078. elm.className = self.classes;
  6079. return elm.outerHTML;
  6080. },
  6081. postRender: function () {
  6082. var self = this;
  6083. var toggleDragClass = function (e) {
  6084. e.preventDefault();
  6085. self.classes.toggle('dragenter');
  6086. self.getEl().className = self.classes;
  6087. };
  6088. var filter = function (files) {
  6089. var accept = self.settings.accept;
  6090. if (typeof accept !== 'string') {
  6091. return files;
  6092. }
  6093. var re = new RegExp('(' + accept.split(/\s*,\s*/).join('|') + ')$', 'i');
  6094. return global$4.grep(files, function (file) {
  6095. return re.test(file.name);
  6096. });
  6097. };
  6098. self._super();
  6099. self.$el.on('dragover', function (e) {
  6100. e.preventDefault();
  6101. });
  6102. self.$el.on('dragenter', toggleDragClass);
  6103. self.$el.on('dragleave', toggleDragClass);
  6104. self.$el.on('drop', function (e) {
  6105. e.preventDefault();
  6106. if (self.state.get('disabled')) {
  6107. return;
  6108. }
  6109. var files = filter(e.dataTransfer.files);
  6110. self.value = function () {
  6111. if (!files.length) {
  6112. return null;
  6113. } else if (self.settings.multiple) {
  6114. return files;
  6115. } else {
  6116. return files[0];
  6117. }
  6118. };
  6119. if (files.length) {
  6120. self.fire('change', e);
  6121. }
  6122. });
  6123. },
  6124. remove: function () {
  6125. this.$el.off();
  6126. this._super();
  6127. }
  6128. });
  6129. var Path = Widget.extend({
  6130. init: function (settings) {
  6131. var self = this;
  6132. if (!settings.delimiter) {
  6133. settings.delimiter = '\xBB';
  6134. }
  6135. self._super(settings);
  6136. self.classes.add('path');
  6137. self.canFocus = true;
  6138. self.on('click', function (e) {
  6139. var index;
  6140. var target = e.target;
  6141. if (index = target.getAttribute('data-index')) {
  6142. self.fire('select', {
  6143. value: self.row()[index],
  6144. index: index
  6145. });
  6146. }
  6147. });
  6148. self.row(self.settings.row);
  6149. },
  6150. focus: function () {
  6151. var self = this;
  6152. self.getEl().firstChild.focus();
  6153. return self;
  6154. },
  6155. row: function (row) {
  6156. if (!arguments.length) {
  6157. return this.state.get('row');
  6158. }
  6159. this.state.set('row', row);
  6160. return this;
  6161. },
  6162. renderHtml: function () {
  6163. var self = this;
  6164. return '<div id="' + self._id + '" class="' + self.classes + '">' + self._getDataPathHtml(self.state.get('row')) + '</div>';
  6165. },
  6166. bindStates: function () {
  6167. var self = this;
  6168. self.state.on('change:row', function (e) {
  6169. self.innerHtml(self._getDataPathHtml(e.value));
  6170. });
  6171. return self._super();
  6172. },
  6173. _getDataPathHtml: function (data) {
  6174. var self = this;
  6175. var parts = data || [];
  6176. var i, l, html = '';
  6177. var prefix = self.classPrefix;
  6178. for (i = 0, l = parts.length; i < l; i++) {
  6179. 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>';
  6180. }
  6181. if (!html) {
  6182. html = '<div class="' + prefix + 'path-item">\xA0</div>';
  6183. }
  6184. return html;
  6185. }
  6186. });
  6187. var ElementPath = Path.extend({
  6188. postRender: function () {
  6189. var self = this, editor = self.settings.editor;
  6190. function isHidden(elm) {
  6191. if (elm.nodeType === 1) {
  6192. if (elm.nodeName === 'BR' || !!elm.getAttribute('data-mce-bogus')) {
  6193. return true;
  6194. }
  6195. if (elm.getAttribute('data-mce-type') === 'bookmark') {
  6196. return true;
  6197. }
  6198. }
  6199. return false;
  6200. }
  6201. if (editor.settings.elementpath !== false) {
  6202. self.on('select', function (e) {
  6203. editor.focus();
  6204. editor.selection.select(this.row()[e.index].element);
  6205. editor.nodeChanged();
  6206. });
  6207. editor.on('nodeChange', function (e) {
  6208. var outParents = [];
  6209. var parents = e.parents;
  6210. var i = parents.length;
  6211. while (i--) {
  6212. if (parents[i].nodeType === 1 && !isHidden(parents[i])) {
  6213. var args = editor.fire('ResolveName', {
  6214. name: parents[i].nodeName.toLowerCase(),
  6215. target: parents[i]
  6216. });
  6217. if (!args.isDefaultPrevented()) {
  6218. outParents.push({
  6219. name: args.name,
  6220. element: parents[i]
  6221. });
  6222. }
  6223. if (args.isPropagationStopped()) {
  6224. break;
  6225. }
  6226. }
  6227. }
  6228. self.row(outParents);
  6229. });
  6230. }
  6231. return self._super();
  6232. }
  6233. });
  6234. var FormItem = Container.extend({
  6235. Defaults: {
  6236. layout: 'flex',
  6237. align: 'center',
  6238. defaults: { flex: 1 }
  6239. },
  6240. renderHtml: function () {
  6241. var self = this, layout = self._layout, prefix = self.classPrefix;
  6242. self.classes.add('formitem');
  6243. layout.preRender(self);
  6244. 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>';
  6245. }
  6246. });
  6247. var Form = Container.extend({
  6248. Defaults: {
  6249. containerCls: 'form',
  6250. layout: 'flex',
  6251. direction: 'column',
  6252. align: 'stretch',
  6253. flex: 1,
  6254. padding: 15,
  6255. labelGap: 30,
  6256. spacing: 10,
  6257. callbacks: {
  6258. submit: function () {
  6259. this.submit();
  6260. }
  6261. }
  6262. },
  6263. preRender: function () {
  6264. var self = this, items = self.items();
  6265. if (!self.settings.formItemDefaults) {
  6266. self.settings.formItemDefaults = {
  6267. layout: 'flex',
  6268. autoResize: 'overflow',
  6269. defaults: { flex: 1 }
  6270. };
  6271. }
  6272. items.each(function (ctrl) {
  6273. var formItem;
  6274. var label = ctrl.settings.label;
  6275. if (label) {
  6276. formItem = new FormItem(global$4.extend({
  6277. items: {
  6278. type: 'label',
  6279. id: ctrl._id + '-l',
  6280. text: label,
  6281. flex: 0,
  6282. forId: ctrl._id,
  6283. disabled: ctrl.disabled()
  6284. }
  6285. }, self.settings.formItemDefaults));
  6286. formItem.type = 'formitem';
  6287. ctrl.aria('labelledby', ctrl._id + '-l');
  6288. if (typeof ctrl.settings.flex === 'undefined') {
  6289. ctrl.settings.flex = 1;
  6290. }
  6291. self.replace(ctrl, formItem);
  6292. formItem.add(ctrl);
  6293. }
  6294. });
  6295. },
  6296. submit: function () {
  6297. return this.fire('submit', { data: this.toJSON() });
  6298. },
  6299. postRender: function () {
  6300. var self = this;
  6301. self._super();
  6302. self.fromJSON(self.settings.data);
  6303. },
  6304. bindStates: function () {
  6305. var self = this;
  6306. self._super();
  6307. function recalcLabels() {
  6308. var maxLabelWidth = 0;
  6309. var labels = [];
  6310. var i, labelGap, items;
  6311. if (self.settings.labelGapCalc === false) {
  6312. return;
  6313. }
  6314. if (self.settings.labelGapCalc === 'children') {
  6315. items = self.find('formitem');
  6316. } else {
  6317. items = self.items();
  6318. }
  6319. items.filter('formitem').each(function (item) {
  6320. var labelCtrl = item.items()[0], labelWidth = labelCtrl.getEl().clientWidth;
  6321. maxLabelWidth = labelWidth > maxLabelWidth ? labelWidth : maxLabelWidth;
  6322. labels.push(labelCtrl);
  6323. });
  6324. labelGap = self.settings.labelGap || 0;
  6325. i = labels.length;
  6326. while (i--) {
  6327. labels[i].settings.minWidth = maxLabelWidth + labelGap;
  6328. }
  6329. }
  6330. self.on('show', recalcLabels);
  6331. recalcLabels();
  6332. }
  6333. });
  6334. var FieldSet = Form.extend({
  6335. Defaults: {
  6336. containerCls: 'fieldset',
  6337. layout: 'flex',
  6338. direction: 'column',
  6339. align: 'stretch',
  6340. flex: 1,
  6341. padding: '25 15 5 15',
  6342. labelGap: 30,
  6343. spacing: 10,
  6344. border: 1
  6345. },
  6346. renderHtml: function () {
  6347. var self = this, layout = self._layout, prefix = self.classPrefix;
  6348. self.preRender();
  6349. layout.preRender(self);
  6350. 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>';
  6351. }
  6352. });
  6353. var unique$1 = 0;
  6354. var generate = function (prefix) {
  6355. var date = new Date();
  6356. var time = date.getTime();
  6357. var random = Math.floor(Math.random() * 1000000000);
  6358. unique$1++;
  6359. return prefix + '_' + random + unique$1 + String(time);
  6360. };
  6361. var $_9budsn19ojh8lz7t7 = { generate: generate };
  6362. var fromHtml = function (html, scope) {
  6363. var doc = scope || document;
  6364. var div = doc.createElement('div');
  6365. div.innerHTML = html;
  6366. if (!div.hasChildNodes() || div.childNodes.length > 1) {
  6367. console.error('HTML does not have a single root node', html);
  6368. throw 'HTML must have a single root node';
  6369. }
  6370. return fromDom(div.childNodes[0]);
  6371. };
  6372. var fromTag = function (tag, scope) {
  6373. var doc = scope || document;
  6374. var node = doc.createElement(tag);
  6375. return fromDom(node);
  6376. };
  6377. var fromText = function (text, scope) {
  6378. var doc = scope || document;
  6379. var node = doc.createTextNode(text);
  6380. return fromDom(node);
  6381. };
  6382. var fromDom = function (node) {
  6383. if (node === null || node === undefined)
  6384. throw new Error('Node cannot be null or undefined');
  6385. return { dom: $_2jrs7h17njh8lz7m6.constant(node) };
  6386. };
  6387. var fromPoint = function (doc, x, y) {
  6388. return Option.from(doc.dom().elementFromPoint(x, y)).map(fromDom);
  6389. };
  6390. var $_b0tm8x19pjh8lz7t9 = {
  6391. fromHtml: fromHtml,
  6392. fromTag: fromTag,
  6393. fromText: fromText,
  6394. fromDom: fromDom,
  6395. fromPoint: fromPoint
  6396. };
  6397. var cached = function (f) {
  6398. var called = false;
  6399. var r;
  6400. return function () {
  6401. if (!called) {
  6402. called = true;
  6403. r = f.apply(null, arguments);
  6404. }
  6405. return r;
  6406. };
  6407. };
  6408. var $_1wqnm519tjh8lz7tm = { cached: cached };
  6409. var $_e8p44419vjh8lz7to = {
  6410. ATTRIBUTE: 2,
  6411. CDATA_SECTION: 4,
  6412. COMMENT: 8,
  6413. DOCUMENT: 9,
  6414. DOCUMENT_TYPE: 10,
  6415. DOCUMENT_FRAGMENT: 11,
  6416. ELEMENT: 1,
  6417. TEXT: 3,
  6418. PROCESSING_INSTRUCTION: 7,
  6419. ENTITY_REFERENCE: 5,
  6420. ENTITY: 6,
  6421. NOTATION: 12
  6422. };
  6423. var name = function (element) {
  6424. var r = element.dom().nodeName;
  6425. return r.toLowerCase();
  6426. };
  6427. var type = function (element) {
  6428. return element.dom().nodeType;
  6429. };
  6430. var value = function (element) {
  6431. return element.dom().nodeValue;
  6432. };
  6433. var isType$2 = function (t) {
  6434. return function (element) {
  6435. return type(element) === t;
  6436. };
  6437. };
  6438. var isComment = function (element) {
  6439. return type(element) === $_e8p44419vjh8lz7to.COMMENT || name(element) === '#comment';
  6440. };
  6441. var isElement = isType$2($_e8p44419vjh8lz7to.ELEMENT);
  6442. var isText = isType$2($_e8p44419vjh8lz7to.TEXT);
  6443. var isDocument = isType$2($_e8p44419vjh8lz7to.DOCUMENT);
  6444. var $_eoy6dw19ujh8lz7tn = {
  6445. name: name,
  6446. type: type,
  6447. value: value,
  6448. isElement: isElement,
  6449. isText: isText,
  6450. isDocument: isDocument,
  6451. isComment: isComment
  6452. };
  6453. var inBody = function (element) {
  6454. var dom = $_eoy6dw19ujh8lz7tn.isText(element) ? element.dom().parentNode : element.dom();
  6455. return dom !== undefined && dom !== null && dom.ownerDocument.body.contains(dom);
  6456. };
  6457. var body = $_1wqnm519tjh8lz7tm.cached(function () {
  6458. return getBody($_b0tm8x19pjh8lz7t9.fromDom(document));
  6459. });
  6460. var getBody = function (doc) {
  6461. var body = doc.dom().body;
  6462. if (body === null || body === undefined)
  6463. throw 'Body is not available yet';
  6464. return $_b0tm8x19pjh8lz7t9.fromDom(body);
  6465. };
  6466. var $_17whhl19sjh8lz7tj = {
  6467. body: body,
  6468. getBody: getBody,
  6469. inBody: inBody
  6470. };
  6471. function Immutable () {
  6472. var fields = [];
  6473. for (var _i = 0; _i < arguments.length; _i++) {
  6474. fields[_i] = arguments[_i];
  6475. }
  6476. return function () {
  6477. var values = [];
  6478. for (var _i = 0; _i < arguments.length; _i++) {
  6479. values[_i] = arguments[_i];
  6480. }
  6481. if (fields.length !== values.length) {
  6482. throw new Error('Wrong number of arguments to struct. Expected "[' + fields.length + ']", got ' + values.length + ' arguments');
  6483. }
  6484. var struct = {};
  6485. $_qgcal17ljh8lz7ly.each(fields, function (name, i) {
  6486. struct[name] = $_2jrs7h17njh8lz7m6.constant(values[i]);
  6487. });
  6488. return struct;
  6489. };
  6490. }
  6491. var keys = function () {
  6492. var fastKeys = Object.keys;
  6493. var slowKeys = function (o) {
  6494. var r = [];
  6495. for (var i in o) {
  6496. if (o.hasOwnProperty(i)) {
  6497. r.push(i);
  6498. }
  6499. }
  6500. return r;
  6501. };
  6502. return fastKeys === undefined ? slowKeys : fastKeys;
  6503. }();
  6504. var each$1 = function (obj, f) {
  6505. var props = keys(obj);
  6506. for (var k = 0, len = props.length; k < len; k++) {
  6507. var i = props[k];
  6508. var x = obj[i];
  6509. f(x, i, obj);
  6510. }
  6511. };
  6512. var objectMap = function (obj, f) {
  6513. return tupleMap(obj, function (x, i, obj) {
  6514. return {
  6515. k: i,
  6516. v: f(x, i, obj)
  6517. };
  6518. });
  6519. };
  6520. var tupleMap = function (obj, f) {
  6521. var r = {};
  6522. each$1(obj, function (x, i) {
  6523. var tuple = f(x, i, obj);
  6524. r[tuple.k] = tuple.v;
  6525. });
  6526. return r;
  6527. };
  6528. var bifilter = function (obj, pred) {
  6529. var t = {};
  6530. var f = {};
  6531. each$1(obj, function (x, i) {
  6532. var branch = pred(x, i) ? t : f;
  6533. branch[i] = x;
  6534. });
  6535. return {
  6536. t: t,
  6537. f: f
  6538. };
  6539. };
  6540. var mapToArray = function (obj, f) {
  6541. var r = [];
  6542. each$1(obj, function (value, name) {
  6543. r.push(f(value, name));
  6544. });
  6545. return r;
  6546. };
  6547. var find$1 = function (obj, pred) {
  6548. var props = keys(obj);
  6549. for (var k = 0, len = props.length; k < len; k++) {
  6550. var i = props[k];
  6551. var x = obj[i];
  6552. if (pred(x, i, obj)) {
  6553. return Option.some(x);
  6554. }
  6555. }
  6556. return Option.none();
  6557. };
  6558. var values = function (obj) {
  6559. return mapToArray(obj, function (v) {
  6560. return v;
  6561. });
  6562. };
  6563. var size = function (obj) {
  6564. return values(obj).length;
  6565. };
  6566. var $_3d51zb1a0jh8lz7ug = {
  6567. bifilter: bifilter,
  6568. each: each$1,
  6569. map: objectMap,
  6570. mapToArray: mapToArray,
  6571. tupleMap: tupleMap,
  6572. find: find$1,
  6573. keys: keys,
  6574. values: values,
  6575. size: size
  6576. };
  6577. var sort$1 = function (arr) {
  6578. return arr.slice(0).sort();
  6579. };
  6580. var reqMessage = function (required, keys) {
  6581. throw new Error('All required keys (' + sort$1(required).join(', ') + ') were not specified. Specified keys were: ' + sort$1(keys).join(', ') + '.');
  6582. };
  6583. var unsuppMessage = function (unsupported) {
  6584. throw new Error('Unsupported keys for object: ' + sort$1(unsupported).join(', '));
  6585. };
  6586. var validateStrArr = function (label, array) {
  6587. if (!$_55hqur17ojh8lz7m9.isArray(array))
  6588. throw new Error('The ' + label + ' fields must be an array. Was: ' + array + '.');
  6589. $_qgcal17ljh8lz7ly.each(array, function (a) {
  6590. if (!$_55hqur17ojh8lz7m9.isString(a))
  6591. throw new Error('The value ' + a + ' in the ' + label + ' fields was not a string.');
  6592. });
  6593. };
  6594. var invalidTypeMessage = function (incorrect, type) {
  6595. throw new Error('All values need to be of type: ' + type + '. Keys (' + sort$1(incorrect).join(', ') + ') were not.');
  6596. };
  6597. var checkDupes = function (everything) {
  6598. var sorted = sort$1(everything);
  6599. var dupe = $_qgcal17ljh8lz7ly.find(sorted, function (s, i) {
  6600. return i < sorted.length - 1 && s === sorted[i + 1];
  6601. });
  6602. dupe.each(function (d) {
  6603. throw new Error('The field: ' + d + ' occurs more than once in the combined fields: [' + sorted.join(', ') + '].');
  6604. });
  6605. };
  6606. var $_6f9omp1a1jh8lz7ui = {
  6607. sort: sort$1,
  6608. reqMessage: reqMessage,
  6609. unsuppMessage: unsuppMessage,
  6610. validateStrArr: validateStrArr,
  6611. invalidTypeMessage: invalidTypeMessage,
  6612. checkDupes: checkDupes
  6613. };
  6614. function MixedBag (required, optional) {
  6615. var everything = required.concat(optional);
  6616. if (everything.length === 0)
  6617. throw new Error('You must specify at least one required or optional field.');
  6618. $_6f9omp1a1jh8lz7ui.validateStrArr('required', required);
  6619. $_6f9omp1a1jh8lz7ui.validateStrArr('optional', optional);
  6620. $_6f9omp1a1jh8lz7ui.checkDupes(everything);
  6621. return function (obj) {
  6622. var keys = $_3d51zb1a0jh8lz7ug.keys(obj);
  6623. var allReqd = $_qgcal17ljh8lz7ly.forall(required, function (req) {
  6624. return $_qgcal17ljh8lz7ly.contains(keys, req);
  6625. });
  6626. if (!allReqd)
  6627. $_6f9omp1a1jh8lz7ui.reqMessage(required, keys);
  6628. var unsupported = $_qgcal17ljh8lz7ly.filter(keys, function (key) {
  6629. return !$_qgcal17ljh8lz7ly.contains(everything, key);
  6630. });
  6631. if (unsupported.length > 0)
  6632. $_6f9omp1a1jh8lz7ui.unsuppMessage(unsupported);
  6633. var r = {};
  6634. $_qgcal17ljh8lz7ly.each(required, function (req) {
  6635. r[req] = $_2jrs7h17njh8lz7m6.constant(obj[req]);
  6636. });
  6637. $_qgcal17ljh8lz7ly.each(optional, function (opt) {
  6638. r[opt] = $_2jrs7h17njh8lz7m6.constant(Object.prototype.hasOwnProperty.call(obj, opt) ? Option.some(obj[opt]) : Option.none());
  6639. });
  6640. return r;
  6641. };
  6642. }
  6643. var $_5b3y8019xjh8lz7u2 = {
  6644. immutable: Immutable,
  6645. immutableBag: MixedBag
  6646. };
  6647. var toArray = function (target, f) {
  6648. var r = [];
  6649. var recurse = function (e) {
  6650. r.push(e);
  6651. return f(e);
  6652. };
  6653. var cur = f(target);
  6654. do {
  6655. cur = cur.bind(recurse);
  6656. } while (cur.isSome());
  6657. return r;
  6658. };
  6659. var $_8wc96i1a2jh8lz7uk = { toArray: toArray };
  6660. var node = function () {
  6661. var f = $_791eis18mjh8lz7py.getOrDie('Node');
  6662. return f;
  6663. };
  6664. var compareDocumentPosition = function (a, b, match) {
  6665. return (a.compareDocumentPosition(b) & match) !== 0;
  6666. };
  6667. var documentPositionPreceding = function (a, b) {
  6668. return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_PRECEDING);
  6669. };
  6670. var documentPositionContainedBy = function (a, b) {
  6671. return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_CONTAINED_BY);
  6672. };
  6673. var $_ect2cb1a4jh8lz7ux = {
  6674. documentPositionPreceding: documentPositionPreceding,
  6675. documentPositionContainedBy: documentPositionContainedBy
  6676. };
  6677. var firstMatch = function (regexes, s) {
  6678. for (var i = 0; i < regexes.length; i++) {
  6679. var x = regexes[i];
  6680. if (x.test(s))
  6681. return x;
  6682. }
  6683. return undefined;
  6684. };
  6685. var find$2 = function (regexes, agent) {
  6686. var r = firstMatch(regexes, agent);
  6687. if (!r)
  6688. return {
  6689. major: 0,
  6690. minor: 0
  6691. };
  6692. var group = function (i) {
  6693. return Number(agent.replace(r, '$' + i));
  6694. };
  6695. return nu(group(1), group(2));
  6696. };
  6697. var detect = function (versionRegexes, agent) {
  6698. var cleanedAgent = String(agent).toLowerCase();
  6699. if (versionRegexes.length === 0)
  6700. return unknown();
  6701. return find$2(versionRegexes, cleanedAgent);
  6702. };
  6703. var unknown = function () {
  6704. return nu(0, 0);
  6705. };
  6706. var nu = function (major, minor) {
  6707. return {
  6708. major: major,
  6709. minor: minor
  6710. };
  6711. };
  6712. var $_e2rcnb1a8jh8lz7v7 = {
  6713. nu: nu,
  6714. detect: detect,
  6715. unknown: unknown
  6716. };
  6717. var edge = 'Edge';
  6718. var chrome = 'Chrome';
  6719. var ie = 'IE';
  6720. var opera = 'Opera';
  6721. var firefox = 'Firefox';
  6722. var safari = 'Safari';
  6723. var isBrowser = function (name, current) {
  6724. return function () {
  6725. return current === name;
  6726. };
  6727. };
  6728. var unknown$1 = function () {
  6729. return nu$1({
  6730. current: undefined,
  6731. version: $_e2rcnb1a8jh8lz7v7.unknown()
  6732. });
  6733. };
  6734. var nu$1 = function (info) {
  6735. var current = info.current;
  6736. var version = info.version;
  6737. return {
  6738. current: current,
  6739. version: version,
  6740. isEdge: isBrowser(edge, current),
  6741. isChrome: isBrowser(chrome, current),
  6742. isIE: isBrowser(ie, current),
  6743. isOpera: isBrowser(opera, current),
  6744. isFirefox: isBrowser(firefox, current),
  6745. isSafari: isBrowser(safari, current)
  6746. };
  6747. };
  6748. var $_2yklpp1a7jh8lz7v3 = {
  6749. unknown: unknown$1,
  6750. nu: nu$1,
  6751. edge: $_2jrs7h17njh8lz7m6.constant(edge),
  6752. chrome: $_2jrs7h17njh8lz7m6.constant(chrome),
  6753. ie: $_2jrs7h17njh8lz7m6.constant(ie),
  6754. opera: $_2jrs7h17njh8lz7m6.constant(opera),
  6755. firefox: $_2jrs7h17njh8lz7m6.constant(firefox),
  6756. safari: $_2jrs7h17njh8lz7m6.constant(safari)
  6757. };
  6758. var windows$1 = 'Windows';
  6759. var ios = 'iOS';
  6760. var android = 'Android';
  6761. var linux = 'Linux';
  6762. var osx = 'OSX';
  6763. var solaris = 'Solaris';
  6764. var freebsd = 'FreeBSD';
  6765. var isOS = function (name, current) {
  6766. return function () {
  6767. return current === name;
  6768. };
  6769. };
  6770. var unknown$2 = function () {
  6771. return nu$2({
  6772. current: undefined,
  6773. version: $_e2rcnb1a8jh8lz7v7.unknown()
  6774. });
  6775. };
  6776. var nu$2 = function (info) {
  6777. var current = info.current;
  6778. var version = info.version;
  6779. return {
  6780. current: current,
  6781. version: version,
  6782. isWindows: isOS(windows$1, current),
  6783. isiOS: isOS(ios, current),
  6784. isAndroid: isOS(android, current),
  6785. isOSX: isOS(osx, current),
  6786. isLinux: isOS(linux, current),
  6787. isSolaris: isOS(solaris, current),
  6788. isFreeBSD: isOS(freebsd, current)
  6789. };
  6790. };
  6791. var $_dm2ktf1a9jh8lz7v8 = {
  6792. unknown: unknown$2,
  6793. nu: nu$2,
  6794. windows: $_2jrs7h17njh8lz7m6.constant(windows$1),
  6795. ios: $_2jrs7h17njh8lz7m6.constant(ios),
  6796. android: $_2jrs7h17njh8lz7m6.constant(android),
  6797. linux: $_2jrs7h17njh8lz7m6.constant(linux),
  6798. osx: $_2jrs7h17njh8lz7m6.constant(osx),
  6799. solaris: $_2jrs7h17njh8lz7m6.constant(solaris),
  6800. freebsd: $_2jrs7h17njh8lz7m6.constant(freebsd)
  6801. };
  6802. function DeviceType (os, browser, userAgent) {
  6803. var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;
  6804. var isiPhone = os.isiOS() && !isiPad;
  6805. var isAndroid3 = os.isAndroid() && os.version.major === 3;
  6806. var isAndroid4 = os.isAndroid() && os.version.major === 4;
  6807. var isTablet = isiPad || isAndroid3 || isAndroid4 && /mobile/i.test(userAgent) === true;
  6808. var isTouch = os.isiOS() || os.isAndroid();
  6809. var isPhone = isTouch && !isTablet;
  6810. var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;
  6811. return {
  6812. isiPad: $_2jrs7h17njh8lz7m6.constant(isiPad),
  6813. isiPhone: $_2jrs7h17njh8lz7m6.constant(isiPhone),
  6814. isTablet: $_2jrs7h17njh8lz7m6.constant(isTablet),
  6815. isPhone: $_2jrs7h17njh8lz7m6.constant(isPhone),
  6816. isTouch: $_2jrs7h17njh8lz7m6.constant(isTouch),
  6817. isAndroid: os.isAndroid,
  6818. isiOS: os.isiOS,
  6819. isWebView: $_2jrs7h17njh8lz7m6.constant(iOSwebview)
  6820. };
  6821. }
  6822. var detect$1 = function (candidates, userAgent) {
  6823. var agent = String(userAgent).toLowerCase();
  6824. return $_qgcal17ljh8lz7ly.find(candidates, function (candidate) {
  6825. return candidate.search(agent);
  6826. });
  6827. };
  6828. var detectBrowser = function (browsers, userAgent) {
  6829. return detect$1(browsers, userAgent).map(function (browser) {
  6830. var version = $_e2rcnb1a8jh8lz7v7.detect(browser.versionRegexes, userAgent);
  6831. return {
  6832. current: browser.name,
  6833. version: version
  6834. };
  6835. });
  6836. };
  6837. var detectOs = function (oses, userAgent) {
  6838. return detect$1(oses, userAgent).map(function (os) {
  6839. var version = $_e2rcnb1a8jh8lz7v7.detect(os.versionRegexes, userAgent);
  6840. return {
  6841. current: os.name,
  6842. version: version
  6843. };
  6844. });
  6845. };
  6846. var $_5wiael1abjh8lz7vg = {
  6847. detectBrowser: detectBrowser,
  6848. detectOs: detectOs
  6849. };
  6850. var addToStart = function (str, prefix) {
  6851. return prefix + str;
  6852. };
  6853. var addToEnd = function (str, suffix) {
  6854. return str + suffix;
  6855. };
  6856. var removeFromStart = function (str, numChars) {
  6857. return str.substring(numChars);
  6858. };
  6859. var removeFromEnd = function (str, numChars) {
  6860. return str.substring(0, str.length - numChars);
  6861. };
  6862. var $_8xrn431aejh8lz7vt = {
  6863. addToStart: addToStart,
  6864. addToEnd: addToEnd,
  6865. removeFromStart: removeFromStart,
  6866. removeFromEnd: removeFromEnd
  6867. };
  6868. var first = function (str, count) {
  6869. return str.substr(0, count);
  6870. };
  6871. var last$1 = function (str, count) {
  6872. return str.substr(str.length - count, str.length);
  6873. };
  6874. var head$1 = function (str) {
  6875. return str === '' ? Option.none() : Option.some(str.substr(0, 1));
  6876. };
  6877. var tail = function (str) {
  6878. return str === '' ? Option.none() : Option.some(str.substring(1));
  6879. };
  6880. var $_4s9mv21afjh8lz7vu = {
  6881. first: first,
  6882. last: last$1,
  6883. head: head$1,
  6884. tail: tail
  6885. };
  6886. var checkRange = function (str, substr, start) {
  6887. if (substr === '')
  6888. return true;
  6889. if (str.length < substr.length)
  6890. return false;
  6891. var x = str.substr(start, start + substr.length);
  6892. return x === substr;
  6893. };
  6894. var supplant = function (str, obj) {
  6895. var isStringOrNumber = function (a) {
  6896. var t = typeof a;
  6897. return t === 'string' || t === 'number';
  6898. };
  6899. return str.replace(/\${([^{}]*)}/g, function (a, b) {
  6900. var value = obj[b];
  6901. return isStringOrNumber(value) ? value : a;
  6902. });
  6903. };
  6904. var removeLeading = function (str, prefix) {
  6905. return startsWith(str, prefix) ? $_8xrn431aejh8lz7vt.removeFromStart(str, prefix.length) : str;
  6906. };
  6907. var removeTrailing = function (str, prefix) {
  6908. return endsWith(str, prefix) ? $_8xrn431aejh8lz7vt.removeFromEnd(str, prefix.length) : str;
  6909. };
  6910. var ensureLeading = function (str, prefix) {
  6911. return startsWith(str, prefix) ? str : $_8xrn431aejh8lz7vt.addToStart(str, prefix);
  6912. };
  6913. var ensureTrailing = function (str, prefix) {
  6914. return endsWith(str, prefix) ? str : $_8xrn431aejh8lz7vt.addToEnd(str, prefix);
  6915. };
  6916. var contains$1 = function (str, substr) {
  6917. return str.indexOf(substr) !== -1;
  6918. };
  6919. var capitalize = function (str) {
  6920. return $_4s9mv21afjh8lz7vu.head(str).bind(function (head) {
  6921. return $_4s9mv21afjh8lz7vu.tail(str).map(function (tail) {
  6922. return head.toUpperCase() + tail;
  6923. });
  6924. }).getOr(str);
  6925. };
  6926. var startsWith = function (str, prefix) {
  6927. return checkRange(str, prefix, 0);
  6928. };
  6929. var endsWith = function (str, suffix) {
  6930. return checkRange(str, suffix, str.length - suffix.length);
  6931. };
  6932. var trim = function (str) {
  6933. return str.replace(/^\s+|\s+$/g, '');
  6934. };
  6935. var lTrim = function (str) {
  6936. return str.replace(/^\s+/g, '');
  6937. };
  6938. var rTrim = function (str) {
  6939. return str.replace(/\s+$/g, '');
  6940. };
  6941. var $_7m3qef1adjh8lz7vq = {
  6942. supplant: supplant,
  6943. startsWith: startsWith,
  6944. removeLeading: removeLeading,
  6945. removeTrailing: removeTrailing,
  6946. ensureLeading: ensureLeading,
  6947. ensureTrailing: ensureTrailing,
  6948. endsWith: endsWith,
  6949. contains: contains$1,
  6950. trim: trim,
  6951. lTrim: lTrim,
  6952. rTrim: rTrim,
  6953. capitalize: capitalize
  6954. };
  6955. var normalVersionRegex = /.*?version\/\ ?([0-9]+)\.([0-9]+).*/;
  6956. var checkContains = function (target) {
  6957. return function (uastring) {
  6958. return $_7m3qef1adjh8lz7vq.contains(uastring, target);
  6959. };
  6960. };
  6961. var browsers = [
  6962. {
  6963. name: 'Edge',
  6964. versionRegexes: [/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],
  6965. search: function (uastring) {
  6966. var monstrosity = $_7m3qef1adjh8lz7vq.contains(uastring, 'edge/') && $_7m3qef1adjh8lz7vq.contains(uastring, 'chrome') && $_7m3qef1adjh8lz7vq.contains(uastring, 'safari') && $_7m3qef1adjh8lz7vq.contains(uastring, 'applewebkit');
  6967. return monstrosity;
  6968. }
  6969. },
  6970. {
  6971. name: 'Chrome',
  6972. versionRegexes: [
  6973. /.*?chrome\/([0-9]+)\.([0-9]+).*/,
  6974. normalVersionRegex
  6975. ],
  6976. search: function (uastring) {
  6977. return $_7m3qef1adjh8lz7vq.contains(uastring, 'chrome') && !$_7m3qef1adjh8lz7vq.contains(uastring, 'chromeframe');
  6978. }
  6979. },
  6980. {
  6981. name: 'IE',
  6982. versionRegexes: [
  6983. /.*?msie\ ?([0-9]+)\.([0-9]+).*/,
  6984. /.*?rv:([0-9]+)\.([0-9]+).*/
  6985. ],
  6986. search: function (uastring) {
  6987. return $_7m3qef1adjh8lz7vq.contains(uastring, 'msie') || $_7m3qef1adjh8lz7vq.contains(uastring, 'trident');
  6988. }
  6989. },
  6990. {
  6991. name: 'Opera',
  6992. versionRegexes: [
  6993. normalVersionRegex,
  6994. /.*?opera\/([0-9]+)\.([0-9]+).*/
  6995. ],
  6996. search: checkContains('opera')
  6997. },
  6998. {
  6999. name: 'Firefox',
  7000. versionRegexes: [/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],
  7001. search: checkContains('firefox')
  7002. },
  7003. {
  7004. name: 'Safari',
  7005. versionRegexes: [
  7006. normalVersionRegex,
  7007. /.*?cpu os ([0-9]+)_([0-9]+).*/
  7008. ],
  7009. search: function (uastring) {
  7010. return ($_7m3qef1adjh8lz7vq.contains(uastring, 'safari') || $_7m3qef1adjh8lz7vq.contains(uastring, 'mobile/')) && $_7m3qef1adjh8lz7vq.contains(uastring, 'applewebkit');
  7011. }
  7012. }
  7013. ];
  7014. var oses = [
  7015. {
  7016. name: 'Windows',
  7017. search: checkContains('win'),
  7018. versionRegexes: [/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]
  7019. },
  7020. {
  7021. name: 'iOS',
  7022. search: function (uastring) {
  7023. return $_7m3qef1adjh8lz7vq.contains(uastring, 'iphone') || $_7m3qef1adjh8lz7vq.contains(uastring, 'ipad');
  7024. },
  7025. versionRegexes: [
  7026. /.*?version\/\ ?([0-9]+)\.([0-9]+).*/,
  7027. /.*cpu os ([0-9]+)_([0-9]+).*/,
  7028. /.*cpu iphone os ([0-9]+)_([0-9]+).*/
  7029. ]
  7030. },
  7031. {
  7032. name: 'Android',
  7033. search: checkContains('android'),
  7034. versionRegexes: [/.*?android\ ?([0-9]+)\.([0-9]+).*/]
  7035. },
  7036. {
  7037. name: 'OSX',
  7038. search: checkContains('os x'),
  7039. versionRegexes: [/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]
  7040. },
  7041. {
  7042. name: 'Linux',
  7043. search: checkContains('linux'),
  7044. versionRegexes: []
  7045. },
  7046. {
  7047. name: 'Solaris',
  7048. search: checkContains('sunos'),
  7049. versionRegexes: []
  7050. },
  7051. {
  7052. name: 'FreeBSD',
  7053. search: checkContains('freebsd'),
  7054. versionRegexes: []
  7055. }
  7056. ];
  7057. var $_cf2rxn1acjh8lz7vk = {
  7058. browsers: $_2jrs7h17njh8lz7m6.constant(browsers),
  7059. oses: $_2jrs7h17njh8lz7m6.constant(oses)
  7060. };
  7061. var detect$2 = function (userAgent) {
  7062. var browsers = $_cf2rxn1acjh8lz7vk.browsers();
  7063. var oses = $_cf2rxn1acjh8lz7vk.oses();
  7064. var browser = $_5wiael1abjh8lz7vg.detectBrowser(browsers, userAgent).fold($_2yklpp1a7jh8lz7v3.unknown, $_2yklpp1a7jh8lz7v3.nu);
  7065. var os = $_5wiael1abjh8lz7vg.detectOs(oses, userAgent).fold($_dm2ktf1a9jh8lz7v8.unknown, $_dm2ktf1a9jh8lz7v8.nu);
  7066. var deviceType = DeviceType(os, browser, userAgent);
  7067. return {
  7068. browser: browser,
  7069. os: os,
  7070. deviceType: deviceType
  7071. };
  7072. };
  7073. var $_bh9rhh1a6jh8lz7v2 = { detect: detect$2 };
  7074. var detect$3 = $_1wqnm519tjh8lz7tm.cached(function () {
  7075. var userAgent = navigator.userAgent;
  7076. return $_bh9rhh1a6jh8lz7v2.detect(userAgent);
  7077. });
  7078. var $_27unow1a5jh8lz7uy = { detect: detect$3 };
  7079. var ELEMENT = $_e8p44419vjh8lz7to.ELEMENT;
  7080. var DOCUMENT = $_e8p44419vjh8lz7to.DOCUMENT;
  7081. var is = function (element, selector) {
  7082. var elem = element.dom();
  7083. if (elem.nodeType !== ELEMENT)
  7084. return false;
  7085. else if (elem.matches !== undefined)
  7086. return elem.matches(selector);
  7087. else if (elem.msMatchesSelector !== undefined)
  7088. return elem.msMatchesSelector(selector);
  7089. else if (elem.webkitMatchesSelector !== undefined)
  7090. return elem.webkitMatchesSelector(selector);
  7091. else if (elem.mozMatchesSelector !== undefined)
  7092. return elem.mozMatchesSelector(selector);
  7093. else
  7094. throw new Error('Browser lacks native selectors');
  7095. };
  7096. var bypassSelector = function (dom) {
  7097. return dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT || dom.childElementCount === 0;
  7098. };
  7099. var all = function (selector, scope) {
  7100. var base = scope === undefined ? document : scope.dom();
  7101. return bypassSelector(base) ? [] : $_qgcal17ljh8lz7ly.map(base.querySelectorAll(selector), $_b0tm8x19pjh8lz7t9.fromDom);
  7102. };
  7103. var one = function (selector, scope) {
  7104. var base = scope === undefined ? document : scope.dom();
  7105. return bypassSelector(base) ? Option.none() : Option.from(base.querySelector(selector)).map($_b0tm8x19pjh8lz7t9.fromDom);
  7106. };
  7107. var $_98pv661agjh8lz7vv = {
  7108. all: all,
  7109. is: is,
  7110. one: one
  7111. };
  7112. var eq = function (e1, e2) {
  7113. return e1.dom() === e2.dom();
  7114. };
  7115. var isEqualNode = function (e1, e2) {
  7116. return e1.dom().isEqualNode(e2.dom());
  7117. };
  7118. var member = function (element, elements) {
  7119. return $_qgcal17ljh8lz7ly.exists(elements, $_2jrs7h17njh8lz7m6.curry(eq, element));
  7120. };
  7121. var regularContains = function (e1, e2) {
  7122. var d1 = e1.dom(), d2 = e2.dom();
  7123. return d1 === d2 ? false : d1.contains(d2);
  7124. };
  7125. var ieContains = function (e1, e2) {
  7126. return $_ect2cb1a4jh8lz7ux.documentPositionContainedBy(e1.dom(), e2.dom());
  7127. };
  7128. var browser = $_27unow1a5jh8lz7uy.detect().browser;
  7129. var contains$2 = browser.isIE() ? ieContains : regularContains;
  7130. var $_5p2qqs1a3jh8lz7um = {
  7131. eq: eq,
  7132. isEqualNode: isEqualNode,
  7133. member: member,
  7134. contains: contains$2,
  7135. is: $_98pv661agjh8lz7vv.is
  7136. };
  7137. var owner = function (element) {
  7138. return $_b0tm8x19pjh8lz7t9.fromDom(element.dom().ownerDocument);
  7139. };
  7140. var documentElement = function (element) {
  7141. var doc = owner(element);
  7142. return $_b0tm8x19pjh8lz7t9.fromDom(doc.dom().documentElement);
  7143. };
  7144. var defaultView = function (element) {
  7145. var el = element.dom();
  7146. var defaultView = el.ownerDocument.defaultView;
  7147. return $_b0tm8x19pjh8lz7t9.fromDom(defaultView);
  7148. };
  7149. var parent$1 = function (element) {
  7150. var dom = element.dom();
  7151. return Option.from(dom.parentNode).map($_b0tm8x19pjh8lz7t9.fromDom);
  7152. };
  7153. var findIndex$1 = function (element) {
  7154. return parent$1(element).bind(function (p) {
  7155. var kin = children(p);
  7156. return $_qgcal17ljh8lz7ly.findIndex(kin, function (elem) {
  7157. return $_5p2qqs1a3jh8lz7um.eq(element, elem);
  7158. });
  7159. });
  7160. };
  7161. var parents = function (element, isRoot) {
  7162. var stop = $_55hqur17ojh8lz7m9.isFunction(isRoot) ? isRoot : $_2jrs7h17njh8lz7m6.constant(false);
  7163. var dom = element.dom();
  7164. var ret = [];
  7165. while (dom.parentNode !== null && dom.parentNode !== undefined) {
  7166. var rawParent = dom.parentNode;
  7167. var parent = $_b0tm8x19pjh8lz7t9.fromDom(rawParent);
  7168. ret.push(parent);
  7169. if (stop(parent) === true)
  7170. break;
  7171. else
  7172. dom = rawParent;
  7173. }
  7174. return ret;
  7175. };
  7176. var siblings = function (element) {
  7177. var filterSelf = function (elements) {
  7178. return $_qgcal17ljh8lz7ly.filter(elements, function (x) {
  7179. return !$_5p2qqs1a3jh8lz7um.eq(element, x);
  7180. });
  7181. };
  7182. return parent$1(element).map(children).map(filterSelf).getOr([]);
  7183. };
  7184. var offsetParent = function (element) {
  7185. var dom = element.dom();
  7186. return Option.from(dom.offsetParent).map($_b0tm8x19pjh8lz7t9.fromDom);
  7187. };
  7188. var prevSibling = function (element) {
  7189. var dom = element.dom();
  7190. return Option.from(dom.previousSibling).map($_b0tm8x19pjh8lz7t9.fromDom);
  7191. };
  7192. var nextSibling = function (element) {
  7193. var dom = element.dom();
  7194. return Option.from(dom.nextSibling).map($_b0tm8x19pjh8lz7t9.fromDom);
  7195. };
  7196. var prevSiblings = function (element) {
  7197. return $_qgcal17ljh8lz7ly.reverse($_8wc96i1a2jh8lz7uk.toArray(element, prevSibling));
  7198. };
  7199. var nextSiblings = function (element) {
  7200. return $_8wc96i1a2jh8lz7uk.toArray(element, nextSibling);
  7201. };
  7202. var children = function (element) {
  7203. var dom = element.dom();
  7204. return $_qgcal17ljh8lz7ly.map(dom.childNodes, $_b0tm8x19pjh8lz7t9.fromDom);
  7205. };
  7206. var child = function (element, index) {
  7207. var children = element.dom().childNodes;
  7208. return Option.from(children[index]).map($_b0tm8x19pjh8lz7t9.fromDom);
  7209. };
  7210. var firstChild = function (element) {
  7211. return child(element, 0);
  7212. };
  7213. var lastChild = function (element) {
  7214. return child(element, element.dom().childNodes.length - 1);
  7215. };
  7216. var childNodesCount = function (element) {
  7217. return element.dom().childNodes.length;
  7218. };
  7219. var hasChildNodes = function (element) {
  7220. return element.dom().hasChildNodes();
  7221. };
  7222. var spot = $_5b3y8019xjh8lz7u2.immutable('element', 'offset');
  7223. var leaf = function (element, offset) {
  7224. var cs = children(element);
  7225. return cs.length > 0 && offset < cs.length ? spot(cs[offset], 0) : spot(element, offset);
  7226. };
  7227. var $_afjmme19wjh8lz7tp = {
  7228. owner: owner,
  7229. defaultView: defaultView,
  7230. documentElement: documentElement,
  7231. parent: parent$1,
  7232. findIndex: findIndex$1,
  7233. parents: parents,
  7234. siblings: siblings,
  7235. prevSibling: prevSibling,
  7236. offsetParent: offsetParent,
  7237. prevSiblings: prevSiblings,
  7238. nextSibling: nextSibling,
  7239. nextSiblings: nextSiblings,
  7240. children: children,
  7241. child: child,
  7242. firstChild: firstChild,
  7243. lastChild: lastChild,
  7244. childNodesCount: childNodesCount,
  7245. hasChildNodes: hasChildNodes,
  7246. leaf: leaf
  7247. };
  7248. var all$1 = function (predicate) {
  7249. return descendants($_17whhl19sjh8lz7tj.body(), predicate);
  7250. };
  7251. var ancestors = function (scope, predicate, isRoot) {
  7252. return $_qgcal17ljh8lz7ly.filter($_afjmme19wjh8lz7tp.parents(scope, isRoot), predicate);
  7253. };
  7254. var siblings$1 = function (scope, predicate) {
  7255. return $_qgcal17ljh8lz7ly.filter($_afjmme19wjh8lz7tp.siblings(scope), predicate);
  7256. };
  7257. var children$1 = function (scope, predicate) {
  7258. return $_qgcal17ljh8lz7ly.filter($_afjmme19wjh8lz7tp.children(scope), predicate);
  7259. };
  7260. var descendants = function (scope, predicate) {
  7261. var result = [];
  7262. $_qgcal17ljh8lz7ly.each($_afjmme19wjh8lz7tp.children(scope), function (x) {
  7263. if (predicate(x)) {
  7264. result = result.concat([x]);
  7265. }
  7266. result = result.concat(descendants(x, predicate));
  7267. });
  7268. return result;
  7269. };
  7270. var $_f3odoh19rjh8lz7tf = {
  7271. all: all$1,
  7272. ancestors: ancestors,
  7273. siblings: siblings$1,
  7274. children: children$1,
  7275. descendants: descendants
  7276. };
  7277. var all$2 = function (selector) {
  7278. return $_98pv661agjh8lz7vv.all(selector);
  7279. };
  7280. var ancestors$1 = function (scope, selector, isRoot) {
  7281. return $_f3odoh19rjh8lz7tf.ancestors(scope, function (e) {
  7282. return $_98pv661agjh8lz7vv.is(e, selector);
  7283. }, isRoot);
  7284. };
  7285. var siblings$2 = function (scope, selector) {
  7286. return $_f3odoh19rjh8lz7tf.siblings(scope, function (e) {
  7287. return $_98pv661agjh8lz7vv.is(e, selector);
  7288. });
  7289. };
  7290. var children$2 = function (scope, selector) {
  7291. return $_f3odoh19rjh8lz7tf.children(scope, function (e) {
  7292. return $_98pv661agjh8lz7vv.is(e, selector);
  7293. });
  7294. };
  7295. var descendants$1 = function (scope, selector) {
  7296. return $_98pv661agjh8lz7vv.all(selector, scope);
  7297. };
  7298. var $_au86hf19qjh8lz7te = {
  7299. all: all$2,
  7300. ancestors: ancestors$1,
  7301. siblings: siblings$2,
  7302. children: children$2,
  7303. descendants: descendants$1
  7304. };
  7305. var trim$1 = global$4.trim;
  7306. var hasContentEditableState = function (value) {
  7307. return function (node) {
  7308. if (node && node.nodeType === 1) {
  7309. if (node.contentEditable === value) {
  7310. return true;
  7311. }
  7312. if (node.getAttribute('data-mce-contenteditable') === value) {
  7313. return true;
  7314. }
  7315. }
  7316. return false;
  7317. };
  7318. };
  7319. var isContentEditableTrue = hasContentEditableState('true');
  7320. var isContentEditableFalse = hasContentEditableState('false');
  7321. var create$4 = function (type, title, url, level, attach) {
  7322. return {
  7323. type: type,
  7324. title: title,
  7325. url: url,
  7326. level: level,
  7327. attach: attach
  7328. };
  7329. };
  7330. var isChildOfContentEditableTrue = function (node) {
  7331. while (node = node.parentNode) {
  7332. var value = node.contentEditable;
  7333. if (value && value !== 'inherit') {
  7334. return isContentEditableTrue(node);
  7335. }
  7336. }
  7337. return false;
  7338. };
  7339. var select = function (selector, root) {
  7340. return $_qgcal17ljh8lz7ly.map($_au86hf19qjh8lz7te.descendants($_b0tm8x19pjh8lz7t9.fromDom(root), selector), function (element) {
  7341. return element.dom();
  7342. });
  7343. };
  7344. var getElementText = function (elm) {
  7345. return elm.innerText || elm.textContent;
  7346. };
  7347. var getOrGenerateId = function (elm) {
  7348. return elm.id ? elm.id : $_9budsn19ojh8lz7t7.generate('h');
  7349. };
  7350. var isAnchor = function (elm) {
  7351. return elm && elm.nodeName === 'A' && (elm.id || elm.name);
  7352. };
  7353. var isValidAnchor = function (elm) {
  7354. return isAnchor(elm) && isEditable(elm);
  7355. };
  7356. var isHeader = function (elm) {
  7357. return elm && /^(H[1-6])$/.test(elm.nodeName);
  7358. };
  7359. var isEditable = function (elm) {
  7360. return isChildOfContentEditableTrue(elm) && !isContentEditableFalse(elm);
  7361. };
  7362. var isValidHeader = function (elm) {
  7363. return isHeader(elm) && isEditable(elm);
  7364. };
  7365. var getLevel = function (elm) {
  7366. return isHeader(elm) ? parseInt(elm.nodeName.substr(1), 10) : 0;
  7367. };
  7368. var headerTarget = function (elm) {
  7369. var headerId = getOrGenerateId(elm);
  7370. var attach = function () {
  7371. elm.id = headerId;
  7372. };
  7373. return create$4('header', getElementText(elm), '#' + headerId, getLevel(elm), attach);
  7374. };
  7375. var anchorTarget = function (elm) {
  7376. var anchorId = elm.id || elm.name;
  7377. var anchorText = getElementText(elm);
  7378. return create$4('anchor', anchorText ? anchorText : '#' + anchorId, '#' + anchorId, 0, $_2jrs7h17njh8lz7m6.noop);
  7379. };
  7380. var getHeaderTargets = function (elms) {
  7381. return $_qgcal17ljh8lz7ly.map($_qgcal17ljh8lz7ly.filter(elms, isValidHeader), headerTarget);
  7382. };
  7383. var getAnchorTargets = function (elms) {
  7384. return $_qgcal17ljh8lz7ly.map($_qgcal17ljh8lz7ly.filter(elms, isValidAnchor), anchorTarget);
  7385. };
  7386. var getTargetElements = function (elm) {
  7387. var elms = select('h1,h2,h3,h4,h5,h6,a:not([href])', elm);
  7388. return elms;
  7389. };
  7390. var hasTitle = function (target) {
  7391. return trim$1(target.title).length > 0;
  7392. };
  7393. var find$3 = function (elm) {
  7394. var elms = getTargetElements(elm);
  7395. return $_qgcal17ljh8lz7ly.filter(getHeaderTargets(elms).concat(getAnchorTargets(elms)), hasTitle);
  7396. };
  7397. var $_9hzj4219njh8lz7sx = { find: find$3 };
  7398. var getActiveEditor = function () {
  7399. return window.tinymce ? window.tinymce.activeEditor : global$5.activeEditor;
  7400. };
  7401. var history = {};
  7402. var HISTORY_LENGTH = 5;
  7403. var clearHistory = function () {
  7404. history = {};
  7405. };
  7406. var toMenuItem = function (target) {
  7407. return {
  7408. title: target.title,
  7409. value: {
  7410. title: { raw: target.title },
  7411. url: target.url,
  7412. attach: target.attach
  7413. }
  7414. };
  7415. };
  7416. var toMenuItems = function (targets) {
  7417. return global$4.map(targets, toMenuItem);
  7418. };
  7419. var staticMenuItem = function (title, url) {
  7420. return {
  7421. title: title,
  7422. value: {
  7423. title: title,
  7424. url: url,
  7425. attach: $_2jrs7h17njh8lz7m6.noop
  7426. }
  7427. };
  7428. };
  7429. var isUniqueUrl = function (url, targets) {
  7430. var foundTarget = $_qgcal17ljh8lz7ly.exists(targets, function (target) {
  7431. return target.url === url;
  7432. });
  7433. return !foundTarget;
  7434. };
  7435. var getSetting = function (editorSettings, name, defaultValue) {
  7436. var value = name in editorSettings ? editorSettings[name] : defaultValue;
  7437. return value === false ? null : value;
  7438. };
  7439. var createMenuItems = function (term, targets, fileType, editorSettings) {
  7440. var separator = { title: '-' };
  7441. var fromHistoryMenuItems = function (history) {
  7442. var historyItems = history.hasOwnProperty(fileType) ? history[fileType] : [];
  7443. var uniqueHistory = $_qgcal17ljh8lz7ly.filter(historyItems, function (url) {
  7444. return isUniqueUrl(url, targets);
  7445. });
  7446. return global$4.map(uniqueHistory, function (url) {
  7447. return {
  7448. title: url,
  7449. value: {
  7450. title: url,
  7451. url: url,
  7452. attach: $_2jrs7h17njh8lz7m6.noop
  7453. }
  7454. };
  7455. });
  7456. };
  7457. var fromMenuItems = function (type) {
  7458. var filteredTargets = $_qgcal17ljh8lz7ly.filter(targets, function (target) {
  7459. return target.type === type;
  7460. });
  7461. return toMenuItems(filteredTargets);
  7462. };
  7463. var anchorMenuItems = function () {
  7464. var anchorMenuItems = fromMenuItems('anchor');
  7465. var topAnchor = getSetting(editorSettings, 'anchor_top', '#top');
  7466. var bottomAchor = getSetting(editorSettings, 'anchor_bottom', '#bottom');
  7467. if (topAnchor !== null) {
  7468. anchorMenuItems.unshift(staticMenuItem('<top>', topAnchor));
  7469. }
  7470. if (bottomAchor !== null) {
  7471. anchorMenuItems.push(staticMenuItem('<bottom>', bottomAchor));
  7472. }
  7473. return anchorMenuItems;
  7474. };
  7475. var join = function (items) {
  7476. return $_qgcal17ljh8lz7ly.foldl(items, function (a, b) {
  7477. var bothEmpty = a.length === 0 || b.length === 0;
  7478. return bothEmpty ? a.concat(b) : a.concat(separator, b);
  7479. }, []);
  7480. };
  7481. if (editorSettings.typeahead_urls === false) {
  7482. return [];
  7483. }
  7484. return fileType === 'file' ? join([
  7485. filterByQuery(term, fromHistoryMenuItems(history)),
  7486. filterByQuery(term, fromMenuItems('header')),
  7487. filterByQuery(term, anchorMenuItems())
  7488. ]) : filterByQuery(term, fromHistoryMenuItems(history));
  7489. };
  7490. var addToHistory = function (url, fileType) {
  7491. var items = history[fileType];
  7492. if (!/^https?/.test(url)) {
  7493. return;
  7494. }
  7495. if (items) {
  7496. if ($_qgcal17ljh8lz7ly.indexOf(items, url).isNone()) {
  7497. history[fileType] = items.slice(0, HISTORY_LENGTH).concat(url);
  7498. }
  7499. } else {
  7500. history[fileType] = [url];
  7501. }
  7502. };
  7503. var filterByQuery = function (term, menuItems) {
  7504. var lowerCaseTerm = term.toLowerCase();
  7505. var result = global$4.grep(menuItems, function (item) {
  7506. return item.title.toLowerCase().indexOf(lowerCaseTerm) !== -1;
  7507. });
  7508. return result.length === 1 && result[0].title === term ? [] : result;
  7509. };
  7510. var getTitle = function (linkDetails) {
  7511. var title = linkDetails.title;
  7512. return title.raw ? title.raw : title;
  7513. };
  7514. var setupAutoCompleteHandler = function (ctrl, editorSettings, bodyElm, fileType) {
  7515. var autocomplete = function (term) {
  7516. var linkTargets = $_9hzj4219njh8lz7sx.find(bodyElm);
  7517. var menuItems = createMenuItems(term, linkTargets, fileType, editorSettings);
  7518. ctrl.showAutoComplete(menuItems, term);
  7519. };
  7520. ctrl.on('autocomplete', function () {
  7521. autocomplete(ctrl.value());
  7522. });
  7523. ctrl.on('selectitem', function (e) {
  7524. var linkDetails = e.value;
  7525. ctrl.value(linkDetails.url);
  7526. var title = getTitle(linkDetails);
  7527. if (fileType === 'image') {
  7528. ctrl.fire('change', {
  7529. meta: {
  7530. alt: title,
  7531. attach: linkDetails.attach
  7532. }
  7533. });
  7534. } else {
  7535. ctrl.fire('change', {
  7536. meta: {
  7537. text: title,
  7538. attach: linkDetails.attach
  7539. }
  7540. });
  7541. }
  7542. ctrl.focus();
  7543. });
  7544. ctrl.on('click', function (e) {
  7545. if (ctrl.value().length === 0 && e.target.nodeName === 'INPUT') {
  7546. autocomplete('');
  7547. }
  7548. });
  7549. ctrl.on('PostRender', function () {
  7550. ctrl.getRoot().on('submit', function (e) {
  7551. if (!e.isDefaultPrevented()) {
  7552. addToHistory(ctrl.value(), fileType);
  7553. }
  7554. });
  7555. });
  7556. };
  7557. var statusToUiState = function (result) {
  7558. var status = result.status, message = result.message;
  7559. if (status === 'valid') {
  7560. return {
  7561. status: 'ok',
  7562. message: message
  7563. };
  7564. } else if (status === 'unknown') {
  7565. return {
  7566. status: 'warn',
  7567. message: message
  7568. };
  7569. } else if (status === 'invalid') {
  7570. return {
  7571. status: 'warn',
  7572. message: message
  7573. };
  7574. } else {
  7575. return {
  7576. status: 'none',
  7577. message: ''
  7578. };
  7579. }
  7580. };
  7581. var setupLinkValidatorHandler = function (ctrl, editorSettings, fileType) {
  7582. var validatorHandler = editorSettings.filepicker_validator_handler;
  7583. if (validatorHandler) {
  7584. var validateUrl_1 = function (url) {
  7585. if (url.length === 0) {
  7586. ctrl.statusLevel('none');
  7587. return;
  7588. }
  7589. validatorHandler({
  7590. url: url,
  7591. type: fileType
  7592. }, function (result) {
  7593. var uiState = statusToUiState(result);
  7594. ctrl.statusMessage(uiState.message);
  7595. ctrl.statusLevel(uiState.status);
  7596. });
  7597. };
  7598. ctrl.state.on('change:value', function (e) {
  7599. validateUrl_1(e.value);
  7600. });
  7601. }
  7602. };
  7603. var FilePicker = ComboBox.extend({
  7604. Statics: { clearHistory: clearHistory },
  7605. init: function (settings) {
  7606. var self = this, editor = getActiveEditor(), editorSettings = editor.settings;
  7607. var actionCallback, fileBrowserCallback, fileBrowserCallbackTypes;
  7608. var fileType = settings.filetype;
  7609. settings.spellcheck = false;
  7610. fileBrowserCallbackTypes = editorSettings.file_picker_types || editorSettings.file_browser_callback_types;
  7611. if (fileBrowserCallbackTypes) {
  7612. fileBrowserCallbackTypes = global$4.makeMap(fileBrowserCallbackTypes, /[, ]/);
  7613. }
  7614. if (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[fileType]) {
  7615. fileBrowserCallback = editorSettings.file_picker_callback;
  7616. if (fileBrowserCallback && (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[fileType])) {
  7617. actionCallback = function () {
  7618. var meta = self.fire('beforecall').meta;
  7619. meta = global$4.extend({ filetype: fileType }, meta);
  7620. fileBrowserCallback.call(editor, function (value, meta) {
  7621. self.value(value).fire('change', { meta: meta });
  7622. }, self.value(), meta);
  7623. };
  7624. } else {
  7625. fileBrowserCallback = editorSettings.file_browser_callback;
  7626. if (fileBrowserCallback && (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[fileType])) {
  7627. actionCallback = function () {
  7628. fileBrowserCallback(self.getEl('inp').id, self.value(), fileType, window);
  7629. };
  7630. }
  7631. }
  7632. }
  7633. if (actionCallback) {
  7634. settings.icon = 'browse';
  7635. settings.onaction = actionCallback;
  7636. }
  7637. self._super(settings);
  7638. self.classes.add('filepicker');
  7639. setupAutoCompleteHandler(self, editorSettings, editor.getBody(), fileType);
  7640. setupLinkValidatorHandler(self, editorSettings, fileType);
  7641. }
  7642. });
  7643. var FitLayout = AbsoluteLayout.extend({
  7644. recalc: function (container) {
  7645. var contLayoutRect = container.layoutRect(), paddingBox = container.paddingBox;
  7646. container.items().filter(':visible').each(function (ctrl) {
  7647. ctrl.layoutRect({
  7648. x: paddingBox.left,
  7649. y: paddingBox.top,
  7650. w: contLayoutRect.innerW - paddingBox.right - paddingBox.left,
  7651. h: contLayoutRect.innerH - paddingBox.top - paddingBox.bottom
  7652. });
  7653. if (ctrl.recalc) {
  7654. ctrl.recalc();
  7655. }
  7656. });
  7657. }
  7658. });
  7659. var FlexLayout = AbsoluteLayout.extend({
  7660. recalc: function (container) {
  7661. var i, l, items, contLayoutRect, contPaddingBox, contSettings, align, pack, spacing, totalFlex, availableSpace, direction;
  7662. var ctrl, ctrlLayoutRect, ctrlSettings, flex;
  7663. var maxSizeItems = [];
  7664. var size, maxSize, ratio, rect, pos, maxAlignEndPos;
  7665. var sizeName, minSizeName, posName, maxSizeName, beforeName, innerSizeName, deltaSizeName, contentSizeName;
  7666. var alignAxisName, alignInnerSizeName, alignSizeName, alignMinSizeName, alignBeforeName, alignAfterName;
  7667. var alignDeltaSizeName, alignContentSizeName;
  7668. var max = Math.max, min = Math.min;
  7669. items = container.items().filter(':visible');
  7670. contLayoutRect = container.layoutRect();
  7671. contPaddingBox = container.paddingBox;
  7672. contSettings = container.settings;
  7673. direction = container.isRtl() ? contSettings.direction || 'row-reversed' : contSettings.direction;
  7674. align = contSettings.align;
  7675. pack = container.isRtl() ? contSettings.pack || 'end' : contSettings.pack;
  7676. spacing = contSettings.spacing || 0;
  7677. if (direction === 'row-reversed' || direction === 'column-reverse') {
  7678. items = items.set(items.toArray().reverse());
  7679. direction = direction.split('-')[0];
  7680. }
  7681. if (direction === 'column') {
  7682. posName = 'y';
  7683. sizeName = 'h';
  7684. minSizeName = 'minH';
  7685. maxSizeName = 'maxH';
  7686. innerSizeName = 'innerH';
  7687. beforeName = 'top';
  7688. deltaSizeName = 'deltaH';
  7689. contentSizeName = 'contentH';
  7690. alignBeforeName = 'left';
  7691. alignSizeName = 'w';
  7692. alignAxisName = 'x';
  7693. alignInnerSizeName = 'innerW';
  7694. alignMinSizeName = 'minW';
  7695. alignAfterName = 'right';
  7696. alignDeltaSizeName = 'deltaW';
  7697. alignContentSizeName = 'contentW';
  7698. } else {
  7699. posName = 'x';
  7700. sizeName = 'w';
  7701. minSizeName = 'minW';
  7702. maxSizeName = 'maxW';
  7703. innerSizeName = 'innerW';
  7704. beforeName = 'left';
  7705. deltaSizeName = 'deltaW';
  7706. contentSizeName = 'contentW';
  7707. alignBeforeName = 'top';
  7708. alignSizeName = 'h';
  7709. alignAxisName = 'y';
  7710. alignInnerSizeName = 'innerH';
  7711. alignMinSizeName = 'minH';
  7712. alignAfterName = 'bottom';
  7713. alignDeltaSizeName = 'deltaH';
  7714. alignContentSizeName = 'contentH';
  7715. }
  7716. availableSpace = contLayoutRect[innerSizeName] - contPaddingBox[beforeName] - contPaddingBox[beforeName];
  7717. maxAlignEndPos = totalFlex = 0;
  7718. for (i = 0, l = items.length; i < l; i++) {
  7719. ctrl = items[i];
  7720. ctrlLayoutRect = ctrl.layoutRect();
  7721. ctrlSettings = ctrl.settings;
  7722. flex = ctrlSettings.flex;
  7723. availableSpace -= i < l - 1 ? spacing : 0;
  7724. if (flex > 0) {
  7725. totalFlex += flex;
  7726. if (ctrlLayoutRect[maxSizeName]) {
  7727. maxSizeItems.push(ctrl);
  7728. }
  7729. ctrlLayoutRect.flex = flex;
  7730. }
  7731. availableSpace -= ctrlLayoutRect[minSizeName];
  7732. size = contPaddingBox[alignBeforeName] + ctrlLayoutRect[alignMinSizeName] + contPaddingBox[alignAfterName];
  7733. if (size > maxAlignEndPos) {
  7734. maxAlignEndPos = size;
  7735. }
  7736. }
  7737. rect = {};
  7738. if (availableSpace < 0) {
  7739. rect[minSizeName] = contLayoutRect[minSizeName] - availableSpace + contLayoutRect[deltaSizeName];
  7740. } else {
  7741. rect[minSizeName] = contLayoutRect[innerSizeName] - availableSpace + contLayoutRect[deltaSizeName];
  7742. }
  7743. rect[alignMinSizeName] = maxAlignEndPos + contLayoutRect[alignDeltaSizeName];
  7744. rect[contentSizeName] = contLayoutRect[innerSizeName] - availableSpace;
  7745. rect[alignContentSizeName] = maxAlignEndPos;
  7746. rect.minW = min(rect.minW, contLayoutRect.maxW);
  7747. rect.minH = min(rect.minH, contLayoutRect.maxH);
  7748. rect.minW = max(rect.minW, contLayoutRect.startMinWidth);
  7749. rect.minH = max(rect.minH, contLayoutRect.startMinHeight);
  7750. if (contLayoutRect.autoResize && (rect.minW !== contLayoutRect.minW || rect.minH !== contLayoutRect.minH)) {
  7751. rect.w = rect.minW;
  7752. rect.h = rect.minH;
  7753. container.layoutRect(rect);
  7754. this.recalc(container);
  7755. if (container._lastRect === null) {
  7756. var parentCtrl = container.parent();
  7757. if (parentCtrl) {
  7758. parentCtrl._lastRect = null;
  7759. parentCtrl.recalc();
  7760. }
  7761. }
  7762. return;
  7763. }
  7764. ratio = availableSpace / totalFlex;
  7765. for (i = 0, l = maxSizeItems.length; i < l; i++) {
  7766. ctrl = maxSizeItems[i];
  7767. ctrlLayoutRect = ctrl.layoutRect();
  7768. maxSize = ctrlLayoutRect[maxSizeName];
  7769. size = ctrlLayoutRect[minSizeName] + ctrlLayoutRect.flex * ratio;
  7770. if (size > maxSize) {
  7771. availableSpace -= ctrlLayoutRect[maxSizeName] - ctrlLayoutRect[minSizeName];
  7772. totalFlex -= ctrlLayoutRect.flex;
  7773. ctrlLayoutRect.flex = 0;
  7774. ctrlLayoutRect.maxFlexSize = maxSize;
  7775. } else {
  7776. ctrlLayoutRect.maxFlexSize = 0;
  7777. }
  7778. }
  7779. ratio = availableSpace / totalFlex;
  7780. pos = contPaddingBox[beforeName];
  7781. rect = {};
  7782. if (totalFlex === 0) {
  7783. if (pack === 'end') {
  7784. pos = availableSpace + contPaddingBox[beforeName];
  7785. } else if (pack === 'center') {
  7786. pos = Math.round(contLayoutRect[innerSizeName] / 2 - (contLayoutRect[innerSizeName] - availableSpace) / 2) + contPaddingBox[beforeName];
  7787. if (pos < 0) {
  7788. pos = contPaddingBox[beforeName];
  7789. }
  7790. } else if (pack === 'justify') {
  7791. pos = contPaddingBox[beforeName];
  7792. spacing = Math.floor(availableSpace / (items.length - 1));
  7793. }
  7794. }
  7795. rect[alignAxisName] = contPaddingBox[alignBeforeName];
  7796. for (i = 0, l = items.length; i < l; i++) {
  7797. ctrl = items[i];
  7798. ctrlLayoutRect = ctrl.layoutRect();
  7799. size = ctrlLayoutRect.maxFlexSize || ctrlLayoutRect[minSizeName];
  7800. if (align === 'center') {
  7801. rect[alignAxisName] = Math.round(contLayoutRect[alignInnerSizeName] / 2 - ctrlLayoutRect[alignSizeName] / 2);
  7802. } else if (align === 'stretch') {
  7803. rect[alignSizeName] = max(ctrlLayoutRect[alignMinSizeName] || 0, contLayoutRect[alignInnerSizeName] - contPaddingBox[alignBeforeName] - contPaddingBox[alignAfterName]);
  7804. rect[alignAxisName] = contPaddingBox[alignBeforeName];
  7805. } else if (align === 'end') {
  7806. rect[alignAxisName] = contLayoutRect[alignInnerSizeName] - ctrlLayoutRect[alignSizeName] - contPaddingBox.top;
  7807. }
  7808. if (ctrlLayoutRect.flex > 0) {
  7809. size += ctrlLayoutRect.flex * ratio;
  7810. }
  7811. rect[sizeName] = size;
  7812. rect[posName] = pos;
  7813. ctrl.layoutRect(rect);
  7814. if (ctrl.recalc) {
  7815. ctrl.recalc();
  7816. }
  7817. pos += size + spacing;
  7818. }
  7819. }
  7820. });
  7821. var FlowLayout = Layout$1.extend({
  7822. Defaults: {
  7823. containerClass: 'flow-layout',
  7824. controlClass: 'flow-layout-item',
  7825. endClass: 'break'
  7826. },
  7827. recalc: function (container) {
  7828. container.items().filter(':visible').each(function (ctrl) {
  7829. if (ctrl.recalc) {
  7830. ctrl.recalc();
  7831. }
  7832. });
  7833. },
  7834. isNative: function () {
  7835. return true;
  7836. }
  7837. });
  7838. function ClosestOrAncestor (is, ancestor, scope, a, isRoot) {
  7839. return is(scope, a) ? Option.some(scope) : $_55hqur17ojh8lz7m9.isFunction(isRoot) && isRoot(scope) ? Option.none() : ancestor(scope, a, isRoot);
  7840. }
  7841. var first$1 = function (predicate) {
  7842. return descendant($_17whhl19sjh8lz7tj.body(), predicate);
  7843. };
  7844. var ancestor = function (scope, predicate, isRoot) {
  7845. var element = scope.dom();
  7846. var stop = $_55hqur17ojh8lz7m9.isFunction(isRoot) ? isRoot : $_2jrs7h17njh8lz7m6.constant(false);
  7847. while (element.parentNode) {
  7848. element = element.parentNode;
  7849. var el = $_b0tm8x19pjh8lz7t9.fromDom(element);
  7850. if (predicate(el))
  7851. return Option.some(el);
  7852. else if (stop(el))
  7853. break;
  7854. }
  7855. return Option.none();
  7856. };
  7857. var closest = function (scope, predicate, isRoot) {
  7858. var is = function (scope) {
  7859. return predicate(scope);
  7860. };
  7861. return ClosestOrAncestor(is, ancestor, scope, predicate, isRoot);
  7862. };
  7863. var sibling = function (scope, predicate) {
  7864. var element = scope.dom();
  7865. if (!element.parentNode)
  7866. return Option.none();
  7867. return child$1($_b0tm8x19pjh8lz7t9.fromDom(element.parentNode), function (x) {
  7868. return !$_5p2qqs1a3jh8lz7um.eq(scope, x) && predicate(x);
  7869. });
  7870. };
  7871. var child$1 = function (scope, predicate) {
  7872. var result = $_qgcal17ljh8lz7ly.find(scope.dom().childNodes, $_2jrs7h17njh8lz7m6.compose(predicate, $_b0tm8x19pjh8lz7t9.fromDom));
  7873. return result.map($_b0tm8x19pjh8lz7t9.fromDom);
  7874. };
  7875. var descendant = function (scope, predicate) {
  7876. var descend = function (element) {
  7877. for (var i = 0; i < element.childNodes.length; i++) {
  7878. if (predicate($_b0tm8x19pjh8lz7t9.fromDom(element.childNodes[i])))
  7879. return Option.some($_b0tm8x19pjh8lz7t9.fromDom(element.childNodes[i]));
  7880. var res = descend(element.childNodes[i]);
  7881. if (res.isSome())
  7882. return res;
  7883. }
  7884. return Option.none();
  7885. };
  7886. return descend(scope.dom());
  7887. };
  7888. var $_14ffds1amjh8lz7wr = {
  7889. first: first$1,
  7890. ancestor: ancestor,
  7891. closest: closest,
  7892. sibling: sibling,
  7893. child: child$1,
  7894. descendant: descendant
  7895. };
  7896. var first$2 = function (selector) {
  7897. return $_98pv661agjh8lz7vv.one(selector);
  7898. };
  7899. var ancestor$1 = function (scope, selector, isRoot) {
  7900. return $_14ffds1amjh8lz7wr.ancestor(scope, function (e) {
  7901. return $_98pv661agjh8lz7vv.is(e, selector);
  7902. }, isRoot);
  7903. };
  7904. var sibling$1 = function (scope, selector) {
  7905. return $_14ffds1amjh8lz7wr.sibling(scope, function (e) {
  7906. return $_98pv661agjh8lz7vv.is(e, selector);
  7907. });
  7908. };
  7909. var child$2 = function (scope, selector) {
  7910. return $_14ffds1amjh8lz7wr.child(scope, function (e) {
  7911. return $_98pv661agjh8lz7vv.is(e, selector);
  7912. });
  7913. };
  7914. var descendant$1 = function (scope, selector) {
  7915. return $_98pv661agjh8lz7vv.one(selector, scope);
  7916. };
  7917. var closest$1 = function (scope, selector, isRoot) {
  7918. return ClosestOrAncestor($_98pv661agjh8lz7vv.is, ancestor$1, scope, selector, isRoot);
  7919. };
  7920. var $_72mqss1aljh8lz7wp = {
  7921. first: first$2,
  7922. ancestor: ancestor$1,
  7923. sibling: sibling$1,
  7924. child: child$2,
  7925. descendant: descendant$1,
  7926. closest: closest$1
  7927. };
  7928. var toggleFormat = function (editor, fmt) {
  7929. return function () {
  7930. editor.execCommand('mceToggleFormat', false, fmt);
  7931. };
  7932. };
  7933. var addFormatChangedListener = function (editor, name, changed) {
  7934. var handler = function (state) {
  7935. changed(state, name);
  7936. };
  7937. if (editor.formatter) {
  7938. editor.formatter.formatChanged(name, handler);
  7939. } else {
  7940. editor.on('init', function () {
  7941. editor.formatter.formatChanged(name, handler);
  7942. });
  7943. }
  7944. };
  7945. var postRenderFormatToggle = function (editor, name) {
  7946. return function (e) {
  7947. addFormatChangedListener(editor, name, function (state) {
  7948. e.control.active(state);
  7949. });
  7950. };
  7951. };
  7952. var register = function (editor) {
  7953. var alignFormats = [
  7954. 'alignleft',
  7955. 'aligncenter',
  7956. 'alignright',
  7957. 'alignjustify'
  7958. ];
  7959. var defaultAlign = 'alignleft';
  7960. var alignMenuItems = [
  7961. {
  7962. text: 'Left',
  7963. icon: 'alignleft',
  7964. onclick: toggleFormat(editor, 'alignleft')
  7965. },
  7966. {
  7967. text: 'Center',
  7968. icon: 'aligncenter',
  7969. onclick: toggleFormat(editor, 'aligncenter')
  7970. },
  7971. {
  7972. text: 'Right',
  7973. icon: 'alignright',
  7974. onclick: toggleFormat(editor, 'alignright')
  7975. },
  7976. {
  7977. text: 'Justify',
  7978. icon: 'alignjustify',
  7979. onclick: toggleFormat(editor, 'alignjustify')
  7980. }
  7981. ];
  7982. editor.addMenuItem('align', {
  7983. text: 'Align',
  7984. menu: alignMenuItems
  7985. });
  7986. editor.addButton('align', {
  7987. type: 'menubutton',
  7988. icon: defaultAlign,
  7989. menu: alignMenuItems,
  7990. onShowMenu: function (e) {
  7991. var menu = e.control.menu;
  7992. global$4.each(alignFormats, function (formatName, idx) {
  7993. menu.items().eq(idx).each(function (item) {
  7994. return item.active(editor.formatter.match(formatName));
  7995. });
  7996. });
  7997. },
  7998. onPostRender: function (e) {
  7999. var ctrl = e.control;
  8000. global$4.each(alignFormats, function (formatName, idx) {
  8001. addFormatChangedListener(editor, formatName, function (state) {
  8002. ctrl.icon(defaultAlign);
  8003. if (state) {
  8004. ctrl.icon(formatName);
  8005. }
  8006. });
  8007. });
  8008. }
  8009. });
  8010. global$4.each({
  8011. alignleft: [
  8012. 'Align left',
  8013. 'JustifyLeft'
  8014. ],
  8015. aligncenter: [
  8016. 'Align center',
  8017. 'JustifyCenter'
  8018. ],
  8019. alignright: [
  8020. 'Align right',
  8021. 'JustifyRight'
  8022. ],
  8023. alignjustify: [
  8024. 'Justify',
  8025. 'JustifyFull'
  8026. ],
  8027. alignnone: [
  8028. 'No alignment',
  8029. 'JustifyNone'
  8030. ]
  8031. }, function (item, name) {
  8032. editor.addButton(name, {
  8033. active: false,
  8034. tooltip: item[0],
  8035. cmd: item[1],
  8036. onPostRender: postRenderFormatToggle(editor, name)
  8037. });
  8038. });
  8039. };
  8040. var $_9eh8yg1aojh8lz7xc = { register: register };
  8041. var getFirstFont = function (fontFamily) {
  8042. return fontFamily ? fontFamily.split(',')[0] : '';
  8043. };
  8044. var findMatchingValue = function (items, fontFamily) {
  8045. var font = fontFamily ? fontFamily.toLowerCase() : '';
  8046. var value;
  8047. global$4.each(items, function (item) {
  8048. if (item.value.toLowerCase() === font) {
  8049. value = item.value;
  8050. }
  8051. });
  8052. global$4.each(items, function (item) {
  8053. if (!value && getFirstFont(item.value).toLowerCase() === getFirstFont(font).toLowerCase()) {
  8054. value = item.value;
  8055. }
  8056. });
  8057. return value;
  8058. };
  8059. var createFontNameListBoxChangeHandler = function (editor, items) {
  8060. return function () {
  8061. var self = this;
  8062. editor.on('init nodeChange', function (e) {
  8063. var fontFamily = editor.queryCommandValue('FontName');
  8064. var match = findMatchingValue(items, fontFamily);
  8065. self.value(match ? match : null);
  8066. if (!match && fontFamily) {
  8067. self.text(getFirstFont(fontFamily));
  8068. }
  8069. });
  8070. };
  8071. };
  8072. var createFormats = function (formats) {
  8073. formats = formats.replace(/;$/, '').split(';');
  8074. var i = formats.length;
  8075. while (i--) {
  8076. formats[i] = formats[i].split('=');
  8077. }
  8078. return formats;
  8079. };
  8080. var getFontItems = function (editor) {
  8081. 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';
  8082. var fonts = createFormats(editor.settings.font_formats || defaultFontsFormats);
  8083. return global$4.map(fonts, function (font) {
  8084. return {
  8085. text: { raw: font[0] },
  8086. value: font[1],
  8087. textStyle: font[1].indexOf('dings') === -1 ? 'font-family:' + font[1] : ''
  8088. };
  8089. });
  8090. };
  8091. var registerButtons = function (editor) {
  8092. editor.addButton('fontselect', function () {
  8093. var items = getFontItems(editor);
  8094. return {
  8095. type: 'listbox',
  8096. text: 'Font Family',
  8097. tooltip: 'Font Family',
  8098. values: items,
  8099. fixedWidth: true,
  8100. onPostRender: createFontNameListBoxChangeHandler(editor, items),
  8101. onselect: function (e) {
  8102. if (e.control.settings.value) {
  8103. editor.execCommand('FontName', false, e.control.settings.value);
  8104. }
  8105. }
  8106. };
  8107. });
  8108. };
  8109. var register$1 = function (editor) {
  8110. registerButtons(editor);
  8111. };
  8112. var $_3gzdqt1aqjh8lz7xh = { register: register$1 };
  8113. var round = function (number, precision) {
  8114. var factor = Math.pow(10, precision);
  8115. return Math.round(number * factor) / factor;
  8116. };
  8117. var toPt = function (fontSize, precision) {
  8118. if (/[0-9.]+px$/.test(fontSize)) {
  8119. return round(parseInt(fontSize, 10) * 72 / 96, precision || 0) + 'pt';
  8120. }
  8121. return fontSize;
  8122. };
  8123. var findMatchingValue$1 = function (items, pt, px) {
  8124. var value;
  8125. global$4.each(items, function (item) {
  8126. if (item.value === px) {
  8127. value = px;
  8128. } else if (item.value === pt) {
  8129. value = pt;
  8130. }
  8131. });
  8132. return value;
  8133. };
  8134. var createFontSizeListBoxChangeHandler = function (editor, items) {
  8135. return function () {
  8136. var self = this;
  8137. editor.on('init nodeChange', function (e) {
  8138. var px, pt, precision, match;
  8139. px = editor.queryCommandValue('FontSize');
  8140. if (px) {
  8141. for (precision = 3; !match && precision >= 0; precision--) {
  8142. pt = toPt(px, precision);
  8143. match = findMatchingValue$1(items, pt, px);
  8144. }
  8145. }
  8146. self.value(match ? match : null);
  8147. if (!match) {
  8148. self.text(pt);
  8149. }
  8150. });
  8151. };
  8152. };
  8153. var getFontSizeItems = function (editor) {
  8154. var defaultFontsizeFormats = '8pt 10pt 12pt 14pt 18pt 24pt 36pt';
  8155. var fontsizeFormats = editor.settings.fontsize_formats || defaultFontsizeFormats;
  8156. return global$4.map(fontsizeFormats.split(' '), function (item) {
  8157. var text = item, value = item;
  8158. var values = item.split('=');
  8159. if (values.length > 1) {
  8160. text = values[0];
  8161. value = values[1];
  8162. }
  8163. return {
  8164. text: text,
  8165. value: value
  8166. };
  8167. });
  8168. };
  8169. var registerButtons$1 = function (editor) {
  8170. editor.addButton('fontsizeselect', function () {
  8171. var items = getFontSizeItems(editor);
  8172. return {
  8173. type: 'listbox',
  8174. text: 'Font Sizes',
  8175. tooltip: 'Font Sizes',
  8176. values: items,
  8177. fixedWidth: true,
  8178. onPostRender: createFontSizeListBoxChangeHandler(editor, items),
  8179. onclick: function (e) {
  8180. if (e.control.settings.value) {
  8181. editor.execCommand('FontSize', false, e.control.settings.value);
  8182. }
  8183. }
  8184. };
  8185. });
  8186. };
  8187. var register$2 = function (editor) {
  8188. registerButtons$1(editor);
  8189. };
  8190. var $_nl711arjh8lz7xk = { register: register$2 };
  8191. var hideMenuObjects = function (editor, menu) {
  8192. var count = menu.length;
  8193. global$4.each(menu, function (item) {
  8194. if (item.menu) {
  8195. item.hidden = hideMenuObjects(editor, item.menu) === 0;
  8196. }
  8197. var formatName = item.format;
  8198. if (formatName) {
  8199. item.hidden = !editor.formatter.canApply(formatName);
  8200. }
  8201. if (item.hidden) {
  8202. count--;
  8203. }
  8204. });
  8205. return count;
  8206. };
  8207. var hideFormatMenuItems = function (editor, menu) {
  8208. var count = menu.items().length;
  8209. menu.items().each(function (item) {
  8210. if (item.menu) {
  8211. item.visible(hideFormatMenuItems(editor, item.menu) > 0);
  8212. }
  8213. if (!item.menu && item.settings.menu) {
  8214. item.visible(hideMenuObjects(editor, item.settings.menu) > 0);
  8215. }
  8216. var formatName = item.settings.format;
  8217. if (formatName) {
  8218. item.visible(editor.formatter.canApply(formatName));
  8219. }
  8220. if (!item.visible()) {
  8221. count--;
  8222. }
  8223. });
  8224. return count;
  8225. };
  8226. var createFormatMenu = function (editor) {
  8227. var count = 0;
  8228. var newFormats = [];
  8229. var defaultStyleFormats = [
  8230. {
  8231. title: 'Headings',
  8232. items: [
  8233. {
  8234. title: 'Heading 1',
  8235. format: 'h1'
  8236. },
  8237. {
  8238. title: 'Heading 2',
  8239. format: 'h2'
  8240. },
  8241. {
  8242. title: 'Heading 3',
  8243. format: 'h3'
  8244. },
  8245. {
  8246. title: 'Heading 4',
  8247. format: 'h4'
  8248. },
  8249. {
  8250. title: 'Heading 5',
  8251. format: 'h5'
  8252. },
  8253. {
  8254. title: 'Heading 6',
  8255. format: 'h6'
  8256. }
  8257. ]
  8258. },
  8259. {
  8260. title: 'Inline',
  8261. items: [
  8262. {
  8263. title: 'Bold',
  8264. icon: 'bold',
  8265. format: 'bold'
  8266. },
  8267. {
  8268. title: 'Italic',
  8269. icon: 'italic',
  8270. format: 'italic'
  8271. },
  8272. {
  8273. title: 'Underline',
  8274. icon: 'underline',
  8275. format: 'underline'
  8276. },
  8277. {
  8278. title: 'Strikethrough',
  8279. icon: 'strikethrough',
  8280. format: 'strikethrough'
  8281. },
  8282. {
  8283. title: 'Superscript',
  8284. icon: 'superscript',
  8285. format: 'superscript'
  8286. },
  8287. {
  8288. title: 'Subscript',
  8289. icon: 'subscript',
  8290. format: 'subscript'
  8291. },
  8292. {
  8293. title: 'Code',
  8294. icon: 'code',
  8295. format: 'code'
  8296. }
  8297. ]
  8298. },
  8299. {
  8300. title: 'Blocks',
  8301. items: [
  8302. {
  8303. title: 'Paragraph',
  8304. format: 'p'
  8305. },
  8306. {
  8307. title: 'Blockquote',
  8308. format: 'blockquote'
  8309. },
  8310. {
  8311. title: 'Div',
  8312. format: 'div'
  8313. },
  8314. {
  8315. title: 'Pre',
  8316. format: 'pre'
  8317. }
  8318. ]
  8319. },
  8320. {
  8321. title: 'Alignment',
  8322. items: [
  8323. {
  8324. title: 'Left',
  8325. icon: 'alignleft',
  8326. format: 'alignleft'
  8327. },
  8328. {
  8329. title: 'Center',
  8330. icon: 'aligncenter',
  8331. format: 'aligncenter'
  8332. },
  8333. {
  8334. title: 'Right',
  8335. icon: 'alignright',
  8336. format: 'alignright'
  8337. },
  8338. {
  8339. title: 'Justify',
  8340. icon: 'alignjustify',
  8341. format: 'alignjustify'
  8342. }
  8343. ]
  8344. }
  8345. ];
  8346. var createMenu = function (formats) {
  8347. var menu = [];
  8348. if (!formats) {
  8349. return;
  8350. }
  8351. global$4.each(formats, function (format) {
  8352. var menuItem = {
  8353. text: format.title,
  8354. icon: format.icon
  8355. };
  8356. if (format.items) {
  8357. menuItem.menu = createMenu(format.items);
  8358. } else {
  8359. var formatName = format.format || 'custom' + count++;
  8360. if (!format.format) {
  8361. format.name = formatName;
  8362. newFormats.push(format);
  8363. }
  8364. menuItem.format = formatName;
  8365. menuItem.cmd = format.cmd;
  8366. }
  8367. menu.push(menuItem);
  8368. });
  8369. return menu;
  8370. };
  8371. var createStylesMenu = function () {
  8372. var menu;
  8373. if (editor.settings.style_formats_merge) {
  8374. if (editor.settings.style_formats) {
  8375. menu = createMenu(defaultStyleFormats.concat(editor.settings.style_formats));
  8376. } else {
  8377. menu = createMenu(defaultStyleFormats);
  8378. }
  8379. } else {
  8380. menu = createMenu(editor.settings.style_formats || defaultStyleFormats);
  8381. }
  8382. return menu;
  8383. };
  8384. editor.on('init', function () {
  8385. global$4.each(newFormats, function (format) {
  8386. editor.formatter.register(format.name, format);
  8387. });
  8388. });
  8389. return {
  8390. type: 'menu',
  8391. items: createStylesMenu(),
  8392. onPostRender: function (e) {
  8393. editor.fire('renderFormatsMenu', { control: e.control });
  8394. },
  8395. itemDefaults: {
  8396. preview: true,
  8397. textStyle: function () {
  8398. if (this.settings.format) {
  8399. return editor.formatter.getCssText(this.settings.format);
  8400. }
  8401. },
  8402. onPostRender: function () {
  8403. var self = this;
  8404. self.parent().on('show', function () {
  8405. var formatName, command;
  8406. formatName = self.settings.format;
  8407. if (formatName) {
  8408. self.disabled(!editor.formatter.canApply(formatName));
  8409. self.active(editor.formatter.match(formatName));
  8410. }
  8411. command = self.settings.cmd;
  8412. if (command) {
  8413. self.active(editor.queryCommandState(command));
  8414. }
  8415. });
  8416. },
  8417. onclick: function () {
  8418. if (this.settings.format) {
  8419. toggleFormat(editor, this.settings.format)();
  8420. }
  8421. if (this.settings.cmd) {
  8422. editor.execCommand(this.settings.cmd);
  8423. }
  8424. }
  8425. }
  8426. };
  8427. };
  8428. var registerMenuItems = function (editor, formatMenu) {
  8429. editor.addMenuItem('formats', {
  8430. text: 'Formats',
  8431. menu: formatMenu
  8432. });
  8433. };
  8434. var registerButtons$2 = function (editor, formatMenu) {
  8435. editor.addButton('styleselect', {
  8436. type: 'menubutton',
  8437. text: 'Formats',
  8438. menu: formatMenu,
  8439. onShowMenu: function () {
  8440. if (editor.settings.style_formats_autohide) {
  8441. hideFormatMenuItems(editor, this.menu);
  8442. }
  8443. }
  8444. });
  8445. };
  8446. var register$3 = function (editor) {
  8447. var formatMenu = createFormatMenu(editor);
  8448. registerMenuItems(editor, formatMenu);
  8449. registerButtons$2(editor, formatMenu);
  8450. };
  8451. var $_5p34i51asjh8lz7xo = { register: register$3 };
  8452. var defaultBlocks = 'Paragraph=p;' + 'Heading 1=h1;' + 'Heading 2=h2;' + 'Heading 3=h3;' + 'Heading 4=h4;' + 'Heading 5=h5;' + 'Heading 6=h6;' + 'Preformatted=pre';
  8453. var createFormats$1 = function (formats) {
  8454. formats = formats.replace(/;$/, '').split(';');
  8455. var i = formats.length;
  8456. while (i--) {
  8457. formats[i] = formats[i].split('=');
  8458. }
  8459. return formats;
  8460. };
  8461. var createListBoxChangeHandler = function (editor, items, formatName) {
  8462. return function () {
  8463. var self = this;
  8464. editor.on('nodeChange', function (e) {
  8465. var formatter = editor.formatter;
  8466. var value = null;
  8467. global$4.each(e.parents, function (node) {
  8468. global$4.each(items, function (item) {
  8469. if (formatName) {
  8470. if (formatter.matchNode(node, formatName, { value: item.value })) {
  8471. value = item.value;
  8472. }
  8473. } else {
  8474. if (formatter.matchNode(node, item.value)) {
  8475. value = item.value;
  8476. }
  8477. }
  8478. if (value) {
  8479. return false;
  8480. }
  8481. });
  8482. if (value) {
  8483. return false;
  8484. }
  8485. });
  8486. self.value(value);
  8487. });
  8488. };
  8489. };
  8490. var lazyFormatSelectBoxItems = function (editor, blocks) {
  8491. return function () {
  8492. var items = [];
  8493. global$4.each(blocks, function (block) {
  8494. items.push({
  8495. text: block[0],
  8496. value: block[1],
  8497. textStyle: function () {
  8498. return editor.formatter.getCssText(block[1]);
  8499. }
  8500. });
  8501. });
  8502. return {
  8503. type: 'listbox',
  8504. text: blocks[0][0],
  8505. values: items,
  8506. fixedWidth: true,
  8507. onselect: function (e) {
  8508. if (e.control) {
  8509. var fmt = e.control.value();
  8510. toggleFormat(editor, fmt)();
  8511. }
  8512. },
  8513. onPostRender: createListBoxChangeHandler(editor, items)
  8514. };
  8515. };
  8516. };
  8517. var buildMenuItems = function (editor, blocks) {
  8518. return global$4.map(blocks, function (block) {
  8519. return {
  8520. text: block[0],
  8521. onclick: toggleFormat(editor, block[1]),
  8522. textStyle: function () {
  8523. return editor.formatter.getCssText(block[1]);
  8524. }
  8525. };
  8526. });
  8527. };
  8528. var register$4 = function (editor) {
  8529. var blocks = createFormats$1(editor.settings.block_formats || defaultBlocks);
  8530. editor.addMenuItem('blockformats', {
  8531. text: 'Blocks',
  8532. menu: buildMenuItems(editor, blocks)
  8533. });
  8534. editor.addButton('formatselect', lazyFormatSelectBoxItems(editor, blocks));
  8535. };
  8536. var $_ei68w91atjh8lz7xt = { register: register$4 };
  8537. var createCustomMenuItems = function (editor, names) {
  8538. var items, nameList;
  8539. if (typeof names === 'string') {
  8540. nameList = names.split(' ');
  8541. } else if (global$4.isArray(names)) {
  8542. return $_qgcal17ljh8lz7ly.flatten(global$4.map(names, function (names) {
  8543. return createCustomMenuItems(editor, names);
  8544. }));
  8545. }
  8546. items = global$4.grep(nameList, function (name) {
  8547. return name === '|' || name in editor.menuItems;
  8548. });
  8549. return global$4.map(items, function (name) {
  8550. return name === '|' ? { text: '-' } : editor.menuItems[name];
  8551. });
  8552. };
  8553. var isSeparator = function (menuItem) {
  8554. return menuItem && menuItem.text === '-';
  8555. };
  8556. var trimMenuItems = function (menuItems) {
  8557. var menuItems2 = $_qgcal17ljh8lz7ly.filter(menuItems, function (menuItem, i, menuItems) {
  8558. return !isSeparator(menuItem) || !isSeparator(menuItems[i - 1]);
  8559. });
  8560. return $_qgcal17ljh8lz7ly.filter(menuItems2, function (menuItem, i, menuItems) {
  8561. return !isSeparator(menuItem) || i > 0 && i < menuItems.length - 1;
  8562. });
  8563. };
  8564. var createContextMenuItems = function (editor, context) {
  8565. var outputMenuItems = [{ text: '-' }];
  8566. var menuItems = global$4.grep(editor.menuItems, function (menuItem) {
  8567. return menuItem.context === context;
  8568. });
  8569. global$4.each(menuItems, function (menuItem) {
  8570. if (menuItem.separator === 'before') {
  8571. outputMenuItems.push({ text: '|' });
  8572. }
  8573. if (menuItem.prependToContext) {
  8574. outputMenuItems.unshift(menuItem);
  8575. } else {
  8576. outputMenuItems.push(menuItem);
  8577. }
  8578. if (menuItem.separator === 'after') {
  8579. outputMenuItems.push({ text: '|' });
  8580. }
  8581. });
  8582. return outputMenuItems;
  8583. };
  8584. var createInsertMenu = function (editor) {
  8585. var insertButtonItems = editor.settings.insert_button_items;
  8586. if (insertButtonItems) {
  8587. return trimMenuItems(createCustomMenuItems(editor, insertButtonItems));
  8588. } else {
  8589. return trimMenuItems(createContextMenuItems(editor, 'insert'));
  8590. }
  8591. };
  8592. var registerButtons$3 = function (editor) {
  8593. editor.addButton('insert', {
  8594. type: 'menubutton',
  8595. icon: 'insert',
  8596. menu: [],
  8597. oncreatemenu: function () {
  8598. this.menu.add(createInsertMenu(editor));
  8599. this.menu.renderNew();
  8600. }
  8601. });
  8602. };
  8603. var register$5 = function (editor) {
  8604. registerButtons$3(editor);
  8605. };
  8606. var $_2kqzcs1aujh8lz7xw = { register: register$5 };
  8607. var registerFormatButtons = function (editor) {
  8608. global$4.each({
  8609. bold: 'Bold',
  8610. italic: 'Italic',
  8611. underline: 'Underline',
  8612. strikethrough: 'Strikethrough',
  8613. subscript: 'Subscript',
  8614. superscript: 'Superscript'
  8615. }, function (text, name) {
  8616. editor.addButton(name, {
  8617. active: false,
  8618. tooltip: text,
  8619. onPostRender: postRenderFormatToggle(editor, name),
  8620. onclick: toggleFormat(editor, name)
  8621. });
  8622. });
  8623. };
  8624. var registerCommandButtons = function (editor) {
  8625. global$4.each({
  8626. outdent: [
  8627. 'Decrease indent',
  8628. 'Outdent'
  8629. ],
  8630. indent: [
  8631. 'Increase indent',
  8632. 'Indent'
  8633. ],
  8634. cut: [
  8635. 'Cut',
  8636. 'Cut'
  8637. ],
  8638. copy: [
  8639. 'Copy',
  8640. 'Copy'
  8641. ],
  8642. paste: [
  8643. 'Paste',
  8644. 'Paste'
  8645. ],
  8646. help: [
  8647. 'Help',
  8648. 'mceHelp'
  8649. ],
  8650. selectall: [
  8651. 'Select all',
  8652. 'SelectAll'
  8653. ],
  8654. visualaid: [
  8655. 'Visual aids',
  8656. 'mceToggleVisualAid'
  8657. ],
  8658. newdocument: [
  8659. 'New document',
  8660. 'mceNewDocument'
  8661. ],
  8662. removeformat: [
  8663. 'Clear formatting',
  8664. 'RemoveFormat'
  8665. ],
  8666. remove: [
  8667. 'Remove',
  8668. 'Delete'
  8669. ]
  8670. }, function (item, name) {
  8671. editor.addButton(name, {
  8672. tooltip: item[0],
  8673. cmd: item[1]
  8674. });
  8675. });
  8676. };
  8677. var registerCommandToggleButtons = function (editor) {
  8678. global$4.each({
  8679. blockquote: [
  8680. 'Blockquote',
  8681. 'mceBlockQuote'
  8682. ],
  8683. subscript: [
  8684. 'Subscript',
  8685. 'Subscript'
  8686. ],
  8687. superscript: [
  8688. 'Superscript',
  8689. 'Superscript'
  8690. ]
  8691. }, function (item, name) {
  8692. editor.addButton(name, {
  8693. active: false,
  8694. tooltip: item[0],
  8695. cmd: item[1],
  8696. onPostRender: postRenderFormatToggle(editor, name)
  8697. });
  8698. });
  8699. };
  8700. var registerButtons$4 = function (editor) {
  8701. registerFormatButtons(editor);
  8702. registerCommandButtons(editor);
  8703. registerCommandToggleButtons(editor);
  8704. };
  8705. var registerMenuItems$1 = function (editor) {
  8706. global$4.each({
  8707. bold: [
  8708. 'Bold',
  8709. 'Bold',
  8710. 'Meta+B'
  8711. ],
  8712. italic: [
  8713. 'Italic',
  8714. 'Italic',
  8715. 'Meta+I'
  8716. ],
  8717. underline: [
  8718. 'Underline',
  8719. 'Underline',
  8720. 'Meta+U'
  8721. ],
  8722. strikethrough: [
  8723. 'Strikethrough',
  8724. 'Strikethrough'
  8725. ],
  8726. subscript: [
  8727. 'Subscript',
  8728. 'Subscript'
  8729. ],
  8730. superscript: [
  8731. 'Superscript',
  8732. 'Superscript'
  8733. ],
  8734. removeformat: [
  8735. 'Clear formatting',
  8736. 'RemoveFormat'
  8737. ],
  8738. newdocument: [
  8739. 'New document',
  8740. 'mceNewDocument'
  8741. ],
  8742. cut: [
  8743. 'Cut',
  8744. 'Cut',
  8745. 'Meta+X'
  8746. ],
  8747. copy: [
  8748. 'Copy',
  8749. 'Copy',
  8750. 'Meta+C'
  8751. ],
  8752. paste: [
  8753. 'Paste',
  8754. 'Paste',
  8755. 'Meta+V'
  8756. ],
  8757. selectall: [
  8758. 'Select all',
  8759. 'SelectAll',
  8760. 'Meta+A'
  8761. ]
  8762. }, function (item, name) {
  8763. editor.addMenuItem(name, {
  8764. text: item[0],
  8765. icon: name,
  8766. shortcut: item[2],
  8767. cmd: item[1]
  8768. });
  8769. });
  8770. editor.addMenuItem('codeformat', {
  8771. text: 'Code',
  8772. icon: 'code',
  8773. onclick: toggleFormat(editor, 'code')
  8774. });
  8775. };
  8776. var register$6 = function (editor) {
  8777. registerButtons$4(editor);
  8778. registerMenuItems$1(editor);
  8779. };
  8780. var $_b1l3y31avjh8lz7y1 = { register: register$6 };
  8781. var toggleUndoRedoState = function (editor, type) {
  8782. return function () {
  8783. var self = this;
  8784. var checkState = function () {
  8785. var typeFn = type === 'redo' ? 'hasRedo' : 'hasUndo';
  8786. return editor.undoManager ? editor.undoManager[typeFn]() : false;
  8787. };
  8788. self.disabled(!checkState());
  8789. editor.on('Undo Redo AddUndo TypingUndo ClearUndos SwitchMode', function () {
  8790. self.disabled(editor.readonly || !checkState());
  8791. });
  8792. };
  8793. };
  8794. var registerMenuItems$2 = function (editor) {
  8795. editor.addMenuItem('undo', {
  8796. text: 'Undo',
  8797. icon: 'undo',
  8798. shortcut: 'Meta+Z',
  8799. onPostRender: toggleUndoRedoState(editor, 'undo'),
  8800. cmd: 'undo'
  8801. });
  8802. editor.addMenuItem('redo', {
  8803. text: 'Redo',
  8804. icon: 'redo',
  8805. shortcut: 'Meta+Y',
  8806. onPostRender: toggleUndoRedoState(editor, 'redo'),
  8807. cmd: 'redo'
  8808. });
  8809. };
  8810. var registerButtons$5 = function (editor) {
  8811. editor.addButton('undo', {
  8812. tooltip: 'Undo',
  8813. onPostRender: toggleUndoRedoState(editor, 'undo'),
  8814. cmd: 'undo'
  8815. });
  8816. editor.addButton('redo', {
  8817. tooltip: 'Redo',
  8818. onPostRender: toggleUndoRedoState(editor, 'redo'),
  8819. cmd: 'redo'
  8820. });
  8821. };
  8822. var register$7 = function (editor) {
  8823. registerMenuItems$2(editor);
  8824. registerButtons$5(editor);
  8825. };
  8826. var $_altety1awjh8lz7y3 = { register: register$7 };
  8827. var toggleVisualAidState = function (editor) {
  8828. return function () {
  8829. var self = this;
  8830. editor.on('VisualAid', function (e) {
  8831. self.active(e.hasVisual);
  8832. });
  8833. self.active(editor.hasVisual);
  8834. };
  8835. };
  8836. var registerMenuItems$3 = function (editor) {
  8837. editor.addMenuItem('visualaid', {
  8838. text: 'Visual aids',
  8839. selectable: true,
  8840. onPostRender: toggleVisualAidState(editor),
  8841. cmd: 'mceToggleVisualAid'
  8842. });
  8843. };
  8844. var register$8 = function (editor) {
  8845. registerMenuItems$3(editor);
  8846. };
  8847. var $_8qrp151axjh8lz7y4 = { register: register$8 };
  8848. var setupEnvironment = function () {
  8849. Widget.tooltips = !global$1.iOS;
  8850. Control$1.translate = function (text) {
  8851. return global$5.translate(text);
  8852. };
  8853. };
  8854. var setupUiContainer = function (editor) {
  8855. if (editor.settings.ui_container) {
  8856. global$1.container = $_72mqss1aljh8lz7wp.descendant($_b0tm8x19pjh8lz7t9.fromDom(document.body), editor.settings.ui_container).fold($_2jrs7h17njh8lz7m6.constant(null), function (elm) {
  8857. return elm.dom();
  8858. });
  8859. }
  8860. };
  8861. var setupRtlMode = function (editor) {
  8862. if (editor.rtl) {
  8863. Control$1.rtl = true;
  8864. }
  8865. };
  8866. var setupHideFloatPanels = function (editor) {
  8867. editor.on('mousedown', function () {
  8868. FloatPanel.hideAll();
  8869. });
  8870. };
  8871. var setup = function (editor) {
  8872. setupRtlMode(editor);
  8873. setupHideFloatPanels(editor);
  8874. setupUiContainer(editor);
  8875. setupEnvironment();
  8876. $_ei68w91atjh8lz7xt.register(editor);
  8877. $_9eh8yg1aojh8lz7xc.register(editor);
  8878. $_b1l3y31avjh8lz7y1.register(editor);
  8879. $_altety1awjh8lz7y3.register(editor);
  8880. $_nl711arjh8lz7xk.register(editor);
  8881. $_3gzdqt1aqjh8lz7xh.register(editor);
  8882. $_5p34i51asjh8lz7xo.register(editor);
  8883. $_8qrp151axjh8lz7y4.register(editor);
  8884. $_2kqzcs1aujh8lz7xw.register(editor);
  8885. };
  8886. var $_e9ct9h1akjh8lz7wa = { setup: setup };
  8887. var GridLayout = AbsoluteLayout.extend({
  8888. recalc: function (container) {
  8889. var settings, rows, cols, items, contLayoutRect, width, height, rect, ctrlLayoutRect, ctrl, x, y, posX, posY, ctrlSettings, contPaddingBox, align, spacingH, spacingV, alignH, alignV, maxX, maxY;
  8890. var colWidths = [];
  8891. var rowHeights = [];
  8892. var ctrlMinWidth, ctrlMinHeight, availableWidth, availableHeight, reverseRows, idx;
  8893. settings = container.settings;
  8894. items = container.items().filter(':visible');
  8895. contLayoutRect = container.layoutRect();
  8896. cols = settings.columns || Math.ceil(Math.sqrt(items.length));
  8897. rows = Math.ceil(items.length / cols);
  8898. spacingH = settings.spacingH || settings.spacing || 0;
  8899. spacingV = settings.spacingV || settings.spacing || 0;
  8900. alignH = settings.alignH || settings.align;
  8901. alignV = settings.alignV || settings.align;
  8902. contPaddingBox = container.paddingBox;
  8903. reverseRows = 'reverseRows' in settings ? settings.reverseRows : container.isRtl();
  8904. if (alignH && typeof alignH === 'string') {
  8905. alignH = [alignH];
  8906. }
  8907. if (alignV && typeof alignV === 'string') {
  8908. alignV = [alignV];
  8909. }
  8910. for (x = 0; x < cols; x++) {
  8911. colWidths.push(0);
  8912. }
  8913. for (y = 0; y < rows; y++) {
  8914. rowHeights.push(0);
  8915. }
  8916. for (y = 0; y < rows; y++) {
  8917. for (x = 0; x < cols; x++) {
  8918. ctrl = items[y * cols + x];
  8919. if (!ctrl) {
  8920. break;
  8921. }
  8922. ctrlLayoutRect = ctrl.layoutRect();
  8923. ctrlMinWidth = ctrlLayoutRect.minW;
  8924. ctrlMinHeight = ctrlLayoutRect.minH;
  8925. colWidths[x] = ctrlMinWidth > colWidths[x] ? ctrlMinWidth : colWidths[x];
  8926. rowHeights[y] = ctrlMinHeight > rowHeights[y] ? ctrlMinHeight : rowHeights[y];
  8927. }
  8928. }
  8929. availableWidth = contLayoutRect.innerW - contPaddingBox.left - contPaddingBox.right;
  8930. for (maxX = 0, x = 0; x < cols; x++) {
  8931. maxX += colWidths[x] + (x > 0 ? spacingH : 0);
  8932. availableWidth -= (x > 0 ? spacingH : 0) + colWidths[x];
  8933. }
  8934. availableHeight = contLayoutRect.innerH - contPaddingBox.top - contPaddingBox.bottom;
  8935. for (maxY = 0, y = 0; y < rows; y++) {
  8936. maxY += rowHeights[y] + (y > 0 ? spacingV : 0);
  8937. availableHeight -= (y > 0 ? spacingV : 0) + rowHeights[y];
  8938. }
  8939. maxX += contPaddingBox.left + contPaddingBox.right;
  8940. maxY += contPaddingBox.top + contPaddingBox.bottom;
  8941. rect = {};
  8942. rect.minW = maxX + (contLayoutRect.w - contLayoutRect.innerW);
  8943. rect.minH = maxY + (contLayoutRect.h - contLayoutRect.innerH);
  8944. rect.contentW = rect.minW - contLayoutRect.deltaW;
  8945. rect.contentH = rect.minH - contLayoutRect.deltaH;
  8946. rect.minW = Math.min(rect.minW, contLayoutRect.maxW);
  8947. rect.minH = Math.min(rect.minH, contLayoutRect.maxH);
  8948. rect.minW = Math.max(rect.minW, contLayoutRect.startMinWidth);
  8949. rect.minH = Math.max(rect.minH, contLayoutRect.startMinHeight);
  8950. if (contLayoutRect.autoResize && (rect.minW !== contLayoutRect.minW || rect.minH !== contLayoutRect.minH)) {
  8951. rect.w = rect.minW;
  8952. rect.h = rect.minH;
  8953. container.layoutRect(rect);
  8954. this.recalc(container);
  8955. if (container._lastRect === null) {
  8956. var parentCtrl = container.parent();
  8957. if (parentCtrl) {
  8958. parentCtrl._lastRect = null;
  8959. parentCtrl.recalc();
  8960. }
  8961. }
  8962. return;
  8963. }
  8964. if (contLayoutRect.autoResize) {
  8965. rect = container.layoutRect(rect);
  8966. rect.contentW = rect.minW - contLayoutRect.deltaW;
  8967. rect.contentH = rect.minH - contLayoutRect.deltaH;
  8968. }
  8969. var flexV;
  8970. if (settings.packV === 'start') {
  8971. flexV = 0;
  8972. } else {
  8973. flexV = availableHeight > 0 ? Math.floor(availableHeight / rows) : 0;
  8974. }
  8975. var totalFlex = 0;
  8976. var flexWidths = settings.flexWidths;
  8977. if (flexWidths) {
  8978. for (x = 0; x < flexWidths.length; x++) {
  8979. totalFlex += flexWidths[x];
  8980. }
  8981. } else {
  8982. totalFlex = cols;
  8983. }
  8984. var ratio = availableWidth / totalFlex;
  8985. for (x = 0; x < cols; x++) {
  8986. colWidths[x] += flexWidths ? flexWidths[x] * ratio : ratio;
  8987. }
  8988. posY = contPaddingBox.top;
  8989. for (y = 0; y < rows; y++) {
  8990. posX = contPaddingBox.left;
  8991. height = rowHeights[y] + flexV;
  8992. for (x = 0; x < cols; x++) {
  8993. if (reverseRows) {
  8994. idx = y * cols + cols - 1 - x;
  8995. } else {
  8996. idx = y * cols + x;
  8997. }
  8998. ctrl = items[idx];
  8999. if (!ctrl) {
  9000. break;
  9001. }
  9002. ctrlSettings = ctrl.settings;
  9003. ctrlLayoutRect = ctrl.layoutRect();
  9004. width = Math.max(colWidths[x], ctrlLayoutRect.startMinWidth);
  9005. ctrlLayoutRect.x = posX;
  9006. ctrlLayoutRect.y = posY;
  9007. align = ctrlSettings.alignH || (alignH ? alignH[x] || alignH[0] : null);
  9008. if (align === 'center') {
  9009. ctrlLayoutRect.x = posX + width / 2 - ctrlLayoutRect.w / 2;
  9010. } else if (align === 'right') {
  9011. ctrlLayoutRect.x = posX + width - ctrlLayoutRect.w;
  9012. } else if (align === 'stretch') {
  9013. ctrlLayoutRect.w = width;
  9014. }
  9015. align = ctrlSettings.alignV || (alignV ? alignV[x] || alignV[0] : null);
  9016. if (align === 'center') {
  9017. ctrlLayoutRect.y = posY + height / 2 - ctrlLayoutRect.h / 2;
  9018. } else if (align === 'bottom') {
  9019. ctrlLayoutRect.y = posY + height - ctrlLayoutRect.h;
  9020. } else if (align === 'stretch') {
  9021. ctrlLayoutRect.h = height;
  9022. }
  9023. ctrl.layoutRect(ctrlLayoutRect);
  9024. posX += width + spacingH;
  9025. if (ctrl.recalc) {
  9026. ctrl.recalc();
  9027. }
  9028. }
  9029. posY += height + spacingV;
  9030. }
  9031. }
  9032. });
  9033. var Iframe = Widget.extend({
  9034. renderHtml: function () {
  9035. var self = this;
  9036. self.classes.add('iframe');
  9037. self.canFocus = false;
  9038. return '<iframe id="' + self._id + '" class="' + self.classes + '" tabindex="-1" src="' + (self.settings.url || 'javascript:\'\'') + '" frameborder="0"></iframe>';
  9039. },
  9040. src: function (src) {
  9041. this.getEl().src = src;
  9042. },
  9043. html: function (html, callback) {
  9044. var self = this, body = this.getEl().contentWindow.document.body;
  9045. if (!body) {
  9046. global$3.setTimeout(function () {
  9047. self.html(html);
  9048. });
  9049. } else {
  9050. body.innerHTML = html;
  9051. if (callback) {
  9052. callback();
  9053. }
  9054. }
  9055. return this;
  9056. }
  9057. });
  9058. var InfoBox = Widget.extend({
  9059. init: function (settings) {
  9060. var self = this;
  9061. self._super(settings);
  9062. self.classes.add('widget').add('infobox');
  9063. self.canFocus = false;
  9064. },
  9065. severity: function (level) {
  9066. this.classes.remove('error');
  9067. this.classes.remove('warning');
  9068. this.classes.remove('success');
  9069. this.classes.add(level);
  9070. },
  9071. help: function (state) {
  9072. this.state.set('help', state);
  9073. },
  9074. renderHtml: function () {
  9075. var self = this, prefix = self.classPrefix;
  9076. 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>';
  9077. },
  9078. bindStates: function () {
  9079. var self = this;
  9080. self.state.on('change:text', function (e) {
  9081. self.getEl('body').firstChild.data = self.encode(e.value);
  9082. if (self.state.get('rendered')) {
  9083. self.updateLayoutRect();
  9084. }
  9085. });
  9086. self.state.on('change:help', function (e) {
  9087. self.classes.toggle('has-help', e.value);
  9088. if (self.state.get('rendered')) {
  9089. self.updateLayoutRect();
  9090. }
  9091. });
  9092. return self._super();
  9093. }
  9094. });
  9095. var Label = Widget.extend({
  9096. init: function (settings) {
  9097. var self = this;
  9098. self._super(settings);
  9099. self.classes.add('widget').add('label');
  9100. self.canFocus = false;
  9101. if (settings.multiline) {
  9102. self.classes.add('autoscroll');
  9103. }
  9104. if (settings.strong) {
  9105. self.classes.add('strong');
  9106. }
  9107. },
  9108. initLayoutRect: function () {
  9109. var self = this, layoutRect = self._super();
  9110. if (self.settings.multiline) {
  9111. var size = funcs.getSize(self.getEl());
  9112. if (size.width > layoutRect.maxW) {
  9113. layoutRect.minW = layoutRect.maxW;
  9114. self.classes.add('multiline');
  9115. }
  9116. self.getEl().style.width = layoutRect.minW + 'px';
  9117. layoutRect.startMinH = layoutRect.h = layoutRect.minH = Math.min(layoutRect.maxH, funcs.getSize(self.getEl()).height);
  9118. }
  9119. return layoutRect;
  9120. },
  9121. repaint: function () {
  9122. var self = this;
  9123. if (!self.settings.multiline) {
  9124. self.getEl().style.lineHeight = self.layoutRect().h + 'px';
  9125. }
  9126. return self._super();
  9127. },
  9128. severity: function (level) {
  9129. this.classes.remove('error');
  9130. this.classes.remove('warning');
  9131. this.classes.remove('success');
  9132. this.classes.add(level);
  9133. },
  9134. renderHtml: function () {
  9135. var self = this;
  9136. var targetCtrl, forName, forId = self.settings.forId;
  9137. var text = self.settings.html ? self.settings.html : self.encode(self.state.get('text'));
  9138. if (!forId && (forName = self.settings.forName)) {
  9139. targetCtrl = self.getRoot().find('#' + forName)[0];
  9140. if (targetCtrl) {
  9141. forId = targetCtrl._id;
  9142. }
  9143. }
  9144. if (forId) {
  9145. return '<label id="' + self._id + '" class="' + self.classes + '"' + (forId ? ' for="' + forId + '"' : '') + '>' + text + '</label>';
  9146. }
  9147. return '<span id="' + self._id + '" class="' + self.classes + '">' + text + '</span>';
  9148. },
  9149. bindStates: function () {
  9150. var self = this;
  9151. self.state.on('change:text', function (e) {
  9152. self.innerHtml(self.encode(e.value));
  9153. if (self.state.get('rendered')) {
  9154. self.updateLayoutRect();
  9155. }
  9156. });
  9157. return self._super();
  9158. }
  9159. });
  9160. var Toolbar$1 = Container.extend({
  9161. Defaults: {
  9162. role: 'toolbar',
  9163. layout: 'flow'
  9164. },
  9165. init: function (settings) {
  9166. var self = this;
  9167. self._super(settings);
  9168. self.classes.add('toolbar');
  9169. },
  9170. postRender: function () {
  9171. var self = this;
  9172. self.items().each(function (ctrl) {
  9173. ctrl.classes.add('toolbar-item');
  9174. });
  9175. return self._super();
  9176. }
  9177. });
  9178. var MenuBar = Toolbar$1.extend({
  9179. Defaults: {
  9180. role: 'menubar',
  9181. containerCls: 'menubar',
  9182. ariaRoot: true,
  9183. defaults: { type: 'menubutton' }
  9184. }
  9185. });
  9186. function isChildOf$1(node, parent) {
  9187. while (node) {
  9188. if (parent === node) {
  9189. return true;
  9190. }
  9191. node = node.parentNode;
  9192. }
  9193. return false;
  9194. }
  9195. var MenuButton = Button.extend({
  9196. init: function (settings) {
  9197. var self = this;
  9198. self._renderOpen = true;
  9199. self._super(settings);
  9200. settings = self.settings;
  9201. self.classes.add('menubtn');
  9202. if (settings.fixedWidth) {
  9203. self.classes.add('fixed-width');
  9204. }
  9205. self.aria('haspopup', true);
  9206. self.state.set('menu', settings.menu || self.render());
  9207. },
  9208. showMenu: function (toggle) {
  9209. var self = this;
  9210. var menu;
  9211. if (self.menu && self.menu.visible() && toggle !== false) {
  9212. return self.hideMenu();
  9213. }
  9214. if (!self.menu) {
  9215. menu = self.state.get('menu') || [];
  9216. self.classes.add('opened');
  9217. if (menu.length) {
  9218. menu = {
  9219. type: 'menu',
  9220. animate: true,
  9221. items: menu
  9222. };
  9223. } else {
  9224. menu.type = menu.type || 'menu';
  9225. menu.animate = true;
  9226. }
  9227. if (!menu.renderTo) {
  9228. self.menu = global$11.create(menu).parent(self).renderTo();
  9229. } else {
  9230. self.menu = menu.parent(self).show().renderTo();
  9231. }
  9232. self.fire('createmenu');
  9233. self.menu.reflow();
  9234. self.menu.on('cancel', function (e) {
  9235. if (e.control.parent() === self.menu) {
  9236. e.stopPropagation();
  9237. self.focus();
  9238. self.hideMenu();
  9239. }
  9240. });
  9241. self.menu.on('select', function () {
  9242. self.focus();
  9243. });
  9244. self.menu.on('show hide', function (e) {
  9245. if (e.control === self.menu) {
  9246. self.activeMenu(e.type === 'show');
  9247. self.classes.toggle('opened', e.type === 'show');
  9248. }
  9249. self.aria('expanded', e.type === 'show');
  9250. }).fire('show');
  9251. }
  9252. self.menu.show();
  9253. self.menu.layoutRect({ w: self.layoutRect().w });
  9254. self.menu.repaint();
  9255. self.menu.moveRel(self.getEl(), self.isRtl() ? [
  9256. 'br-tr',
  9257. 'tr-br'
  9258. ] : [
  9259. 'bl-tl',
  9260. 'tl-bl'
  9261. ]);
  9262. self.fire('showmenu');
  9263. },
  9264. hideMenu: function () {
  9265. var self = this;
  9266. if (self.menu) {
  9267. self.menu.items().each(function (item) {
  9268. if (item.hideMenu) {
  9269. item.hideMenu();
  9270. }
  9271. });
  9272. self.menu.hide();
  9273. }
  9274. },
  9275. activeMenu: function (state) {
  9276. this.classes.toggle('active', state);
  9277. },
  9278. renderHtml: function () {
  9279. var self = this, id = self._id, prefix = self.classPrefix;
  9280. var icon = self.settings.icon, image;
  9281. var text = self.state.get('text');
  9282. var textHtml = '';
  9283. image = self.settings.image;
  9284. if (image) {
  9285. icon = 'none';
  9286. if (typeof image !== 'string') {
  9287. image = window.getSelection ? image[0] : image[1];
  9288. }
  9289. image = ' style="background-image: url(\'' + image + '\')"';
  9290. } else {
  9291. image = '';
  9292. }
  9293. if (text) {
  9294. self.classes.add('btn-has-text');
  9295. textHtml = '<span class="' + prefix + 'txt">' + self.encode(text) + '</span>';
  9296. }
  9297. icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + icon : '';
  9298. self.aria('role', self.parent() instanceof MenuBar ? 'menuitem' : 'button');
  9299. 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>';
  9300. },
  9301. postRender: function () {
  9302. var self = this;
  9303. self.on('click', function (e) {
  9304. if (e.control === self && isChildOf$1(e.target, self.getEl())) {
  9305. self.focus();
  9306. self.showMenu(!e.aria);
  9307. if (e.aria) {
  9308. self.menu.items().filter(':visible')[0].focus();
  9309. }
  9310. }
  9311. });
  9312. self.on('mouseenter', function (e) {
  9313. var overCtrl = e.control;
  9314. var parent = self.parent();
  9315. var hasVisibleSiblingMenu;
  9316. if (overCtrl && parent && overCtrl instanceof MenuButton && overCtrl.parent() === parent) {
  9317. parent.items().filter('MenuButton').each(function (ctrl) {
  9318. if (ctrl.hideMenu && ctrl !== overCtrl) {
  9319. if (ctrl.menu && ctrl.menu.visible()) {
  9320. hasVisibleSiblingMenu = true;
  9321. }
  9322. ctrl.hideMenu();
  9323. }
  9324. });
  9325. if (hasVisibleSiblingMenu) {
  9326. overCtrl.focus();
  9327. overCtrl.showMenu();
  9328. }
  9329. }
  9330. });
  9331. return self._super();
  9332. },
  9333. bindStates: function () {
  9334. var self = this;
  9335. self.state.on('change:menu', function () {
  9336. if (self.menu) {
  9337. self.menu.remove();
  9338. }
  9339. self.menu = null;
  9340. });
  9341. return self._super();
  9342. },
  9343. remove: function () {
  9344. this._super();
  9345. if (this.menu) {
  9346. this.menu.remove();
  9347. }
  9348. }
  9349. });
  9350. function Throbber (elm, inline) {
  9351. var self = this;
  9352. var state;
  9353. var classPrefix = Control$1.classPrefix;
  9354. var timer;
  9355. self.show = function (time, callback) {
  9356. function render() {
  9357. if (state) {
  9358. global$7(elm).append('<div class="' + classPrefix + 'throbber' + (inline ? ' ' + classPrefix + 'throbber-inline' : '') + '"></div>');
  9359. if (callback) {
  9360. callback();
  9361. }
  9362. }
  9363. }
  9364. self.hide();
  9365. state = true;
  9366. if (time) {
  9367. timer = global$3.setTimeout(render, time);
  9368. } else {
  9369. render();
  9370. }
  9371. return self;
  9372. };
  9373. self.hide = function () {
  9374. var child = elm.lastChild;
  9375. global$3.clearTimeout(timer);
  9376. if (child && child.className.indexOf('throbber') !== -1) {
  9377. child.parentNode.removeChild(child);
  9378. }
  9379. state = false;
  9380. return self;
  9381. };
  9382. }
  9383. var Menu = FloatPanel.extend({
  9384. Defaults: {
  9385. defaultType: 'menuitem',
  9386. border: 1,
  9387. layout: 'stack',
  9388. role: 'application',
  9389. bodyRole: 'menu',
  9390. ariaRoot: true
  9391. },
  9392. init: function (settings) {
  9393. var self = this;
  9394. settings.autohide = true;
  9395. settings.constrainToViewport = true;
  9396. if (typeof settings.items === 'function') {
  9397. settings.itemsFactory = settings.items;
  9398. settings.items = [];
  9399. }
  9400. if (settings.itemDefaults) {
  9401. var items = settings.items;
  9402. var i = items.length;
  9403. while (i--) {
  9404. items[i] = global$4.extend({}, settings.itemDefaults, items[i]);
  9405. }
  9406. }
  9407. self._super(settings);
  9408. self.classes.add('menu');
  9409. if (settings.animate && global$1.ie !== 11) {
  9410. self.classes.add('animate');
  9411. }
  9412. },
  9413. repaint: function () {
  9414. this.classes.toggle('menu-align', true);
  9415. this._super();
  9416. this.getEl().style.height = '';
  9417. this.getEl('body').style.height = '';
  9418. return this;
  9419. },
  9420. cancel: function () {
  9421. var self = this;
  9422. self.hideAll();
  9423. self.fire('select');
  9424. },
  9425. load: function () {
  9426. var self = this;
  9427. var time, factory;
  9428. function hideThrobber() {
  9429. if (self.throbber) {
  9430. self.throbber.hide();
  9431. self.throbber = null;
  9432. }
  9433. }
  9434. factory = self.settings.itemsFactory;
  9435. if (!factory) {
  9436. return;
  9437. }
  9438. if (!self.throbber) {
  9439. self.throbber = new Throbber(self.getEl('body'), true);
  9440. if (self.items().length === 0) {
  9441. self.throbber.show();
  9442. self.fire('loading');
  9443. } else {
  9444. self.throbber.show(100, function () {
  9445. self.items().remove();
  9446. self.fire('loading');
  9447. });
  9448. }
  9449. self.on('hide close', hideThrobber);
  9450. }
  9451. self.requestTime = time = new Date().getTime();
  9452. self.settings.itemsFactory(function (items) {
  9453. if (items.length === 0) {
  9454. self.hide();
  9455. return;
  9456. }
  9457. if (self.requestTime !== time) {
  9458. return;
  9459. }
  9460. self.getEl().style.width = '';
  9461. self.getEl('body').style.width = '';
  9462. hideThrobber();
  9463. self.items().remove();
  9464. self.getEl('body').innerHTML = '';
  9465. self.add(items);
  9466. self.renderNew();
  9467. self.fire('loaded');
  9468. });
  9469. },
  9470. hideAll: function () {
  9471. var self = this;
  9472. this.find('menuitem').exec('hideMenu');
  9473. return self._super();
  9474. },
  9475. preRender: function () {
  9476. var self = this;
  9477. self.items().each(function (ctrl) {
  9478. var settings = ctrl.settings;
  9479. if (settings.icon || settings.image || settings.selectable) {
  9480. self._hasIcons = true;
  9481. return false;
  9482. }
  9483. });
  9484. if (self.settings.itemsFactory) {
  9485. self.on('postrender', function () {
  9486. if (self.settings.itemsFactory) {
  9487. self.load();
  9488. }
  9489. });
  9490. }
  9491. self.on('show hide', function (e) {
  9492. if (e.control === self) {
  9493. if (e.type === 'show') {
  9494. global$3.setTimeout(function () {
  9495. self.classes.add('in');
  9496. }, 0);
  9497. } else {
  9498. self.classes.remove('in');
  9499. }
  9500. }
  9501. });
  9502. return self._super();
  9503. }
  9504. });
  9505. var ListBox = MenuButton.extend({
  9506. init: function (settings) {
  9507. var self = this;
  9508. var values, selected, selectedText, lastItemCtrl;
  9509. function setSelected(menuValues) {
  9510. for (var i = 0; i < menuValues.length; i++) {
  9511. selected = menuValues[i].selected || settings.value === menuValues[i].value;
  9512. if (selected) {
  9513. selectedText = selectedText || menuValues[i].text;
  9514. self.state.set('value', menuValues[i].value);
  9515. return true;
  9516. }
  9517. if (menuValues[i].menu) {
  9518. if (setSelected(menuValues[i].menu)) {
  9519. return true;
  9520. }
  9521. }
  9522. }
  9523. }
  9524. self._super(settings);
  9525. settings = self.settings;
  9526. self._values = values = settings.values;
  9527. if (values) {
  9528. if (typeof settings.value !== 'undefined') {
  9529. setSelected(values);
  9530. }
  9531. if (!selected && values.length > 0) {
  9532. selectedText = values[0].text;
  9533. self.state.set('value', values[0].value);
  9534. }
  9535. self.state.set('menu', values);
  9536. }
  9537. self.state.set('text', settings.text || selectedText);
  9538. self.classes.add('listbox');
  9539. self.on('select', function (e) {
  9540. var ctrl = e.control;
  9541. if (lastItemCtrl) {
  9542. e.lastControl = lastItemCtrl;
  9543. }
  9544. if (settings.multiple) {
  9545. ctrl.active(!ctrl.active());
  9546. } else {
  9547. self.value(e.control.value());
  9548. }
  9549. lastItemCtrl = ctrl;
  9550. });
  9551. },
  9552. value: function (value) {
  9553. if (arguments.length === 0) {
  9554. return this.state.get('value');
  9555. }
  9556. if (typeof value === 'undefined') {
  9557. return this;
  9558. }
  9559. if (this.settings.values) {
  9560. var matchingValues = global$4.grep(this.settings.values, function (a) {
  9561. return a.value === value;
  9562. });
  9563. if (matchingValues.length > 0) {
  9564. this.state.set('value', value);
  9565. } else if (value === null) {
  9566. this.state.set('value', null);
  9567. }
  9568. } else {
  9569. this.state.set('value', value);
  9570. }
  9571. return this;
  9572. },
  9573. bindStates: function () {
  9574. var self = this;
  9575. function activateMenuItemsByValue(menu, value) {
  9576. if (menu instanceof Menu) {
  9577. menu.items().each(function (ctrl) {
  9578. if (!ctrl.hasMenus()) {
  9579. ctrl.active(ctrl.value() === value);
  9580. }
  9581. });
  9582. }
  9583. }
  9584. function getSelectedItem(menuValues, value) {
  9585. var selectedItem;
  9586. if (!menuValues) {
  9587. return;
  9588. }
  9589. for (var i = 0; i < menuValues.length; i++) {
  9590. if (menuValues[i].value === value) {
  9591. return menuValues[i];
  9592. }
  9593. if (menuValues[i].menu) {
  9594. selectedItem = getSelectedItem(menuValues[i].menu, value);
  9595. if (selectedItem) {
  9596. return selectedItem;
  9597. }
  9598. }
  9599. }
  9600. }
  9601. self.on('show', function (e) {
  9602. activateMenuItemsByValue(e.control, self.value());
  9603. });
  9604. self.state.on('change:value', function (e) {
  9605. var selectedItem = getSelectedItem(self.state.get('menu'), e.value);
  9606. if (selectedItem) {
  9607. self.text(selectedItem.text);
  9608. } else {
  9609. self.text(self.settings.text);
  9610. }
  9611. });
  9612. return self._super();
  9613. }
  9614. });
  9615. var toggleTextStyle = function (ctrl, state) {
  9616. var textStyle = ctrl._textStyle;
  9617. if (textStyle) {
  9618. var textElm = ctrl.getEl('text');
  9619. textElm.setAttribute('style', textStyle);
  9620. if (state) {
  9621. textElm.style.color = '';
  9622. textElm.style.backgroundColor = '';
  9623. }
  9624. }
  9625. };
  9626. var MenuItem = Widget.extend({
  9627. Defaults: {
  9628. border: 0,
  9629. role: 'menuitem'
  9630. },
  9631. init: function (settings) {
  9632. var self = this;
  9633. var text;
  9634. self._super(settings);
  9635. settings = self.settings;
  9636. self.classes.add('menu-item');
  9637. if (settings.menu) {
  9638. self.classes.add('menu-item-expand');
  9639. }
  9640. if (settings.preview) {
  9641. self.classes.add('menu-item-preview');
  9642. }
  9643. text = self.state.get('text');
  9644. if (text === '-' || text === '|') {
  9645. self.classes.add('menu-item-sep');
  9646. self.aria('role', 'separator');
  9647. self.state.set('text', '-');
  9648. }
  9649. if (settings.selectable) {
  9650. self.aria('role', 'menuitemcheckbox');
  9651. self.classes.add('menu-item-checkbox');
  9652. settings.icon = 'selected';
  9653. }
  9654. if (!settings.preview && !settings.selectable) {
  9655. self.classes.add('menu-item-normal');
  9656. }
  9657. self.on('mousedown', function (e) {
  9658. e.preventDefault();
  9659. });
  9660. if (settings.menu && !settings.ariaHideMenu) {
  9661. self.aria('haspopup', true);
  9662. }
  9663. },
  9664. hasMenus: function () {
  9665. return !!this.settings.menu;
  9666. },
  9667. showMenu: function () {
  9668. var self = this;
  9669. var settings = self.settings;
  9670. var menu;
  9671. var parent = self.parent();
  9672. parent.items().each(function (ctrl) {
  9673. if (ctrl !== self) {
  9674. ctrl.hideMenu();
  9675. }
  9676. });
  9677. if (settings.menu) {
  9678. menu = self.menu;
  9679. if (!menu) {
  9680. menu = settings.menu;
  9681. if (menu.length) {
  9682. menu = {
  9683. type: 'menu',
  9684. items: menu
  9685. };
  9686. } else {
  9687. menu.type = menu.type || 'menu';
  9688. }
  9689. if (parent.settings.itemDefaults) {
  9690. menu.itemDefaults = parent.settings.itemDefaults;
  9691. }
  9692. menu = self.menu = global$11.create(menu).parent(self).renderTo();
  9693. menu.reflow();
  9694. menu.on('cancel', function (e) {
  9695. e.stopPropagation();
  9696. self.focus();
  9697. menu.hide();
  9698. });
  9699. menu.on('show hide', function (e) {
  9700. if (e.control.items) {
  9701. e.control.items().each(function (ctrl) {
  9702. ctrl.active(ctrl.settings.selected);
  9703. });
  9704. }
  9705. }).fire('show');
  9706. menu.on('hide', function (e) {
  9707. if (e.control === menu) {
  9708. self.classes.remove('selected');
  9709. }
  9710. });
  9711. menu.submenu = true;
  9712. } else {
  9713. menu.show();
  9714. }
  9715. menu._parentMenu = parent;
  9716. menu.classes.add('menu-sub');
  9717. var rel = menu.testMoveRel(self.getEl(), self.isRtl() ? [
  9718. 'tl-tr',
  9719. 'bl-br',
  9720. 'tr-tl',
  9721. 'br-bl'
  9722. ] : [
  9723. 'tr-tl',
  9724. 'br-bl',
  9725. 'tl-tr',
  9726. 'bl-br'
  9727. ]);
  9728. menu.moveRel(self.getEl(), rel);
  9729. menu.rel = rel;
  9730. rel = 'menu-sub-' + rel;
  9731. menu.classes.remove(menu._lastRel).add(rel);
  9732. menu._lastRel = rel;
  9733. self.classes.add('selected');
  9734. self.aria('expanded', true);
  9735. }
  9736. },
  9737. hideMenu: function () {
  9738. var self = this;
  9739. if (self.menu) {
  9740. self.menu.items().each(function (item) {
  9741. if (item.hideMenu) {
  9742. item.hideMenu();
  9743. }
  9744. });
  9745. self.menu.hide();
  9746. self.aria('expanded', false);
  9747. }
  9748. return self;
  9749. },
  9750. renderHtml: function () {
  9751. var self = this;
  9752. var id = self._id;
  9753. var settings = self.settings;
  9754. var prefix = self.classPrefix;
  9755. var text = self.state.get('text');
  9756. var icon = self.settings.icon, image = '', shortcut = settings.shortcut;
  9757. var url = self.encode(settings.url), iconHtml = '';
  9758. function convertShortcut(shortcut) {
  9759. var i, value, replace = {};
  9760. if (global$1.mac) {
  9761. replace = {
  9762. alt: '&#x2325;',
  9763. ctrl: '&#x2318;',
  9764. shift: '&#x21E7;',
  9765. meta: '&#x2318;'
  9766. };
  9767. } else {
  9768. replace = { meta: 'Ctrl' };
  9769. }
  9770. shortcut = shortcut.split('+');
  9771. for (i = 0; i < shortcut.length; i++) {
  9772. value = replace[shortcut[i].toLowerCase()];
  9773. if (value) {
  9774. shortcut[i] = value;
  9775. }
  9776. }
  9777. return shortcut.join('+');
  9778. }
  9779. function escapeRegExp(str) {
  9780. return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
  9781. }
  9782. function markMatches(text) {
  9783. var match = settings.match || '';
  9784. return match ? text.replace(new RegExp(escapeRegExp(match), 'gi'), function (match) {
  9785. return '!mce~match[' + match + ']mce~match!';
  9786. }) : text;
  9787. }
  9788. function boldMatches(text) {
  9789. return text.replace(new RegExp(escapeRegExp('!mce~match['), 'g'), '<b>').replace(new RegExp(escapeRegExp(']mce~match!'), 'g'), '</b>');
  9790. }
  9791. if (icon) {
  9792. self.parent().classes.add('menu-has-icons');
  9793. }
  9794. if (settings.image) {
  9795. image = ' style="background-image: url(\'' + settings.image + '\')"';
  9796. }
  9797. if (shortcut) {
  9798. shortcut = convertShortcut(shortcut);
  9799. }
  9800. icon = prefix + 'ico ' + prefix + 'i-' + (self.settings.icon || 'none');
  9801. iconHtml = text !== '-' ? '<i class="' + icon + '"' + image + '></i>\xA0' : '';
  9802. text = boldMatches(self.encode(markMatches(text)));
  9803. url = boldMatches(self.encode(markMatches(url)));
  9804. 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>';
  9805. },
  9806. postRender: function () {
  9807. var self = this, settings = self.settings;
  9808. var textStyle = settings.textStyle;
  9809. if (typeof textStyle === 'function') {
  9810. textStyle = textStyle.call(this);
  9811. }
  9812. if (textStyle) {
  9813. var textElm = self.getEl('text');
  9814. if (textElm) {
  9815. textElm.setAttribute('style', textStyle);
  9816. self._textStyle = textStyle;
  9817. }
  9818. }
  9819. self.on('mouseenter click', function (e) {
  9820. if (e.control === self) {
  9821. if (!settings.menu && e.type === 'click') {
  9822. self.fire('select');
  9823. global$3.requestAnimationFrame(function () {
  9824. self.parent().hideAll();
  9825. });
  9826. } else {
  9827. self.showMenu();
  9828. if (e.aria) {
  9829. self.menu.focus(true);
  9830. }
  9831. }
  9832. }
  9833. });
  9834. self._super();
  9835. return self;
  9836. },
  9837. hover: function () {
  9838. var self = this;
  9839. self.parent().items().each(function (ctrl) {
  9840. ctrl.classes.remove('selected');
  9841. });
  9842. self.classes.toggle('selected', true);
  9843. return self;
  9844. },
  9845. active: function (state) {
  9846. toggleTextStyle(this, state);
  9847. if (typeof state !== 'undefined') {
  9848. this.aria('checked', state);
  9849. }
  9850. return this._super(state);
  9851. },
  9852. remove: function () {
  9853. this._super();
  9854. if (this.menu) {
  9855. this.menu.remove();
  9856. }
  9857. }
  9858. });
  9859. var Radio = Checkbox.extend({
  9860. Defaults: {
  9861. classes: 'radio',
  9862. role: 'radio'
  9863. }
  9864. });
  9865. var ResizeHandle = Widget.extend({
  9866. renderHtml: function () {
  9867. var self = this, prefix = self.classPrefix;
  9868. self.classes.add('resizehandle');
  9869. if (self.settings.direction === 'both') {
  9870. self.classes.add('resizehandle-both');
  9871. }
  9872. self.canFocus = false;
  9873. return '<div id="' + self._id + '" class="' + self.classes + '">' + '<i class="' + prefix + 'ico ' + prefix + 'i-resize"></i>' + '</div>';
  9874. },
  9875. postRender: function () {
  9876. var self = this;
  9877. self._super();
  9878. self.resizeDragHelper = new DragHelper(this._id, {
  9879. start: function () {
  9880. self.fire('ResizeStart');
  9881. },
  9882. drag: function (e) {
  9883. if (self.settings.direction !== 'both') {
  9884. e.deltaX = 0;
  9885. }
  9886. self.fire('Resize', e);
  9887. },
  9888. stop: function () {
  9889. self.fire('ResizeEnd');
  9890. }
  9891. });
  9892. },
  9893. remove: function () {
  9894. if (this.resizeDragHelper) {
  9895. this.resizeDragHelper.destroy();
  9896. }
  9897. return this._super();
  9898. }
  9899. });
  9900. function createOptions(options) {
  9901. var strOptions = '';
  9902. if (options) {
  9903. for (var i = 0; i < options.length; i++) {
  9904. strOptions += '<option value="' + options[i] + '">' + options[i] + '</option>';
  9905. }
  9906. }
  9907. return strOptions;
  9908. }
  9909. var SelectBox = Widget.extend({
  9910. Defaults: {
  9911. classes: 'selectbox',
  9912. role: 'selectbox',
  9913. options: []
  9914. },
  9915. init: function (settings) {
  9916. var self = this;
  9917. self._super(settings);
  9918. if (self.settings.size) {
  9919. self.size = self.settings.size;
  9920. }
  9921. if (self.settings.options) {
  9922. self._options = self.settings.options;
  9923. }
  9924. self.on('keydown', function (e) {
  9925. var rootControl;
  9926. if (e.keyCode === 13) {
  9927. e.preventDefault();
  9928. self.parents().reverse().each(function (ctrl) {
  9929. if (ctrl.toJSON) {
  9930. rootControl = ctrl;
  9931. return false;
  9932. }
  9933. });
  9934. self.fire('submit', { data: rootControl.toJSON() });
  9935. }
  9936. });
  9937. },
  9938. options: function (state) {
  9939. if (!arguments.length) {
  9940. return this.state.get('options');
  9941. }
  9942. this.state.set('options', state);
  9943. return this;
  9944. },
  9945. renderHtml: function () {
  9946. var self = this;
  9947. var options, size = '';
  9948. options = createOptions(self._options);
  9949. if (self.size) {
  9950. size = ' size = "' + self.size + '"';
  9951. }
  9952. return '<select id="' + self._id + '" class="' + self.classes + '"' + size + '>' + options + '</select>';
  9953. },
  9954. bindStates: function () {
  9955. var self = this;
  9956. self.state.on('change:options', function (e) {
  9957. self.getEl().innerHTML = createOptions(e.value);
  9958. });
  9959. return self._super();
  9960. }
  9961. });
  9962. function constrain(value, minVal, maxVal) {
  9963. if (value < minVal) {
  9964. value = minVal;
  9965. }
  9966. if (value > maxVal) {
  9967. value = maxVal;
  9968. }
  9969. return value;
  9970. }
  9971. function setAriaProp(el, name, value) {
  9972. el.setAttribute('aria-' + name, value);
  9973. }
  9974. function updateSliderHandle(ctrl, value) {
  9975. var maxHandlePos, shortSizeName, sizeName, stylePosName, styleValue, handleEl;
  9976. if (ctrl.settings.orientation === 'v') {
  9977. stylePosName = 'top';
  9978. sizeName = 'height';
  9979. shortSizeName = 'h';
  9980. } else {
  9981. stylePosName = 'left';
  9982. sizeName = 'width';
  9983. shortSizeName = 'w';
  9984. }
  9985. handleEl = ctrl.getEl('handle');
  9986. maxHandlePos = (ctrl.layoutRect()[shortSizeName] || 100) - funcs.getSize(handleEl)[sizeName];
  9987. styleValue = maxHandlePos * ((value - ctrl._minValue) / (ctrl._maxValue - ctrl._minValue)) + 'px';
  9988. handleEl.style[stylePosName] = styleValue;
  9989. handleEl.style.height = ctrl.layoutRect().h + 'px';
  9990. setAriaProp(handleEl, 'valuenow', value);
  9991. setAriaProp(handleEl, 'valuetext', '' + ctrl.settings.previewFilter(value));
  9992. setAriaProp(handleEl, 'valuemin', ctrl._minValue);
  9993. setAriaProp(handleEl, 'valuemax', ctrl._maxValue);
  9994. }
  9995. var Slider = Widget.extend({
  9996. init: function (settings) {
  9997. var self = this;
  9998. if (!settings.previewFilter) {
  9999. settings.previewFilter = function (value) {
  10000. return Math.round(value * 100) / 100;
  10001. };
  10002. }
  10003. self._super(settings);
  10004. self.classes.add('slider');
  10005. if (settings.orientation === 'v') {
  10006. self.classes.add('vertical');
  10007. }
  10008. self._minValue = $_55hqur17ojh8lz7m9.isNumber(settings.minValue) ? settings.minValue : 0;
  10009. self._maxValue = $_55hqur17ojh8lz7m9.isNumber(settings.maxValue) ? settings.maxValue : 100;
  10010. self._initValue = self.state.get('value');
  10011. },
  10012. renderHtml: function () {
  10013. var self = this, id = self._id, prefix = self.classPrefix;
  10014. return '<div id="' + id + '" class="' + self.classes + '">' + '<div id="' + id + '-handle" class="' + prefix + 'slider-handle" role="slider" tabindex="-1"></div>' + '</div>';
  10015. },
  10016. reset: function () {
  10017. this.value(this._initValue).repaint();
  10018. },
  10019. postRender: function () {
  10020. var self = this;
  10021. var minValue, maxValue, screenCordName, stylePosName, sizeName, shortSizeName;
  10022. function toFraction(min, max, val) {
  10023. return (val + min) / (max - min);
  10024. }
  10025. function fromFraction(min, max, val) {
  10026. return val * (max - min) - min;
  10027. }
  10028. function handleKeyboard(minValue, maxValue) {
  10029. function alter(delta) {
  10030. var value;
  10031. value = self.value();
  10032. value = fromFraction(minValue, maxValue, toFraction(minValue, maxValue, value) + delta * 0.05);
  10033. value = constrain(value, minValue, maxValue);
  10034. self.value(value);
  10035. self.fire('dragstart', { value: value });
  10036. self.fire('drag', { value: value });
  10037. self.fire('dragend', { value: value });
  10038. }
  10039. self.on('keydown', function (e) {
  10040. switch (e.keyCode) {
  10041. case 37:
  10042. case 38:
  10043. alter(-1);
  10044. break;
  10045. case 39:
  10046. case 40:
  10047. alter(1);
  10048. break;
  10049. }
  10050. });
  10051. }
  10052. function handleDrag(minValue, maxValue, handleEl) {
  10053. var startPos, startHandlePos, maxHandlePos, handlePos, value;
  10054. self._dragHelper = new DragHelper(self._id, {
  10055. handle: self._id + '-handle',
  10056. start: function (e) {
  10057. startPos = e[screenCordName];
  10058. startHandlePos = parseInt(self.getEl('handle').style[stylePosName], 10);
  10059. maxHandlePos = (self.layoutRect()[shortSizeName] || 100) - funcs.getSize(handleEl)[sizeName];
  10060. self.fire('dragstart', { value: value });
  10061. },
  10062. drag: function (e) {
  10063. var delta = e[screenCordName] - startPos;
  10064. handlePos = constrain(startHandlePos + delta, 0, maxHandlePos);
  10065. handleEl.style[stylePosName] = handlePos + 'px';
  10066. value = minValue + handlePos / maxHandlePos * (maxValue - minValue);
  10067. self.value(value);
  10068. self.tooltip().text('' + self.settings.previewFilter(value)).show().moveRel(handleEl, 'bc tc');
  10069. self.fire('drag', { value: value });
  10070. },
  10071. stop: function () {
  10072. self.tooltip().hide();
  10073. self.fire('dragend', { value: value });
  10074. }
  10075. });
  10076. }
  10077. minValue = self._minValue;
  10078. maxValue = self._maxValue;
  10079. if (self.settings.orientation === 'v') {
  10080. screenCordName = 'screenY';
  10081. stylePosName = 'top';
  10082. sizeName = 'height';
  10083. shortSizeName = 'h';
  10084. } else {
  10085. screenCordName = 'screenX';
  10086. stylePosName = 'left';
  10087. sizeName = 'width';
  10088. shortSizeName = 'w';
  10089. }
  10090. self._super();
  10091. handleKeyboard(minValue, maxValue);
  10092. handleDrag(minValue, maxValue, self.getEl('handle'));
  10093. },
  10094. repaint: function () {
  10095. this._super();
  10096. updateSliderHandle(this, this.value());
  10097. },
  10098. bindStates: function () {
  10099. var self = this;
  10100. self.state.on('change:value', function (e) {
  10101. updateSliderHandle(self, e.value);
  10102. });
  10103. return self._super();
  10104. }
  10105. });
  10106. var Spacer = Widget.extend({
  10107. renderHtml: function () {
  10108. var self = this;
  10109. self.classes.add('spacer');
  10110. self.canFocus = false;
  10111. return '<div id="' + self._id + '" class="' + self.classes + '"></div>';
  10112. }
  10113. });
  10114. var SplitButton = MenuButton.extend({
  10115. Defaults: {
  10116. classes: 'widget btn splitbtn',
  10117. role: 'button'
  10118. },
  10119. repaint: function () {
  10120. var self = this;
  10121. var elm = self.getEl();
  10122. var rect = self.layoutRect();
  10123. var mainButtonElm, menuButtonElm;
  10124. self._super();
  10125. mainButtonElm = elm.firstChild;
  10126. menuButtonElm = elm.lastChild;
  10127. global$7(mainButtonElm).css({
  10128. width: rect.w - funcs.getSize(menuButtonElm).width,
  10129. height: rect.h - 2
  10130. });
  10131. global$7(menuButtonElm).css({ height: rect.h - 2 });
  10132. return self;
  10133. },
  10134. activeMenu: function (state) {
  10135. var self = this;
  10136. global$7(self.getEl().lastChild).toggleClass(self.classPrefix + 'active', state);
  10137. },
  10138. renderHtml: function () {
  10139. var self = this;
  10140. var id = self._id;
  10141. var prefix = self.classPrefix;
  10142. var image;
  10143. var icon = self.state.get('icon');
  10144. var text = self.state.get('text');
  10145. var settings = self.settings;
  10146. var textHtml = '', ariaPressed;
  10147. image = settings.image;
  10148. if (image) {
  10149. icon = 'none';
  10150. if (typeof image !== 'string') {
  10151. image = window.getSelection ? image[0] : image[1];
  10152. }
  10153. image = ' style="background-image: url(\'' + image + '\')"';
  10154. } else {
  10155. image = '';
  10156. }
  10157. icon = settings.icon ? prefix + 'ico ' + prefix + 'i-' + icon : '';
  10158. if (text) {
  10159. self.classes.add('btn-has-text');
  10160. textHtml = '<span class="' + prefix + 'txt">' + self.encode(text) + '</span>';
  10161. }
  10162. ariaPressed = typeof settings.active === 'boolean' ? ' aria-pressed="' + settings.active + '"' : '';
  10163. 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>';
  10164. },
  10165. postRender: function () {
  10166. var self = this, onClickHandler = self.settings.onclick;
  10167. self.on('click', function (e) {
  10168. var node = e.target;
  10169. if (e.control === this) {
  10170. while (node) {
  10171. if (e.aria && e.aria.key !== 'down' || node.nodeName === 'BUTTON' && node.className.indexOf('open') === -1) {
  10172. e.stopImmediatePropagation();
  10173. if (onClickHandler) {
  10174. onClickHandler.call(this, e);
  10175. }
  10176. return;
  10177. }
  10178. node = node.parentNode;
  10179. }
  10180. }
  10181. });
  10182. delete self.settings.onclick;
  10183. return self._super();
  10184. }
  10185. });
  10186. var StackLayout = FlowLayout.extend({
  10187. Defaults: {
  10188. containerClass: 'stack-layout',
  10189. controlClass: 'stack-layout-item',
  10190. endClass: 'break'
  10191. },
  10192. isNative: function () {
  10193. return true;
  10194. }
  10195. });
  10196. var TabPanel = Panel.extend({
  10197. Defaults: {
  10198. layout: 'absolute',
  10199. defaults: { type: 'panel' }
  10200. },
  10201. activateTab: function (idx) {
  10202. var activeTabElm;
  10203. if (this.activeTabId) {
  10204. activeTabElm = this.getEl(this.activeTabId);
  10205. global$7(activeTabElm).removeClass(this.classPrefix + 'active');
  10206. activeTabElm.setAttribute('aria-selected', 'false');
  10207. }
  10208. this.activeTabId = 't' + idx;
  10209. activeTabElm = this.getEl('t' + idx);
  10210. activeTabElm.setAttribute('aria-selected', 'true');
  10211. global$7(activeTabElm).addClass(this.classPrefix + 'active');
  10212. this.items()[idx].show().fire('showtab');
  10213. this.reflow();
  10214. this.items().each(function (item, i) {
  10215. if (idx !== i) {
  10216. item.hide();
  10217. }
  10218. });
  10219. },
  10220. renderHtml: function () {
  10221. var self = this;
  10222. var layout = self._layout;
  10223. var tabsHtml = '';
  10224. var prefix = self.classPrefix;
  10225. self.preRender();
  10226. layout.preRender(self);
  10227. self.items().each(function (ctrl, i) {
  10228. var id = self._id + '-t' + i;
  10229. ctrl.aria('role', 'tabpanel');
  10230. ctrl.aria('labelledby', id);
  10231. 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>';
  10232. });
  10233. 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>';
  10234. },
  10235. postRender: function () {
  10236. var self = this;
  10237. self._super();
  10238. self.settings.activeTab = self.settings.activeTab || 0;
  10239. self.activateTab(self.settings.activeTab);
  10240. this.on('click', function (e) {
  10241. var targetParent = e.target.parentNode;
  10242. if (targetParent && targetParent.id === self._id + '-head') {
  10243. var i = targetParent.childNodes.length;
  10244. while (i--) {
  10245. if (targetParent.childNodes[i] === e.target) {
  10246. self.activateTab(i);
  10247. }
  10248. }
  10249. }
  10250. });
  10251. },
  10252. initLayoutRect: function () {
  10253. var self = this;
  10254. var rect, minW, minH;
  10255. minW = funcs.getSize(self.getEl('head')).width;
  10256. minW = minW < 0 ? 0 : minW;
  10257. minH = 0;
  10258. self.items().each(function (item) {
  10259. minW = Math.max(minW, item.layoutRect().minW);
  10260. minH = Math.max(minH, item.layoutRect().minH);
  10261. });
  10262. self.items().each(function (ctrl) {
  10263. ctrl.settings.x = 0;
  10264. ctrl.settings.y = 0;
  10265. ctrl.settings.w = minW;
  10266. ctrl.settings.h = minH;
  10267. ctrl.layoutRect({
  10268. x: 0,
  10269. y: 0,
  10270. w: minW,
  10271. h: minH
  10272. });
  10273. });
  10274. var headH = funcs.getSize(self.getEl('head')).height;
  10275. self.settings.minWidth = minW;
  10276. self.settings.minHeight = minH + headH;
  10277. rect = self._super();
  10278. rect.deltaH += headH;
  10279. rect.innerH = rect.h - rect.deltaH;
  10280. return rect;
  10281. }
  10282. });
  10283. var TextBox = Widget.extend({
  10284. init: function (settings) {
  10285. var self = this;
  10286. self._super(settings);
  10287. self.classes.add('textbox');
  10288. if (settings.multiline) {
  10289. self.classes.add('multiline');
  10290. } else {
  10291. self.on('keydown', function (e) {
  10292. var rootControl;
  10293. if (e.keyCode === 13) {
  10294. e.preventDefault();
  10295. self.parents().reverse().each(function (ctrl) {
  10296. if (ctrl.toJSON) {
  10297. rootControl = ctrl;
  10298. return false;
  10299. }
  10300. });
  10301. self.fire('submit', { data: rootControl.toJSON() });
  10302. }
  10303. });
  10304. self.on('keyup', function (e) {
  10305. self.state.set('value', e.target.value);
  10306. });
  10307. }
  10308. },
  10309. repaint: function () {
  10310. var self = this;
  10311. var style, rect, borderBox, borderW, borderH = 0, lastRepaintRect;
  10312. style = self.getEl().style;
  10313. rect = self._layoutRect;
  10314. lastRepaintRect = self._lastRepaintRect || {};
  10315. var doc = document;
  10316. if (!self.settings.multiline && doc.all && (!doc.documentMode || doc.documentMode <= 8)) {
  10317. style.lineHeight = rect.h - borderH + 'px';
  10318. }
  10319. borderBox = self.borderBox;
  10320. borderW = borderBox.left + borderBox.right + 8;
  10321. borderH = borderBox.top + borderBox.bottom + (self.settings.multiline ? 8 : 0);
  10322. if (rect.x !== lastRepaintRect.x) {
  10323. style.left = rect.x + 'px';
  10324. lastRepaintRect.x = rect.x;
  10325. }
  10326. if (rect.y !== lastRepaintRect.y) {
  10327. style.top = rect.y + 'px';
  10328. lastRepaintRect.y = rect.y;
  10329. }
  10330. if (rect.w !== lastRepaintRect.w) {
  10331. style.width = rect.w - borderW + 'px';
  10332. lastRepaintRect.w = rect.w;
  10333. }
  10334. if (rect.h !== lastRepaintRect.h) {
  10335. style.height = rect.h - borderH + 'px';
  10336. lastRepaintRect.h = rect.h;
  10337. }
  10338. self._lastRepaintRect = lastRepaintRect;
  10339. self.fire('repaint', {}, false);
  10340. return self;
  10341. },
  10342. renderHtml: function () {
  10343. var self = this;
  10344. var settings = self.settings;
  10345. var attrs, elm;
  10346. attrs = {
  10347. id: self._id,
  10348. hidefocus: '1'
  10349. };
  10350. global$4.each([
  10351. 'rows',
  10352. 'spellcheck',
  10353. 'maxLength',
  10354. 'size',
  10355. 'readonly',
  10356. 'min',
  10357. 'max',
  10358. 'step',
  10359. 'list',
  10360. 'pattern',
  10361. 'placeholder',
  10362. 'required',
  10363. 'multiple'
  10364. ], function (name) {
  10365. attrs[name] = settings[name];
  10366. });
  10367. if (self.disabled()) {
  10368. attrs.disabled = 'disabled';
  10369. }
  10370. if (settings.subtype) {
  10371. attrs.type = settings.subtype;
  10372. }
  10373. elm = funcs.create(settings.multiline ? 'textarea' : 'input', attrs);
  10374. elm.value = self.state.get('value');
  10375. elm.className = self.classes.toString();
  10376. return elm.outerHTML;
  10377. },
  10378. value: function (value) {
  10379. if (arguments.length) {
  10380. this.state.set('value', value);
  10381. return this;
  10382. }
  10383. if (this.state.get('rendered')) {
  10384. this.state.set('value', this.getEl().value);
  10385. }
  10386. return this.state.get('value');
  10387. },
  10388. postRender: function () {
  10389. var self = this;
  10390. self.getEl().value = self.state.get('value');
  10391. self._super();
  10392. self.$el.on('change', function (e) {
  10393. self.state.set('value', e.target.value);
  10394. self.fire('change', e);
  10395. });
  10396. },
  10397. bindStates: function () {
  10398. var self = this;
  10399. self.state.on('change:value', function (e) {
  10400. if (self.getEl().value !== e.value) {
  10401. self.getEl().value = e.value;
  10402. }
  10403. });
  10404. self.state.on('change:disabled', function (e) {
  10405. self.getEl().disabled = e.value;
  10406. });
  10407. return self._super();
  10408. },
  10409. remove: function () {
  10410. this.$el.off();
  10411. this._super();
  10412. }
  10413. });
  10414. var getApi = function () {
  10415. return {
  10416. Selector: Selector,
  10417. Collection: Collection$2,
  10418. ReflowQueue: $_dipgfl182jh8lz7nt,
  10419. Control: Control$1,
  10420. Factory: global$11,
  10421. KeyboardNavigation: KeyboardNavigation,
  10422. Container: Container,
  10423. DragHelper: DragHelper,
  10424. Scrollable: $_1ecd7e18gjh8lz7pl,
  10425. Panel: Panel,
  10426. Movable: $_ben1dh184jh8lz7ny,
  10427. Resizable: $_1a5lul18hjh8lz7pp,
  10428. FloatPanel: FloatPanel,
  10429. Window: Window,
  10430. MessageBox: MessageBox,
  10431. Tooltip: Tooltip,
  10432. Widget: Widget,
  10433. Progress: Progress,
  10434. Notification: Notification,
  10435. Layout: Layout$1,
  10436. AbsoluteLayout: AbsoluteLayout,
  10437. Button: Button,
  10438. ButtonGroup: ButtonGroup,
  10439. Checkbox: Checkbox,
  10440. ComboBox: ComboBox,
  10441. ColorBox: ColorBox,
  10442. PanelButton: PanelButton,
  10443. ColorButton: ColorButton,
  10444. ColorPicker: ColorPicker,
  10445. Path: Path,
  10446. ElementPath: ElementPath,
  10447. FormItem: FormItem,
  10448. Form: Form,
  10449. FieldSet: FieldSet,
  10450. FilePicker: FilePicker,
  10451. FitLayout: FitLayout,
  10452. FlexLayout: FlexLayout,
  10453. FlowLayout: FlowLayout,
  10454. FormatControls: $_e9ct9h1akjh8lz7wa,
  10455. GridLayout: GridLayout,
  10456. Iframe: Iframe,
  10457. InfoBox: InfoBox,
  10458. Label: Label,
  10459. Toolbar: Toolbar$1,
  10460. MenuBar: MenuBar,
  10461. MenuButton: MenuButton,
  10462. MenuItem: MenuItem,
  10463. Throbber: Throbber,
  10464. Menu: Menu,
  10465. ListBox: ListBox,
  10466. Radio: Radio,
  10467. ResizeHandle: ResizeHandle,
  10468. SelectBox: SelectBox,
  10469. Slider: Slider,
  10470. Spacer: Spacer,
  10471. SplitButton: SplitButton,
  10472. StackLayout: StackLayout,
  10473. TabPanel: TabPanel,
  10474. TextBox: TextBox,
  10475. DropZone: DropZone,
  10476. BrowseButton: BrowseButton
  10477. };
  10478. };
  10479. var appendTo = function (target) {
  10480. if (target.ui) {
  10481. global$4.each(getApi(), function (ref, key) {
  10482. target.ui[key] = ref;
  10483. });
  10484. } else {
  10485. target.ui = getApi();
  10486. }
  10487. };
  10488. var registerToFactory = function () {
  10489. global$4.each(getApi(), function (ref, key) {
  10490. global$11.add(key, ref);
  10491. });
  10492. };
  10493. var Api = {
  10494. appendTo: appendTo,
  10495. registerToFactory: registerToFactory
  10496. };
  10497. Api.registerToFactory();
  10498. Api.appendTo(window.tinymce ? window.tinymce : {});
  10499. global.add('inlite', function (editor) {
  10500. var panel = create$3();
  10501. $_e9ct9h1akjh8lz7wa.setup(editor);
  10502. $_67na6j18jjh8lz7pt.addToEditor(editor, panel);
  10503. return $_952h616zjh8lz7kr.get(editor, panel);
  10504. });
  10505. function Theme () {
  10506. }
  10507. return Theme;
  10508. }());
  10509. })();