wangEditor.js 709 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550115511155211553115541155511556115571155811559115601156111562115631156411565115661156711568115691157011571115721157311574115751157611577115781157911580115811158211583115841158511586115871158811589115901159111592115931159411595115961159711598115991160011601116021160311604116051160611607116081160911610116111161211613116141161511616116171161811619116201162111622116231162411625116261162711628116291163011631116321163311634116351163611637116381163911640116411164211643116441164511646116471164811649116501165111652116531165411655116561165711658116591166011661116621166311664116651166611667116681166911670116711167211673116741167511676116771167811679116801168111682116831168411685116861168711688116891169011691116921169311694116951169611697116981169911700117011170211703117041170511706117071170811709117101171111712117131171411715117161171711718117191172011721117221172311724117251172611727117281172911730117311173211733117341173511736117371173811739117401174111742117431174411745117461174711748117491175011751117521175311754117551175611757117581175911760117611176211763117641176511766117671176811769117701177111772117731177411775117761177711778117791178011781117821178311784117851178611787117881178911790117911179211793117941179511796117971179811799118001180111802118031180411805118061180711808118091181011811118121181311814118151181611817118181181911820118211182211823118241182511826118271182811829118301183111832118331183411835118361183711838118391184011841118421184311844118451184611847118481184911850118511185211853118541185511856118571185811859118601186111862118631186411865118661186711868118691187011871118721187311874118751187611877118781187911880118811188211883118841188511886118871188811889118901189111892118931189411895118961189711898118991190011901119021190311904119051190611907119081190911910119111191211913119141191511916119171191811919119201192111922119231192411925119261192711928119291193011931119321193311934119351193611937119381193911940119411194211943119441194511946119471194811949119501195111952119531195411955119561195711958119591196011961119621196311964119651196611967119681196911970119711197211973119741197511976119771197811979119801198111982119831198411985119861198711988119891199011991119921199311994119951199611997119981199912000120011200212003120041200512006120071200812009120101201112012120131201412015120161201712018120191202012021120221202312024120251202612027120281202912030120311203212033120341203512036120371203812039120401204112042120431204412045120461204712048120491205012051120521205312054120551205612057120581205912060120611206212063120641206512066120671206812069120701207112072120731207412075120761207712078120791208012081120821208312084120851208612087120881208912090120911209212093120941209512096120971209812099121001210112102121031210412105121061210712108121091211012111121121211312114121151211612117121181211912120121211212212123121241212512126121271212812129121301213112132121331213412135121361213712138121391214012141121421214312144121451214612147121481214912150121511215212153121541215512156121571215812159121601216112162121631216412165121661216712168121691217012171121721217312174121751217612177121781217912180121811218212183121841218512186121871218812189121901219112192121931219412195121961219712198121991220012201122021220312204122051220612207122081220912210122111221212213122141221512216122171221812219122201222112222122231222412225122261222712228122291223012231122321223312234122351223612237122381223912240122411224212243122441224512246122471224812249122501225112252122531225412255122561225712258122591226012261122621226312264122651226612267122681226912270122711227212273122741227512276122771227812279122801228112282122831228412285122861228712288122891229012291122921229312294122951229612297122981229912300123011230212303123041230512306123071230812309123101231112312123131231412315123161231712318123191232012321123221232312324123251232612327123281232912330123311233212333123341233512336123371233812339123401234112342123431234412345123461234712348123491235012351123521235312354123551235612357123581235912360123611236212363123641236512366123671236812369123701237112372123731237412375123761237712378123791238012381123821238312384123851238612387123881238912390123911239212393123941239512396123971239812399124001240112402124031240412405124061240712408124091241012411124121241312414124151241612417124181241912420124211242212423124241242512426124271242812429124301243112432124331243412435124361243712438124391244012441124421244312444124451244612447124481244912450124511245212453124541245512456124571245812459124601246112462124631246412465124661246712468124691247012471124721247312474124751247612477124781247912480124811248212483124841248512486124871248812489124901249112492124931249412495124961249712498124991250012501125021250312504125051250612507125081250912510125111251212513125141251512516125171251812519125201252112522125231252412525125261252712528125291253012531125321253312534125351253612537125381253912540125411254212543125441254512546125471254812549125501255112552125531255412555125561255712558125591256012561125621256312564125651256612567125681256912570125711257212573125741257512576125771257812579125801258112582125831258412585125861258712588125891259012591125921259312594125951259612597125981259912600126011260212603126041260512606126071260812609126101261112612126131261412615126161261712618126191262012621126221262312624126251262612627126281262912630126311263212633126341263512636126371263812639126401264112642126431264412645126461264712648126491265012651126521265312654126551265612657126581265912660126611266212663126641266512666126671266812669126701267112672126731267412675126761267712678126791268012681126821268312684126851268612687126881268912690126911269212693126941269512696126971269812699127001270112702127031270412705127061270712708127091271012711127121271312714127151271612717127181271912720127211272212723127241272512726127271272812729127301273112732127331273412735127361273712738127391274012741127421274312744127451274612747127481274912750127511275212753127541275512756127571275812759127601276112762127631276412765127661276712768127691277012771127721277312774127751277612777127781277912780127811278212783127841278512786127871278812789127901279112792127931279412795127961279712798127991280012801128021280312804128051280612807128081280912810128111281212813128141281512816128171281812819128201282112822128231282412825128261282712828128291283012831128321283312834128351283612837128381283912840128411284212843128441284512846128471284812849128501285112852128531285412855128561285712858128591286012861128621286312864128651286612867128681286912870128711287212873128741287512876128771287812879128801288112882128831288412885128861288712888128891289012891128921289312894128951289612897128981289912900129011290212903129041290512906129071290812909129101291112912129131291412915129161291712918129191292012921129221292312924129251292612927129281292912930129311293212933129341293512936129371293812939129401294112942129431294412945129461294712948129491295012951129521295312954129551295612957129581295912960129611296212963129641296512966129671296812969129701297112972129731297412975129761297712978129791298012981129821298312984129851298612987129881298912990129911299212993129941299512996129971299812999130001300113002130031300413005130061300713008130091301013011130121301313014130151301613017130181301913020130211302213023130241302513026130271302813029130301303113032130331303413035130361303713038130391304013041130421304313044130451304613047130481304913050130511305213053130541305513056130571305813059130601306113062130631306413065130661306713068130691307013071130721307313074130751307613077130781307913080130811308213083130841308513086130871308813089130901309113092130931309413095130961309713098130991310013101131021310313104131051310613107131081310913110131111311213113131141311513116131171311813119131201312113122131231312413125131261312713128131291313013131131321313313134131351313613137131381313913140131411314213143131441314513146131471314813149131501315113152131531315413155131561315713158131591316013161131621316313164131651316613167131681316913170131711317213173131741317513176131771317813179131801318113182131831318413185131861318713188131891319013191131921319313194131951319613197131981319913200132011320213203132041320513206132071320813209132101321113212132131321413215132161321713218132191322013221132221322313224132251322613227132281322913230132311323213233132341323513236132371323813239132401324113242132431324413245132461324713248132491325013251132521325313254132551325613257132581325913260132611326213263132641326513266132671326813269132701327113272132731327413275132761327713278132791328013281132821328313284132851328613287132881328913290132911329213293132941329513296132971329813299133001330113302133031330413305133061330713308133091331013311133121331313314133151331613317133181331913320133211332213323133241332513326133271332813329133301333113332133331333413335133361333713338133391334013341133421334313344133451334613347133481334913350133511335213353133541335513356133571335813359133601336113362133631336413365133661336713368133691337013371133721337313374133751337613377133781337913380133811338213383133841338513386133871338813389133901339113392133931339413395133961339713398133991340013401134021340313404134051340613407134081340913410134111341213413134141341513416134171341813419134201342113422134231342413425134261342713428134291343013431134321343313434134351343613437134381343913440134411344213443134441344513446134471344813449134501345113452134531345413455134561345713458134591346013461134621346313464134651346613467134681346913470134711347213473134741347513476134771347813479134801348113482134831348413485134861348713488134891349013491134921349313494134951349613497134981349913500135011350213503135041350513506135071350813509135101351113512135131351413515135161351713518135191352013521135221352313524135251352613527135281352913530135311353213533135341353513536135371353813539135401354113542135431354413545135461354713548135491355013551135521355313554135551355613557135581355913560135611356213563135641356513566135671356813569135701357113572135731357413575135761357713578135791358013581135821358313584135851358613587135881358913590135911359213593135941359513596135971359813599136001360113602136031360413605136061360713608136091361013611136121361313614136151361613617136181361913620136211362213623136241362513626136271362813629136301363113632136331363413635136361363713638136391364013641136421364313644136451364613647136481364913650136511365213653136541365513656136571365813659136601366113662136631366413665136661366713668136691367013671136721367313674136751367613677136781367913680136811368213683136841368513686136871368813689136901369113692136931369413695136961369713698136991370013701137021370313704137051370613707137081370913710137111371213713137141371513716137171371813719137201372113722137231372413725137261372713728137291373013731137321373313734137351373613737137381373913740137411374213743137441374513746137471374813749137501375113752137531375413755137561375713758137591376013761137621376313764137651376613767137681376913770137711377213773137741377513776137771377813779137801378113782137831378413785137861378713788137891379013791137921379313794137951379613797137981379913800138011380213803138041380513806138071380813809138101381113812138131381413815138161381713818138191382013821138221382313824138251382613827138281382913830138311383213833138341383513836138371383813839138401384113842138431384413845138461384713848138491385013851138521385313854138551385613857138581385913860138611386213863138641386513866138671386813869138701387113872138731387413875138761387713878138791388013881138821388313884138851388613887138881388913890138911389213893138941389513896138971389813899139001390113902139031390413905139061390713908139091391013911139121391313914139151391613917139181391913920139211392213923139241392513926139271392813929139301393113932139331393413935139361393713938139391394013941139421394313944139451394613947139481394913950139511395213953139541395513956139571395813959139601396113962139631396413965139661396713968139691397013971139721397313974139751397613977139781397913980139811398213983139841398513986139871398813989139901399113992139931399413995139961399713998139991400014001140021400314004140051400614007140081400914010140111401214013140141401514016140171401814019140201402114022140231402414025140261402714028140291403014031140321403314034140351403614037140381403914040140411404214043140441404514046140471404814049140501405114052140531405414055140561405714058140591406014061140621406314064140651406614067140681406914070140711407214073140741407514076140771407814079140801408114082140831408414085140861408714088140891409014091140921409314094140951409614097140981409914100141011410214103141041410514106141071410814109141101411114112141131411414115141161411714118141191412014121141221412314124141251412614127141281412914130141311413214133141341413514136141371413814139141401414114142141431414414145141461414714148141491415014151141521415314154141551415614157141581415914160141611416214163141641416514166141671416814169141701417114172141731417414175141761417714178141791418014181141821418314184141851418614187141881418914190141911419214193141941419514196141971419814199142001420114202142031420414205142061420714208142091421014211142121421314214142151421614217142181421914220142211422214223142241422514226142271422814229142301423114232142331423414235142361423714238142391424014241142421424314244142451424614247142481424914250142511425214253142541425514256142571425814259142601426114262142631426414265142661426714268142691427014271142721427314274142751427614277142781427914280142811428214283142841428514286142871428814289142901429114292142931429414295142961429714298142991430014301143021430314304143051430614307143081430914310143111431214313143141431514316143171431814319143201432114322143231432414325143261432714328143291433014331143321433314334143351433614337143381433914340143411434214343143441434514346143471434814349143501435114352143531435414355143561435714358143591436014361143621436314364143651436614367143681436914370143711437214373143741437514376143771437814379143801438114382143831438414385143861438714388143891439014391143921439314394143951439614397143981439914400144011440214403144041440514406144071440814409144101441114412144131441414415144161441714418144191442014421144221442314424144251442614427144281442914430144311443214433144341443514436144371443814439144401444114442144431444414445144461444714448144491445014451144521445314454144551445614457144581445914460144611446214463144641446514466144671446814469144701447114472144731447414475144761447714478144791448014481144821448314484144851448614487144881448914490144911449214493144941449514496144971449814499145001450114502145031450414505145061450714508145091451014511145121451314514145151451614517145181451914520145211452214523145241452514526145271452814529145301453114532145331453414535145361453714538145391454014541145421454314544145451454614547145481454914550145511455214553145541455514556145571455814559145601456114562145631456414565145661456714568145691457014571145721457314574145751457614577145781457914580145811458214583145841458514586145871458814589145901459114592145931459414595145961459714598145991460014601146021460314604146051460614607146081460914610146111461214613146141461514616146171461814619146201462114622146231462414625146261462714628146291463014631146321463314634146351463614637146381463914640146411464214643146441464514646146471464814649146501465114652146531465414655146561465714658146591466014661146621466314664146651466614667146681466914670146711467214673146741467514676146771467814679146801468114682146831468414685146861468714688146891469014691146921469314694146951469614697146981469914700147011470214703147041470514706147071470814709147101471114712147131471414715147161471714718147191472014721147221472314724147251472614727147281472914730147311473214733147341473514736147371473814739147401474114742147431474414745147461474714748147491475014751147521475314754147551475614757147581475914760147611476214763147641476514766147671476814769147701477114772147731477414775147761477714778147791478014781147821478314784147851478614787147881478914790147911479214793147941479514796147971479814799148001480114802148031480414805148061480714808148091481014811148121481314814148151481614817148181481914820148211482214823148241482514826148271482814829148301483114832148331483414835148361483714838148391484014841148421484314844148451484614847148481484914850148511485214853148541485514856148571485814859148601486114862148631486414865148661486714868148691487014871148721487314874148751487614877148781487914880148811488214883148841488514886148871488814889148901489114892148931489414895148961489714898148991490014901149021490314904149051490614907149081490914910149111491214913149141491514916149171491814919149201492114922149231492414925149261492714928149291493014931149321493314934149351493614937149381493914940149411494214943149441494514946149471494814949149501495114952149531495414955149561495714958149591496014961149621496314964149651496614967149681496914970149711497214973149741497514976149771497814979149801498114982149831498414985149861498714988149891499014991149921499314994149951499614997149981499915000150011500215003150041500515006150071500815009150101501115012150131501415015150161501715018150191502015021150221502315024150251502615027150281502915030150311503215033150341503515036150371503815039150401504115042150431504415045150461504715048150491505015051150521505315054150551505615057150581505915060150611506215063150641506515066150671506815069150701507115072150731507415075150761507715078150791508015081150821508315084150851508615087150881508915090150911509215093150941509515096150971509815099151001510115102151031510415105151061510715108151091511015111151121511315114151151511615117151181511915120151211512215123151241512515126151271512815129151301513115132151331513415135151361513715138151391514015141151421514315144151451514615147151481514915150151511515215153151541515515156151571515815159151601516115162151631516415165151661516715168151691517015171151721517315174151751517615177151781517915180151811518215183151841518515186151871518815189151901519115192151931519415195151961519715198151991520015201152021520315204152051520615207152081520915210152111521215213152141521515216152171521815219152201522115222152231522415225152261522715228152291523015231152321523315234152351523615237152381523915240152411524215243152441524515246152471524815249152501525115252152531525415255152561525715258152591526015261152621526315264152651526615267152681526915270152711527215273152741527515276152771527815279152801528115282152831528415285152861528715288152891529015291152921529315294152951529615297152981529915300153011530215303153041530515306153071530815309153101531115312153131531415315153161531715318153191532015321153221532315324153251532615327153281532915330153311533215333153341533515336153371533815339153401534115342153431534415345153461534715348153491535015351153521535315354153551535615357153581535915360153611536215363153641536515366153671536815369153701537115372153731537415375153761537715378153791538015381153821538315384153851538615387153881538915390153911539215393153941539515396153971539815399154001540115402154031540415405154061540715408154091541015411154121541315414154151541615417154181541915420154211542215423154241542515426154271542815429154301543115432154331543415435154361543715438154391544015441154421544315444154451544615447154481544915450154511545215453154541545515456154571545815459154601546115462154631546415465154661546715468154691547015471154721547315474154751547615477154781547915480154811548215483154841548515486154871548815489154901549115492154931549415495154961549715498154991550015501155021550315504155051550615507155081550915510155111551215513155141551515516155171551815519155201552115522155231552415525155261552715528155291553015531155321553315534155351553615537155381553915540155411554215543155441554515546155471554815549155501555115552155531555415555155561555715558155591556015561155621556315564155651556615567155681556915570155711557215573155741557515576155771557815579155801558115582155831558415585155861558715588155891559015591155921559315594155951559615597155981559915600156011560215603156041560515606156071560815609156101561115612156131561415615156161561715618156191562015621156221562315624156251562615627156281562915630156311563215633156341563515636156371563815639156401564115642156431564415645156461564715648156491565015651156521565315654156551565615657156581565915660156611566215663156641566515666156671566815669156701567115672156731567415675156761567715678156791568015681156821568315684156851568615687156881568915690156911569215693156941569515696156971569815699157001570115702157031570415705157061570715708157091571015711157121571315714157151571615717157181571915720157211572215723157241572515726157271572815729157301573115732157331573415735157361573715738157391574015741157421574315744157451574615747157481574915750157511575215753157541575515756157571575815759157601576115762157631576415765157661576715768157691577015771157721577315774157751577615777157781577915780157811578215783157841578515786157871578815789157901579115792157931579415795157961579715798157991580015801158021580315804158051580615807158081580915810158111581215813158141581515816158171581815819158201582115822158231582415825158261582715828158291583015831158321583315834158351583615837158381583915840158411584215843158441584515846158471584815849158501585115852158531585415855158561585715858158591586015861158621586315864158651586615867158681586915870158711587215873158741587515876158771587815879158801588115882158831588415885158861588715888158891589015891158921589315894158951589615897158981589915900159011590215903159041590515906159071590815909159101591115912159131591415915159161591715918159191592015921159221592315924159251592615927159281592915930159311593215933159341593515936159371593815939159401594115942159431594415945159461594715948159491595015951159521595315954159551595615957159581595915960159611596215963159641596515966159671596815969159701597115972159731597415975159761597715978159791598015981159821598315984159851598615987159881598915990159911599215993159941599515996159971599815999160001600116002160031600416005160061600716008160091601016011160121601316014160151601616017160181601916020160211602216023160241602516026160271602816029160301603116032160331603416035160361603716038160391604016041160421604316044160451604616047160481604916050160511605216053160541605516056160571605816059160601606116062160631606416065160661606716068160691607016071160721607316074160751607616077160781607916080160811608216083160841608516086160871608816089160901609116092160931609416095160961609716098160991610016101161021610316104161051610616107161081610916110161111611216113161141611516116161171611816119161201612116122161231612416125161261612716128161291613016131161321613316134161351613616137161381613916140161411614216143161441614516146161471614816149161501615116152161531615416155161561615716158161591616016161161621616316164161651616616167161681616916170161711617216173161741617516176161771617816179161801618116182161831618416185161861618716188161891619016191161921619316194161951619616197161981619916200162011620216203162041620516206162071620816209162101621116212162131621416215162161621716218162191622016221162221622316224162251622616227162281622916230162311623216233162341623516236162371623816239162401624116242162431624416245162461624716248162491625016251162521625316254162551625616257162581625916260162611626216263162641626516266162671626816269162701627116272162731627416275162761627716278162791628016281162821628316284162851628616287162881628916290162911629216293162941629516296162971629816299163001630116302163031630416305163061630716308163091631016311163121631316314163151631616317163181631916320163211632216323163241632516326163271632816329163301633116332163331633416335163361633716338163391634016341163421634316344163451634616347163481634916350163511635216353163541635516356163571635816359163601636116362163631636416365163661636716368163691637016371163721637316374163751637616377163781637916380163811638216383163841638516386163871638816389163901639116392163931639416395163961639716398163991640016401164021640316404164051640616407164081640916410164111641216413164141641516416164171641816419164201642116422164231642416425164261642716428164291643016431164321643316434164351643616437164381643916440164411644216443164441644516446164471644816449164501645116452164531645416455164561645716458164591646016461164621646316464164651646616467164681646916470164711647216473164741647516476164771647816479164801648116482164831648416485164861648716488164891649016491164921649316494164951649616497164981649916500165011650216503165041650516506165071650816509165101651116512165131651416515165161651716518165191652016521165221652316524165251652616527165281652916530165311653216533165341653516536165371653816539165401654116542165431654416545165461654716548165491655016551165521655316554165551655616557165581655916560165611656216563165641656516566165671656816569165701657116572165731657416575165761657716578165791658016581165821658316584165851658616587165881658916590165911659216593165941659516596165971659816599166001660116602166031660416605166061660716608166091661016611166121661316614166151661616617166181661916620166211662216623166241662516626166271662816629166301663116632166331663416635166361663716638166391664016641166421664316644166451664616647166481664916650166511665216653166541665516656166571665816659166601666116662166631666416665166661666716668166691667016671166721667316674166751667616677166781667916680166811668216683166841668516686166871668816689166901669116692166931669416695166961669716698166991670016701167021670316704167051670616707167081670916710167111671216713167141671516716167171671816719167201672116722167231672416725167261672716728167291673016731167321673316734167351673616737167381673916740167411674216743167441674516746167471674816749167501675116752167531675416755167561675716758167591676016761167621676316764167651676616767167681676916770167711677216773167741677516776167771677816779167801678116782167831678416785167861678716788167891679016791167921679316794167951679616797167981679916800168011680216803168041680516806168071680816809168101681116812168131681416815168161681716818168191682016821168221682316824168251682616827168281682916830168311683216833168341683516836168371683816839168401684116842168431684416845168461684716848168491685016851168521685316854168551685616857168581685916860168611686216863168641686516866168671686816869168701687116872168731687416875168761687716878168791688016881168821688316884168851688616887168881688916890168911689216893168941689516896168971689816899169001690116902169031690416905169061690716908169091691016911169121691316914169151691616917169181691916920169211692216923169241692516926169271692816929169301693116932169331693416935169361693716938169391694016941169421694316944169451694616947169481694916950169511695216953169541695516956169571695816959169601696116962169631696416965169661696716968169691697016971169721697316974169751697616977169781697916980169811698216983169841698516986169871698816989169901699116992169931699416995169961699716998169991700017001170021700317004170051700617007170081700917010170111701217013170141701517016170171701817019170201702117022170231702417025170261702717028170291703017031170321703317034170351703617037170381703917040170411704217043170441704517046170471704817049170501705117052170531705417055170561705717058170591706017061170621706317064170651706617067170681706917070170711707217073170741707517076170771707817079170801708117082170831708417085170861708717088170891709017091170921709317094170951709617097170981709917100171011710217103171041710517106171071710817109171101711117112171131711417115171161711717118171191712017121171221712317124171251712617127171281712917130171311713217133171341713517136171371713817139171401714117142171431714417145171461714717148171491715017151171521715317154171551715617157171581715917160171611716217163171641716517166171671716817169171701717117172171731717417175171761717717178171791718017181171821718317184171851718617187171881718917190171911719217193171941719517196171971719817199172001720117202172031720417205172061720717208172091721017211172121721317214172151721617217172181721917220172211722217223172241722517226172271722817229172301723117232172331723417235172361723717238172391724017241172421724317244172451724617247172481724917250172511725217253172541725517256172571725817259172601726117262172631726417265172661726717268172691727017271172721727317274172751727617277172781727917280172811728217283172841728517286172871728817289172901729117292172931729417295172961729717298172991730017301173021730317304173051730617307173081730917310173111731217313173141731517316173171731817319173201732117322173231732417325173261732717328173291733017331173321733317334173351733617337173381733917340173411734217343173441734517346173471734817349173501735117352173531735417355173561735717358173591736017361173621736317364173651736617367173681736917370173711737217373173741737517376173771737817379173801738117382173831738417385173861738717388173891739017391173921739317394173951739617397173981739917400174011740217403174041740517406174071740817409174101741117412174131741417415174161741717418174191742017421174221742317424174251742617427174281742917430174311743217433174341743517436174371743817439174401744117442174431744417445174461744717448174491745017451174521745317454174551745617457174581745917460174611746217463174641746517466174671746817469174701747117472174731747417475174761747717478174791748017481174821748317484174851748617487174881748917490174911749217493174941749517496174971749817499175001750117502175031750417505175061750717508175091751017511175121751317514175151751617517175181751917520175211752217523175241752517526175271752817529175301753117532175331753417535175361753717538175391754017541175421754317544175451754617547175481754917550175511755217553175541755517556175571755817559175601756117562175631756417565175661756717568175691757017571175721757317574175751757617577175781757917580175811758217583175841758517586175871758817589175901759117592175931759417595175961759717598175991760017601176021760317604176051760617607176081760917610176111761217613176141761517616176171761817619176201762117622176231762417625176261762717628176291763017631176321763317634176351763617637176381763917640176411764217643176441764517646176471764817649176501765117652176531765417655176561765717658176591766017661176621766317664176651766617667176681766917670176711767217673176741767517676176771767817679176801768117682176831768417685176861768717688176891769017691176921769317694176951769617697176981769917700177011770217703177041770517706177071770817709177101771117712177131771417715177161771717718177191772017721177221772317724177251772617727177281772917730177311773217733177341773517736177371773817739177401774117742177431774417745177461774717748177491775017751177521775317754177551775617757177581775917760177611776217763177641776517766177671776817769177701777117772177731777417775177761777717778177791778017781177821778317784177851778617787177881778917790177911779217793177941779517796177971779817799178001780117802178031780417805178061780717808178091781017811178121781317814178151781617817178181781917820178211782217823178241782517826178271782817829178301783117832178331783417835178361783717838178391784017841178421784317844178451784617847178481784917850178511785217853178541785517856178571785817859178601786117862178631786417865178661786717868178691787017871178721787317874178751787617877178781787917880178811788217883178841788517886178871788817889178901789117892178931789417895178961789717898178991790017901179021790317904179051790617907179081790917910179111791217913179141791517916179171791817919179201792117922179231792417925179261792717928179291793017931179321793317934179351793617937179381793917940179411794217943179441794517946179471794817949179501795117952179531795417955179561795717958179591796017961179621796317964179651796617967179681796917970179711797217973179741797517976179771797817979179801798117982179831798417985179861798717988179891799017991179921799317994179951799617997179981799918000180011800218003180041800518006180071800818009180101801118012180131801418015180161801718018180191802018021180221802318024180251802618027180281802918030180311803218033180341803518036180371803818039180401804118042180431804418045180461804718048180491805018051180521805318054180551805618057180581805918060180611806218063180641806518066180671806818069180701807118072180731807418075180761807718078180791808018081180821808318084180851808618087180881808918090180911809218093180941809518096180971809818099181001810118102181031810418105181061810718108181091811018111181121811318114181151811618117181181811918120181211812218123181241812518126181271812818129181301813118132181331813418135181361813718138181391814018141181421814318144181451814618147181481814918150181511815218153181541815518156181571815818159181601816118162181631816418165181661816718168181691817018171181721817318174181751817618177181781817918180181811818218183181841818518186181871818818189181901819118192181931819418195181961819718198181991820018201182021820318204182051820618207182081820918210182111821218213182141821518216182171821818219182201822118222182231822418225182261822718228182291823018231182321823318234182351823618237182381823918240182411824218243182441824518246182471824818249182501825118252182531825418255182561825718258182591826018261182621826318264182651826618267182681826918270182711827218273182741827518276182771827818279182801828118282182831828418285182861828718288182891829018291182921829318294182951829618297182981829918300183011830218303183041830518306183071830818309183101831118312183131831418315183161831718318183191832018321183221832318324183251832618327183281832918330183311833218333183341833518336183371833818339183401834118342183431834418345183461834718348183491835018351183521835318354183551835618357183581835918360183611836218363183641836518366183671836818369183701837118372183731837418375183761837718378183791838018381183821838318384183851838618387183881838918390183911839218393183941839518396183971839818399184001840118402184031840418405184061840718408184091841018411184121841318414184151841618417184181841918420184211842218423184241842518426184271842818429184301843118432184331843418435184361843718438184391844018441184421844318444184451844618447184481844918450184511845218453184541845518456184571845818459184601846118462184631846418465184661846718468184691847018471184721847318474184751847618477184781847918480184811848218483184841848518486184871848818489184901849118492184931849418495184961849718498184991850018501185021850318504185051850618507185081850918510185111851218513185141851518516185171851818519185201852118522185231852418525185261852718528185291853018531185321853318534185351853618537185381853918540185411854218543185441854518546185471854818549185501855118552185531855418555185561855718558185591856018561185621856318564185651856618567185681856918570185711857218573185741857518576185771857818579185801858118582185831858418585185861858718588185891859018591185921859318594185951859618597185981859918600186011860218603186041860518606186071860818609186101861118612186131861418615186161861718618186191862018621186221862318624186251862618627186281862918630186311863218633186341863518636186371863818639186401864118642186431864418645186461864718648186491865018651186521865318654186551865618657186581865918660186611866218663186641866518666186671866818669186701867118672186731867418675186761867718678186791868018681186821868318684186851868618687186881868918690186911869218693186941869518696186971869818699187001870118702187031870418705187061870718708187091871018711187121871318714187151871618717187181871918720187211872218723187241872518726187271872818729187301873118732187331873418735187361873718738187391874018741187421874318744187451874618747187481874918750187511875218753187541875518756187571875818759187601876118762187631876418765187661876718768187691877018771187721877318774187751877618777187781877918780187811878218783187841878518786187871878818789187901879118792187931879418795187961879718798187991880018801188021880318804188051880618807188081880918810188111881218813188141881518816188171881818819188201882118822188231882418825188261882718828188291883018831188321883318834188351883618837188381883918840188411884218843188441884518846188471884818849188501885118852188531885418855188561885718858188591886018861188621886318864188651886618867188681886918870188711887218873188741887518876188771887818879188801888118882188831888418885188861888718888188891889018891188921889318894188951889618897188981889918900189011890218903189041890518906189071890818909189101891118912189131891418915189161891718918189191892018921189221892318924189251892618927189281892918930189311893218933189341893518936189371893818939189401894118942189431894418945189461894718948189491895018951189521895318954189551895618957189581895918960189611896218963189641896518966189671896818969189701897118972189731897418975189761897718978189791898018981189821898318984189851898618987189881898918990189911899218993189941899518996189971899818999190001900119002190031900419005190061900719008190091901019011190121901319014190151901619017190181901919020190211902219023190241902519026190271902819029190301903119032190331903419035190361903719038190391904019041190421904319044190451904619047190481904919050190511905219053190541905519056190571905819059190601906119062190631906419065190661906719068190691907019071190721907319074190751907619077190781907919080190811908219083190841908519086190871908819089190901909119092190931909419095190961909719098190991910019101191021910319104191051910619107191081910919110191111911219113191141911519116191171911819119191201912119122191231912419125191261912719128191291913019131191321913319134191351913619137191381913919140191411914219143191441914519146191471914819149191501915119152191531915419155191561915719158191591916019161191621916319164191651916619167191681916919170191711917219173191741917519176191771917819179191801918119182191831918419185191861918719188191891919019191191921919319194191951919619197191981919919200192011920219203192041920519206192071920819209192101921119212192131921419215192161921719218192191922019221192221922319224192251922619227192281922919230192311923219233192341923519236192371923819239192401924119242192431924419245192461924719248192491925019251192521925319254192551925619257192581925919260192611926219263192641926519266192671926819269192701927119272192731927419275192761927719278192791928019281192821928319284192851928619287192881928919290192911929219293192941929519296192971929819299193001930119302193031930419305193061930719308193091931019311193121931319314193151931619317193181931919320193211932219323193241932519326193271932819329193301933119332193331933419335193361933719338193391934019341193421934319344193451934619347193481934919350193511935219353193541935519356193571935819359193601936119362193631936419365193661936719368193691937019371193721937319374193751937619377193781937919380193811938219383193841938519386193871938819389193901939119392193931939419395193961939719398193991940019401194021940319404194051940619407194081940919410194111941219413194141941519416194171941819419194201942119422194231942419425194261942719428194291943019431194321943319434194351943619437194381943919440194411944219443194441944519446194471944819449194501945119452194531945419455194561945719458194591946019461194621946319464194651946619467194681946919470194711947219473194741947519476194771947819479194801948119482194831948419485194861948719488194891949019491194921949319494194951949619497194981949919500195011950219503195041950519506195071950819509195101951119512195131951419515195161951719518195191952019521195221952319524195251952619527195281952919530195311953219533195341953519536195371953819539195401954119542195431954419545195461954719548195491955019551195521955319554195551955619557195581955919560195611956219563195641956519566195671956819569195701957119572195731957419575195761957719578195791958019581195821958319584195851958619587195881958919590195911959219593195941959519596195971959819599196001960119602196031960419605196061960719608196091961019611196121961319614196151961619617196181961919620196211962219623196241962519626196271962819629196301963119632196331963419635196361963719638196391964019641196421964319644196451964619647196481964919650196511965219653196541965519656196571965819659196601966119662196631966419665196661966719668196691967019671196721967319674196751967619677196781967919680196811968219683196841968519686196871968819689196901969119692196931969419695196961969719698196991970019701197021970319704197051970619707197081970919710197111971219713197141971519716197171971819719197201972119722197231972419725197261972719728197291973019731197321973319734197351973619737197381973919740197411974219743197441974519746197471974819749197501975119752197531975419755197561975719758197591976019761197621976319764197651976619767197681976919770197711977219773197741977519776197771977819779197801978119782197831978419785197861978719788197891979019791197921979319794197951979619797197981979919800198011980219803198041980519806198071980819809198101981119812198131981419815198161981719818198191982019821198221982319824198251982619827198281982919830198311983219833198341983519836198371983819839198401984119842198431984419845198461984719848198491985019851198521985319854198551985619857198581985919860198611986219863198641986519866198671986819869198701987119872198731987419875198761987719878198791988019881198821988319884198851988619887198881988919890198911989219893198941989519896198971989819899199001990119902199031990419905199061990719908199091991019911199121991319914199151991619917199181991919920199211992219923199241992519926199271992819929199301993119932199331993419935199361993719938199391994019941199421994319944199451994619947199481994919950199511995219953199541995519956199571995819959199601996119962199631996419965199661996719968199691997019971199721997319974199751997619977199781997919980199811998219983199841998519986199871998819989199901999119992199931999419995199961999719998199992000020001200022000320004200052000620007200082000920010200112001220013200142001520016200172001820019200202002120022200232002420025200262002720028200292003020031200322003320034200352003620037200382003920040200412004220043200442004520046200472004820049200502005120052200532005420055200562005720058200592006020061200622006320064200652006620067200682006920070200712007220073200742007520076200772007820079200802008120082200832008420085200862008720088200892009020091200922009320094200952009620097200982009920100201012010220103201042010520106201072010820109201102011120112201132011420115201162011720118201192012020121201222012320124201252012620127201282012920130201312013220133201342013520136201372013820139201402014120142201432014420145201462014720148201492015020151201522015320154201552015620157201582015920160201612016220163201642016520166201672016820169201702017120172201732017420175201762017720178201792018020181201822018320184201852018620187201882018920190201912019220193201942019520196201972019820199202002020120202202032020420205202062020720208202092021020211202122021320214202152021620217202182021920220202212022220223202242022520226202272022820229202302023120232202332023420235202362023720238202392024020241202422024320244202452024620247202482024920250202512025220253202542025520256202572025820259202602026120262202632026420265202662026720268202692027020271202722027320274202752027620277202782027920280202812028220283202842028520286202872028820289202902029120292202932029420295202962029720298202992030020301203022030320304203052030620307203082030920310203112031220313203142031520316203172031820319203202032120322203232032420325203262032720328203292033020331203322033320334203352033620337203382033920340203412034220343203442034520346203472034820349203502035120352203532035420355203562035720358203592036020361203622036320364203652036620367203682036920370203712037220373203742037520376203772037820379203802038120382203832038420385203862038720388203892039020391203922039320394203952039620397203982039920400204012040220403204042040520406204072040820409204102041120412204132041420415204162041720418204192042020421204222042320424204252042620427204282042920430204312043220433204342043520436204372043820439204402044120442204432044420445204462044720448204492045020451204522045320454204552045620457204582045920460204612046220463204642046520466204672046820469204702047120472204732047420475204762047720478204792048020481204822048320484204852048620487204882048920490204912049220493204942049520496204972049820499205002050120502205032050420505205062050720508205092051020511205122051320514205152051620517205182051920520205212052220523205242052520526205272052820529205302053120532205332053420535205362053720538205392054020541205422054320544205452054620547205482054920550205512055220553205542055520556205572055820559205602056120562205632056420565205662056720568205692057020571205722057320574205752057620577205782057920580205812058220583205842058520586205872058820589205902059120592205932059420595205962059720598205992060020601206022060320604206052060620607206082060920610206112061220613206142061520616206172061820619206202062120622206232062420625206262062720628206292063020631206322063320634206352063620637206382063920640206412064220643206442064520646206472064820649206502065120652206532065420655206562065720658206592066020661206622066320664206652066620667206682066920670206712067220673206742067520676206772067820679206802068120682206832068420685206862068720688206892069020691206922069320694206952069620697206982069920700207012070220703207042070520706207072070820709207102071120712207132071420715207162071720718207192072020721207222072320724207252072620727207282072920730207312073220733207342073520736207372073820739207402074120742207432074420745207462074720748207492075020751207522075320754207552075620757207582075920760207612076220763207642076520766207672076820769207702077120772207732077420775207762077720778207792078020781207822078320784207852078620787207882078920790207912079220793207942079520796207972079820799208002080120802208032080420805208062080720808208092081020811208122081320814208152081620817208182081920820208212082220823208242082520826208272082820829208302083120832208332083420835208362083720838208392084020841208422084320844208452084620847208482084920850208512085220853208542085520856208572085820859208602086120862208632086420865208662086720868208692087020871208722087320874208752087620877208782087920880208812088220883208842088520886208872088820889208902089120892208932089420895208962089720898208992090020901209022090320904209052090620907209082090920910209112091220913209142091520916209172091820919209202092120922209232092420925209262092720928209292093020931209322093320934209352093620937209382093920940209412094220943209442094520946209472094820949209502095120952209532095420955209562095720958209592096020961209622096320964209652096620967209682096920970209712097220973209742097520976209772097820979209802098120982209832098420985209862098720988209892099020991209922099320994209952099620997209982099921000210012100221003210042100521006210072100821009210102101121012210132101421015210162101721018210192102021021210222102321024210252102621027210282102921030210312103221033210342103521036210372103821039210402104121042210432104421045210462104721048210492105021051210522105321054210552105621057210582105921060210612106221063210642106521066210672106821069210702107121072210732107421075210762107721078210792108021081210822108321084210852108621087210882108921090210912109221093210942109521096210972109821099211002110121102211032110421105211062110721108211092111021111211122111321114211152111621117211182111921120211212112221123211242112521126211272112821129211302113121132211332113421135211362113721138211392114021141211422114321144211452114621147211482114921150211512115221153211542115521156211572115821159211602116121162211632116421165211662116721168211692117021171211722117321174211752117621177211782117921180211812118221183211842118521186211872118821189211902119121192211932119421195211962119721198211992120021201212022120321204212052120621207212082120921210212112121221213212142121521216212172121821219212202122121222212232122421225212262122721228212292123021231212322123321234212352123621237212382123921240212412124221243212442124521246212472124821249212502125121252212532125421255212562125721258212592126021261212622126321264212652126621267212682126921270212712127221273212742127521276212772127821279212802128121282212832128421285212862128721288212892129021291212922129321294212952129621297212982129921300213012130221303213042130521306213072130821309213102131121312213132131421315213162131721318213192132021321213222132321324213252132621327213282132921330213312133221333213342133521336213372133821339213402134121342213432134421345213462134721348213492135021351213522135321354213552135621357213582135921360213612136221363213642136521366213672136821369213702137121372213732137421375213762137721378213792138021381213822138321384213852138621387213882138921390213912139221393213942139521396213972139821399214002140121402214032140421405214062140721408214092141021411214122141321414214152141621417214182141921420214212142221423214242142521426214272142821429214302143121432214332143421435214362143721438214392144021441214422144321444214452144621447214482144921450214512145221453214542145521456214572145821459214602146121462214632146421465214662146721468214692147021471214722147321474214752147621477214782147921480214812148221483214842148521486214872148821489214902149121492214932149421495214962149721498214992150021501215022150321504215052150621507215082150921510215112151221513215142151521516215172151821519215202152121522215232152421525215262152721528215292153021531215322153321534215352153621537215382153921540215412154221543215442154521546215472154821549215502155121552215532155421555215562155721558215592156021561215622156321564215652156621567215682156921570215712157221573215742157521576215772157821579215802158121582215832158421585215862158721588215892159021591215922159321594215952159621597215982159921600216012160221603216042160521606216072160821609216102161121612216132161421615216162161721618216192162021621216222162321624216252162621627216282162921630216312163221633216342163521636216372163821639216402164121642216432164421645216462164721648216492165021651216522165321654216552165621657216582165921660216612166221663216642166521666216672166821669216702167121672216732167421675216762167721678216792168021681216822168321684216852168621687216882168921690216912169221693216942169521696216972169821699217002170121702217032170421705217062170721708217092171021711217122171321714217152171621717217182171921720217212172221723217242172521726217272172821729217302173121732217332173421735217362173721738217392174021741217422174321744217452174621747217482174921750217512175221753217542175521756217572175821759217602176121762217632176421765217662176721768217692177021771217722177321774217752177621777217782177921780217812178221783217842178521786217872178821789217902179121792217932179421795217962179721798217992180021801218022180321804218052180621807218082180921810218112181221813218142181521816218172181821819218202182121822218232182421825218262182721828218292183021831218322183321834218352183621837218382183921840218412184221843218442184521846218472184821849218502185121852218532185421855218562185721858218592186021861218622186321864218652186621867218682186921870218712187221873218742187521876218772187821879218802188121882218832188421885218862188721888218892189021891218922189321894218952189621897218982189921900219012190221903219042190521906219072190821909219102191121912219132191421915219162191721918219192192021921219222192321924219252192621927219282192921930219312193221933219342193521936219372193821939219402194121942219432194421945219462194721948219492195021951219522195321954219552195621957219582195921960219612196221963219642196521966219672196821969219702197121972219732197421975219762197721978219792198021981219822198321984219852198621987219882198921990219912199221993219942199521996219972199821999220002200122002220032200422005220062200722008220092201022011220122201322014220152201622017220182201922020220212202222023220242202522026220272202822029220302203122032220332203422035220362203722038220392204022041220422204322044220452204622047220482204922050220512205222053220542205522056220572205822059220602206122062220632206422065220662206722068220692207022071220722207322074220752207622077220782207922080220812208222083220842208522086220872208822089220902209122092220932209422095220962209722098220992210022101221022210322104221052210622107221082210922110221112211222113221142211522116221172211822119221202212122122221232212422125221262212722128221292213022131221322213322134221352213622137221382213922140221412214222143221442214522146221472214822149221502215122152221532215422155221562215722158221592216022161221622216322164221652216622167221682216922170221712217222173221742217522176221772217822179221802218122182221832218422185221862218722188221892219022191221922219322194221952219622197221982219922200222012220222203222042220522206222072220822209222102221122212222132221422215222162221722218222192222022221222222222322224222252222622227222282222922230222312223222233222342223522236222372223822239222402224122242222432224422245222462224722248222492225022251222522225322254222552225622257222582225922260222612226222263222642226522266222672226822269222702227122272222732227422275222762227722278222792228022281222822228322284222852228622287222882228922290222912229222293222942229522296222972229822299223002230122302223032230422305223062230722308223092231022311223122231322314223152231622317223182231922320223212232222323223242232522326223272232822329223302233122332223332233422335223362233722338223392234022341223422234322344223452234622347223482234922350223512235222353223542235522356223572235822359223602236122362223632236422365223662236722368223692237022371223722237322374223752237622377223782237922380223812238222383223842238522386223872238822389223902239122392223932239422395223962239722398223992240022401224022240322404224052240622407224082240922410224112241222413224142241522416224172241822419224202242122422224232242422425224262242722428224292243022431224322243322434224352243622437224382243922440224412244222443224442244522446224472244822449224502245122452224532245422455224562245722458224592246022461224622246322464224652246622467224682246922470224712247222473224742247522476224772247822479224802248122482224832248422485224862248722488224892249022491224922249322494224952249622497224982249922500225012250222503225042250522506225072250822509225102251122512225132251422515225162251722518225192252022521225222252322524225252252622527225282252922530225312253222533225342253522536225372253822539225402254122542225432254422545225462254722548225492255022551225522255322554225552255622557225582255922560225612256222563225642256522566225672256822569225702257122572225732257422575225762257722578225792258022581225822258322584225852258622587225882258922590225912259222593225942259522596225972259822599226002260122602226032260422605226062260722608226092261022611226122261322614226152261622617226182261922620226212262222623226242262522626226272262822629226302263122632226332263422635226362263722638226392264022641226422264322644226452264622647226482264922650226512265222653226542265522656226572265822659226602266122662226632266422665226662266722668226692267022671226722267322674226752267622677226782267922680226812268222683226842268522686226872268822689226902269122692226932269422695226962269722698226992270022701227022270322704227052270622707227082270922710227112271222713227142271522716227172271822719227202272122722227232272422725227262272722728227292273022731227322273322734227352273622737227382273922740227412274222743227442274522746227472274822749227502275122752227532275422755227562275722758227592276022761227622276322764227652276622767227682276922770227712277222773227742277522776227772277822779227802278122782227832278422785227862278722788227892279022791227922279322794227952279622797227982279922800228012280222803228042280522806228072280822809228102281122812228132281422815228162281722818228192282022821228222282322824228252282622827228282282922830228312283222833228342283522836228372283822839228402284122842228432284422845228462284722848228492285022851228522285322854228552285622857228582285922860228612286222863228642286522866228672286822869228702287122872228732287422875228762287722878228792288022881228822288322884228852288622887228882288922890228912289222893228942289522896228972289822899229002290122902229032290422905229062290722908229092291022911229122291322914229152291622917229182291922920229212292222923229242292522926229272292822929229302293122932229332293422935229362293722938229392294022941229422294322944229452294622947229482294922950229512295222953229542295522956229572295822959229602296122962229632296422965229662296722968229692297022971229722297322974229752297622977229782297922980229812298222983229842298522986229872298822989229902299122992229932299422995229962299722998229992300023001230022300323004230052300623007230082300923010230112301223013230142301523016230172301823019230202302123022230232302423025230262302723028230292303023031230322303323034230352303623037230382303923040230412304223043230442304523046230472304823049230502305123052230532305423055230562305723058230592306023061230622306323064230652306623067230682306923070230712307223073230742307523076230772307823079230802308123082230832308423085230862308723088230892309023091230922309323094230952309623097230982309923100231012310223103231042310523106231072310823109231102311123112231132311423115231162311723118231192312023121231222312323124231252312623127231282312923130231312313223133231342313523136231372313823139231402314123142231432314423145231462314723148231492315023151231522315323154231552315623157231582315923160231612316223163231642316523166231672316823169231702317123172231732317423175231762317723178231792318023181231822318323184231852318623187231882318923190231912319223193231942319523196231972319823199232002320123202232032320423205232062320723208232092321023211232122321323214232152321623217232182321923220232212322223223232242322523226232272322823229232302323123232232332323423235232362323723238232392324023241232422324323244232452324623247232482324923250232512325223253232542325523256232572325823259232602326123262232632326423265232662326723268232692327023271232722327323274232752327623277232782327923280232812328223283232842328523286232872328823289232902329123292232932329423295232962329723298232992330023301233022330323304233052330623307233082330923310233112331223313233142331523316233172331823319233202332123322233232332423325233262332723328233292333023331233322333323334233352333623337233382333923340233412334223343233442334523346233472334823349233502335123352233532335423355233562335723358233592336023361233622336323364233652336623367233682336923370233712337223373233742337523376233772337823379233802338123382233832338423385233862338723388233892339023391233922339323394233952339623397233982339923400234012340223403234042340523406234072340823409234102341123412234132341423415234162341723418234192342023421234222342323424234252342623427234282342923430234312343223433234342343523436234372343823439234402344123442234432344423445234462344723448234492345023451234522345323454234552345623457234582345923460234612346223463234642346523466234672346823469234702347123472234732347423475234762347723478234792348023481234822348323484234852348623487234882348923490234912349223493234942349523496234972349823499235002350123502235032350423505235062350723508235092351023511235122351323514235152351623517235182351923520235212352223523235242352523526235272352823529235302353123532235332353423535235362353723538235392354023541235422354323544235452354623547235482354923550235512355223553235542355523556235572355823559235602356123562235632356423565235662356723568235692357023571235722357323574235752357623577235782357923580235812358223583235842358523586235872358823589235902359123592235932359423595235962359723598235992360023601236022360323604236052360623607236082360923610236112361223613236142361523616236172361823619236202362123622236232362423625236262362723628236292363023631236322363323634236352363623637236382363923640236412364223643236442364523646236472364823649236502365123652236532365423655236562365723658236592366023661236622366323664236652366623667236682366923670236712367223673236742367523676236772367823679236802368123682236832368423685236862368723688236892369023691236922369323694236952369623697236982369923700237012370223703237042370523706237072370823709237102371123712237132371423715237162371723718237192372023721237222372323724237252372623727237282372923730237312373223733237342373523736237372373823739237402374123742237432374423745237462374723748237492375023751237522375323754237552375623757237582375923760237612376223763237642376523766237672376823769237702377123772237732377423775237762377723778237792378023781237822378323784237852378623787237882378923790237912379223793237942379523796237972379823799238002380123802238032380423805238062380723808238092381023811238122381323814238152381623817238182381923820238212382223823238242382523826238272382823829238302383123832238332383423835238362383723838238392384023841238422384323844238452384623847238482384923850238512385223853238542385523856238572385823859238602386123862238632386423865238662386723868238692387023871238722387323874238752387623877238782387923880238812388223883238842388523886238872388823889238902389123892238932389423895238962389723898238992390023901239022390323904239052390623907239082390923910239112391223913239142391523916239172391823919239202392123922239232392423925239262392723928239292393023931239322393323934239352393623937239382393923940239412394223943239442394523946239472394823949239502395123952239532395423955239562395723958239592396023961239622396323964239652396623967239682396923970239712397223973239742397523976239772397823979239802398123982239832398423985239862398723988239892399023991239922399323994239952399623997239982399924000240012400224003240042400524006240072400824009240102401124012240132401424015240162401724018240192402024021240222402324024240252402624027240282402924030240312403224033240342403524036240372403824039240402404124042240432404424045240462404724048240492405024051240522405324054240552405624057240582405924060240612406224063240642406524066240672406824069240702407124072240732407424075240762407724078240792408024081240822408324084240852408624087240882408924090240912409224093240942409524096240972409824099241002410124102241032410424105241062410724108241092411024111241122411324114241152411624117241182411924120241212412224123241242412524126241272412824129241302413124132241332413424135241362413724138241392414024141241422414324144241452414624147241482414924150241512415224153241542415524156241572415824159241602416124162241632416424165241662416724168241692417024171241722417324174241752417624177241782417924180241812418224183241842418524186241872418824189241902419124192241932419424195241962419724198241992420024201242022420324204242052420624207242082420924210242112421224213242142421524216242172421824219242202422124222242232422424225242262422724228242292423024231242322423324234242352423624237242382423924240242412424224243242442424524246242472424824249242502425124252242532425424255242562425724258242592426024261242622426324264242652426624267242682426924270242712427224273242742427524276242772427824279242802428124282242832428424285242862428724288242892429024291242922429324294242952429624297242982429924300243012430224303243042430524306243072430824309243102431124312243132431424315243162431724318243192432024321243222432324324243252432624327243282432924330243312433224333243342433524336243372433824339243402434124342243432434424345243462434724348243492435024351243522435324354243552435624357243582435924360243612436224363243642436524366243672436824369243702437124372243732437424375243762437724378243792438024381243822438324384243852438624387243882438924390243912439224393243942439524396243972439824399244002440124402244032440424405244062440724408244092441024411244122441324414244152441624417244182441924420244212442224423244242442524426244272442824429244302443124432244332443424435244362443724438244392444024441244422444324444244452444624447244482444924450244512445224453244542445524456244572445824459244602446124462244632446424465244662446724468244692447024471244722447324474244752447624477244782447924480244812448224483244842448524486244872448824489244902449124492244932449424495244962449724498244992450024501245022450324504245052450624507245082450924510245112451224513245142451524516245172451824519245202452124522245232452424525245262452724528245292453024531245322453324534245352453624537245382453924540245412454224543245442454524546245472454824549245502455124552245532455424555245562455724558245592456024561245622456324564245652456624567245682456924570245712457224573245742457524576245772457824579245802458124582245832458424585245862458724588245892459024591245922459324594245952459624597245982459924600246012460224603246042460524606246072460824609246102461124612246132461424615246162461724618246192462024621246222462324624246252462624627246282462924630246312463224633246342463524636246372463824639246402464124642246432464424645246462464724648246492465024651246522465324654246552465624657246582465924660246612466224663246642466524666246672466824669246702467124672246732467424675246762467724678246792468024681246822468324684246852468624687246882468924690246912469224693246942469524696246972469824699247002470124702247032470424705247062470724708247092471024711247122471324714247152471624717247182471924720247212472224723247242472524726247272472824729247302473124732247332473424735247362473724738247392474024741247422474324744247452474624747247482474924750247512475224753247542475524756247572475824759247602476124762247632476424765247662476724768247692477024771247722477324774247752477624777247782477924780247812478224783247842478524786247872478824789247902479124792247932479424795247962479724798247992480024801248022480324804248052480624807248082480924810248112481224813248142481524816248172481824819248202482124822248232482424825248262482724828248292483024831248322483324834248352483624837248382483924840248412484224843248442484524846248472484824849248502485124852248532485424855248562485724858248592486024861248622486324864248652486624867248682486924870248712487224873248742487524876248772487824879248802488124882248832488424885248862488724888248892489024891248922489324894248952489624897248982489924900249012490224903249042490524906249072490824909249102491124912249132491424915249162491724918249192492024921249222492324924249252492624927249282492924930249312493224933249342493524936249372493824939249402494124942249432494424945249462494724948249492495024951249522495324954249552495624957
  1. (function webpackUniversalModuleDefinition(root, factory) {
  2. if(typeof exports === 'object' && typeof module === 'object')
  3. module.exports = factory();
  4. else if(typeof define === 'function' && define.amd)
  5. define([], factory);
  6. else if(typeof exports === 'object')
  7. exports["wangEditor"] = factory();
  8. else
  9. root["wangEditor"] = factory();
  10. })(window, function() {
  11. return /******/ (function(modules) { // webpackBootstrap
  12. /******/ // The module cache
  13. /******/ var installedModules = {};
  14. /******/
  15. /******/ // The require function
  16. /******/ function __webpack_require__(moduleId) {
  17. /******/
  18. /******/ // Check if module is in cache
  19. /******/ if(installedModules[moduleId]) {
  20. /******/ return installedModules[moduleId].exports;
  21. /******/ }
  22. /******/ // Create a new module (and put it into the cache)
  23. /******/ var module = installedModules[moduleId] = {
  24. /******/ i: moduleId,
  25. /******/ l: false,
  26. /******/ exports: {}
  27. /******/ };
  28. /******/
  29. /******/ // Execute the module function
  30. /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
  31. /******/
  32. /******/ // Flag the module as loaded
  33. /******/ module.l = true;
  34. /******/
  35. /******/ // Return the exports of the module
  36. /******/ return module.exports;
  37. /******/ }
  38. /******/
  39. /******/
  40. /******/ // expose the modules object (__webpack_modules__)
  41. /******/ __webpack_require__.m = modules;
  42. /******/
  43. /******/ // expose the module cache
  44. /******/ __webpack_require__.c = installedModules;
  45. /******/
  46. /******/ // define getter function for harmony exports
  47. /******/ __webpack_require__.d = function(exports, name, getter) {
  48. /******/ if(!__webpack_require__.o(exports, name)) {
  49. /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
  50. /******/ }
  51. /******/ };
  52. /******/
  53. /******/ // define __esModule on exports
  54. /******/ __webpack_require__.r = function(exports) {
  55. /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
  56. /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
  57. /******/ }
  58. /******/ Object.defineProperty(exports, '__esModule', { value: true });
  59. /******/ };
  60. /******/
  61. /******/ // create a fake namespace object
  62. /******/ // mode & 1: value is a module id, require it
  63. /******/ // mode & 2: merge all properties of value into the ns
  64. /******/ // mode & 4: return value when already ns object
  65. /******/ // mode & 8|1: behave like require
  66. /******/ __webpack_require__.t = function(value, mode) {
  67. /******/ if(mode & 1) value = __webpack_require__(value);
  68. /******/ if(mode & 8) return value;
  69. /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
  70. /******/ var ns = Object.create(null);
  71. /******/ __webpack_require__.r(ns);
  72. /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
  73. /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
  74. /******/ return ns;
  75. /******/ };
  76. /******/
  77. /******/ // getDefaultExport function for compatibility with non-harmony modules
  78. /******/ __webpack_require__.n = function(module) {
  79. /******/ var getter = module && module.__esModule ?
  80. /******/ function getDefault() { return module['default']; } :
  81. /******/ function getModuleExports() { return module; };
  82. /******/ __webpack_require__.d(getter, 'a', getter);
  83. /******/ return getter;
  84. /******/ };
  85. /******/
  86. /******/ // Object.prototype.hasOwnProperty.call
  87. /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
  88. /******/
  89. /******/ // __webpack_public_path__
  90. /******/ __webpack_require__.p = "";
  91. /******/
  92. /******/
  93. /******/ // Load entry module and return exports
  94. /******/ return __webpack_require__(__webpack_require__.s = 141);
  95. /******/ })
  96. /************************************************************************/
  97. /******/ ([
  98. /* 0 */
  99. /***/ (function(module, exports) {
  100. function _interopRequireDefault(obj) {
  101. return obj && obj.__esModule ? obj : {
  102. "default": obj
  103. };
  104. }
  105. module.exports = _interopRequireDefault;
  106. /***/ }),
  107. /* 1 */
  108. /***/ (function(module, exports, __webpack_require__) {
  109. module.exports = __webpack_require__(142);
  110. /***/ }),
  111. /* 2 */
  112. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  113. "use strict";
  114. __webpack_require__.r(__webpack_exports__);
  115. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__extends", function() { return __extends; });
  116. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__assign", function() { return __assign; });
  117. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__rest", function() { return __rest; });
  118. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__decorate", function() { return __decorate; });
  119. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__param", function() { return __param; });
  120. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__metadata", function() { return __metadata; });
  121. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__awaiter", function() { return __awaiter; });
  122. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__generator", function() { return __generator; });
  123. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__createBinding", function() { return __createBinding; });
  124. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__exportStar", function() { return __exportStar; });
  125. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__values", function() { return __values; });
  126. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__read", function() { return __read; });
  127. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__spread", function() { return __spread; });
  128. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__spreadArrays", function() { return __spreadArrays; });
  129. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__spreadArray", function() { return __spreadArray; });
  130. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__await", function() { return __await; });
  131. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__asyncGenerator", function() { return __asyncGenerator; });
  132. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__asyncDelegator", function() { return __asyncDelegator; });
  133. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__asyncValues", function() { return __asyncValues; });
  134. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__makeTemplateObject", function() { return __makeTemplateObject; });
  135. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__importStar", function() { return __importStar; });
  136. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__importDefault", function() { return __importDefault; });
  137. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__classPrivateFieldGet", function() { return __classPrivateFieldGet; });
  138. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__classPrivateFieldSet", function() { return __classPrivateFieldSet; });
  139. /*! *****************************************************************************
  140. Copyright (c) Microsoft Corporation.
  141. Permission to use, copy, modify, and/or distribute this software for any
  142. purpose with or without fee is hereby granted.
  143. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
  144. REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
  145. AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
  146. INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
  147. LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
  148. OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  149. PERFORMANCE OF THIS SOFTWARE.
  150. ***************************************************************************** */
  151. /* global Reflect, Promise */
  152. var extendStatics = function(d, b) {
  153. extendStatics = Object.setPrototypeOf ||
  154. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  155. function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
  156. return extendStatics(d, b);
  157. };
  158. function __extends(d, b) {
  159. if (typeof b !== "function" && b !== null)
  160. throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
  161. extendStatics(d, b);
  162. function __() { this.constructor = d; }
  163. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  164. }
  165. var __assign = function() {
  166. __assign = Object.assign || function __assign(t) {
  167. for (var s, i = 1, n = arguments.length; i < n; i++) {
  168. s = arguments[i];
  169. for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
  170. }
  171. return t;
  172. }
  173. return __assign.apply(this, arguments);
  174. }
  175. function __rest(s, e) {
  176. var t = {};
  177. for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
  178. t[p] = s[p];
  179. if (s != null && typeof Object.getOwnPropertySymbols === "function")
  180. for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
  181. if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
  182. t[p[i]] = s[p[i]];
  183. }
  184. return t;
  185. }
  186. function __decorate(decorators, target, key, desc) {
  187. var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
  188. if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
  189. else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
  190. return c > 3 && r && Object.defineProperty(target, key, r), r;
  191. }
  192. function __param(paramIndex, decorator) {
  193. return function (target, key) { decorator(target, key, paramIndex); }
  194. }
  195. function __metadata(metadataKey, metadataValue) {
  196. if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
  197. }
  198. function __awaiter(thisArg, _arguments, P, generator) {
  199. function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
  200. return new (P || (P = Promise))(function (resolve, reject) {
  201. function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
  202. function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
  203. function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
  204. step((generator = generator.apply(thisArg, _arguments || [])).next());
  205. });
  206. }
  207. function __generator(thisArg, body) {
  208. var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
  209. return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
  210. function verb(n) { return function (v) { return step([n, v]); }; }
  211. function step(op) {
  212. if (f) throw new TypeError("Generator is already executing.");
  213. while (_) try {
  214. if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
  215. if (y = 0, t) op = [op[0] & 2, t.value];
  216. switch (op[0]) {
  217. case 0: case 1: t = op; break;
  218. case 4: _.label++; return { value: op[1], done: false };
  219. case 5: _.label++; y = op[1]; op = [0]; continue;
  220. case 7: op = _.ops.pop(); _.trys.pop(); continue;
  221. default:
  222. if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
  223. if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
  224. if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
  225. if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
  226. if (t[2]) _.ops.pop();
  227. _.trys.pop(); continue;
  228. }
  229. op = body.call(thisArg, _);
  230. } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
  231. if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
  232. }
  233. }
  234. var __createBinding = Object.create ? (function(o, m, k, k2) {
  235. if (k2 === undefined) k2 = k;
  236. Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
  237. }) : (function(o, m, k, k2) {
  238. if (k2 === undefined) k2 = k;
  239. o[k2] = m[k];
  240. });
  241. function __exportStar(m, o) {
  242. for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);
  243. }
  244. function __values(o) {
  245. var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
  246. if (m) return m.call(o);
  247. if (o && typeof o.length === "number") return {
  248. next: function () {
  249. if (o && i >= o.length) o = void 0;
  250. return { value: o && o[i++], done: !o };
  251. }
  252. };
  253. throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
  254. }
  255. function __read(o, n) {
  256. var m = typeof Symbol === "function" && o[Symbol.iterator];
  257. if (!m) return o;
  258. var i = m.call(o), r, ar = [], e;
  259. try {
  260. while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
  261. }
  262. catch (error) { e = { error: error }; }
  263. finally {
  264. try {
  265. if (r && !r.done && (m = i["return"])) m.call(i);
  266. }
  267. finally { if (e) throw e.error; }
  268. }
  269. return ar;
  270. }
  271. /** @deprecated */
  272. function __spread() {
  273. for (var ar = [], i = 0; i < arguments.length; i++)
  274. ar = ar.concat(__read(arguments[i]));
  275. return ar;
  276. }
  277. /** @deprecated */
  278. function __spreadArrays() {
  279. for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
  280. for (var r = Array(s), k = 0, i = 0; i < il; i++)
  281. for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
  282. r[k] = a[j];
  283. return r;
  284. }
  285. function __spreadArray(to, from) {
  286. for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
  287. to[j] = from[i];
  288. return to;
  289. }
  290. function __await(v) {
  291. return this instanceof __await ? (this.v = v, this) : new __await(v);
  292. }
  293. function __asyncGenerator(thisArg, _arguments, generator) {
  294. if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
  295. var g = generator.apply(thisArg, _arguments || []), i, q = [];
  296. return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
  297. function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
  298. function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
  299. function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
  300. function fulfill(value) { resume("next", value); }
  301. function reject(value) { resume("throw", value); }
  302. function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
  303. }
  304. function __asyncDelegator(o) {
  305. var i, p;
  306. return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
  307. function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
  308. }
  309. function __asyncValues(o) {
  310. if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
  311. var m = o[Symbol.asyncIterator], i;
  312. return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
  313. function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
  314. function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
  315. }
  316. function __makeTemplateObject(cooked, raw) {
  317. if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
  318. return cooked;
  319. };
  320. var __setModuleDefault = Object.create ? (function(o, v) {
  321. Object.defineProperty(o, "default", { enumerable: true, value: v });
  322. }) : function(o, v) {
  323. o["default"] = v;
  324. };
  325. function __importStar(mod) {
  326. if (mod && mod.__esModule) return mod;
  327. var result = {};
  328. if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
  329. __setModuleDefault(result, mod);
  330. return result;
  331. }
  332. function __importDefault(mod) {
  333. return (mod && mod.__esModule) ? mod : { default: mod };
  334. }
  335. function __classPrivateFieldGet(receiver, privateMap) {
  336. if (!privateMap.has(receiver)) {
  337. throw new TypeError("attempted to get private field on non-instance");
  338. }
  339. return privateMap.get(receiver);
  340. }
  341. function __classPrivateFieldSet(receiver, privateMap, value) {
  342. if (!privateMap.has(receiver)) {
  343. throw new TypeError("attempted to set private field on non-instance");
  344. }
  345. privateMap.set(receiver, value);
  346. return value;
  347. }
  348. /***/ }),
  349. /* 3 */
  350. /***/ (function(module, exports, __webpack_require__) {
  351. "use strict";
  352. /**
  353. * @description 封装 DOM 操作
  354. * @wangfupeng
  355. */
  356. var _interopRequireDefault = __webpack_require__(0);
  357. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  358. var _isArray = _interopRequireDefault(__webpack_require__(89));
  359. var _forEach = _interopRequireDefault(__webpack_require__(4));
  360. var _map = _interopRequireDefault(__webpack_require__(26));
  361. var _trim = _interopRequireDefault(__webpack_require__(17));
  362. var _map2 = _interopRequireDefault(__webpack_require__(121));
  363. var _indexOf = _interopRequireDefault(__webpack_require__(27));
  364. var _splice = _interopRequireDefault(__webpack_require__(91));
  365. var _filter = _interopRequireDefault(__webpack_require__(70));
  366. var _includes = _interopRequireDefault(__webpack_require__(28));
  367. var _bind = _interopRequireDefault(__webpack_require__(57));
  368. (0, _defineProperty["default"])(exports, "__esModule", {
  369. value: true
  370. });
  371. exports.DomElement = void 0;
  372. var tslib_1 = __webpack_require__(2);
  373. var util_1 = __webpack_require__(6);
  374. var AGENT_EVENTS = [];
  375. /**
  376. * 根据 html 字符串创建 elem
  377. * @param {String} html html
  378. */
  379. function _createElemByHTML(html) {
  380. var div = document.createElement('div');
  381. div.innerHTML = html;
  382. var elems = div.children;
  383. return util_1.toArray(elems);
  384. }
  385. /**
  386. * 判断是否是 DOM List
  387. * @param selector DOM 元素或列表
  388. */
  389. function _isDOMList(selector) {
  390. if (!selector) {
  391. return false;
  392. }
  393. if (selector instanceof HTMLCollection || selector instanceof NodeList) {
  394. return true;
  395. }
  396. return false;
  397. }
  398. /**
  399. * 封装 querySelectorAll
  400. * @param selector css 选择器
  401. */
  402. function _querySelectorAll(selector) {
  403. var elems = document.querySelectorAll(selector);
  404. return util_1.toArray(elems);
  405. }
  406. /**
  407. * 封装 _styleArrTrim
  408. * @param styleArr css
  409. */
  410. function _styleArrTrim(style) {
  411. var styleArr = [];
  412. var resultArr = [];
  413. if (!(0, _isArray["default"])(style)) {
  414. // 有 style,将 style 按照 `;` 拆分为数组
  415. styleArr = style.split(';');
  416. } else {
  417. styleArr = style;
  418. }
  419. (0, _forEach["default"])(styleArr).call(styleArr, function (item) {
  420. var _context;
  421. // 对每项样式,按照 : 拆分为 key 和 value
  422. var arr = (0, _map["default"])(_context = item.split(':')).call(_context, function (i) {
  423. return (0, _trim["default"])(i).call(i);
  424. });
  425. if (arr.length === 2) {
  426. resultArr.push(arr[0] + ':' + arr[1]);
  427. }
  428. });
  429. return resultArr;
  430. } // 构造函数
  431. var DomElement =
  432. /** @class */
  433. function () {
  434. /**
  435. * 构造函数
  436. * @param selector 任一类型的选择器
  437. */
  438. function DomElement(selector) {
  439. // 初始化属性
  440. this.elems = [];
  441. this.length = this.elems.length;
  442. this.dataSource = new _map2["default"]();
  443. if (!selector) {
  444. return;
  445. } // 原本就是 DomElement 实例,则直接返回
  446. if (selector instanceof DomElement) {
  447. return selector;
  448. }
  449. var selectorResult = []; // 存储查询结果
  450. var nodeType = selector instanceof Node ? selector.nodeType : -1;
  451. this.selector = selector;
  452. if (nodeType === 1 || nodeType === 9) {
  453. selectorResult = [selector];
  454. } else if (_isDOMList(selector)) {
  455. // DOM List
  456. selectorResult = util_1.toArray(selector);
  457. } else if (selector instanceof Array) {
  458. // Element 数组(其他数据类型,暂时忽略)
  459. selectorResult = selector;
  460. } else if (typeof selector === 'string') {
  461. var _context2;
  462. // 字符串
  463. var tmpSelector = (0, _trim["default"])(_context2 = selector.replace('/\n/mg', '')).call(_context2);
  464. if ((0, _indexOf["default"])(tmpSelector).call(tmpSelector, '<') === 0) {
  465. // 如 <div>
  466. selectorResult = _createElemByHTML(tmpSelector);
  467. } else {
  468. // 如 #id .class
  469. selectorResult = _querySelectorAll(tmpSelector);
  470. }
  471. }
  472. var length = selectorResult.length;
  473. if (!length) {
  474. // 空数组
  475. return this;
  476. } // 加入 DOM 节点
  477. var i = 0;
  478. for (; i < length; i++) {
  479. this.elems.push(selectorResult[i]);
  480. }
  481. this.length = length;
  482. }
  483. (0, _defineProperty["default"])(DomElement.prototype, "id", {
  484. /**
  485. * 获取元素 id
  486. */
  487. get: function get() {
  488. return this.elems[0].id;
  489. },
  490. enumerable: false,
  491. configurable: true
  492. });
  493. /**
  494. * 遍历所有元素,执行回调函数
  495. * @param fn 回调函数
  496. */
  497. DomElement.prototype.forEach = function (fn) {
  498. for (var i = 0; i < this.length; i++) {
  499. var elem = this.elems[i];
  500. var result = fn.call(elem, elem, i);
  501. if (result === false) {
  502. break;
  503. }
  504. }
  505. return this;
  506. };
  507. /**
  508. * 克隆元素
  509. * @param deep 是否深度克隆
  510. */
  511. DomElement.prototype.clone = function (deep) {
  512. var _context3;
  513. if (deep === void 0) {
  514. deep = false;
  515. }
  516. var cloneList = [];
  517. (0, _forEach["default"])(_context3 = this.elems).call(_context3, function (elem) {
  518. cloneList.push(elem.cloneNode(!!deep));
  519. });
  520. return $(cloneList);
  521. };
  522. /**
  523. * 获取第几个元素
  524. * @param index index
  525. */
  526. DomElement.prototype.get = function (index) {
  527. if (index === void 0) {
  528. index = 0;
  529. }
  530. var length = this.length;
  531. if (index >= length) {
  532. index = index % length;
  533. }
  534. return $(this.elems[index]);
  535. };
  536. /**
  537. * 获取第一个元素
  538. */
  539. DomElement.prototype.first = function () {
  540. return this.get(0);
  541. };
  542. /**
  543. * 获取最后一个元素
  544. */
  545. DomElement.prototype.last = function () {
  546. var length = this.length;
  547. return this.get(length - 1);
  548. };
  549. DomElement.prototype.on = function (type, selector, fn) {
  550. var _context4;
  551. if (!type) return this; // 没有 selector ,只有 type 和 fn
  552. if (typeof selector === 'function') {
  553. fn = selector;
  554. selector = '';
  555. }
  556. return (0, _forEach["default"])(_context4 = this).call(_context4, function (elem) {
  557. // 没有事件代理
  558. if (!selector) {
  559. // 无代理
  560. elem.addEventListener(type, fn);
  561. return;
  562. } // 有事件代理
  563. var agentFn = function agentFn(e) {
  564. var target = e.target;
  565. if (target.matches(selector)) {
  566. ;
  567. fn.call(target, e);
  568. }
  569. };
  570. elem.addEventListener(type, agentFn); // 缓存代理事件
  571. AGENT_EVENTS.push({
  572. elem: elem,
  573. selector: selector,
  574. fn: fn,
  575. agentFn: agentFn
  576. });
  577. });
  578. };
  579. DomElement.prototype.off = function (type, selector, fn) {
  580. var _context5;
  581. if (!type) return this; // 没有 selector ,只有 type 和 fn
  582. if (typeof selector === 'function') {
  583. fn = selector;
  584. selector = '';
  585. }
  586. return (0, _forEach["default"])(_context5 = this).call(_context5, function (elem) {
  587. // 解绑事件代理
  588. if (selector) {
  589. var idx = -1;
  590. for (var i = 0; i < AGENT_EVENTS.length; i++) {
  591. var item = AGENT_EVENTS[i];
  592. if (item.selector === selector && item.fn === fn && item.elem === elem) {
  593. idx = i;
  594. break;
  595. }
  596. }
  597. if (idx !== -1) {
  598. var agentFn = (0, _splice["default"])(AGENT_EVENTS).call(AGENT_EVENTS, idx, 1)[0].agentFn;
  599. elem.removeEventListener(type, agentFn);
  600. }
  601. } else {
  602. // @ts-ignore
  603. elem.removeEventListener(type, fn);
  604. }
  605. });
  606. };
  607. DomElement.prototype.attr = function (key, val) {
  608. var _context6;
  609. if (val == null) {
  610. // 获取数据
  611. return this.elems[0].getAttribute(key) || '';
  612. } // 否则,设置属性
  613. return (0, _forEach["default"])(_context6 = this).call(_context6, function (elem) {
  614. elem.setAttribute(key, val);
  615. });
  616. };
  617. /**
  618. * 删除 属性
  619. * @param key key
  620. */
  621. DomElement.prototype.removeAttr = function (key) {
  622. var _context7;
  623. (0, _forEach["default"])(_context7 = this).call(_context7, function (elem) {
  624. elem.removeAttribute(key);
  625. });
  626. };
  627. /**
  628. * 添加 css class
  629. * @param className css class
  630. */
  631. DomElement.prototype.addClass = function (className) {
  632. var _context8;
  633. if (!className) {
  634. return this;
  635. }
  636. return (0, _forEach["default"])(_context8 = this).call(_context8, function (elem) {
  637. if (elem.className) {
  638. // 当前有 class
  639. var arr = elem.className.split(/\s/);
  640. arr = (0, _filter["default"])(arr).call(arr, function (item) {
  641. return !!(0, _trim["default"])(item).call(item);
  642. }); // 添加 class
  643. if ((0, _indexOf["default"])(arr).call(arr, className) < 0) {
  644. arr.push(className);
  645. } // 修改 elem.class
  646. elem.className = arr.join(' ');
  647. } else {
  648. // 当前没有 class
  649. elem.className = className;
  650. }
  651. });
  652. };
  653. /**
  654. * 添加 css class
  655. * @param className css class
  656. */
  657. DomElement.prototype.removeClass = function (className) {
  658. var _context9;
  659. if (!className) {
  660. return this;
  661. }
  662. return (0, _forEach["default"])(_context9 = this).call(_context9, function (elem) {
  663. if (!elem.className) {
  664. // 当前无 class
  665. return;
  666. }
  667. var arr = elem.className.split(/\s/);
  668. arr = (0, _filter["default"])(arr).call(arr, function (item) {
  669. item = (0, _trim["default"])(item).call(item); // 删除 class
  670. if (!item || item === className) {
  671. return false;
  672. }
  673. return true;
  674. }); // 修改 elem.class
  675. elem.className = arr.join(' ');
  676. });
  677. };
  678. /**
  679. * 是否有传入的 css class
  680. * @param className css class
  681. */
  682. DomElement.prototype.hasClass = function (className) {
  683. if (!className) {
  684. return false;
  685. }
  686. var elem = this.elems[0];
  687. if (!elem.className) {
  688. // 当前无 class
  689. return false;
  690. }
  691. var arr = elem.className.split(/\s/);
  692. return (0, _includes["default"])(arr).call(arr, className); // 是否包含
  693. };
  694. /**
  695. * 修改 css
  696. * @param key css key
  697. * @param val css value
  698. */
  699. // css(key: string): string
  700. DomElement.prototype.css = function (key, val) {
  701. var _context10;
  702. var currentStyle;
  703. if (val == '') {
  704. currentStyle = '';
  705. } else {
  706. currentStyle = key + ":" + val + ";";
  707. }
  708. return (0, _forEach["default"])(_context10 = this).call(_context10, function (elem) {
  709. var _context11;
  710. var style = (0, _trim["default"])(_context11 = elem.getAttribute('style') || '').call(_context11);
  711. if (style) {
  712. // 有 style,将 style 按照 `;` 拆分为数组
  713. var resultArr = _styleArrTrim(style); // 替换现有的 style
  714. resultArr = (0, _map["default"])(resultArr).call(resultArr, function (item) {
  715. if ((0, _indexOf["default"])(item).call(item, key) === 0) {
  716. return currentStyle;
  717. } else {
  718. return item;
  719. }
  720. }); // 新增 style
  721. if (currentStyle != '' && (0, _indexOf["default"])(resultArr).call(resultArr, currentStyle) < 0) {
  722. resultArr.push(currentStyle);
  723. } // 去掉 空白
  724. if (currentStyle == '') {
  725. resultArr = _styleArrTrim(resultArr);
  726. } // 重新设置 style
  727. elem.setAttribute('style', resultArr.join('; '));
  728. } else {
  729. // 当前没有 style
  730. elem.setAttribute('style', currentStyle);
  731. }
  732. });
  733. };
  734. /**
  735. * 封装 getBoundingClientRect
  736. */
  737. DomElement.prototype.getBoundingClientRect = function () {
  738. var elem = this.elems[0];
  739. return elem.getBoundingClientRect();
  740. };
  741. /**
  742. * 显示
  743. */
  744. DomElement.prototype.show = function () {
  745. return this.css('display', 'block');
  746. };
  747. /**
  748. * 隐藏
  749. */
  750. DomElement.prototype.hide = function () {
  751. return this.css('display', 'none');
  752. };
  753. /**
  754. * 获取子节点(只有 DOM 元素)
  755. */
  756. DomElement.prototype.children = function () {
  757. var elem = this.elems[0];
  758. if (!elem) {
  759. return null;
  760. }
  761. return $(elem.children);
  762. };
  763. /**
  764. * 获取子节点(包括文本节点)
  765. */
  766. DomElement.prototype.childNodes = function () {
  767. var elem = this.elems[0];
  768. if (!elem) {
  769. return null;
  770. }
  771. return $(elem.childNodes);
  772. };
  773. /**
  774. * 将子元素全部替换
  775. * @param $children 新的child节点
  776. */
  777. DomElement.prototype.replaceChildAll = function ($children) {
  778. var parent = this.getNode();
  779. var elem = this.elems[0];
  780. while (elem.hasChildNodes()) {
  781. parent.firstChild && elem.removeChild(parent.firstChild);
  782. }
  783. this.append($children);
  784. };
  785. /**
  786. * 增加子节点
  787. * @param $children 子节点
  788. */
  789. DomElement.prototype.append = function ($children) {
  790. var _context12;
  791. return (0, _forEach["default"])(_context12 = this).call(_context12, function (elem) {
  792. (0, _forEach["default"])($children).call($children, function (child) {
  793. elem.appendChild(child);
  794. });
  795. });
  796. };
  797. /**
  798. * 移除当前节点
  799. */
  800. DomElement.prototype.remove = function () {
  801. var _context13;
  802. return (0, _forEach["default"])(_context13 = this).call(_context13, function (elem) {
  803. if (elem.remove) {
  804. elem.remove();
  805. } else {
  806. var parent_1 = elem.parentElement;
  807. parent_1 && parent_1.removeChild(elem);
  808. }
  809. });
  810. };
  811. /**
  812. * 当前元素,是否包含某个子元素
  813. * @param $child 子元素
  814. */
  815. DomElement.prototype.isContain = function ($child) {
  816. var elem = this.elems[0];
  817. var child = $child.elems[0];
  818. return elem.contains(child);
  819. };
  820. /**
  821. * 获取当前元素 nodeName
  822. */
  823. DomElement.prototype.getNodeName = function () {
  824. var elem = this.elems[0];
  825. return elem.nodeName;
  826. };
  827. /**
  828. * 根据元素位置获取元素节点(默认获取0位置的节点)
  829. * @param n 元素节点位置
  830. */
  831. DomElement.prototype.getNode = function (n) {
  832. if (n === void 0) {
  833. n = 0;
  834. }
  835. var elem;
  836. elem = this.elems[n];
  837. return elem;
  838. };
  839. /**
  840. * 查询
  841. * @param selector css 选择器
  842. */
  843. DomElement.prototype.find = function (selector) {
  844. var elem = this.elems[0];
  845. return $(elem.querySelectorAll(selector));
  846. };
  847. DomElement.prototype.text = function (val) {
  848. if (!val) {
  849. // 获取 text
  850. var elem = this.elems[0];
  851. return elem.innerHTML.replace(/<[^>]+>/g, function () {
  852. return '';
  853. });
  854. } else {
  855. var _context14;
  856. // 设置 text
  857. return (0, _forEach["default"])(_context14 = this).call(_context14, function (elem) {
  858. elem.innerHTML = val;
  859. });
  860. }
  861. };
  862. DomElement.prototype.html = function (val) {
  863. var elem = this.elems[0];
  864. if (!val) {
  865. // 获取 html
  866. return elem.innerHTML;
  867. } else {
  868. // 设置 html
  869. elem.innerHTML = val;
  870. return this;
  871. }
  872. };
  873. /**
  874. * 获取元素 value
  875. */
  876. DomElement.prototype.val = function () {
  877. var _context15;
  878. var elem = this.elems[0];
  879. return (0, _trim["default"])(_context15 = elem.value).call(_context15); // 暂用 any
  880. };
  881. /**
  882. * focus 到当前元素
  883. */
  884. DomElement.prototype.focus = function () {
  885. var _context16;
  886. return (0, _forEach["default"])(_context16 = this).call(_context16, function (elem) {
  887. elem.focus();
  888. });
  889. };
  890. /**
  891. * 当前元素前一个兄弟节点
  892. */
  893. DomElement.prototype.prev = function () {
  894. var elem = this.elems[0];
  895. return $(elem.previousElementSibling);
  896. };
  897. /**
  898. * 当前元素后一个兄弟节点
  899. * 不包括文本节点、注释节点)
  900. */
  901. DomElement.prototype.next = function () {
  902. var elem = this.elems[0];
  903. return $(elem.nextElementSibling);
  904. };
  905. /**
  906. * 获取当前节点的下一个兄弟节点
  907. * 包括文本节点、注释节点即回车、换行、空格、文本等等)
  908. */
  909. DomElement.prototype.getNextSibling = function () {
  910. var elem = this.elems[0];
  911. return $(elem.nextSibling);
  912. };
  913. /**
  914. * 获取父元素
  915. */
  916. DomElement.prototype.parent = function () {
  917. var elem = this.elems[0];
  918. return $(elem.parentElement);
  919. };
  920. /**
  921. * 查找父元素,直到满足 selector 条件
  922. * @param selector css 选择器
  923. * @param curElem 从哪个元素开始查找,默认为当前元素
  924. */
  925. DomElement.prototype.parentUntil = function (selector, curElem) {
  926. var elem = curElem || this.elems[0];
  927. if (elem.nodeName === 'BODY') {
  928. return null;
  929. }
  930. var parent = elem.parentElement;
  931. if (parent === null) {
  932. return null;
  933. }
  934. if (parent.matches(selector)) {
  935. // 找到,并返回
  936. return $(parent);
  937. } // 继续查找,递归
  938. return this.parentUntil(selector, parent);
  939. };
  940. /**
  941. * 查找父元素,直到满足 selector 条件,或者 到达 编辑区域容器以及菜单栏容器
  942. * @param selector css 选择器
  943. * @param curElem 从哪个元素开始查找,默认为当前元素
  944. */
  945. DomElement.prototype.parentUntilEditor = function (selector, editor, curElem) {
  946. var elem = curElem || this.elems[0];
  947. if ($(elem).equal(editor.$textContainerElem) || $(elem).equal(editor.$toolbarElem)) {
  948. return null;
  949. }
  950. var parent = elem.parentElement;
  951. if (parent === null) {
  952. return null;
  953. }
  954. if (parent.matches(selector)) {
  955. // 找到,并返回
  956. return $(parent);
  957. } // 继续查找,递归
  958. return this.parentUntilEditor(selector, editor, parent);
  959. };
  960. /**
  961. * 判读是否相等
  962. * @param $elem 元素
  963. */
  964. DomElement.prototype.equal = function ($elem) {
  965. if ($elem instanceof DomElement) {
  966. return this.elems[0] === $elem.elems[0];
  967. } else if ($elem instanceof HTMLElement) {
  968. return this.elems[0] === $elem;
  969. } else {
  970. return false;
  971. }
  972. };
  973. /**
  974. * 将该元素插入到某个元素前面
  975. * @param selector css 选择器
  976. */
  977. DomElement.prototype.insertBefore = function (selector) {
  978. var _context17;
  979. var $referenceNode = $(selector);
  980. var referenceNode = $referenceNode.elems[0];
  981. if (!referenceNode) {
  982. return this;
  983. }
  984. return (0, _forEach["default"])(_context17 = this).call(_context17, function (elem) {
  985. var parent = referenceNode.parentNode;
  986. parent === null || parent === void 0 ? void 0 : parent.insertBefore(elem, referenceNode);
  987. });
  988. };
  989. /**
  990. * 将该元素插入到selector元素后面
  991. * @param selector css 选择器
  992. */
  993. DomElement.prototype.insertAfter = function (selector) {
  994. var _context18;
  995. var $referenceNode = $(selector);
  996. var referenceNode = $referenceNode.elems[0];
  997. var anchorNode = referenceNode && referenceNode.nextSibling;
  998. if (!referenceNode) {
  999. return this;
  1000. }
  1001. return (0, _forEach["default"])(_context18 = this).call(_context18, function (elem) {
  1002. var parent = referenceNode.parentNode;
  1003. if (anchorNode) {
  1004. parent.insertBefore(elem, anchorNode);
  1005. } else {
  1006. parent.appendChild(elem);
  1007. }
  1008. });
  1009. };
  1010. /**
  1011. * 设置/获取 数据
  1012. * @param key key
  1013. * @param value value
  1014. */
  1015. DomElement.prototype.data = function (key, value) {
  1016. if (value != null) {
  1017. // 设置数据
  1018. this.dataSource.set(key, value);
  1019. } else {
  1020. // 获取数据
  1021. return this.dataSource.get(key);
  1022. }
  1023. };
  1024. /**
  1025. * 获取当前节点的顶级(段落)
  1026. * @param editor 富文本实例
  1027. */
  1028. DomElement.prototype.getNodeTop = function (editor) {
  1029. // 异常抛出,空的 DomElement 直接返回
  1030. if (this.length < 1) {
  1031. return this;
  1032. } // 获取父级元素,并判断是否是 编辑区域
  1033. // 如果是则返回当前节点
  1034. var $parent = this.parent(); // fix:添加当前元素与编辑区元素的比较,防止传入的当前元素就是编辑区元素而造成的获取顶级元素为空的情况
  1035. if (editor.$textElem.equal(this) || editor.$textElem.equal($parent)) {
  1036. return this;
  1037. } // 到了此处,即代表当前节点不是顶级段落
  1038. // 将当前节点存放于父节点的 prior 字段下
  1039. // 主要用于 回溯 子节点
  1040. // 例如:ul ol 等标签
  1041. // 实际操作的节点是 li 但是一个 ul ol 的子节点可能有多个
  1042. // 所以需要对其进行 回溯 找到对应的子节点
  1043. $parent.prior = this;
  1044. return $parent.getNodeTop(editor);
  1045. };
  1046. /**
  1047. * 获取当前 节点 基与上一个拥有相对或者解决定位的父容器的位置
  1048. * @param editor 富文本实例
  1049. */
  1050. DomElement.prototype.getOffsetData = function () {
  1051. var $node = this.elems[0];
  1052. return {
  1053. top: $node.offsetTop,
  1054. left: $node.offsetLeft,
  1055. width: $node.offsetWidth,
  1056. height: $node.offsetHeight,
  1057. parent: $node.offsetParent
  1058. };
  1059. };
  1060. /**
  1061. * 从上至下进行滚动
  1062. * @param top 滚动的值
  1063. */
  1064. DomElement.prototype.scrollTop = function (top) {
  1065. var $node = this.elems[0];
  1066. $node.scrollTo({
  1067. top: top
  1068. });
  1069. };
  1070. return DomElement;
  1071. }();
  1072. exports.DomElement = DomElement; // new 一个对象
  1073. function $() {
  1074. var arg = [];
  1075. for (var _i = 0; _i < arguments.length; _i++) {
  1076. arg[_i] = arguments[_i];
  1077. }
  1078. return new ((0, _bind["default"])(DomElement).apply(DomElement, tslib_1.__spreadArrays([void 0], arg)))();
  1079. }
  1080. exports["default"] = $;
  1081. /***/ }),
  1082. /* 4 */
  1083. /***/ (function(module, exports, __webpack_require__) {
  1084. module.exports = __webpack_require__(180);
  1085. /***/ }),
  1086. /* 5 */
  1087. /***/ (function(module, exports, __webpack_require__) {
  1088. "use strict";
  1089. var global = __webpack_require__(8);
  1090. var getOwnPropertyDescriptor = __webpack_require__(71).f;
  1091. var isForced = __webpack_require__(101);
  1092. var path = __webpack_require__(9);
  1093. var bind = __webpack_require__(40);
  1094. var createNonEnumerableProperty = __webpack_require__(19);
  1095. var has = __webpack_require__(16);
  1096. var wrapConstructor = function (NativeConstructor) {
  1097. var Wrapper = function (a, b, c) {
  1098. if (this instanceof NativeConstructor) {
  1099. switch (arguments.length) {
  1100. case 0: return new NativeConstructor();
  1101. case 1: return new NativeConstructor(a);
  1102. case 2: return new NativeConstructor(a, b);
  1103. } return new NativeConstructor(a, b, c);
  1104. } return NativeConstructor.apply(this, arguments);
  1105. };
  1106. Wrapper.prototype = NativeConstructor.prototype;
  1107. return Wrapper;
  1108. };
  1109. /*
  1110. options.target - name of the target object
  1111. options.global - target is the global object
  1112. options.stat - export as static methods of target
  1113. options.proto - export as prototype methods of target
  1114. options.real - real prototype method for the `pure` version
  1115. options.forced - export even if the native feature is available
  1116. options.bind - bind methods to the target, required for the `pure` version
  1117. options.wrap - wrap constructors to preventing global pollution, required for the `pure` version
  1118. options.unsafe - use the simple assignment of property instead of delete + defineProperty
  1119. options.sham - add a flag to not completely full polyfills
  1120. options.enumerable - export as enumerable property
  1121. options.noTargetGet - prevent calling a getter on target
  1122. */
  1123. module.exports = function (options, source) {
  1124. var TARGET = options.target;
  1125. var GLOBAL = options.global;
  1126. var STATIC = options.stat;
  1127. var PROTO = options.proto;
  1128. var nativeSource = GLOBAL ? global : STATIC ? global[TARGET] : (global[TARGET] || {}).prototype;
  1129. var target = GLOBAL ? path : path[TARGET] || (path[TARGET] = {});
  1130. var targetPrototype = target.prototype;
  1131. var FORCED, USE_NATIVE, VIRTUAL_PROTOTYPE;
  1132. var key, sourceProperty, targetProperty, nativeProperty, resultProperty, descriptor;
  1133. for (key in source) {
  1134. FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);
  1135. // contains in native
  1136. USE_NATIVE = !FORCED && nativeSource && has(nativeSource, key);
  1137. targetProperty = target[key];
  1138. if (USE_NATIVE) if (options.noTargetGet) {
  1139. descriptor = getOwnPropertyDescriptor(nativeSource, key);
  1140. nativeProperty = descriptor && descriptor.value;
  1141. } else nativeProperty = nativeSource[key];
  1142. // export native or implementation
  1143. sourceProperty = (USE_NATIVE && nativeProperty) ? nativeProperty : source[key];
  1144. if (USE_NATIVE && typeof targetProperty === typeof sourceProperty) continue;
  1145. // bind timers to global for call from export context
  1146. if (options.bind && USE_NATIVE) resultProperty = bind(sourceProperty, global);
  1147. // wrap global constructors for prevent changs in this version
  1148. else if (options.wrap && USE_NATIVE) resultProperty = wrapConstructor(sourceProperty);
  1149. // make static versions for prototype methods
  1150. else if (PROTO && typeof sourceProperty == 'function') resultProperty = bind(Function.call, sourceProperty);
  1151. // default case
  1152. else resultProperty = sourceProperty;
  1153. // add a flag to not completely full polyfills
  1154. if (options.sham || (sourceProperty && sourceProperty.sham) || (targetProperty && targetProperty.sham)) {
  1155. createNonEnumerableProperty(resultProperty, 'sham', true);
  1156. }
  1157. target[key] = resultProperty;
  1158. if (PROTO) {
  1159. VIRTUAL_PROTOTYPE = TARGET + 'Prototype';
  1160. if (!has(path, VIRTUAL_PROTOTYPE)) {
  1161. createNonEnumerableProperty(path, VIRTUAL_PROTOTYPE, {});
  1162. }
  1163. // export virtual prototype methods
  1164. path[VIRTUAL_PROTOTYPE][key] = sourceProperty;
  1165. // export real prototype methods
  1166. if (options.real && targetPrototype && !targetPrototype[key]) {
  1167. createNonEnumerableProperty(targetPrototype, key, sourceProperty);
  1168. }
  1169. }
  1170. }
  1171. };
  1172. /***/ }),
  1173. /* 6 */
  1174. /***/ (function(module, exports, __webpack_require__) {
  1175. "use strict";
  1176. /**
  1177. * @description 工具函数集合
  1178. * @author wangfupeng
  1179. */
  1180. var _interopRequireDefault = __webpack_require__(0);
  1181. var _typeof2 = _interopRequireDefault(__webpack_require__(92));
  1182. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  1183. var _parseInt2 = _interopRequireDefault(__webpack_require__(256));
  1184. var _slice = _interopRequireDefault(__webpack_require__(45));
  1185. var _setTimeout2 = _interopRequireDefault(__webpack_require__(46));
  1186. var _isArray = _interopRequireDefault(__webpack_require__(89));
  1187. var _map = _interopRequireDefault(__webpack_require__(26));
  1188. (0, _defineProperty["default"])(exports, "__esModule", {
  1189. value: true
  1190. });
  1191. exports.hexToRgb = exports.getRandomCode = exports.toArray = exports.deepClone = exports.isFunction = exports.debounce = exports.throttle = exports.arrForEach = exports.forEach = exports.replaceSpecialSymbol = exports.replaceHtmlSymbol = exports.getRandom = exports.UA = void 0;
  1192. var tslib_1 = __webpack_require__(2);
  1193. var NavUA =
  1194. /** @class */
  1195. function () {
  1196. function NavUA() {
  1197. this._ua = navigator.userAgent;
  1198. var math = this._ua.match(/(Edge?)\/(\d+)/);
  1199. this.isOldEdge = math && math[1] == 'Edge' && (0, _parseInt2["default"])(math[2]) < 19 ? true : false;
  1200. this.isFirefox = /Firefox\/\d+/.test(this._ua) && !/Seamonkey\/\d+/.test(this._ua) ? true : false;
  1201. } // 是否为 IE
  1202. NavUA.prototype.isIE = function () {
  1203. return 'ActiveXObject' in window;
  1204. }; // 是否为 webkit
  1205. NavUA.prototype.isWebkit = function () {
  1206. return /webkit/i.test(this._ua);
  1207. };
  1208. return NavUA;
  1209. }(); // 和 UA 相关的属性
  1210. exports.UA = new NavUA();
  1211. /**
  1212. * 获取随机字符
  1213. * @param prefix 前缀
  1214. */
  1215. function getRandom(prefix) {
  1216. var _context;
  1217. if (prefix === void 0) {
  1218. prefix = '';
  1219. }
  1220. return prefix + (0, _slice["default"])(_context = Math.random().toString()).call(_context, 2);
  1221. }
  1222. exports.getRandom = getRandom;
  1223. /**
  1224. * 替换 html 特殊字符
  1225. * @param html html 字符串
  1226. */
  1227. function replaceHtmlSymbol(html) {
  1228. return html.replace(/</gm, '&lt;').replace(/>/gm, '&gt;').replace(/"/gm, '&quot;').replace(/(\r\n|\r|\n)/g, '<br/>');
  1229. }
  1230. exports.replaceHtmlSymbol = replaceHtmlSymbol;
  1231. function replaceSpecialSymbol(value) {
  1232. return value.replace(/&lt;/gm, '<').replace(/&gt;/gm, '>').replace(/&quot;/gm, '"');
  1233. }
  1234. exports.replaceSpecialSymbol = replaceSpecialSymbol;
  1235. function forEach(obj, fn) {
  1236. for (var key in obj) {
  1237. if (Object.prototype.hasOwnProperty.call(obj, key)) {
  1238. var result = fn(key, obj[key]);
  1239. if (result === false) {
  1240. // 提前终止循环
  1241. break;
  1242. }
  1243. }
  1244. }
  1245. }
  1246. exports.forEach = forEach;
  1247. /**
  1248. * 遍历类数组
  1249. * @param fakeArr 类数组
  1250. * @param fn 回调函数
  1251. */
  1252. function arrForEach(fakeArr, fn) {
  1253. var i, item, result;
  1254. var length = fakeArr.length || 0;
  1255. for (i = 0; i < length; i++) {
  1256. item = fakeArr[i];
  1257. result = fn.call(fakeArr, item, i);
  1258. if (result === false) {
  1259. break;
  1260. }
  1261. }
  1262. }
  1263. exports.arrForEach = arrForEach;
  1264. /**
  1265. * 节流
  1266. * @param fn 函数
  1267. * @param interval 间隔时间,毫秒
  1268. */
  1269. function throttle(fn, interval) {
  1270. if (interval === void 0) {
  1271. interval = 200;
  1272. }
  1273. var flag = false;
  1274. return function () {
  1275. var _this = this;
  1276. var args = [];
  1277. for (var _i = 0; _i < arguments.length; _i++) {
  1278. args[_i] = arguments[_i];
  1279. }
  1280. if (!flag) {
  1281. flag = true;
  1282. (0, _setTimeout2["default"])(function () {
  1283. flag = false;
  1284. fn.call.apply(fn, tslib_1.__spreadArrays([_this], args)); // this 报语法错误,先用 null
  1285. }, interval);
  1286. }
  1287. };
  1288. }
  1289. exports.throttle = throttle;
  1290. /**
  1291. * 防抖
  1292. * @param fn 函数
  1293. * @param delay 间隔时间,毫秒
  1294. */
  1295. function debounce(fn, delay) {
  1296. if (delay === void 0) {
  1297. delay = 200;
  1298. }
  1299. var lastFn = 0;
  1300. return function () {
  1301. var _this = this;
  1302. var args = [];
  1303. for (var _i = 0; _i < arguments.length; _i++) {
  1304. args[_i] = arguments[_i];
  1305. }
  1306. if (lastFn) {
  1307. window.clearTimeout(lastFn);
  1308. }
  1309. lastFn = (0, _setTimeout2["default"])(function () {
  1310. lastFn = 0;
  1311. fn.call.apply(fn, tslib_1.__spreadArrays([_this], args)); // this 报语法错误,先用 null
  1312. }, delay);
  1313. };
  1314. }
  1315. exports.debounce = debounce;
  1316. /**
  1317. * isFunction 是否是函数
  1318. * @param fn 函数
  1319. */
  1320. function isFunction(fn) {
  1321. return typeof fn === 'function';
  1322. }
  1323. exports.isFunction = isFunction;
  1324. /**
  1325. * 引用与非引用值 深拷贝方法
  1326. * @param data
  1327. */
  1328. function deepClone(data) {
  1329. if ((0, _typeof2["default"])(data) !== 'object' || typeof data == 'function' || data === null) {
  1330. return data;
  1331. }
  1332. var item;
  1333. if ((0, _isArray["default"])(data)) {
  1334. item = [];
  1335. }
  1336. if (!(0, _isArray["default"])(data)) {
  1337. item = {};
  1338. }
  1339. for (var i in data) {
  1340. if (Object.prototype.hasOwnProperty.call(data, i)) {
  1341. item[i] = deepClone(data[i]);
  1342. }
  1343. }
  1344. return item;
  1345. }
  1346. exports.deepClone = deepClone;
  1347. /**
  1348. * 将可遍历的对象转换为数组
  1349. * @param data 可遍历的对象
  1350. */
  1351. function toArray(data) {
  1352. return (0, _slice["default"])(Array.prototype).call(data);
  1353. }
  1354. exports.toArray = toArray;
  1355. /**
  1356. * 唯一id生成
  1357. * @param length 随机数长度
  1358. */
  1359. function getRandomCode() {
  1360. var _context2;
  1361. return (0, _slice["default"])(_context2 = Math.random().toString(36)).call(_context2, -5);
  1362. }
  1363. exports.getRandomCode = getRandomCode;
  1364. /**
  1365. * hex color 转换成 rgb
  1366. * @param hex string
  1367. */
  1368. function hexToRgb(hex) {
  1369. var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
  1370. if (result == null) return null;
  1371. var colors = (0, _map["default"])(result).call(result, function (i) {
  1372. return (0, _parseInt2["default"])(i, 16);
  1373. });
  1374. var r = colors[1];
  1375. var g = colors[2];
  1376. var b = colors[3];
  1377. return "rgb(" + r + ", " + g + ", " + b + ")";
  1378. }
  1379. exports.hexToRgb = hexToRgb;
  1380. /***/ }),
  1381. /* 7 */
  1382. /***/ (function(module, exports, __webpack_require__) {
  1383. "use strict";
  1384. /**
  1385. * @description 常量
  1386. * @author wangfupeng
  1387. */
  1388. var _interopRequireDefault = __webpack_require__(0);
  1389. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  1390. (0, _defineProperty["default"])(exports, "__esModule", {
  1391. value: true
  1392. });
  1393. exports.EMPTY_P_REGEX = exports.EMPTY_P_LAST_REGEX = exports.EMPTY_P = exports.urlRegex = exports.EMPTY_FN = void 0;
  1394. function EMPTY_FN() {}
  1395. exports.EMPTY_FN = EMPTY_FN; //用于校验是否为url格式字符串
  1396. exports.urlRegex = /(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-.,@?^=%&amp;:/~+#]*[\w\-@?^=%&amp;/~+#])?/g; // 编辑器为了方便继续输入/换行等原因 主动生成的空标签
  1397. exports.EMPTY_P = '<p data-we-empty-p=""><br></p>'; // 用于校验dom中最后 由编辑器主动生成的空标签结构
  1398. exports.EMPTY_P_LAST_REGEX = /<p data-we-empty-p=""><br\/?><\/p>$/gim; // 用于校验dom中所有 由编辑器主动生成的空标签结构
  1399. exports.EMPTY_P_REGEX = /<p data-we-empty-p="">/gim;
  1400. /***/ }),
  1401. /* 8 */
  1402. /***/ (function(module, exports, __webpack_require__) {
  1403. /* WEBPACK VAR INJECTION */(function(global) {var check = function (it) {
  1404. return it && it.Math == Math && it;
  1405. };
  1406. // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
  1407. module.exports =
  1408. // eslint-disable-next-line no-undef
  1409. check(typeof globalThis == 'object' && globalThis) ||
  1410. check(typeof window == 'object' && window) ||
  1411. check(typeof self == 'object' && self) ||
  1412. check(typeof global == 'object' && global) ||
  1413. // eslint-disable-next-line no-new-func
  1414. Function('return this')();
  1415. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(145)))
  1416. /***/ }),
  1417. /* 9 */
  1418. /***/ (function(module, exports) {
  1419. module.exports = {};
  1420. /***/ }),
  1421. /* 10 */
  1422. /***/ (function(module, exports, __webpack_require__) {
  1423. var global = __webpack_require__(8);
  1424. var shared = __webpack_require__(74);
  1425. var has = __webpack_require__(16);
  1426. var uid = __webpack_require__(64);
  1427. var NATIVE_SYMBOL = __webpack_require__(76);
  1428. var USE_SYMBOL_AS_UID = __webpack_require__(106);
  1429. var WellKnownSymbolsStore = shared('wks');
  1430. var Symbol = global.Symbol;
  1431. var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;
  1432. module.exports = function (name) {
  1433. if (!has(WellKnownSymbolsStore, name)) {
  1434. if (NATIVE_SYMBOL && has(Symbol, name)) WellKnownSymbolsStore[name] = Symbol[name];
  1435. else WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name);
  1436. } return WellKnownSymbolsStore[name];
  1437. };
  1438. /***/ }),
  1439. /* 11 */
  1440. /***/ (function(module, exports) {
  1441. module.exports = function (exec) {
  1442. try {
  1443. return !!exec();
  1444. } catch (error) {
  1445. return true;
  1446. }
  1447. };
  1448. /***/ }),
  1449. /* 12 */
  1450. /***/ (function(module, exports, __webpack_require__) {
  1451. var path = __webpack_require__(9);
  1452. var has = __webpack_require__(16);
  1453. var wrappedWellKnownSymbolModule = __webpack_require__(93);
  1454. var defineProperty = __webpack_require__(18).f;
  1455. module.exports = function (NAME) {
  1456. var Symbol = path.Symbol || (path.Symbol = {});
  1457. if (!has(Symbol, NAME)) defineProperty(Symbol, NAME, {
  1458. value: wrappedWellKnownSymbolModule.f(NAME)
  1459. });
  1460. };
  1461. /***/ }),
  1462. /* 13 */
  1463. /***/ (function(module, exports) {
  1464. module.exports = function (it) {
  1465. return typeof it === 'object' ? it !== null : typeof it === 'function';
  1466. };
  1467. /***/ }),
  1468. /* 14 */
  1469. /***/ (function(module, exports, __webpack_require__) {
  1470. var fails = __webpack_require__(11);
  1471. // Thank's IE8 for his funny defineProperty
  1472. module.exports = !fails(function () {
  1473. return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;
  1474. });
  1475. /***/ }),
  1476. /* 15 */
  1477. /***/ (function(module, exports, __webpack_require__) {
  1478. var path = __webpack_require__(9);
  1479. module.exports = function (CONSTRUCTOR) {
  1480. return path[CONSTRUCTOR + 'Prototype'];
  1481. };
  1482. /***/ }),
  1483. /* 16 */
  1484. /***/ (function(module, exports) {
  1485. var hasOwnProperty = {}.hasOwnProperty;
  1486. module.exports = function (it, key) {
  1487. return hasOwnProperty.call(it, key);
  1488. };
  1489. /***/ }),
  1490. /* 17 */
  1491. /***/ (function(module, exports, __webpack_require__) {
  1492. module.exports = __webpack_require__(192);
  1493. /***/ }),
  1494. /* 18 */
  1495. /***/ (function(module, exports, __webpack_require__) {
  1496. var DESCRIPTORS = __webpack_require__(14);
  1497. var IE8_DOM_DEFINE = __webpack_require__(100);
  1498. var anObject = __webpack_require__(25);
  1499. var toPrimitive = __webpack_require__(60);
  1500. var nativeDefineProperty = Object.defineProperty;
  1501. // `Object.defineProperty` method
  1502. // https://tc39.github.io/ecma262/#sec-object.defineproperty
  1503. exports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) {
  1504. anObject(O);
  1505. P = toPrimitive(P, true);
  1506. anObject(Attributes);
  1507. if (IE8_DOM_DEFINE) try {
  1508. return nativeDefineProperty(O, P, Attributes);
  1509. } catch (error) { /* empty */ }
  1510. if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');
  1511. if ('value' in Attributes) O[P] = Attributes.value;
  1512. return O;
  1513. };
  1514. /***/ }),
  1515. /* 19 */
  1516. /***/ (function(module, exports, __webpack_require__) {
  1517. var DESCRIPTORS = __webpack_require__(14);
  1518. var definePropertyModule = __webpack_require__(18);
  1519. var createPropertyDescriptor = __webpack_require__(48);
  1520. module.exports = DESCRIPTORS ? function (object, key, value) {
  1521. return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));
  1522. } : function (object, key, value) {
  1523. object[key] = value;
  1524. return object;
  1525. };
  1526. /***/ }),
  1527. /* 20 */
  1528. /***/ (function(module, exports, __webpack_require__) {
  1529. "use strict";
  1530. var isOldIE = function isOldIE() {
  1531. var memo;
  1532. return function memorize() {
  1533. if (typeof memo === 'undefined') {
  1534. // Test for IE <= 9 as proposed by Browserhacks
  1535. // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805
  1536. // Tests for existence of standard globals is to allow style-loader
  1537. // to operate correctly into non-standard environments
  1538. // @see https://github.com/webpack-contrib/style-loader/issues/177
  1539. memo = Boolean(window && document && document.all && !window.atob);
  1540. }
  1541. return memo;
  1542. };
  1543. }();
  1544. var getTarget = function getTarget() {
  1545. var memo = {};
  1546. return function memorize(target) {
  1547. if (typeof memo[target] === 'undefined') {
  1548. var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself
  1549. if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {
  1550. try {
  1551. // This will throw an exception if access to iframe is blocked
  1552. // due to cross-origin restrictions
  1553. styleTarget = styleTarget.contentDocument.head;
  1554. } catch (e) {
  1555. // istanbul ignore next
  1556. styleTarget = null;
  1557. }
  1558. }
  1559. memo[target] = styleTarget;
  1560. }
  1561. return memo[target];
  1562. };
  1563. }();
  1564. var stylesInDom = [];
  1565. function getIndexByIdentifier(identifier) {
  1566. var result = -1;
  1567. for (var i = 0; i < stylesInDom.length; i++) {
  1568. if (stylesInDom[i].identifier === identifier) {
  1569. result = i;
  1570. break;
  1571. }
  1572. }
  1573. return result;
  1574. }
  1575. function modulesToDom(list, options) {
  1576. var idCountMap = {};
  1577. var identifiers = [];
  1578. for (var i = 0; i < list.length; i++) {
  1579. var item = list[i];
  1580. var id = options.base ? item[0] + options.base : item[0];
  1581. var count = idCountMap[id] || 0;
  1582. var identifier = "".concat(id, " ").concat(count);
  1583. idCountMap[id] = count + 1;
  1584. var index = getIndexByIdentifier(identifier);
  1585. var obj = {
  1586. css: item[1],
  1587. media: item[2],
  1588. sourceMap: item[3]
  1589. };
  1590. if (index !== -1) {
  1591. stylesInDom[index].references++;
  1592. stylesInDom[index].updater(obj);
  1593. } else {
  1594. stylesInDom.push({
  1595. identifier: identifier,
  1596. updater: addStyle(obj, options),
  1597. references: 1
  1598. });
  1599. }
  1600. identifiers.push(identifier);
  1601. }
  1602. return identifiers;
  1603. }
  1604. function insertStyleElement(options) {
  1605. var style = document.createElement('style');
  1606. var attributes = options.attributes || {};
  1607. if (typeof attributes.nonce === 'undefined') {
  1608. var nonce = true ? __webpack_require__.nc : undefined;
  1609. if (nonce) {
  1610. attributes.nonce = nonce;
  1611. }
  1612. }
  1613. Object.keys(attributes).forEach(function (key) {
  1614. style.setAttribute(key, attributes[key]);
  1615. });
  1616. if (typeof options.insert === 'function') {
  1617. options.insert(style);
  1618. } else {
  1619. var target = getTarget(options.insert || 'head');
  1620. if (!target) {
  1621. throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");
  1622. }
  1623. target.appendChild(style);
  1624. }
  1625. return style;
  1626. }
  1627. function removeStyleElement(style) {
  1628. // istanbul ignore if
  1629. if (style.parentNode === null) {
  1630. return false;
  1631. }
  1632. style.parentNode.removeChild(style);
  1633. }
  1634. /* istanbul ignore next */
  1635. var replaceText = function replaceText() {
  1636. var textStore = [];
  1637. return function replace(index, replacement) {
  1638. textStore[index] = replacement;
  1639. return textStore.filter(Boolean).join('\n');
  1640. };
  1641. }();
  1642. function applyToSingletonTag(style, index, remove, obj) {
  1643. var css = remove ? '' : obj.media ? "@media ".concat(obj.media, " {").concat(obj.css, "}") : obj.css; // For old IE
  1644. /* istanbul ignore if */
  1645. if (style.styleSheet) {
  1646. style.styleSheet.cssText = replaceText(index, css);
  1647. } else {
  1648. var cssNode = document.createTextNode(css);
  1649. var childNodes = style.childNodes;
  1650. if (childNodes[index]) {
  1651. style.removeChild(childNodes[index]);
  1652. }
  1653. if (childNodes.length) {
  1654. style.insertBefore(cssNode, childNodes[index]);
  1655. } else {
  1656. style.appendChild(cssNode);
  1657. }
  1658. }
  1659. }
  1660. function applyToTag(style, options, obj) {
  1661. var css = obj.css;
  1662. var media = obj.media;
  1663. var sourceMap = obj.sourceMap;
  1664. if (media) {
  1665. style.setAttribute('media', media);
  1666. } else {
  1667. style.removeAttribute('media');
  1668. }
  1669. if (sourceMap && typeof btoa !== 'undefined') {
  1670. css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */");
  1671. } // For old IE
  1672. /* istanbul ignore if */
  1673. if (style.styleSheet) {
  1674. style.styleSheet.cssText = css;
  1675. } else {
  1676. while (style.firstChild) {
  1677. style.removeChild(style.firstChild);
  1678. }
  1679. style.appendChild(document.createTextNode(css));
  1680. }
  1681. }
  1682. var singleton = null;
  1683. var singletonCounter = 0;
  1684. function addStyle(obj, options) {
  1685. var style;
  1686. var update;
  1687. var remove;
  1688. if (options.singleton) {
  1689. var styleIndex = singletonCounter++;
  1690. style = singleton || (singleton = insertStyleElement(options));
  1691. update = applyToSingletonTag.bind(null, style, styleIndex, false);
  1692. remove = applyToSingletonTag.bind(null, style, styleIndex, true);
  1693. } else {
  1694. style = insertStyleElement(options);
  1695. update = applyToTag.bind(null, style, options);
  1696. remove = function remove() {
  1697. removeStyleElement(style);
  1698. };
  1699. }
  1700. update(obj);
  1701. return function updateStyle(newObj) {
  1702. if (newObj) {
  1703. if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) {
  1704. return;
  1705. }
  1706. update(obj = newObj);
  1707. } else {
  1708. remove();
  1709. }
  1710. };
  1711. }
  1712. module.exports = function (list, options) {
  1713. options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of <style>
  1714. // tags it will allow on a page
  1715. if (!options.singleton && typeof options.singleton !== 'boolean') {
  1716. options.singleton = isOldIE();
  1717. }
  1718. list = list || [];
  1719. var lastIdentifiers = modulesToDom(list, options);
  1720. return function update(newList) {
  1721. newList = newList || [];
  1722. if (Object.prototype.toString.call(newList) !== '[object Array]') {
  1723. return;
  1724. }
  1725. for (var i = 0; i < lastIdentifiers.length; i++) {
  1726. var identifier = lastIdentifiers[i];
  1727. var index = getIndexByIdentifier(identifier);
  1728. stylesInDom[index].references--;
  1729. }
  1730. var newLastIdentifiers = modulesToDom(newList, options);
  1731. for (var _i = 0; _i < lastIdentifiers.length; _i++) {
  1732. var _identifier = lastIdentifiers[_i];
  1733. var _index = getIndexByIdentifier(_identifier);
  1734. if (stylesInDom[_index].references === 0) {
  1735. stylesInDom[_index].updater();
  1736. stylesInDom.splice(_index, 1);
  1737. }
  1738. }
  1739. lastIdentifiers = newLastIdentifiers;
  1740. };
  1741. };
  1742. /***/ }),
  1743. /* 21 */
  1744. /***/ (function(module, exports, __webpack_require__) {
  1745. "use strict";
  1746. /*
  1747. MIT License http://www.opensource.org/licenses/mit-license.php
  1748. Author Tobias Koppers @sokra
  1749. */
  1750. // css base code, injected by the css-loader
  1751. // eslint-disable-next-line func-names
  1752. module.exports = function (useSourceMap) {
  1753. var list = []; // return the list of modules as css string
  1754. list.toString = function toString() {
  1755. return this.map(function (item) {
  1756. var content = cssWithMappingToString(item, useSourceMap);
  1757. if (item[2]) {
  1758. return "@media ".concat(item[2], " {").concat(content, "}");
  1759. }
  1760. return content;
  1761. }).join('');
  1762. }; // import a list of modules into the list
  1763. // eslint-disable-next-line func-names
  1764. list.i = function (modules, mediaQuery, dedupe) {
  1765. if (typeof modules === 'string') {
  1766. // eslint-disable-next-line no-param-reassign
  1767. modules = [[null, modules, '']];
  1768. }
  1769. var alreadyImportedModules = {};
  1770. if (dedupe) {
  1771. for (var i = 0; i < this.length; i++) {
  1772. // eslint-disable-next-line prefer-destructuring
  1773. var id = this[i][0];
  1774. if (id != null) {
  1775. alreadyImportedModules[id] = true;
  1776. }
  1777. }
  1778. }
  1779. for (var _i = 0; _i < modules.length; _i++) {
  1780. var item = [].concat(modules[_i]);
  1781. if (dedupe && alreadyImportedModules[item[0]]) {
  1782. // eslint-disable-next-line no-continue
  1783. continue;
  1784. }
  1785. if (mediaQuery) {
  1786. if (!item[2]) {
  1787. item[2] = mediaQuery;
  1788. } else {
  1789. item[2] = "".concat(mediaQuery, " and ").concat(item[2]);
  1790. }
  1791. }
  1792. list.push(item);
  1793. }
  1794. };
  1795. return list;
  1796. };
  1797. function cssWithMappingToString(item, useSourceMap) {
  1798. var content = item[1] || ''; // eslint-disable-next-line prefer-destructuring
  1799. var cssMapping = item[3];
  1800. if (!cssMapping) {
  1801. return content;
  1802. }
  1803. if (useSourceMap && typeof btoa === 'function') {
  1804. var sourceMapping = toComment(cssMapping);
  1805. var sourceURLs = cssMapping.sources.map(function (source) {
  1806. return "/*# sourceURL=".concat(cssMapping.sourceRoot || '').concat(source, " */");
  1807. });
  1808. return [content].concat(sourceURLs).concat([sourceMapping]).join('\n');
  1809. }
  1810. return [content].join('\n');
  1811. } // Adapted from convert-source-map (MIT)
  1812. function toComment(sourceMap) {
  1813. // eslint-disable-next-line no-undef
  1814. var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));
  1815. var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64);
  1816. return "/*# ".concat(data, " */");
  1817. }
  1818. /***/ }),
  1819. /* 22 */
  1820. /***/ (function(module, exports, __webpack_require__) {
  1821. var DESCRIPTORS = __webpack_require__(14);
  1822. var fails = __webpack_require__(11);
  1823. var has = __webpack_require__(16);
  1824. var defineProperty = Object.defineProperty;
  1825. var cache = {};
  1826. var thrower = function (it) { throw it; };
  1827. module.exports = function (METHOD_NAME, options) {
  1828. if (has(cache, METHOD_NAME)) return cache[METHOD_NAME];
  1829. if (!options) options = {};
  1830. var method = [][METHOD_NAME];
  1831. var ACCESSORS = has(options, 'ACCESSORS') ? options.ACCESSORS : false;
  1832. var argument0 = has(options, 0) ? options[0] : thrower;
  1833. var argument1 = has(options, 1) ? options[1] : undefined;
  1834. return cache[METHOD_NAME] = !!method && !fails(function () {
  1835. if (ACCESSORS && !DESCRIPTORS) return true;
  1836. var O = { length: -1 };
  1837. if (ACCESSORS) defineProperty(O, 1, { enumerable: true, get: thrower });
  1838. else O[1] = 1;
  1839. method.call(O, argument0, argument1);
  1840. });
  1841. };
  1842. /***/ }),
  1843. /* 23 */
  1844. /***/ (function(module, exports, __webpack_require__) {
  1845. "use strict";
  1846. /**
  1847. * @description 按钮菜单 Class
  1848. * @author wangfupeng
  1849. */
  1850. var _interopRequireDefault = __webpack_require__(0);
  1851. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  1852. (0, _defineProperty["default"])(exports, "__esModule", {
  1853. value: true
  1854. });
  1855. var tslib_1 = __webpack_require__(2);
  1856. var Menu_1 = tslib_1.__importDefault(__webpack_require__(95));
  1857. var BtnMenu =
  1858. /** @class */
  1859. function (_super) {
  1860. tslib_1.__extends(BtnMenu, _super);
  1861. function BtnMenu($elem, editor) {
  1862. return _super.call(this, $elem, editor) || this;
  1863. }
  1864. return BtnMenu;
  1865. }(Menu_1["default"]);
  1866. exports["default"] = BtnMenu;
  1867. /***/ }),
  1868. /* 24 */
  1869. /***/ (function(module, exports, __webpack_require__) {
  1870. "use strict";
  1871. /**
  1872. * @description 下拉菜单 Class
  1873. * @author wangfupeng
  1874. */
  1875. var _interopRequireDefault = __webpack_require__(0);
  1876. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  1877. var _forEach = _interopRequireDefault(__webpack_require__(4));
  1878. var _setTimeout2 = _interopRequireDefault(__webpack_require__(46));
  1879. (0, _defineProperty["default"])(exports, "__esModule", {
  1880. value: true
  1881. });
  1882. var tslib_1 = __webpack_require__(2);
  1883. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  1884. var Menu_1 = tslib_1.__importDefault(__webpack_require__(95));
  1885. var DropList_1 = tslib_1.__importDefault(__webpack_require__(134));
  1886. var DropListMenu =
  1887. /** @class */
  1888. function (_super) {
  1889. tslib_1.__extends(DropListMenu, _super);
  1890. function DropListMenu($elem, editor, conf) {
  1891. var _this = _super.call(this, $elem, editor) || this; // 国际化
  1892. conf.title = editor.i18next.t("menus.dropListMenu." + conf.title); // 非中文模式下 带 icon 的下拉列表居左
  1893. var className = editor.config.lang === 'zh-CN' ? '' : 'w-e-drop-list-tl';
  1894. if (className !== '' && conf.type === 'list') {
  1895. var _context;
  1896. (0, _forEach["default"])(_context = conf.list).call(_context, function (item) {
  1897. var $elem = item.$elem;
  1898. var $children = dom_core_1["default"]($elem.children());
  1899. if ($children.length > 0) {
  1900. var nodeName = $children === null || $children === void 0 ? void 0 : $children.getNodeName();
  1901. if (nodeName && nodeName === 'I') {
  1902. $elem.addClass(className);
  1903. }
  1904. }
  1905. });
  1906. } // 初始化 dropList
  1907. var dropList = new DropList_1["default"](_this, conf);
  1908. _this.dropList = dropList; // 绑定事件
  1909. $elem.on('click', function () {
  1910. var _context2;
  1911. if (editor.selection.getRange() == null) {
  1912. return;
  1913. }
  1914. $elem.css('z-index', editor.zIndex.get('menu')); // 触发 droplist 悬浮事件
  1915. (0, _forEach["default"])(_context2 = editor.txt.eventHooks.dropListMenuHoverEvents).call(_context2, function (fn) {
  1916. return fn();
  1917. }); // 显示
  1918. dropList.show();
  1919. }).on('mouseleave', function () {
  1920. $elem.css('z-index', 'auto'); // 隐藏
  1921. dropList.hideTimeoutId = (0, _setTimeout2["default"])(function () {
  1922. dropList.hide();
  1923. });
  1924. });
  1925. return _this;
  1926. }
  1927. return DropListMenu;
  1928. }(Menu_1["default"]);
  1929. exports["default"] = DropListMenu;
  1930. /***/ }),
  1931. /* 25 */
  1932. /***/ (function(module, exports, __webpack_require__) {
  1933. var isObject = __webpack_require__(13);
  1934. module.exports = function (it) {
  1935. if (!isObject(it)) {
  1936. throw TypeError(String(it) + ' is not an object');
  1937. } return it;
  1938. };
  1939. /***/ }),
  1940. /* 26 */
  1941. /***/ (function(module, exports, __webpack_require__) {
  1942. module.exports = __webpack_require__(188);
  1943. /***/ }),
  1944. /* 27 */
  1945. /***/ (function(module, exports, __webpack_require__) {
  1946. module.exports = __webpack_require__(201);
  1947. /***/ }),
  1948. /* 28 */
  1949. /***/ (function(module, exports, __webpack_require__) {
  1950. module.exports = __webpack_require__(213);
  1951. /***/ }),
  1952. /* 29 */
  1953. /***/ (function(module, exports, __webpack_require__) {
  1954. module.exports = __webpack_require__(283);
  1955. /***/ }),
  1956. /* 30 */
  1957. /***/ (function(module, exports, __webpack_require__) {
  1958. // toObject with fallback for non-array-like ES3 strings
  1959. var IndexedObject = __webpack_require__(72);
  1960. var requireObjectCoercible = __webpack_require__(49);
  1961. module.exports = function (it) {
  1962. return IndexedObject(requireObjectCoercible(it));
  1963. };
  1964. /***/ }),
  1965. /* 31 */
  1966. /***/ (function(module, exports, __webpack_require__) {
  1967. var requireObjectCoercible = __webpack_require__(49);
  1968. // `ToObject` abstract operation
  1969. // https://tc39.github.io/ecma262/#sec-toobject
  1970. module.exports = function (argument) {
  1971. return Object(requireObjectCoercible(argument));
  1972. };
  1973. /***/ }),
  1974. /* 32 */
  1975. /***/ (function(module, exports, __webpack_require__) {
  1976. var bind = __webpack_require__(40);
  1977. var IndexedObject = __webpack_require__(72);
  1978. var toObject = __webpack_require__(31);
  1979. var toLength = __webpack_require__(35);
  1980. var arraySpeciesCreate = __webpack_require__(88);
  1981. var push = [].push;
  1982. // `Array.prototype.{ forEach, map, filter, some, every, find, findIndex }` methods implementation
  1983. var createMethod = function (TYPE) {
  1984. var IS_MAP = TYPE == 1;
  1985. var IS_FILTER = TYPE == 2;
  1986. var IS_SOME = TYPE == 3;
  1987. var IS_EVERY = TYPE == 4;
  1988. var IS_FIND_INDEX = TYPE == 6;
  1989. var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;
  1990. return function ($this, callbackfn, that, specificCreate) {
  1991. var O = toObject($this);
  1992. var self = IndexedObject(O);
  1993. var boundFunction = bind(callbackfn, that, 3);
  1994. var length = toLength(self.length);
  1995. var index = 0;
  1996. var create = specificCreate || arraySpeciesCreate;
  1997. var target = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;
  1998. var value, result;
  1999. for (;length > index; index++) if (NO_HOLES || index in self) {
  2000. value = self[index];
  2001. result = boundFunction(value, index, O);
  2002. if (TYPE) {
  2003. if (IS_MAP) target[index] = result; // map
  2004. else if (result) switch (TYPE) {
  2005. case 3: return true; // some
  2006. case 5: return value; // find
  2007. case 6: return index; // findIndex
  2008. case 2: push.call(target, value); // filter
  2009. } else if (IS_EVERY) return false; // every
  2010. }
  2011. }
  2012. return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;
  2013. };
  2014. };
  2015. module.exports = {
  2016. // `Array.prototype.forEach` method
  2017. // https://tc39.github.io/ecma262/#sec-array.prototype.foreach
  2018. forEach: createMethod(0),
  2019. // `Array.prototype.map` method
  2020. // https://tc39.github.io/ecma262/#sec-array.prototype.map
  2021. map: createMethod(1),
  2022. // `Array.prototype.filter` method
  2023. // https://tc39.github.io/ecma262/#sec-array.prototype.filter
  2024. filter: createMethod(2),
  2025. // `Array.prototype.some` method
  2026. // https://tc39.github.io/ecma262/#sec-array.prototype.some
  2027. some: createMethod(3),
  2028. // `Array.prototype.every` method
  2029. // https://tc39.github.io/ecma262/#sec-array.prototype.every
  2030. every: createMethod(4),
  2031. // `Array.prototype.find` method
  2032. // https://tc39.github.io/ecma262/#sec-array.prototype.find
  2033. find: createMethod(5),
  2034. // `Array.prototype.findIndex` method
  2035. // https://tc39.github.io/ecma262/#sec-array.prototype.findIndex
  2036. findIndex: createMethod(6)
  2037. };
  2038. /***/ }),
  2039. /* 33 */
  2040. /***/ (function(module, exports, __webpack_require__) {
  2041. "use strict";
  2042. /**
  2043. * @description panel class
  2044. * @author wangfupeng
  2045. */
  2046. var _interopRequireDefault = __webpack_require__(0);
  2047. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  2048. var _forEach = _interopRequireDefault(__webpack_require__(4));
  2049. var _find = _interopRequireDefault(__webpack_require__(29));
  2050. var _set = _interopRequireDefault(__webpack_require__(132));
  2051. (0, _defineProperty["default"])(exports, "__esModule", {
  2052. value: true
  2053. });
  2054. var tslib_1 = __webpack_require__(2);
  2055. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  2056. var const_1 = __webpack_require__(7);
  2057. var Panel =
  2058. /** @class */
  2059. function () {
  2060. function Panel(menu, conf) {
  2061. this.menu = menu;
  2062. this.conf = conf;
  2063. this.$container = dom_core_1["default"]('<div class="w-e-panel-container"></div>'); // 隐藏 panel
  2064. var editor = menu.editor;
  2065. editor.txt.eventHooks.clickEvents.push(Panel.hideCurAllPanels);
  2066. editor.txt.eventHooks.toolbarClickEvents.push(Panel.hideCurAllPanels);
  2067. editor.txt.eventHooks.dropListMenuHoverEvents.push(Panel.hideCurAllPanels);
  2068. }
  2069. /**
  2070. * 创建并展示 panel
  2071. */
  2072. Panel.prototype.create = function () {
  2073. var _this = this;
  2074. var menu = this.menu;
  2075. if (Panel.createdMenus.has(menu)) {
  2076. // 创建过了
  2077. return;
  2078. }
  2079. var conf = this.conf; // panel 的容器
  2080. var $container = this.$container;
  2081. var width = conf.width || 300; // 默认 300px
  2082. var rect = menu.editor.$toolbarElem.getBoundingClientRect();
  2083. var menuRect = menu.$elem.getBoundingClientRect();
  2084. var top = rect.height + rect.top - menuRect.top;
  2085. var left = (rect.width - width) / 2 + rect.left - menuRect.left;
  2086. var offset = 300; // icon与panel菜单距离偏移量暂定 300
  2087. if (Math.abs(left) > offset) {
  2088. // panel菜单离工具栏icon过远时,让panel菜单出现在icon正下方,处理边界逻辑
  2089. if (menuRect.left < document.documentElement.clientWidth / 2) {
  2090. // icon在左侧
  2091. left = -menuRect.width / 2;
  2092. } else {
  2093. // icon在右侧
  2094. left = -width + menuRect.width / 2;
  2095. }
  2096. }
  2097. $container.css('width', width + 'px').css('margin-top', top + "px").css('margin-left', left + "px").css('z-index', menu.editor.zIndex.get('panel')); // 添加关闭按钮
  2098. var $closeBtn = dom_core_1["default"]('<i class="w-e-icon-close w-e-panel-close"></i>');
  2099. $container.append($closeBtn);
  2100. $closeBtn.on('click', function () {
  2101. _this.remove();
  2102. }); // 准备 tabs 容器
  2103. var $tabTitleContainer = dom_core_1["default"]('<ul class="w-e-panel-tab-title"></ul>');
  2104. var $tabContentContainer = dom_core_1["default"]('<div class="w-e-panel-tab-content"></div>');
  2105. $container.append($tabTitleContainer).append($tabContentContainer); // 设置高度
  2106. var height = conf.height; // height: 0 即不用设置
  2107. if (height) {
  2108. $tabContentContainer.css('height', height + 'px').css('overflow-y', 'auto');
  2109. } // tabs
  2110. var tabs = conf.tabs || [];
  2111. var tabTitleArr = [];
  2112. var tabContentArr = [];
  2113. (0, _forEach["default"])(tabs).call(tabs, function (tab, tabIndex) {
  2114. if (!tab) {
  2115. return;
  2116. }
  2117. var title = tab.title || '';
  2118. var tpl = tab.tpl || ''; // 添加到 DOM
  2119. var $title = dom_core_1["default"]("<li class=\"w-e-item\">" + title + "</li>");
  2120. $tabTitleContainer.append($title);
  2121. var $content = dom_core_1["default"](tpl);
  2122. $tabContentContainer.append($content); // 记录到内存
  2123. tabTitleArr.push($title);
  2124. tabContentArr.push($content); // 设置 active 项
  2125. if (tabIndex === 0) {
  2126. $title.data('active', true);
  2127. $title.addClass('w-e-active');
  2128. } else {
  2129. $content.hide();
  2130. } // 绑定 tab 的事件
  2131. $title.on('click', function () {
  2132. if ($title.data('active')) {
  2133. return;
  2134. } // 隐藏所有的 tab
  2135. (0, _forEach["default"])(tabTitleArr).call(tabTitleArr, function ($title) {
  2136. $title.data('active', false);
  2137. $title.removeClass('w-e-active');
  2138. });
  2139. (0, _forEach["default"])(tabContentArr).call(tabContentArr, function ($content) {
  2140. $content.hide();
  2141. }); // 显示当前的 tab
  2142. $title.data('active', true);
  2143. $title.addClass('w-e-active');
  2144. $content.show();
  2145. });
  2146. }); // 绑定关闭事件
  2147. $container.on('click', function (e) {
  2148. // 点击时阻止冒泡
  2149. e.stopPropagation();
  2150. }); // 添加到 DOM
  2151. menu.$elem.append($container); // 设置tab内input的值
  2152. conf.setLinkValue && conf.setLinkValue($container, 'text');
  2153. conf.setLinkValue && conf.setLinkValue($container, 'link'); // 绑定 conf events 的事件,只有添加到 DOM 之后才能绑定成功
  2154. (0, _forEach["default"])(tabs).call(tabs, function (tab, index) {
  2155. if (!tab) {
  2156. return;
  2157. }
  2158. var events = tab.events || [];
  2159. (0, _forEach["default"])(events).call(events, function (event) {
  2160. var _a;
  2161. var selector = event.selector;
  2162. var type = event.type;
  2163. var fn = event.fn || const_1.EMPTY_FN;
  2164. var $content = tabContentArr[index];
  2165. var bindEnter = (_a = event.bindEnter) !== null && _a !== void 0 ? _a : false;
  2166. var doneFn = function doneFn(e) {
  2167. return tslib_1.__awaiter(_this, void 0, void 0, function () {
  2168. var needToHide;
  2169. return tslib_1.__generator(this, function (_a) {
  2170. switch (_a.label) {
  2171. case 0:
  2172. e.stopPropagation();
  2173. return [4
  2174. /*yield*/
  2175. , fn(e) // 执行完事件之后,是否要关闭 panel
  2176. ];
  2177. case 1:
  2178. needToHide = _a.sent(); // 执行完事件之后,是否要关闭 panel
  2179. if (needToHide) {
  2180. this.remove();
  2181. }
  2182. return [2
  2183. /*return*/
  2184. ];
  2185. }
  2186. });
  2187. });
  2188. }; // 给按钮绑定相应的事件
  2189. (0, _find["default"])($content).call($content, selector).on(type, doneFn); // 绑定enter键入事件
  2190. if (bindEnter && type === 'click') {
  2191. $content.on('keyup', function (e) {
  2192. if (e.keyCode == 13) {
  2193. doneFn(e);
  2194. }
  2195. });
  2196. }
  2197. });
  2198. }); // focus 第一个 elem
  2199. var $inputs = (0, _find["default"])($container).call($container, 'input[type=text],textarea');
  2200. if ($inputs.length) {
  2201. $inputs.get(0).focus();
  2202. } // 隐藏其他 panel
  2203. Panel.hideCurAllPanels(); // 记录该 menu 已经创建了 panel
  2204. menu.setPanel(this);
  2205. Panel.createdMenus.add(menu);
  2206. };
  2207. /**
  2208. * 移除 penal
  2209. */
  2210. Panel.prototype.remove = function () {
  2211. var menu = this.menu;
  2212. var $container = this.$container;
  2213. if ($container) {
  2214. $container.remove();
  2215. } // 将该 menu 记录中移除
  2216. Panel.createdMenus["delete"](menu);
  2217. };
  2218. /**
  2219. * 隐藏当前所有的 panel
  2220. */
  2221. Panel.hideCurAllPanels = function () {
  2222. var _context;
  2223. if (Panel.createdMenus.size === 0) {
  2224. return;
  2225. }
  2226. (0, _forEach["default"])(_context = Panel.createdMenus).call(_context, function (menu) {
  2227. var panel = menu.panel;
  2228. panel && panel.remove();
  2229. });
  2230. }; // 记录已经创建过的 panelMenu
  2231. Panel.createdMenus = new _set["default"]();
  2232. return Panel;
  2233. }();
  2234. exports["default"] = Panel;
  2235. /***/ }),
  2236. /* 34 */
  2237. /***/ (function(module, exports) {
  2238. var toString = {}.toString;
  2239. module.exports = function (it) {
  2240. return toString.call(it).slice(8, -1);
  2241. };
  2242. /***/ }),
  2243. /* 35 */
  2244. /***/ (function(module, exports, __webpack_require__) {
  2245. var toInteger = __webpack_require__(62);
  2246. var min = Math.min;
  2247. // `ToLength` abstract operation
  2248. // https://tc39.github.io/ecma262/#sec-tolength
  2249. module.exports = function (argument) {
  2250. return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991
  2251. };
  2252. /***/ }),
  2253. /* 36 */
  2254. /***/ (function(module, exports, __webpack_require__) {
  2255. var path = __webpack_require__(9);
  2256. var global = __webpack_require__(8);
  2257. var aFunction = function (variable) {
  2258. return typeof variable == 'function' ? variable : undefined;
  2259. };
  2260. module.exports = function (namespace, method) {
  2261. return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace])
  2262. : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method];
  2263. };
  2264. /***/ }),
  2265. /* 37 */
  2266. /***/ (function(module, exports, __webpack_require__) {
  2267. var TO_STRING_TAG_SUPPORT = __webpack_require__(81);
  2268. var defineProperty = __webpack_require__(18).f;
  2269. var createNonEnumerableProperty = __webpack_require__(19);
  2270. var has = __webpack_require__(16);
  2271. var toString = __webpack_require__(170);
  2272. var wellKnownSymbol = __webpack_require__(10);
  2273. var TO_STRING_TAG = wellKnownSymbol('toStringTag');
  2274. module.exports = function (it, TAG, STATIC, SET_METHOD) {
  2275. if (it) {
  2276. var target = STATIC ? it : it.prototype;
  2277. if (!has(target, TO_STRING_TAG)) {
  2278. defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG });
  2279. }
  2280. if (SET_METHOD && !TO_STRING_TAG_SUPPORT) {
  2281. createNonEnumerableProperty(target, 'toString', toString);
  2282. }
  2283. }
  2284. };
  2285. /***/ }),
  2286. /* 38 */
  2287. /***/ (function(module, exports, __webpack_require__) {
  2288. "use strict";
  2289. /**
  2290. * @description Modal 菜单 Class
  2291. * @author wangfupeng
  2292. */
  2293. var _interopRequireDefault = __webpack_require__(0);
  2294. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  2295. (0, _defineProperty["default"])(exports, "__esModule", {
  2296. value: true
  2297. });
  2298. var tslib_1 = __webpack_require__(2);
  2299. var Menu_1 = tslib_1.__importDefault(__webpack_require__(95));
  2300. var PanelMenu =
  2301. /** @class */
  2302. function (_super) {
  2303. tslib_1.__extends(PanelMenu, _super);
  2304. function PanelMenu($elem, editor) {
  2305. return _super.call(this, $elem, editor) || this;
  2306. }
  2307. /**
  2308. * 给 menu 设置 panel
  2309. * @param panel panel 实例
  2310. */
  2311. PanelMenu.prototype.setPanel = function (panel) {
  2312. this.panel = panel;
  2313. };
  2314. return PanelMenu;
  2315. }(Menu_1["default"]);
  2316. exports["default"] = PanelMenu;
  2317. /***/ }),
  2318. /* 39 */
  2319. /***/ (function(module, exports, __webpack_require__) {
  2320. "use strict";
  2321. /**
  2322. * @description Tooltip class
  2323. * @author wangfupeng
  2324. */
  2325. var _interopRequireDefault = __webpack_require__(0);
  2326. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  2327. var _forEach = _interopRequireDefault(__webpack_require__(4));
  2328. var _bind = _interopRequireDefault(__webpack_require__(57));
  2329. (0, _defineProperty["default"])(exports, "__esModule", {
  2330. value: true
  2331. });
  2332. var tslib_1 = __webpack_require__(2);
  2333. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  2334. var Tooltip =
  2335. /** @class */
  2336. function () {
  2337. function Tooltip(editor, $elem, conf) {
  2338. this.editor = editor;
  2339. this.$targetElem = $elem;
  2340. this.conf = conf;
  2341. this._show = false;
  2342. this._isInsertTextContainer = false; // 定义 container
  2343. var $container = dom_core_1["default"]('<div></div>');
  2344. $container.addClass('w-e-tooltip');
  2345. this.$container = $container;
  2346. }
  2347. /**
  2348. * 获取 tooltip 定位
  2349. */
  2350. Tooltip.prototype.getPositionData = function () {
  2351. var $container = this.$container;
  2352. var top = 0;
  2353. var left = 0; // tooltip 的高度
  2354. var tooltipHeight = 20; // 网页的 scrollTop
  2355. var pageScrollTop = document.documentElement.scrollTop; // 目标元素的 rect
  2356. var targetElemRect = this.$targetElem.getBoundingClientRect(); // 编辑区域的 rect
  2357. var textElemRect = this.editor.$textElem.getBoundingClientRect(); // 获取基于 textContainerElem 的 位置信息
  2358. var targetOffset = this.$targetElem.getOffsetData();
  2359. var targetParentElem = dom_core_1["default"](targetOffset.parent); // 获取 编辑区域的滚动条信息
  2360. var scrollTop = this.editor.$textElem.elems[0].scrollTop; // 是否插入 textContainer 中
  2361. this._isInsertTextContainer = targetParentElem.equal(this.editor.$textContainerElem);
  2362. if (this._isInsertTextContainer) {
  2363. // 父容器的高度
  2364. var targetParentElemHeight = targetParentElem.getBoundingClientRect().height; // 相对于父容器的位置信息
  2365. var offsetTop = targetOffset.top,
  2366. offsetLeft = targetOffset.left,
  2367. offsetHeight = targetOffset.height; // 元素基于父容器的 绝对top信息
  2368. var absoluteTop = offsetTop - scrollTop;
  2369. if (absoluteTop > tooltipHeight + 5) {
  2370. // 说明模板元素的顶部空间足够
  2371. top = absoluteTop - tooltipHeight - 15;
  2372. $container.addClass('w-e-tooltip-up');
  2373. } else if (absoluteTop + offsetHeight + tooltipHeight < targetParentElemHeight) {
  2374. // 说明模板元素的底部空间足够
  2375. top = absoluteTop + offsetHeight + 10;
  2376. $container.addClass('w-e-tooltip-down');
  2377. } else {
  2378. // 其他情况,tooltip 放在目标元素左上角
  2379. top = (absoluteTop > 0 ? absoluteTop : 0) + tooltipHeight + 10;
  2380. $container.addClass('w-e-tooltip-down');
  2381. } // 计算 left
  2382. if (offsetLeft < 0) {
  2383. left = 0;
  2384. } else {
  2385. left = offsetLeft;
  2386. }
  2387. } else {
  2388. if (targetElemRect.top < tooltipHeight) {
  2389. // 说明目标元素的顶部,因滑动隐藏在浏览器上方。tooltip 要放在目标元素下面
  2390. top = targetElemRect.bottom + pageScrollTop + 5; // 5px 间距
  2391. $container.addClass('w-e-tooltip-down');
  2392. } else if (targetElemRect.top - textElemRect.top < tooltipHeight) {
  2393. // 说明目标元素的顶部,因滑动隐藏在编辑区域上方。tooltip 要放在目标元素下面
  2394. top = targetElemRect.bottom + pageScrollTop + 5; // 5px 间距
  2395. $container.addClass('w-e-tooltip-down');
  2396. } else {
  2397. // 其他情况,tooltip 放在目标元素上方
  2398. top = targetElemRect.top + pageScrollTop - tooltipHeight - 15; // 减去 toolbar 的高度,还有 15px 间距
  2399. $container.addClass('w-e-tooltip-up');
  2400. } // 计算 left
  2401. if (targetElemRect.left < 0) {
  2402. left = 0;
  2403. } else {
  2404. left = targetElemRect.left;
  2405. }
  2406. } // 返回结果
  2407. return {
  2408. top: top,
  2409. left: left
  2410. };
  2411. };
  2412. /**
  2413. * 添加 tooltip 菜单
  2414. */
  2415. Tooltip.prototype.appendMenus = function () {
  2416. var _this = this;
  2417. var conf = this.conf;
  2418. var editor = this.editor;
  2419. var $targetElem = this.$targetElem;
  2420. var $container = this.$container;
  2421. (0, _forEach["default"])(conf).call(conf, function (item, index) {
  2422. // 添加元素
  2423. var $elem = item.$elem;
  2424. var $wrapper = dom_core_1["default"]('<div></div>');
  2425. $wrapper.addClass('w-e-tooltip-item-wrapper ');
  2426. $wrapper.append($elem);
  2427. $container.append($wrapper); // 绑定点击事件
  2428. $elem.on('click', function (e) {
  2429. e.preventDefault();
  2430. var res = item.onClick(editor, $targetElem);
  2431. if (res) _this.remove();
  2432. });
  2433. });
  2434. };
  2435. /**
  2436. * 创建 tooltip
  2437. */
  2438. Tooltip.prototype.create = function () {
  2439. var _context, _context2;
  2440. var editor = this.editor;
  2441. var $container = this.$container; // 生成 container 的内容
  2442. this.appendMenus(); // 设置定位
  2443. var _a = this.getPositionData(),
  2444. top = _a.top,
  2445. left = _a.left;
  2446. $container.css('top', top + "px");
  2447. $container.css('left', left + "px"); // 设置 z-index
  2448. $container.css('z-index', editor.zIndex.get('tooltip')); // 添加到 DOM
  2449. if (this._isInsertTextContainer) {
  2450. this.editor.$textContainerElem.append($container);
  2451. } else {
  2452. dom_core_1["default"]('body').append($container);
  2453. }
  2454. this._show = true;
  2455. editor.beforeDestroy((0, _bind["default"])(_context = this.remove).call(_context, this));
  2456. editor.txt.eventHooks.onBlurEvents.push((0, _bind["default"])(_context2 = this.remove).call(_context2, this));
  2457. };
  2458. /**
  2459. * 移除该 tooltip
  2460. */
  2461. Tooltip.prototype.remove = function () {
  2462. this.$container.remove();
  2463. this._show = false;
  2464. };
  2465. (0, _defineProperty["default"])(Tooltip.prototype, "isShow", {
  2466. /**
  2467. * 是否显示
  2468. */
  2469. get: function get() {
  2470. return this._show;
  2471. },
  2472. enumerable: false,
  2473. configurable: true
  2474. });
  2475. return Tooltip;
  2476. }();
  2477. exports["default"] = Tooltip;
  2478. /***/ }),
  2479. /* 40 */
  2480. /***/ (function(module, exports, __webpack_require__) {
  2481. var aFunction = __webpack_require__(41);
  2482. // optional / simple context binding
  2483. module.exports = function (fn, that, length) {
  2484. aFunction(fn);
  2485. if (that === undefined) return fn;
  2486. switch (length) {
  2487. case 0: return function () {
  2488. return fn.call(that);
  2489. };
  2490. case 1: return function (a) {
  2491. return fn.call(that, a);
  2492. };
  2493. case 2: return function (a, b) {
  2494. return fn.call(that, a, b);
  2495. };
  2496. case 3: return function (a, b, c) {
  2497. return fn.call(that, a, b, c);
  2498. };
  2499. }
  2500. return function (/* ...args */) {
  2501. return fn.apply(that, arguments);
  2502. };
  2503. };
  2504. /***/ }),
  2505. /* 41 */
  2506. /***/ (function(module, exports) {
  2507. module.exports = function (it) {
  2508. if (typeof it != 'function') {
  2509. throw TypeError(String(it) + ' is not a function');
  2510. } return it;
  2511. };
  2512. /***/ }),
  2513. /* 42 */
  2514. /***/ (function(module, exports, __webpack_require__) {
  2515. var NATIVE_WEAK_MAP = __webpack_require__(165);
  2516. var global = __webpack_require__(8);
  2517. var isObject = __webpack_require__(13);
  2518. var createNonEnumerableProperty = __webpack_require__(19);
  2519. var objectHas = __webpack_require__(16);
  2520. var sharedKey = __webpack_require__(63);
  2521. var hiddenKeys = __webpack_require__(51);
  2522. var WeakMap = global.WeakMap;
  2523. var set, get, has;
  2524. var enforce = function (it) {
  2525. return has(it) ? get(it) : set(it, {});
  2526. };
  2527. var getterFor = function (TYPE) {
  2528. return function (it) {
  2529. var state;
  2530. if (!isObject(it) || (state = get(it)).type !== TYPE) {
  2531. throw TypeError('Incompatible receiver, ' + TYPE + ' required');
  2532. } return state;
  2533. };
  2534. };
  2535. if (NATIVE_WEAK_MAP) {
  2536. var store = new WeakMap();
  2537. var wmget = store.get;
  2538. var wmhas = store.has;
  2539. var wmset = store.set;
  2540. set = function (it, metadata) {
  2541. wmset.call(store, it, metadata);
  2542. return metadata;
  2543. };
  2544. get = function (it) {
  2545. return wmget.call(store, it) || {};
  2546. };
  2547. has = function (it) {
  2548. return wmhas.call(store, it);
  2549. };
  2550. } else {
  2551. var STATE = sharedKey('state');
  2552. hiddenKeys[STATE] = true;
  2553. set = function (it, metadata) {
  2554. createNonEnumerableProperty(it, STATE, metadata);
  2555. return metadata;
  2556. };
  2557. get = function (it) {
  2558. return objectHas(it, STATE) ? it[STATE] : {};
  2559. };
  2560. has = function (it) {
  2561. return objectHas(it, STATE);
  2562. };
  2563. }
  2564. module.exports = {
  2565. set: set,
  2566. get: get,
  2567. has: has,
  2568. enforce: enforce,
  2569. getterFor: getterFor
  2570. };
  2571. /***/ }),
  2572. /* 43 */
  2573. /***/ (function(module, exports) {
  2574. module.exports = true;
  2575. /***/ }),
  2576. /* 44 */
  2577. /***/ (function(module, exports) {
  2578. module.exports = {};
  2579. /***/ }),
  2580. /* 45 */
  2581. /***/ (function(module, exports, __webpack_require__) {
  2582. module.exports = __webpack_require__(261);
  2583. /***/ }),
  2584. /* 46 */
  2585. /***/ (function(module, exports, __webpack_require__) {
  2586. module.exports = __webpack_require__(265);
  2587. /***/ }),
  2588. /* 47 */
  2589. /***/ (function(module, exports, __webpack_require__) {
  2590. "use strict";
  2591. var _interopRequireDefault = __webpack_require__(0);
  2592. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  2593. var _forEach = _interopRequireDefault(__webpack_require__(4));
  2594. (0, _defineProperty["default"])(exports, "__esModule", {
  2595. value: true
  2596. });
  2597. exports.createElementFragment = exports.createDocumentFragment = exports.createElement = exports.insertBefore = exports.getEndPoint = exports.getStartPoint = exports.updateRange = exports.filterSelectionNodes = void 0;
  2598. var tslib_1 = __webpack_require__(2);
  2599. var _1 = __webpack_require__(137);
  2600. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  2601. /**
  2602. * 过滤 选择的 node 节点
  2603. * @returns { DomElement[] } DomElement[]
  2604. */
  2605. function filterSelectionNodes($nodes) {
  2606. var $listHtml = [];
  2607. (0, _forEach["default"])($nodes).call($nodes, function ($node) {
  2608. var targerName = $node.getNodeName();
  2609. if (targerName !== _1.ListType.OrderedList && targerName !== _1.ListType.UnorderedList) {
  2610. // 非序列
  2611. $listHtml.push($node);
  2612. } else {
  2613. // 序列
  2614. if ($node.prior) {
  2615. $listHtml.push($node.prior);
  2616. } else {
  2617. var $children = $node.children();
  2618. $children === null || $children === void 0 ? void 0 : (0, _forEach["default"])($children).call($children, function ($li) {
  2619. $listHtml.push(dom_core_1["default"]($li));
  2620. });
  2621. }
  2622. }
  2623. });
  2624. return $listHtml;
  2625. }
  2626. exports.filterSelectionNodes = filterSelectionNodes;
  2627. /**
  2628. * 更新选区
  2629. * @param $node
  2630. */
  2631. function updateRange(editor, $node, collapsed) {
  2632. var selection = editor.selection;
  2633. var range = document.createRange(); // ===============================
  2634. // length 大于 1
  2635. // 代表着转换是一个文档节点多段落
  2636. // ===============================
  2637. if ($node.length > 1) {
  2638. range.setStart($node.elems[0], 0);
  2639. range.setEnd($node.elems[$node.length - 1], $node.elems[$node.length - 1].childNodes.length);
  2640. } // ===============================
  2641. // 序列节点 或 单段落
  2642. // ===============================
  2643. else {
  2644. range.selectNodeContents($node.elems[0]);
  2645. } // ===============================
  2646. // collapsed 为 true 代表是光标
  2647. // ===============================
  2648. collapsed && range.collapse(false);
  2649. selection.saveRange(range);
  2650. selection.restoreSelection();
  2651. }
  2652. exports.updateRange = updateRange;
  2653. /**
  2654. * 获取起点元素
  2655. * @param $startElem 开始序列节点
  2656. */
  2657. function getStartPoint($startElem) {
  2658. var _a;
  2659. return $startElem.prior ? $startElem.prior // 有 prior 代表不是全选序列
  2660. : dom_core_1["default"]((_a = $startElem.children()) === null || _a === void 0 ? void 0 : _a.elems[0]); // 没有则代表全选序列
  2661. }
  2662. exports.getStartPoint = getStartPoint;
  2663. /**
  2664. * 获取结束元素
  2665. * @param $endElem 结束序列节点
  2666. */
  2667. function getEndPoint($endElem) {
  2668. var _a;
  2669. return $endElem.prior ? $endElem.prior // 有 prior 代表不是全选序列
  2670. : dom_core_1["default"]((_a = $endElem.children()) === null || _a === void 0 ? void 0 : _a.last().elems[0]); // 没有则代表全选序列
  2671. }
  2672. exports.getEndPoint = getEndPoint;
  2673. /**
  2674. * 在您指定节点的已有子节点之前插入新的子节点。
  2675. * @param { DomElement } $node 指定节点
  2676. * @param { ContainerFragment } newNode 插入的新子节点
  2677. * @param { Node | null } existingNode 指定子节点
  2678. */
  2679. function insertBefore($node, newNode, existingNode) {
  2680. if (existingNode === void 0) {
  2681. existingNode = null;
  2682. }
  2683. $node.parent().elems[0].insertBefore(newNode, existingNode);
  2684. }
  2685. exports.insertBefore = insertBefore;
  2686. /**
  2687. * 创建指定的 element 对象
  2688. */
  2689. function createElement(target) {
  2690. return document.createElement(target);
  2691. }
  2692. exports.createElement = createElement;
  2693. /**
  2694. * 创建文档片段
  2695. */
  2696. function createDocumentFragment() {
  2697. return document.createDocumentFragment();
  2698. }
  2699. exports.createDocumentFragment = createDocumentFragment;
  2700. /**
  2701. * 生成 li 标签的元素,并返回 $fragment 文档片段
  2702. * @param { DomElement[] } $nodes 需要转换成 li 的 dom 元素数组
  2703. * @param { ContainerFragment } $fragment 用于存储生成后 li 元素的文档片段
  2704. */
  2705. function createElementFragment($nodes, $fragment, tag) {
  2706. if (tag === void 0) {
  2707. tag = 'li';
  2708. }
  2709. (0, _forEach["default"])($nodes).call($nodes, function ($node) {
  2710. var $list = createElement(tag);
  2711. $list.innerHTML = $node.html();
  2712. $fragment.appendChild($list);
  2713. $node.remove();
  2714. });
  2715. return $fragment;
  2716. }
  2717. exports.createElementFragment = createElementFragment;
  2718. /***/ }),
  2719. /* 48 */
  2720. /***/ (function(module, exports) {
  2721. module.exports = function (bitmap, value) {
  2722. return {
  2723. enumerable: !(bitmap & 1),
  2724. configurable: !(bitmap & 2),
  2725. writable: !(bitmap & 4),
  2726. value: value
  2727. };
  2728. };
  2729. /***/ }),
  2730. /* 49 */
  2731. /***/ (function(module, exports) {
  2732. // `RequireObjectCoercible` abstract operation
  2733. // https://tc39.github.io/ecma262/#sec-requireobjectcoercible
  2734. module.exports = function (it) {
  2735. if (it == undefined) throw TypeError("Can't call method on " + it);
  2736. return it;
  2737. };
  2738. /***/ }),
  2739. /* 50 */
  2740. /***/ (function(module, exports, __webpack_require__) {
  2741. "use strict";
  2742. var charAt = __webpack_require__(164).charAt;
  2743. var InternalStateModule = __webpack_require__(42);
  2744. var defineIterator = __webpack_require__(75);
  2745. var STRING_ITERATOR = 'String Iterator';
  2746. var setInternalState = InternalStateModule.set;
  2747. var getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);
  2748. // `String.prototype[@@iterator]` method
  2749. // https://tc39.github.io/ecma262/#sec-string.prototype-@@iterator
  2750. defineIterator(String, 'String', function (iterated) {
  2751. setInternalState(this, {
  2752. type: STRING_ITERATOR,
  2753. string: String(iterated),
  2754. index: 0
  2755. });
  2756. // `%StringIteratorPrototype%.next` method
  2757. // https://tc39.github.io/ecma262/#sec-%stringiteratorprototype%.next
  2758. }, function next() {
  2759. var state = getInternalState(this);
  2760. var string = state.string;
  2761. var index = state.index;
  2762. var point;
  2763. if (index >= string.length) return { value: undefined, done: true };
  2764. point = charAt(string, index);
  2765. state.index += point.length;
  2766. return { value: point, done: false };
  2767. });
  2768. /***/ }),
  2769. /* 51 */
  2770. /***/ (function(module, exports) {
  2771. module.exports = {};
  2772. /***/ }),
  2773. /* 52 */
  2774. /***/ (function(module, exports, __webpack_require__) {
  2775. var internalObjectKeys = __webpack_require__(107);
  2776. var enumBugKeys = __webpack_require__(80);
  2777. // `Object.keys` method
  2778. // https://tc39.github.io/ecma262/#sec-object.keys
  2779. module.exports = Object.keys || function keys(O) {
  2780. return internalObjectKeys(O, enumBugKeys);
  2781. };
  2782. /***/ }),
  2783. /* 53 */
  2784. /***/ (function(module, exports, __webpack_require__) {
  2785. var createNonEnumerableProperty = __webpack_require__(19);
  2786. module.exports = function (target, key, value, options) {
  2787. if (options && options.enumerable) target[key] = value;
  2788. else createNonEnumerableProperty(target, key, value);
  2789. };
  2790. /***/ }),
  2791. /* 54 */
  2792. /***/ (function(module, exports, __webpack_require__) {
  2793. __webpack_require__(173);
  2794. var DOMIterables = __webpack_require__(174);
  2795. var global = __webpack_require__(8);
  2796. var classof = __webpack_require__(65);
  2797. var createNonEnumerableProperty = __webpack_require__(19);
  2798. var Iterators = __webpack_require__(44);
  2799. var wellKnownSymbol = __webpack_require__(10);
  2800. var TO_STRING_TAG = wellKnownSymbol('toStringTag');
  2801. for (var COLLECTION_NAME in DOMIterables) {
  2802. var Collection = global[COLLECTION_NAME];
  2803. var CollectionPrototype = Collection && Collection.prototype;
  2804. if (CollectionPrototype && classof(CollectionPrototype) !== TO_STRING_TAG) {
  2805. createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);
  2806. }
  2807. Iterators[COLLECTION_NAME] = Iterators.Array;
  2808. }
  2809. /***/ }),
  2810. /* 55 */
  2811. /***/ (function(module, exports, __webpack_require__) {
  2812. var classof = __webpack_require__(34);
  2813. // `IsArray` abstract operation
  2814. // https://tc39.github.io/ecma262/#sec-isarray
  2815. module.exports = Array.isArray || function isArray(arg) {
  2816. return classof(arg) == 'Array';
  2817. };
  2818. /***/ }),
  2819. /* 56 */
  2820. /***/ (function(module, exports, __webpack_require__) {
  2821. var fails = __webpack_require__(11);
  2822. var wellKnownSymbol = __webpack_require__(10);
  2823. var V8_VERSION = __webpack_require__(86);
  2824. var SPECIES = wellKnownSymbol('species');
  2825. module.exports = function (METHOD_NAME) {
  2826. // We can't use this feature detection in V8 since it causes
  2827. // deoptimization and serious performance degradation
  2828. // https://github.com/zloirock/core-js/issues/677
  2829. return V8_VERSION >= 51 || !fails(function () {
  2830. var array = [];
  2831. var constructor = array.constructor = {};
  2832. constructor[SPECIES] = function () {
  2833. return { foo: 1 };
  2834. };
  2835. return array[METHOD_NAME](Boolean).foo !== 1;
  2836. });
  2837. };
  2838. /***/ }),
  2839. /* 57 */
  2840. /***/ (function(module, exports, __webpack_require__) {
  2841. module.exports = __webpack_require__(222);
  2842. /***/ }),
  2843. /* 58 */
  2844. /***/ (function(module, exports, __webpack_require__) {
  2845. "use strict";
  2846. var _interopRequireDefault = __webpack_require__(0);
  2847. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  2848. (0, _defineProperty["default"])(exports, "__esModule", {
  2849. value: true
  2850. });
  2851. exports.ListHandle = void 0;
  2852. var tslib_1 = __webpack_require__(2);
  2853. var SelectionRangeElem_1 = tslib_1.__importDefault(__webpack_require__(373));
  2854. var ListHandle =
  2855. /** @class */
  2856. function () {
  2857. function ListHandle(options) {
  2858. this.options = options;
  2859. this.selectionRangeElem = new SelectionRangeElem_1["default"]();
  2860. }
  2861. return ListHandle;
  2862. }();
  2863. exports.ListHandle = ListHandle;
  2864. /***/ }),
  2865. /* 59 */
  2866. /***/ (function(module, exports, __webpack_require__) {
  2867. "use strict";
  2868. var nativePropertyIsEnumerable = {}.propertyIsEnumerable;
  2869. var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
  2870. // Nashorn ~ JDK8 bug
  2871. var NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1);
  2872. // `Object.prototype.propertyIsEnumerable` method implementation
  2873. // https://tc39.github.io/ecma262/#sec-object.prototype.propertyisenumerable
  2874. exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {
  2875. var descriptor = getOwnPropertyDescriptor(this, V);
  2876. return !!descriptor && descriptor.enumerable;
  2877. } : nativePropertyIsEnumerable;
  2878. /***/ }),
  2879. /* 60 */
  2880. /***/ (function(module, exports, __webpack_require__) {
  2881. var isObject = __webpack_require__(13);
  2882. // `ToPrimitive` abstract operation
  2883. // https://tc39.github.io/ecma262/#sec-toprimitive
  2884. // instead of the ES6 spec version, we didn't implement @@toPrimitive case
  2885. // and the second argument - flag - preferred type is a string
  2886. module.exports = function (input, PREFERRED_STRING) {
  2887. if (!isObject(input)) return input;
  2888. var fn, val;
  2889. if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;
  2890. if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val;
  2891. if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;
  2892. throw TypeError("Can't convert object to primitive value");
  2893. };
  2894. /***/ }),
  2895. /* 61 */
  2896. /***/ (function(module, exports) {
  2897. // empty
  2898. /***/ }),
  2899. /* 62 */
  2900. /***/ (function(module, exports) {
  2901. var ceil = Math.ceil;
  2902. var floor = Math.floor;
  2903. // `ToInteger` abstract operation
  2904. // https://tc39.github.io/ecma262/#sec-tointeger
  2905. module.exports = function (argument) {
  2906. return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);
  2907. };
  2908. /***/ }),
  2909. /* 63 */
  2910. /***/ (function(module, exports, __webpack_require__) {
  2911. var shared = __webpack_require__(74);
  2912. var uid = __webpack_require__(64);
  2913. var keys = shared('keys');
  2914. module.exports = function (key) {
  2915. return keys[key] || (keys[key] = uid(key));
  2916. };
  2917. /***/ }),
  2918. /* 64 */
  2919. /***/ (function(module, exports) {
  2920. var id = 0;
  2921. var postfix = Math.random();
  2922. module.exports = function (key) {
  2923. return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36);
  2924. };
  2925. /***/ }),
  2926. /* 65 */
  2927. /***/ (function(module, exports, __webpack_require__) {
  2928. var TO_STRING_TAG_SUPPORT = __webpack_require__(81);
  2929. var classofRaw = __webpack_require__(34);
  2930. var wellKnownSymbol = __webpack_require__(10);
  2931. var TO_STRING_TAG = wellKnownSymbol('toStringTag');
  2932. // ES3 wrong here
  2933. var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';
  2934. // fallback for IE11 Script Access Denied error
  2935. var tryGet = function (it, key) {
  2936. try {
  2937. return it[key];
  2938. } catch (error) { /* empty */ }
  2939. };
  2940. // getting tag from ES6+ `Object.prototype.toString`
  2941. module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {
  2942. var O, tag, result;
  2943. return it === undefined ? 'Undefined' : it === null ? 'Null'
  2944. // @@toStringTag case
  2945. : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag
  2946. // builtinTag case
  2947. : CORRECT_ARGUMENTS ? classofRaw(O)
  2948. // ES3 arguments fallback
  2949. : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result;
  2950. };
  2951. /***/ }),
  2952. /* 66 */
  2953. /***/ (function(module, exports, __webpack_require__) {
  2954. var anObject = __webpack_require__(25);
  2955. var isArrayIteratorMethod = __webpack_require__(112);
  2956. var toLength = __webpack_require__(35);
  2957. var bind = __webpack_require__(40);
  2958. var getIteratorMethod = __webpack_require__(113);
  2959. var callWithSafeIterationClosing = __webpack_require__(114);
  2960. var Result = function (stopped, result) {
  2961. this.stopped = stopped;
  2962. this.result = result;
  2963. };
  2964. var iterate = module.exports = function (iterable, fn, that, AS_ENTRIES, IS_ITERATOR) {
  2965. var boundFunction = bind(fn, that, AS_ENTRIES ? 2 : 1);
  2966. var iterator, iterFn, index, length, result, next, step;
  2967. if (IS_ITERATOR) {
  2968. iterator = iterable;
  2969. } else {
  2970. iterFn = getIteratorMethod(iterable);
  2971. if (typeof iterFn != 'function') throw TypeError('Target is not iterable');
  2972. // optimisation for array iterators
  2973. if (isArrayIteratorMethod(iterFn)) {
  2974. for (index = 0, length = toLength(iterable.length); length > index; index++) {
  2975. result = AS_ENTRIES
  2976. ? boundFunction(anObject(step = iterable[index])[0], step[1])
  2977. : boundFunction(iterable[index]);
  2978. if (result && result instanceof Result) return result;
  2979. } return new Result(false);
  2980. }
  2981. iterator = iterFn.call(iterable);
  2982. }
  2983. next = iterator.next;
  2984. while (!(step = next.call(iterator)).done) {
  2985. result = callWithSafeIterationClosing(iterator, boundFunction, step.value, AS_ENTRIES);
  2986. if (typeof result == 'object' && result && result instanceof Result) return result;
  2987. } return new Result(false);
  2988. };
  2989. iterate.stop = function (result) {
  2990. return new Result(true, result);
  2991. };
  2992. /***/ }),
  2993. /* 67 */
  2994. /***/ (function(module, exports, __webpack_require__) {
  2995. "use strict";
  2996. var fails = __webpack_require__(11);
  2997. module.exports = function (METHOD_NAME, argument) {
  2998. var method = [][METHOD_NAME];
  2999. return !!method && fails(function () {
  3000. // eslint-disable-next-line no-useless-call,no-throw-literal
  3001. method.call(null, argument || function () { throw 1; }, 1);
  3002. });
  3003. };
  3004. /***/ }),
  3005. /* 68 */
  3006. /***/ (function(module, exports) {
  3007. // a string of all valid unicode whitespaces
  3008. // eslint-disable-next-line max-len
  3009. module.exports = '\u0009\u000A\u000B\u000C\u000D\u0020\u00A0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF';
  3010. /***/ }),
  3011. /* 69 */
  3012. /***/ (function(module, exports, __webpack_require__) {
  3013. "use strict";
  3014. var toPrimitive = __webpack_require__(60);
  3015. var definePropertyModule = __webpack_require__(18);
  3016. var createPropertyDescriptor = __webpack_require__(48);
  3017. module.exports = function (object, key, value) {
  3018. var propertyKey = toPrimitive(key);
  3019. if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));
  3020. else object[propertyKey] = value;
  3021. };
  3022. /***/ }),
  3023. /* 70 */
  3024. /***/ (function(module, exports, __webpack_require__) {
  3025. module.exports = __webpack_require__(209);
  3026. /***/ }),
  3027. /* 71 */
  3028. /***/ (function(module, exports, __webpack_require__) {
  3029. var DESCRIPTORS = __webpack_require__(14);
  3030. var propertyIsEnumerableModule = __webpack_require__(59);
  3031. var createPropertyDescriptor = __webpack_require__(48);
  3032. var toIndexedObject = __webpack_require__(30);
  3033. var toPrimitive = __webpack_require__(60);
  3034. var has = __webpack_require__(16);
  3035. var IE8_DOM_DEFINE = __webpack_require__(100);
  3036. var nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
  3037. // `Object.getOwnPropertyDescriptor` method
  3038. // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor
  3039. exports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {
  3040. O = toIndexedObject(O);
  3041. P = toPrimitive(P, true);
  3042. if (IE8_DOM_DEFINE) try {
  3043. return nativeGetOwnPropertyDescriptor(O, P);
  3044. } catch (error) { /* empty */ }
  3045. if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);
  3046. };
  3047. /***/ }),
  3048. /* 72 */
  3049. /***/ (function(module, exports, __webpack_require__) {
  3050. var fails = __webpack_require__(11);
  3051. var classof = __webpack_require__(34);
  3052. var split = ''.split;
  3053. // fallback for non-array-like ES3 and non-enumerable old V8 strings
  3054. module.exports = fails(function () {
  3055. // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346
  3056. // eslint-disable-next-line no-prototype-builtins
  3057. return !Object('z').propertyIsEnumerable(0);
  3058. }) ? function (it) {
  3059. return classof(it) == 'String' ? split.call(it, '') : Object(it);
  3060. } : Object;
  3061. /***/ }),
  3062. /* 73 */
  3063. /***/ (function(module, exports, __webpack_require__) {
  3064. var global = __webpack_require__(8);
  3065. var isObject = __webpack_require__(13);
  3066. var document = global.document;
  3067. // typeof document.createElement is 'object' in old IE
  3068. var EXISTS = isObject(document) && isObject(document.createElement);
  3069. module.exports = function (it) {
  3070. return EXISTS ? document.createElement(it) : {};
  3071. };
  3072. /***/ }),
  3073. /* 74 */
  3074. /***/ (function(module, exports, __webpack_require__) {
  3075. var IS_PURE = __webpack_require__(43);
  3076. var store = __webpack_require__(103);
  3077. (module.exports = function (key, value) {
  3078. return store[key] || (store[key] = value !== undefined ? value : {});
  3079. })('versions', []).push({
  3080. version: '3.6.4',
  3081. mode: IS_PURE ? 'pure' : 'global',
  3082. copyright: '© 2020 Denis Pushkarev (zloirock.ru)'
  3083. });
  3084. /***/ }),
  3085. /* 75 */
  3086. /***/ (function(module, exports, __webpack_require__) {
  3087. "use strict";
  3088. var $ = __webpack_require__(5);
  3089. var createIteratorConstructor = __webpack_require__(167);
  3090. var getPrototypeOf = __webpack_require__(105);
  3091. var setPrototypeOf = __webpack_require__(171);
  3092. var setToStringTag = __webpack_require__(37);
  3093. var createNonEnumerableProperty = __webpack_require__(19);
  3094. var redefine = __webpack_require__(53);
  3095. var wellKnownSymbol = __webpack_require__(10);
  3096. var IS_PURE = __webpack_require__(43);
  3097. var Iterators = __webpack_require__(44);
  3098. var IteratorsCore = __webpack_require__(104);
  3099. var IteratorPrototype = IteratorsCore.IteratorPrototype;
  3100. var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;
  3101. var ITERATOR = wellKnownSymbol('iterator');
  3102. var KEYS = 'keys';
  3103. var VALUES = 'values';
  3104. var ENTRIES = 'entries';
  3105. var returnThis = function () { return this; };
  3106. module.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {
  3107. createIteratorConstructor(IteratorConstructor, NAME, next);
  3108. var getIterationMethod = function (KIND) {
  3109. if (KIND === DEFAULT && defaultIterator) return defaultIterator;
  3110. if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];
  3111. switch (KIND) {
  3112. case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };
  3113. case VALUES: return function values() { return new IteratorConstructor(this, KIND); };
  3114. case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };
  3115. } return function () { return new IteratorConstructor(this); };
  3116. };
  3117. var TO_STRING_TAG = NAME + ' Iterator';
  3118. var INCORRECT_VALUES_NAME = false;
  3119. var IterablePrototype = Iterable.prototype;
  3120. var nativeIterator = IterablePrototype[ITERATOR]
  3121. || IterablePrototype['@@iterator']
  3122. || DEFAULT && IterablePrototype[DEFAULT];
  3123. var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);
  3124. var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;
  3125. var CurrentIteratorPrototype, methods, KEY;
  3126. // fix native
  3127. if (anyNativeIterator) {
  3128. CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));
  3129. if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {
  3130. if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {
  3131. if (setPrototypeOf) {
  3132. setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);
  3133. } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') {
  3134. createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR, returnThis);
  3135. }
  3136. }
  3137. // Set @@toStringTag to native iterators
  3138. setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);
  3139. if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;
  3140. }
  3141. }
  3142. // fix Array#{values, @@iterator}.name in V8 / FF
  3143. if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {
  3144. INCORRECT_VALUES_NAME = true;
  3145. defaultIterator = function values() { return nativeIterator.call(this); };
  3146. }
  3147. // define iterator
  3148. if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {
  3149. createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator);
  3150. }
  3151. Iterators[NAME] = defaultIterator;
  3152. // export additional methods
  3153. if (DEFAULT) {
  3154. methods = {
  3155. values: getIterationMethod(VALUES),
  3156. keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),
  3157. entries: getIterationMethod(ENTRIES)
  3158. };
  3159. if (FORCED) for (KEY in methods) {
  3160. if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {
  3161. redefine(IterablePrototype, KEY, methods[KEY]);
  3162. }
  3163. } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);
  3164. }
  3165. return methods;
  3166. };
  3167. /***/ }),
  3168. /* 76 */
  3169. /***/ (function(module, exports, __webpack_require__) {
  3170. var fails = __webpack_require__(11);
  3171. module.exports = !!Object.getOwnPropertySymbols && !fails(function () {
  3172. // Chrome 38 Symbol has incorrect toString conversion
  3173. // eslint-disable-next-line no-undef
  3174. return !String(Symbol());
  3175. });
  3176. /***/ }),
  3177. /* 77 */
  3178. /***/ (function(module, exports, __webpack_require__) {
  3179. var anObject = __webpack_require__(25);
  3180. var defineProperties = __webpack_require__(169);
  3181. var enumBugKeys = __webpack_require__(80);
  3182. var hiddenKeys = __webpack_require__(51);
  3183. var html = __webpack_require__(108);
  3184. var documentCreateElement = __webpack_require__(73);
  3185. var sharedKey = __webpack_require__(63);
  3186. var GT = '>';
  3187. var LT = '<';
  3188. var PROTOTYPE = 'prototype';
  3189. var SCRIPT = 'script';
  3190. var IE_PROTO = sharedKey('IE_PROTO');
  3191. var EmptyConstructor = function () { /* empty */ };
  3192. var scriptTag = function (content) {
  3193. return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;
  3194. };
  3195. // Create object with fake `null` prototype: use ActiveX Object with cleared prototype
  3196. var NullProtoObjectViaActiveX = function (activeXDocument) {
  3197. activeXDocument.write(scriptTag(''));
  3198. activeXDocument.close();
  3199. var temp = activeXDocument.parentWindow.Object;
  3200. activeXDocument = null; // avoid memory leak
  3201. return temp;
  3202. };
  3203. // Create object with fake `null` prototype: use iframe Object with cleared prototype
  3204. var NullProtoObjectViaIFrame = function () {
  3205. // Thrash, waste and sodomy: IE GC bug
  3206. var iframe = documentCreateElement('iframe');
  3207. var JS = 'java' + SCRIPT + ':';
  3208. var iframeDocument;
  3209. iframe.style.display = 'none';
  3210. html.appendChild(iframe);
  3211. // https://github.com/zloirock/core-js/issues/475
  3212. iframe.src = String(JS);
  3213. iframeDocument = iframe.contentWindow.document;
  3214. iframeDocument.open();
  3215. iframeDocument.write(scriptTag('document.F=Object'));
  3216. iframeDocument.close();
  3217. return iframeDocument.F;
  3218. };
  3219. // Check for document.domain and active x support
  3220. // No need to use active x approach when document.domain is not set
  3221. // see https://github.com/es-shims/es5-shim/issues/150
  3222. // variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346
  3223. // avoid IE GC bug
  3224. var activeXDocument;
  3225. var NullProtoObject = function () {
  3226. try {
  3227. /* global ActiveXObject */
  3228. activeXDocument = document.domain && new ActiveXObject('htmlfile');
  3229. } catch (error) { /* ignore */ }
  3230. NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame();
  3231. var length = enumBugKeys.length;
  3232. while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];
  3233. return NullProtoObject();
  3234. };
  3235. hiddenKeys[IE_PROTO] = true;
  3236. // `Object.create` method
  3237. // https://tc39.github.io/ecma262/#sec-object.create
  3238. module.exports = Object.create || function create(O, Properties) {
  3239. var result;
  3240. if (O !== null) {
  3241. EmptyConstructor[PROTOTYPE] = anObject(O);
  3242. result = new EmptyConstructor();
  3243. EmptyConstructor[PROTOTYPE] = null;
  3244. // add "__proto__" for Object.getPrototypeOf polyfill
  3245. result[IE_PROTO] = O;
  3246. } else result = NullProtoObject();
  3247. return Properties === undefined ? result : defineProperties(result, Properties);
  3248. };
  3249. /***/ }),
  3250. /* 78 */
  3251. /***/ (function(module, exports, __webpack_require__) {
  3252. var toIndexedObject = __webpack_require__(30);
  3253. var toLength = __webpack_require__(35);
  3254. var toAbsoluteIndex = __webpack_require__(79);
  3255. // `Array.prototype.{ indexOf, includes }` methods implementation
  3256. var createMethod = function (IS_INCLUDES) {
  3257. return function ($this, el, fromIndex) {
  3258. var O = toIndexedObject($this);
  3259. var length = toLength(O.length);
  3260. var index = toAbsoluteIndex(fromIndex, length);
  3261. var value;
  3262. // Array#includes uses SameValueZero equality algorithm
  3263. // eslint-disable-next-line no-self-compare
  3264. if (IS_INCLUDES && el != el) while (length > index) {
  3265. value = O[index++];
  3266. // eslint-disable-next-line no-self-compare
  3267. if (value != value) return true;
  3268. // Array#indexOf ignores holes, Array#includes - not
  3269. } else for (;length > index; index++) {
  3270. if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;
  3271. } return !IS_INCLUDES && -1;
  3272. };
  3273. };
  3274. module.exports = {
  3275. // `Array.prototype.includes` method
  3276. // https://tc39.github.io/ecma262/#sec-array.prototype.includes
  3277. includes: createMethod(true),
  3278. // `Array.prototype.indexOf` method
  3279. // https://tc39.github.io/ecma262/#sec-array.prototype.indexof
  3280. indexOf: createMethod(false)
  3281. };
  3282. /***/ }),
  3283. /* 79 */
  3284. /***/ (function(module, exports, __webpack_require__) {
  3285. var toInteger = __webpack_require__(62);
  3286. var max = Math.max;
  3287. var min = Math.min;
  3288. // Helper for a popular repeating case of the spec:
  3289. // Let integer be ? ToInteger(index).
  3290. // If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).
  3291. module.exports = function (index, length) {
  3292. var integer = toInteger(index);
  3293. return integer < 0 ? max(integer + length, 0) : min(integer, length);
  3294. };
  3295. /***/ }),
  3296. /* 80 */
  3297. /***/ (function(module, exports) {
  3298. // IE8- don't enum bug keys
  3299. module.exports = [
  3300. 'constructor',
  3301. 'hasOwnProperty',
  3302. 'isPrototypeOf',
  3303. 'propertyIsEnumerable',
  3304. 'toLocaleString',
  3305. 'toString',
  3306. 'valueOf'
  3307. ];
  3308. /***/ }),
  3309. /* 81 */
  3310. /***/ (function(module, exports, __webpack_require__) {
  3311. var wellKnownSymbol = __webpack_require__(10);
  3312. var TO_STRING_TAG = wellKnownSymbol('toStringTag');
  3313. var test = {};
  3314. test[TO_STRING_TAG] = 'z';
  3315. module.exports = String(test) === '[object z]';
  3316. /***/ }),
  3317. /* 82 */
  3318. /***/ (function(module, exports) {
  3319. module.exports = function () { /* empty */ };
  3320. /***/ }),
  3321. /* 83 */
  3322. /***/ (function(module, exports) {
  3323. module.exports = function (it, Constructor, name) {
  3324. if (!(it instanceof Constructor)) {
  3325. throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation');
  3326. } return it;
  3327. };
  3328. /***/ }),
  3329. /* 84 */
  3330. /***/ (function(module, exports, __webpack_require__) {
  3331. var getBuiltIn = __webpack_require__(36);
  3332. module.exports = getBuiltIn('navigator', 'userAgent') || '';
  3333. /***/ }),
  3334. /* 85 */
  3335. /***/ (function(module, exports, __webpack_require__) {
  3336. "use strict";
  3337. var aFunction = __webpack_require__(41);
  3338. var PromiseCapability = function (C) {
  3339. var resolve, reject;
  3340. this.promise = new C(function ($$resolve, $$reject) {
  3341. if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');
  3342. resolve = $$resolve;
  3343. reject = $$reject;
  3344. });
  3345. this.resolve = aFunction(resolve);
  3346. this.reject = aFunction(reject);
  3347. };
  3348. // 25.4.1.5 NewPromiseCapability(C)
  3349. module.exports.f = function (C) {
  3350. return new PromiseCapability(C);
  3351. };
  3352. /***/ }),
  3353. /* 86 */
  3354. /***/ (function(module, exports, __webpack_require__) {
  3355. var global = __webpack_require__(8);
  3356. var userAgent = __webpack_require__(84);
  3357. var process = global.process;
  3358. var versions = process && process.versions;
  3359. var v8 = versions && versions.v8;
  3360. var match, version;
  3361. if (v8) {
  3362. match = v8.split('.');
  3363. version = match[0] + match[1];
  3364. } else if (userAgent) {
  3365. match = userAgent.match(/Edge\/(\d+)/);
  3366. if (!match || match[1] >= 74) {
  3367. match = userAgent.match(/Chrome\/(\d+)/);
  3368. if (match) version = match[1];
  3369. }
  3370. }
  3371. module.exports = version && +version;
  3372. /***/ }),
  3373. /* 87 */
  3374. /***/ (function(module, exports, __webpack_require__) {
  3375. "use strict";
  3376. /**
  3377. * @description 编辑器 class
  3378. * @author wangfupeng
  3379. */
  3380. var _interopRequireDefault = __webpack_require__(0);
  3381. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  3382. var _forEach = _interopRequireDefault(__webpack_require__(4));
  3383. (0, _defineProperty["default"])(exports, "__esModule", {
  3384. value: true
  3385. });
  3386. var tslib_1 = __webpack_require__(2);
  3387. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  3388. var util_1 = __webpack_require__(6);
  3389. var config_1 = tslib_1.__importDefault(__webpack_require__(267));
  3390. var selection_1 = tslib_1.__importDefault(__webpack_require__(280));
  3391. var command_1 = tslib_1.__importDefault(__webpack_require__(281));
  3392. var index_1 = tslib_1.__importDefault(__webpack_require__(282));
  3393. var index_2 = tslib_1.__importDefault(__webpack_require__(301));
  3394. var init_dom_1 = tslib_1.__importStar(__webpack_require__(416));
  3395. var init_selection_1 = tslib_1.__importDefault(__webpack_require__(417));
  3396. var bind_event_1 = tslib_1.__importDefault(__webpack_require__(418));
  3397. var i18next_init_1 = tslib_1.__importDefault(__webpack_require__(419));
  3398. var set_full_screen_1 = tslib_1.__importStar(__webpack_require__(420));
  3399. var scroll_to_head_1 = tslib_1.__importDefault(__webpack_require__(423));
  3400. var z_index_1 = tslib_1.__importDefault(__webpack_require__(424));
  3401. var index_3 = tslib_1.__importDefault(__webpack_require__(425));
  3402. var index_4 = tslib_1.__importDefault(__webpack_require__(427));
  3403. var disable_1 = tslib_1.__importDefault(__webpack_require__(437));
  3404. var selection_change_1 = tslib_1.__importDefault(__webpack_require__(440));
  3405. var plugins_1 = tslib_1.__importStar(__webpack_require__(441));
  3406. var BtnMenu_1 = tslib_1.__importDefault(__webpack_require__(23));
  3407. var DropList_1 = tslib_1.__importDefault(__webpack_require__(134));
  3408. var DropListMenu_1 = tslib_1.__importDefault(__webpack_require__(24));
  3409. var Panel_1 = tslib_1.__importDefault(__webpack_require__(33));
  3410. var PanelMenu_1 = tslib_1.__importDefault(__webpack_require__(38));
  3411. var Tooltip_1 = tslib_1.__importDefault(__webpack_require__(39));
  3412. var EDITOR_ID = 1;
  3413. var Editor =
  3414. /** @class */
  3415. function () {
  3416. /**
  3417. * 构造函数
  3418. * @param toolbarSelector 工具栏 DOM selector
  3419. * @param textSelector 文本区域 DOM selector
  3420. */
  3421. function Editor(toolbarSelector, textSelector) {
  3422. this.pluginsFunctionList = {}; // 实例销毁前需要执行的钩子集合
  3423. this.beforeDestroyHooks = []; // id,用以区分单个页面不同的编辑器对象
  3424. this.id = "wangEditor-" + EDITOR_ID++;
  3425. this.toolbarSelector = toolbarSelector;
  3426. this.textSelector = textSelector;
  3427. init_dom_1.selectorValidator(this); // 属性的默认值,后面可能会再修改
  3428. // 默认配置 - 当一个页面有多个编辑器的时候,因为 JS 的特性(引用类型)会导致多个编辑器的 config 引用是同一个,所以需要 深度克隆 断掉引用
  3429. this.config = util_1.deepClone(config_1["default"]);
  3430. this.$toolbarElem = dom_core_1["default"]('<div></div>');
  3431. this.$textContainerElem = dom_core_1["default"]('<div></div>');
  3432. this.$textElem = dom_core_1["default"]('<div></div>');
  3433. this.toolbarElemId = '';
  3434. this.textElemId = '';
  3435. this.isFocus = false;
  3436. this.isComposing = false;
  3437. this.isCompatibleMode = false;
  3438. this.selection = new selection_1["default"](this);
  3439. this.cmd = new command_1["default"](this);
  3440. this.txt = new index_1["default"](this);
  3441. this.menus = new index_2["default"](this);
  3442. this.zIndex = new z_index_1["default"]();
  3443. this.change = new index_3["default"](this);
  3444. this.history = new index_4["default"](this);
  3445. this.onSelectionChange = new selection_change_1["default"](this);
  3446. var _a = disable_1["default"](this),
  3447. disable = _a.disable,
  3448. enable = _a.enable;
  3449. this.disable = disable;
  3450. this.enable = enable;
  3451. this.isEnable = true;
  3452. }
  3453. /**
  3454. * 初始化选区
  3455. * @param newLine 新建一行
  3456. */
  3457. Editor.prototype.initSelection = function (newLine) {
  3458. init_selection_1["default"](this, newLine);
  3459. };
  3460. /**
  3461. * 创建编辑器实例
  3462. */
  3463. Editor.prototype.create = function () {
  3464. // 初始化 ZIndex
  3465. this.zIndex.init(this); // 确定当前的历史记录模式
  3466. this.isCompatibleMode = this.config.compatibleMode(); // 标准模式下,重置延迟时间
  3467. if (!this.isCompatibleMode) {
  3468. this.config.onchangeTimeout = 30;
  3469. } // 国际化 因为要在创建菜单前使用 所以要最先 初始化
  3470. i18next_init_1["default"](this); // 初始化 DOM
  3471. init_dom_1["default"](this); // 初始化 text
  3472. this.txt.init(); // 初始化菜单
  3473. this.menus.init(); // 初始化全屏功能
  3474. set_full_screen_1["default"](this); // 初始化选区,将光标定位到内容尾部
  3475. this.initSelection(true); // 绑定事件
  3476. bind_event_1["default"](this); // 绑定监听的目标节点
  3477. this.change.observe();
  3478. this.history.observe(); // 初始化插件
  3479. plugins_1["default"](this);
  3480. };
  3481. /**
  3482. * 提供给用户添加销毁前的钩子函数
  3483. * @param fn 钩子函数
  3484. */
  3485. Editor.prototype.beforeDestroy = function (fn) {
  3486. this.beforeDestroyHooks.push(fn);
  3487. return this;
  3488. };
  3489. /**
  3490. * 销毁当前编辑器实例
  3491. */
  3492. Editor.prototype.destroy = function () {
  3493. var _context;
  3494. var _this = this; // 调用钩子函数
  3495. (0, _forEach["default"])(_context = this.beforeDestroyHooks).call(_context, function (fn) {
  3496. return fn.call(_this);
  3497. }); // 销毁 DOM 节点
  3498. this.$toolbarElem.remove();
  3499. this.$textContainerElem.remove();
  3500. };
  3501. /**
  3502. * 将编辑器设置为全屏
  3503. */
  3504. Editor.prototype.fullScreen = function () {
  3505. set_full_screen_1.setFullScreen(this);
  3506. };
  3507. /**
  3508. * 将编辑器退出全屏
  3509. */
  3510. Editor.prototype.unFullScreen = function () {
  3511. set_full_screen_1.setUnFullScreen(this);
  3512. };
  3513. /**
  3514. * 滚动到指定标题锚点
  3515. * @param id 标题锚点id
  3516. */
  3517. Editor.prototype.scrollToHead = function (id) {
  3518. scroll_to_head_1["default"](this, id);
  3519. };
  3520. /**
  3521. * 自定义添加菜单
  3522. * @param key 菜单 key
  3523. * @param Menu 菜单构造函数
  3524. */
  3525. Editor.registerMenu = function (key, Menu) {
  3526. if (!Menu || typeof Menu !== 'function') return;
  3527. Editor.globalCustomMenuConstructorList[key] = Menu;
  3528. };
  3529. /**
  3530. * 自定义添加插件
  3531. * @param { string } name 插件的名称
  3532. * @param { RegisterOptions } options 插件的选项
  3533. */
  3534. Editor.prototype.registerPlugin = function (name, options) {
  3535. plugins_1.registerPlugin(name, options, this.pluginsFunctionList);
  3536. };
  3537. /**
  3538. * 自定义添加插件
  3539. * @param { string } name 插件的名称
  3540. * @param { RegisterOptions } options 插件的选项
  3541. */
  3542. Editor.registerPlugin = function (name, options) {
  3543. plugins_1.registerPlugin(name, options, Editor.globalPluginsFunctionList);
  3544. }; // 暴露 $
  3545. Editor.$ = dom_core_1["default"];
  3546. Editor.BtnMenu = BtnMenu_1["default"];
  3547. Editor.DropList = DropList_1["default"];
  3548. Editor.DropListMenu = DropListMenu_1["default"];
  3549. Editor.Panel = Panel_1["default"];
  3550. Editor.PanelMenu = PanelMenu_1["default"];
  3551. Editor.Tooltip = Tooltip_1["default"];
  3552. Editor.globalCustomMenuConstructorList = {};
  3553. Editor.globalPluginsFunctionList = {};
  3554. return Editor;
  3555. }();
  3556. exports["default"] = Editor;
  3557. /***/ }),
  3558. /* 88 */
  3559. /***/ (function(module, exports, __webpack_require__) {
  3560. var isObject = __webpack_require__(13);
  3561. var isArray = __webpack_require__(55);
  3562. var wellKnownSymbol = __webpack_require__(10);
  3563. var SPECIES = wellKnownSymbol('species');
  3564. // `ArraySpeciesCreate` abstract operation
  3565. // https://tc39.github.io/ecma262/#sec-arrayspeciescreate
  3566. module.exports = function (originalArray, length) {
  3567. var C;
  3568. if (isArray(originalArray)) {
  3569. C = originalArray.constructor;
  3570. // cross-realm fallback
  3571. if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;
  3572. else if (isObject(C)) {
  3573. C = C[SPECIES];
  3574. if (C === null) C = undefined;
  3575. }
  3576. } return new (C === undefined ? Array : C)(length === 0 ? 0 : length);
  3577. };
  3578. /***/ }),
  3579. /* 89 */
  3580. /***/ (function(module, exports, __webpack_require__) {
  3581. module.exports = __webpack_require__(185);
  3582. /***/ }),
  3583. /* 90 */
  3584. /***/ (function(module, exports, __webpack_require__) {
  3585. var requireObjectCoercible = __webpack_require__(49);
  3586. var whitespaces = __webpack_require__(68);
  3587. var whitespace = '[' + whitespaces + ']';
  3588. var ltrim = RegExp('^' + whitespace + whitespace + '*');
  3589. var rtrim = RegExp(whitespace + whitespace + '*$');
  3590. // `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation
  3591. var createMethod = function (TYPE) {
  3592. return function ($this) {
  3593. var string = String(requireObjectCoercible($this));
  3594. if (TYPE & 1) string = string.replace(ltrim, '');
  3595. if (TYPE & 2) string = string.replace(rtrim, '');
  3596. return string;
  3597. };
  3598. };
  3599. module.exports = {
  3600. // `String.prototype.{ trimLeft, trimStart }` methods
  3601. // https://tc39.github.io/ecma262/#sec-string.prototype.trimstart
  3602. start: createMethod(1),
  3603. // `String.prototype.{ trimRight, trimEnd }` methods
  3604. // https://tc39.github.io/ecma262/#sec-string.prototype.trimend
  3605. end: createMethod(2),
  3606. // `String.prototype.trim` method
  3607. // https://tc39.github.io/ecma262/#sec-string.prototype.trim
  3608. trim: createMethod(3)
  3609. };
  3610. /***/ }),
  3611. /* 91 */
  3612. /***/ (function(module, exports, __webpack_require__) {
  3613. module.exports = __webpack_require__(205);
  3614. /***/ }),
  3615. /* 92 */
  3616. /***/ (function(module, exports, __webpack_require__) {
  3617. var _Symbol$iterator = __webpack_require__(227);
  3618. var _Symbol = __webpack_require__(230);
  3619. function _typeof(obj) {
  3620. "@babel/helpers - typeof";
  3621. if (typeof _Symbol === "function" && typeof _Symbol$iterator === "symbol") {
  3622. module.exports = _typeof = function _typeof(obj) {
  3623. return typeof obj;
  3624. };
  3625. } else {
  3626. module.exports = _typeof = function _typeof(obj) {
  3627. return obj && typeof _Symbol === "function" && obj.constructor === _Symbol && obj !== _Symbol.prototype ? "symbol" : typeof obj;
  3628. };
  3629. }
  3630. return _typeof(obj);
  3631. }
  3632. module.exports = _typeof;
  3633. /***/ }),
  3634. /* 93 */
  3635. /***/ (function(module, exports, __webpack_require__) {
  3636. var wellKnownSymbol = __webpack_require__(10);
  3637. exports.f = wellKnownSymbol;
  3638. /***/ }),
  3639. /* 94 */
  3640. /***/ (function(module, exports, __webpack_require__) {
  3641. module.exports = __webpack_require__(306);
  3642. /***/ }),
  3643. /* 95 */
  3644. /***/ (function(module, exports, __webpack_require__) {
  3645. "use strict";
  3646. /**
  3647. * @description Menu class 父类
  3648. * @author wangfupeng
  3649. */
  3650. var _interopRequireDefault = __webpack_require__(0);
  3651. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  3652. var _forEach = _interopRequireDefault(__webpack_require__(4));
  3653. (0, _defineProperty["default"])(exports, "__esModule", {
  3654. value: true
  3655. });
  3656. var tslib_1 = __webpack_require__(2);
  3657. var Panel_1 = tslib_1.__importDefault(__webpack_require__(33));
  3658. var Menu =
  3659. /** @class */
  3660. function () {
  3661. function Menu($elem, editor) {
  3662. var _this = this;
  3663. this.$elem = $elem;
  3664. this.editor = editor;
  3665. this._active = false; // 绑定菜单点击事件
  3666. $elem.on('click', function (e) {
  3667. var _context;
  3668. Panel_1["default"].hideCurAllPanels(); // 隐藏当前的所有 Panel
  3669. // 触发菜单点击的钩子
  3670. (0, _forEach["default"])(_context = editor.txt.eventHooks.menuClickEvents).call(_context, function (fn) {
  3671. return fn();
  3672. });
  3673. e.stopPropagation();
  3674. if (editor.selection.getRange() == null) {
  3675. return;
  3676. }
  3677. _this.clickHandler(e);
  3678. });
  3679. }
  3680. /**
  3681. * 菜单点击事件,子类可重写
  3682. * @param e event
  3683. */
  3684. Menu.prototype.clickHandler = function (e) {};
  3685. /**
  3686. * 激活菜单,高亮显示
  3687. */
  3688. Menu.prototype.active = function () {
  3689. this._active = true;
  3690. this.$elem.addClass('w-e-active');
  3691. };
  3692. /**
  3693. * 取消激活,不再高亮显示
  3694. */
  3695. Menu.prototype.unActive = function () {
  3696. this._active = false;
  3697. this.$elem.removeClass('w-e-active');
  3698. };
  3699. (0, _defineProperty["default"])(Menu.prototype, "isActive", {
  3700. /**
  3701. * 是否处于激活状态
  3702. */
  3703. get: function get() {
  3704. return this._active;
  3705. },
  3706. enumerable: false,
  3707. configurable: true
  3708. });
  3709. return Menu;
  3710. }();
  3711. exports["default"] = Menu;
  3712. /***/ }),
  3713. /* 96 */
  3714. /***/ (function(module, exports, __webpack_require__) {
  3715. "use strict";
  3716. /**
  3717. * @description 检查选区是否在链接中,即菜单是否应该 active
  3718. * @author wangfupeng
  3719. */
  3720. var _interopRequireDefault = __webpack_require__(0);
  3721. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  3722. var _includes = _interopRequireDefault(__webpack_require__(28));
  3723. (0, _defineProperty["default"])(exports, "__esModule", {
  3724. value: true
  3725. });
  3726. exports.getParentNodeA = exports.EXTRA_TAG = void 0; // 加粗 b
  3727. // 字号/字体/颜色 font
  3728. // 斜体 i
  3729. // 删除线 strike
  3730. exports.EXTRA_TAG = ['B', 'FONT', 'I', 'STRIKE'];
  3731. function getParentNodeA(selectionELem) {
  3732. var node = selectionELem.elems[0];
  3733. while (node && (0, _includes["default"])(_context = exports.EXTRA_TAG).call(_context, node.nodeName)) {
  3734. var _context;
  3735. node = node.parentElement;
  3736. if (node.nodeName === 'A') {
  3737. return node;
  3738. }
  3739. }
  3740. }
  3741. exports.getParentNodeA = getParentNodeA;
  3742. function isActive(editor) {
  3743. var _a;
  3744. var $selectionELem = editor.selection.getSelectionContainerElem();
  3745. if (!((_a = $selectionELem === null || $selectionELem === void 0 ? void 0 : $selectionELem.elems) === null || _a === void 0 ? void 0 : _a.length)) {
  3746. return false;
  3747. } // 选中直接是a元素
  3748. if ($selectionELem.getNodeName() === 'A') {
  3749. return true;
  3750. } // 有可能a里面嵌套了其他元素,比如b、i元素等
  3751. var parentNode = getParentNodeA($selectionELem);
  3752. if (parentNode && parentNode.nodeName === 'A') {
  3753. return true;
  3754. }
  3755. return false;
  3756. }
  3757. exports["default"] = isActive;
  3758. /***/ }),
  3759. /* 97 */
  3760. /***/ (function(module, exports, __webpack_require__) {
  3761. "use strict";
  3762. /**
  3763. * @description 上传图片
  3764. * @author wangfupeng
  3765. */
  3766. var _interopRequireDefault = __webpack_require__(0);
  3767. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  3768. var _bind = _interopRequireDefault(__webpack_require__(57));
  3769. var _forEach = _interopRequireDefault(__webpack_require__(4));
  3770. var _indexOf = _interopRequireDefault(__webpack_require__(27));
  3771. (0, _defineProperty["default"])(exports, "__esModule", {
  3772. value: true
  3773. });
  3774. var tslib_1 = __webpack_require__(2);
  3775. var util_1 = __webpack_require__(6);
  3776. var upload_core_1 = tslib_1.__importDefault(__webpack_require__(135));
  3777. var progress_1 = tslib_1.__importDefault(__webpack_require__(136));
  3778. var UploadImg =
  3779. /** @class */
  3780. function () {
  3781. function UploadImg(editor) {
  3782. this.editor = editor;
  3783. }
  3784. /**
  3785. * 往编辑区域插入图片
  3786. * @param src 图片地址
  3787. */
  3788. UploadImg.prototype.insertImg = function (src, alt, href) {
  3789. var editor = this.editor;
  3790. var config = editor.config;
  3791. var i18nPrefix = 'validate.';
  3792. var t = function t(text, prefix) {
  3793. if (prefix === void 0) {
  3794. prefix = i18nPrefix;
  3795. }
  3796. return editor.i18next.t(prefix + text);
  3797. };
  3798. /**
  3799. * fix: insertImg xss
  3800. */
  3801. // 过滤src, 防止xss
  3802. var resultSrc = src.replace(/</g, '&lt;').replace(/>/g, '&gt;'); // 因为下面要单引号拼接字符串, 所以要将单引号替换成双引号
  3803. resultSrc = resultSrc.replace("'", '"');
  3804. var hrefText = ''; // 设置图片的元数据 data-
  3805. if (href) {
  3806. hrefText = href.replace("'", '"');
  3807. hrefText = "data-href='" + encodeURIComponent(hrefText) + "' ";
  3808. }
  3809. var altText = ''; // 设置图片alt, 过滤xss标签攻击
  3810. if (alt) {
  3811. altText = alt.replace(/</g, '&lt;').replace(/>/g, '&gt;'); // 因为下面要单引号拼接字符串, 所以要将单引号替换成双引号
  3812. altText = altText.replace("'", '"');
  3813. altText = "alt='" + altText + "' ";
  3814. } // 先插入图片,无论是否能成功
  3815. editor.cmd["do"]('insertHTML', "<img src='" + resultSrc + "' " + altText + hrefText + "style=\"max-width:100%;\" contenteditable=\"false\"/>"); // 执行回调函数
  3816. config.linkImgCallback(src, alt, href); // 加载图片
  3817. var img = document.createElement('img');
  3818. img.onload = function () {
  3819. img = null;
  3820. };
  3821. img.onerror = function () {
  3822. config.customAlert(t('插入图片错误'), 'error', "wangEditor: " + t('插入图片错误') + "\uFF0C" + t('图片链接') + " \"" + src + "\"\uFF0C" + t('下载链接失败'));
  3823. img = null;
  3824. };
  3825. img.onabort = function () {
  3826. return img = null;
  3827. };
  3828. img.src = src;
  3829. };
  3830. /**
  3831. * 上传图片
  3832. * @param files 文件列表
  3833. */
  3834. UploadImg.prototype.uploadImg = function (files) {
  3835. var _this_1 = this;
  3836. if (!files.length) {
  3837. return;
  3838. }
  3839. var editor = this.editor;
  3840. var config = editor.config; // ------------------------------ i18next ------------------------------
  3841. var i18nPrefix = 'validate.';
  3842. var t = function t(text) {
  3843. return editor.i18next.t(i18nPrefix + text);
  3844. }; // ------------------------------ 获取配置信息 ------------------------------
  3845. // 服务端地址
  3846. var uploadImgServer = config.uploadImgServer; // base64 格式
  3847. var uploadImgShowBase64 = config.uploadImgShowBase64; // 图片最大体积
  3848. var maxSize = config.uploadImgMaxSize;
  3849. var maxSizeM = maxSize / 1024 / 1024; // 一次最多上传图片数量
  3850. var maxLength = config.uploadImgMaxLength; // 自定义 fileName
  3851. var uploadFileName = config.uploadFileName; // 自定义参数
  3852. var uploadImgParams = config.uploadImgParams; // 参数拼接到 url 中
  3853. var uploadImgParamsWithUrl = config.uploadImgParamsWithUrl; // 自定义 header
  3854. var uploadImgHeaders = config.uploadImgHeaders; // 钩子函数
  3855. var hooks = config.uploadImgHooks; // 上传图片超时时间
  3856. var timeout = config.uploadImgTimeout; // 跨域带 cookie
  3857. var withCredentials = config.withCredentials; // 自定义上传图片
  3858. var customUploadImg = config.customUploadImg;
  3859. if (!customUploadImg) {
  3860. // 没有 customUploadImg 的情况下,需要如下两个配置才能继续进行图片上传
  3861. if (!uploadImgServer && !uploadImgShowBase64) {
  3862. return;
  3863. }
  3864. } // ------------------------------ 验证文件信息 ------------------------------
  3865. var resultFiles = [];
  3866. var errInfos = [];
  3867. util_1.arrForEach(files, function (file) {
  3868. // chrome 低版本 粘贴一张图时files为 [null, File]
  3869. if (!file) return;
  3870. var name = file.name || file.type.replace('/', '.'); // 兼容低版本chrome 没有name
  3871. var size = file.size; // chrome 低版本 name === undefined
  3872. if (!name || !size) {
  3873. return;
  3874. } // 将uploadImgAccept数组转换为正则对象
  3875. var imgType = editor.config.uploadImgAccept.join('|');
  3876. var imgTypeRuleStr = ".(" + imgType + ")$";
  3877. var uploadImgAcceptRule = new RegExp(imgTypeRuleStr, 'i');
  3878. if (uploadImgAcceptRule.test(name) === false) {
  3879. // 后缀名不合法,不是图片
  3880. errInfos.push("\u3010" + name + "\u3011" + t('不是图片'));
  3881. return;
  3882. }
  3883. if (maxSize < size) {
  3884. // 上传图片过大
  3885. errInfos.push("\u3010" + name + "\u3011" + t('大于') + " " + maxSizeM + "M");
  3886. return;
  3887. } // 验证通过的加入结果列表
  3888. resultFiles.push(file);
  3889. }); // 抛出验证信息
  3890. if (errInfos.length) {
  3891. config.customAlert(t('图片验证未通过') + ": \n" + errInfos.join('\n'), 'warning');
  3892. return;
  3893. } // 如果过滤后文件列表为空直接返回
  3894. if (resultFiles.length === 0) {
  3895. config.customAlert(t('传入的文件不合法'), 'warning');
  3896. return;
  3897. }
  3898. if (resultFiles.length > maxLength) {
  3899. config.customAlert(t('一次最多上传') + maxLength + t('张图片'), 'warning');
  3900. return;
  3901. } // ------------------------------ 自定义上传 ------------------------------
  3902. if (customUploadImg && typeof customUploadImg === 'function') {
  3903. var _context;
  3904. customUploadImg(resultFiles, (0, _bind["default"])(_context = this.insertImg).call(_context, this)); // 阻止以下代码执行,重要!!!
  3905. return;
  3906. } // ------------------------------ 上传图片 ------------------------------
  3907. // 添加图片数据
  3908. var formData = new FormData();
  3909. (0, _forEach["default"])(resultFiles).call(resultFiles, function (file, index) {
  3910. var name = uploadFileName || file.name;
  3911. if (resultFiles.length > 1) {
  3912. // 多个文件时,filename 不能重复
  3913. name = name + (index + 1);
  3914. }
  3915. formData.append(name, file);
  3916. });
  3917. if (uploadImgServer) {
  3918. // 添加自定义参数
  3919. var uploadImgServerArr = uploadImgServer.split('#');
  3920. uploadImgServer = uploadImgServerArr[0];
  3921. var uploadImgServerHash = uploadImgServerArr[1] || '';
  3922. (0, _forEach["default"])(util_1).call(util_1, uploadImgParams, function (key, val) {
  3923. // 因使用者反应,自定义参数不能默认 encode ,由 v3.1.1 版本开始注释掉
  3924. // val = encodeURIComponent(val)
  3925. // 第一,将参数拼接到 url 中
  3926. if (uploadImgParamsWithUrl) {
  3927. if ((0, _indexOf["default"])(uploadImgServer).call(uploadImgServer, '?') > 0) {
  3928. uploadImgServer += '&';
  3929. } else {
  3930. uploadImgServer += '?';
  3931. }
  3932. uploadImgServer = uploadImgServer + key + '=' + val;
  3933. } // 第二,将参数添加到 formData 中
  3934. formData.append(key, val);
  3935. });
  3936. if (uploadImgServerHash) {
  3937. uploadImgServer += '#' + uploadImgServerHash;
  3938. } // 开始上传
  3939. var xhr = upload_core_1["default"](uploadImgServer, {
  3940. timeout: timeout,
  3941. formData: formData,
  3942. headers: uploadImgHeaders,
  3943. withCredentials: !!withCredentials,
  3944. beforeSend: function beforeSend(xhr) {
  3945. if (hooks.before) return hooks.before(xhr, editor, resultFiles);
  3946. },
  3947. onTimeout: function onTimeout(xhr) {
  3948. config.customAlert(t('上传图片超时'), 'error');
  3949. if (hooks.timeout) hooks.timeout(xhr, editor);
  3950. },
  3951. onProgress: function onProgress(percent, e) {
  3952. var progressBar = new progress_1["default"](editor);
  3953. if (e.lengthComputable) {
  3954. percent = e.loaded / e.total;
  3955. progressBar.show(percent);
  3956. }
  3957. },
  3958. onError: function onError(xhr) {
  3959. config.customAlert(t('上传图片错误'), 'error', t('上传图片错误') + "\uFF0C" + t('服务器返回状态') + ": " + xhr.status);
  3960. if (hooks.error) hooks.error(xhr, editor);
  3961. },
  3962. onFail: function onFail(xhr, resultStr) {
  3963. config.customAlert(t('上传图片失败'), 'error', t('上传图片返回结果错误') + ("\uFF0C" + t('返回结果') + ": ") + resultStr);
  3964. if (hooks.fail) hooks.fail(xhr, editor, resultStr);
  3965. },
  3966. onSuccess: function onSuccess(xhr, result) {
  3967. if (hooks.customInsert) {
  3968. var _context2;
  3969. // 自定义插入图片
  3970. hooks.customInsert((0, _bind["default"])(_context2 = _this_1.insertImg).call(_context2, _this_1), result, editor);
  3971. return;
  3972. }
  3973. if (result.errno != '0') {
  3974. // 返回格式不对,应该为 { errno: 0, data: [...] }
  3975. config.customAlert(t('上传图片失败'), 'error', t('上传图片返回结果错误') + "\uFF0C" + t('返回结果') + " errno=" + result.errno);
  3976. if (hooks.fail) hooks.fail(xhr, editor, result);
  3977. return;
  3978. } // 成功,插入图片
  3979. var data = result.data;
  3980. (0, _forEach["default"])(data).call(data, function (link) {
  3981. if (typeof link === 'string') {
  3982. _this_1.insertImg(link);
  3983. } else {
  3984. _this_1.insertImg(link.url, link.alt, link.href);
  3985. }
  3986. }); // 钩子函数
  3987. if (hooks.success) hooks.success(xhr, editor, result);
  3988. }
  3989. });
  3990. if (typeof xhr === 'string') {
  3991. // 上传被阻止
  3992. config.customAlert(xhr, 'error');
  3993. } // 阻止以下代码执行,重要!!!
  3994. return;
  3995. } // ------------------------------ 显示 base64 格式 ------------------------------
  3996. if (uploadImgShowBase64) {
  3997. util_1.arrForEach(files, function (file) {
  3998. var _this = _this_1;
  3999. var reader = new FileReader();
  4000. reader.readAsDataURL(file);
  4001. reader.onload = function () {
  4002. if (!this.result) return;
  4003. var imgLink = this.result.toString();
  4004. _this.insertImg(imgLink, imgLink);
  4005. };
  4006. });
  4007. }
  4008. };
  4009. return UploadImg;
  4010. }();
  4011. exports["default"] = UploadImg;
  4012. /***/ }),
  4013. /* 98 */
  4014. /***/ (function(module, exports, __webpack_require__) {
  4015. "use strict";
  4016. var _interopRequireDefault = __webpack_require__(0);
  4017. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  4018. var _every = _interopRequireDefault(__webpack_require__(410));
  4019. var _forEach = _interopRequireDefault(__webpack_require__(4));
  4020. var _slice = _interopRequireDefault(__webpack_require__(45));
  4021. (0, _defineProperty["default"])(exports, "__esModule", {
  4022. value: true
  4023. });
  4024. exports.dealTextNode = exports.isAllTodo = exports.isTodo = exports.getCursorNextNode = void 0;
  4025. /**
  4026. * 判断传入的单行顶级选区选取是不是todo
  4027. * @param editor 编辑器对象
  4028. */
  4029. function isTodo($topSelectElem) {
  4030. if ($topSelectElem.length) {
  4031. return $topSelectElem.attr('class') === 'w-e-todo';
  4032. }
  4033. return false;
  4034. }
  4035. exports.isTodo = isTodo;
  4036. /**
  4037. * 判断选中的内容是不是都是todo
  4038. * @param editor 编辑器对象
  4039. */
  4040. function isAllTodo(editor) {
  4041. var $topSelectElems = editor.selection.getSelectionRangeTopNodes(); // 排除为[]的情况
  4042. if ($topSelectElems.length === 0) return;
  4043. return (0, _every["default"])($topSelectElems).call($topSelectElems, function ($topSelectElem) {
  4044. return isTodo($topSelectElem);
  4045. });
  4046. }
  4047. exports.isAllTodo = isAllTodo;
  4048. /**
  4049. * 根据所在的文本节点和光标在文本节点的位置获取截断的后节点内容
  4050. * @param node 顶级节点
  4051. * @param textNode 光标所在的文本节点
  4052. * @param pos 光标在文本节点的位置
  4053. */
  4054. function getCursorNextNode(node, textNode, pos) {
  4055. var _context;
  4056. if (!node.hasChildNodes()) return;
  4057. var newNode = node.cloneNode(); // 判断光标是否在末尾
  4058. var end = false;
  4059. if (textNode.nodeValue === '') {
  4060. end = true;
  4061. }
  4062. var delArr = [];
  4063. (0, _forEach["default"])(_context = node.childNodes).call(_context, function (v) {
  4064. //光标后的内容
  4065. if (!isContains(v, textNode) && end) {
  4066. newNode.appendChild(v.cloneNode(true));
  4067. if (v.nodeName !== 'BR') {
  4068. delArr.push(v);
  4069. }
  4070. } // 光标所在的区域
  4071. if (isContains(v, textNode)) {
  4072. if (v.nodeType === 1) {
  4073. var childNode = getCursorNextNode(v, textNode, pos);
  4074. if (childNode && childNode.textContent !== '') newNode === null || newNode === void 0 ? void 0 : newNode.appendChild(childNode);
  4075. }
  4076. if (v.nodeType === 3) {
  4077. if (textNode.isEqualNode(v)) {
  4078. var textContent = dealTextNode(v, pos);
  4079. newNode.textContent = textContent;
  4080. }
  4081. }
  4082. end = true;
  4083. }
  4084. }); // 删除选中后原来的节点
  4085. (0, _forEach["default"])(delArr).call(delArr, function (v) {
  4086. var node = v;
  4087. node.remove();
  4088. });
  4089. return newNode;
  4090. }
  4091. exports.getCursorNextNode = getCursorNextNode;
  4092. /**
  4093. * 判断otherNode是否包含在node中
  4094. * @param node 父节点
  4095. * @param otherNode 需要判断是不是被包含的节点
  4096. */
  4097. function isContains(node, otherNode) {
  4098. // 兼容ie11中textNode不支持contains方法
  4099. if (node.nodeType === 3) {
  4100. return node.nodeValue === otherNode.nodeValue;
  4101. }
  4102. return node.contains(otherNode);
  4103. }
  4104. /**
  4105. * 获取新的文本节点
  4106. * @param node 要处理的文本节点
  4107. * @param pos 光标在文本节点所在的位置
  4108. * @param start 设置为true时保留开始位置到光标的内容,设置为false时删去开始的内容
  4109. */
  4110. function dealTextNode(node, pos, start) {
  4111. if (start === void 0) {
  4112. start = true;
  4113. }
  4114. var content = node.nodeValue;
  4115. var oldContent = content === null || content === void 0 ? void 0 : (0, _slice["default"])(content).call(content, 0, pos);
  4116. content = content === null || content === void 0 ? void 0 : (0, _slice["default"])(content).call(content, pos); // start为false时替换content和oldContent
  4117. if (!start) {
  4118. var temp = content;
  4119. content = oldContent;
  4120. oldContent = temp;
  4121. }
  4122. node.nodeValue = oldContent;
  4123. return content;
  4124. }
  4125. exports.dealTextNode = dealTextNode;
  4126. /***/ }),
  4127. /* 99 */
  4128. /***/ (function(module, exports, __webpack_require__) {
  4129. "use strict";
  4130. /**
  4131. * @description 双栈实现撤销恢复
  4132. * @author fangzhicong
  4133. */
  4134. var _interopRequireDefault = __webpack_require__(0);
  4135. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  4136. (0, _defineProperty["default"])(exports, "__esModule", {
  4137. value: true
  4138. });
  4139. var stack_1 = __webpack_require__(430);
  4140. var Cache =
  4141. /** @class */
  4142. function () {
  4143. function Cache(maxSize) {
  4144. this.maxSize = maxSize;
  4145. /**
  4146. * 上一步操作是否为 撤销/恢复
  4147. */
  4148. this.isRe = false;
  4149. this.data = new stack_1.CeilStack(maxSize);
  4150. this.revokeData = new stack_1.CeilStack(maxSize);
  4151. }
  4152. (0, _defineProperty["default"])(Cache.prototype, "size", {
  4153. /**
  4154. * 返回当前栈中的数据长度。格式为:[正常的数据的条数,被撤销的数据的条数]
  4155. */
  4156. get: function get() {
  4157. return [this.data.size, this.revokeData.size];
  4158. },
  4159. enumerable: false,
  4160. configurable: true
  4161. });
  4162. /**
  4163. * 重设数据缓存器的缓存长度(第一次有效)
  4164. */
  4165. Cache.prototype.resetMaxSize = function (maxSize) {
  4166. this.data.resetMax(maxSize);
  4167. this.revokeData.resetMax(maxSize);
  4168. };
  4169. /**
  4170. * 保存数据
  4171. */
  4172. Cache.prototype.save = function (data) {
  4173. if (this.isRe) {
  4174. this.revokeData.clear();
  4175. this.isRe = false;
  4176. }
  4177. this.data.instack(data);
  4178. return this;
  4179. };
  4180. /**
  4181. * 撤销
  4182. * @param fn 撤销时,如果有数据,执行的回调函数
  4183. */
  4184. Cache.prototype.revoke = function (fn) {
  4185. !this.isRe && (this.isRe = true);
  4186. var data = this.data.outstack();
  4187. if (data) {
  4188. this.revokeData.instack(data);
  4189. fn(data);
  4190. return true;
  4191. }
  4192. return false;
  4193. };
  4194. /**
  4195. * 恢复
  4196. * @param fn 恢复时,如果有数据,执行的回调函数
  4197. */
  4198. Cache.prototype.restore = function (fn) {
  4199. !this.isRe && (this.isRe = true);
  4200. var data = this.revokeData.outstack();
  4201. if (data) {
  4202. this.data.instack(data);
  4203. fn(data);
  4204. return true;
  4205. }
  4206. return false;
  4207. };
  4208. return Cache;
  4209. }();
  4210. exports["default"] = Cache;
  4211. /***/ }),
  4212. /* 100 */
  4213. /***/ (function(module, exports, __webpack_require__) {
  4214. var DESCRIPTORS = __webpack_require__(14);
  4215. var fails = __webpack_require__(11);
  4216. var createElement = __webpack_require__(73);
  4217. // Thank's IE8 for his funny defineProperty
  4218. module.exports = !DESCRIPTORS && !fails(function () {
  4219. return Object.defineProperty(createElement('div'), 'a', {
  4220. get: function () { return 7; }
  4221. }).a != 7;
  4222. });
  4223. /***/ }),
  4224. /* 101 */
  4225. /***/ (function(module, exports, __webpack_require__) {
  4226. var fails = __webpack_require__(11);
  4227. var replacement = /#|\.prototype\./;
  4228. var isForced = function (feature, detection) {
  4229. var value = data[normalize(feature)];
  4230. return value == POLYFILL ? true
  4231. : value == NATIVE ? false
  4232. : typeof detection == 'function' ? fails(detection)
  4233. : !!detection;
  4234. };
  4235. var normalize = isForced.normalize = function (string) {
  4236. return String(string).replace(replacement, '.').toLowerCase();
  4237. };
  4238. var data = isForced.data = {};
  4239. var NATIVE = isForced.NATIVE = 'N';
  4240. var POLYFILL = isForced.POLYFILL = 'P';
  4241. module.exports = isForced;
  4242. /***/ }),
  4243. /* 102 */
  4244. /***/ (function(module, exports, __webpack_require__) {
  4245. var store = __webpack_require__(103);
  4246. var functionToString = Function.toString;
  4247. // this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper
  4248. if (typeof store.inspectSource != 'function') {
  4249. store.inspectSource = function (it) {
  4250. return functionToString.call(it);
  4251. };
  4252. }
  4253. module.exports = store.inspectSource;
  4254. /***/ }),
  4255. /* 103 */
  4256. /***/ (function(module, exports, __webpack_require__) {
  4257. var global = __webpack_require__(8);
  4258. var setGlobal = __webpack_require__(166);
  4259. var SHARED = '__core-js_shared__';
  4260. var store = global[SHARED] || setGlobal(SHARED, {});
  4261. module.exports = store;
  4262. /***/ }),
  4263. /* 104 */
  4264. /***/ (function(module, exports, __webpack_require__) {
  4265. "use strict";
  4266. var getPrototypeOf = __webpack_require__(105);
  4267. var createNonEnumerableProperty = __webpack_require__(19);
  4268. var has = __webpack_require__(16);
  4269. var wellKnownSymbol = __webpack_require__(10);
  4270. var IS_PURE = __webpack_require__(43);
  4271. var ITERATOR = wellKnownSymbol('iterator');
  4272. var BUGGY_SAFARI_ITERATORS = false;
  4273. var returnThis = function () { return this; };
  4274. // `%IteratorPrototype%` object
  4275. // https://tc39.github.io/ecma262/#sec-%iteratorprototype%-object
  4276. var IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;
  4277. if ([].keys) {
  4278. arrayIterator = [].keys();
  4279. // Safari 8 has buggy iterators w/o `next`
  4280. if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;
  4281. else {
  4282. PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));
  4283. if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;
  4284. }
  4285. }
  4286. if (IteratorPrototype == undefined) IteratorPrototype = {};
  4287. // 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
  4288. if (!IS_PURE && !has(IteratorPrototype, ITERATOR)) {
  4289. createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis);
  4290. }
  4291. module.exports = {
  4292. IteratorPrototype: IteratorPrototype,
  4293. BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS
  4294. };
  4295. /***/ }),
  4296. /* 105 */
  4297. /***/ (function(module, exports, __webpack_require__) {
  4298. var has = __webpack_require__(16);
  4299. var toObject = __webpack_require__(31);
  4300. var sharedKey = __webpack_require__(63);
  4301. var CORRECT_PROTOTYPE_GETTER = __webpack_require__(168);
  4302. var IE_PROTO = sharedKey('IE_PROTO');
  4303. var ObjectPrototype = Object.prototype;
  4304. // `Object.getPrototypeOf` method
  4305. // https://tc39.github.io/ecma262/#sec-object.getprototypeof
  4306. module.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {
  4307. O = toObject(O);
  4308. if (has(O, IE_PROTO)) return O[IE_PROTO];
  4309. if (typeof O.constructor == 'function' && O instanceof O.constructor) {
  4310. return O.constructor.prototype;
  4311. } return O instanceof Object ? ObjectPrototype : null;
  4312. };
  4313. /***/ }),
  4314. /* 106 */
  4315. /***/ (function(module, exports, __webpack_require__) {
  4316. var NATIVE_SYMBOL = __webpack_require__(76);
  4317. module.exports = NATIVE_SYMBOL
  4318. // eslint-disable-next-line no-undef
  4319. && !Symbol.sham
  4320. // eslint-disable-next-line no-undef
  4321. && typeof Symbol.iterator == 'symbol';
  4322. /***/ }),
  4323. /* 107 */
  4324. /***/ (function(module, exports, __webpack_require__) {
  4325. var has = __webpack_require__(16);
  4326. var toIndexedObject = __webpack_require__(30);
  4327. var indexOf = __webpack_require__(78).indexOf;
  4328. var hiddenKeys = __webpack_require__(51);
  4329. module.exports = function (object, names) {
  4330. var O = toIndexedObject(object);
  4331. var i = 0;
  4332. var result = [];
  4333. var key;
  4334. for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key);
  4335. // Don't enum bug & hidden keys
  4336. while (names.length > i) if (has(O, key = names[i++])) {
  4337. ~indexOf(result, key) || result.push(key);
  4338. }
  4339. return result;
  4340. };
  4341. /***/ }),
  4342. /* 108 */
  4343. /***/ (function(module, exports, __webpack_require__) {
  4344. var getBuiltIn = __webpack_require__(36);
  4345. module.exports = getBuiltIn('document', 'documentElement');
  4346. /***/ }),
  4347. /* 109 */
  4348. /***/ (function(module, exports, __webpack_require__) {
  4349. var global = __webpack_require__(8);
  4350. module.exports = global.Promise;
  4351. /***/ }),
  4352. /* 110 */
  4353. /***/ (function(module, exports, __webpack_require__) {
  4354. var redefine = __webpack_require__(53);
  4355. module.exports = function (target, src, options) {
  4356. for (var key in src) {
  4357. if (options && options.unsafe && target[key]) target[key] = src[key];
  4358. else redefine(target, key, src[key], options);
  4359. } return target;
  4360. };
  4361. /***/ }),
  4362. /* 111 */
  4363. /***/ (function(module, exports, __webpack_require__) {
  4364. "use strict";
  4365. var getBuiltIn = __webpack_require__(36);
  4366. var definePropertyModule = __webpack_require__(18);
  4367. var wellKnownSymbol = __webpack_require__(10);
  4368. var DESCRIPTORS = __webpack_require__(14);
  4369. var SPECIES = wellKnownSymbol('species');
  4370. module.exports = function (CONSTRUCTOR_NAME) {
  4371. var Constructor = getBuiltIn(CONSTRUCTOR_NAME);
  4372. var defineProperty = definePropertyModule.f;
  4373. if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {
  4374. defineProperty(Constructor, SPECIES, {
  4375. configurable: true,
  4376. get: function () { return this; }
  4377. });
  4378. }
  4379. };
  4380. /***/ }),
  4381. /* 112 */
  4382. /***/ (function(module, exports, __webpack_require__) {
  4383. var wellKnownSymbol = __webpack_require__(10);
  4384. var Iterators = __webpack_require__(44);
  4385. var ITERATOR = wellKnownSymbol('iterator');
  4386. var ArrayPrototype = Array.prototype;
  4387. // check on default Array iterator
  4388. module.exports = function (it) {
  4389. return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);
  4390. };
  4391. /***/ }),
  4392. /* 113 */
  4393. /***/ (function(module, exports, __webpack_require__) {
  4394. var classof = __webpack_require__(65);
  4395. var Iterators = __webpack_require__(44);
  4396. var wellKnownSymbol = __webpack_require__(10);
  4397. var ITERATOR = wellKnownSymbol('iterator');
  4398. module.exports = function (it) {
  4399. if (it != undefined) return it[ITERATOR]
  4400. || it['@@iterator']
  4401. || Iterators[classof(it)];
  4402. };
  4403. /***/ }),
  4404. /* 114 */
  4405. /***/ (function(module, exports, __webpack_require__) {
  4406. var anObject = __webpack_require__(25);
  4407. // call something on iterator step with safe closing on error
  4408. module.exports = function (iterator, fn, value, ENTRIES) {
  4409. try {
  4410. return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);
  4411. // 7.4.6 IteratorClose(iterator, completion)
  4412. } catch (error) {
  4413. var returnMethod = iterator['return'];
  4414. if (returnMethod !== undefined) anObject(returnMethod.call(iterator));
  4415. throw error;
  4416. }
  4417. };
  4418. /***/ }),
  4419. /* 115 */
  4420. /***/ (function(module, exports, __webpack_require__) {
  4421. var wellKnownSymbol = __webpack_require__(10);
  4422. var ITERATOR = wellKnownSymbol('iterator');
  4423. var SAFE_CLOSING = false;
  4424. try {
  4425. var called = 0;
  4426. var iteratorWithReturn = {
  4427. next: function () {
  4428. return { done: !!called++ };
  4429. },
  4430. 'return': function () {
  4431. SAFE_CLOSING = true;
  4432. }
  4433. };
  4434. iteratorWithReturn[ITERATOR] = function () {
  4435. return this;
  4436. };
  4437. // eslint-disable-next-line no-throw-literal
  4438. Array.from(iteratorWithReturn, function () { throw 2; });
  4439. } catch (error) { /* empty */ }
  4440. module.exports = function (exec, SKIP_CLOSING) {
  4441. if (!SKIP_CLOSING && !SAFE_CLOSING) return false;
  4442. var ITERATION_SUPPORT = false;
  4443. try {
  4444. var object = {};
  4445. object[ITERATOR] = function () {
  4446. return {
  4447. next: function () {
  4448. return { done: ITERATION_SUPPORT = true };
  4449. }
  4450. };
  4451. };
  4452. exec(object);
  4453. } catch (error) { /* empty */ }
  4454. return ITERATION_SUPPORT;
  4455. };
  4456. /***/ }),
  4457. /* 116 */
  4458. /***/ (function(module, exports, __webpack_require__) {
  4459. var anObject = __webpack_require__(25);
  4460. var aFunction = __webpack_require__(41);
  4461. var wellKnownSymbol = __webpack_require__(10);
  4462. var SPECIES = wellKnownSymbol('species');
  4463. // `SpeciesConstructor` abstract operation
  4464. // https://tc39.github.io/ecma262/#sec-speciesconstructor
  4465. module.exports = function (O, defaultConstructor) {
  4466. var C = anObject(O).constructor;
  4467. var S;
  4468. return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aFunction(S);
  4469. };
  4470. /***/ }),
  4471. /* 117 */
  4472. /***/ (function(module, exports, __webpack_require__) {
  4473. var global = __webpack_require__(8);
  4474. var fails = __webpack_require__(11);
  4475. var classof = __webpack_require__(34);
  4476. var bind = __webpack_require__(40);
  4477. var html = __webpack_require__(108);
  4478. var createElement = __webpack_require__(73);
  4479. var IS_IOS = __webpack_require__(118);
  4480. var location = global.location;
  4481. var set = global.setImmediate;
  4482. var clear = global.clearImmediate;
  4483. var process = global.process;
  4484. var MessageChannel = global.MessageChannel;
  4485. var Dispatch = global.Dispatch;
  4486. var counter = 0;
  4487. var queue = {};
  4488. var ONREADYSTATECHANGE = 'onreadystatechange';
  4489. var defer, channel, port;
  4490. var run = function (id) {
  4491. // eslint-disable-next-line no-prototype-builtins
  4492. if (queue.hasOwnProperty(id)) {
  4493. var fn = queue[id];
  4494. delete queue[id];
  4495. fn();
  4496. }
  4497. };
  4498. var runner = function (id) {
  4499. return function () {
  4500. run(id);
  4501. };
  4502. };
  4503. var listener = function (event) {
  4504. run(event.data);
  4505. };
  4506. var post = function (id) {
  4507. // old engines have not location.origin
  4508. global.postMessage(id + '', location.protocol + '//' + location.host);
  4509. };
  4510. // Node.js 0.9+ & IE10+ has setImmediate, otherwise:
  4511. if (!set || !clear) {
  4512. set = function setImmediate(fn) {
  4513. var args = [];
  4514. var i = 1;
  4515. while (arguments.length > i) args.push(arguments[i++]);
  4516. queue[++counter] = function () {
  4517. // eslint-disable-next-line no-new-func
  4518. (typeof fn == 'function' ? fn : Function(fn)).apply(undefined, args);
  4519. };
  4520. defer(counter);
  4521. return counter;
  4522. };
  4523. clear = function clearImmediate(id) {
  4524. delete queue[id];
  4525. };
  4526. // Node.js 0.8-
  4527. if (classof(process) == 'process') {
  4528. defer = function (id) {
  4529. process.nextTick(runner(id));
  4530. };
  4531. // Sphere (JS game engine) Dispatch API
  4532. } else if (Dispatch && Dispatch.now) {
  4533. defer = function (id) {
  4534. Dispatch.now(runner(id));
  4535. };
  4536. // Browsers with MessageChannel, includes WebWorkers
  4537. // except iOS - https://github.com/zloirock/core-js/issues/624
  4538. } else if (MessageChannel && !IS_IOS) {
  4539. channel = new MessageChannel();
  4540. port = channel.port2;
  4541. channel.port1.onmessage = listener;
  4542. defer = bind(port.postMessage, port, 1);
  4543. // Browsers with postMessage, skip WebWorkers
  4544. // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'
  4545. } else if (
  4546. global.addEventListener &&
  4547. typeof postMessage == 'function' &&
  4548. !global.importScripts &&
  4549. !fails(post) &&
  4550. location.protocol !== 'file:'
  4551. ) {
  4552. defer = post;
  4553. global.addEventListener('message', listener, false);
  4554. // IE8-
  4555. } else if (ONREADYSTATECHANGE in createElement('script')) {
  4556. defer = function (id) {
  4557. html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {
  4558. html.removeChild(this);
  4559. run(id);
  4560. };
  4561. };
  4562. // Rest old browsers
  4563. } else {
  4564. defer = function (id) {
  4565. setTimeout(runner(id), 0);
  4566. };
  4567. }
  4568. }
  4569. module.exports = {
  4570. set: set,
  4571. clear: clear
  4572. };
  4573. /***/ }),
  4574. /* 118 */
  4575. /***/ (function(module, exports, __webpack_require__) {
  4576. var userAgent = __webpack_require__(84);
  4577. module.exports = /(iphone|ipod|ipad).*applewebkit/i.test(userAgent);
  4578. /***/ }),
  4579. /* 119 */
  4580. /***/ (function(module, exports, __webpack_require__) {
  4581. var anObject = __webpack_require__(25);
  4582. var isObject = __webpack_require__(13);
  4583. var newPromiseCapability = __webpack_require__(85);
  4584. module.exports = function (C, x) {
  4585. anObject(C);
  4586. if (isObject(x) && x.constructor === C) return x;
  4587. var promiseCapability = newPromiseCapability.f(C);
  4588. var resolve = promiseCapability.resolve;
  4589. resolve(x);
  4590. return promiseCapability.promise;
  4591. };
  4592. /***/ }),
  4593. /* 120 */
  4594. /***/ (function(module, exports) {
  4595. module.exports = function (exec) {
  4596. try {
  4597. return { error: false, value: exec() };
  4598. } catch (error) {
  4599. return { error: true, value: error };
  4600. }
  4601. };
  4602. /***/ }),
  4603. /* 121 */
  4604. /***/ (function(module, exports, __webpack_require__) {
  4605. module.exports = __webpack_require__(197);
  4606. /***/ }),
  4607. /* 122 */
  4608. /***/ (function(module, exports, __webpack_require__) {
  4609. "use strict";
  4610. var $ = __webpack_require__(5);
  4611. var global = __webpack_require__(8);
  4612. var InternalMetadataModule = __webpack_require__(123);
  4613. var fails = __webpack_require__(11);
  4614. var createNonEnumerableProperty = __webpack_require__(19);
  4615. var iterate = __webpack_require__(66);
  4616. var anInstance = __webpack_require__(83);
  4617. var isObject = __webpack_require__(13);
  4618. var setToStringTag = __webpack_require__(37);
  4619. var defineProperty = __webpack_require__(18).f;
  4620. var forEach = __webpack_require__(32).forEach;
  4621. var DESCRIPTORS = __webpack_require__(14);
  4622. var InternalStateModule = __webpack_require__(42);
  4623. var setInternalState = InternalStateModule.set;
  4624. var internalStateGetterFor = InternalStateModule.getterFor;
  4625. module.exports = function (CONSTRUCTOR_NAME, wrapper, common) {
  4626. var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;
  4627. var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;
  4628. var ADDER = IS_MAP ? 'set' : 'add';
  4629. var NativeConstructor = global[CONSTRUCTOR_NAME];
  4630. var NativePrototype = NativeConstructor && NativeConstructor.prototype;
  4631. var exported = {};
  4632. var Constructor;
  4633. if (!DESCRIPTORS || typeof NativeConstructor != 'function'
  4634. || !(IS_WEAK || NativePrototype.forEach && !fails(function () { new NativeConstructor().entries().next(); }))
  4635. ) {
  4636. // create collection constructor
  4637. Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);
  4638. InternalMetadataModule.REQUIRED = true;
  4639. } else {
  4640. Constructor = wrapper(function (target, iterable) {
  4641. setInternalState(anInstance(target, Constructor, CONSTRUCTOR_NAME), {
  4642. type: CONSTRUCTOR_NAME,
  4643. collection: new NativeConstructor()
  4644. });
  4645. if (iterable != undefined) iterate(iterable, target[ADDER], target, IS_MAP);
  4646. });
  4647. var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);
  4648. forEach(['add', 'clear', 'delete', 'forEach', 'get', 'has', 'set', 'keys', 'values', 'entries'], function (KEY) {
  4649. var IS_ADDER = KEY == 'add' || KEY == 'set';
  4650. if (KEY in NativePrototype && !(IS_WEAK && KEY == 'clear')) {
  4651. createNonEnumerableProperty(Constructor.prototype, KEY, function (a, b) {
  4652. var collection = getInternalState(this).collection;
  4653. if (!IS_ADDER && IS_WEAK && !isObject(a)) return KEY == 'get' ? undefined : false;
  4654. var result = collection[KEY](a === 0 ? 0 : a, b);
  4655. return IS_ADDER ? this : result;
  4656. });
  4657. }
  4658. });
  4659. IS_WEAK || defineProperty(Constructor.prototype, 'size', {
  4660. configurable: true,
  4661. get: function () {
  4662. return getInternalState(this).collection.size;
  4663. }
  4664. });
  4665. }
  4666. setToStringTag(Constructor, CONSTRUCTOR_NAME, false, true);
  4667. exported[CONSTRUCTOR_NAME] = Constructor;
  4668. $({ global: true, forced: true }, exported);
  4669. if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);
  4670. return Constructor;
  4671. };
  4672. /***/ }),
  4673. /* 123 */
  4674. /***/ (function(module, exports, __webpack_require__) {
  4675. var hiddenKeys = __webpack_require__(51);
  4676. var isObject = __webpack_require__(13);
  4677. var has = __webpack_require__(16);
  4678. var defineProperty = __webpack_require__(18).f;
  4679. var uid = __webpack_require__(64);
  4680. var FREEZING = __webpack_require__(200);
  4681. var METADATA = uid('meta');
  4682. var id = 0;
  4683. var isExtensible = Object.isExtensible || function () {
  4684. return true;
  4685. };
  4686. var setMetadata = function (it) {
  4687. defineProperty(it, METADATA, { value: {
  4688. objectID: 'O' + ++id, // object ID
  4689. weakData: {} // weak collections IDs
  4690. } });
  4691. };
  4692. var fastKey = function (it, create) {
  4693. // return a primitive with prefix
  4694. if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;
  4695. if (!has(it, METADATA)) {
  4696. // can't set metadata to uncaught frozen object
  4697. if (!isExtensible(it)) return 'F';
  4698. // not necessary to add metadata
  4699. if (!create) return 'E';
  4700. // add missing metadata
  4701. setMetadata(it);
  4702. // return object ID
  4703. } return it[METADATA].objectID;
  4704. };
  4705. var getWeakData = function (it, create) {
  4706. if (!has(it, METADATA)) {
  4707. // can't set metadata to uncaught frozen object
  4708. if (!isExtensible(it)) return true;
  4709. // not necessary to add metadata
  4710. if (!create) return false;
  4711. // add missing metadata
  4712. setMetadata(it);
  4713. // return the store of weak collections IDs
  4714. } return it[METADATA].weakData;
  4715. };
  4716. // add metadata on freeze-family methods calling
  4717. var onFreeze = function (it) {
  4718. if (FREEZING && meta.REQUIRED && isExtensible(it) && !has(it, METADATA)) setMetadata(it);
  4719. return it;
  4720. };
  4721. var meta = module.exports = {
  4722. REQUIRED: false,
  4723. fastKey: fastKey,
  4724. getWeakData: getWeakData,
  4725. onFreeze: onFreeze
  4726. };
  4727. hiddenKeys[METADATA] = true;
  4728. /***/ }),
  4729. /* 124 */
  4730. /***/ (function(module, exports, __webpack_require__) {
  4731. "use strict";
  4732. var defineProperty = __webpack_require__(18).f;
  4733. var create = __webpack_require__(77);
  4734. var redefineAll = __webpack_require__(110);
  4735. var bind = __webpack_require__(40);
  4736. var anInstance = __webpack_require__(83);
  4737. var iterate = __webpack_require__(66);
  4738. var defineIterator = __webpack_require__(75);
  4739. var setSpecies = __webpack_require__(111);
  4740. var DESCRIPTORS = __webpack_require__(14);
  4741. var fastKey = __webpack_require__(123).fastKey;
  4742. var InternalStateModule = __webpack_require__(42);
  4743. var setInternalState = InternalStateModule.set;
  4744. var internalStateGetterFor = InternalStateModule.getterFor;
  4745. module.exports = {
  4746. getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {
  4747. var C = wrapper(function (that, iterable) {
  4748. anInstance(that, C, CONSTRUCTOR_NAME);
  4749. setInternalState(that, {
  4750. type: CONSTRUCTOR_NAME,
  4751. index: create(null),
  4752. first: undefined,
  4753. last: undefined,
  4754. size: 0
  4755. });
  4756. if (!DESCRIPTORS) that.size = 0;
  4757. if (iterable != undefined) iterate(iterable, that[ADDER], that, IS_MAP);
  4758. });
  4759. var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);
  4760. var define = function (that, key, value) {
  4761. var state = getInternalState(that);
  4762. var entry = getEntry(that, key);
  4763. var previous, index;
  4764. // change existing entry
  4765. if (entry) {
  4766. entry.value = value;
  4767. // create new entry
  4768. } else {
  4769. state.last = entry = {
  4770. index: index = fastKey(key, true),
  4771. key: key,
  4772. value: value,
  4773. previous: previous = state.last,
  4774. next: undefined,
  4775. removed: false
  4776. };
  4777. if (!state.first) state.first = entry;
  4778. if (previous) previous.next = entry;
  4779. if (DESCRIPTORS) state.size++;
  4780. else that.size++;
  4781. // add to index
  4782. if (index !== 'F') state.index[index] = entry;
  4783. } return that;
  4784. };
  4785. var getEntry = function (that, key) {
  4786. var state = getInternalState(that);
  4787. // fast case
  4788. var index = fastKey(key);
  4789. var entry;
  4790. if (index !== 'F') return state.index[index];
  4791. // frozen object case
  4792. for (entry = state.first; entry; entry = entry.next) {
  4793. if (entry.key == key) return entry;
  4794. }
  4795. };
  4796. redefineAll(C.prototype, {
  4797. // 23.1.3.1 Map.prototype.clear()
  4798. // 23.2.3.2 Set.prototype.clear()
  4799. clear: function clear() {
  4800. var that = this;
  4801. var state = getInternalState(that);
  4802. var data = state.index;
  4803. var entry = state.first;
  4804. while (entry) {
  4805. entry.removed = true;
  4806. if (entry.previous) entry.previous = entry.previous.next = undefined;
  4807. delete data[entry.index];
  4808. entry = entry.next;
  4809. }
  4810. state.first = state.last = undefined;
  4811. if (DESCRIPTORS) state.size = 0;
  4812. else that.size = 0;
  4813. },
  4814. // 23.1.3.3 Map.prototype.delete(key)
  4815. // 23.2.3.4 Set.prototype.delete(value)
  4816. 'delete': function (key) {
  4817. var that = this;
  4818. var state = getInternalState(that);
  4819. var entry = getEntry(that, key);
  4820. if (entry) {
  4821. var next = entry.next;
  4822. var prev = entry.previous;
  4823. delete state.index[entry.index];
  4824. entry.removed = true;
  4825. if (prev) prev.next = next;
  4826. if (next) next.previous = prev;
  4827. if (state.first == entry) state.first = next;
  4828. if (state.last == entry) state.last = prev;
  4829. if (DESCRIPTORS) state.size--;
  4830. else that.size--;
  4831. } return !!entry;
  4832. },
  4833. // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)
  4834. // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)
  4835. forEach: function forEach(callbackfn /* , that = undefined */) {
  4836. var state = getInternalState(this);
  4837. var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);
  4838. var entry;
  4839. while (entry = entry ? entry.next : state.first) {
  4840. boundFunction(entry.value, entry.key, this);
  4841. // revert to the last existing entry
  4842. while (entry && entry.removed) entry = entry.previous;
  4843. }
  4844. },
  4845. // 23.1.3.7 Map.prototype.has(key)
  4846. // 23.2.3.7 Set.prototype.has(value)
  4847. has: function has(key) {
  4848. return !!getEntry(this, key);
  4849. }
  4850. });
  4851. redefineAll(C.prototype, IS_MAP ? {
  4852. // 23.1.3.6 Map.prototype.get(key)
  4853. get: function get(key) {
  4854. var entry = getEntry(this, key);
  4855. return entry && entry.value;
  4856. },
  4857. // 23.1.3.9 Map.prototype.set(key, value)
  4858. set: function set(key, value) {
  4859. return define(this, key === 0 ? 0 : key, value);
  4860. }
  4861. } : {
  4862. // 23.2.3.1 Set.prototype.add(value)
  4863. add: function add(value) {
  4864. return define(this, value = value === 0 ? 0 : value, value);
  4865. }
  4866. });
  4867. if (DESCRIPTORS) defineProperty(C.prototype, 'size', {
  4868. get: function () {
  4869. return getInternalState(this).size;
  4870. }
  4871. });
  4872. return C;
  4873. },
  4874. setStrong: function (C, CONSTRUCTOR_NAME, IS_MAP) {
  4875. var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';
  4876. var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);
  4877. var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);
  4878. // add .keys, .values, .entries, [@@iterator]
  4879. // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11
  4880. defineIterator(C, CONSTRUCTOR_NAME, function (iterated, kind) {
  4881. setInternalState(this, {
  4882. type: ITERATOR_NAME,
  4883. target: iterated,
  4884. state: getInternalCollectionState(iterated),
  4885. kind: kind,
  4886. last: undefined
  4887. });
  4888. }, function () {
  4889. var state = getInternalIteratorState(this);
  4890. var kind = state.kind;
  4891. var entry = state.last;
  4892. // revert to the last existing entry
  4893. while (entry && entry.removed) entry = entry.previous;
  4894. // get next entry
  4895. if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {
  4896. // or finish the iteration
  4897. state.target = undefined;
  4898. return { value: undefined, done: true };
  4899. }
  4900. // return step by kind
  4901. if (kind == 'keys') return { value: entry.key, done: false };
  4902. if (kind == 'values') return { value: entry.value, done: false };
  4903. return { value: [entry.key, entry.value], done: false };
  4904. }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);
  4905. // add [@@species], 23.1.2.2, 23.2.2.2
  4906. setSpecies(CONSTRUCTOR_NAME);
  4907. }
  4908. };
  4909. /***/ }),
  4910. /* 125 */
  4911. /***/ (function(module, exports, __webpack_require__) {
  4912. var defineWellKnownSymbol = __webpack_require__(12);
  4913. // `Symbol.iterator` well-known symbol
  4914. // https://tc39.github.io/ecma262/#sec-symbol.iterator
  4915. defineWellKnownSymbol('iterator');
  4916. /***/ }),
  4917. /* 126 */
  4918. /***/ (function(module, exports, __webpack_require__) {
  4919. var internalObjectKeys = __webpack_require__(107);
  4920. var enumBugKeys = __webpack_require__(80);
  4921. var hiddenKeys = enumBugKeys.concat('length', 'prototype');
  4922. // `Object.getOwnPropertyNames` method
  4923. // https://tc39.github.io/ecma262/#sec-object.getownpropertynames
  4924. exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
  4925. return internalObjectKeys(O, hiddenKeys);
  4926. };
  4927. /***/ }),
  4928. /* 127 */
  4929. /***/ (function(module, exports) {
  4930. exports.f = Object.getOwnPropertySymbols;
  4931. /***/ }),
  4932. /* 128 */
  4933. /***/ (function(module, exports, __webpack_require__) {
  4934. module.exports = __webpack_require__(268);
  4935. /***/ }),
  4936. /* 129 */
  4937. /***/ (function(module, exports, __webpack_require__) {
  4938. "use strict";
  4939. /**
  4940. * @description 样式配置
  4941. * @author wangfupeng
  4942. */
  4943. var _interopRequireDefault = __webpack_require__(0);
  4944. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  4945. (0, _defineProperty["default"])(exports, "__esModule", {
  4946. value: true
  4947. });
  4948. exports["default"] = {
  4949. zIndex: 10000
  4950. };
  4951. /***/ }),
  4952. /* 130 */
  4953. /***/ (function(module, exports, __webpack_require__) {
  4954. "use strict";
  4955. /**
  4956. * @description 默认常量配置
  4957. * @author xiaokyo
  4958. */
  4959. var _interopRequireDefault = __webpack_require__(0);
  4960. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  4961. (0, _defineProperty["default"])(exports, "__esModule", {
  4962. value: true
  4963. });
  4964. exports["default"] = {
  4965. focus: true,
  4966. height: 300,
  4967. placeholder: '请输入正文',
  4968. zIndexFullScreen: 10002,
  4969. showFullScreen: true
  4970. };
  4971. /***/ }),
  4972. /* 131 */
  4973. /***/ (function(module, exports, __webpack_require__) {
  4974. "use strict";
  4975. /**
  4976. * @description 处理粘贴逻辑
  4977. * @author wangfupeng
  4978. */
  4979. var _interopRequireDefault = __webpack_require__(0);
  4980. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  4981. var _forEach = _interopRequireDefault(__webpack_require__(4));
  4982. (0, _defineProperty["default"])(exports, "__esModule", {
  4983. value: true
  4984. });
  4985. exports.getPasteImgs = exports.getPasteHtml = exports.getPasteText = void 0;
  4986. var tslib_1 = __webpack_require__(2);
  4987. var util_1 = __webpack_require__(6);
  4988. var parse_html_1 = tslib_1.__importDefault(__webpack_require__(292));
  4989. /**
  4990. * 获取粘贴的纯文本
  4991. * @param e Event 参数
  4992. */
  4993. function getPasteText(e) {
  4994. // const clipboardData = e.clipboardData || (e.originalEvent && e.originalEvent.clipboardData)
  4995. var clipboardData = e.clipboardData; // 暂不考虑 originalEvent 的情况
  4996. var pasteText = '';
  4997. if (clipboardData == null) {
  4998. pasteText = window.clipboardData && window.clipboardData.getData('text');
  4999. } else {
  5000. pasteText = clipboardData.getData('text/plain');
  5001. }
  5002. return util_1.replaceHtmlSymbol(pasteText);
  5003. }
  5004. exports.getPasteText = getPasteText;
  5005. /**
  5006. * 获取粘贴的 html 字符串
  5007. * @param e Event 参数
  5008. * @param filterStyle 是否过滤 style 样式
  5009. * @param ignoreImg 是否忽略 img 标签
  5010. */
  5011. function getPasteHtml(e, filterStyle, ignoreImg) {
  5012. if (filterStyle === void 0) {
  5013. filterStyle = true;
  5014. }
  5015. if (ignoreImg === void 0) {
  5016. ignoreImg = false;
  5017. }
  5018. var clipboardData = e.clipboardData; // 暂不考虑 originalEvent 的情况
  5019. var pasteHtml = '';
  5020. if (clipboardData) {
  5021. pasteHtml = clipboardData.getData('text/html');
  5022. } // 无法通过 'text/html' 格式获取 html,则尝试获取 text
  5023. if (!pasteHtml) {
  5024. var text = getPasteText(e);
  5025. if (!text) {
  5026. return ''; // 没有找到任何文字,则返回
  5027. }
  5028. pasteHtml = "<p>" + text + "</p>";
  5029. } // 转译<1,后面跟数字的转译成 &lt;1
  5030. pasteHtml = pasteHtml.replace(/<(\d)/gm, function (_, num) {
  5031. return '&lt;' + num;
  5032. }); // pdf复制只会有一个meta标签,parseHtml中的过滤meta标签会导致后面内容丢失
  5033. pasteHtml = pasteHtml.replace(/<(\/?meta.*?)>/gim, ''); // 剔除多余的标签、属性
  5034. pasteHtml = parse_html_1["default"](pasteHtml, filterStyle, ignoreImg);
  5035. return pasteHtml;
  5036. }
  5037. exports.getPasteHtml = getPasteHtml;
  5038. /**
  5039. * 获取粘贴的图片文件
  5040. * @param e Event 参数
  5041. */
  5042. function getPasteImgs(e) {
  5043. var _a;
  5044. var result = [];
  5045. var txt = getPasteText(e);
  5046. if (txt) {
  5047. // 有文字,就忽略图片
  5048. return result;
  5049. }
  5050. var items = (_a = e.clipboardData) === null || _a === void 0 ? void 0 : _a.items;
  5051. if (!items) return result;
  5052. (0, _forEach["default"])(util_1).call(util_1, items, function (key, value) {
  5053. var type = value.type;
  5054. if (/image/i.test(type)) {
  5055. result.push(value.getAsFile());
  5056. }
  5057. });
  5058. return result;
  5059. }
  5060. exports.getPasteImgs = getPasteImgs;
  5061. /***/ }),
  5062. /* 132 */
  5063. /***/ (function(module, exports, __webpack_require__) {
  5064. module.exports = __webpack_require__(294);
  5065. /***/ }),
  5066. /* 133 */
  5067. /***/ (function(module, exports, __webpack_require__) {
  5068. module.exports = __webpack_require__(310);
  5069. /***/ }),
  5070. /* 134 */
  5071. /***/ (function(module, exports, __webpack_require__) {
  5072. "use strict";
  5073. /**
  5074. * @description 下拉列表 class
  5075. */
  5076. var _interopRequireDefault = __webpack_require__(0);
  5077. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  5078. var _forEach = _interopRequireDefault(__webpack_require__(4));
  5079. var _setTimeout2 = _interopRequireDefault(__webpack_require__(46));
  5080. (0, _defineProperty["default"])(exports, "__esModule", {
  5081. value: true
  5082. });
  5083. var tslib_1 = __webpack_require__(2);
  5084. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  5085. var const_1 = __webpack_require__(7);
  5086. var DropList =
  5087. /** @class */
  5088. function () {
  5089. function DropList(menu, conf) {
  5090. var _this = this;
  5091. this.hideTimeoutId = 0;
  5092. this.menu = menu;
  5093. this.conf = conf; // 容器
  5094. var $container = dom_core_1["default"]('<div class="w-e-droplist"></div>'); // 标题
  5095. var $title = dom_core_1["default"]("<p>" + conf.title + "</p>");
  5096. $title.addClass('w-e-dp-title');
  5097. $container.append($title); // 列表和类型
  5098. var list = conf.list || [];
  5099. var type = conf.type || 'list'; // item 的点击事件
  5100. var clickHandler = conf.clickHandler || const_1.EMPTY_FN; // 加入 DOM 并绑定事件
  5101. var $list = dom_core_1["default"]('<ul class="' + (type === 'list' ? 'w-e-list' : 'w-e-block') + '"></ul>');
  5102. (0, _forEach["default"])(list).call(list, function (item) {
  5103. var $elem = item.$elem;
  5104. var value = item.value;
  5105. var $li = dom_core_1["default"]('<li class="w-e-item"></li>');
  5106. if ($elem) {
  5107. $li.append($elem);
  5108. $list.append($li);
  5109. $li.on('click', function (e) {
  5110. clickHandler(value); // 阻止冒泡
  5111. e.stopPropagation(); // item 点击之后,隐藏 list
  5112. _this.hideTimeoutId = (0, _setTimeout2["default"])(function () {
  5113. _this.hide();
  5114. });
  5115. });
  5116. }
  5117. });
  5118. $container.append($list); // 绑定隐藏事件
  5119. $container.on('mouseleave', function () {
  5120. _this.hideTimeoutId = (0, _setTimeout2["default"])(function () {
  5121. _this.hide();
  5122. });
  5123. }); // 记录属性
  5124. this.$container = $container;
  5125. this.rendered = false;
  5126. this._show = false;
  5127. }
  5128. /**
  5129. * 显示 DropList
  5130. */
  5131. DropList.prototype.show = function () {
  5132. if (this.hideTimeoutId) {
  5133. // 清除之前的定时隐藏
  5134. clearTimeout(this.hideTimeoutId);
  5135. }
  5136. var menu = this.menu;
  5137. var $menuELem = menu.$elem;
  5138. var $container = this.$container;
  5139. if (this._show) {
  5140. return;
  5141. }
  5142. if (this.rendered) {
  5143. // 显示
  5144. $container.show();
  5145. } else {
  5146. // 加入 DOM 之前先定位位置
  5147. var menuHeight = $menuELem.getBoundingClientRect().height || 0;
  5148. var width = this.conf.width || 100; // 默认为 100
  5149. $container.css('margin-top', menuHeight + 'px').css('width', width + 'px'); // 加入到 DOM
  5150. $menuELem.append($container);
  5151. this.rendered = true;
  5152. } // 修改属性
  5153. this._show = true;
  5154. };
  5155. /**
  5156. * 隐藏 DropList
  5157. */
  5158. DropList.prototype.hide = function () {
  5159. var $container = this.$container;
  5160. if (!this._show) {
  5161. return;
  5162. } // 隐藏并需改属性
  5163. $container.hide();
  5164. this._show = false;
  5165. };
  5166. (0, _defineProperty["default"])(DropList.prototype, "isShow", {
  5167. get: function get() {
  5168. return this._show;
  5169. },
  5170. enumerable: false,
  5171. configurable: true
  5172. });
  5173. return DropList;
  5174. }();
  5175. exports["default"] = DropList;
  5176. /***/ }),
  5177. /* 135 */
  5178. /***/ (function(module, exports, __webpack_require__) {
  5179. "use strict";
  5180. /**
  5181. * @description 上传的核心方法
  5182. * @author wangfupeng
  5183. */
  5184. var _interopRequireDefault = __webpack_require__(0);
  5185. var _typeof2 = _interopRequireDefault(__webpack_require__(92));
  5186. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  5187. var _forEach = _interopRequireDefault(__webpack_require__(4));
  5188. (0, _defineProperty["default"])(exports, "__esModule", {
  5189. value: true
  5190. });
  5191. var util_1 = __webpack_require__(6);
  5192. /**
  5193. * 发送 post 请求(用于文件上传)
  5194. * @param url url
  5195. * @param option 配置项
  5196. */
  5197. function post(url, option) {
  5198. var xhr = new XMLHttpRequest();
  5199. xhr.open('POST', url); // 超时,默认 10s
  5200. xhr.timeout = option.timeout || 10 * 1000;
  5201. xhr.ontimeout = function () {
  5202. console.error('wangEditor - 请求超时');
  5203. option.onTimeout && option.onTimeout(xhr);
  5204. }; // 进度
  5205. if (xhr.upload) {
  5206. xhr.upload.onprogress = function (e) {
  5207. var percent = e.loaded / e.total;
  5208. option.onProgress && option.onProgress(percent, e);
  5209. };
  5210. } // 自定义 header
  5211. if (option.headers) {
  5212. (0, _forEach["default"])(util_1).call(util_1, option.headers, function (key, val) {
  5213. xhr.setRequestHeader(key, val);
  5214. });
  5215. } // 跨域传 cookie
  5216. xhr.withCredentials = !!option.withCredentials; // 上传之前的钩子函数,在 xhr.send() 之前执行
  5217. if (option.beforeSend) {
  5218. var beforeResult = option.beforeSend(xhr);
  5219. if (beforeResult && (0, _typeof2["default"])(beforeResult) === 'object') {
  5220. if (beforeResult.prevent) {
  5221. // 如果返回的结果是 {prevent: true, msg: 'xxxx'} 则表示用户放弃上传
  5222. return beforeResult.msg;
  5223. }
  5224. }
  5225. } // 服务端返回之后
  5226. xhr.onreadystatechange = function () {
  5227. if (xhr.readyState !== 4) return;
  5228. var status = xhr.status;
  5229. if (status < 200) return; // 请求发送过程中,尚未返回
  5230. if (status >= 300 && status < 400) return; // 重定向
  5231. if (status >= 400) {
  5232. // 40x 50x 报错
  5233. console.error('wangEditor - XHR 报错,状态码 ' + status);
  5234. if (option.onError) option.onError(xhr); // 有,则执行 onError 函数即可
  5235. return;
  5236. } // status = 200 ,得到结果
  5237. var resultStr = xhr.responseText;
  5238. var result;
  5239. if ((0, _typeof2["default"])(resultStr) !== 'object') {
  5240. try {
  5241. result = JSON.parse(resultStr);
  5242. } catch (ex) {
  5243. console.error('wangEditor - 返回结果不是 JSON 格式', resultStr);
  5244. if (option.onFail) option.onFail(xhr, resultStr);
  5245. return;
  5246. }
  5247. } else {
  5248. result = resultStr;
  5249. }
  5250. option.onSuccess(xhr, result);
  5251. }; // 发送请求
  5252. xhr.send(option.formData || null);
  5253. return xhr;
  5254. }
  5255. exports["default"] = post;
  5256. /***/ }),
  5257. /* 136 */
  5258. /***/ (function(module, exports, __webpack_require__) {
  5259. "use strict";
  5260. /**
  5261. * @description 上传进度条
  5262. * @author wangfupeng
  5263. */
  5264. var _interopRequireDefault = __webpack_require__(0);
  5265. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  5266. var _now = _interopRequireDefault(__webpack_require__(342));
  5267. var _setTimeout2 = _interopRequireDefault(__webpack_require__(46));
  5268. (0, _defineProperty["default"])(exports, "__esModule", {
  5269. value: true
  5270. });
  5271. var tslib_1 = __webpack_require__(2);
  5272. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  5273. var Progress =
  5274. /** @class */
  5275. function () {
  5276. function Progress(editor) {
  5277. this.editor = editor;
  5278. this.$textContainer = editor.$textContainerElem;
  5279. this.$bar = dom_core_1["default"]('<div class="w-e-progress"></div>');
  5280. this.isShow = false;
  5281. this.time = 0;
  5282. this.timeoutId = 0;
  5283. }
  5284. /**
  5285. * 显示进度条
  5286. * @param progress 进度百分比
  5287. */
  5288. Progress.prototype.show = function (progress) {
  5289. var _this = this; // 不要重新显示
  5290. if (this.isShow) {
  5291. return;
  5292. }
  5293. this.isShow = true; // 渲染 $bar
  5294. var $bar = this.$bar;
  5295. var $textContainer = this.$textContainer;
  5296. $textContainer.append($bar); // 改变进度条(防抖,100ms 渲染一次)
  5297. if ((0, _now["default"])() - this.time > 100) {
  5298. if (progress <= 1) {
  5299. $bar.css('width', progress * 100 + '%');
  5300. this.time = (0, _now["default"])();
  5301. }
  5302. } // 500ms 之后隐藏
  5303. var timeoutId = this.timeoutId;
  5304. if (timeoutId) {
  5305. clearTimeout(timeoutId);
  5306. }
  5307. this.timeoutId = (0, _setTimeout2["default"])(function () {
  5308. _this.hide();
  5309. }, 500);
  5310. };
  5311. /**
  5312. * 隐藏
  5313. */
  5314. Progress.prototype.hide = function () {
  5315. var $bar = this.$bar;
  5316. $bar.remove();
  5317. this.isShow = false;
  5318. this.time = 0;
  5319. this.timeoutId = 0;
  5320. };
  5321. return Progress;
  5322. }();
  5323. exports["default"] = Progress;
  5324. /***/ }),
  5325. /* 137 */
  5326. /***/ (function(module, exports, __webpack_require__) {
  5327. "use strict";
  5328. /**
  5329. * @description 无序列表/有序列表
  5330. * @author tonghan
  5331. */
  5332. var _interopRequireDefault = __webpack_require__(0);
  5333. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  5334. (0, _defineProperty["default"])(exports, "__esModule", {
  5335. value: true
  5336. });
  5337. exports.ListType = void 0;
  5338. var tslib_1 = __webpack_require__(2);
  5339. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  5340. var DropListMenu_1 = tslib_1.__importDefault(__webpack_require__(24));
  5341. var utils_1 = __webpack_require__(47);
  5342. var ListHandle_1 = tslib_1.__importStar(__webpack_require__(371));
  5343. /**
  5344. * 列表的种类
  5345. */
  5346. var ListType;
  5347. (function (ListType) {
  5348. ListType["OrderedList"] = "OL";
  5349. ListType["UnorderedList"] = "UL";
  5350. })(ListType = exports.ListType || (exports.ListType = {}));
  5351. var List =
  5352. /** @class */
  5353. function (_super) {
  5354. tslib_1.__extends(List, _super);
  5355. function List(editor) {
  5356. var _this = this;
  5357. var $elem = dom_core_1["default"]("<div class=\"w-e-menu\" data-title=\"\u5E8F\u5217\">\n <i class=\"w-e-icon-list2\"></i>\n </div>");
  5358. var dropListConf = {
  5359. width: 130,
  5360. title: '序列',
  5361. type: 'list',
  5362. list: [{
  5363. $elem: dom_core_1["default"]("\n <p>\n <i class=\"w-e-icon-list2 w-e-drop-list-item\"></i>\n " + editor.i18next.t('menus.dropListMenu.list.无序列表') + "\n <p>"),
  5364. value: ListType.UnorderedList
  5365. }, {
  5366. $elem: dom_core_1["default"]("<p>\n <i class=\"w-e-icon-list-numbered w-e-drop-list-item\"></i>\n " + editor.i18next.t('menus.dropListMenu.list.有序列表') + "\n <p>"),
  5367. value: ListType.OrderedList
  5368. }],
  5369. clickHandler: function clickHandler(value) {
  5370. // 注意 this 是指向当前的 List 对象
  5371. _this.command(value);
  5372. }
  5373. };
  5374. _this = _super.call(this, $elem, editor, dropListConf) || this;
  5375. return _this;
  5376. }
  5377. List.prototype.command = function (type) {
  5378. var editor = this.editor;
  5379. var $selectionElem = editor.selection.getSelectionContainerElem(); // 选区范围的 DOM 元素不存在,不执行命令
  5380. if ($selectionElem === undefined) return; // 获取选区范围内的顶级 DOM 元素
  5381. this.handleSelectionRangeNodes(type); // 是否激活
  5382. this.tryChangeActive();
  5383. };
  5384. List.prototype.validator = function ($startElem, $endElem, $textElem) {
  5385. if (!$startElem.length || !$endElem.length || $textElem.equal($startElem) || $textElem.equal($endElem)) {
  5386. return false;
  5387. }
  5388. return true;
  5389. };
  5390. List.prototype.handleSelectionRangeNodes = function (listType) {
  5391. var editor = this.editor;
  5392. var selection = editor.selection; // 获取 序列标签
  5393. var listTarget = listType.toLowerCase(); // 获取相对应的 元属节点
  5394. var $selectionElem = selection.getSelectionContainerElem();
  5395. var $startElem = selection.getSelectionStartElem().getNodeTop(editor);
  5396. var $endElem = selection.getSelectionEndElem().getNodeTop(editor); // 验证是否执行 处理逻辑
  5397. if (!this.validator($startElem, $endElem, editor.$textElem)) {
  5398. return;
  5399. } // 获取选区
  5400. var _range = selection.getRange();
  5401. var _collapsed = _range === null || _range === void 0 ? void 0 : _range.collapsed; // 防止光标的时候判断异常
  5402. if (!editor.$textElem.equal($selectionElem)) {
  5403. $selectionElem = $selectionElem.getNodeTop(editor);
  5404. }
  5405. var options = {
  5406. editor: editor,
  5407. listType: listType,
  5408. listTarget: listTarget,
  5409. $selectionElem: $selectionElem,
  5410. $startElem: $startElem,
  5411. $endElem: $endElem
  5412. };
  5413. var classType; // =====================================
  5414. // 当 selectionElem 属于序列元素的时候
  5415. // 代表着当前选区一定是在一个序列元素内的
  5416. // =====================================
  5417. if (this.isOrderElem($selectionElem)) {
  5418. classType = ListHandle_1.ClassType.Wrap;
  5419. } // =====================================
  5420. // 当 startElem 和 endElem 属于序列元素的时候
  5421. // 代表着当前选区一定是在再两个序列的中间(包括两个序列)
  5422. // =====================================
  5423. else if (this.isOrderElem($startElem) && this.isOrderElem($endElem)) {
  5424. classType = ListHandle_1.ClassType.Join;
  5425. } // =====================================
  5426. // 选区开始元素为 序列 的时候
  5427. // =====================================
  5428. else if (this.isOrderElem($startElem)) {
  5429. classType = ListHandle_1.ClassType.StartJoin;
  5430. } // =====================================
  5431. // 选区结束元素为 序列 的时候
  5432. // =====================================
  5433. else if (this.isOrderElem($endElem)) {
  5434. classType = ListHandle_1.ClassType.EndJoin;
  5435. } // =====================================
  5436. // 当选区不是序列内且开头和结尾不是序列的时候
  5437. // 直接获取所有顶级段落然后过滤
  5438. // 代表着 设置序列 的操作
  5439. // =====================================
  5440. else {
  5441. classType = ListHandle_1.ClassType.Other;
  5442. }
  5443. var listHandleCmd = new ListHandle_1["default"](ListHandle_1.createListHandle(classType, options, _range)); // 更新选区
  5444. utils_1.updateRange(editor, listHandleCmd.getSelectionRangeElem(), !!_collapsed);
  5445. };
  5446. /**
  5447. * 是否是序列元素节点 UL and OL
  5448. * @param $node
  5449. */
  5450. List.prototype.isOrderElem = function ($node) {
  5451. var nodeName = $node.getNodeName();
  5452. if (nodeName === ListType.OrderedList || nodeName === ListType.UnorderedList) {
  5453. return true;
  5454. }
  5455. return false;
  5456. };
  5457. List.prototype.tryChangeActive = function () {};
  5458. return List;
  5459. }(DropListMenu_1["default"]);
  5460. exports["default"] = List;
  5461. /***/ }),
  5462. /* 138 */
  5463. /***/ (function(module, exports, __webpack_require__) {
  5464. module.exports = __webpack_require__(395);
  5465. /***/ }),
  5466. /* 139 */
  5467. /***/ (function(module, exports, __webpack_require__) {
  5468. "use strict";
  5469. /**
  5470. * @description 检查选区是否在代码中,即菜单是否应该 active
  5471. * @author lkw
  5472. */
  5473. var _interopRequireDefault = __webpack_require__(0);
  5474. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  5475. (0, _defineProperty["default"])(exports, "__esModule", {
  5476. value: true
  5477. });
  5478. function isActive(editor) {
  5479. var $selectionELem = editor.selection.getSelectionContainerElem();
  5480. if (!($selectionELem === null || $selectionELem === void 0 ? void 0 : $selectionELem.length)) {
  5481. return false;
  5482. }
  5483. if ($selectionELem.getNodeName() == 'CODE' || $selectionELem.getNodeName() == 'PRE' || $selectionELem.parent().getNodeName() == 'CODE' || $selectionELem.parent().getNodeName() == 'PRE' || /hljs/.test($selectionELem.parent().attr('class'))) {
  5484. return true;
  5485. } else {
  5486. return false;
  5487. }
  5488. }
  5489. exports["default"] = isActive;
  5490. /***/ }),
  5491. /* 140 */
  5492. /***/ (function(module, exports, __webpack_require__) {
  5493. "use strict";
  5494. var _interopRequireDefault = __webpack_require__(0);
  5495. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  5496. var _find = _interopRequireDefault(__webpack_require__(29));
  5497. (0, _defineProperty["default"])(exports, "__esModule", {
  5498. value: true
  5499. });
  5500. exports.todo = void 0;
  5501. var tslib_1 = __webpack_require__(2);
  5502. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  5503. var todo =
  5504. /** @class */
  5505. function () {
  5506. function todo($orginElem) {
  5507. var _a;
  5508. this.template = "<ul class=\"w-e-todo\"><li><span contenteditable=\"false\"><input type=\"checkbox\"></span></li></ul>";
  5509. this.checked = false;
  5510. this.$todo = dom_core_1["default"](this.template);
  5511. this.$child = (_a = $orginElem === null || $orginElem === void 0 ? void 0 : $orginElem.childNodes()) === null || _a === void 0 ? void 0 : _a.clone(true);
  5512. }
  5513. todo.prototype.init = function () {
  5514. var $child = this.$child;
  5515. var $inputContainer = this.getInputContainer();
  5516. if ($child) {
  5517. $child.insertAfter($inputContainer);
  5518. }
  5519. };
  5520. todo.prototype.getInput = function () {
  5521. var $todo = this.$todo;
  5522. var $input = (0, _find["default"])($todo).call($todo, 'input');
  5523. return $input;
  5524. };
  5525. todo.prototype.getInputContainer = function () {
  5526. var $inputContainer = this.getInput().parent();
  5527. return $inputContainer;
  5528. };
  5529. todo.prototype.getTodo = function () {
  5530. return this.$todo;
  5531. };
  5532. return todo;
  5533. }();
  5534. exports.todo = todo;
  5535. function createTodo($orginElem) {
  5536. var t = new todo($orginElem);
  5537. t.init();
  5538. return t;
  5539. }
  5540. exports["default"] = createTodo;
  5541. /***/ }),
  5542. /* 141 */
  5543. /***/ (function(module, exports, __webpack_require__) {
  5544. "use strict";
  5545. /**
  5546. * @description 入口文件
  5547. * @author wangfupeng
  5548. */
  5549. var _interopRequireDefault = __webpack_require__(0);
  5550. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  5551. (0, _defineProperty["default"])(exports, "__esModule", {
  5552. value: true
  5553. });
  5554. var tslib_1 = __webpack_require__(2);
  5555. __webpack_require__(146);
  5556. __webpack_require__(148);
  5557. __webpack_require__(152);
  5558. __webpack_require__(154);
  5559. __webpack_require__(156);
  5560. __webpack_require__(158);
  5561. __webpack_require__(160);
  5562. var index_1 = tslib_1.__importDefault(__webpack_require__(87));
  5563. tslib_1.__exportStar(__webpack_require__(442), exports); // 检验是否浏览器环境
  5564. try {
  5565. document;
  5566. } catch (ex) {
  5567. throw new Error('请在浏览器环境下运行');
  5568. }
  5569. exports["default"] = index_1["default"];
  5570. /***/ }),
  5571. /* 142 */
  5572. /***/ (function(module, exports, __webpack_require__) {
  5573. var parent = __webpack_require__(143);
  5574. module.exports = parent;
  5575. /***/ }),
  5576. /* 143 */
  5577. /***/ (function(module, exports, __webpack_require__) {
  5578. __webpack_require__(144);
  5579. var path = __webpack_require__(9);
  5580. var Object = path.Object;
  5581. var defineProperty = module.exports = function defineProperty(it, key, desc) {
  5582. return Object.defineProperty(it, key, desc);
  5583. };
  5584. if (Object.defineProperty.sham) defineProperty.sham = true;
  5585. /***/ }),
  5586. /* 144 */
  5587. /***/ (function(module, exports, __webpack_require__) {
  5588. var $ = __webpack_require__(5);
  5589. var DESCRIPTORS = __webpack_require__(14);
  5590. var objectDefinePropertyModile = __webpack_require__(18);
  5591. // `Object.defineProperty` method
  5592. // https://tc39.github.io/ecma262/#sec-object.defineproperty
  5593. $({ target: 'Object', stat: true, forced: !DESCRIPTORS, sham: !DESCRIPTORS }, {
  5594. defineProperty: objectDefinePropertyModile.f
  5595. });
  5596. /***/ }),
  5597. /* 145 */
  5598. /***/ (function(module, exports) {
  5599. var g;
  5600. // This works in non-strict mode
  5601. g = (function() {
  5602. return this;
  5603. })();
  5604. try {
  5605. // This works if eval is allowed (see CSP)
  5606. g = g || new Function("return this")();
  5607. } catch (e) {
  5608. // This works if the window reference is available
  5609. if (typeof window === "object") g = window;
  5610. }
  5611. // g can still be undefined, but nothing to do about it...
  5612. // We return undefined, instead of nothing here, so it's
  5613. // easier to handle this case. if(!global) { ...}
  5614. module.exports = g;
  5615. /***/ }),
  5616. /* 146 */
  5617. /***/ (function(module, exports, __webpack_require__) {
  5618. var api = __webpack_require__(20);
  5619. var content = __webpack_require__(147);
  5620. content = content.__esModule ? content.default : content;
  5621. if (typeof content === 'string') {
  5622. content = [[module.i, content, '']];
  5623. }
  5624. var options = {};
  5625. options.insert = "head";
  5626. options.singleton = false;
  5627. var update = api(content, options);
  5628. module.exports = content.locals || {};
  5629. /***/ }),
  5630. /* 147 */
  5631. /***/ (function(module, exports, __webpack_require__) {
  5632. // Imports
  5633. var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(21);
  5634. exports = ___CSS_LOADER_API_IMPORT___(false);
  5635. // Module
  5636. exports.push([module.i, ".w-e-toolbar,\n.w-e-text-container,\n.w-e-menu-panel {\n padding: 0;\n margin: 0;\n box-sizing: border-box;\n background-color: #fff;\n /*表情菜单样式*/\n /*分割线样式*/\n}\n.w-e-toolbar h1,\n.w-e-text-container h1,\n.w-e-menu-panel h1 {\n font-size: 32px !important;\n}\n.w-e-toolbar h2,\n.w-e-text-container h2,\n.w-e-menu-panel h2 {\n font-size: 24px !important;\n}\n.w-e-toolbar h3,\n.w-e-text-container h3,\n.w-e-menu-panel h3 {\n font-size: 18.72px !important;\n}\n.w-e-toolbar h4,\n.w-e-text-container h4,\n.w-e-menu-panel h4 {\n font-size: 16px !important;\n}\n.w-e-toolbar h5,\n.w-e-text-container h5,\n.w-e-menu-panel h5 {\n font-size: 13.28px !important;\n}\n.w-e-toolbar p,\n.w-e-text-container p,\n.w-e-menu-panel p {\n font-size: 16px !important;\n}\n.w-e-toolbar .eleImg,\n.w-e-text-container .eleImg,\n.w-e-menu-panel .eleImg {\n cursor: pointer;\n display: inline-block;\n font-size: 18px;\n padding: 0 3px;\n}\n.w-e-toolbar *,\n.w-e-text-container *,\n.w-e-menu-panel * {\n padding: 0;\n margin: 0;\n box-sizing: border-box;\n}\n.w-e-toolbar hr,\n.w-e-text-container hr,\n.w-e-menu-panel hr {\n cursor: pointer;\n display: block;\n height: 0px;\n border: 0;\n border-top: 3px solid #ccc;\n margin: 20px 0;\n}\n.w-e-clear-fix:after {\n content: \"\";\n display: table;\n clear: both;\n}\n.w-e-drop-list-item {\n position: relative;\n top: 1px;\n padding-right: 7px;\n color: #333 !important;\n}\n.w-e-drop-list-tl {\n padding-left: 10px;\n text-align: left;\n}\n", ""]);
  5637. // Exports
  5638. module.exports = exports;
  5639. /***/ }),
  5640. /* 148 */
  5641. /***/ (function(module, exports, __webpack_require__) {
  5642. var api = __webpack_require__(20);
  5643. var content = __webpack_require__(149);
  5644. content = content.__esModule ? content.default : content;
  5645. if (typeof content === 'string') {
  5646. content = [[module.i, content, '']];
  5647. }
  5648. var options = {};
  5649. options.insert = "head";
  5650. options.singleton = false;
  5651. var update = api(content, options);
  5652. module.exports = content.locals || {};
  5653. /***/ }),
  5654. /* 149 */
  5655. /***/ (function(module, exports, __webpack_require__) {
  5656. // Imports
  5657. var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(21);
  5658. var ___CSS_LOADER_GET_URL_IMPORT___ = __webpack_require__(150);
  5659. var ___CSS_LOADER_URL_IMPORT_0___ = __webpack_require__(151);
  5660. exports = ___CSS_LOADER_API_IMPORT___(false);
  5661. var ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);
  5662. // Module
  5663. exports.push([module.i, "@font-face {\n font-family: 'w-e-icon';\n src: url(" + ___CSS_LOADER_URL_REPLACEMENT_0___ + ") format('truetype');\n font-weight: normal;\n font-style: normal;\n}\n[class^=\"w-e-icon-\"],\n[class*=\" w-e-icon-\"] {\n /* use !important to prevent issues with browser extensions that change fonts */\n font-family: 'w-e-icon' !important;\n speak: none;\n font-style: normal;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n line-height: 1;\n /* Better Font Rendering =========== */\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.w-e-icon-close:before {\n content: \"\\f00d\";\n}\n.w-e-icon-upload2:before {\n content: \"\\e9c6\";\n}\n.w-e-icon-trash-o:before {\n content: \"\\f014\";\n}\n.w-e-icon-header:before {\n content: \"\\f1dc\";\n}\n.w-e-icon-pencil2:before {\n content: \"\\e906\";\n}\n.w-e-icon-paint-brush:before {\n content: \"\\f1fc\";\n}\n.w-e-icon-image:before {\n content: \"\\e90d\";\n}\n.w-e-icon-play:before {\n content: \"\\e912\";\n}\n.w-e-icon-location:before {\n content: \"\\e947\";\n}\n.w-e-icon-undo:before {\n content: \"\\e965\";\n}\n.w-e-icon-redo:before {\n content: \"\\e966\";\n}\n.w-e-icon-quotes-left:before {\n content: \"\\e977\";\n}\n.w-e-icon-list-numbered:before {\n content: \"\\e9b9\";\n}\n.w-e-icon-list2:before {\n content: \"\\e9bb\";\n}\n.w-e-icon-link:before {\n content: \"\\e9cb\";\n}\n.w-e-icon-happy:before {\n content: \"\\e9df\";\n}\n.w-e-icon-bold:before {\n content: \"\\ea62\";\n}\n.w-e-icon-underline:before {\n content: \"\\ea63\";\n}\n.w-e-icon-italic:before {\n content: \"\\ea64\";\n}\n.w-e-icon-strikethrough:before {\n content: \"\\ea65\";\n}\n.w-e-icon-table2:before {\n content: \"\\ea71\";\n}\n.w-e-icon-paragraph-left:before {\n content: \"\\ea77\";\n}\n.w-e-icon-paragraph-center:before {\n content: \"\\ea78\";\n}\n.w-e-icon-paragraph-right:before {\n content: \"\\ea79\";\n}\n.w-e-icon-paragraph-justify:before {\n content: \"\\ea7a\";\n}\n.w-e-icon-terminal:before {\n content: \"\\f120\";\n}\n.w-e-icon-page-break:before {\n content: \"\\ea68\";\n}\n.w-e-icon-cancel-circle:before {\n content: \"\\ea0d\";\n}\n.w-e-icon-font:before {\n content: \"\\ea5c\";\n}\n.w-e-icon-text-heigh:before {\n content: \"\\ea5f\";\n}\n.w-e-icon-paint-format:before {\n content: \"\\e90c\";\n}\n.w-e-icon-indent-increase:before {\n content: \"\\ea7b\";\n}\n.w-e-icon-indent-decrease:before {\n content: \"\\ea7c\";\n}\n.w-e-icon-row-height:before {\n content: \"\\e9be\";\n}\n.w-e-icon-fullscreen_exit:before {\n content: \"\\e900\";\n}\n.w-e-icon-fullscreen:before {\n content: \"\\e901\";\n}\n.w-e-icon-split-line:before {\n content: \"\\ea0b\";\n}\n.w-e-icon-checkbox-checked:before {\n content: \"\\ea52\";\n}\n", ""]);
  5664. // Exports
  5665. module.exports = exports;
  5666. /***/ }),
  5667. /* 150 */
  5668. /***/ (function(module, exports, __webpack_require__) {
  5669. "use strict";
  5670. module.exports = function (url, options) {
  5671. if (!options) {
  5672. // eslint-disable-next-line no-param-reassign
  5673. options = {};
  5674. } // eslint-disable-next-line no-underscore-dangle, no-param-reassign
  5675. url = url && url.__esModule ? url.default : url;
  5676. if (typeof url !== 'string') {
  5677. return url;
  5678. } // If url is already wrapped in quotes, remove them
  5679. if (/^['"].*['"]$/.test(url)) {
  5680. // eslint-disable-next-line no-param-reassign
  5681. url = url.slice(1, -1);
  5682. }
  5683. if (options.hash) {
  5684. // eslint-disable-next-line no-param-reassign
  5685. url += options.hash;
  5686. } // Should url be wrapped?
  5687. // See https://drafts.csswg.org/css-values-3/#urls
  5688. if (/["'() \t\n]/.test(url) || options.needQuotes) {
  5689. return "\"".concat(url.replace(/"/g, '\\"').replace(/\n/g, '\\n'), "\"");
  5690. }
  5691. return url;
  5692. };
  5693. /***/ }),
  5694. /* 151 */
  5695. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  5696. "use strict";
  5697. __webpack_require__.r(__webpack_exports__);
  5698. /* harmony default export */ __webpack_exports__["default"] = ("data:font/woff;base64,d09GRgABAAAAABskAAsAAAAAGtgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABCAAAAGAAAABgDxIPFWNtYXAAAAFoAAABHAAAARz2mfAgZ2FzcAAAAoQAAAAIAAAACAAAABBnbHlmAAACjAAAFXwAABV8IH7+mGhlYWQAABgIAAAANgAAADYb6gumaGhlYQAAGEAAAAAkAAAAJAkjBWlobXR4AAAYZAAAAKQAAACkmYcEbmxvY2EAABkIAAAAVAAAAFReAmKYbWF4cAAAGVwAAAAgAAAAIAA0ALZuYW1lAAAZfAAAAYYAAAGGmUoJ+3Bvc3QAABsEAAAAIAAAACAAAwAAAAMD7wGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAA8fwDwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEAQAAAAA8ACAABAAcAAEAIOkB6QbpDekS6UfpZul36bnpu+m+6cbpy+nf6gvqDepS6lzqX+pl6nHqfPAN8BTxIPHc8fz//f//AAAAAAAg6QDpBukM6RLpR+ll6Xfpuem76b7pxunL6d/qC+oN6lLqXOpf6mLqcep38A3wFPEg8dzx/P/9//8AAf/jFwQXABb7FvcWwxamFpYWVRZUFlIWSxZHFjQWCRYIFcQVuxW5FbcVrBWnEBcQEQ8GDksOLAADAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAAEAEEAAQO/A38ABQALABEAFwAAATMVIREzAxEhFSMVATUzESE1ETUhESM1Av/A/sJ+fgE+wP4Cfv7CAT5+Ar9+AT78ggE+fsACvsD+wn7+An7+wsAAAAAABABBAAEDvwN/AAUACwARABcAAAEhESM1IxM1MxEhNQERIRUjFREVMxUhEQKBAT5+wMB+/sL9wAE+wMD+wgN//sLA/X7A/sJ+AcIBPn7A/v7AfgE+AAAAAAIAAP/ABAADwAAEABMAAAE3AScBAy4BJxM3ASMBAyUBNQEHAYCAAcBA/kCfFzsyY4ABgMD+gMACgAGA/oBOAUBAAcBA/kD+nTI7FwERTgGA/oD9gMABgMD+gIAAAgAA/8AEAAOAACkALQAAAREjNTQmIyEiBh0BFBYzITI2PQEzESEVIyIGFREUFjsBMjY1ETQmKwE1ASE1IQQAwCYa/UAaJiYaAsAaJoD9wCANExMNgA0TEw0gAUD9QALAAYABgEAaJiYawBomJhpA/wCAEw3+wA0TEw0BQA0TQAGAQAAABAAAAAAEAAOAABAAIQAtADQAAAE4ATEROAExITgBMRE4ATEhNSEiBhURFBYzITI2NRE0JiMHFAYjIiY1NDYzMhYTITUTATM3A8D8gAOA/IAaJiYaA4AaJiYagDgoKDg4KCg4QP0A4AEAQOADQP0AAwBAJhr9ABomJhoDABom4Cg4OCgoODj9uIABgP7AwAAAAgAAAEAEAANAADgAPAAAASYnLgEnJiMiBw4BBwYHBgcOAQcGFRQXHgEXFhcWFx4BFxYzMjc+ATc2NzY3PgE3NjU0Jy4BJyYnARENAQPVNjg5djw9Pz89PHY5ODYLBwgLAwMDAwsIBws2ODl2PD0/Pz08djk4NgsHCAsDAwMDCwgHC/2rAUD+wAMgCAYGCAICAgIIBgYIKSoqWS0uLy8uLVkqKikIBgYIAgICAggGBggpKipZLS4vLy4tWSoqKf3gAYDAwAAAAAACAMD/wANAA8AAGwAnAAABIgcOAQcGFRQXHgEXFjEwNz4BNzY1NCcuAScmAyImNTQ2MzIWFRQGAgBCOzpXGRkyMngyMjIyeDIyGRlXOjtCUHBwUFBwcAPAGRlXOjtCeH19zEFBQUHMfX14Qjs6VxkZ/gBwUFBwcFBQcAAAAQAAAAAEAAOAACsAAAEiBw4BBwYHJxEhJz4BMzIXHgEXFhUUBw4BBwYHFzY3PgE3NjU0Jy4BJyYjAgA1MjJcKSkjlgGAkDWLUFBFRmkeHgkJIhgYHlUoICAtDAwoKIteXWoDgAoLJxscI5b+gJA0PB4eaUZFUCsoKUkgIRpgIysrYjY2OWpdXosoKAABAAAAAAQAA4AAKgAAExQXHgEXFhc3JicuAScmNTQ3PgE3NjMyFhcHIREHJicuAScmIyIHDgEHBgAMDC0gIChVHhgYIgkJHh5pRkVQUIs1kAGAliMpKVwyMjVqXV6LKCgBgDk2NmIrKyNgGiEgSSkoK1BFRmkeHjw0kAGAliMcGycLCigoi15dAAAAAAIAAABABAEDAAAmAE0AABMyFx4BFxYVFAcOAQcGIyInLgEnJjUnNDc+ATc2MxUiBgcOAQc+ASEyFx4BFxYVFAcOAQcGIyInLgEnJjUnNDc+ATc2MxUiBgcOAQc+AeEuKSk9ERISET0pKS4uKSk9ERIBIyN6UlFdQHUtCRAHCBICSS4pKT0REhIRPSkpLi4pKT0REgEjI3pSUV1AdS0JEAcIEgIAEhE9KSkuLikpPRESEhE9KSkuIF1RUnojI4AwLggTCgIBEhE9KSkuLikpPRESEhE9KSkuIF1RUnojI4AwLggTCgIBAAAGAED/wAQAA8AAAwAHAAsAEQAdACkAACUhFSERIRUhESEVIScRIzUjNRMVMxUjNTc1IzUzFRURIzUzNSM1MzUjNQGAAoD9gAKA/YACgP2AwEBAQIDAgIDAwICAgICAgAIAgAIAgMD/AMBA/fIyQJI8MkCS7v7AQEBAQEAABgAA/8AEAAPAAAMABwALABcAIwAvAAABIRUhESEVIREhFSEBNDYzMhYVFAYjIiYRNDYzMhYVFAYjIiYRNDYzMhYVFAYjIiYBgAKA/YACgP2AAoD9gP6ASzU1S0s1NUtLNTVLSzU1S0s1NUtLNTVLA4CA/wCA/wCAA0A1S0s1NUtL/rU1S0s1NUtL/rU1S0s1NUtLAAUAAABABWADAAADAAcACwAOABEAABMhFSEVIRUhFSEVIQEXNzUnBwADgPyAA4D8gAOA/IAD4MDAwMADAMBAwEDAAUDAwEDAwAAAAAADAAAAAAQAA6AAAwANABQAADchFSElFSE1EyEVITUhJQkBIxEjEQAEAPwABAD8AIABAAEAAQD9YAEgASDggEBAwEBAAQCAgMABIP7g/wABAAAAAAACAB7/zAPiA7QAMwBkAAABIiYnJicmNDc2PwE+ATMyFhcWFxYUBwYPAQYiJyY0PwE2NCcuASMiBg8BBhQXFhQHDgEjAyImJyYnJjQ3Nj8BNjIXFhQPAQYUFx4BMzI2PwE2NCcmNDc2MhcWFxYUBwYPAQ4BIwG4ChMIIxISEhIjwCNZMTFZIyMSEhISI1gPLA8PD1gpKRQzHBwzFMApKQ8PCBMKuDFZIyMSEhISI1gPLA8PD1gpKRQzHBwzFMApKQ8PDysQIxISEhIjwCNZMQFECAckLS1eLS0kwCIlJSIkLS1eLS0kVxAQDysPWCl0KRQVFRTAKXQpDysQBwj+iCUiJC0tXi0tJFcQEA8rD1gpdCkUFRUUwCl0KQ8rEA8PJC0tXi0tJMAiJQAAAAAFAAD/wAQAA8AAGwA3AFMAXwBrAAAFMjc+ATc2NTQnLgEnJiMiBw4BBwYVFBceARcWEzIXHgEXFhUUBw4BBwYjIicuAScmNTQ3PgE3NhMyNz4BNzY3BgcOAQcGIyInLgEnJicWFx4BFxYnNDYzMhYVFAYjIiYlNDYzMhYVFAYjIiYCAGpdXosoKCgoi15dampdXosoKCgoi15dalZMTHEgISEgcUxMVlZMTHEgISEgcUxMVisrKlEmJiMFHBtWODc/Pzc4VhscBSMmJlEqK9UlGxslJRsbJQGAJRsbJSUbGyVAKCiLXl1qal1eiygoKCiLXl1qal1eiygoA6AhIHFMTFZWTExxICEhIHFMTFZWTExxICH+CQYGFRAQFEM6OlYYGRkYVjo6QxQQEBUGBvcoODgoKDg4KCg4OCgoODgAAAEAAAFABAACQAAPAAATFRQWMyEyNj0BNCYjISIGABMNA8ANExMN/EANEwIgwA0TEw3ADRMTAAAAAwAA/8AEAAPAABsANwBDAAABIgcOAQcGFRQXHgEXFjMyNz4BNzY1NCcuAScmAyInLgEnJjU0Nz4BNzYzMhceARcWFRQHDgEHBhMHJwcXBxc3FzcnNwIAal1eiygoKCiLXl1qal1eiygoKCiLXl1qVkxMcSAhISBxTExWVkxMcSAhISBxTExKoKBgoKBgoKBgoKADwCgoi15dampdXosoKCgoi15dampdXosoKPxgISBxTExWVkxMcSAhISBxTExWVkxMcSAhAqCgoGCgoGCgoGCgoAACAAD/wAQAA8AADwAVAAABISIGFREUFjMhMjY1ETQmASc3FwEXA4D9ADVLSzUDADVLS/4L7VqTATNaA8BLNf0ANUtLNQMANUv85e5akgEyWgAAAAABAGX/wAObA8AAKQAAASImIyIHDgEHBhUUFjMuATU0NjcwBwYCBwYHFSETMzcjNx4BMzI2Nw4BAyBEaEZxU1RtGhtJSAYNZUoQEEs8PFkBPWzGLNc0LVUmLlAYHT0DsBAeHWE+P0FNOwsmN5lvA31+/sWPkCMZAgCA9gkPN2sJBwAAAAACAAAAAAQAA4AACQAXAAAlMwcnMxEjNxcjJREnIxEzFSE1MxEjBxEDgICgoICAoKCA/wBAwID+gIDAQMDAwAIAwMDA/wCA/UBAQALAgAEAAAMAwAAAA0ADgAAWAB8AKAAAAT4BNTQnLgEnJiMhESEyNz4BNzY1NCYBMzIWFRQGKwETIxEzMhYVFAYCxBwgFBRGLi81/sABgDUvLkYUFET+hGUqPDwpZp+fnyw+PgHbIlQvNS8uRhQU/IAUFEYuLzVGdAFGSzU1S/6AAQBLNTVLAAAAAAIAwAAAA0ADgAAfACMAAAEzERQHDgEHBiMiJy4BJyY1ETMRFBYXHgEzMjY3PgE1ASEVIQLAgBkZVzo7QkI7OlcZGYAbGBxJKChJHBgb/gACgP2AA4D+YDw0NU4WFxcWTjU0PAGg/mAeOBcYGxsYFzge/qCAAAAAAAEAgAAAA4ADgAALAAABFSMBMxUhNTMBIzUDgID+wID+QIABQIADgED9AEBAAwBAAAEAAAAABAADgAA9AAABFSMeARUUBgcOASMiJicuATUzFBYzMjY1NCYjITUhLgEnLgE1NDY3PgEzMhYXHgEVIzQmIyIGFRQWMzIWFwQA6xUWNTAscT4+cSwwNYByTk5yck7+AAEsAgQBMDU1MCxxPj5xLDA1gHJOTnJyTjtuKwHAQB1BIjViJCEkJCEkYjU0TEw0NExAAQMBJGI1NWIkISQkISRiNTRMTDQ0TCEfAAAACgAAAAAEAAOAAAMABwALAA8AEwAXABsAHwAjACcAABMRIREBNSEVHQEhNQEVITUjFSE1ESEVISUhFSERNSEVASEVISE1IRUABAD9gAEA/wABAP8AQP8AAQD/AAKAAQD/AAEA/IABAP8AAoABAAOA/IADgP3AwMBAwMACAMDAwMD/AMDAwAEAwMD+wMDAwAAABQAAAAAEAAOAAAMABwALAA8AEwAAEyEVIRUhFSERIRUhESEVIREhFSEABAD8AAKA/YACgP2ABAD8AAQA/AADgIBAgP8AgAFAgP8AgAAAAAAFAAAAAAQAA4AAAwAHAAsADwATAAATIRUhFyEVIREhFSEDIRUhESEVIQAEAPwAwAKA/YACgP2AwAQA/AAEAPwAA4CAQID/AIABQID/AIAAAAUAAAAABAADgAADAAcACwAPABMAABMhFSEFIRUhESEVIQEhFSERIRUhAAQA/AABgAKA/YACgP2A/oAEAPwABAD8AAOAgECA/wCAAUCA/wCAAAAAAAUAAAAABAADgAADAAcACwAPABMAABMhFSEVIRUhFSEVIRUhFSEVIRUhAAQA/AAEAPwABAD8AAQA/AAEAPwAA4CAQIBAgECAQIAAAAAGAAAAAAQAA4AAAwAHAAsADwATABYAABMhFSEFIRUhFSEVIRUhFSEFIRUhGQEFAAQA/AABgAKA/YACgP2AAoD9gP6ABAD8AAEAA4CAQIBAgECAQIABAAGAwAAAAAYAAAAABAADgAADAAcACwAPABMAFgAAEyEVIQUhFSEVIRUhFSEVIQUhFSEBESUABAD8AAGAAoD9gAKA/YACgP2A/oAEAPwAAQD/AAOAgECAQIBAgECAAoD+gMAAAQA/AD8C5gLmACwAACUUDwEGIyIvAQcGIyIvASY1ND8BJyY1ND8BNjMyHwE3NjMyHwEWFRQPARcWFQLmEE4QFxcQqKgQFxYQThAQqKgQEE4QFhcQqKgQFxcQThAQqKgQwxYQThAQqKgQEE4QFhcQqKgQFxcQThAQqKgQEE4QFxcQqKgQFwAAAAYAAAAAAyUDbgAUACgAPABNAFUAggAAAREUBwYrASInJjURNDc2OwEyFxYVMxEUBwYrASInJjURNDc2OwEyFxYXERQHBisBIicmNRE0NzY7ATIXFhMRIREUFxYXFjMhMjc2NzY1ASEnJicjBgcFFRQHBisBERQHBiMhIicmNREjIicmPQE0NzY7ATc2NzY7ATIXFh8BMzIXFhUBJQYFCCQIBQYGBQgkCAUGkgUFCCUIBQUFBQglCAUFkgUFCCUIBQUFBQglCAUFSf4ABAQFBAIB2wIEBAQE/oABABsEBrUGBAH3BgUINxobJv4lJhsbNwgFBQUFCLEoCBcWF7cXFhYJKLAIBQYCEv63CAUFBQUIAUkIBQYGBQj+twgFBQUFCAFJCAUGBgUI/rcIBQUFBQgBSQgFBgYF/lsCHf3jDQsKBQUFBQoLDQJmQwUCAgVVJAgGBf3jMCIjISIvAiAFBggkCAUFYBUPDw8PFWAFBQgAAgAHAEkDtwKvABoALgAACQEGIyIvASY1ND8BJyY1ND8BNjMyFwEWFRQHARUUBwYjISInJj0BNDc2MyEyFxYBTv72BgcIBR0GBuHhBgYdBQgHBgEKBgYCaQUFCP3bCAUFBQUIAiUIBQUBhf72BgYcBggHBuDhBgcHBh0FBf71BQgHBv77JQgFBQUFCCUIBQUFBQAAAAEAIwAAA90DbgCzAAAlIicmIyIHBiMiJyY1NDc2NzY3Njc2PQE0JyYjISIHBh0BFBcWFxYzFhcWFRQHBiMiJyYjIgcGIyInJjU0NzY3Njc2NzY9ARE0NTQ1NCc0JyYnJicmJyYnJiMiJyY1NDc2MzIXFjMyNzYzMhcWFRQHBiMGBwYHBh0BFBcWMyEyNzY9ATQnJicmJyY1NDc2MzIXFjMyNzYzMhcWFRQHBgciBwYHBhURFBcWFxYXMhcWFRQHBiMDwRkzMhoZMjMZDQgHCQoNDBEQChIBBxX+fhYHARUJEhMODgwLBwcOGzU1GhgxMRgNBwcJCQsMEA8JEgECAQIDBAQFCBIRDQ0KCwcHDho1NRoYMDEYDgcHCQoMDRAQCBQBBw8BkA4HARQKFxcPDgcHDhkzMhkZMTEZDgcHCgoNDRARCBQUCRERDg0KCwcHDgACAgICDAsPEQkJAQEDAwUMROAMBQMDBQzUUQ0GAQIBCAgSDwwNAgICAgwMDhEICQECAwMFDUUhAdACDQ0ICA4OCgoLCwcHAwYBAQgIEg8MDQICAgINDA8RCAgBAgEGDFC2DAcBAQcMtlAMBgEBBgcWDwwNAgICAg0MDxEICAEBAgYNT/3mRAwGAgIBCQgRDwwNAAACAAD/twP/A7cAEwA5AAABMhcWFRQHAgcGIyInJjU0NwE2MwEWFxYfARYHBiMiJyYnJicmNRYXFhcWFxYzMjc2NzY3Njc2NzY3A5soHh4avkw3RUg0NDUBbSEp/fgXJicvAQJMTHtHNjYhIRARBBMUEBASEQkXCA8SExUVHR0eHikDtxsaKCQz/plGNDU0SUkwAUsf/bErHx8NKHpNTBobLi86OkQDDw4LCwoKFiUbGhERCgsEBAIAAQAAAAAAAIWwaoFfDzz1AAsEAAAAAADbteOZAAAAANu145kAAP+3BWADwAAAAAgAAgAAAAAAAAABAAADwP/AAAAFgAAA//8FYAABAAAAAAAAAAAAAAAAAAAAKQQAAAAAAAAAAAAAAAIAAAAEAABBBAAAQQQAAAAEAAAABAAAAAQAAAAEAADABAAAAAQAAAAEAAAABAAAQAQAAAAFgAAABAAAAAQAAB4EAAAABAAAAAQAAAAEAAAABAAAZQQAAAAEAADABAAAwAQAAIAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAMlAD8DJQAAA74ABwQAACMD/wAAAAAAAAAKABQAHgBKAHYApADmAS4BkgHQAhYCXALQAw4DWAN+A6gEPgTeBPoFZAWOBdAF+AY6BnYGjgbmBy4HVgd+B6gHzgf8CCoIbgkmCXAKYgq+AAEAAAApALQACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAHAAAAAQAAAAAAAgAHAGAAAQAAAAAAAwAHADYAAQAAAAAABAAHAHUAAQAAAAAABQALABUAAQAAAAAABgAHAEsAAQAAAAAACgAaAIoAAwABBAkAAQAOAAcAAwABBAkAAgAOAGcAAwABBAkAAwAOAD0AAwABBAkABAAOAHwAAwABBAkABQAWACAAAwABBAkABgAOAFIAAwABBAkACgA0AKRpY29tb29uAGkAYwBvAG0AbwBvAG5WZXJzaW9uIDEuMABWAGUAcgBzAGkAbwBuACAAMQAuADBpY29tb29uAGkAYwBvAG0AbwBvAG5pY29tb29uAGkAYwBvAG0AbwBvAG5SZWd1bGFyAFIAZQBnAHUAbABhAHJpY29tb29uAGkAYwBvAG0AbwBvAG5Gb250IGdlbmVyYXRlZCBieSBJY29Nb29uLgBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
  5699. /***/ }),
  5700. /* 152 */
  5701. /***/ (function(module, exports, __webpack_require__) {
  5702. var api = __webpack_require__(20);
  5703. var content = __webpack_require__(153);
  5704. content = content.__esModule ? content.default : content;
  5705. if (typeof content === 'string') {
  5706. content = [[module.i, content, '']];
  5707. }
  5708. var options = {};
  5709. options.insert = "head";
  5710. options.singleton = false;
  5711. var update = api(content, options);
  5712. module.exports = content.locals || {};
  5713. /***/ }),
  5714. /* 153 */
  5715. /***/ (function(module, exports, __webpack_require__) {
  5716. // Imports
  5717. var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(21);
  5718. exports = ___CSS_LOADER_API_IMPORT___(false);
  5719. // Module
  5720. exports.push([module.i, ".w-e-toolbar {\n display: flex;\n padding: 0 6px;\n flex-wrap: wrap;\n position: relative;\n /* 单个菜单 */\n}\n.w-e-toolbar .w-e-menu {\n position: relative;\n display: flex;\n width: 40px;\n height: 40px;\n align-items: center;\n justify-content: center;\n text-align: center;\n cursor: pointer;\n}\n.w-e-toolbar .w-e-menu i {\n color: #999;\n}\n.w-e-toolbar .w-e-menu:hover {\n background-color: #F6F6F6;\n}\n.w-e-toolbar .w-e-menu:hover i {\n color: #333;\n}\n.w-e-toolbar .w-e-active i {\n color: #1e88e5;\n}\n.w-e-toolbar .w-e-active:hover i {\n color: #1e88e5;\n}\n.w-e-menu-tooltip {\n position: absolute;\n display: flex;\n color: #f1f1f1;\n background-color: rgba(0, 0, 0, 0.75);\n box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n padding: 4px 5px 6px;\n justify-content: center;\n align-items: center;\n}\n.w-e-menu-tooltip-up::after {\n content: \"\";\n position: absolute;\n top: 100%;\n left: 50%;\n margin-left: -5px;\n border: 5px solid rgba(0, 0, 0, 0);\n border-top-color: rgba(0, 0, 0, 0.73);\n}\n.w-e-menu-tooltip-down::after {\n content: \"\";\n position: absolute;\n bottom: 100%;\n left: 50%;\n margin-left: -5px;\n border: 5px solid rgba(0, 0, 0, 0);\n border-bottom-color: rgba(0, 0, 0, 0.73);\n}\n.w-e-menu-tooltip-item-wrapper {\n font-size: 14px;\n margin: 0 5px;\n}\n", ""]);
  5721. // Exports
  5722. module.exports = exports;
  5723. /***/ }),
  5724. /* 154 */
  5725. /***/ (function(module, exports, __webpack_require__) {
  5726. var api = __webpack_require__(20);
  5727. var content = __webpack_require__(155);
  5728. content = content.__esModule ? content.default : content;
  5729. if (typeof content === 'string') {
  5730. content = [[module.i, content, '']];
  5731. }
  5732. var options = {};
  5733. options.insert = "head";
  5734. options.singleton = false;
  5735. var update = api(content, options);
  5736. module.exports = content.locals || {};
  5737. /***/ }),
  5738. /* 155 */
  5739. /***/ (function(module, exports, __webpack_require__) {
  5740. // Imports
  5741. var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(21);
  5742. exports = ___CSS_LOADER_API_IMPORT___(false);
  5743. // Module
  5744. exports.push([module.i, ".w-e-text-container {\n position: relative;\n height: 100%;\n}\n.w-e-text-container .w-e-progress {\n position: absolute;\n background-color: #1e88e5;\n top: 0;\n left: 0;\n height: 1px;\n}\n.w-e-text-container .placeholder {\n color: #D4D4D4;\n position: absolute;\n font-size: 11pt;\n line-height: 22px;\n left: 10px;\n top: 10px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n z-index: -1;\n}\n.w-e-text {\n padding: 0 10px;\n overflow-y: auto;\n}\n.w-e-text p,\n.w-e-text h1,\n.w-e-text h2,\n.w-e-text h3,\n.w-e-text h4,\n.w-e-text h5,\n.w-e-text table,\n.w-e-text pre {\n margin: 10px 0;\n line-height: 1.5;\n}\n.w-e-text ul,\n.w-e-text ol {\n margin: 10px 0 10px 20px;\n}\n.w-e-text blockquote {\n display: block;\n border-left: 8px solid #d0e5f2;\n padding: 5px 10px;\n margin: 10px 0;\n line-height: 1.4;\n font-size: 100%;\n background-color: #f1f1f1;\n}\n.w-e-text code {\n display: inline-block;\n background-color: #f1f1f1;\n border-radius: 3px;\n padding: 3px 5px;\n margin: 0 3px;\n}\n.w-e-text pre code {\n display: block;\n}\n.w-e-text table {\n border-top: 1px solid #ccc;\n border-left: 1px solid #ccc;\n}\n.w-e-text table td,\n.w-e-text table th {\n border-bottom: 1px solid #ccc;\n border-right: 1px solid #ccc;\n padding: 3px 5px;\n min-height: 30px;\n height: 30px;\n}\n.w-e-text table th {\n border-bottom: 2px solid #ccc;\n text-align: center;\n background-color: #f1f1f1;\n}\n.w-e-text:focus {\n outline: none;\n}\n.w-e-text img {\n cursor: pointer;\n}\n.w-e-text img:hover {\n box-shadow: 0 0 5px #333;\n}\n.w-e-text .w-e-todo {\n margin: 0 0 0 20px;\n}\n.w-e-text .w-e-todo li {\n list-style: none;\n font-size: 1em;\n}\n.w-e-text .w-e-todo li span:nth-child(1) {\n position: relative;\n left: -18px;\n}\n.w-e-text .w-e-todo li span:nth-child(1) input {\n position: absolute;\n margin-right: 3px;\n}\n.w-e-text .w-e-todo li span:nth-child(1) input[type=checkbox] {\n top: 50%;\n margin-top: -6px;\n}\n.w-e-tooltip {\n position: absolute;\n display: flex;\n color: #f1f1f1;\n background-color: rgba(0, 0, 0, 0.75);\n box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n padding: 4px 5px 6px;\n justify-content: center;\n align-items: center;\n}\n.w-e-tooltip-up::after {\n content: \"\";\n position: absolute;\n top: 100%;\n left: 50%;\n margin-left: -5px;\n border: 5px solid rgba(0, 0, 0, 0);\n border-top-color: rgba(0, 0, 0, 0.73);\n}\n.w-e-tooltip-down::after {\n content: \"\";\n position: absolute;\n bottom: 100%;\n left: 50%;\n margin-left: -5px;\n border: 5px solid rgba(0, 0, 0, 0);\n border-bottom-color: rgba(0, 0, 0, 0.73);\n}\n.w-e-tooltip-item-wrapper {\n cursor: pointer;\n font-size: 14px;\n margin: 0 5px;\n}\n.w-e-tooltip-item-wrapper:hover {\n color: #ccc;\n text-decoration: underline;\n}\n", ""]);
  5745. // Exports
  5746. module.exports = exports;
  5747. /***/ }),
  5748. /* 156 */
  5749. /***/ (function(module, exports, __webpack_require__) {
  5750. var api = __webpack_require__(20);
  5751. var content = __webpack_require__(157);
  5752. content = content.__esModule ? content.default : content;
  5753. if (typeof content === 'string') {
  5754. content = [[module.i, content, '']];
  5755. }
  5756. var options = {};
  5757. options.insert = "head";
  5758. options.singleton = false;
  5759. var update = api(content, options);
  5760. module.exports = content.locals || {};
  5761. /***/ }),
  5762. /* 157 */
  5763. /***/ (function(module, exports, __webpack_require__) {
  5764. // Imports
  5765. var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(21);
  5766. exports = ___CSS_LOADER_API_IMPORT___(false);
  5767. // Module
  5768. exports.push([module.i, ".w-e-menu .w-e-panel-container {\n position: absolute;\n top: 0;\n left: 50%;\n border: 1px solid #ccc;\n border-top: 0;\n box-shadow: 1px 1px 2px #ccc;\n color: #333;\n background-color: #fff;\n text-align: left;\n /* 为 emotion panel 定制的样式 */\n /* 上传图片、上传视频的 panel 定制样式 */\n}\n.w-e-menu .w-e-panel-container .w-e-panel-close {\n position: absolute;\n right: 0;\n top: 0;\n padding: 5px;\n margin: 2px 5px 0 0;\n cursor: pointer;\n color: #999;\n}\n.w-e-menu .w-e-panel-container .w-e-panel-close:hover {\n color: #333;\n}\n.w-e-menu .w-e-panel-container .w-e-panel-tab-title {\n list-style: none;\n display: flex;\n font-size: 14px;\n margin: 2px 10px 0 10px;\n border-bottom: 1px solid #f1f1f1;\n}\n.w-e-menu .w-e-panel-container .w-e-panel-tab-title .w-e-item {\n padding: 3px 5px;\n color: #999;\n cursor: pointer;\n margin: 0 3px;\n position: relative;\n top: 1px;\n}\n.w-e-menu .w-e-panel-container .w-e-panel-tab-title .w-e-active {\n color: #333;\n border-bottom: 1px solid #333;\n cursor: default;\n font-weight: 700;\n}\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content {\n padding: 10px 15px 10px 15px;\n font-size: 16px;\n /* 输入框的样式 */\n /* 按钮的样式 */\n}\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content input:focus,\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content textarea:focus,\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content button:focus {\n outline: none;\n}\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content textarea {\n width: 100%;\n border: 1px solid #ccc;\n padding: 5px;\n margin-top: 10px;\n}\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content textarea:focus {\n border-color: #1e88e5;\n}\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content input[type=text] {\n border: none;\n border-bottom: 1px solid #ccc;\n font-size: 14px;\n height: 20px;\n color: #333;\n text-align: left;\n}\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content input[type=text].small {\n width: 30px;\n text-align: center;\n}\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content input[type=text].block {\n display: block;\n width: 100%;\n margin: 10px 0;\n}\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content input[type=text]:focus {\n border-bottom: 2px solid #1e88e5;\n}\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button {\n font-size: 14px;\n color: #1e88e5;\n border: none;\n padding: 5px 10px;\n background-color: #fff;\n cursor: pointer;\n border-radius: 3px;\n}\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button.left {\n float: left;\n margin-right: 10px;\n}\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button.right {\n float: right;\n margin-left: 10px;\n}\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button.gray {\n color: #999;\n}\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button.red {\n color: #c24f4a;\n}\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button:hover {\n background-color: #f1f1f1;\n}\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content .w-e-button-container:after {\n content: \"\";\n display: table;\n clear: both;\n}\n.w-e-menu .w-e-panel-container .w-e-emoticon-container .w-e-item {\n cursor: pointer;\n font-size: 18px;\n padding: 0 3px;\n display: inline-block;\n}\n.w-e-menu .w-e-panel-container .w-e-up-img-container,\n.w-e-menu .w-e-panel-container .w-e-up-video-container {\n text-align: center;\n}\n.w-e-menu .w-e-panel-container .w-e-up-img-container .w-e-up-btn,\n.w-e-menu .w-e-panel-container .w-e-up-video-container .w-e-up-btn {\n display: inline-block;\n color: #999;\n cursor: pointer;\n font-size: 60px;\n line-height: 1;\n}\n.w-e-menu .w-e-panel-container .w-e-up-img-container .w-e-up-btn:hover,\n.w-e-menu .w-e-panel-container .w-e-up-video-container .w-e-up-btn:hover {\n color: #333;\n}\n", ""]);
  5769. // Exports
  5770. module.exports = exports;
  5771. /***/ }),
  5772. /* 158 */
  5773. /***/ (function(module, exports, __webpack_require__) {
  5774. var api = __webpack_require__(20);
  5775. var content = __webpack_require__(159);
  5776. content = content.__esModule ? content.default : content;
  5777. if (typeof content === 'string') {
  5778. content = [[module.i, content, '']];
  5779. }
  5780. var options = {};
  5781. options.insert = "head";
  5782. options.singleton = false;
  5783. var update = api(content, options);
  5784. module.exports = content.locals || {};
  5785. /***/ }),
  5786. /* 159 */
  5787. /***/ (function(module, exports, __webpack_require__) {
  5788. // Imports
  5789. var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(21);
  5790. exports = ___CSS_LOADER_API_IMPORT___(false);
  5791. // Module
  5792. exports.push([module.i, ".w-e-toolbar .w-e-droplist {\n position: absolute;\n left: 0;\n top: 0;\n background-color: #fff;\n border: 1px solid #f1f1f1;\n border-right-color: #ccc;\n border-bottom-color: #ccc;\n}\n.w-e-toolbar .w-e-droplist .w-e-dp-title {\n text-align: center;\n color: #999;\n line-height: 2;\n border-bottom: 1px solid #f1f1f1;\n font-size: 13px;\n}\n.w-e-toolbar .w-e-droplist ul.w-e-list {\n list-style: none;\n line-height: 1;\n}\n.w-e-toolbar .w-e-droplist ul.w-e-list li.w-e-item {\n color: #333;\n padding: 5px 0;\n}\n.w-e-toolbar .w-e-droplist ul.w-e-list li.w-e-item:hover {\n background-color: #f1f1f1;\n}\n.w-e-toolbar .w-e-droplist ul.w-e-block {\n list-style: none;\n text-align: left;\n padding: 5px;\n}\n.w-e-toolbar .w-e-droplist ul.w-e-block li.w-e-item {\n display: inline-block;\n padding: 3px 5px;\n}\n.w-e-toolbar .w-e-droplist ul.w-e-block li.w-e-item:hover {\n background-color: #f1f1f1;\n}\n", ""]);
  5793. // Exports
  5794. module.exports = exports;
  5795. /***/ }),
  5796. /* 160 */
  5797. /***/ (function(module, exports, __webpack_require__) {
  5798. "use strict";
  5799. /**
  5800. * @description polyfill 【注意,js 语法的兼容,都通过 babel transform runtime 支持】
  5801. * @author wangfupeng
  5802. */
  5803. var _interopRequireDefault = __webpack_require__(0);
  5804. var _promise = _interopRequireDefault(__webpack_require__(161));
  5805. if (!Element.prototype.matches) {
  5806. Element.prototype.matches = function (s) {
  5807. var matches = this.ownerDocument.querySelectorAll(s);
  5808. var i = matches.length;
  5809. for (i; i >= 0; i--) {
  5810. if (matches.item(i) === this) break;
  5811. }
  5812. return i > -1;
  5813. };
  5814. } // 有的第三方库需要原生 Promise ,而 IE11 又没有原生 Promise ,就报错
  5815. if (!_promise["default"]) {
  5816. window.Promise = _promise["default"];
  5817. }
  5818. /***/ }),
  5819. /* 161 */
  5820. /***/ (function(module, exports, __webpack_require__) {
  5821. module.exports = __webpack_require__(162);
  5822. /***/ }),
  5823. /* 162 */
  5824. /***/ (function(module, exports, __webpack_require__) {
  5825. var parent = __webpack_require__(163);
  5826. module.exports = parent;
  5827. /***/ }),
  5828. /* 163 */
  5829. /***/ (function(module, exports, __webpack_require__) {
  5830. __webpack_require__(61);
  5831. __webpack_require__(50);
  5832. __webpack_require__(54);
  5833. __webpack_require__(175);
  5834. __webpack_require__(178);
  5835. __webpack_require__(179);
  5836. var path = __webpack_require__(9);
  5837. module.exports = path.Promise;
  5838. /***/ }),
  5839. /* 164 */
  5840. /***/ (function(module, exports, __webpack_require__) {
  5841. var toInteger = __webpack_require__(62);
  5842. var requireObjectCoercible = __webpack_require__(49);
  5843. // `String.prototype.{ codePointAt, at }` methods implementation
  5844. var createMethod = function (CONVERT_TO_STRING) {
  5845. return function ($this, pos) {
  5846. var S = String(requireObjectCoercible($this));
  5847. var position = toInteger(pos);
  5848. var size = S.length;
  5849. var first, second;
  5850. if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;
  5851. first = S.charCodeAt(position);
  5852. return first < 0xD800 || first > 0xDBFF || position + 1 === size
  5853. || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF
  5854. ? CONVERT_TO_STRING ? S.charAt(position) : first
  5855. : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;
  5856. };
  5857. };
  5858. module.exports = {
  5859. // `String.prototype.codePointAt` method
  5860. // https://tc39.github.io/ecma262/#sec-string.prototype.codepointat
  5861. codeAt: createMethod(false),
  5862. // `String.prototype.at` method
  5863. // https://github.com/mathiasbynens/String.prototype.at
  5864. charAt: createMethod(true)
  5865. };
  5866. /***/ }),
  5867. /* 165 */
  5868. /***/ (function(module, exports, __webpack_require__) {
  5869. var global = __webpack_require__(8);
  5870. var inspectSource = __webpack_require__(102);
  5871. var WeakMap = global.WeakMap;
  5872. module.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap));
  5873. /***/ }),
  5874. /* 166 */
  5875. /***/ (function(module, exports, __webpack_require__) {
  5876. var global = __webpack_require__(8);
  5877. var createNonEnumerableProperty = __webpack_require__(19);
  5878. module.exports = function (key, value) {
  5879. try {
  5880. createNonEnumerableProperty(global, key, value);
  5881. } catch (error) {
  5882. global[key] = value;
  5883. } return value;
  5884. };
  5885. /***/ }),
  5886. /* 167 */
  5887. /***/ (function(module, exports, __webpack_require__) {
  5888. "use strict";
  5889. var IteratorPrototype = __webpack_require__(104).IteratorPrototype;
  5890. var create = __webpack_require__(77);
  5891. var createPropertyDescriptor = __webpack_require__(48);
  5892. var setToStringTag = __webpack_require__(37);
  5893. var Iterators = __webpack_require__(44);
  5894. var returnThis = function () { return this; };
  5895. module.exports = function (IteratorConstructor, NAME, next) {
  5896. var TO_STRING_TAG = NAME + ' Iterator';
  5897. IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) });
  5898. setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);
  5899. Iterators[TO_STRING_TAG] = returnThis;
  5900. return IteratorConstructor;
  5901. };
  5902. /***/ }),
  5903. /* 168 */
  5904. /***/ (function(module, exports, __webpack_require__) {
  5905. var fails = __webpack_require__(11);
  5906. module.exports = !fails(function () {
  5907. function F() { /* empty */ }
  5908. F.prototype.constructor = null;
  5909. return Object.getPrototypeOf(new F()) !== F.prototype;
  5910. });
  5911. /***/ }),
  5912. /* 169 */
  5913. /***/ (function(module, exports, __webpack_require__) {
  5914. var DESCRIPTORS = __webpack_require__(14);
  5915. var definePropertyModule = __webpack_require__(18);
  5916. var anObject = __webpack_require__(25);
  5917. var objectKeys = __webpack_require__(52);
  5918. // `Object.defineProperties` method
  5919. // https://tc39.github.io/ecma262/#sec-object.defineproperties
  5920. module.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {
  5921. anObject(O);
  5922. var keys = objectKeys(Properties);
  5923. var length = keys.length;
  5924. var index = 0;
  5925. var key;
  5926. while (length > index) definePropertyModule.f(O, key = keys[index++], Properties[key]);
  5927. return O;
  5928. };
  5929. /***/ }),
  5930. /* 170 */
  5931. /***/ (function(module, exports, __webpack_require__) {
  5932. "use strict";
  5933. var TO_STRING_TAG_SUPPORT = __webpack_require__(81);
  5934. var classof = __webpack_require__(65);
  5935. // `Object.prototype.toString` method implementation
  5936. // https://tc39.github.io/ecma262/#sec-object.prototype.tostring
  5937. module.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {
  5938. return '[object ' + classof(this) + ']';
  5939. };
  5940. /***/ }),
  5941. /* 171 */
  5942. /***/ (function(module, exports, __webpack_require__) {
  5943. var anObject = __webpack_require__(25);
  5944. var aPossiblePrototype = __webpack_require__(172);
  5945. // `Object.setPrototypeOf` method
  5946. // https://tc39.github.io/ecma262/#sec-object.setprototypeof
  5947. // Works with __proto__ only. Old v8 can't work with null proto objects.
  5948. /* eslint-disable no-proto */
  5949. module.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {
  5950. var CORRECT_SETTER = false;
  5951. var test = {};
  5952. var setter;
  5953. try {
  5954. setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;
  5955. setter.call(test, []);
  5956. CORRECT_SETTER = test instanceof Array;
  5957. } catch (error) { /* empty */ }
  5958. return function setPrototypeOf(O, proto) {
  5959. anObject(O);
  5960. aPossiblePrototype(proto);
  5961. if (CORRECT_SETTER) setter.call(O, proto);
  5962. else O.__proto__ = proto;
  5963. return O;
  5964. };
  5965. }() : undefined);
  5966. /***/ }),
  5967. /* 172 */
  5968. /***/ (function(module, exports, __webpack_require__) {
  5969. var isObject = __webpack_require__(13);
  5970. module.exports = function (it) {
  5971. if (!isObject(it) && it !== null) {
  5972. throw TypeError("Can't set " + String(it) + ' as a prototype');
  5973. } return it;
  5974. };
  5975. /***/ }),
  5976. /* 173 */
  5977. /***/ (function(module, exports, __webpack_require__) {
  5978. "use strict";
  5979. var toIndexedObject = __webpack_require__(30);
  5980. var addToUnscopables = __webpack_require__(82);
  5981. var Iterators = __webpack_require__(44);
  5982. var InternalStateModule = __webpack_require__(42);
  5983. var defineIterator = __webpack_require__(75);
  5984. var ARRAY_ITERATOR = 'Array Iterator';
  5985. var setInternalState = InternalStateModule.set;
  5986. var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);
  5987. // `Array.prototype.entries` method
  5988. // https://tc39.github.io/ecma262/#sec-array.prototype.entries
  5989. // `Array.prototype.keys` method
  5990. // https://tc39.github.io/ecma262/#sec-array.prototype.keys
  5991. // `Array.prototype.values` method
  5992. // https://tc39.github.io/ecma262/#sec-array.prototype.values
  5993. // `Array.prototype[@@iterator]` method
  5994. // https://tc39.github.io/ecma262/#sec-array.prototype-@@iterator
  5995. // `CreateArrayIterator` internal method
  5996. // https://tc39.github.io/ecma262/#sec-createarrayiterator
  5997. module.exports = defineIterator(Array, 'Array', function (iterated, kind) {
  5998. setInternalState(this, {
  5999. type: ARRAY_ITERATOR,
  6000. target: toIndexedObject(iterated), // target
  6001. index: 0, // next index
  6002. kind: kind // kind
  6003. });
  6004. // `%ArrayIteratorPrototype%.next` method
  6005. // https://tc39.github.io/ecma262/#sec-%arrayiteratorprototype%.next
  6006. }, function () {
  6007. var state = getInternalState(this);
  6008. var target = state.target;
  6009. var kind = state.kind;
  6010. var index = state.index++;
  6011. if (!target || index >= target.length) {
  6012. state.target = undefined;
  6013. return { value: undefined, done: true };
  6014. }
  6015. if (kind == 'keys') return { value: index, done: false };
  6016. if (kind == 'values') return { value: target[index], done: false };
  6017. return { value: [index, target[index]], done: false };
  6018. }, 'values');
  6019. // argumentsList[@@iterator] is %ArrayProto_values%
  6020. // https://tc39.github.io/ecma262/#sec-createunmappedargumentsobject
  6021. // https://tc39.github.io/ecma262/#sec-createmappedargumentsobject
  6022. Iterators.Arguments = Iterators.Array;
  6023. // https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables
  6024. addToUnscopables('keys');
  6025. addToUnscopables('values');
  6026. addToUnscopables('entries');
  6027. /***/ }),
  6028. /* 174 */
  6029. /***/ (function(module, exports) {
  6030. // iterable DOM collections
  6031. // flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods
  6032. module.exports = {
  6033. CSSRuleList: 0,
  6034. CSSStyleDeclaration: 0,
  6035. CSSValueList: 0,
  6036. ClientRectList: 0,
  6037. DOMRectList: 0,
  6038. DOMStringList: 0,
  6039. DOMTokenList: 1,
  6040. DataTransferItemList: 0,
  6041. FileList: 0,
  6042. HTMLAllCollection: 0,
  6043. HTMLCollection: 0,
  6044. HTMLFormElement: 0,
  6045. HTMLSelectElement: 0,
  6046. MediaList: 0,
  6047. MimeTypeArray: 0,
  6048. NamedNodeMap: 0,
  6049. NodeList: 1,
  6050. PaintRequestList: 0,
  6051. Plugin: 0,
  6052. PluginArray: 0,
  6053. SVGLengthList: 0,
  6054. SVGNumberList: 0,
  6055. SVGPathSegList: 0,
  6056. SVGPointList: 0,
  6057. SVGStringList: 0,
  6058. SVGTransformList: 0,
  6059. SourceBufferList: 0,
  6060. StyleSheetList: 0,
  6061. TextTrackCueList: 0,
  6062. TextTrackList: 0,
  6063. TouchList: 0
  6064. };
  6065. /***/ }),
  6066. /* 175 */
  6067. /***/ (function(module, exports, __webpack_require__) {
  6068. "use strict";
  6069. var $ = __webpack_require__(5);
  6070. var IS_PURE = __webpack_require__(43);
  6071. var global = __webpack_require__(8);
  6072. var getBuiltIn = __webpack_require__(36);
  6073. var NativePromise = __webpack_require__(109);
  6074. var redefine = __webpack_require__(53);
  6075. var redefineAll = __webpack_require__(110);
  6076. var setToStringTag = __webpack_require__(37);
  6077. var setSpecies = __webpack_require__(111);
  6078. var isObject = __webpack_require__(13);
  6079. var aFunction = __webpack_require__(41);
  6080. var anInstance = __webpack_require__(83);
  6081. var classof = __webpack_require__(34);
  6082. var inspectSource = __webpack_require__(102);
  6083. var iterate = __webpack_require__(66);
  6084. var checkCorrectnessOfIteration = __webpack_require__(115);
  6085. var speciesConstructor = __webpack_require__(116);
  6086. var task = __webpack_require__(117).set;
  6087. var microtask = __webpack_require__(176);
  6088. var promiseResolve = __webpack_require__(119);
  6089. var hostReportErrors = __webpack_require__(177);
  6090. var newPromiseCapabilityModule = __webpack_require__(85);
  6091. var perform = __webpack_require__(120);
  6092. var InternalStateModule = __webpack_require__(42);
  6093. var isForced = __webpack_require__(101);
  6094. var wellKnownSymbol = __webpack_require__(10);
  6095. var V8_VERSION = __webpack_require__(86);
  6096. var SPECIES = wellKnownSymbol('species');
  6097. var PROMISE = 'Promise';
  6098. var getInternalState = InternalStateModule.get;
  6099. var setInternalState = InternalStateModule.set;
  6100. var getInternalPromiseState = InternalStateModule.getterFor(PROMISE);
  6101. var PromiseConstructor = NativePromise;
  6102. var TypeError = global.TypeError;
  6103. var document = global.document;
  6104. var process = global.process;
  6105. var $fetch = getBuiltIn('fetch');
  6106. var newPromiseCapability = newPromiseCapabilityModule.f;
  6107. var newGenericPromiseCapability = newPromiseCapability;
  6108. var IS_NODE = classof(process) == 'process';
  6109. var DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent);
  6110. var UNHANDLED_REJECTION = 'unhandledrejection';
  6111. var REJECTION_HANDLED = 'rejectionhandled';
  6112. var PENDING = 0;
  6113. var FULFILLED = 1;
  6114. var REJECTED = 2;
  6115. var HANDLED = 1;
  6116. var UNHANDLED = 2;
  6117. var Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;
  6118. var FORCED = isForced(PROMISE, function () {
  6119. var GLOBAL_CORE_JS_PROMISE = inspectSource(PromiseConstructor) !== String(PromiseConstructor);
  6120. if (!GLOBAL_CORE_JS_PROMISE) {
  6121. // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables
  6122. // https://bugs.chromium.org/p/chromium/issues/detail?id=830565
  6123. // We can't detect it synchronously, so just check versions
  6124. if (V8_VERSION === 66) return true;
  6125. // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test
  6126. if (!IS_NODE && typeof PromiseRejectionEvent != 'function') return true;
  6127. }
  6128. // We need Promise#finally in the pure version for preventing prototype pollution
  6129. if (IS_PURE && !PromiseConstructor.prototype['finally']) return true;
  6130. // We can't use @@species feature detection in V8 since it causes
  6131. // deoptimization and performance degradation
  6132. // https://github.com/zloirock/core-js/issues/679
  6133. if (V8_VERSION >= 51 && /native code/.test(PromiseConstructor)) return false;
  6134. // Detect correctness of subclassing with @@species support
  6135. var promise = PromiseConstructor.resolve(1);
  6136. var FakePromise = function (exec) {
  6137. exec(function () { /* empty */ }, function () { /* empty */ });
  6138. };
  6139. var constructor = promise.constructor = {};
  6140. constructor[SPECIES] = FakePromise;
  6141. return !(promise.then(function () { /* empty */ }) instanceof FakePromise);
  6142. });
  6143. var INCORRECT_ITERATION = FORCED || !checkCorrectnessOfIteration(function (iterable) {
  6144. PromiseConstructor.all(iterable)['catch'](function () { /* empty */ });
  6145. });
  6146. // helpers
  6147. var isThenable = function (it) {
  6148. var then;
  6149. return isObject(it) && typeof (then = it.then) == 'function' ? then : false;
  6150. };
  6151. var notify = function (promise, state, isReject) {
  6152. if (state.notified) return;
  6153. state.notified = true;
  6154. var chain = state.reactions;
  6155. microtask(function () {
  6156. var value = state.value;
  6157. var ok = state.state == FULFILLED;
  6158. var index = 0;
  6159. // variable length - can't use forEach
  6160. while (chain.length > index) {
  6161. var reaction = chain[index++];
  6162. var handler = ok ? reaction.ok : reaction.fail;
  6163. var resolve = reaction.resolve;
  6164. var reject = reaction.reject;
  6165. var domain = reaction.domain;
  6166. var result, then, exited;
  6167. try {
  6168. if (handler) {
  6169. if (!ok) {
  6170. if (state.rejection === UNHANDLED) onHandleUnhandled(promise, state);
  6171. state.rejection = HANDLED;
  6172. }
  6173. if (handler === true) result = value;
  6174. else {
  6175. if (domain) domain.enter();
  6176. result = handler(value); // can throw
  6177. if (domain) {
  6178. domain.exit();
  6179. exited = true;
  6180. }
  6181. }
  6182. if (result === reaction.promise) {
  6183. reject(TypeError('Promise-chain cycle'));
  6184. } else if (then = isThenable(result)) {
  6185. then.call(result, resolve, reject);
  6186. } else resolve(result);
  6187. } else reject(value);
  6188. } catch (error) {
  6189. if (domain && !exited) domain.exit();
  6190. reject(error);
  6191. }
  6192. }
  6193. state.reactions = [];
  6194. state.notified = false;
  6195. if (isReject && !state.rejection) onUnhandled(promise, state);
  6196. });
  6197. };
  6198. var dispatchEvent = function (name, promise, reason) {
  6199. var event, handler;
  6200. if (DISPATCH_EVENT) {
  6201. event = document.createEvent('Event');
  6202. event.promise = promise;
  6203. event.reason = reason;
  6204. event.initEvent(name, false, true);
  6205. global.dispatchEvent(event);
  6206. } else event = { promise: promise, reason: reason };
  6207. if (handler = global['on' + name]) handler(event);
  6208. else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason);
  6209. };
  6210. var onUnhandled = function (promise, state) {
  6211. task.call(global, function () {
  6212. var value = state.value;
  6213. var IS_UNHANDLED = isUnhandled(state);
  6214. var result;
  6215. if (IS_UNHANDLED) {
  6216. result = perform(function () {
  6217. if (IS_NODE) {
  6218. process.emit('unhandledRejection', value, promise);
  6219. } else dispatchEvent(UNHANDLED_REJECTION, promise, value);
  6220. });
  6221. // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should
  6222. state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED;
  6223. if (result.error) throw result.value;
  6224. }
  6225. });
  6226. };
  6227. var isUnhandled = function (state) {
  6228. return state.rejection !== HANDLED && !state.parent;
  6229. };
  6230. var onHandleUnhandled = function (promise, state) {
  6231. task.call(global, function () {
  6232. if (IS_NODE) {
  6233. process.emit('rejectionHandled', promise);
  6234. } else dispatchEvent(REJECTION_HANDLED, promise, state.value);
  6235. });
  6236. };
  6237. var bind = function (fn, promise, state, unwrap) {
  6238. return function (value) {
  6239. fn(promise, state, value, unwrap);
  6240. };
  6241. };
  6242. var internalReject = function (promise, state, value, unwrap) {
  6243. if (state.done) return;
  6244. state.done = true;
  6245. if (unwrap) state = unwrap;
  6246. state.value = value;
  6247. state.state = REJECTED;
  6248. notify(promise, state, true);
  6249. };
  6250. var internalResolve = function (promise, state, value, unwrap) {
  6251. if (state.done) return;
  6252. state.done = true;
  6253. if (unwrap) state = unwrap;
  6254. try {
  6255. if (promise === value) throw TypeError("Promise can't be resolved itself");
  6256. var then = isThenable(value);
  6257. if (then) {
  6258. microtask(function () {
  6259. var wrapper = { done: false };
  6260. try {
  6261. then.call(value,
  6262. bind(internalResolve, promise, wrapper, state),
  6263. bind(internalReject, promise, wrapper, state)
  6264. );
  6265. } catch (error) {
  6266. internalReject(promise, wrapper, error, state);
  6267. }
  6268. });
  6269. } else {
  6270. state.value = value;
  6271. state.state = FULFILLED;
  6272. notify(promise, state, false);
  6273. }
  6274. } catch (error) {
  6275. internalReject(promise, { done: false }, error, state);
  6276. }
  6277. };
  6278. // constructor polyfill
  6279. if (FORCED) {
  6280. // 25.4.3.1 Promise(executor)
  6281. PromiseConstructor = function Promise(executor) {
  6282. anInstance(this, PromiseConstructor, PROMISE);
  6283. aFunction(executor);
  6284. Internal.call(this);
  6285. var state = getInternalState(this);
  6286. try {
  6287. executor(bind(internalResolve, this, state), bind(internalReject, this, state));
  6288. } catch (error) {
  6289. internalReject(this, state, error);
  6290. }
  6291. };
  6292. // eslint-disable-next-line no-unused-vars
  6293. Internal = function Promise(executor) {
  6294. setInternalState(this, {
  6295. type: PROMISE,
  6296. done: false,
  6297. notified: false,
  6298. parent: false,
  6299. reactions: [],
  6300. rejection: false,
  6301. state: PENDING,
  6302. value: undefined
  6303. });
  6304. };
  6305. Internal.prototype = redefineAll(PromiseConstructor.prototype, {
  6306. // `Promise.prototype.then` method
  6307. // https://tc39.github.io/ecma262/#sec-promise.prototype.then
  6308. then: function then(onFulfilled, onRejected) {
  6309. var state = getInternalPromiseState(this);
  6310. var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor));
  6311. reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;
  6312. reaction.fail = typeof onRejected == 'function' && onRejected;
  6313. reaction.domain = IS_NODE ? process.domain : undefined;
  6314. state.parent = true;
  6315. state.reactions.push(reaction);
  6316. if (state.state != PENDING) notify(this, state, false);
  6317. return reaction.promise;
  6318. },
  6319. // `Promise.prototype.catch` method
  6320. // https://tc39.github.io/ecma262/#sec-promise.prototype.catch
  6321. 'catch': function (onRejected) {
  6322. return this.then(undefined, onRejected);
  6323. }
  6324. });
  6325. OwnPromiseCapability = function () {
  6326. var promise = new Internal();
  6327. var state = getInternalState(promise);
  6328. this.promise = promise;
  6329. this.resolve = bind(internalResolve, promise, state);
  6330. this.reject = bind(internalReject, promise, state);
  6331. };
  6332. newPromiseCapabilityModule.f = newPromiseCapability = function (C) {
  6333. return C === PromiseConstructor || C === PromiseWrapper
  6334. ? new OwnPromiseCapability(C)
  6335. : newGenericPromiseCapability(C);
  6336. };
  6337. if (!IS_PURE && typeof NativePromise == 'function') {
  6338. nativeThen = NativePromise.prototype.then;
  6339. // wrap native Promise#then for native async functions
  6340. redefine(NativePromise.prototype, 'then', function then(onFulfilled, onRejected) {
  6341. var that = this;
  6342. return new PromiseConstructor(function (resolve, reject) {
  6343. nativeThen.call(that, resolve, reject);
  6344. }).then(onFulfilled, onRejected);
  6345. // https://github.com/zloirock/core-js/issues/640
  6346. }, { unsafe: true });
  6347. // wrap fetch result
  6348. if (typeof $fetch == 'function') $({ global: true, enumerable: true, forced: true }, {
  6349. // eslint-disable-next-line no-unused-vars
  6350. fetch: function fetch(input /* , init */) {
  6351. return promiseResolve(PromiseConstructor, $fetch.apply(global, arguments));
  6352. }
  6353. });
  6354. }
  6355. }
  6356. $({ global: true, wrap: true, forced: FORCED }, {
  6357. Promise: PromiseConstructor
  6358. });
  6359. setToStringTag(PromiseConstructor, PROMISE, false, true);
  6360. setSpecies(PROMISE);
  6361. PromiseWrapper = getBuiltIn(PROMISE);
  6362. // statics
  6363. $({ target: PROMISE, stat: true, forced: FORCED }, {
  6364. // `Promise.reject` method
  6365. // https://tc39.github.io/ecma262/#sec-promise.reject
  6366. reject: function reject(r) {
  6367. var capability = newPromiseCapability(this);
  6368. capability.reject.call(undefined, r);
  6369. return capability.promise;
  6370. }
  6371. });
  6372. $({ target: PROMISE, stat: true, forced: IS_PURE || FORCED }, {
  6373. // `Promise.resolve` method
  6374. // https://tc39.github.io/ecma262/#sec-promise.resolve
  6375. resolve: function resolve(x) {
  6376. return promiseResolve(IS_PURE && this === PromiseWrapper ? PromiseConstructor : this, x);
  6377. }
  6378. });
  6379. $({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, {
  6380. // `Promise.all` method
  6381. // https://tc39.github.io/ecma262/#sec-promise.all
  6382. all: function all(iterable) {
  6383. var C = this;
  6384. var capability = newPromiseCapability(C);
  6385. var resolve = capability.resolve;
  6386. var reject = capability.reject;
  6387. var result = perform(function () {
  6388. var $promiseResolve = aFunction(C.resolve);
  6389. var values = [];
  6390. var counter = 0;
  6391. var remaining = 1;
  6392. iterate(iterable, function (promise) {
  6393. var index = counter++;
  6394. var alreadyCalled = false;
  6395. values.push(undefined);
  6396. remaining++;
  6397. $promiseResolve.call(C, promise).then(function (value) {
  6398. if (alreadyCalled) return;
  6399. alreadyCalled = true;
  6400. values[index] = value;
  6401. --remaining || resolve(values);
  6402. }, reject);
  6403. });
  6404. --remaining || resolve(values);
  6405. });
  6406. if (result.error) reject(result.value);
  6407. return capability.promise;
  6408. },
  6409. // `Promise.race` method
  6410. // https://tc39.github.io/ecma262/#sec-promise.race
  6411. race: function race(iterable) {
  6412. var C = this;
  6413. var capability = newPromiseCapability(C);
  6414. var reject = capability.reject;
  6415. var result = perform(function () {
  6416. var $promiseResolve = aFunction(C.resolve);
  6417. iterate(iterable, function (promise) {
  6418. $promiseResolve.call(C, promise).then(capability.resolve, reject);
  6419. });
  6420. });
  6421. if (result.error) reject(result.value);
  6422. return capability.promise;
  6423. }
  6424. });
  6425. /***/ }),
  6426. /* 176 */
  6427. /***/ (function(module, exports, __webpack_require__) {
  6428. var global = __webpack_require__(8);
  6429. var getOwnPropertyDescriptor = __webpack_require__(71).f;
  6430. var classof = __webpack_require__(34);
  6431. var macrotask = __webpack_require__(117).set;
  6432. var IS_IOS = __webpack_require__(118);
  6433. var MutationObserver = global.MutationObserver || global.WebKitMutationObserver;
  6434. var process = global.process;
  6435. var Promise = global.Promise;
  6436. var IS_NODE = classof(process) == 'process';
  6437. // Node.js 11 shows ExperimentalWarning on getting `queueMicrotask`
  6438. var queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask');
  6439. var queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value;
  6440. var flush, head, last, notify, toggle, node, promise, then;
  6441. // modern engines have queueMicrotask method
  6442. if (!queueMicrotask) {
  6443. flush = function () {
  6444. var parent, fn;
  6445. if (IS_NODE && (parent = process.domain)) parent.exit();
  6446. while (head) {
  6447. fn = head.fn;
  6448. head = head.next;
  6449. try {
  6450. fn();
  6451. } catch (error) {
  6452. if (head) notify();
  6453. else last = undefined;
  6454. throw error;
  6455. }
  6456. } last = undefined;
  6457. if (parent) parent.enter();
  6458. };
  6459. // Node.js
  6460. if (IS_NODE) {
  6461. notify = function () {
  6462. process.nextTick(flush);
  6463. };
  6464. // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339
  6465. } else if (MutationObserver && !IS_IOS) {
  6466. toggle = true;
  6467. node = document.createTextNode('');
  6468. new MutationObserver(flush).observe(node, { characterData: true });
  6469. notify = function () {
  6470. node.data = toggle = !toggle;
  6471. };
  6472. // environments with maybe non-completely correct, but existent Promise
  6473. } else if (Promise && Promise.resolve) {
  6474. // Promise.resolve without an argument throws an error in LG WebOS 2
  6475. promise = Promise.resolve(undefined);
  6476. then = promise.then;
  6477. notify = function () {
  6478. then.call(promise, flush);
  6479. };
  6480. // for other environments - macrotask based on:
  6481. // - setImmediate
  6482. // - MessageChannel
  6483. // - window.postMessag
  6484. // - onreadystatechange
  6485. // - setTimeout
  6486. } else {
  6487. notify = function () {
  6488. // strange IE + webpack dev server bug - use .call(global)
  6489. macrotask.call(global, flush);
  6490. };
  6491. }
  6492. }
  6493. module.exports = queueMicrotask || function (fn) {
  6494. var task = { fn: fn, next: undefined };
  6495. if (last) last.next = task;
  6496. if (!head) {
  6497. head = task;
  6498. notify();
  6499. } last = task;
  6500. };
  6501. /***/ }),
  6502. /* 177 */
  6503. /***/ (function(module, exports, __webpack_require__) {
  6504. var global = __webpack_require__(8);
  6505. module.exports = function (a, b) {
  6506. var console = global.console;
  6507. if (console && console.error) {
  6508. arguments.length === 1 ? console.error(a) : console.error(a, b);
  6509. }
  6510. };
  6511. /***/ }),
  6512. /* 178 */
  6513. /***/ (function(module, exports, __webpack_require__) {
  6514. "use strict";
  6515. var $ = __webpack_require__(5);
  6516. var aFunction = __webpack_require__(41);
  6517. var newPromiseCapabilityModule = __webpack_require__(85);
  6518. var perform = __webpack_require__(120);
  6519. var iterate = __webpack_require__(66);
  6520. // `Promise.allSettled` method
  6521. // https://github.com/tc39/proposal-promise-allSettled
  6522. $({ target: 'Promise', stat: true }, {
  6523. allSettled: function allSettled(iterable) {
  6524. var C = this;
  6525. var capability = newPromiseCapabilityModule.f(C);
  6526. var resolve = capability.resolve;
  6527. var reject = capability.reject;
  6528. var result = perform(function () {
  6529. var promiseResolve = aFunction(C.resolve);
  6530. var values = [];
  6531. var counter = 0;
  6532. var remaining = 1;
  6533. iterate(iterable, function (promise) {
  6534. var index = counter++;
  6535. var alreadyCalled = false;
  6536. values.push(undefined);
  6537. remaining++;
  6538. promiseResolve.call(C, promise).then(function (value) {
  6539. if (alreadyCalled) return;
  6540. alreadyCalled = true;
  6541. values[index] = { status: 'fulfilled', value: value };
  6542. --remaining || resolve(values);
  6543. }, function (e) {
  6544. if (alreadyCalled) return;
  6545. alreadyCalled = true;
  6546. values[index] = { status: 'rejected', reason: e };
  6547. --remaining || resolve(values);
  6548. });
  6549. });
  6550. --remaining || resolve(values);
  6551. });
  6552. if (result.error) reject(result.value);
  6553. return capability.promise;
  6554. }
  6555. });
  6556. /***/ }),
  6557. /* 179 */
  6558. /***/ (function(module, exports, __webpack_require__) {
  6559. "use strict";
  6560. var $ = __webpack_require__(5);
  6561. var IS_PURE = __webpack_require__(43);
  6562. var NativePromise = __webpack_require__(109);
  6563. var fails = __webpack_require__(11);
  6564. var getBuiltIn = __webpack_require__(36);
  6565. var speciesConstructor = __webpack_require__(116);
  6566. var promiseResolve = __webpack_require__(119);
  6567. var redefine = __webpack_require__(53);
  6568. // Safari bug https://bugs.webkit.org/show_bug.cgi?id=200829
  6569. var NON_GENERIC = !!NativePromise && fails(function () {
  6570. NativePromise.prototype['finally'].call({ then: function () { /* empty */ } }, function () { /* empty */ });
  6571. });
  6572. // `Promise.prototype.finally` method
  6573. // https://tc39.github.io/ecma262/#sec-promise.prototype.finally
  6574. $({ target: 'Promise', proto: true, real: true, forced: NON_GENERIC }, {
  6575. 'finally': function (onFinally) {
  6576. var C = speciesConstructor(this, getBuiltIn('Promise'));
  6577. var isFunction = typeof onFinally == 'function';
  6578. return this.then(
  6579. isFunction ? function (x) {
  6580. return promiseResolve(C, onFinally()).then(function () { return x; });
  6581. } : onFinally,
  6582. isFunction ? function (e) {
  6583. return promiseResolve(C, onFinally()).then(function () { throw e; });
  6584. } : onFinally
  6585. );
  6586. }
  6587. });
  6588. // patch native Promise.prototype for native async functions
  6589. if (!IS_PURE && typeof NativePromise == 'function' && !NativePromise.prototype['finally']) {
  6590. redefine(NativePromise.prototype, 'finally', getBuiltIn('Promise').prototype['finally']);
  6591. }
  6592. /***/ }),
  6593. /* 180 */
  6594. /***/ (function(module, exports, __webpack_require__) {
  6595. __webpack_require__(54);
  6596. var forEach = __webpack_require__(181);
  6597. var classof = __webpack_require__(65);
  6598. var ArrayPrototype = Array.prototype;
  6599. var DOMIterables = {
  6600. DOMTokenList: true,
  6601. NodeList: true
  6602. };
  6603. module.exports = function (it) {
  6604. var own = it.forEach;
  6605. return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.forEach)
  6606. // eslint-disable-next-line no-prototype-builtins
  6607. || DOMIterables.hasOwnProperty(classof(it)) ? forEach : own;
  6608. };
  6609. /***/ }),
  6610. /* 181 */
  6611. /***/ (function(module, exports, __webpack_require__) {
  6612. var parent = __webpack_require__(182);
  6613. module.exports = parent;
  6614. /***/ }),
  6615. /* 182 */
  6616. /***/ (function(module, exports, __webpack_require__) {
  6617. __webpack_require__(183);
  6618. var entryVirtual = __webpack_require__(15);
  6619. module.exports = entryVirtual('Array').forEach;
  6620. /***/ }),
  6621. /* 183 */
  6622. /***/ (function(module, exports, __webpack_require__) {
  6623. "use strict";
  6624. var $ = __webpack_require__(5);
  6625. var forEach = __webpack_require__(184);
  6626. // `Array.prototype.forEach` method
  6627. // https://tc39.github.io/ecma262/#sec-array.prototype.foreach
  6628. $({ target: 'Array', proto: true, forced: [].forEach != forEach }, {
  6629. forEach: forEach
  6630. });
  6631. /***/ }),
  6632. /* 184 */
  6633. /***/ (function(module, exports, __webpack_require__) {
  6634. "use strict";
  6635. var $forEach = __webpack_require__(32).forEach;
  6636. var arrayMethodIsStrict = __webpack_require__(67);
  6637. var arrayMethodUsesToLength = __webpack_require__(22);
  6638. var STRICT_METHOD = arrayMethodIsStrict('forEach');
  6639. var USES_TO_LENGTH = arrayMethodUsesToLength('forEach');
  6640. // `Array.prototype.forEach` method implementation
  6641. // https://tc39.github.io/ecma262/#sec-array.prototype.foreach
  6642. module.exports = (!STRICT_METHOD || !USES_TO_LENGTH) ? function forEach(callbackfn /* , thisArg */) {
  6643. return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
  6644. } : [].forEach;
  6645. /***/ }),
  6646. /* 185 */
  6647. /***/ (function(module, exports, __webpack_require__) {
  6648. var parent = __webpack_require__(186);
  6649. module.exports = parent;
  6650. /***/ }),
  6651. /* 186 */
  6652. /***/ (function(module, exports, __webpack_require__) {
  6653. __webpack_require__(187);
  6654. var path = __webpack_require__(9);
  6655. module.exports = path.Array.isArray;
  6656. /***/ }),
  6657. /* 187 */
  6658. /***/ (function(module, exports, __webpack_require__) {
  6659. var $ = __webpack_require__(5);
  6660. var isArray = __webpack_require__(55);
  6661. // `Array.isArray` method
  6662. // https://tc39.github.io/ecma262/#sec-array.isarray
  6663. $({ target: 'Array', stat: true }, {
  6664. isArray: isArray
  6665. });
  6666. /***/ }),
  6667. /* 188 */
  6668. /***/ (function(module, exports, __webpack_require__) {
  6669. var parent = __webpack_require__(189);
  6670. module.exports = parent;
  6671. /***/ }),
  6672. /* 189 */
  6673. /***/ (function(module, exports, __webpack_require__) {
  6674. var map = __webpack_require__(190);
  6675. var ArrayPrototype = Array.prototype;
  6676. module.exports = function (it) {
  6677. var own = it.map;
  6678. return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.map) ? map : own;
  6679. };
  6680. /***/ }),
  6681. /* 190 */
  6682. /***/ (function(module, exports, __webpack_require__) {
  6683. __webpack_require__(191);
  6684. var entryVirtual = __webpack_require__(15);
  6685. module.exports = entryVirtual('Array').map;
  6686. /***/ }),
  6687. /* 191 */
  6688. /***/ (function(module, exports, __webpack_require__) {
  6689. "use strict";
  6690. var $ = __webpack_require__(5);
  6691. var $map = __webpack_require__(32).map;
  6692. var arrayMethodHasSpeciesSupport = __webpack_require__(56);
  6693. var arrayMethodUsesToLength = __webpack_require__(22);
  6694. var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');
  6695. // FF49- issue
  6696. var USES_TO_LENGTH = arrayMethodUsesToLength('map');
  6697. // `Array.prototype.map` method
  6698. // https://tc39.github.io/ecma262/#sec-array.prototype.map
  6699. // with adding support of @@species
  6700. $({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, {
  6701. map: function map(callbackfn /* , thisArg */) {
  6702. return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
  6703. }
  6704. });
  6705. /***/ }),
  6706. /* 192 */
  6707. /***/ (function(module, exports, __webpack_require__) {
  6708. var parent = __webpack_require__(193);
  6709. module.exports = parent;
  6710. /***/ }),
  6711. /* 193 */
  6712. /***/ (function(module, exports, __webpack_require__) {
  6713. var trim = __webpack_require__(194);
  6714. var StringPrototype = String.prototype;
  6715. module.exports = function (it) {
  6716. var own = it.trim;
  6717. return typeof it === 'string' || it === StringPrototype
  6718. || (it instanceof String && own === StringPrototype.trim) ? trim : own;
  6719. };
  6720. /***/ }),
  6721. /* 194 */
  6722. /***/ (function(module, exports, __webpack_require__) {
  6723. __webpack_require__(195);
  6724. var entryVirtual = __webpack_require__(15);
  6725. module.exports = entryVirtual('String').trim;
  6726. /***/ }),
  6727. /* 195 */
  6728. /***/ (function(module, exports, __webpack_require__) {
  6729. "use strict";
  6730. var $ = __webpack_require__(5);
  6731. var $trim = __webpack_require__(90).trim;
  6732. var forcedStringTrimMethod = __webpack_require__(196);
  6733. // `String.prototype.trim` method
  6734. // https://tc39.github.io/ecma262/#sec-string.prototype.trim
  6735. $({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {
  6736. trim: function trim() {
  6737. return $trim(this);
  6738. }
  6739. });
  6740. /***/ }),
  6741. /* 196 */
  6742. /***/ (function(module, exports, __webpack_require__) {
  6743. var fails = __webpack_require__(11);
  6744. var whitespaces = __webpack_require__(68);
  6745. var non = '\u200B\u0085\u180E';
  6746. // check that a method works with the correct list
  6747. // of whitespaces and has a correct name
  6748. module.exports = function (METHOD_NAME) {
  6749. return fails(function () {
  6750. return !!whitespaces[METHOD_NAME]() || non[METHOD_NAME]() != non || whitespaces[METHOD_NAME].name !== METHOD_NAME;
  6751. });
  6752. };
  6753. /***/ }),
  6754. /* 197 */
  6755. /***/ (function(module, exports, __webpack_require__) {
  6756. var parent = __webpack_require__(198);
  6757. module.exports = parent;
  6758. /***/ }),
  6759. /* 198 */
  6760. /***/ (function(module, exports, __webpack_require__) {
  6761. __webpack_require__(199);
  6762. __webpack_require__(61);
  6763. __webpack_require__(50);
  6764. __webpack_require__(54);
  6765. var path = __webpack_require__(9);
  6766. module.exports = path.Map;
  6767. /***/ }),
  6768. /* 199 */
  6769. /***/ (function(module, exports, __webpack_require__) {
  6770. "use strict";
  6771. var collection = __webpack_require__(122);
  6772. var collectionStrong = __webpack_require__(124);
  6773. // `Map` constructor
  6774. // https://tc39.github.io/ecma262/#sec-map-objects
  6775. module.exports = collection('Map', function (init) {
  6776. return function Map() { return init(this, arguments.length ? arguments[0] : undefined); };
  6777. }, collectionStrong);
  6778. /***/ }),
  6779. /* 200 */
  6780. /***/ (function(module, exports, __webpack_require__) {
  6781. var fails = __webpack_require__(11);
  6782. module.exports = !fails(function () {
  6783. return Object.isExtensible(Object.preventExtensions({}));
  6784. });
  6785. /***/ }),
  6786. /* 201 */
  6787. /***/ (function(module, exports, __webpack_require__) {
  6788. var parent = __webpack_require__(202);
  6789. module.exports = parent;
  6790. /***/ }),
  6791. /* 202 */
  6792. /***/ (function(module, exports, __webpack_require__) {
  6793. var indexOf = __webpack_require__(203);
  6794. var ArrayPrototype = Array.prototype;
  6795. module.exports = function (it) {
  6796. var own = it.indexOf;
  6797. return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.indexOf) ? indexOf : own;
  6798. };
  6799. /***/ }),
  6800. /* 203 */
  6801. /***/ (function(module, exports, __webpack_require__) {
  6802. __webpack_require__(204);
  6803. var entryVirtual = __webpack_require__(15);
  6804. module.exports = entryVirtual('Array').indexOf;
  6805. /***/ }),
  6806. /* 204 */
  6807. /***/ (function(module, exports, __webpack_require__) {
  6808. "use strict";
  6809. var $ = __webpack_require__(5);
  6810. var $indexOf = __webpack_require__(78).indexOf;
  6811. var arrayMethodIsStrict = __webpack_require__(67);
  6812. var arrayMethodUsesToLength = __webpack_require__(22);
  6813. var nativeIndexOf = [].indexOf;
  6814. var NEGATIVE_ZERO = !!nativeIndexOf && 1 / [1].indexOf(1, -0) < 0;
  6815. var STRICT_METHOD = arrayMethodIsStrict('indexOf');
  6816. var USES_TO_LENGTH = arrayMethodUsesToLength('indexOf', { ACCESSORS: true, 1: 0 });
  6817. // `Array.prototype.indexOf` method
  6818. // https://tc39.github.io/ecma262/#sec-array.prototype.indexof
  6819. $({ target: 'Array', proto: true, forced: NEGATIVE_ZERO || !STRICT_METHOD || !USES_TO_LENGTH }, {
  6820. indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {
  6821. return NEGATIVE_ZERO
  6822. // convert -0 to +0
  6823. ? nativeIndexOf.apply(this, arguments) || 0
  6824. : $indexOf(this, searchElement, arguments.length > 1 ? arguments[1] : undefined);
  6825. }
  6826. });
  6827. /***/ }),
  6828. /* 205 */
  6829. /***/ (function(module, exports, __webpack_require__) {
  6830. var parent = __webpack_require__(206);
  6831. module.exports = parent;
  6832. /***/ }),
  6833. /* 206 */
  6834. /***/ (function(module, exports, __webpack_require__) {
  6835. var splice = __webpack_require__(207);
  6836. var ArrayPrototype = Array.prototype;
  6837. module.exports = function (it) {
  6838. var own = it.splice;
  6839. return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.splice) ? splice : own;
  6840. };
  6841. /***/ }),
  6842. /* 207 */
  6843. /***/ (function(module, exports, __webpack_require__) {
  6844. __webpack_require__(208);
  6845. var entryVirtual = __webpack_require__(15);
  6846. module.exports = entryVirtual('Array').splice;
  6847. /***/ }),
  6848. /* 208 */
  6849. /***/ (function(module, exports, __webpack_require__) {
  6850. "use strict";
  6851. var $ = __webpack_require__(5);
  6852. var toAbsoluteIndex = __webpack_require__(79);
  6853. var toInteger = __webpack_require__(62);
  6854. var toLength = __webpack_require__(35);
  6855. var toObject = __webpack_require__(31);
  6856. var arraySpeciesCreate = __webpack_require__(88);
  6857. var createProperty = __webpack_require__(69);
  6858. var arrayMethodHasSpeciesSupport = __webpack_require__(56);
  6859. var arrayMethodUsesToLength = __webpack_require__(22);
  6860. var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('splice');
  6861. var USES_TO_LENGTH = arrayMethodUsesToLength('splice', { ACCESSORS: true, 0: 0, 1: 2 });
  6862. var max = Math.max;
  6863. var min = Math.min;
  6864. var MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;
  6865. var MAXIMUM_ALLOWED_LENGTH_EXCEEDED = 'Maximum allowed length exceeded';
  6866. // `Array.prototype.splice` method
  6867. // https://tc39.github.io/ecma262/#sec-array.prototype.splice
  6868. // with adding support of @@species
  6869. $({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, {
  6870. splice: function splice(start, deleteCount /* , ...items */) {
  6871. var O = toObject(this);
  6872. var len = toLength(O.length);
  6873. var actualStart = toAbsoluteIndex(start, len);
  6874. var argumentsLength = arguments.length;
  6875. var insertCount, actualDeleteCount, A, k, from, to;
  6876. if (argumentsLength === 0) {
  6877. insertCount = actualDeleteCount = 0;
  6878. } else if (argumentsLength === 1) {
  6879. insertCount = 0;
  6880. actualDeleteCount = len - actualStart;
  6881. } else {
  6882. insertCount = argumentsLength - 2;
  6883. actualDeleteCount = min(max(toInteger(deleteCount), 0), len - actualStart);
  6884. }
  6885. if (len + insertCount - actualDeleteCount > MAX_SAFE_INTEGER) {
  6886. throw TypeError(MAXIMUM_ALLOWED_LENGTH_EXCEEDED);
  6887. }
  6888. A = arraySpeciesCreate(O, actualDeleteCount);
  6889. for (k = 0; k < actualDeleteCount; k++) {
  6890. from = actualStart + k;
  6891. if (from in O) createProperty(A, k, O[from]);
  6892. }
  6893. A.length = actualDeleteCount;
  6894. if (insertCount < actualDeleteCount) {
  6895. for (k = actualStart; k < len - actualDeleteCount; k++) {
  6896. from = k + actualDeleteCount;
  6897. to = k + insertCount;
  6898. if (from in O) O[to] = O[from];
  6899. else delete O[to];
  6900. }
  6901. for (k = len; k > len - actualDeleteCount + insertCount; k--) delete O[k - 1];
  6902. } else if (insertCount > actualDeleteCount) {
  6903. for (k = len - actualDeleteCount; k > actualStart; k--) {
  6904. from = k + actualDeleteCount - 1;
  6905. to = k + insertCount - 1;
  6906. if (from in O) O[to] = O[from];
  6907. else delete O[to];
  6908. }
  6909. }
  6910. for (k = 0; k < insertCount; k++) {
  6911. O[k + actualStart] = arguments[k + 2];
  6912. }
  6913. O.length = len - actualDeleteCount + insertCount;
  6914. return A;
  6915. }
  6916. });
  6917. /***/ }),
  6918. /* 209 */
  6919. /***/ (function(module, exports, __webpack_require__) {
  6920. var parent = __webpack_require__(210);
  6921. module.exports = parent;
  6922. /***/ }),
  6923. /* 210 */
  6924. /***/ (function(module, exports, __webpack_require__) {
  6925. var filter = __webpack_require__(211);
  6926. var ArrayPrototype = Array.prototype;
  6927. module.exports = function (it) {
  6928. var own = it.filter;
  6929. return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.filter) ? filter : own;
  6930. };
  6931. /***/ }),
  6932. /* 211 */
  6933. /***/ (function(module, exports, __webpack_require__) {
  6934. __webpack_require__(212);
  6935. var entryVirtual = __webpack_require__(15);
  6936. module.exports = entryVirtual('Array').filter;
  6937. /***/ }),
  6938. /* 212 */
  6939. /***/ (function(module, exports, __webpack_require__) {
  6940. "use strict";
  6941. var $ = __webpack_require__(5);
  6942. var $filter = __webpack_require__(32).filter;
  6943. var arrayMethodHasSpeciesSupport = __webpack_require__(56);
  6944. var arrayMethodUsesToLength = __webpack_require__(22);
  6945. var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');
  6946. // Edge 14- issue
  6947. var USES_TO_LENGTH = arrayMethodUsesToLength('filter');
  6948. // `Array.prototype.filter` method
  6949. // https://tc39.github.io/ecma262/#sec-array.prototype.filter
  6950. // with adding support of @@species
  6951. $({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, {
  6952. filter: function filter(callbackfn /* , thisArg */) {
  6953. return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
  6954. }
  6955. });
  6956. /***/ }),
  6957. /* 213 */
  6958. /***/ (function(module, exports, __webpack_require__) {
  6959. var parent = __webpack_require__(214);
  6960. module.exports = parent;
  6961. /***/ }),
  6962. /* 214 */
  6963. /***/ (function(module, exports, __webpack_require__) {
  6964. var arrayIncludes = __webpack_require__(215);
  6965. var stringIncludes = __webpack_require__(217);
  6966. var ArrayPrototype = Array.prototype;
  6967. var StringPrototype = String.prototype;
  6968. module.exports = function (it) {
  6969. var own = it.includes;
  6970. if (it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.includes)) return arrayIncludes;
  6971. if (typeof it === 'string' || it === StringPrototype || (it instanceof String && own === StringPrototype.includes)) {
  6972. return stringIncludes;
  6973. } return own;
  6974. };
  6975. /***/ }),
  6976. /* 215 */
  6977. /***/ (function(module, exports, __webpack_require__) {
  6978. __webpack_require__(216);
  6979. var entryVirtual = __webpack_require__(15);
  6980. module.exports = entryVirtual('Array').includes;
  6981. /***/ }),
  6982. /* 216 */
  6983. /***/ (function(module, exports, __webpack_require__) {
  6984. "use strict";
  6985. var $ = __webpack_require__(5);
  6986. var $includes = __webpack_require__(78).includes;
  6987. var addToUnscopables = __webpack_require__(82);
  6988. var arrayMethodUsesToLength = __webpack_require__(22);
  6989. var USES_TO_LENGTH = arrayMethodUsesToLength('indexOf', { ACCESSORS: true, 1: 0 });
  6990. // `Array.prototype.includes` method
  6991. // https://tc39.github.io/ecma262/#sec-array.prototype.includes
  6992. $({ target: 'Array', proto: true, forced: !USES_TO_LENGTH }, {
  6993. includes: function includes(el /* , fromIndex = 0 */) {
  6994. return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);
  6995. }
  6996. });
  6997. // https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables
  6998. addToUnscopables('includes');
  6999. /***/ }),
  7000. /* 217 */
  7001. /***/ (function(module, exports, __webpack_require__) {
  7002. __webpack_require__(218);
  7003. var entryVirtual = __webpack_require__(15);
  7004. module.exports = entryVirtual('String').includes;
  7005. /***/ }),
  7006. /* 218 */
  7007. /***/ (function(module, exports, __webpack_require__) {
  7008. "use strict";
  7009. var $ = __webpack_require__(5);
  7010. var notARegExp = __webpack_require__(219);
  7011. var requireObjectCoercible = __webpack_require__(49);
  7012. var correctIsRegExpLogic = __webpack_require__(221);
  7013. // `String.prototype.includes` method
  7014. // https://tc39.github.io/ecma262/#sec-string.prototype.includes
  7015. $({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, {
  7016. includes: function includes(searchString /* , position = 0 */) {
  7017. return !!~String(requireObjectCoercible(this))
  7018. .indexOf(notARegExp(searchString), arguments.length > 1 ? arguments[1] : undefined);
  7019. }
  7020. });
  7021. /***/ }),
  7022. /* 219 */
  7023. /***/ (function(module, exports, __webpack_require__) {
  7024. var isRegExp = __webpack_require__(220);
  7025. module.exports = function (it) {
  7026. if (isRegExp(it)) {
  7027. throw TypeError("The method doesn't accept regular expressions");
  7028. } return it;
  7029. };
  7030. /***/ }),
  7031. /* 220 */
  7032. /***/ (function(module, exports, __webpack_require__) {
  7033. var isObject = __webpack_require__(13);
  7034. var classof = __webpack_require__(34);
  7035. var wellKnownSymbol = __webpack_require__(10);
  7036. var MATCH = wellKnownSymbol('match');
  7037. // `IsRegExp` abstract operation
  7038. // https://tc39.github.io/ecma262/#sec-isregexp
  7039. module.exports = function (it) {
  7040. var isRegExp;
  7041. return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp');
  7042. };
  7043. /***/ }),
  7044. /* 221 */
  7045. /***/ (function(module, exports, __webpack_require__) {
  7046. var wellKnownSymbol = __webpack_require__(10);
  7047. var MATCH = wellKnownSymbol('match');
  7048. module.exports = function (METHOD_NAME) {
  7049. var regexp = /./;
  7050. try {
  7051. '/./'[METHOD_NAME](regexp);
  7052. } catch (e) {
  7053. try {
  7054. regexp[MATCH] = false;
  7055. return '/./'[METHOD_NAME](regexp);
  7056. } catch (f) { /* empty */ }
  7057. } return false;
  7058. };
  7059. /***/ }),
  7060. /* 222 */
  7061. /***/ (function(module, exports, __webpack_require__) {
  7062. var parent = __webpack_require__(223);
  7063. module.exports = parent;
  7064. /***/ }),
  7065. /* 223 */
  7066. /***/ (function(module, exports, __webpack_require__) {
  7067. var bind = __webpack_require__(224);
  7068. var FunctionPrototype = Function.prototype;
  7069. module.exports = function (it) {
  7070. var own = it.bind;
  7071. return it === FunctionPrototype || (it instanceof Function && own === FunctionPrototype.bind) ? bind : own;
  7072. };
  7073. /***/ }),
  7074. /* 224 */
  7075. /***/ (function(module, exports, __webpack_require__) {
  7076. __webpack_require__(225);
  7077. var entryVirtual = __webpack_require__(15);
  7078. module.exports = entryVirtual('Function').bind;
  7079. /***/ }),
  7080. /* 225 */
  7081. /***/ (function(module, exports, __webpack_require__) {
  7082. var $ = __webpack_require__(5);
  7083. var bind = __webpack_require__(226);
  7084. // `Function.prototype.bind` method
  7085. // https://tc39.github.io/ecma262/#sec-function.prototype.bind
  7086. $({ target: 'Function', proto: true }, {
  7087. bind: bind
  7088. });
  7089. /***/ }),
  7090. /* 226 */
  7091. /***/ (function(module, exports, __webpack_require__) {
  7092. "use strict";
  7093. var aFunction = __webpack_require__(41);
  7094. var isObject = __webpack_require__(13);
  7095. var slice = [].slice;
  7096. var factories = {};
  7097. var construct = function (C, argsLength, args) {
  7098. if (!(argsLength in factories)) {
  7099. for (var list = [], i = 0; i < argsLength; i++) list[i] = 'a[' + i + ']';
  7100. // eslint-disable-next-line no-new-func
  7101. factories[argsLength] = Function('C,a', 'return new C(' + list.join(',') + ')');
  7102. } return factories[argsLength](C, args);
  7103. };
  7104. // `Function.prototype.bind` method implementation
  7105. // https://tc39.github.io/ecma262/#sec-function.prototype.bind
  7106. module.exports = Function.bind || function bind(that /* , ...args */) {
  7107. var fn = aFunction(this);
  7108. var partArgs = slice.call(arguments, 1);
  7109. var boundFunction = function bound(/* args... */) {
  7110. var args = partArgs.concat(slice.call(arguments));
  7111. return this instanceof boundFunction ? construct(fn, args.length, args) : fn.apply(that, args);
  7112. };
  7113. if (isObject(fn.prototype)) boundFunction.prototype = fn.prototype;
  7114. return boundFunction;
  7115. };
  7116. /***/ }),
  7117. /* 227 */
  7118. /***/ (function(module, exports, __webpack_require__) {
  7119. module.exports = __webpack_require__(228);
  7120. /***/ }),
  7121. /* 228 */
  7122. /***/ (function(module, exports, __webpack_require__) {
  7123. var parent = __webpack_require__(229);
  7124. module.exports = parent;
  7125. /***/ }),
  7126. /* 229 */
  7127. /***/ (function(module, exports, __webpack_require__) {
  7128. __webpack_require__(125);
  7129. __webpack_require__(50);
  7130. __webpack_require__(54);
  7131. var WrappedWellKnownSymbolModule = __webpack_require__(93);
  7132. module.exports = WrappedWellKnownSymbolModule.f('iterator');
  7133. /***/ }),
  7134. /* 230 */
  7135. /***/ (function(module, exports, __webpack_require__) {
  7136. module.exports = __webpack_require__(231);
  7137. /***/ }),
  7138. /* 231 */
  7139. /***/ (function(module, exports, __webpack_require__) {
  7140. var parent = __webpack_require__(232);
  7141. __webpack_require__(251);
  7142. __webpack_require__(252);
  7143. __webpack_require__(253);
  7144. __webpack_require__(254);
  7145. // TODO: Remove from `core-js@4`
  7146. __webpack_require__(255);
  7147. module.exports = parent;
  7148. /***/ }),
  7149. /* 232 */
  7150. /***/ (function(module, exports, __webpack_require__) {
  7151. __webpack_require__(233);
  7152. __webpack_require__(61);
  7153. __webpack_require__(234);
  7154. __webpack_require__(236);
  7155. __webpack_require__(237);
  7156. __webpack_require__(238);
  7157. __webpack_require__(239);
  7158. __webpack_require__(125);
  7159. __webpack_require__(240);
  7160. __webpack_require__(241);
  7161. __webpack_require__(242);
  7162. __webpack_require__(243);
  7163. __webpack_require__(244);
  7164. __webpack_require__(245);
  7165. __webpack_require__(246);
  7166. __webpack_require__(247);
  7167. __webpack_require__(248);
  7168. __webpack_require__(249);
  7169. __webpack_require__(250);
  7170. var path = __webpack_require__(9);
  7171. module.exports = path.Symbol;
  7172. /***/ }),
  7173. /* 233 */
  7174. /***/ (function(module, exports, __webpack_require__) {
  7175. "use strict";
  7176. var $ = __webpack_require__(5);
  7177. var fails = __webpack_require__(11);
  7178. var isArray = __webpack_require__(55);
  7179. var isObject = __webpack_require__(13);
  7180. var toObject = __webpack_require__(31);
  7181. var toLength = __webpack_require__(35);
  7182. var createProperty = __webpack_require__(69);
  7183. var arraySpeciesCreate = __webpack_require__(88);
  7184. var arrayMethodHasSpeciesSupport = __webpack_require__(56);
  7185. var wellKnownSymbol = __webpack_require__(10);
  7186. var V8_VERSION = __webpack_require__(86);
  7187. var IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');
  7188. var MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;
  7189. var MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded';
  7190. // We can't use this feature detection in V8 since it causes
  7191. // deoptimization and serious performance degradation
  7192. // https://github.com/zloirock/core-js/issues/679
  7193. var IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () {
  7194. var array = [];
  7195. array[IS_CONCAT_SPREADABLE] = false;
  7196. return array.concat()[0] !== array;
  7197. });
  7198. var SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat');
  7199. var isConcatSpreadable = function (O) {
  7200. if (!isObject(O)) return false;
  7201. var spreadable = O[IS_CONCAT_SPREADABLE];
  7202. return spreadable !== undefined ? !!spreadable : isArray(O);
  7203. };
  7204. var FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;
  7205. // `Array.prototype.concat` method
  7206. // https://tc39.github.io/ecma262/#sec-array.prototype.concat
  7207. // with adding support of @@isConcatSpreadable and @@species
  7208. $({ target: 'Array', proto: true, forced: FORCED }, {
  7209. concat: function concat(arg) { // eslint-disable-line no-unused-vars
  7210. var O = toObject(this);
  7211. var A = arraySpeciesCreate(O, 0);
  7212. var n = 0;
  7213. var i, k, length, len, E;
  7214. for (i = -1, length = arguments.length; i < length; i++) {
  7215. E = i === -1 ? O : arguments[i];
  7216. if (isConcatSpreadable(E)) {
  7217. len = toLength(E.length);
  7218. if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);
  7219. for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);
  7220. } else {
  7221. if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);
  7222. createProperty(A, n++, E);
  7223. }
  7224. }
  7225. A.length = n;
  7226. return A;
  7227. }
  7228. });
  7229. /***/ }),
  7230. /* 234 */
  7231. /***/ (function(module, exports, __webpack_require__) {
  7232. "use strict";
  7233. var $ = __webpack_require__(5);
  7234. var global = __webpack_require__(8);
  7235. var getBuiltIn = __webpack_require__(36);
  7236. var IS_PURE = __webpack_require__(43);
  7237. var DESCRIPTORS = __webpack_require__(14);
  7238. var NATIVE_SYMBOL = __webpack_require__(76);
  7239. var USE_SYMBOL_AS_UID = __webpack_require__(106);
  7240. var fails = __webpack_require__(11);
  7241. var has = __webpack_require__(16);
  7242. var isArray = __webpack_require__(55);
  7243. var isObject = __webpack_require__(13);
  7244. var anObject = __webpack_require__(25);
  7245. var toObject = __webpack_require__(31);
  7246. var toIndexedObject = __webpack_require__(30);
  7247. var toPrimitive = __webpack_require__(60);
  7248. var createPropertyDescriptor = __webpack_require__(48);
  7249. var nativeObjectCreate = __webpack_require__(77);
  7250. var objectKeys = __webpack_require__(52);
  7251. var getOwnPropertyNamesModule = __webpack_require__(126);
  7252. var getOwnPropertyNamesExternal = __webpack_require__(235);
  7253. var getOwnPropertySymbolsModule = __webpack_require__(127);
  7254. var getOwnPropertyDescriptorModule = __webpack_require__(71);
  7255. var definePropertyModule = __webpack_require__(18);
  7256. var propertyIsEnumerableModule = __webpack_require__(59);
  7257. var createNonEnumerableProperty = __webpack_require__(19);
  7258. var redefine = __webpack_require__(53);
  7259. var shared = __webpack_require__(74);
  7260. var sharedKey = __webpack_require__(63);
  7261. var hiddenKeys = __webpack_require__(51);
  7262. var uid = __webpack_require__(64);
  7263. var wellKnownSymbol = __webpack_require__(10);
  7264. var wrappedWellKnownSymbolModule = __webpack_require__(93);
  7265. var defineWellKnownSymbol = __webpack_require__(12);
  7266. var setToStringTag = __webpack_require__(37);
  7267. var InternalStateModule = __webpack_require__(42);
  7268. var $forEach = __webpack_require__(32).forEach;
  7269. var HIDDEN = sharedKey('hidden');
  7270. var SYMBOL = 'Symbol';
  7271. var PROTOTYPE = 'prototype';
  7272. var TO_PRIMITIVE = wellKnownSymbol('toPrimitive');
  7273. var setInternalState = InternalStateModule.set;
  7274. var getInternalState = InternalStateModule.getterFor(SYMBOL);
  7275. var ObjectPrototype = Object[PROTOTYPE];
  7276. var $Symbol = global.Symbol;
  7277. var $stringify = getBuiltIn('JSON', 'stringify');
  7278. var nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;
  7279. var nativeDefineProperty = definePropertyModule.f;
  7280. var nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;
  7281. var nativePropertyIsEnumerable = propertyIsEnumerableModule.f;
  7282. var AllSymbols = shared('symbols');
  7283. var ObjectPrototypeSymbols = shared('op-symbols');
  7284. var StringToSymbolRegistry = shared('string-to-symbol-registry');
  7285. var SymbolToStringRegistry = shared('symbol-to-string-registry');
  7286. var WellKnownSymbolsStore = shared('wks');
  7287. var QObject = global.QObject;
  7288. // Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173
  7289. var USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;
  7290. // fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687
  7291. var setSymbolDescriptor = DESCRIPTORS && fails(function () {
  7292. return nativeObjectCreate(nativeDefineProperty({}, 'a', {
  7293. get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }
  7294. })).a != 7;
  7295. }) ? function (O, P, Attributes) {
  7296. var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);
  7297. if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];
  7298. nativeDefineProperty(O, P, Attributes);
  7299. if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {
  7300. nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);
  7301. }
  7302. } : nativeDefineProperty;
  7303. var wrap = function (tag, description) {
  7304. var symbol = AllSymbols[tag] = nativeObjectCreate($Symbol[PROTOTYPE]);
  7305. setInternalState(symbol, {
  7306. type: SYMBOL,
  7307. tag: tag,
  7308. description: description
  7309. });
  7310. if (!DESCRIPTORS) symbol.description = description;
  7311. return symbol;
  7312. };
  7313. var isSymbol = USE_SYMBOL_AS_UID ? function (it) {
  7314. return typeof it == 'symbol';
  7315. } : function (it) {
  7316. return Object(it) instanceof $Symbol;
  7317. };
  7318. var $defineProperty = function defineProperty(O, P, Attributes) {
  7319. if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);
  7320. anObject(O);
  7321. var key = toPrimitive(P, true);
  7322. anObject(Attributes);
  7323. if (has(AllSymbols, key)) {
  7324. if (!Attributes.enumerable) {
  7325. if (!has(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {}));
  7326. O[HIDDEN][key] = true;
  7327. } else {
  7328. if (has(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;
  7329. Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });
  7330. } return setSymbolDescriptor(O, key, Attributes);
  7331. } return nativeDefineProperty(O, key, Attributes);
  7332. };
  7333. var $defineProperties = function defineProperties(O, Properties) {
  7334. anObject(O);
  7335. var properties = toIndexedObject(Properties);
  7336. var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));
  7337. $forEach(keys, function (key) {
  7338. if (!DESCRIPTORS || $propertyIsEnumerable.call(properties, key)) $defineProperty(O, key, properties[key]);
  7339. });
  7340. return O;
  7341. };
  7342. var $create = function create(O, Properties) {
  7343. return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);
  7344. };
  7345. var $propertyIsEnumerable = function propertyIsEnumerable(V) {
  7346. var P = toPrimitive(V, true);
  7347. var enumerable = nativePropertyIsEnumerable.call(this, P);
  7348. if (this === ObjectPrototype && has(AllSymbols, P) && !has(ObjectPrototypeSymbols, P)) return false;
  7349. return enumerable || !has(this, P) || !has(AllSymbols, P) || has(this, HIDDEN) && this[HIDDEN][P] ? enumerable : true;
  7350. };
  7351. var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {
  7352. var it = toIndexedObject(O);
  7353. var key = toPrimitive(P, true);
  7354. if (it === ObjectPrototype && has(AllSymbols, key) && !has(ObjectPrototypeSymbols, key)) return;
  7355. var descriptor = nativeGetOwnPropertyDescriptor(it, key);
  7356. if (descriptor && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) {
  7357. descriptor.enumerable = true;
  7358. }
  7359. return descriptor;
  7360. };
  7361. var $getOwnPropertyNames = function getOwnPropertyNames(O) {
  7362. var names = nativeGetOwnPropertyNames(toIndexedObject(O));
  7363. var result = [];
  7364. $forEach(names, function (key) {
  7365. if (!has(AllSymbols, key) && !has(hiddenKeys, key)) result.push(key);
  7366. });
  7367. return result;
  7368. };
  7369. var $getOwnPropertySymbols = function getOwnPropertySymbols(O) {
  7370. var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;
  7371. var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));
  7372. var result = [];
  7373. $forEach(names, function (key) {
  7374. if (has(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || has(ObjectPrototype, key))) {
  7375. result.push(AllSymbols[key]);
  7376. }
  7377. });
  7378. return result;
  7379. };
  7380. // `Symbol` constructor
  7381. // https://tc39.github.io/ecma262/#sec-symbol-constructor
  7382. if (!NATIVE_SYMBOL) {
  7383. $Symbol = function Symbol() {
  7384. if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor');
  7385. var description = !arguments.length || arguments[0] === undefined ? undefined : String(arguments[0]);
  7386. var tag = uid(description);
  7387. var setter = function (value) {
  7388. if (this === ObjectPrototype) setter.call(ObjectPrototypeSymbols, value);
  7389. if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;
  7390. setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value));
  7391. };
  7392. if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });
  7393. return wrap(tag, description);
  7394. };
  7395. redefine($Symbol[PROTOTYPE], 'toString', function toString() {
  7396. return getInternalState(this).tag;
  7397. });
  7398. redefine($Symbol, 'withoutSetter', function (description) {
  7399. return wrap(uid(description), description);
  7400. });
  7401. propertyIsEnumerableModule.f = $propertyIsEnumerable;
  7402. definePropertyModule.f = $defineProperty;
  7403. getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;
  7404. getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;
  7405. getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;
  7406. wrappedWellKnownSymbolModule.f = function (name) {
  7407. return wrap(wellKnownSymbol(name), name);
  7408. };
  7409. if (DESCRIPTORS) {
  7410. // https://github.com/tc39/proposal-Symbol-description
  7411. nativeDefineProperty($Symbol[PROTOTYPE], 'description', {
  7412. configurable: true,
  7413. get: function description() {
  7414. return getInternalState(this).description;
  7415. }
  7416. });
  7417. if (!IS_PURE) {
  7418. redefine(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });
  7419. }
  7420. }
  7421. }
  7422. $({ global: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {
  7423. Symbol: $Symbol
  7424. });
  7425. $forEach(objectKeys(WellKnownSymbolsStore), function (name) {
  7426. defineWellKnownSymbol(name);
  7427. });
  7428. $({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {
  7429. // `Symbol.for` method
  7430. // https://tc39.github.io/ecma262/#sec-symbol.for
  7431. 'for': function (key) {
  7432. var string = String(key);
  7433. if (has(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];
  7434. var symbol = $Symbol(string);
  7435. StringToSymbolRegistry[string] = symbol;
  7436. SymbolToStringRegistry[symbol] = string;
  7437. return symbol;
  7438. },
  7439. // `Symbol.keyFor` method
  7440. // https://tc39.github.io/ecma262/#sec-symbol.keyfor
  7441. keyFor: function keyFor(sym) {
  7442. if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol');
  7443. if (has(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];
  7444. },
  7445. useSetter: function () { USE_SETTER = true; },
  7446. useSimple: function () { USE_SETTER = false; }
  7447. });
  7448. $({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {
  7449. // `Object.create` method
  7450. // https://tc39.github.io/ecma262/#sec-object.create
  7451. create: $create,
  7452. // `Object.defineProperty` method
  7453. // https://tc39.github.io/ecma262/#sec-object.defineproperty
  7454. defineProperty: $defineProperty,
  7455. // `Object.defineProperties` method
  7456. // https://tc39.github.io/ecma262/#sec-object.defineproperties
  7457. defineProperties: $defineProperties,
  7458. // `Object.getOwnPropertyDescriptor` method
  7459. // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptors
  7460. getOwnPropertyDescriptor: $getOwnPropertyDescriptor
  7461. });
  7462. $({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, {
  7463. // `Object.getOwnPropertyNames` method
  7464. // https://tc39.github.io/ecma262/#sec-object.getownpropertynames
  7465. getOwnPropertyNames: $getOwnPropertyNames,
  7466. // `Object.getOwnPropertySymbols` method
  7467. // https://tc39.github.io/ecma262/#sec-object.getownpropertysymbols
  7468. getOwnPropertySymbols: $getOwnPropertySymbols
  7469. });
  7470. // Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives
  7471. // https://bugs.chromium.org/p/v8/issues/detail?id=3443
  7472. $({ target: 'Object', stat: true, forced: fails(function () { getOwnPropertySymbolsModule.f(1); }) }, {
  7473. getOwnPropertySymbols: function getOwnPropertySymbols(it) {
  7474. return getOwnPropertySymbolsModule.f(toObject(it));
  7475. }
  7476. });
  7477. // `JSON.stringify` method behavior with symbols
  7478. // https://tc39.github.io/ecma262/#sec-json.stringify
  7479. if ($stringify) {
  7480. var FORCED_JSON_STRINGIFY = !NATIVE_SYMBOL || fails(function () {
  7481. var symbol = $Symbol();
  7482. // MS Edge converts symbol values to JSON as {}
  7483. return $stringify([symbol]) != '[null]'
  7484. // WebKit converts symbol values to JSON as null
  7485. || $stringify({ a: symbol }) != '{}'
  7486. // V8 throws on boxed symbols
  7487. || $stringify(Object(symbol)) != '{}';
  7488. });
  7489. $({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY }, {
  7490. // eslint-disable-next-line no-unused-vars
  7491. stringify: function stringify(it, replacer, space) {
  7492. var args = [it];
  7493. var index = 1;
  7494. var $replacer;
  7495. while (arguments.length > index) args.push(arguments[index++]);
  7496. $replacer = replacer;
  7497. if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined
  7498. if (!isArray(replacer)) replacer = function (key, value) {
  7499. if (typeof $replacer == 'function') value = $replacer.call(this, key, value);
  7500. if (!isSymbol(value)) return value;
  7501. };
  7502. args[1] = replacer;
  7503. return $stringify.apply(null, args);
  7504. }
  7505. });
  7506. }
  7507. // `Symbol.prototype[@@toPrimitive]` method
  7508. // https://tc39.github.io/ecma262/#sec-symbol.prototype-@@toprimitive
  7509. if (!$Symbol[PROTOTYPE][TO_PRIMITIVE]) {
  7510. createNonEnumerableProperty($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);
  7511. }
  7512. // `Symbol.prototype[@@toStringTag]` property
  7513. // https://tc39.github.io/ecma262/#sec-symbol.prototype-@@tostringtag
  7514. setToStringTag($Symbol, SYMBOL);
  7515. hiddenKeys[HIDDEN] = true;
  7516. /***/ }),
  7517. /* 235 */
  7518. /***/ (function(module, exports, __webpack_require__) {
  7519. var toIndexedObject = __webpack_require__(30);
  7520. var nativeGetOwnPropertyNames = __webpack_require__(126).f;
  7521. var toString = {}.toString;
  7522. var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames
  7523. ? Object.getOwnPropertyNames(window) : [];
  7524. var getWindowNames = function (it) {
  7525. try {
  7526. return nativeGetOwnPropertyNames(it);
  7527. } catch (error) {
  7528. return windowNames.slice();
  7529. }
  7530. };
  7531. // fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
  7532. module.exports.f = function getOwnPropertyNames(it) {
  7533. return windowNames && toString.call(it) == '[object Window]'
  7534. ? getWindowNames(it)
  7535. : nativeGetOwnPropertyNames(toIndexedObject(it));
  7536. };
  7537. /***/ }),
  7538. /* 236 */
  7539. /***/ (function(module, exports, __webpack_require__) {
  7540. var defineWellKnownSymbol = __webpack_require__(12);
  7541. // `Symbol.asyncIterator` well-known symbol
  7542. // https://tc39.github.io/ecma262/#sec-symbol.asynciterator
  7543. defineWellKnownSymbol('asyncIterator');
  7544. /***/ }),
  7545. /* 237 */
  7546. /***/ (function(module, exports) {
  7547. // empty
  7548. /***/ }),
  7549. /* 238 */
  7550. /***/ (function(module, exports, __webpack_require__) {
  7551. var defineWellKnownSymbol = __webpack_require__(12);
  7552. // `Symbol.hasInstance` well-known symbol
  7553. // https://tc39.github.io/ecma262/#sec-symbol.hasinstance
  7554. defineWellKnownSymbol('hasInstance');
  7555. /***/ }),
  7556. /* 239 */
  7557. /***/ (function(module, exports, __webpack_require__) {
  7558. var defineWellKnownSymbol = __webpack_require__(12);
  7559. // `Symbol.isConcatSpreadable` well-known symbol
  7560. // https://tc39.github.io/ecma262/#sec-symbol.isconcatspreadable
  7561. defineWellKnownSymbol('isConcatSpreadable');
  7562. /***/ }),
  7563. /* 240 */
  7564. /***/ (function(module, exports, __webpack_require__) {
  7565. var defineWellKnownSymbol = __webpack_require__(12);
  7566. // `Symbol.match` well-known symbol
  7567. // https://tc39.github.io/ecma262/#sec-symbol.match
  7568. defineWellKnownSymbol('match');
  7569. /***/ }),
  7570. /* 241 */
  7571. /***/ (function(module, exports, __webpack_require__) {
  7572. var defineWellKnownSymbol = __webpack_require__(12);
  7573. // `Symbol.matchAll` well-known symbol
  7574. defineWellKnownSymbol('matchAll');
  7575. /***/ }),
  7576. /* 242 */
  7577. /***/ (function(module, exports, __webpack_require__) {
  7578. var defineWellKnownSymbol = __webpack_require__(12);
  7579. // `Symbol.replace` well-known symbol
  7580. // https://tc39.github.io/ecma262/#sec-symbol.replace
  7581. defineWellKnownSymbol('replace');
  7582. /***/ }),
  7583. /* 243 */
  7584. /***/ (function(module, exports, __webpack_require__) {
  7585. var defineWellKnownSymbol = __webpack_require__(12);
  7586. // `Symbol.search` well-known symbol
  7587. // https://tc39.github.io/ecma262/#sec-symbol.search
  7588. defineWellKnownSymbol('search');
  7589. /***/ }),
  7590. /* 244 */
  7591. /***/ (function(module, exports, __webpack_require__) {
  7592. var defineWellKnownSymbol = __webpack_require__(12);
  7593. // `Symbol.species` well-known symbol
  7594. // https://tc39.github.io/ecma262/#sec-symbol.species
  7595. defineWellKnownSymbol('species');
  7596. /***/ }),
  7597. /* 245 */
  7598. /***/ (function(module, exports, __webpack_require__) {
  7599. var defineWellKnownSymbol = __webpack_require__(12);
  7600. // `Symbol.split` well-known symbol
  7601. // https://tc39.github.io/ecma262/#sec-symbol.split
  7602. defineWellKnownSymbol('split');
  7603. /***/ }),
  7604. /* 246 */
  7605. /***/ (function(module, exports, __webpack_require__) {
  7606. var defineWellKnownSymbol = __webpack_require__(12);
  7607. // `Symbol.toPrimitive` well-known symbol
  7608. // https://tc39.github.io/ecma262/#sec-symbol.toprimitive
  7609. defineWellKnownSymbol('toPrimitive');
  7610. /***/ }),
  7611. /* 247 */
  7612. /***/ (function(module, exports, __webpack_require__) {
  7613. var defineWellKnownSymbol = __webpack_require__(12);
  7614. // `Symbol.toStringTag` well-known symbol
  7615. // https://tc39.github.io/ecma262/#sec-symbol.tostringtag
  7616. defineWellKnownSymbol('toStringTag');
  7617. /***/ }),
  7618. /* 248 */
  7619. /***/ (function(module, exports, __webpack_require__) {
  7620. var defineWellKnownSymbol = __webpack_require__(12);
  7621. // `Symbol.unscopables` well-known symbol
  7622. // https://tc39.github.io/ecma262/#sec-symbol.unscopables
  7623. defineWellKnownSymbol('unscopables');
  7624. /***/ }),
  7625. /* 249 */
  7626. /***/ (function(module, exports, __webpack_require__) {
  7627. var setToStringTag = __webpack_require__(37);
  7628. // Math[@@toStringTag] property
  7629. // https://tc39.github.io/ecma262/#sec-math-@@tostringtag
  7630. setToStringTag(Math, 'Math', true);
  7631. /***/ }),
  7632. /* 250 */
  7633. /***/ (function(module, exports, __webpack_require__) {
  7634. var global = __webpack_require__(8);
  7635. var setToStringTag = __webpack_require__(37);
  7636. // JSON[@@toStringTag] property
  7637. // https://tc39.github.io/ecma262/#sec-json-@@tostringtag
  7638. setToStringTag(global.JSON, 'JSON', true);
  7639. /***/ }),
  7640. /* 251 */
  7641. /***/ (function(module, exports, __webpack_require__) {
  7642. var defineWellKnownSymbol = __webpack_require__(12);
  7643. // `Symbol.asyncDispose` well-known symbol
  7644. // https://github.com/tc39/proposal-using-statement
  7645. defineWellKnownSymbol('asyncDispose');
  7646. /***/ }),
  7647. /* 252 */
  7648. /***/ (function(module, exports, __webpack_require__) {
  7649. var defineWellKnownSymbol = __webpack_require__(12);
  7650. // `Symbol.dispose` well-known symbol
  7651. // https://github.com/tc39/proposal-using-statement
  7652. defineWellKnownSymbol('dispose');
  7653. /***/ }),
  7654. /* 253 */
  7655. /***/ (function(module, exports, __webpack_require__) {
  7656. var defineWellKnownSymbol = __webpack_require__(12);
  7657. // `Symbol.observable` well-known symbol
  7658. // https://github.com/tc39/proposal-observable
  7659. defineWellKnownSymbol('observable');
  7660. /***/ }),
  7661. /* 254 */
  7662. /***/ (function(module, exports, __webpack_require__) {
  7663. var defineWellKnownSymbol = __webpack_require__(12);
  7664. // `Symbol.patternMatch` well-known symbol
  7665. // https://github.com/tc39/proposal-pattern-matching
  7666. defineWellKnownSymbol('patternMatch');
  7667. /***/ }),
  7668. /* 255 */
  7669. /***/ (function(module, exports, __webpack_require__) {
  7670. // TODO: remove from `core-js@4`
  7671. var defineWellKnownSymbol = __webpack_require__(12);
  7672. defineWellKnownSymbol('replaceAll');
  7673. /***/ }),
  7674. /* 256 */
  7675. /***/ (function(module, exports, __webpack_require__) {
  7676. module.exports = __webpack_require__(257);
  7677. /***/ }),
  7678. /* 257 */
  7679. /***/ (function(module, exports, __webpack_require__) {
  7680. var parent = __webpack_require__(258);
  7681. module.exports = parent;
  7682. /***/ }),
  7683. /* 258 */
  7684. /***/ (function(module, exports, __webpack_require__) {
  7685. __webpack_require__(259);
  7686. var path = __webpack_require__(9);
  7687. module.exports = path.parseInt;
  7688. /***/ }),
  7689. /* 259 */
  7690. /***/ (function(module, exports, __webpack_require__) {
  7691. var $ = __webpack_require__(5);
  7692. var parseIntImplementation = __webpack_require__(260);
  7693. // `parseInt` method
  7694. // https://tc39.github.io/ecma262/#sec-parseint-string-radix
  7695. $({ global: true, forced: parseInt != parseIntImplementation }, {
  7696. parseInt: parseIntImplementation
  7697. });
  7698. /***/ }),
  7699. /* 260 */
  7700. /***/ (function(module, exports, __webpack_require__) {
  7701. var global = __webpack_require__(8);
  7702. var trim = __webpack_require__(90).trim;
  7703. var whitespaces = __webpack_require__(68);
  7704. var $parseInt = global.parseInt;
  7705. var hex = /^[+-]?0[Xx]/;
  7706. var FORCED = $parseInt(whitespaces + '08') !== 8 || $parseInt(whitespaces + '0x16') !== 22;
  7707. // `parseInt` method
  7708. // https://tc39.github.io/ecma262/#sec-parseint-string-radix
  7709. module.exports = FORCED ? function parseInt(string, radix) {
  7710. var S = trim(String(string));
  7711. return $parseInt(S, (radix >>> 0) || (hex.test(S) ? 16 : 10));
  7712. } : $parseInt;
  7713. /***/ }),
  7714. /* 261 */
  7715. /***/ (function(module, exports, __webpack_require__) {
  7716. var parent = __webpack_require__(262);
  7717. module.exports = parent;
  7718. /***/ }),
  7719. /* 262 */
  7720. /***/ (function(module, exports, __webpack_require__) {
  7721. var slice = __webpack_require__(263);
  7722. var ArrayPrototype = Array.prototype;
  7723. module.exports = function (it) {
  7724. var own = it.slice;
  7725. return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.slice) ? slice : own;
  7726. };
  7727. /***/ }),
  7728. /* 263 */
  7729. /***/ (function(module, exports, __webpack_require__) {
  7730. __webpack_require__(264);
  7731. var entryVirtual = __webpack_require__(15);
  7732. module.exports = entryVirtual('Array').slice;
  7733. /***/ }),
  7734. /* 264 */
  7735. /***/ (function(module, exports, __webpack_require__) {
  7736. "use strict";
  7737. var $ = __webpack_require__(5);
  7738. var isObject = __webpack_require__(13);
  7739. var isArray = __webpack_require__(55);
  7740. var toAbsoluteIndex = __webpack_require__(79);
  7741. var toLength = __webpack_require__(35);
  7742. var toIndexedObject = __webpack_require__(30);
  7743. var createProperty = __webpack_require__(69);
  7744. var wellKnownSymbol = __webpack_require__(10);
  7745. var arrayMethodHasSpeciesSupport = __webpack_require__(56);
  7746. var arrayMethodUsesToLength = __webpack_require__(22);
  7747. var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice');
  7748. var USES_TO_LENGTH = arrayMethodUsesToLength('slice', { ACCESSORS: true, 0: 0, 1: 2 });
  7749. var SPECIES = wellKnownSymbol('species');
  7750. var nativeSlice = [].slice;
  7751. var max = Math.max;
  7752. // `Array.prototype.slice` method
  7753. // https://tc39.github.io/ecma262/#sec-array.prototype.slice
  7754. // fallback for not array-like ES3 strings and DOM objects
  7755. $({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, {
  7756. slice: function slice(start, end) {
  7757. var O = toIndexedObject(this);
  7758. var length = toLength(O.length);
  7759. var k = toAbsoluteIndex(start, length);
  7760. var fin = toAbsoluteIndex(end === undefined ? length : end, length);
  7761. // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible
  7762. var Constructor, result, n;
  7763. if (isArray(O)) {
  7764. Constructor = O.constructor;
  7765. // cross-realm fallback
  7766. if (typeof Constructor == 'function' && (Constructor === Array || isArray(Constructor.prototype))) {
  7767. Constructor = undefined;
  7768. } else if (isObject(Constructor)) {
  7769. Constructor = Constructor[SPECIES];
  7770. if (Constructor === null) Constructor = undefined;
  7771. }
  7772. if (Constructor === Array || Constructor === undefined) {
  7773. return nativeSlice.call(O, k, fin);
  7774. }
  7775. }
  7776. result = new (Constructor === undefined ? Array : Constructor)(max(fin - k, 0));
  7777. for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);
  7778. result.length = n;
  7779. return result;
  7780. }
  7781. });
  7782. /***/ }),
  7783. /* 265 */
  7784. /***/ (function(module, exports, __webpack_require__) {
  7785. __webpack_require__(266);
  7786. var path = __webpack_require__(9);
  7787. module.exports = path.setTimeout;
  7788. /***/ }),
  7789. /* 266 */
  7790. /***/ (function(module, exports, __webpack_require__) {
  7791. var $ = __webpack_require__(5);
  7792. var global = __webpack_require__(8);
  7793. var userAgent = __webpack_require__(84);
  7794. var slice = [].slice;
  7795. var MSIE = /MSIE .\./.test(userAgent); // <- dirty ie9- check
  7796. var wrap = function (scheduler) {
  7797. return function (handler, timeout /* , ...arguments */) {
  7798. var boundArgs = arguments.length > 2;
  7799. var args = boundArgs ? slice.call(arguments, 2) : undefined;
  7800. return scheduler(boundArgs ? function () {
  7801. // eslint-disable-next-line no-new-func
  7802. (typeof handler == 'function' ? handler : Function(handler)).apply(this, args);
  7803. } : handler, timeout);
  7804. };
  7805. };
  7806. // ie9- setTimeout & setInterval additional parameters fix
  7807. // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#timers
  7808. $({ global: true, bind: true, forced: MSIE }, {
  7809. // `setTimeout` method
  7810. // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-settimeout
  7811. setTimeout: wrap(global.setTimeout),
  7812. // `setInterval` method
  7813. // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-setinterval
  7814. setInterval: wrap(global.setInterval)
  7815. });
  7816. /***/ }),
  7817. /* 267 */
  7818. /***/ (function(module, exports, __webpack_require__) {
  7819. "use strict";
  7820. /**
  7821. * @description 编辑器配置
  7822. * @author wangfupeng
  7823. */
  7824. var _interopRequireDefault = __webpack_require__(0);
  7825. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  7826. var _assign = _interopRequireDefault(__webpack_require__(128));
  7827. (0, _defineProperty["default"])(exports, "__esModule", {
  7828. value: true
  7829. });
  7830. var tslib_1 = __webpack_require__(2);
  7831. var menus_1 = tslib_1.__importDefault(__webpack_require__(272));
  7832. var events_1 = tslib_1.__importDefault(__webpack_require__(273));
  7833. var style_1 = tslib_1.__importDefault(__webpack_require__(129));
  7834. var paste_1 = tslib_1.__importDefault(__webpack_require__(274));
  7835. var cmd_1 = tslib_1.__importDefault(__webpack_require__(275));
  7836. var image_1 = tslib_1.__importDefault(__webpack_require__(276));
  7837. var text_1 = tslib_1.__importDefault(__webpack_require__(130));
  7838. var lang_1 = tslib_1.__importDefault(__webpack_require__(277));
  7839. var history_1 = tslib_1.__importDefault(__webpack_require__(278));
  7840. var video_1 = tslib_1.__importDefault(__webpack_require__(279)); // 合并所有的配置信息
  7841. var defaultConfig = (0, _assign["default"])({}, menus_1["default"], events_1["default"], style_1["default"], cmd_1["default"], paste_1["default"], image_1["default"], text_1["default"], lang_1["default"], history_1["default"], video_1["default"], //链接校验的配置函数
  7842. {
  7843. linkCheck: function linkCheck(text, link) {
  7844. return true;
  7845. }
  7846. });
  7847. exports["default"] = defaultConfig;
  7848. /***/ }),
  7849. /* 268 */
  7850. /***/ (function(module, exports, __webpack_require__) {
  7851. var parent = __webpack_require__(269);
  7852. module.exports = parent;
  7853. /***/ }),
  7854. /* 269 */
  7855. /***/ (function(module, exports, __webpack_require__) {
  7856. __webpack_require__(270);
  7857. var path = __webpack_require__(9);
  7858. module.exports = path.Object.assign;
  7859. /***/ }),
  7860. /* 270 */
  7861. /***/ (function(module, exports, __webpack_require__) {
  7862. var $ = __webpack_require__(5);
  7863. var assign = __webpack_require__(271);
  7864. // `Object.assign` method
  7865. // https://tc39.github.io/ecma262/#sec-object.assign
  7866. $({ target: 'Object', stat: true, forced: Object.assign !== assign }, {
  7867. assign: assign
  7868. });
  7869. /***/ }),
  7870. /* 271 */
  7871. /***/ (function(module, exports, __webpack_require__) {
  7872. "use strict";
  7873. var DESCRIPTORS = __webpack_require__(14);
  7874. var fails = __webpack_require__(11);
  7875. var objectKeys = __webpack_require__(52);
  7876. var getOwnPropertySymbolsModule = __webpack_require__(127);
  7877. var propertyIsEnumerableModule = __webpack_require__(59);
  7878. var toObject = __webpack_require__(31);
  7879. var IndexedObject = __webpack_require__(72);
  7880. var nativeAssign = Object.assign;
  7881. var defineProperty = Object.defineProperty;
  7882. // `Object.assign` method
  7883. // https://tc39.github.io/ecma262/#sec-object.assign
  7884. module.exports = !nativeAssign || fails(function () {
  7885. // should have correct order of operations (Edge bug)
  7886. if (DESCRIPTORS && nativeAssign({ b: 1 }, nativeAssign(defineProperty({}, 'a', {
  7887. enumerable: true,
  7888. get: function () {
  7889. defineProperty(this, 'b', {
  7890. value: 3,
  7891. enumerable: false
  7892. });
  7893. }
  7894. }), { b: 2 })).b !== 1) return true;
  7895. // should work with symbols and should have deterministic property order (V8 bug)
  7896. var A = {};
  7897. var B = {};
  7898. // eslint-disable-next-line no-undef
  7899. var symbol = Symbol();
  7900. var alphabet = 'abcdefghijklmnopqrst';
  7901. A[symbol] = 7;
  7902. alphabet.split('').forEach(function (chr) { B[chr] = chr; });
  7903. return nativeAssign({}, A)[symbol] != 7 || objectKeys(nativeAssign({}, B)).join('') != alphabet;
  7904. }) ? function assign(target, source) { // eslint-disable-line no-unused-vars
  7905. var T = toObject(target);
  7906. var argumentsLength = arguments.length;
  7907. var index = 1;
  7908. var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;
  7909. var propertyIsEnumerable = propertyIsEnumerableModule.f;
  7910. while (argumentsLength > index) {
  7911. var S = IndexedObject(arguments[index++]);
  7912. var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S);
  7913. var length = keys.length;
  7914. var j = 0;
  7915. var key;
  7916. while (length > j) {
  7917. key = keys[j++];
  7918. if (!DESCRIPTORS || propertyIsEnumerable.call(S, key)) T[key] = S[key];
  7919. }
  7920. } return T;
  7921. } : nativeAssign;
  7922. /***/ }),
  7923. /* 272 */
  7924. /***/ (function(module, exports, __webpack_require__) {
  7925. "use strict";
  7926. /**
  7927. * @description 菜单配置
  7928. * @author wangfupeng
  7929. */
  7930. var _interopRequireDefault = __webpack_require__(0);
  7931. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  7932. (0, _defineProperty["default"])(exports, "__esModule", {
  7933. value: true
  7934. });
  7935. /*表情菜单数据结构类型END*/
  7936. exports["default"] = {
  7937. menus: ['head', 'bold', 'fontSize', // 'customFontSize',
  7938. 'fontName', 'italic', 'underline', 'strikeThrough', 'indent', 'lineHeight', 'foreColor', 'backColor', 'link', 'list', 'todo', 'justify', 'quote', 'emoticon', 'image', 'video', 'table', 'code', 'splitLine', 'undo', 'redo'],
  7939. fontNames: ['黑体', '仿宋', '楷体', '标楷体', '华文仿宋', '华文楷体', '宋体', '微软雅黑', 'Arial', 'Tahoma', 'Verdana', 'Times New Roman', 'Courier New'],
  7940. // fontNames: [{ name: '宋体', value: '宋体' }],
  7941. fontSizes: {
  7942. 'x-small': {
  7943. name: '10px',
  7944. value: '1'
  7945. },
  7946. small: {
  7947. name: '13px',
  7948. value: '2'
  7949. },
  7950. normal: {
  7951. name: '16px',
  7952. value: '3'
  7953. },
  7954. large: {
  7955. name: '18px',
  7956. value: '4'
  7957. },
  7958. 'x-large': {
  7959. name: '24px',
  7960. value: '5'
  7961. },
  7962. 'xx-large': {
  7963. name: '32px',
  7964. value: '6'
  7965. },
  7966. 'xxx-large': {
  7967. name: '48px',
  7968. value: '7'
  7969. }
  7970. },
  7971. // customFontSize: [ // 该菜单暂时不用 - 王福朋 20200924
  7972. // { value: '9px', text: '9' },
  7973. // { value: '10px', text: '10' },
  7974. // { value: '12px', text: '12' },
  7975. // { value: '14px', text: '14' },
  7976. // { value: '16px', text: '16' },
  7977. // { value: '20px', text: '20' },
  7978. // { value: '42px', text: '42' },
  7979. // { value: '72px', text: '72' },
  7980. // ],
  7981. colors: ['#000000', '#ffffff', '#eeece0', '#1c487f', '#4d80bf', '#c24f4a', '#8baa4a', '#7b5ba1', '#46acc8', '#f9963b'],
  7982. //插入代码语言配置
  7983. languageType: ['Bash', 'C', 'C#', 'C++', 'CSS', 'Java', 'JavaScript', 'JSON', 'TypeScript', 'Plain text', 'Html', 'XML', 'SQL', 'Go', 'Kotlin', 'Lua', 'Markdown', 'PHP', 'Python', 'Shell Session', 'Ruby'],
  7984. languageTab: '    ',
  7985. /**
  7986. * 表情配置菜单
  7987. * 如果为emoji表情直接作为元素插入
  7988. * emoticon:Array<EmotionsType>
  7989. */
  7990. emotions: [{
  7991. // tab 的标题
  7992. title: '表情',
  7993. // type -> 'emoji' / 'image'
  7994. type: 'emoji',
  7995. // content -> 数组
  7996. content: '😀 😃 😄 😁 😆 😅 😂 🤣 😊 😇 🙂 🙃 😉 😌 😍 😘 😗 😙 😚 😋 😛 😝 😜 🤓 😎 😏 😒 😞 😔 😟 😕 🙁 😣 😖 😫 😩 😢 😭 😤 😠 😡 😳 😱 😨 🤗 🤔 😶 😑 😬 🙄 😯 😴 😷 🤑 😈 🤡 💩 👻 💀 👀 👣'.split(/\s/)
  7997. }, {
  7998. // tab 的标题
  7999. title: '手势',
  8000. // type -> 'emoji' / 'image'
  8001. type: 'emoji',
  8002. // content -> 数组
  8003. content: '👐 🙌 👏 🤝 👍 👎 👊 ✊ 🤛 🤜 🤞 ✌️ 🤘 👌 👈 👉 👆 👇 ☝️ ✋ 🤚 🖐 🖖 👋 🤙 💪 🖕 ✍️ 🙏'.split(/\s/)
  8004. }],
  8005. lineHeights: ['1', '1.15', '1.6', '2', '2.5', '3'],
  8006. undoLimit: 20,
  8007. indentation: '2em',
  8008. showMenuTooltips: true,
  8009. // 菜单栏tooltip为上标还是下标
  8010. menuTooltipPosition: 'up'
  8011. };
  8012. /***/ }),
  8013. /* 273 */
  8014. /***/ (function(module, exports, __webpack_require__) {
  8015. "use strict";
  8016. /**
  8017. * @description 事件配置
  8018. * @author wangfupeng
  8019. */
  8020. var _interopRequireDefault = __webpack_require__(0);
  8021. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  8022. (0, _defineProperty["default"])(exports, "__esModule", {
  8023. value: true
  8024. });
  8025. var const_1 = __webpack_require__(7);
  8026. /**
  8027. * 提示信息
  8028. * @param alertInfo alert info
  8029. * @param alertType 错误提示类型
  8030. * @param debugInfo debug info
  8031. */
  8032. function customAlert(alertInfo, alertType, debugInfo) {
  8033. window.alert(alertInfo);
  8034. if (debugInfo) {
  8035. console.error('wangEditor: ' + debugInfo);
  8036. }
  8037. }
  8038. exports["default"] = {
  8039. onchangeTimeout: 200,
  8040. onchange: null,
  8041. onfocus: const_1.EMPTY_FN,
  8042. onblur: const_1.EMPTY_FN,
  8043. onCatalogChange: null,
  8044. customAlert: customAlert
  8045. };
  8046. /***/ }),
  8047. /* 274 */
  8048. /***/ (function(module, exports, __webpack_require__) {
  8049. "use strict";
  8050. /**
  8051. * @description 粘贴,配置文件
  8052. * @author wangfupeng
  8053. */
  8054. var _interopRequireDefault = __webpack_require__(0);
  8055. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  8056. (0, _defineProperty["default"])(exports, "__esModule", {
  8057. value: true
  8058. });
  8059. exports["default"] = {
  8060. // 粘贴过滤样式,默认开启
  8061. pasteFilterStyle: true,
  8062. // 粘贴内容时,忽略图片。默认关闭
  8063. pasteIgnoreImg: false,
  8064. // 对粘贴的文字进行自定义处理,返回处理后的结果。编辑器会将处理后的结果粘贴到编辑区域中。
  8065. // IE 暂时不支持
  8066. pasteTextHandle: function pasteTextHandle(content) {
  8067. // content 即粘贴过来的内容(html 或 纯文本),可进行自定义处理然后返回
  8068. return content;
  8069. }
  8070. };
  8071. /***/ }),
  8072. /* 275 */
  8073. /***/ (function(module, exports, __webpack_require__) {
  8074. "use strict";
  8075. /**
  8076. * @description 命令配置项
  8077. * @author wangfupeng
  8078. */
  8079. var _interopRequireDefault = __webpack_require__(0);
  8080. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  8081. (0, _defineProperty["default"])(exports, "__esModule", {
  8082. value: true
  8083. });
  8084. exports["default"] = {
  8085. styleWithCSS: false
  8086. };
  8087. /***/ }),
  8088. /* 276 */
  8089. /***/ (function(module, exports, __webpack_require__) {
  8090. "use strict";
  8091. /**
  8092. * @description 图片相关的配置
  8093. * @author wangfupeng
  8094. */
  8095. var _interopRequireDefault = __webpack_require__(0);
  8096. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  8097. (0, _defineProperty["default"])(exports, "__esModule", {
  8098. value: true
  8099. });
  8100. var const_1 = __webpack_require__(7);
  8101. exports["default"] = {
  8102. // 网络图片校验的配置函数
  8103. linkImgCheck: function linkImgCheck(src, alt, href) {
  8104. return true;
  8105. },
  8106. // 显示“插入网络图片”
  8107. showLinkImg: true,
  8108. // 显示“插入图片alt”
  8109. showLinkImgAlt: true,
  8110. // 显示“插入图片href”
  8111. showLinkImgHref: true,
  8112. // 插入图片成功之后的回调函数
  8113. linkImgCallback: const_1.EMPTY_FN,
  8114. // accept
  8115. uploadImgAccept: ['jpg', 'jpeg', 'png', 'gif', 'bmp'],
  8116. // 服务端地址
  8117. uploadImgServer: '',
  8118. // 使用 base64 存储图片
  8119. uploadImgShowBase64: false,
  8120. // 上传图片的最大体积,默认 5M
  8121. uploadImgMaxSize: 5 * 1024 * 1024,
  8122. // 一次最多上传多少个图片
  8123. uploadImgMaxLength: 100,
  8124. // 自定义上传图片的名称
  8125. uploadFileName: '',
  8126. // 上传图片自定义参数
  8127. uploadImgParams: {},
  8128. // 自定义参数拼接到 url 中
  8129. uploadImgParamsWithUrl: false,
  8130. // 上传图片自定义 header
  8131. uploadImgHeaders: {},
  8132. // 钩子函数
  8133. uploadImgHooks: {},
  8134. // 上传图片超时时间 ms
  8135. uploadImgTimeout: 10 * 1000,
  8136. // 跨域带 cookie
  8137. withCredentials: false,
  8138. // 自定义上传
  8139. customUploadImg: null,
  8140. // 从媒体库上传
  8141. uploadImgFromMedia: null
  8142. };
  8143. /***/ }),
  8144. /* 277 */
  8145. /***/ (function(module, exports, __webpack_require__) {
  8146. "use strict";
  8147. var _interopRequireDefault = __webpack_require__(0);
  8148. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  8149. (0, _defineProperty["default"])(exports, "__esModule", {
  8150. value: true
  8151. });
  8152. exports["default"] = {
  8153. lang: 'zh-CN',
  8154. languages: {
  8155. 'zh-CN': {
  8156. wangEditor: {
  8157. 重置: '重置',
  8158. 插入: '插入',
  8159. 默认: '默认',
  8160. 创建: '创建',
  8161. 修改: '修改',
  8162. 如: '如',
  8163. 请输入正文: '请输入正文',
  8164. menus: {
  8165. title: {
  8166. 标题: '标题',
  8167. 加粗: '加粗',
  8168. 字号: '字号',
  8169. 字体: '字体',
  8170. 斜体: '斜体',
  8171. 下划线: '下划线',
  8172. 删除线: '删除线',
  8173. 缩进: '缩进',
  8174. 行高: '行高',
  8175. 文字颜色: '文字颜色',
  8176. 背景色: '背景色',
  8177. 链接: '链接',
  8178. 序列: '序列',
  8179. 对齐: '对齐',
  8180. 引用: '引用',
  8181. 表情: '表情',
  8182. 图片: '图片',
  8183. 视频: '视频',
  8184. 表格: '表格',
  8185. 代码: '代码',
  8186. 分割线: '分割线',
  8187. 恢复: '恢复',
  8188. 撤销: '撤销',
  8189. 全屏: '全屏',
  8190. 取消全屏: '取消全屏',
  8191. 待办事项: '待办事项'
  8192. },
  8193. dropListMenu: {
  8194. 设置标题: '设置标题',
  8195. 背景颜色: '背景颜色',
  8196. 文字颜色: '文字颜色',
  8197. 设置字号: '设置字号',
  8198. 设置字体: '设置字体',
  8199. 设置缩进: '设置缩进',
  8200. 对齐方式: '对齐方式',
  8201. 设置行高: '设置行高',
  8202. 序列: '序列',
  8203. head: {
  8204. 正文: '正文'
  8205. },
  8206. indent: {
  8207. 增加缩进: '增加缩进',
  8208. 减少缩进: '减少缩进'
  8209. },
  8210. justify: {
  8211. 靠左: '靠左',
  8212. 居中: '居中',
  8213. 靠右: '靠右',
  8214. 两端: '两端'
  8215. },
  8216. list: {
  8217. 无序列表: '无序列表',
  8218. 有序列表: '有序列表'
  8219. }
  8220. },
  8221. panelMenus: {
  8222. emoticon: {
  8223. 默认: '默认',
  8224. 新浪: '新浪',
  8225. emoji: 'emoji',
  8226. 手势: '手势'
  8227. },
  8228. image: {
  8229. 上传图片: '上传图片',
  8230. 网络图片: '网络图片',
  8231. 图片地址: '图片地址',
  8232. 图片文字说明: '图片文字说明',
  8233. 跳转链接: '跳转链接'
  8234. },
  8235. link: {
  8236. 链接: '链接',
  8237. 链接文字: '链接文字',
  8238. 取消链接: '取消链接',
  8239. 查看链接: '查看链接'
  8240. },
  8241. video: {
  8242. 插入视频: '插入视频',
  8243. 上传视频: '上传视频'
  8244. },
  8245. table: {
  8246. 行: '行',
  8247. 列: '列',
  8248. 的: '的',
  8249. 表格: '表格',
  8250. 添加行: '添加行',
  8251. 删除行: '删除行',
  8252. 添加列: '添加列',
  8253. 删除列: '删除列',
  8254. 设置表头: '设置表头',
  8255. 取消表头: '取消表头',
  8256. 插入表格: '插入表格',
  8257. 删除表格: '删除表格'
  8258. },
  8259. code: {
  8260. 删除代码: '删除代码',
  8261. 修改代码: '修改代码',
  8262. 插入代码: '插入代码'
  8263. }
  8264. }
  8265. },
  8266. validate: {
  8267. 张图片: '张图片',
  8268. 大于: '大于',
  8269. 图片链接: '图片链接',
  8270. 不是图片: '不是图片',
  8271. 返回结果: '返回结果',
  8272. 上传图片超时: '上传图片超时',
  8273. 上传图片错误: '上传图片错误',
  8274. 上传图片失败: '上传图片失败',
  8275. 插入图片错误: '插入图片错误',
  8276. 一次最多上传: '一次最多上传',
  8277. 下载链接失败: '下载链接失败',
  8278. 图片验证未通过: '图片验证未通过',
  8279. 服务器返回状态: '服务器返回状态',
  8280. 上传图片返回结果错误: '上传图片返回结果错误',
  8281. 请替换为支持的图片类型: '请替换为支持的图片类型',
  8282. 您插入的网络图片无法识别: '您插入的网络图片无法识别',
  8283. 您刚才插入的图片链接未通过编辑器校验: '您刚才插入的图片链接未通过编辑器校验',
  8284. 插入视频错误: '插入视频错误',
  8285. 视频链接: '视频链接',
  8286. 不是视频: '不是视频',
  8287. 视频验证未通过: '视频验证未通过',
  8288. 个视频: '个视频',
  8289. 上传视频超时: '上传视频超时',
  8290. 上传视频错误: '上传视频错误',
  8291. 上传视频失败: '上传视频失败',
  8292. 上传视频返回结果错误: '上传视频返回结果错误'
  8293. }
  8294. }
  8295. },
  8296. en: {
  8297. wangEditor: {
  8298. 重置: 'reset',
  8299. 插入: 'insert',
  8300. 默认: 'default',
  8301. 创建: 'create',
  8302. 修改: 'edit',
  8303. 如: 'like',
  8304. 请输入正文: 'please enter the text',
  8305. menus: {
  8306. title: {
  8307. 标题: 'head',
  8308. 加粗: 'bold',
  8309. 字号: 'font size',
  8310. 字体: 'font family',
  8311. 斜体: 'italic',
  8312. 下划线: 'underline',
  8313. 删除线: 'strikethrough',
  8314. 缩进: 'indent',
  8315. 行高: 'line heihgt',
  8316. 文字颜色: 'font color',
  8317. 背景色: 'background',
  8318. 链接: 'link',
  8319. 序列: 'numbered list',
  8320. 对齐: 'align',
  8321. 引用: 'quote',
  8322. 表情: 'emoticons',
  8323. 图片: 'image',
  8324. 视频: 'media',
  8325. 表格: 'table',
  8326. 代码: 'code',
  8327. 分割线: 'split line',
  8328. 恢复: 'undo',
  8329. 撤销: 'redo',
  8330. 全屏: 'fullscreen',
  8331. 取消全屏: 'cancel fullscreen',
  8332. 待办事项: 'todo'
  8333. },
  8334. dropListMenu: {
  8335. 设置标题: 'title',
  8336. 背景颜色: 'background',
  8337. 文字颜色: 'font color',
  8338. 设置字号: 'font size',
  8339. 设置字体: 'font family',
  8340. 设置缩进: 'indent',
  8341. 对齐方式: 'align',
  8342. 设置行高: 'line heihgt',
  8343. 序列: 'list',
  8344. head: {
  8345. 正文: 'text'
  8346. },
  8347. indent: {
  8348. 增加缩进: 'indent',
  8349. 减少缩进: 'outdent'
  8350. },
  8351. justify: {
  8352. 靠左: 'left',
  8353. 居中: 'center',
  8354. 靠右: 'right',
  8355. 两端: 'justify'
  8356. },
  8357. list: {
  8358. 无序列表: 'unordered',
  8359. 有序列表: 'ordered'
  8360. }
  8361. },
  8362. panelMenus: {
  8363. emoticon: {
  8364. 表情: 'emoji',
  8365. 手势: 'gesture'
  8366. },
  8367. image: {
  8368. 上传图片: 'upload image',
  8369. 网络图片: 'network image',
  8370. 图片地址: 'image link',
  8371. 图片文字说明: 'image alt',
  8372. 跳转链接: 'hyperlink'
  8373. },
  8374. link: {
  8375. 链接: 'link',
  8376. 链接文字: 'link text',
  8377. 取消链接: 'unlink',
  8378. 查看链接: 'view links'
  8379. },
  8380. video: {
  8381. 插入视频: 'insert video',
  8382. 上传视频: 'upload local video'
  8383. },
  8384. table: {
  8385. 行: 'rows',
  8386. 列: 'columns',
  8387. 的: ' ',
  8388. 表格: 'table',
  8389. 添加行: 'insert row',
  8390. 删除行: 'delete row',
  8391. 添加列: 'insert column',
  8392. 删除列: 'delete column',
  8393. 设置表头: 'set header',
  8394. 取消表头: 'cancel header',
  8395. 插入表格: 'insert table',
  8396. 删除表格: 'delete table'
  8397. },
  8398. code: {
  8399. 删除代码: 'delete code',
  8400. 修改代码: 'edit code',
  8401. 插入代码: 'insert code'
  8402. }
  8403. }
  8404. },
  8405. validate: {
  8406. 张图片: 'images',
  8407. 大于: 'greater than',
  8408. 图片链接: 'image link',
  8409. 不是图片: 'is not image',
  8410. 返回结果: 'return results',
  8411. 上传图片超时: 'upload image timeout',
  8412. 上传图片错误: 'upload image error',
  8413. 上传图片失败: 'upload image failed',
  8414. 插入图片错误: 'insert image error',
  8415. 一次最多上传: 'once most at upload',
  8416. 下载链接失败: 'download link failed',
  8417. 图片验证未通过: 'image validate failed',
  8418. 服务器返回状态: 'server return status',
  8419. 上传图片返回结果错误: 'upload image return results error',
  8420. 请替换为支持的图片类型: 'please replace with a supported image type',
  8421. 您插入的网络图片无法识别: 'the network picture you inserted is not recognized',
  8422. 您刚才插入的图片链接未通过编辑器校验: 'the image link you just inserted did not pass the editor verification',
  8423. 插入视频错误: 'insert video error',
  8424. 视频链接: 'video link',
  8425. 不是视频: 'is not video',
  8426. 视频验证未通过: 'video validate failed',
  8427. 个视频: 'videos',
  8428. 上传视频超时: 'upload video timeout',
  8429. 上传视频错误: 'upload video error',
  8430. 上传视频失败: 'upload video failed',
  8431. 上传视频返回结果错误: 'upload video return results error'
  8432. }
  8433. }
  8434. }
  8435. }
  8436. };
  8437. /***/ }),
  8438. /* 278 */
  8439. /***/ (function(module, exports, __webpack_require__) {
  8440. "use strict";
  8441. /**
  8442. * @description 历史记录 - 数据缓存的模式
  8443. * @author fangzhicong
  8444. */
  8445. var _interopRequireDefault = __webpack_require__(0);
  8446. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  8447. (0, _defineProperty["default"])(exports, "__esModule", {
  8448. value: true
  8449. });
  8450. var util_1 = __webpack_require__(6);
  8451. /**
  8452. * 是否为兼容模式。返回 true 表示当前使用兼容(内容备份)模式,否则使用标准(差异备份)模式
  8453. */
  8454. function compatibleMode() {
  8455. if (util_1.UA.isIE() || util_1.UA.isOldEdge) {
  8456. return true;
  8457. }
  8458. return false;
  8459. }
  8460. exports["default"] = {
  8461. compatibleMode: compatibleMode,
  8462. historyMaxSize: 30
  8463. };
  8464. /***/ }),
  8465. /* 279 */
  8466. /***/ (function(module, exports, __webpack_require__) {
  8467. "use strict";
  8468. /**
  8469. * @description 视频相关的配置
  8470. * @author hutianhao
  8471. */
  8472. var _interopRequireDefault = __webpack_require__(0);
  8473. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  8474. (0, _defineProperty["default"])(exports, "__esModule", {
  8475. value: true
  8476. });
  8477. var const_1 = __webpack_require__(7);
  8478. exports["default"] = {
  8479. // 插入网络视频前的回调函数
  8480. onlineVideoCheck: function onlineVideoCheck(video) {
  8481. return true;
  8482. },
  8483. // 插入网络视频成功之后的回调函数
  8484. onlineVideoCallback: const_1.EMPTY_FN,
  8485. // 显示“插入视频”
  8486. showLinkVideo: true,
  8487. // accept
  8488. uploadVideoAccept: ['mp4'],
  8489. // 服务端地址
  8490. uploadVideoServer: '',
  8491. // 上传视频的最大体积,默认 1024M
  8492. uploadVideoMaxSize: 1 * 1024 * 1024 * 1024,
  8493. // 一次最多上传多少个视频
  8494. // uploadVideoMaxLength: 2,
  8495. // 自定义上传视频的名称
  8496. uploadVideoName: '',
  8497. // 上传视频自定义参数
  8498. uploadVideoParams: {},
  8499. // 自定义参数拼接到 url 中
  8500. uploadVideoParamsWithUrl: false,
  8501. // 上传视频自定义 header
  8502. uploadVideoHeaders: {},
  8503. // 钩子函数
  8504. uploadVideoHooks: {},
  8505. // 上传视频超时时间 ms 默认2个小时
  8506. uploadVideoTimeout: 1000 * 60 * 60 * 2,
  8507. // 跨域带 cookie
  8508. withVideoCredentials: false,
  8509. // 自定义上传
  8510. customUploadVideo: null,
  8511. // 自定义插入视频
  8512. customInsertVideo: null
  8513. };
  8514. /***/ }),
  8515. /* 280 */
  8516. /***/ (function(module, exports, __webpack_require__) {
  8517. "use strict";
  8518. var _interopRequireDefault = __webpack_require__(0);
  8519. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  8520. var _trim = _interopRequireDefault(__webpack_require__(17));
  8521. (0, _defineProperty["default"])(exports, "__esModule", {
  8522. value: true
  8523. });
  8524. var tslib_1 = __webpack_require__(2);
  8525. /**
  8526. * @description selection range API
  8527. * @author wangfupeng
  8528. */
  8529. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  8530. var util_1 = __webpack_require__(6);
  8531. var const_1 = __webpack_require__(7);
  8532. var SelectionAndRange =
  8533. /** @class */
  8534. function () {
  8535. function SelectionAndRange(editor) {
  8536. this._currentRange = null;
  8537. this.editor = editor;
  8538. }
  8539. /**
  8540. * 获取当前 range
  8541. */
  8542. SelectionAndRange.prototype.getRange = function () {
  8543. return this._currentRange;
  8544. };
  8545. /**
  8546. * 保存选区范围
  8547. * @param _range 选区范围
  8548. */
  8549. SelectionAndRange.prototype.saveRange = function (_range) {
  8550. if (_range) {
  8551. // 保存已有选区
  8552. this._currentRange = _range;
  8553. return;
  8554. } // 获取当前的选区
  8555. var selection = window.getSelection();
  8556. if (selection.rangeCount === 0) {
  8557. return;
  8558. }
  8559. var range = selection.getRangeAt(0); // 获取选区范围的 DOM 元素
  8560. var $containerElem = this.getSelectionContainerElem(range);
  8561. if (!($containerElem === null || $containerElem === void 0 ? void 0 : $containerElem.length)) {
  8562. // 当 选区范围内没有 DOM元素 则抛出
  8563. return;
  8564. }
  8565. if ($containerElem.attr('contenteditable') === 'false' || $containerElem.parentUntil('[contenteditable=false]')) {
  8566. // 这里大体意义上就是个保险
  8567. // 确保 编辑区域 的 contenteditable属性 的值为 true
  8568. return;
  8569. }
  8570. var editor = this.editor;
  8571. var $textElem = editor.$textElem;
  8572. if ($textElem.isContain($containerElem)) {
  8573. if ($textElem.elems[0] === $containerElem.elems[0]) {
  8574. var _context;
  8575. if ((0, _trim["default"])(_context = $textElem.html()).call(_context) === const_1.EMPTY_P) {
  8576. var $children = $textElem.children();
  8577. var $last = $children === null || $children === void 0 ? void 0 : $children.last();
  8578. editor.selection.createRangeByElem($last, true, true);
  8579. editor.selection.restoreSelection();
  8580. }
  8581. } // 是编辑内容之内的
  8582. this._currentRange = range;
  8583. }
  8584. };
  8585. /**
  8586. * 折叠选区范围
  8587. * @param toStart true 开始位置,false 结束位置
  8588. */
  8589. SelectionAndRange.prototype.collapseRange = function (toStart) {
  8590. if (toStart === void 0) {
  8591. toStart = false;
  8592. }
  8593. var range = this._currentRange;
  8594. if (range) {
  8595. range.collapse(toStart);
  8596. }
  8597. };
  8598. /**
  8599. * 获取选区范围内的文字
  8600. */
  8601. SelectionAndRange.prototype.getSelectionText = function () {
  8602. var range = this._currentRange;
  8603. if (range) {
  8604. return range.toString();
  8605. } else {
  8606. return '';
  8607. }
  8608. };
  8609. /**
  8610. * 获取选区范围的 DOM 元素
  8611. * @param range 选区范围
  8612. */
  8613. SelectionAndRange.prototype.getSelectionContainerElem = function (range) {
  8614. var r;
  8615. r = range || this._currentRange;
  8616. var elem;
  8617. if (r) {
  8618. elem = r.commonAncestorContainer;
  8619. return dom_core_1["default"](elem.nodeType === 1 ? elem : elem.parentNode);
  8620. }
  8621. };
  8622. /**
  8623. * 选区范围开始的 DOM 元素
  8624. * @param range 选区范围
  8625. */
  8626. SelectionAndRange.prototype.getSelectionStartElem = function (range) {
  8627. var r;
  8628. r = range || this._currentRange;
  8629. var elem;
  8630. if (r) {
  8631. elem = r.startContainer;
  8632. return dom_core_1["default"](elem.nodeType === 1 ? elem : elem.parentNode);
  8633. }
  8634. };
  8635. /**
  8636. * 选区范围结束的 DOM 元素
  8637. * @param range 选区范围
  8638. */
  8639. SelectionAndRange.prototype.getSelectionEndElem = function (range) {
  8640. var r;
  8641. r = range || this._currentRange;
  8642. var elem;
  8643. if (r) {
  8644. elem = r.endContainer;
  8645. return dom_core_1["default"](elem.nodeType === 1 ? elem : elem.parentNode);
  8646. }
  8647. };
  8648. /**
  8649. * 选区是否为空(没有选择文字)
  8650. */
  8651. SelectionAndRange.prototype.isSelectionEmpty = function () {
  8652. var range = this._currentRange;
  8653. if (range && range.startContainer) {
  8654. if (range.startContainer === range.endContainer) {
  8655. if (range.startOffset === range.endOffset) {
  8656. return true;
  8657. }
  8658. }
  8659. }
  8660. return false;
  8661. };
  8662. /**
  8663. * 恢复选区范围
  8664. */
  8665. SelectionAndRange.prototype.restoreSelection = function () {
  8666. var selection = window.getSelection();
  8667. var r = this._currentRange;
  8668. if (selection && r) {
  8669. selection.removeAllRanges();
  8670. selection.addRange(r);
  8671. }
  8672. };
  8673. /**
  8674. * 创建一个空白(即 &#8203 字符)选区
  8675. */
  8676. SelectionAndRange.prototype.createEmptyRange = function () {
  8677. var editor = this.editor;
  8678. var range = this.getRange();
  8679. var $elem;
  8680. if (!range) {
  8681. // 当前无 range
  8682. return;
  8683. }
  8684. if (!this.isSelectionEmpty()) {
  8685. // 当前选区必须没有内容才可以,有内容就直接 return
  8686. return;
  8687. }
  8688. try {
  8689. // 目前只支持 webkit 内核
  8690. if (util_1.UA.isWebkit()) {
  8691. // 插入 &#8203
  8692. editor.cmd["do"]('insertHTML', '&#8203;'); // 修改 offset 位置
  8693. range.setEnd(range.endContainer, range.endOffset + 1); // 存储
  8694. this.saveRange(range);
  8695. } else {
  8696. $elem = dom_core_1["default"]('<strong>&#8203;</strong>');
  8697. editor.cmd["do"]('insertElem', $elem);
  8698. this.createRangeByElem($elem, true);
  8699. }
  8700. } catch (ex) {// 部分情况下会报错,兼容一下
  8701. }
  8702. };
  8703. /**
  8704. * 重新设置选区
  8705. * @param startDom 选区开始的元素
  8706. * @param endDom 选区结束的元素
  8707. */
  8708. SelectionAndRange.prototype.createRangeByElems = function (startDom, endDom) {
  8709. var selection = window.getSelection ? window.getSelection() : document.getSelection(); //清除所有的选区
  8710. selection === null || selection === void 0 ? void 0 : selection.removeAllRanges();
  8711. var range = document.createRange();
  8712. range.setStart(startDom, 0); // 设置多行标签之后,第二个参数会被h标签内的b、font标签等影响range范围的选取
  8713. range.setEnd(endDom, endDom.childNodes.length || 1); // 保存设置好的选区
  8714. this.saveRange(range); //恢复选区
  8715. this.restoreSelection();
  8716. };
  8717. /**
  8718. * 根据 DOM 元素设置选区
  8719. * @param $elem DOM 元素
  8720. * @param toStart true 开始位置,false 结束位置
  8721. * @param isContent 是否选中 $elem 的内容
  8722. */
  8723. SelectionAndRange.prototype.createRangeByElem = function ($elem, toStart, isContent) {
  8724. if (!$elem.length) {
  8725. return;
  8726. }
  8727. var elem = $elem.elems[0];
  8728. var range = document.createRange();
  8729. if (isContent) {
  8730. range.selectNodeContents(elem);
  8731. } else {
  8732. // 如果用户没有传入 isContent 参数,那就默认为 false
  8733. range.selectNode(elem);
  8734. }
  8735. if (toStart != null) {
  8736. // 传入了 toStart 参数,折叠选区。如果没传入 toStart 参数,则忽略这一步
  8737. range.collapse(toStart);
  8738. if (!toStart) {
  8739. this.saveRange(range);
  8740. this.editor.selection.moveCursor(elem);
  8741. }
  8742. } // 存储 range
  8743. this.saveRange(range);
  8744. };
  8745. /**
  8746. * 获取 当前 选取范围的 顶级(段落) 元素
  8747. * @param $editor
  8748. */
  8749. SelectionAndRange.prototype.getSelectionRangeTopNodes = function () {
  8750. var _a, _b; // 清空,防止叠加元素
  8751. var $nodeList;
  8752. var $startElem = (_a = this.getSelectionStartElem()) === null || _a === void 0 ? void 0 : _a.getNodeTop(this.editor);
  8753. var $endElem = (_b = this.getSelectionEndElem()) === null || _b === void 0 ? void 0 : _b.getNodeTop(this.editor);
  8754. $nodeList = this.recordSelectionNodes(dom_core_1["default"]($startElem), dom_core_1["default"]($endElem));
  8755. return $nodeList;
  8756. };
  8757. /**
  8758. * 移动光标位置,默认情况下在尾部
  8759. * 有一个特殊情况是firefox下的文本节点会自动补充一个br元素,会导致自动换行
  8760. * 所以默认情况下在firefox下的文本节点会自动移动到br前面
  8761. * @param {Node} node 元素节点
  8762. * @param {number} position 光标的位置
  8763. */
  8764. SelectionAndRange.prototype.moveCursor = function (node, position) {
  8765. var _a;
  8766. var range = this.getRange(); //对文本节点特殊处理
  8767. var len = node.nodeType === 3 ? (_a = node.nodeValue) === null || _a === void 0 ? void 0 : _a.length : node.childNodes.length;
  8768. if ((util_1.UA.isFirefox || util_1.UA.isIE()) && len !== 0) {
  8769. // firefox下在节点为文本节点和节点最后一个元素为文本节点的情况下
  8770. if (node.nodeType === 3 || node.childNodes[len - 1].nodeName === 'BR') {
  8771. len = len - 1;
  8772. }
  8773. }
  8774. var pos = position !== null && position !== void 0 ? position : len;
  8775. if (!range) {
  8776. return;
  8777. }
  8778. if (node) {
  8779. range.setStart(node, pos);
  8780. range.setEnd(node, pos);
  8781. this.restoreSelection();
  8782. }
  8783. };
  8784. /**
  8785. * 获取光标在当前选区的位置
  8786. */
  8787. SelectionAndRange.prototype.getCursorPos = function () {
  8788. var selection = window.getSelection();
  8789. return selection === null || selection === void 0 ? void 0 : selection.anchorOffset;
  8790. };
  8791. /**
  8792. * 清除当前选区的Range,notice:不影响已保存的Range
  8793. */
  8794. SelectionAndRange.prototype.clearWindowSelectionRange = function () {
  8795. var selection = window.getSelection();
  8796. if (selection) {
  8797. selection.removeAllRanges();
  8798. }
  8799. };
  8800. /**
  8801. * 记录节点 - 从选区开始节点开始 一直到匹配到选区结束节点为止
  8802. * @param $node 节点
  8803. */
  8804. SelectionAndRange.prototype.recordSelectionNodes = function ($node, $endElem) {
  8805. var $list = [];
  8806. var isEnd = true;
  8807. /**
  8808. @author:lw
  8809. @description 解决ctrl+a全选报错的bug $elem.getNodeName()可能会触发$elem[0]未定义
  8810. **/
  8811. try {
  8812. var $NODE = $node;
  8813. var $textElem = this.editor.$textElem; // $NODE元素为空时不需要进行循环
  8814. while (isEnd) {
  8815. var $elem = $NODE === null || $NODE === void 0 ? void 0 : $NODE.getNodeTop(this.editor);
  8816. if ($elem.getNodeName() === 'BODY') isEnd = false; // 兜底
  8817. if ($elem.length > 0) {
  8818. $list.push(dom_core_1["default"]($NODE)); // 两个边界情况:
  8819. // 1. 当前元素就是我们要找的末尾元素
  8820. // 2. 当前元素已经是编辑区顶级元素(否则会找到编辑区的兄弟节点,比如placeholder元素)
  8821. if (($endElem === null || $endElem === void 0 ? void 0 : $endElem.equal($elem)) || $textElem.equal($elem)) {
  8822. isEnd = false;
  8823. } else {
  8824. $NODE = $elem.getNextSibling();
  8825. }
  8826. }
  8827. }
  8828. } catch (e) {
  8829. isEnd = false;
  8830. }
  8831. return $list;
  8832. };
  8833. /**
  8834. * 将当前 range 设置到 node 元素并初始化位置
  8835. * 解决编辑器内容为空时,菜单不生效的问题
  8836. * @param node 元素节点
  8837. */
  8838. SelectionAndRange.prototype.setRangeToElem = function (node) {
  8839. var range = this.getRange();
  8840. range === null || range === void 0 ? void 0 : range.setStart(node, 0);
  8841. range === null || range === void 0 ? void 0 : range.setEnd(node, 0);
  8842. };
  8843. return SelectionAndRange;
  8844. }();
  8845. exports["default"] = SelectionAndRange;
  8846. /***/ }),
  8847. /* 281 */
  8848. /***/ (function(module, exports, __webpack_require__) {
  8849. "use strict";
  8850. /**
  8851. * @description 封装 document.execCommand
  8852. * @author wangfupeng
  8853. */
  8854. var _interopRequireDefault = __webpack_require__(0);
  8855. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  8856. (0, _defineProperty["default"])(exports, "__esModule", {
  8857. value: true
  8858. });
  8859. var tslib_1 = __webpack_require__(2);
  8860. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  8861. var Command =
  8862. /** @class */
  8863. function () {
  8864. function Command(editor) {
  8865. this.editor = editor;
  8866. }
  8867. /**
  8868. * 执行富文本操作的命令
  8869. * @param name name
  8870. * @param value value
  8871. */
  8872. Command.prototype["do"] = function (name, value) {
  8873. var editor = this.editor;
  8874. if (editor.config.styleWithCSS) {
  8875. document.execCommand('styleWithCSS', false, 'true');
  8876. }
  8877. var selection = editor.selection; // 如果无选区,忽略
  8878. if (!selection.getRange()) {
  8879. return;
  8880. } // 恢复选取
  8881. selection.restoreSelection(); // 执行
  8882. switch (name) {
  8883. case 'insertHTML':
  8884. this.insertHTML(value);
  8885. break;
  8886. case 'insertElem':
  8887. this.insertElem(value);
  8888. break;
  8889. default:
  8890. // 默认 command
  8891. this.execCommand(name, value);
  8892. break;
  8893. } // 修改菜单状态
  8894. editor.menus.changeActive(); // 最后,恢复选取保证光标在原来的位置闪烁
  8895. selection.saveRange();
  8896. selection.restoreSelection();
  8897. };
  8898. /**
  8899. * 插入 html
  8900. * @param html html 字符串
  8901. */
  8902. Command.prototype.insertHTML = function (html) {
  8903. var editor = this.editor;
  8904. var range = editor.selection.getRange();
  8905. if (range == null) return;
  8906. if (this.queryCommandSupported('insertHTML')) {
  8907. // W3C
  8908. this.execCommand('insertHTML', html);
  8909. } else if (range.insertNode) {
  8910. // IE
  8911. range.deleteContents();
  8912. if (dom_core_1["default"](html).elems.length > 0) {
  8913. range.insertNode(dom_core_1["default"](html).elems[0]);
  8914. } else {
  8915. var newNode = document.createElement('p');
  8916. newNode.appendChild(document.createTextNode(html));
  8917. range.insertNode(newNode);
  8918. }
  8919. editor.selection.collapseRange();
  8920. } // else if (range.pasteHTML) {
  8921. // // IE <= 10
  8922. // range.pasteHTML(html)
  8923. // }
  8924. };
  8925. /**
  8926. * 插入 DOM 元素
  8927. * @param $elem DOM 元素
  8928. */
  8929. Command.prototype.insertElem = function ($elem) {
  8930. var editor = this.editor;
  8931. var range = editor.selection.getRange();
  8932. if (range == null) return;
  8933. if (range.insertNode) {
  8934. range.deleteContents();
  8935. range.insertNode($elem.elems[0]);
  8936. }
  8937. };
  8938. /**
  8939. * 执行 document.execCommand
  8940. * @param name name
  8941. * @param value value
  8942. */
  8943. Command.prototype.execCommand = function (name, value) {
  8944. document.execCommand(name, false, value);
  8945. };
  8946. /**
  8947. * 执行 document.queryCommandValue
  8948. * @param name name
  8949. */
  8950. Command.prototype.queryCommandValue = function (name) {
  8951. return document.queryCommandValue(name);
  8952. };
  8953. /**
  8954. * 执行 document.queryCommandState
  8955. * @param name name
  8956. */
  8957. Command.prototype.queryCommandState = function (name) {
  8958. return document.queryCommandState(name);
  8959. };
  8960. /**
  8961. * 执行 document.queryCommandSupported
  8962. * @param name name
  8963. */
  8964. Command.prototype.queryCommandSupported = function (name) {
  8965. return document.queryCommandSupported(name);
  8966. };
  8967. return Command;
  8968. }();
  8969. exports["default"] = Command;
  8970. /***/ }),
  8971. /* 282 */
  8972. /***/ (function(module, exports, __webpack_require__) {
  8973. "use strict";
  8974. /**
  8975. * @description 编辑区域,入口文件
  8976. * @author wangfupeng
  8977. */
  8978. var _interopRequireDefault = __webpack_require__(0);
  8979. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  8980. var _find = _interopRequireDefault(__webpack_require__(29));
  8981. var _forEach = _interopRequireDefault(__webpack_require__(4));
  8982. var _trim = _interopRequireDefault(__webpack_require__(17));
  8983. var _indexOf = _interopRequireDefault(__webpack_require__(27));
  8984. var _setTimeout2 = _interopRequireDefault(__webpack_require__(46));
  8985. (0, _defineProperty["default"])(exports, "__esModule", {
  8986. value: true
  8987. });
  8988. var tslib_1 = __webpack_require__(2);
  8989. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  8990. var index_1 = tslib_1.__importDefault(__webpack_require__(287));
  8991. var util_1 = __webpack_require__(6);
  8992. var getChildrenJSON_1 = tslib_1.__importDefault(__webpack_require__(299));
  8993. var getHtmlByNodeList_1 = tslib_1.__importDefault(__webpack_require__(300));
  8994. var const_1 = __webpack_require__(7);
  8995. var Text =
  8996. /** @class */
  8997. function () {
  8998. function Text(editor) {
  8999. this.editor = editor;
  9000. this.eventHooks = {
  9001. onBlurEvents: [],
  9002. changeEvents: [],
  9003. dropEvents: [],
  9004. clickEvents: [],
  9005. keydownEvents: [],
  9006. keyupEvents: [],
  9007. tabUpEvents: [],
  9008. tabDownEvents: [],
  9009. enterUpEvents: [],
  9010. enterDownEvents: [],
  9011. deleteUpEvents: [],
  9012. deleteDownEvents: [],
  9013. pasteEvents: [],
  9014. linkClickEvents: [],
  9015. codeClickEvents: [],
  9016. textScrollEvents: [],
  9017. toolbarClickEvents: [],
  9018. imgClickEvents: [],
  9019. imgDragBarMouseDownEvents: [],
  9020. tableClickEvents: [],
  9021. menuClickEvents: [],
  9022. dropListMenuHoverEvents: [],
  9023. splitLineEvents: [],
  9024. videoClickEvents: []
  9025. };
  9026. }
  9027. /**
  9028. * 初始化
  9029. */
  9030. Text.prototype.init = function () {
  9031. // 实时保存选取范围
  9032. this._saveRange(); // 绑定事件
  9033. this._bindEventHooks(); // 初始化 text 事件钩子函数
  9034. index_1["default"](this);
  9035. };
  9036. /**
  9037. * 切换placeholder
  9038. */
  9039. Text.prototype.togglePlaceholder = function () {
  9040. var _context;
  9041. var html = this.html();
  9042. var $placeholder = (0, _find["default"])(_context = this.editor.$textContainerElem).call(_context, '.placeholder');
  9043. $placeholder.hide();
  9044. if (this.editor.isComposing) return;
  9045. if (!html || html === ' ') $placeholder.show();
  9046. };
  9047. /**
  9048. * 清空内容
  9049. */
  9050. Text.prototype.clear = function () {
  9051. this.html(const_1.EMPTY_P);
  9052. };
  9053. /**
  9054. * 设置/获取 html
  9055. * @param val html 字符串
  9056. */
  9057. Text.prototype.html = function (val) {
  9058. var editor = this.editor;
  9059. var $textElem = editor.$textElem; // 没有 val ,则是获取 html
  9060. if (val == null) {
  9061. var html_1 = $textElem.html(); // 未选中任何内容的时候点击“加粗”或者“斜体”等按钮,就得需要一个空的占位符 &#8203 ,这里替换掉
  9062. html_1 = html_1.replace(/\u200b/gm, ''); // 去掉空行
  9063. html_1 = html_1.replace(/<p><\/p>/gim, ''); // 去掉最后的 空标签
  9064. html_1 = html_1.replace(const_1.EMPTY_P_LAST_REGEX, ''); // 为了避免用户在最后生成的EMPTY_P标签中编辑数据, 最后产生多余标签, 去除所有p标签上的data-we-empty-p属性
  9065. html_1 = html_1.replace(const_1.EMPTY_P_REGEX, '<p>');
  9066. /**
  9067. * 这里的代码为了处理火狐多余的空行标签,但是强制删除空行标签会带来其他问题
  9068. * html()方法返回的的值,EMPTY_P中pr会被删除,只留下<p>,点不进去,从而产生垃圾数据
  9069. * 目前在末位有多个空行的情况下执行撤销重做操作,会产生一种不记录末尾空行的错觉
  9070. * 暂时注释, 等待进一步的兼容处理
  9071. */
  9072. // html = html.replace(/><br>(?!<)/gi, '>') // 过滤 <p><br>内容</p> 中的br
  9073. // html = html.replace(/(?!>)<br></gi, '<') // 过滤 <p>内容<br></p> 中的br
  9074. /**
  9075. * pre标签格式化
  9076. * html()方法理论上应当输出纯净的代码文本,但是对于是否解析html标签还没有良好的判断
  9077. * 如果去除hljs的标签,在解析状态下回显,会造成显示错误并且无法再通过hljs方法渲染
  9078. * 暂且其弃用
  9079. */
  9080. // html = formatCodeHtml(editor, html)
  9081. // 将没有自闭和的标签过滤为自闭和
  9082. var selfCloseHtmls = html_1.match(/<(img|br|hr|input)[^>]*>/gi);
  9083. if (selfCloseHtmls !== null) {
  9084. (0, _forEach["default"])(selfCloseHtmls).call(selfCloseHtmls, function (item) {
  9085. if (!item.match(/\/>/)) {
  9086. html_1 = html_1.replace(item, item.substring(0, item.length - 1) + '/>');
  9087. }
  9088. });
  9089. }
  9090. return html_1;
  9091. } // 有 val ,则是设置 html
  9092. val = (0, _trim["default"])(val).call(val);
  9093. if (val === '') {
  9094. val = const_1.EMPTY_P;
  9095. }
  9096. if ((0, _indexOf["default"])(val).call(val, '<') !== 0) {
  9097. // 内容用 p 标签包裹
  9098. val = "<p>" + val + "</p>";
  9099. }
  9100. $textElem.html(val); // 初始化选区,将光标定位到内容尾部
  9101. editor.initSelection();
  9102. };
  9103. /**
  9104. * 将json设置成html至编辑器
  9105. * @param nodeList json格式
  9106. */
  9107. Text.prototype.setJSON = function (nodeList) {
  9108. var html = getHtmlByNodeList_1["default"](nodeList).children();
  9109. var editor = this.editor;
  9110. var $textElem = editor.$textElem; // 没有获取到元素的情况
  9111. if (!html) return; // 替换文本节点下全部子节点
  9112. $textElem.replaceChildAll(html);
  9113. };
  9114. /**
  9115. * 获取 json 格式的数据
  9116. */
  9117. Text.prototype.getJSON = function () {
  9118. var editor = this.editor;
  9119. var $textElem = editor.$textElem;
  9120. return getChildrenJSON_1["default"]($textElem);
  9121. };
  9122. Text.prototype.text = function (val) {
  9123. var editor = this.editor;
  9124. var $textElem = editor.$textElem; // 没有 val ,是获取 text
  9125. if (val == null) {
  9126. var text = $textElem.text(); // 未选中任何内容的时候点击“加粗”或者“斜体”等按钮,就得需要一个空的占位符 &#8203 ,这里替换掉
  9127. text = text.replace(/\u200b/gm, '');
  9128. return text;
  9129. } // 有 val ,则是设置 text
  9130. $textElem.text("<p>" + val + "</p>"); // 初始化选区,将光标定位到内容尾部
  9131. editor.initSelection();
  9132. };
  9133. /**
  9134. * 追加 html 内容
  9135. * @param html html 字符串
  9136. */
  9137. Text.prototype.append = function (html) {
  9138. var editor = this.editor;
  9139. if ((0, _indexOf["default"])(html).call(html, '<') !== 0) {
  9140. // 普通字符串,用 <p> 包裹
  9141. html = "<p>" + html + "</p>";
  9142. }
  9143. this.html(this.html() + html); // 初始化选区,将光标定位到内容尾部
  9144. editor.initSelection();
  9145. };
  9146. /**
  9147. * 每一步操作,都实时保存选区范围
  9148. */
  9149. Text.prototype._saveRange = function () {
  9150. var editor = this.editor;
  9151. var $textElem = editor.$textElem;
  9152. var $document = dom_core_1["default"](document); // 保存当前的选区
  9153. function saveRange() {
  9154. // 随时保存选区
  9155. editor.selection.saveRange(); // 更新按钮 active 状态
  9156. editor.menus.changeActive();
  9157. } // 按键后保存
  9158. $textElem.on('keyup', saveRange); // 点击后保存,为了避免被多次执行而导致造成浪费,这里对 click 使用一次性绑定
  9159. function onceClickSaveRange() {
  9160. saveRange();
  9161. $textElem.off('click', onceClickSaveRange);
  9162. }
  9163. $textElem.on('click', onceClickSaveRange);
  9164. function handleMouseUp() {
  9165. // 在编辑器区域之外完成抬起,保存此时编辑区内的新选区,取消此时鼠标抬起事件
  9166. saveRange();
  9167. $document.off('mouseup', handleMouseUp);
  9168. }
  9169. function listenMouseLeave() {
  9170. // 当鼠标移动到外面,要监听鼠标抬起操作
  9171. $document.on('mouseup', handleMouseUp); // 首次移出时即接触leave监听,防止用户不断移入移出多次注册handleMouseUp
  9172. $textElem.off('mouseleave', listenMouseLeave);
  9173. }
  9174. $textElem.on('mousedown', function () {
  9175. // mousedown 状态下,要坚听鼠标滑动到编辑区域外面
  9176. $textElem.on('mouseleave', listenMouseLeave);
  9177. });
  9178. $textElem.on('mouseup', function (e) {
  9179. // 记得移除$textElem的mouseleave事件, 避免内存泄露
  9180. $textElem.off('mouseleave', listenMouseLeave); // fix:避免当选中一段文字之后,再次点击文字中间位置无法更新selection问题。issue#3096
  9181. (0, _setTimeout2["default"])(function () {
  9182. var selection = editor.selection;
  9183. var range = selection.getRange();
  9184. if (range === null) return;
  9185. saveRange();
  9186. }, 0);
  9187. });
  9188. };
  9189. /**
  9190. * 绑定事件,事件会触发钩子函数
  9191. */
  9192. Text.prototype._bindEventHooks = function () {
  9193. var editor = this.editor;
  9194. var $textElem = editor.$textElem;
  9195. var eventHooks = this.eventHooks; // click hooks
  9196. $textElem.on('click', function (e) {
  9197. var clickEvents = eventHooks.clickEvents;
  9198. (0, _forEach["default"])(clickEvents).call(clickEvents, function (fn) {
  9199. return fn(e);
  9200. });
  9201. }); // enter 键 up 时的 hooks
  9202. $textElem.on('keyup', function (e) {
  9203. if (e.keyCode !== 13) return;
  9204. var enterUpEvents = eventHooks.enterUpEvents;
  9205. (0, _forEach["default"])(enterUpEvents).call(enterUpEvents, function (fn) {
  9206. return fn(e);
  9207. });
  9208. }); // 键盘 up 时的 hooks
  9209. $textElem.on('keyup', function (e) {
  9210. var keyupEvents = eventHooks.keyupEvents;
  9211. (0, _forEach["default"])(keyupEvents).call(keyupEvents, function (fn) {
  9212. return fn(e);
  9213. });
  9214. }); // 键盘 down 时的 hooks
  9215. $textElem.on('keydown', function (e) {
  9216. var keydownEvents = eventHooks.keydownEvents;
  9217. (0, _forEach["default"])(keydownEvents).call(keydownEvents, function (fn) {
  9218. return fn(e);
  9219. });
  9220. }); // delete 键 up 时 hooks
  9221. $textElem.on('keyup', function (e) {
  9222. if (e.keyCode !== 8 && e.keyCode !== 46) return;
  9223. var deleteUpEvents = eventHooks.deleteUpEvents;
  9224. (0, _forEach["default"])(deleteUpEvents).call(deleteUpEvents, function (fn) {
  9225. return fn(e);
  9226. });
  9227. }); // delete 键 down 时 hooks
  9228. $textElem.on('keydown', function (e) {
  9229. if (e.keyCode !== 8 && e.keyCode !== 46) return;
  9230. var deleteDownEvents = eventHooks.deleteDownEvents;
  9231. (0, _forEach["default"])(deleteDownEvents).call(deleteDownEvents, function (fn) {
  9232. return fn(e);
  9233. });
  9234. }); // 粘贴
  9235. $textElem.on('paste', function (e) {
  9236. if (util_1.UA.isIE()) return; // IE 不支持
  9237. // 阻止默认行为,使用 execCommand 的粘贴命令
  9238. e.preventDefault();
  9239. var pasteEvents = eventHooks.pasteEvents;
  9240. (0, _forEach["default"])(pasteEvents).call(pasteEvents, function (fn) {
  9241. return fn(e);
  9242. });
  9243. }); // 撤销/恢复 快捷键
  9244. $textElem.on('keydown', function (e) {
  9245. if ( // 编辑器处于聚焦状态下(多编辑器实例) || 当前处于兼容模式(兼容模式撤销/恢复后不聚焦,所以直接过,但会造成多编辑器同时撤销/恢复)
  9246. (editor.isFocus || editor.isCompatibleMode) && (e.ctrlKey || e.metaKey) && e.keyCode === 90) {
  9247. // 取消默认行为
  9248. e.preventDefault(); // 执行事件
  9249. if (e.shiftKey) {
  9250. // 恢复
  9251. editor.history.restore();
  9252. } else {
  9253. // 撤销
  9254. editor.history.revoke();
  9255. }
  9256. }
  9257. }); // tab up
  9258. $textElem.on('keyup', function (e) {
  9259. if (e.keyCode !== 9) return;
  9260. e.preventDefault();
  9261. var tabUpEvents = eventHooks.tabUpEvents;
  9262. (0, _forEach["default"])(tabUpEvents).call(tabUpEvents, function (fn) {
  9263. return fn(e);
  9264. });
  9265. }); // tab down
  9266. $textElem.on('keydown', function (e) {
  9267. if (e.keyCode !== 9) return;
  9268. e.preventDefault();
  9269. var tabDownEvents = eventHooks.tabDownEvents;
  9270. (0, _forEach["default"])(tabDownEvents).call(tabDownEvents, function (fn) {
  9271. return fn(e);
  9272. });
  9273. }); // 文本编辑区域 滚动时触发
  9274. $textElem.on('scroll', // 使用节流
  9275. util_1.throttle(function (e) {
  9276. var textScrollEvents = eventHooks.textScrollEvents;
  9277. (0, _forEach["default"])(textScrollEvents).call(textScrollEvents, function (fn) {
  9278. return fn(e);
  9279. });
  9280. }, 100)); // 拖拽相关的事件
  9281. function preventDefault(e) {
  9282. // 禁用 document 拖拽事件
  9283. e.preventDefault();
  9284. }
  9285. dom_core_1["default"](document).on('dragleave', preventDefault).on('drop', preventDefault).on('dragenter', preventDefault).on('dragover', preventDefault); // 全局事件在编辑器实例销毁的时候进行解绑
  9286. editor.beforeDestroy(function () {
  9287. dom_core_1["default"](document).off('dragleave', preventDefault).off('drop', preventDefault).off('dragenter', preventDefault).off('dragover', preventDefault);
  9288. });
  9289. $textElem.on('drop', function (e) {
  9290. e.preventDefault();
  9291. var events = eventHooks.dropEvents;
  9292. (0, _forEach["default"])(events).call(events, function (fn) {
  9293. return fn(e);
  9294. });
  9295. }); // link click
  9296. $textElem.on('click', function (e) {
  9297. // 存储链接元素
  9298. var $link = null;
  9299. var target = e.target;
  9300. var $target = dom_core_1["default"](target);
  9301. if ($target.getNodeName() === 'A') {
  9302. // 当前点击的就是一个链接
  9303. $link = $target;
  9304. } else {
  9305. // 否则,向父节点中寻找链接
  9306. var $parent = $target.parentUntil('a');
  9307. if ($parent != null) {
  9308. // 找到了
  9309. $link = $parent;
  9310. }
  9311. }
  9312. if (!$link) return; // 没有点击链接,则返回
  9313. var linkClickEvents = eventHooks.linkClickEvents;
  9314. (0, _forEach["default"])(linkClickEvents).call(linkClickEvents, function (fn) {
  9315. return fn($link);
  9316. });
  9317. }); // img click
  9318. $textElem.on('click', function (e) {
  9319. // 存储图片元素
  9320. var $img = null;
  9321. var target = e.target;
  9322. var $target = dom_core_1["default"](target); //处理图片点击 去除掉emoji图片的情况
  9323. if ($target.getNodeName() === 'IMG' && !$target.elems[0].getAttribute('data-emoji')) {
  9324. // 当前点击的就是img
  9325. e.stopPropagation();
  9326. $img = $target;
  9327. }
  9328. if (!$img) return; // 没有点击图片,则返回
  9329. var imgClickEvents = eventHooks.imgClickEvents;
  9330. (0, _forEach["default"])(imgClickEvents).call(imgClickEvents, function (fn) {
  9331. return fn($img);
  9332. });
  9333. }); // code click
  9334. $textElem.on('click', function (e) {
  9335. // 存储代码元素
  9336. var $code = null;
  9337. var target = e.target;
  9338. var $target = dom_core_1["default"](target);
  9339. if ($target.getNodeName() === 'PRE') {
  9340. // 当前点击的就是一个链接
  9341. $code = $target;
  9342. } else {
  9343. // 否则,向父节点中寻找链接
  9344. var $parent = $target.parentUntil('pre');
  9345. if ($parent !== null) {
  9346. // 找到了
  9347. $code = $parent;
  9348. }
  9349. }
  9350. if (!$code) return;
  9351. var codeClickEvents = eventHooks.codeClickEvents;
  9352. (0, _forEach["default"])(codeClickEvents).call(codeClickEvents, function (fn) {
  9353. return fn($code);
  9354. });
  9355. }); // splitLine click
  9356. $textElem.on('click', function (e) {
  9357. // 存储分割线元素
  9358. var $splitLine = null;
  9359. var target = e.target;
  9360. var $target = dom_core_1["default"](target); // 判断当前点击元素
  9361. if ($target.getNodeName() === 'HR') {
  9362. $splitLine = $target;
  9363. } else {
  9364. $target == null;
  9365. }
  9366. if (!$splitLine) return; // 没有点击分割线,则返回
  9367. // 设置、恢复选区
  9368. editor.selection.createRangeByElem($splitLine);
  9369. editor.selection.restoreSelection();
  9370. var splitLineClickEvents = eventHooks.splitLineEvents;
  9371. (0, _forEach["default"])(splitLineClickEvents).call(splitLineClickEvents, function (fn) {
  9372. return fn($splitLine);
  9373. });
  9374. }); // 菜单栏被点击
  9375. editor.$toolbarElem.on('click', function (e) {
  9376. var toolbarClickEvents = eventHooks.toolbarClickEvents;
  9377. (0, _forEach["default"])(toolbarClickEvents).call(toolbarClickEvents, function (fn) {
  9378. return fn(e);
  9379. });
  9380. }); //mousedown事件
  9381. editor.$textContainerElem.on('mousedown', function (e) {
  9382. var target = e.target;
  9383. var $target = dom_core_1["default"](target);
  9384. if ($target.hasClass('w-e-img-drag-rb')) {
  9385. // 点击的元素,是图片拖拽调整大小的 bar
  9386. var imgDragBarMouseDownEvents = eventHooks.imgDragBarMouseDownEvents;
  9387. (0, _forEach["default"])(imgDragBarMouseDownEvents).call(imgDragBarMouseDownEvents, function (fn) {
  9388. return fn();
  9389. });
  9390. }
  9391. }); //table click
  9392. $textElem.on('click', function (e) {
  9393. // 存储元素
  9394. var $dom = null;
  9395. var target = e.target; //获取最祖父元素
  9396. $dom = dom_core_1["default"](target).parentUntilEditor('TABLE', editor, target); // 没有table范围内,则返回
  9397. if (!$dom) return;
  9398. var tableClickEvents = eventHooks.tableClickEvents;
  9399. (0, _forEach["default"])(tableClickEvents).call(tableClickEvents, function (fn) {
  9400. return fn($dom, e);
  9401. });
  9402. }); // enter 键 down
  9403. $textElem.on('keydown', function (e) {
  9404. if (e.keyCode !== 13) return;
  9405. var enterDownEvents = eventHooks.enterDownEvents;
  9406. (0, _forEach["default"])(enterDownEvents).call(enterDownEvents, function (fn) {
  9407. return fn(e);
  9408. });
  9409. }); // 视频 click
  9410. $textElem.on('click', function (e) {
  9411. // 存储视频
  9412. var $video = null;
  9413. var target = e.target;
  9414. var $target = dom_core_1["default"](target); //处理视频点击 简单的video 标签
  9415. if ($target.getNodeName() === 'VIDEO') {
  9416. // 当前点击的就是视频
  9417. e.stopPropagation();
  9418. $video = $target;
  9419. }
  9420. if (!$video) return; // 没有点击视频,则返回
  9421. var videoClickEvents = eventHooks.videoClickEvents;
  9422. (0, _forEach["default"])(videoClickEvents).call(videoClickEvents, function (fn) {
  9423. return fn($video);
  9424. });
  9425. });
  9426. };
  9427. return Text;
  9428. }();
  9429. exports["default"] = Text;
  9430. /***/ }),
  9431. /* 283 */
  9432. /***/ (function(module, exports, __webpack_require__) {
  9433. var parent = __webpack_require__(284);
  9434. module.exports = parent;
  9435. /***/ }),
  9436. /* 284 */
  9437. /***/ (function(module, exports, __webpack_require__) {
  9438. var find = __webpack_require__(285);
  9439. var ArrayPrototype = Array.prototype;
  9440. module.exports = function (it) {
  9441. var own = it.find;
  9442. return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.find) ? find : own;
  9443. };
  9444. /***/ }),
  9445. /* 285 */
  9446. /***/ (function(module, exports, __webpack_require__) {
  9447. __webpack_require__(286);
  9448. var entryVirtual = __webpack_require__(15);
  9449. module.exports = entryVirtual('Array').find;
  9450. /***/ }),
  9451. /* 286 */
  9452. /***/ (function(module, exports, __webpack_require__) {
  9453. "use strict";
  9454. var $ = __webpack_require__(5);
  9455. var $find = __webpack_require__(32).find;
  9456. var addToUnscopables = __webpack_require__(82);
  9457. var arrayMethodUsesToLength = __webpack_require__(22);
  9458. var FIND = 'find';
  9459. var SKIPS_HOLES = true;
  9460. var USES_TO_LENGTH = arrayMethodUsesToLength(FIND);
  9461. // Shouldn't skip holes
  9462. if (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; });
  9463. // `Array.prototype.find` method
  9464. // https://tc39.github.io/ecma262/#sec-array.prototype.find
  9465. $({ target: 'Array', proto: true, forced: SKIPS_HOLES || !USES_TO_LENGTH }, {
  9466. find: function find(callbackfn /* , that = undefined */) {
  9467. return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
  9468. }
  9469. });
  9470. // https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables
  9471. addToUnscopables(FIND);
  9472. /***/ }),
  9473. /* 287 */
  9474. /***/ (function(module, exports, __webpack_require__) {
  9475. "use strict";
  9476. /**
  9477. * @description Text 事件钩子函数。Text 公共的,不是某个菜单独有的
  9478. * @wangfupeng
  9479. */
  9480. var _interopRequireDefault = __webpack_require__(0);
  9481. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  9482. (0, _defineProperty["default"])(exports, "__esModule", {
  9483. value: true
  9484. });
  9485. var tslib_1 = __webpack_require__(2);
  9486. var enter_to_create_p_1 = tslib_1.__importDefault(__webpack_require__(288));
  9487. var del_to_keep_p_1 = tslib_1.__importStar(__webpack_require__(289));
  9488. var tab_to_space_1 = tslib_1.__importDefault(__webpack_require__(290));
  9489. var paste_text_html_1 = tslib_1.__importDefault(__webpack_require__(291));
  9490. var img_click_active_1 = tslib_1.__importDefault(__webpack_require__(298));
  9491. /**
  9492. * 初始化 text 事件钩子函数
  9493. * @param text text 实例
  9494. */
  9495. function initTextHooks(text) {
  9496. var editor = text.editor;
  9497. var eventHooks = text.eventHooks; // 回车时,保证生成的是 <p> 标签
  9498. enter_to_create_p_1["default"](editor, eventHooks.enterUpEvents, eventHooks.enterDownEvents); // 删除时,保留 EMPTY_P
  9499. del_to_keep_p_1["default"](editor, eventHooks.deleteUpEvents, eventHooks.deleteDownEvents); // 剪切时, 保留p
  9500. del_to_keep_p_1.cutToKeepP(editor, eventHooks.keyupEvents); // tab 转换为空格
  9501. tab_to_space_1["default"](editor, eventHooks.tabDownEvents); // 粘贴 text html
  9502. paste_text_html_1["default"](editor, eventHooks.pasteEvents); // img click active
  9503. img_click_active_1["default"](editor, eventHooks.imgClickEvents);
  9504. }
  9505. exports["default"] = initTextHooks;
  9506. /***/ }),
  9507. /* 288 */
  9508. /***/ (function(module, exports, __webpack_require__) {
  9509. "use strict";
  9510. /**
  9511. * @description 回车时,保证生成的是 <p> 标签
  9512. * @author wangfupeng
  9513. */
  9514. var _interopRequireDefault = __webpack_require__(0);
  9515. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  9516. var _indexOf = _interopRequireDefault(__webpack_require__(27));
  9517. (0, _defineProperty["default"])(exports, "__esModule", {
  9518. value: true
  9519. });
  9520. var tslib_1 = __webpack_require__(2);
  9521. var const_1 = __webpack_require__(7);
  9522. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  9523. /**
  9524. * 回车时,保证生成的是 <p> 标签
  9525. * @param editor 编辑器实例
  9526. * @param enterUpEvents enter 键 up 时的 hooks
  9527. * @param enterDownEvents enter 键 down 时的 hooks
  9528. */
  9529. function enterToCreateP(editor, enterUpEvents, enterDownEvents) {
  9530. function insertEmptyP($selectionElem) {
  9531. var _context;
  9532. var $p = dom_core_1["default"](const_1.EMPTY_P);
  9533. $p.insertBefore($selectionElem);
  9534. if ((0, _indexOf["default"])(_context = $selectionElem.html()).call(_context, '<img') >= 0) {
  9535. // 有图片的回车键弹起时
  9536. $p.remove();
  9537. return;
  9538. }
  9539. editor.selection.createRangeByElem($p, true, true);
  9540. editor.selection.restoreSelection();
  9541. $selectionElem.remove();
  9542. } // enter up 时
  9543. function fn() {
  9544. var $textElem = editor.$textElem;
  9545. var $selectionElem = editor.selection.getSelectionContainerElem();
  9546. var $parentElem = $selectionElem.parent();
  9547. if ($parentElem.html() === '<code><br></code>') {
  9548. // 回车之前光标所在一个 <p><code>.....</code></p> ,忽然回车生成一个空的 <p><code><br></code></p>
  9549. // 而且继续回车跳不出去,因此只能特殊处理
  9550. insertEmptyP($parentElem);
  9551. return;
  9552. }
  9553. if ($selectionElem.getNodeName() === 'FONT' && $selectionElem.text() === '' && $selectionElem.attr('face') === 'monospace') {
  9554. // 行内code回车时会产生一个<font face="monospace"><br></font>,导致样式问题
  9555. insertEmptyP($parentElem);
  9556. return;
  9557. }
  9558. if (!$parentElem.equal($textElem)) {
  9559. // 不是顶级标签
  9560. return;
  9561. }
  9562. var nodeName = $selectionElem.getNodeName();
  9563. if (nodeName === 'P' && $selectionElem.attr('data-we-empty-p') === null) {
  9564. // 当前的标签是 P 且不为 editor 生成的空白占位 p 标签,不用做处理
  9565. return;
  9566. }
  9567. if ($selectionElem.text()) {
  9568. // 有内容,不做处理
  9569. return;
  9570. } // 插入 <p> ,并将选取定位到 <p>,删除当前标签
  9571. insertEmptyP($selectionElem);
  9572. }
  9573. enterUpEvents.push(fn); // enter down 时
  9574. function createPWhenEnterText(e) {
  9575. var _a; // selection中的range缓存还有问题,更新不及时,此处手动更新range,处理enter的bug
  9576. editor.selection.saveRange((_a = getSelection()) === null || _a === void 0 ? void 0 : _a.getRangeAt(0));
  9577. var $selectElem = editor.selection.getSelectionContainerElem();
  9578. if ($selectElem.id === editor.textElemId) {
  9579. // 回车时,默认创建了 text 标签(没有 p 标签包裹),父元素直接就是 $textElem
  9580. // 例如,光标放在 table 最后侧,回车时,默认就是这个情况
  9581. e.preventDefault();
  9582. editor.cmd["do"]('insertHTML', '<p><br></p>');
  9583. }
  9584. }
  9585. enterDownEvents.push(createPWhenEnterText);
  9586. }
  9587. exports["default"] = enterToCreateP;
  9588. /***/ }),
  9589. /* 289 */
  9590. /***/ (function(module, exports, __webpack_require__) {
  9591. "use strict";
  9592. /**
  9593. * @description 删除时保留 EMPTY_P
  9594. * @author wangfupeng
  9595. */
  9596. var _interopRequireDefault = __webpack_require__(0);
  9597. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  9598. var _trim = _interopRequireDefault(__webpack_require__(17));
  9599. var _includes = _interopRequireDefault(__webpack_require__(28));
  9600. (0, _defineProperty["default"])(exports, "__esModule", {
  9601. value: true
  9602. });
  9603. exports.cutToKeepP = void 0;
  9604. var tslib_1 = __webpack_require__(2);
  9605. var const_1 = __webpack_require__(7);
  9606. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  9607. /**
  9608. * 删除时保留 EMPTY_P
  9609. * @param editor 编辑器实例
  9610. * @param deleteUpEvents delete 键 up 时的 hooks
  9611. * @param deleteDownEvents delete 建 down 时的 hooks
  9612. */
  9613. function deleteToKeepP(editor, deleteUpEvents, deleteDownEvents) {
  9614. function upFn() {
  9615. var $textElem = editor.$textElem;
  9616. var html = editor.$textElem.html();
  9617. var text = editor.$textElem.text();
  9618. var txtHtml = (0, _trim["default"])(html).call(html);
  9619. /**
  9620. @description
  9621. 如果编辑区清空的状态下,单单插入一张图片,删除图片后,会存在空的情况:'<p data-we-empty-p=""></p>'
  9622. 需要包含这种边界情况
  9623. **/
  9624. var emptyTags = ['<p><br></p>', '<br>', '<p data-we-empty-p=""></p>', const_1.EMPTY_P]; // 编辑器中的字符是""或空白,说明内容为空
  9625. if (/^\s*$/.test(text) && (!txtHtml || (0, _includes["default"])(emptyTags).call(emptyTags, txtHtml))) {
  9626. // 内容空了
  9627. $textElem.html(const_1.EMPTY_P);
  9628. /**
  9629. * 当编辑器 - 文本区内容为空的情况下,会插入一个空的P,此时应该将选区移动到这个空标签上,重置选区
  9630. * bug: 如果选区没有从$textElem上调整到p上,就会有问题,在清空内容,设置标题时,会报错。
  9631. */
  9632. var containerElem = $textElem.getNode(); // 设置新的选区
  9633. editor.selection.createRangeByElems(containerElem.childNodes[0], containerElem.childNodes[0]);
  9634. var $selectionElem = editor.selection.getSelectionContainerElem();
  9635. editor.selection.restoreSelection(); // 设置折叠后的光标位置,在firebox等浏览器下
  9636. // 光标设置在end位置会自动换行
  9637. editor.selection.moveCursor($selectionElem.getNode(), 0);
  9638. }
  9639. }
  9640. deleteUpEvents.push(upFn);
  9641. function downFn(e) {
  9642. var _context;
  9643. var $textElem = editor.$textElem;
  9644. var txtHtml = (0, _trim["default"])(_context = $textElem.html().toLowerCase()).call(_context);
  9645. if (txtHtml === const_1.EMPTY_P) {
  9646. // 最后剩下一个空行,就不再删除了
  9647. e.preventDefault();
  9648. return;
  9649. }
  9650. }
  9651. deleteDownEvents.push(downFn);
  9652. }
  9653. /**
  9654. * 剪切时保留 EMPTY_P
  9655. * @param editor 编辑器实例
  9656. * @param cutEvents keydown hooks
  9657. */
  9658. function cutToKeepP(editor, cutEvents) {
  9659. function upFn(e) {
  9660. var _context2;
  9661. if (e.keyCode !== 88) {
  9662. return;
  9663. }
  9664. var $textElem = editor.$textElem;
  9665. var txtHtml = (0, _trim["default"])(_context2 = $textElem.html().toLowerCase()).call(_context2); // firefox 时用 txtHtml === '<br>' 判断,其他用 !txtHtml 判断
  9666. if (!txtHtml || txtHtml === '<br>') {
  9667. // 内容空了
  9668. var $p = dom_core_1["default"](const_1.EMPTY_P);
  9669. $textElem.html(' '); // 一定要先清空,否则在 firefox 下有问题
  9670. $textElem.append($p);
  9671. editor.selection.createRangeByElem($p, false, true);
  9672. editor.selection.restoreSelection(); // 设置折叠后的光标位置,在firebox等浏览器下
  9673. // 光标设置在end位置会自动换行
  9674. editor.selection.moveCursor($p.getNode(), 0);
  9675. }
  9676. }
  9677. cutEvents.push(upFn);
  9678. }
  9679. exports.cutToKeepP = cutToKeepP;
  9680. exports["default"] = deleteToKeepP;
  9681. /***/ }),
  9682. /* 290 */
  9683. /***/ (function(module, exports, __webpack_require__) {
  9684. "use strict";
  9685. /**
  9686. * @description 编辑区域 tab 的特殊处理
  9687. * @author wangfupeng
  9688. */
  9689. var _interopRequireDefault = __webpack_require__(0);
  9690. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  9691. (0, _defineProperty["default"])(exports, "__esModule", {
  9692. value: true
  9693. });
  9694. /**
  9695. * 编辑区域 tab 的特殊处理,转换为空格
  9696. * @param editor 编辑器实例
  9697. * @param tabDownEvents tab down 事件钩子
  9698. */
  9699. function tabHandler(editor, tabDownEvents) {
  9700. // 定义函数
  9701. function fn() {
  9702. if (!editor.cmd.queryCommandSupported('insertHTML')) {
  9703. // 必须原生支持 insertHTML 命令
  9704. return;
  9705. }
  9706. var $selectionElem = editor.selection.getSelectionContainerElem();
  9707. if (!$selectionElem) {
  9708. return;
  9709. }
  9710. var $parentElem = $selectionElem.parent();
  9711. var selectionNodeName = $selectionElem.getNodeName();
  9712. var parentNodeName = $parentElem.getNodeName();
  9713. if (selectionNodeName == 'CODE' || parentNodeName === 'CODE' || parentNodeName === 'PRE' || /hljs/.test(parentNodeName)) {
  9714. // <pre><code> 里面
  9715. editor.cmd["do"]('insertHTML', editor.config.languageTab);
  9716. } else {
  9717. // 普通文字
  9718. editor.cmd["do"]('insertHTML', '&nbsp;&nbsp;&nbsp;&nbsp;');
  9719. }
  9720. } // 保留函数
  9721. tabDownEvents.push(fn);
  9722. }
  9723. exports["default"] = tabHandler;
  9724. /***/ }),
  9725. /* 291 */
  9726. /***/ (function(module, exports, __webpack_require__) {
  9727. "use strict";
  9728. /**
  9729. * @description 粘贴 text html
  9730. * @author wangfupeng
  9731. */
  9732. var _interopRequireDefault = __webpack_require__(0);
  9733. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  9734. var _trim = _interopRequireDefault(__webpack_require__(17));
  9735. var _forEach = _interopRequireDefault(__webpack_require__(4));
  9736. (0, _defineProperty["default"])(exports, "__esModule", {
  9737. value: true
  9738. });
  9739. var paste_event_1 = __webpack_require__(131);
  9740. var util_1 = __webpack_require__(6);
  9741. var const_1 = __webpack_require__(7);
  9742. /**
  9743. * 格式化html
  9744. * @param val 粘贴的html
  9745. * @author Gavin
  9746. * @description
  9747. 格式化html,需要特别注意
  9748. 功能:
  9749. 1. 将htmlText中的div,都替换成p标签
  9750. 2. 将处理后的htmlText模拟先插入到真实dom中,处理P截断问题。
  9751. 注意点:
  9752. 由于P不能嵌套p,会导致标签截断,从而将<p><p>xx</p></p>这样一个结构插入到页面时,会出现很多问题,包括光标位置问题,页面凭空多很多元素的问题。
  9753. */
  9754. function formatHtml(htmlText) {
  9755. var _context;
  9756. var paste = (0, _trim["default"])(_context = htmlText.replace(/<div>/gim, '<p>') // div 全部替换为 p 标签
  9757. .replace(/<\/div>/gim, '</p>')).call(_context); // 去除''
  9758. // 模拟插入到真实dom中
  9759. var tempContainer = document.createElement('div');
  9760. tempContainer.innerHTML = paste;
  9761. return tempContainer.innerHTML.replace(/<p><\/p>/gim, ''); // 将被截断的p,都替换掉
  9762. }
  9763. /**
  9764. * 格式化html
  9765. * @param val 粘贴的html
  9766. * @author liuwei
  9767. */
  9768. function formatCode(val) {
  9769. var pasteText = val.replace(/<br>|<br\/>/gm, '\n').replace(/<[^>]+>/gm, '');
  9770. return pasteText;
  9771. }
  9772. /**
  9773. * 判断html是否使用P标签包裹
  9774. * @param html 粘贴的html
  9775. * @author luochao
  9776. */
  9777. function isParagraphHtml(html) {
  9778. var _a;
  9779. if (html === '') return false;
  9780. var container = document.createElement('div');
  9781. container.innerHTML = html;
  9782. return ((_a = container.firstChild) === null || _a === void 0 ? void 0 : _a.nodeName) === 'P';
  9783. }
  9784. /**
  9785. * 判断当前选区是否是空段落
  9786. * @param topElem 选区顶层元素
  9787. * @author luochao
  9788. */
  9789. function isEmptyParagraph(topElem) {
  9790. if (!(topElem === null || topElem === void 0 ? void 0 : topElem.length)) return false;
  9791. var dom = topElem.elems[0];
  9792. return dom.nodeName === 'P' && dom.innerHTML === '<br>';
  9793. }
  9794. /**
  9795. * 粘贴文本和 html
  9796. * @param editor 编辑器对象
  9797. * @param pasteEvents 粘贴事件列表
  9798. */
  9799. function pasteTextHtml(editor, pasteEvents) {
  9800. function fn(e) {
  9801. // 获取配置
  9802. var config = editor.config;
  9803. var pasteFilterStyle = config.pasteFilterStyle;
  9804. var pasteIgnoreImg = config.pasteIgnoreImg;
  9805. var pasteTextHandle = config.pasteTextHandle; // 获取粘贴的文字
  9806. var pasteHtml = paste_event_1.getPasteHtml(e, pasteFilterStyle, pasteIgnoreImg);
  9807. var pasteText = paste_event_1.getPasteText(e);
  9808. pasteText = pasteText.replace(/\n/gm, '<br>'); // 当前选区所在的 DOM 节点
  9809. var $selectionElem = editor.selection.getSelectionContainerElem();
  9810. if (!$selectionElem) {
  9811. return;
  9812. }
  9813. var nodeName = $selectionElem === null || $selectionElem === void 0 ? void 0 : $selectionElem.getNodeName();
  9814. var $topElem = $selectionElem === null || $selectionElem === void 0 ? void 0 : $selectionElem.getNodeTop(editor); // 当前节点顶级可能没有
  9815. var topNodeName = '';
  9816. if ($topElem.elems[0]) {
  9817. topNodeName = $topElem === null || $topElem === void 0 ? void 0 : $topElem.getNodeName();
  9818. } // code 中只能粘贴纯文本
  9819. if (nodeName === 'CODE' || topNodeName === 'PRE') {
  9820. if (pasteTextHandle && util_1.isFunction(pasteTextHandle)) {
  9821. // 用户自定义过滤处理粘贴内容
  9822. pasteText = '' + (pasteTextHandle(pasteText) || '');
  9823. }
  9824. editor.cmd["do"]('insertHTML', formatCode(pasteText));
  9825. return;
  9826. } // 如果用户开启闭粘贴样式注释则将复制进来为url的直接转为链接 否则不转换。
  9827. // 在群中有用户提到关闭样式粘贴复制的文字进来后链接直接转为文字了,不符合预期,这里优化下
  9828. if (const_1.urlRegex.test(pasteText) && pasteFilterStyle) {
  9829. //当复制的内容为链接时,也应该判断用户是否定义了处理粘贴的事件
  9830. if (pasteTextHandle && util_1.isFunction(pasteTextHandle)) {
  9831. // 用户自定义过滤处理粘贴内容
  9832. pasteText = '' + (pasteTextHandle(pasteText) || ''); // html
  9833. } // 当复制一个链接和文本时,需要区分出文本和a链接, 如:http://www.baidu.com 搜索。 issue: #3129
  9834. // 目前也支持粘贴文案:粘贴http://www.baidu.com粘贴http://www.baidu.com,连个链接。
  9835. var resultText = pasteText.replace(const_1.urlRegex, function (link) {
  9836. return "<a href=\"" + link + "\" target=\"_blank\">" + link + "</a>";
  9837. });
  9838. var range = editor.selection.getRange(); // 文本转义问题,如果直接使用innerHTML插入html结构,地址中的特殊字符会被转义
  9839. // 先生成元素,替换里面的文本,利用insertElem插入到页面
  9840. var div = document.createElement('div');
  9841. var fragment = document.createDocumentFragment();
  9842. div.innerHTML = resultText;
  9843. if (range == null) return; // 将div里的dom结构,搬到fragment里
  9844. while (div.childNodes.length) {
  9845. fragment.append(div.childNodes[0]);
  9846. } // 修改a 链接文案,使用innerText插入文本,这样就避免了使用innerHTML时把特殊符号转义
  9847. var linkEle = fragment.querySelectorAll('a');
  9848. (0, _forEach["default"])(linkEle).call(linkEle, function (ele) {
  9849. ele.innerText = ele.href;
  9850. });
  9851. if (range.insertNode) {
  9852. range.deleteContents();
  9853. range.insertNode(fragment);
  9854. }
  9855. editor.selection.clearWindowSelectionRange();
  9856. return;
  9857. } // table 中(td、th),待开发。。。
  9858. if (!pasteHtml) {
  9859. return;
  9860. }
  9861. try {
  9862. // firefox 中,获取的 pasteHtml 可能是没有 <ul> 包裹的 <li>
  9863. // 因此执行 insertHTML 会报错
  9864. if (pasteTextHandle && util_1.isFunction(pasteTextHandle)) {
  9865. // 用户自定义过滤处理粘贴内容
  9866. pasteHtml = '' + (pasteTextHandle(pasteHtml) || ''); // html
  9867. } // 粘贴的html的是否是css的style样式
  9868. var isCssStyle = /[\.\#\@]?\w+[ ]+\{[^}]*\}/.test(pasteHtml); // eslint-disable-line
  9869. // 经过处理后还是包含暴露的css样式则直接插入它的text
  9870. if (isCssStyle && pasteFilterStyle) {
  9871. editor.cmd["do"]('insertHTML', "" + formatHtml(pasteText)); // text
  9872. } else {
  9873. var html = formatHtml(pasteHtml); // 如果是段落,为了兼容 firefox 和 chrome差异,自定义插入
  9874. if (isParagraphHtml(html)) {
  9875. var $textEl = editor.$textElem;
  9876. editor.cmd["do"]('insertHTML', html); // 全选的情况下覆盖原有内容
  9877. if ($textEl.equal($selectionElem)) {
  9878. // 更新选区
  9879. editor.selection.createEmptyRange();
  9880. return;
  9881. } // 如果选区是空段落,移除空段落
  9882. if (isEmptyParagraph($topElem)) {
  9883. $topElem.remove();
  9884. }
  9885. } else {
  9886. editor.cmd["do"]('insertHTML', html); // 如果用户从百度等网站点击复制得到的图片是一串img标签且待src的http地址
  9887. // 见 https://github.com/wangeditor-team/wangEditor/issues/3119
  9888. // 如果是走用户定义的图片上传逻辑
  9889. // const isHasOnlyImgEleReg = /^<img [^>]*src=['"]([^'"]+)[^>]*>$/g
  9890. // if (!isHasOnlyImgEleReg.test(html)) {
  9891. // editor.cmd.do('insertHTML', html)
  9892. // }
  9893. }
  9894. }
  9895. } catch (ex) {
  9896. // 此时使用 pasteText 来兼容一下
  9897. if (pasteTextHandle && util_1.isFunction(pasteTextHandle)) {
  9898. // 用户自定义过滤处理粘贴内容
  9899. pasteText = '' + (pasteTextHandle(pasteText) || '');
  9900. }
  9901. editor.cmd["do"]('insertHTML', "" + formatHtml(pasteText)); // text
  9902. }
  9903. }
  9904. pasteEvents.push(fn);
  9905. }
  9906. exports["default"] = pasteTextHtml;
  9907. /***/ }),
  9908. /* 292 */
  9909. /***/ (function(module, exports, __webpack_require__) {
  9910. "use strict";
  9911. /**
  9912. * @description 将粘贴的 html 字符串,转换为正确、简洁的 html 代码。剔除不必要的标签和属性。
  9913. * @author wangfupeng
  9914. */
  9915. var _interopRequireDefault = __webpack_require__(0);
  9916. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  9917. var _trim = _interopRequireDefault(__webpack_require__(17));
  9918. var _forEach = _interopRequireDefault(__webpack_require__(4));
  9919. var _includes = _interopRequireDefault(__webpack_require__(28));
  9920. (0, _defineProperty["default"])(exports, "__esModule", {
  9921. value: true
  9922. });
  9923. var tslib_1 = __webpack_require__(2);
  9924. var tags_1 = __webpack_require__(293);
  9925. var simplehtmlparser_js_1 = tslib_1.__importDefault(__webpack_require__(297));
  9926. /**
  9927. * 过滤掉空 span
  9928. * @param html html
  9929. */
  9930. function filterEmptySpan(html) {
  9931. var regForReplace = /<span>.*?<\/span>/gi;
  9932. var regForMatch = /<span>(.*?)<\/span>/;
  9933. return html.replace(regForReplace, function (s) {
  9934. // s 是单个 span ,如 <span>文字</span>
  9935. var result = s.match(regForMatch);
  9936. if (result == null) return '';
  9937. return result[1];
  9938. });
  9939. }
  9940. /**
  9941. * 是否忽略标签
  9942. * @param tag tag
  9943. * @param ignoreImg 是否忽略 img 标签
  9944. */
  9945. function isIgnoreTag(tag, ignoreImg) {
  9946. var _context;
  9947. tag = (0, _trim["default"])(_context = tag.toLowerCase()).call(_context); // 忽略的标签
  9948. if (tags_1.IGNORE_TAGS.has(tag)) {
  9949. return true;
  9950. } // 是否忽略图片
  9951. if (ignoreImg) {
  9952. if (tag === 'img') {
  9953. return true;
  9954. }
  9955. }
  9956. return false;
  9957. }
  9958. /**
  9959. * 为 tag 生成 html 字符串,开始部分
  9960. * @param tag tag
  9961. * @param attrs 属性
  9962. */
  9963. function genStartHtml(tag, attrs) {
  9964. var result = ''; // tag < 符号
  9965. result = "<" + tag; // 拼接属性
  9966. var attrStrArr = [];
  9967. (0, _forEach["default"])(attrs).call(attrs, function (attr) {
  9968. attrStrArr.push(attr.name + "=\"" + attr.value + "\"");
  9969. });
  9970. if (attrStrArr.length > 0) {
  9971. result = result + ' ' + attrStrArr.join(' ');
  9972. } // tag > 符号
  9973. var isEmpty = tags_1.EMPTY_TAGS.has(tag); // 没有子节点或文本的标签,如 img
  9974. result = result + (isEmpty ? '/' : '') + '>';
  9975. return result;
  9976. }
  9977. /**
  9978. * 为 tag 生成 html 字符串,结尾部分
  9979. * @param tag tag
  9980. */
  9981. function genEndHtml(tag) {
  9982. return "</" + tag + ">";
  9983. }
  9984. /**
  9985. * 处理粘贴的 html
  9986. * @param html html 字符串
  9987. * @param filterStyle 是否过滤 style 样式
  9988. * @param ignoreImg 是否忽略 img 标签
  9989. */
  9990. function parseHtml(html, filterStyle, ignoreImg) {
  9991. if (filterStyle === void 0) {
  9992. filterStyle = true;
  9993. }
  9994. if (ignoreImg === void 0) {
  9995. ignoreImg = false;
  9996. }
  9997. var resultArr = []; // 存储结果,数组形式,最后再 join
  9998. // 当前正在处理的标签,以及记录和清除的方法
  9999. var CUR_TAG = '';
  10000. function markTagStart(tag) {
  10001. tag = (0, _trim["default"])(tag).call(tag);
  10002. if (!tag) return;
  10003. if (tags_1.EMPTY_TAGS.has(tag)) return; // 内容为空的标签,如 img ,不用记录
  10004. CUR_TAG = tag;
  10005. }
  10006. function markTagEnd() {
  10007. CUR_TAG = '';
  10008. } // 能通过 'text/html' 格式获取 html
  10009. var htmlParser = new simplehtmlparser_js_1["default"]();
  10010. htmlParser.parse(html, {
  10011. startElement: function startElement(tag, attrs) {
  10012. // 首先,标记开始
  10013. markTagStart(tag); // 忽略的标签
  10014. if (isIgnoreTag(tag, ignoreImg)) {
  10015. return;
  10016. } // 找出该标签必须的属性(其他的属性忽略)
  10017. var necessaryAttrKeys = tags_1.NECESSARY_ATTRS.get(tag) || [];
  10018. var attrsForTag = [];
  10019. (0, _forEach["default"])(attrs).call(attrs, function (attr) {
  10020. // 属性名
  10021. var name = attr.name; // style 单独处理
  10022. if (name === 'style') {
  10023. // 保留 style 样式
  10024. if (!filterStyle) {
  10025. attrsForTag.push(attr);
  10026. }
  10027. return;
  10028. } // 除了 style 之外的其他属性
  10029. if ((0, _includes["default"])(necessaryAttrKeys).call(necessaryAttrKeys, name) === false) {
  10030. // 不是必须的属性,忽略
  10031. return;
  10032. }
  10033. attrsForTag.push(attr);
  10034. }); // 拼接为 HTML 标签
  10035. var html = genStartHtml(tag, attrsForTag);
  10036. resultArr.push(html);
  10037. },
  10038. characters: function characters(str) {
  10039. if (!str) {
  10040. return;
  10041. } // 忽略的标签
  10042. if (isIgnoreTag(CUR_TAG, ignoreImg)) return;
  10043. resultArr.push(str);
  10044. },
  10045. endElement: function endElement(tag) {
  10046. // 忽略的标签
  10047. if (isIgnoreTag(tag, ignoreImg)) {
  10048. return;
  10049. } // 拼接为 HTML 标签
  10050. var html = genEndHtml(tag);
  10051. resultArr.push(html); // 最后,标记结束
  10052. markTagEnd();
  10053. },
  10054. comment: function comment(str) {
  10055. /* 注释,不做处理 */
  10056. markTagStart(str);
  10057. }
  10058. });
  10059. var result = resultArr.join(''); // 转换为字符串
  10060. // 过滤掉空 span 标签
  10061. result = filterEmptySpan(result);
  10062. return result;
  10063. }
  10064. exports["default"] = parseHtml;
  10065. /***/ }),
  10066. /* 293 */
  10067. /***/ (function(module, exports, __webpack_require__) {
  10068. "use strict";
  10069. /**
  10070. * @description 粘贴相关的 tags
  10071. * @author wangfupeng
  10072. */
  10073. var _interopRequireDefault = __webpack_require__(0);
  10074. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  10075. var _set = _interopRequireDefault(__webpack_require__(132));
  10076. var _map = _interopRequireDefault(__webpack_require__(121));
  10077. (0, _defineProperty["default"])(exports, "__esModule", {
  10078. value: true
  10079. });
  10080. exports.TOP_LEVEL_TAGS = exports.EMPTY_TAGS = exports.NECESSARY_ATTRS = exports.IGNORE_TAGS = void 0; // 忽略的标签
  10081. exports.IGNORE_TAGS = new _set["default"](['doctype', '!doctype', 'html', 'head', 'meta', 'body', 'script', 'style', 'link', 'frame', 'iframe', 'title', 'svg', 'center', 'o:p']); // 指定标签必要的属性
  10082. exports.NECESSARY_ATTRS = new _map["default"]([['img', ['src', 'alt']], ['a', ['href', 'target']], ['td', ['colspan', 'rowspan']], ['th', ['colspan', 'rowspan']]]); // 没有子节点或文本的标签
  10083. exports.EMPTY_TAGS = new _set["default"](['area', 'base', 'basefont', 'br', 'col', 'hr', 'img', 'input', 'isindex', 'embed']); // 编辑区域顶级节点
  10084. exports.TOP_LEVEL_TAGS = new _set["default"](['h1', 'h2', 'h3', 'h4', 'h5', 'p', 'ul', 'ol', 'table', 'blockquote', 'pre', 'hr', 'form']);
  10085. /***/ }),
  10086. /* 294 */
  10087. /***/ (function(module, exports, __webpack_require__) {
  10088. var parent = __webpack_require__(295);
  10089. module.exports = parent;
  10090. /***/ }),
  10091. /* 295 */
  10092. /***/ (function(module, exports, __webpack_require__) {
  10093. __webpack_require__(296);
  10094. __webpack_require__(61);
  10095. __webpack_require__(50);
  10096. __webpack_require__(54);
  10097. var path = __webpack_require__(9);
  10098. module.exports = path.Set;
  10099. /***/ }),
  10100. /* 296 */
  10101. /***/ (function(module, exports, __webpack_require__) {
  10102. "use strict";
  10103. var collection = __webpack_require__(122);
  10104. var collectionStrong = __webpack_require__(124);
  10105. // `Set` constructor
  10106. // https://tc39.github.io/ecma262/#sec-set-objects
  10107. module.exports = collection('Set', function (init) {
  10108. return function Set() { return init(this, arguments.length ? arguments[0] : undefined); };
  10109. }, collectionStrong);
  10110. /***/ }),
  10111. /* 297 */
  10112. /***/ (function(module, exports) {
  10113. // Copyright 2004 Erik Arvidsson. All Rights Reserved.
  10114. //
  10115. // This code is triple licensed using Apache Software License 2.0,
  10116. // Mozilla Public License or GNU Public License
  10117. //
  10118. ///////////////////////////////////////////////////////////////////////////////
  10119. //
  10120. // Licensed under the Apache License, Version 2.0 (the "License"); you may not
  10121. // use this file except in compliance with the License. You may obtain a copy
  10122. // of the License at http://www.apache.org/licenses/LICENSE-2.0
  10123. //
  10124. ///////////////////////////////////////////////////////////////////////////////
  10125. //
  10126. // The contents of this file are subject to the Mozilla Public License
  10127. // Version 1.1 (the "License"); you may not use this file except in
  10128. // compliance with the License. You may obtain a copy of the License at
  10129. // http://www.mozilla.org/MPL/
  10130. //
  10131. // Software distributed under the License is distributed on an "AS IS"
  10132. // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
  10133. // License for the specific language governing rights and limitations
  10134. // under the License.
  10135. //
  10136. // The Original Code is Simple HTML Parser.
  10137. //
  10138. // The Initial Developer of the Original Code is Erik Arvidsson.
  10139. // Portions created by Erik Arvidssson are Copyright (C) 2004. All Rights
  10140. // Reserved.
  10141. //
  10142. ///////////////////////////////////////////////////////////////////////////////
  10143. //
  10144. // This program is free software; you can redistribute it and/or
  10145. // modify it under the terms of the GNU General Public License
  10146. // as published by the Free Software Foundation; either version 2
  10147. // of the License, or (at your option) any later version.
  10148. //
  10149. // This program is distributed in the hope that it will be useful,
  10150. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  10151. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10152. // GNU General Public License for more details.
  10153. //
  10154. // You should have received a copy of the GNU General Public License
  10155. // along with this program; if not, write to the Free Software
  10156. // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  10157. //
  10158. ///////////////////////////////////////////////////////////////////////////////
  10159. /*
  10160. var handler ={
  10161. startElement: function (sTagName, oAttrs) {},
  10162. endElement: function (sTagName) {},
  10163. characters: function (s) {},
  10164. comment: function (s) {}
  10165. };
  10166. */
  10167. function SimpleHtmlParser() {}
  10168. SimpleHtmlParser.prototype = {
  10169. handler: null,
  10170. // regexps
  10171. startTagRe: /^<([^>\s\/]+)((\s+[^=>\s]+(\s*=\s*((\"[^"]*\")|(\'[^']*\')|[^>\s]+))?)*)\s*\/?\s*>/m,
  10172. endTagRe: /^<\/([^>\s]+)[^>]*>/m,
  10173. attrRe: /([^=\s]+)(\s*=\s*((\"([^"]*)\")|(\'([^']*)\')|[^>\s]+))?/gm,
  10174. parse: function (s, oHandler) {
  10175. if (oHandler) this.contentHandler = oHandler
  10176. var i = 0
  10177. var res, lc, lm, rc, index
  10178. var treatAsChars = false
  10179. var oThis = this
  10180. while (s.length > 0) {
  10181. // Comment
  10182. if (s.substring(0, 4) == '<!--') {
  10183. index = s.indexOf('-->')
  10184. if (index != -1) {
  10185. this.contentHandler.comment(s.substring(4, index))
  10186. s = s.substring(index + 3)
  10187. treatAsChars = false
  10188. } else {
  10189. treatAsChars = true
  10190. }
  10191. }
  10192. // end tag
  10193. else if (s.substring(0, 2) == '</') {
  10194. if (this.endTagRe.test(s)) {
  10195. lc = RegExp.leftContext
  10196. lm = RegExp.lastMatch
  10197. rc = RegExp.rightContext
  10198. lm.replace(this.endTagRe, function () {
  10199. return oThis.parseEndTag.apply(oThis, arguments)
  10200. })
  10201. s = rc
  10202. treatAsChars = false
  10203. } else {
  10204. treatAsChars = true
  10205. }
  10206. }
  10207. // start tag
  10208. else if (s.charAt(0) == '<') {
  10209. if (this.startTagRe.test(s)) {
  10210. lc = RegExp.leftContext
  10211. lm = RegExp.lastMatch
  10212. rc = RegExp.rightContext
  10213. lm.replace(this.startTagRe, function () {
  10214. return oThis.parseStartTag.apply(oThis, arguments)
  10215. })
  10216. s = rc
  10217. treatAsChars = false
  10218. } else {
  10219. treatAsChars = true
  10220. }
  10221. }
  10222. if (treatAsChars) {
  10223. index = s.indexOf('<')
  10224. if (index == -1) {
  10225. this.contentHandler.characters(s)
  10226. s = ''
  10227. } else {
  10228. this.contentHandler.characters(s.substring(0, index))
  10229. s = s.substring(index)
  10230. }
  10231. }
  10232. treatAsChars = true
  10233. }
  10234. },
  10235. parseStartTag: function (sTag, sTagName, sRest) {
  10236. var attrs = this.parseAttributes(sTagName, sRest)
  10237. this.contentHandler.startElement(sTagName, attrs)
  10238. },
  10239. parseEndTag: function (sTag, sTagName) {
  10240. this.contentHandler.endElement(sTagName)
  10241. },
  10242. parseAttributes: function (sTagName, s) {
  10243. var oThis = this
  10244. var attrs = []
  10245. s.replace(this.attrRe, function (a0, a1, a2, a3, a4, a5, a6, a7) {
  10246. attrs.push(oThis.parseAttribute(sTagName, a0, a1, a2, a3, a4, a5, a6, a7))
  10247. })
  10248. return attrs
  10249. },
  10250. parseAttribute: function (sTagName, sAttribute, sName) {
  10251. var value = ''
  10252. if (arguments[7]) value = arguments[8]
  10253. else if (arguments[5]) value = arguments[6]
  10254. else if (arguments[3]) value = arguments[4]
  10255. var empty = !value && !arguments[3]
  10256. return { name: sName, value: empty ? null : value }
  10257. },
  10258. }
  10259. // export default SimpleHtmlParser
  10260. module.exports = SimpleHtmlParser
  10261. /***/ }),
  10262. /* 298 */
  10263. /***/ (function(module, exports, __webpack_require__) {
  10264. "use strict";
  10265. /**
  10266. * @description 图片点击后选区更新到img的位置
  10267. * @author tonghan
  10268. */
  10269. var _interopRequireDefault = __webpack_require__(0);
  10270. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  10271. (0, _defineProperty["default"])(exports, "__esModule", {
  10272. value: true
  10273. });
  10274. /**
  10275. * 图片点击后选区更新到img的位置
  10276. * @param editor 编辑器实例
  10277. * @param imgClickEvents delete 键 up 时的 hooks
  10278. */
  10279. function imgClickActive(editor, imgClickEvents) {
  10280. function clickFn($img) {
  10281. editor.selection.createRangeByElem($img);
  10282. editor.selection.restoreSelection();
  10283. }
  10284. imgClickEvents.push(clickFn);
  10285. }
  10286. exports["default"] = imgClickActive;
  10287. /***/ }),
  10288. /* 299 */
  10289. /***/ (function(module, exports, __webpack_require__) {
  10290. "use strict";
  10291. /**
  10292. * @description 获取子元素的 JSON 格式数据
  10293. * @author wangfupeng
  10294. */
  10295. var _interopRequireDefault = __webpack_require__(0);
  10296. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  10297. var _forEach = _interopRequireDefault(__webpack_require__(4));
  10298. (0, _defineProperty["default"])(exports, "__esModule", {
  10299. value: true
  10300. });
  10301. var tslib_1 = __webpack_require__(2);
  10302. var util_1 = __webpack_require__(6);
  10303. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  10304. /**
  10305. * 获取子元素的 JSON 格式数据
  10306. * @param $elem DOM 节点
  10307. */
  10308. function getChildrenJSON($elem) {
  10309. var result = []; // 存储结果
  10310. var $children = $elem.childNodes() || []; // 注意 childNodes() 可以获取文本节点
  10311. (0, _forEach["default"])($children).call($children, function (curElem) {
  10312. var elemResult;
  10313. var nodeType = curElem.nodeType; // 文本节点
  10314. if (nodeType === 3) {
  10315. elemResult = curElem.textContent || '';
  10316. elemResult = util_1.replaceHtmlSymbol(elemResult);
  10317. } // 普通 DOM 节点
  10318. if (nodeType === 1) {
  10319. elemResult = {};
  10320. elemResult = elemResult; // tag
  10321. elemResult.tag = curElem.nodeName.toLowerCase(); // attr
  10322. var attrData = [];
  10323. var attrList = curElem.attributes;
  10324. var attrListLength = attrList.length || 0;
  10325. for (var i = 0; i < attrListLength; i++) {
  10326. var attr = attrList[i];
  10327. attrData.push({
  10328. name: attr.name,
  10329. value: attr.value
  10330. });
  10331. }
  10332. elemResult.attrs = attrData; // children(递归)
  10333. elemResult.children = getChildrenJSON(dom_core_1["default"](curElem));
  10334. }
  10335. if (elemResult) {
  10336. result.push(elemResult);
  10337. }
  10338. });
  10339. return result;
  10340. }
  10341. exports["default"] = getChildrenJSON;
  10342. /***/ }),
  10343. /* 300 */
  10344. /***/ (function(module, exports, __webpack_require__) {
  10345. "use strict";
  10346. /**
  10347. * @description 从nodeList json格式中遍历生成dom元素
  10348. * @author zhengwenjian
  10349. */
  10350. var _interopRequireDefault = __webpack_require__(0);
  10351. var _typeof2 = _interopRequireDefault(__webpack_require__(92));
  10352. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  10353. var _forEach = _interopRequireDefault(__webpack_require__(4));
  10354. (0, _defineProperty["default"])(exports, "__esModule", {
  10355. value: true
  10356. });
  10357. var tslib_1 = __webpack_require__(2);
  10358. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  10359. function getHtmlByNodeList(nodeList, parent) {
  10360. if (parent === void 0) {
  10361. parent = document.createElement('div');
  10362. } // 设置一个父节点存储所有子节点
  10363. var root = parent; // 遍历节点JSON
  10364. (0, _forEach["default"])(nodeList).call(nodeList, function (item) {
  10365. var elem; // 当为文本节点时
  10366. if (typeof item === 'string') {
  10367. elem = document.createTextNode(item);
  10368. } // 当为普通节点时
  10369. if ((0, _typeof2["default"])(item) === 'object') {
  10370. var _context;
  10371. elem = document.createElement(item.tag);
  10372. (0, _forEach["default"])(_context = item.attrs).call(_context, function (attr) {
  10373. dom_core_1["default"](elem).attr(attr.name, attr.value);
  10374. }); // 有子节点时递归将子节点加入当前节点
  10375. if (item.children && item.children.length > 0) {
  10376. getHtmlByNodeList(item.children, elem.getRootNode());
  10377. }
  10378. }
  10379. elem && root.appendChild(elem);
  10380. });
  10381. return dom_core_1["default"](root);
  10382. }
  10383. exports["default"] = getHtmlByNodeList;
  10384. /***/ }),
  10385. /* 301 */
  10386. /***/ (function(module, exports, __webpack_require__) {
  10387. "use strict";
  10388. /**
  10389. * @description Menus 菜单栏 入口文件
  10390. * @author wangfupeng
  10391. */
  10392. var _interopRequireDefault = __webpack_require__(0);
  10393. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  10394. var _isArray = _interopRequireDefault(__webpack_require__(89));
  10395. var _filter = _interopRequireDefault(__webpack_require__(70));
  10396. var _includes = _interopRequireDefault(__webpack_require__(28));
  10397. var _keys = _interopRequireDefault(__webpack_require__(302));
  10398. var _forEach = _interopRequireDefault(__webpack_require__(4));
  10399. var _entries = _interopRequireDefault(__webpack_require__(94));
  10400. var _some = _interopRequireDefault(__webpack_require__(133));
  10401. var _setTimeout2 = _interopRequireDefault(__webpack_require__(46));
  10402. var _bind = _interopRequireDefault(__webpack_require__(57));
  10403. (0, _defineProperty["default"])(exports, "__esModule", {
  10404. value: true
  10405. });
  10406. var tslib_1 = __webpack_require__(2);
  10407. var index_1 = tslib_1.__importDefault(__webpack_require__(87));
  10408. var menu_list_1 = tslib_1.__importDefault(__webpack_require__(314));
  10409. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3)); // import { MenuActive } from './menu-constructors/Menu'
  10410. var Menus =
  10411. /** @class */
  10412. function () {
  10413. function Menus(editor) {
  10414. this.editor = editor;
  10415. this.menuList = [];
  10416. this.constructorList = menu_list_1["default"]; // 所有菜单构造函数的列表
  10417. }
  10418. /**
  10419. * 自定义添加菜单
  10420. * @param key 菜单 key ,和 editor.config.menus 对应
  10421. * @param Menu 菜单构造函数
  10422. */
  10423. Menus.prototype.extend = function (key, Menu) {
  10424. if (!Menu || typeof Menu !== 'function') return;
  10425. this.constructorList[key] = Menu;
  10426. }; // 初始化菜单
  10427. Menus.prototype.init = function () {
  10428. var _context, _context2;
  10429. var _this = this; // 从用户配置的 menus 入手,看需要初始化哪些菜单
  10430. var config = this.editor.config; // 排除exclude包含的菜单
  10431. var excludeMenus = config.excludeMenus;
  10432. if ((0, _isArray["default"])(excludeMenus) === false) excludeMenus = [];
  10433. config.menus = (0, _filter["default"])(_context = config.menus).call(_context, function (key) {
  10434. return (0, _includes["default"])(excludeMenus).call(excludeMenus, key) === false;
  10435. }); // 排除自扩展中exclude包含的菜单
  10436. var CustomMenuKeysList = (0, _keys["default"])(index_1["default"].globalCustomMenuConstructorList);
  10437. CustomMenuKeysList = (0, _filter["default"])(CustomMenuKeysList).call(CustomMenuKeysList, function (key) {
  10438. return (0, _includes["default"])(excludeMenus).call(excludeMenus, key);
  10439. });
  10440. (0, _forEach["default"])(CustomMenuKeysList).call(CustomMenuKeysList, function (key) {
  10441. delete index_1["default"].globalCustomMenuConstructorList[key];
  10442. });
  10443. (0, _forEach["default"])(_context2 = config.menus).call(_context2, function (menuKey) {
  10444. var MenuConstructor = _this.constructorList[menuKey]; // 暂用 any ,后面再替换
  10445. _this._initMenuList(menuKey, MenuConstructor);
  10446. }); // 全局注册
  10447. for (var _i = 0, _a = (0, _entries["default"])(index_1["default"].globalCustomMenuConstructorList); _i < _a.length; _i++) {
  10448. var _b = _a[_i],
  10449. menuKey = _b[0],
  10450. menuFun = _b[1];
  10451. var MenuConstructor = menuFun; // 暂用 any ,后面再替换
  10452. this._initMenuList(menuKey, MenuConstructor);
  10453. } // 渲染 DOM
  10454. this._addToToolbar();
  10455. if (config.showMenuTooltips) {
  10456. // 添加菜单栏tooltips
  10457. this._bindMenuTooltips();
  10458. }
  10459. };
  10460. /**
  10461. * 创建 menu 实例,并放到 menuList 中
  10462. * @param menuKey 菜单 key ,和 editor.config.menus 对应
  10463. * @param MenuConstructor 菜单构造函数
  10464. */
  10465. Menus.prototype._initMenuList = function (menuKey, MenuConstructor) {
  10466. var _context3;
  10467. if (MenuConstructor == null || typeof MenuConstructor !== 'function') {
  10468. // 必须是 class
  10469. return;
  10470. }
  10471. if ((0, _some["default"])(_context3 = this.menuList).call(_context3, function (menu) {
  10472. return menu.key === menuKey;
  10473. })) {
  10474. console.warn('菜单名称重复:' + menuKey);
  10475. } else {
  10476. var m = new MenuConstructor(this.editor);
  10477. m.key = menuKey;
  10478. this.menuList.push(m);
  10479. }
  10480. }; // 绑定菜单栏tooltips
  10481. Menus.prototype._bindMenuTooltips = function () {
  10482. var editor = this.editor;
  10483. var $toolbarElem = editor.$toolbarElem;
  10484. var config = editor.config; // 若isTooltipShowTop为true则伪元素为下三角,反之为上三角
  10485. var menuTooltipPosition = config.menuTooltipPosition;
  10486. var $tooltipEl = dom_core_1["default"]("<div class=\"w-e-menu-tooltip w-e-menu-tooltip-" + menuTooltipPosition + "\">\n <div class=\"w-e-menu-tooltip-item-wrapper\">\n <div></div>\n </div>\n </div>");
  10487. $tooltipEl.css('visibility', 'hidden');
  10488. $toolbarElem.append($tooltipEl); // 设置 z-index
  10489. $tooltipEl.css('z-index', editor.zIndex.get('tooltip'));
  10490. var showTimeoutId = 0; // 定时器,延时200ms显示tooltips
  10491. // 清空计时器
  10492. function clearShowTimeoutId() {
  10493. if (showTimeoutId) {
  10494. clearTimeout(showTimeoutId);
  10495. }
  10496. } // 隐藏tooltip
  10497. function hide() {
  10498. clearShowTimeoutId();
  10499. $tooltipEl.css('visibility', 'hidden');
  10500. } // 事件监听
  10501. $toolbarElem.on('mouseover', function (e) {
  10502. var target = e.target;
  10503. var $target = dom_core_1["default"](target);
  10504. var title;
  10505. var $menuEl;
  10506. if ($target.isContain($toolbarElem)) {
  10507. hide();
  10508. return;
  10509. }
  10510. if ($target.parentUntil('.w-e-droplist') != null) {
  10511. // 处于droplist中时隐藏
  10512. hide();
  10513. } else {
  10514. if ($target.attr('data-title')) {
  10515. title = $target.attr('data-title');
  10516. $menuEl = $target;
  10517. } else {
  10518. var $parent = $target.parentUntil('.w-e-menu');
  10519. if ($parent != null) {
  10520. title = $parent.attr('data-title');
  10521. $menuEl = $parent;
  10522. }
  10523. }
  10524. }
  10525. if (title && $menuEl) {
  10526. clearShowTimeoutId();
  10527. var targetOffset = $menuEl.getOffsetData();
  10528. $tooltipEl.text(editor.i18next.t('menus.title.' + title));
  10529. var tooltipOffset = $tooltipEl.getOffsetData();
  10530. var left = targetOffset.left + targetOffset.width / 2 - tooltipOffset.width / 2;
  10531. $tooltipEl.css('left', left + "px"); // 2. 高度设置
  10532. if (menuTooltipPosition === 'up') {
  10533. $tooltipEl.css('top', targetOffset.top - tooltipOffset.height - 8 + "px");
  10534. } else if (menuTooltipPosition === 'down') {
  10535. $tooltipEl.css('top', targetOffset.top + targetOffset.height + 8 + "px");
  10536. }
  10537. showTimeoutId = (0, _setTimeout2["default"])(function () {
  10538. $tooltipEl.css('visibility', 'visible');
  10539. }, 200);
  10540. } else {
  10541. hide();
  10542. }
  10543. }).on('mouseleave', function () {
  10544. hide();
  10545. });
  10546. }; // 添加到菜单栏
  10547. Menus.prototype._addToToolbar = function () {
  10548. var _context4;
  10549. var editor = this.editor;
  10550. var $toolbarElem = editor.$toolbarElem; // 遍历添加到 DOM
  10551. (0, _forEach["default"])(_context4 = this.menuList).call(_context4, function (menu) {
  10552. var $elem = menu.$elem;
  10553. if ($elem) {
  10554. $toolbarElem.append($elem);
  10555. }
  10556. });
  10557. };
  10558. /**
  10559. * 获取菜单对象
  10560. * @param 菜单名称 小写
  10561. * @return Menus 菜单对象
  10562. */
  10563. Menus.prototype.menuFind = function (key) {
  10564. var menuList = this.menuList;
  10565. for (var i = 0, l = menuList.length; i < l; i++) {
  10566. if (menuList[i].key === key) return menuList[i];
  10567. }
  10568. return menuList[0];
  10569. };
  10570. /**
  10571. * @description 修改菜单激活状态
  10572. */
  10573. Menus.prototype.changeActive = function () {
  10574. var _context5;
  10575. (0, _forEach["default"])(_context5 = this.menuList).call(_context5, function (menu) {
  10576. var _context6;
  10577. (0, _setTimeout2["default"])((0, _bind["default"])(_context6 = menu.tryChangeActive).call(_context6, menu), 100); // 暂用 any ,后面再替换
  10578. });
  10579. };
  10580. return Menus;
  10581. }();
  10582. exports["default"] = Menus;
  10583. /***/ }),
  10584. /* 302 */
  10585. /***/ (function(module, exports, __webpack_require__) {
  10586. module.exports = __webpack_require__(303);
  10587. /***/ }),
  10588. /* 303 */
  10589. /***/ (function(module, exports, __webpack_require__) {
  10590. var parent = __webpack_require__(304);
  10591. module.exports = parent;
  10592. /***/ }),
  10593. /* 304 */
  10594. /***/ (function(module, exports, __webpack_require__) {
  10595. __webpack_require__(305);
  10596. var path = __webpack_require__(9);
  10597. module.exports = path.Object.keys;
  10598. /***/ }),
  10599. /* 305 */
  10600. /***/ (function(module, exports, __webpack_require__) {
  10601. var $ = __webpack_require__(5);
  10602. var toObject = __webpack_require__(31);
  10603. var nativeKeys = __webpack_require__(52);
  10604. var fails = __webpack_require__(11);
  10605. var FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); });
  10606. // `Object.keys` method
  10607. // https://tc39.github.io/ecma262/#sec-object.keys
  10608. $({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {
  10609. keys: function keys(it) {
  10610. return nativeKeys(toObject(it));
  10611. }
  10612. });
  10613. /***/ }),
  10614. /* 306 */
  10615. /***/ (function(module, exports, __webpack_require__) {
  10616. var parent = __webpack_require__(307);
  10617. module.exports = parent;
  10618. /***/ }),
  10619. /* 307 */
  10620. /***/ (function(module, exports, __webpack_require__) {
  10621. __webpack_require__(308);
  10622. var path = __webpack_require__(9);
  10623. module.exports = path.Object.entries;
  10624. /***/ }),
  10625. /* 308 */
  10626. /***/ (function(module, exports, __webpack_require__) {
  10627. var $ = __webpack_require__(5);
  10628. var $entries = __webpack_require__(309).entries;
  10629. // `Object.entries` method
  10630. // https://tc39.github.io/ecma262/#sec-object.entries
  10631. $({ target: 'Object', stat: true }, {
  10632. entries: function entries(O) {
  10633. return $entries(O);
  10634. }
  10635. });
  10636. /***/ }),
  10637. /* 309 */
  10638. /***/ (function(module, exports, __webpack_require__) {
  10639. var DESCRIPTORS = __webpack_require__(14);
  10640. var objectKeys = __webpack_require__(52);
  10641. var toIndexedObject = __webpack_require__(30);
  10642. var propertyIsEnumerable = __webpack_require__(59).f;
  10643. // `Object.{ entries, values }` methods implementation
  10644. var createMethod = function (TO_ENTRIES) {
  10645. return function (it) {
  10646. var O = toIndexedObject(it);
  10647. var keys = objectKeys(O);
  10648. var length = keys.length;
  10649. var i = 0;
  10650. var result = [];
  10651. var key;
  10652. while (length > i) {
  10653. key = keys[i++];
  10654. if (!DESCRIPTORS || propertyIsEnumerable.call(O, key)) {
  10655. result.push(TO_ENTRIES ? [key, O[key]] : O[key]);
  10656. }
  10657. }
  10658. return result;
  10659. };
  10660. };
  10661. module.exports = {
  10662. // `Object.entries` method
  10663. // https://tc39.github.io/ecma262/#sec-object.entries
  10664. entries: createMethod(true),
  10665. // `Object.values` method
  10666. // https://tc39.github.io/ecma262/#sec-object.values
  10667. values: createMethod(false)
  10668. };
  10669. /***/ }),
  10670. /* 310 */
  10671. /***/ (function(module, exports, __webpack_require__) {
  10672. var parent = __webpack_require__(311);
  10673. module.exports = parent;
  10674. /***/ }),
  10675. /* 311 */
  10676. /***/ (function(module, exports, __webpack_require__) {
  10677. var some = __webpack_require__(312);
  10678. var ArrayPrototype = Array.prototype;
  10679. module.exports = function (it) {
  10680. var own = it.some;
  10681. return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.some) ? some : own;
  10682. };
  10683. /***/ }),
  10684. /* 312 */
  10685. /***/ (function(module, exports, __webpack_require__) {
  10686. __webpack_require__(313);
  10687. var entryVirtual = __webpack_require__(15);
  10688. module.exports = entryVirtual('Array').some;
  10689. /***/ }),
  10690. /* 313 */
  10691. /***/ (function(module, exports, __webpack_require__) {
  10692. "use strict";
  10693. var $ = __webpack_require__(5);
  10694. var $some = __webpack_require__(32).some;
  10695. var arrayMethodIsStrict = __webpack_require__(67);
  10696. var arrayMethodUsesToLength = __webpack_require__(22);
  10697. var STRICT_METHOD = arrayMethodIsStrict('some');
  10698. var USES_TO_LENGTH = arrayMethodUsesToLength('some');
  10699. // `Array.prototype.some` method
  10700. // https://tc39.github.io/ecma262/#sec-array.prototype.some
  10701. $({ target: 'Array', proto: true, forced: !STRICT_METHOD || !USES_TO_LENGTH }, {
  10702. some: function some(callbackfn /* , thisArg */) {
  10703. return $some(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
  10704. }
  10705. });
  10706. /***/ }),
  10707. /* 314 */
  10708. /***/ (function(module, exports, __webpack_require__) {
  10709. "use strict";
  10710. /**
  10711. * @description 所有菜单的构造函数
  10712. * @author wangfupeng
  10713. */
  10714. var _interopRequireDefault = __webpack_require__(0);
  10715. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  10716. (0, _defineProperty["default"])(exports, "__esModule", {
  10717. value: true
  10718. });
  10719. var tslib_1 = __webpack_require__(2);
  10720. var index_1 = tslib_1.__importDefault(__webpack_require__(315));
  10721. var index_2 = tslib_1.__importDefault(__webpack_require__(316));
  10722. var index_3 = tslib_1.__importDefault(__webpack_require__(321));
  10723. var index_4 = tslib_1.__importDefault(__webpack_require__(326));
  10724. var index_5 = tslib_1.__importDefault(__webpack_require__(327));
  10725. var index_6 = tslib_1.__importDefault(__webpack_require__(328));
  10726. var index_7 = tslib_1.__importDefault(__webpack_require__(329));
  10727. var font_size_1 = tslib_1.__importDefault(__webpack_require__(331));
  10728. var index_8 = tslib_1.__importDefault(__webpack_require__(333));
  10729. var index_9 = tslib_1.__importDefault(__webpack_require__(334));
  10730. var index_10 = tslib_1.__importDefault(__webpack_require__(337));
  10731. var index_11 = tslib_1.__importDefault(__webpack_require__(338));
  10732. var index_12 = tslib_1.__importDefault(__webpack_require__(339));
  10733. var index_13 = tslib_1.__importDefault(__webpack_require__(350));
  10734. var index_14 = tslib_1.__importDefault(__webpack_require__(365));
  10735. var index_15 = tslib_1.__importDefault(__webpack_require__(369));
  10736. var index_16 = tslib_1.__importDefault(__webpack_require__(137));
  10737. var index_17 = tslib_1.__importDefault(__webpack_require__(378));
  10738. var index_18 = tslib_1.__importDefault(__webpack_require__(380));
  10739. var index_19 = tslib_1.__importDefault(__webpack_require__(381));
  10740. var index_20 = tslib_1.__importDefault(__webpack_require__(382));
  10741. var code_1 = tslib_1.__importDefault(__webpack_require__(401));
  10742. var index_21 = tslib_1.__importDefault(__webpack_require__(406));
  10743. var todo_1 = tslib_1.__importDefault(__webpack_require__(409));
  10744. exports["default"] = {
  10745. bold: index_1["default"],
  10746. head: index_2["default"],
  10747. italic: index_4["default"],
  10748. link: index_3["default"],
  10749. underline: index_5["default"],
  10750. strikeThrough: index_6["default"],
  10751. fontName: index_7["default"],
  10752. fontSize: font_size_1["default"],
  10753. justify: index_8["default"],
  10754. quote: index_9["default"],
  10755. backColor: index_10["default"],
  10756. foreColor: index_11["default"],
  10757. video: index_12["default"],
  10758. image: index_13["default"],
  10759. indent: index_14["default"],
  10760. emoticon: index_15["default"],
  10761. list: index_16["default"],
  10762. lineHeight: index_17["default"],
  10763. undo: index_18["default"],
  10764. redo: index_19["default"],
  10765. table: index_20["default"],
  10766. code: code_1["default"],
  10767. splitLine: index_21["default"],
  10768. todo: todo_1["default"]
  10769. };
  10770. /***/ }),
  10771. /* 315 */
  10772. /***/ (function(module, exports, __webpack_require__) {
  10773. "use strict";
  10774. /**
  10775. * @description 加粗
  10776. * @author wangfupeng
  10777. */
  10778. var _interopRequireDefault = __webpack_require__(0);
  10779. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  10780. (0, _defineProperty["default"])(exports, "__esModule", {
  10781. value: true
  10782. });
  10783. var tslib_1 = __webpack_require__(2);
  10784. var BtnMenu_1 = tslib_1.__importDefault(__webpack_require__(23));
  10785. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  10786. var Bold =
  10787. /** @class */
  10788. function (_super) {
  10789. tslib_1.__extends(Bold, _super);
  10790. function Bold(editor) {
  10791. var _this = this;
  10792. var $elem = dom_core_1["default"]("<div class=\"w-e-menu\" data-title=\"\u52A0\u7C97\">\n <i class=\"w-e-icon-bold\"></i>\n </div>");
  10793. _this = _super.call(this, $elem, editor) || this;
  10794. return _this;
  10795. }
  10796. /**
  10797. * 点击事件
  10798. */
  10799. Bold.prototype.clickHandler = function () {
  10800. var editor = this.editor;
  10801. var isSelectEmpty = editor.selection.isSelectionEmpty();
  10802. if (isSelectEmpty) {
  10803. // 选区范围是空的,插入并选中一个“空白”
  10804. editor.selection.createEmptyRange();
  10805. } // 执行 bold 命令
  10806. editor.cmd["do"]('bold');
  10807. if (isSelectEmpty) {
  10808. // 需要将选区范围折叠起来
  10809. editor.selection.collapseRange();
  10810. editor.selection.restoreSelection();
  10811. }
  10812. };
  10813. /**
  10814. * 尝试修改菜单激活状态
  10815. */
  10816. Bold.prototype.tryChangeActive = function () {
  10817. var editor = this.editor;
  10818. if (editor.cmd.queryCommandState('bold')) {
  10819. this.active();
  10820. } else {
  10821. this.unActive();
  10822. }
  10823. };
  10824. return Bold;
  10825. }(BtnMenu_1["default"]);
  10826. exports["default"] = Bold;
  10827. /***/ }),
  10828. /* 316 */
  10829. /***/ (function(module, exports, __webpack_require__) {
  10830. "use strict";
  10831. /**
  10832. * @description 标题
  10833. * @author wangfupeng
  10834. */
  10835. var _interopRequireDefault = __webpack_require__(0);
  10836. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  10837. var _indexOf = _interopRequireDefault(__webpack_require__(27));
  10838. var _find = _interopRequireDefault(__webpack_require__(29));
  10839. var _forEach = _interopRequireDefault(__webpack_require__(4));
  10840. var _stringify = _interopRequireDefault(__webpack_require__(317));
  10841. var _includes = _interopRequireDefault(__webpack_require__(28));
  10842. (0, _defineProperty["default"])(exports, "__esModule", {
  10843. value: true
  10844. });
  10845. var tslib_1 = __webpack_require__(2);
  10846. var DropListMenu_1 = tslib_1.__importDefault(__webpack_require__(24));
  10847. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  10848. var util_1 = __webpack_require__(6);
  10849. var const_1 = __webpack_require__(7);
  10850. var Head =
  10851. /** @class */
  10852. function (_super) {
  10853. tslib_1.__extends(Head, _super);
  10854. function Head(editor) {
  10855. var _this = this;
  10856. var $elem = dom_core_1["default"]('<div class="w-e-menu" data-title="标题"><i class="w-e-icon-header"></i></div>');
  10857. var dropListConf = {
  10858. width: 100,
  10859. title: '设置标题',
  10860. type: 'list',
  10861. list: [{
  10862. $elem: dom_core_1["default"]('<h1>H1</h1>'),
  10863. value: '<h1>'
  10864. }, {
  10865. $elem: dom_core_1["default"]('<h2>H2</h2>'),
  10866. value: '<h2>'
  10867. }, {
  10868. $elem: dom_core_1["default"]('<h3>H3</h3>'),
  10869. value: '<h3>'
  10870. }, {
  10871. $elem: dom_core_1["default"]('<h4>H4</h4>'),
  10872. value: '<h4>'
  10873. }, {
  10874. $elem: dom_core_1["default"]('<h5>H5</h5>'),
  10875. value: '<h5>'
  10876. }, {
  10877. $elem: dom_core_1["default"]("<p>" + editor.i18next.t('menus.dropListMenu.head.正文') + "</p>"),
  10878. value: '<p>'
  10879. }],
  10880. clickHandler: function clickHandler(value) {
  10881. // 注意 this 是指向当前的 Head 对象
  10882. _this.command(value);
  10883. }
  10884. };
  10885. _this = _super.call(this, $elem, editor, dropListConf) || this;
  10886. var onCatalogChange = editor.config.onCatalogChange; // 未配置目录change监听回调时不运行下面操作
  10887. if (onCatalogChange) {
  10888. _this.oldCatalogs = [];
  10889. _this.addListenerCatalog(); // 监听文本框编辑时的大纲信息
  10890. _this.getCatalogs(); // 初始有值的情况获取一遍大纲信息
  10891. }
  10892. return _this;
  10893. }
  10894. /**
  10895. * 执行命令
  10896. * @param value value
  10897. */
  10898. Head.prototype.command = function (value) {
  10899. var editor = this.editor;
  10900. var $selectionElem = editor.selection.getSelectionContainerElem();
  10901. if ($selectionElem && editor.$textElem.equal($selectionElem)) {
  10902. // 不能选中多行来设置标题,否则会出现问题
  10903. // 例如选中的是 <p>xxx</p><p>yyy</p> 来设置标题,设置之后会成为 <h1>xxx<br>yyy</h1> 不符合预期
  10904. this.setMultilineHead(value);
  10905. } else {
  10906. var _context;
  10907. // 选中内容包含序列,code,表格,分割线时不处理
  10908. if ((0, _indexOf["default"])(_context = ['OL', 'UL', 'LI', 'TABLE', 'TH', 'TR', 'CODE', 'HR']).call(_context, dom_core_1["default"]($selectionElem).getNodeName()) > -1) {
  10909. return;
  10910. }
  10911. editor.cmd["do"]('formatBlock', value);
  10912. } // 标题设置成功且不是<p>正文标签就配置大纲id
  10913. value !== '<p>' && this.addUidForSelectionElem();
  10914. };
  10915. /**
  10916. * 为标题设置大纲
  10917. */
  10918. Head.prototype.addUidForSelectionElem = function () {
  10919. var editor = this.editor;
  10920. var tag = editor.selection.getSelectionContainerElem();
  10921. var id = util_1.getRandomCode(); // 默认五位数id
  10922. dom_core_1["default"](tag).attr('id', id);
  10923. };
  10924. /**
  10925. * 监听change事件来返回大纲信息
  10926. */
  10927. Head.prototype.addListenerCatalog = function () {
  10928. var _this = this;
  10929. var editor = this.editor;
  10930. editor.txt.eventHooks.changeEvents.push(function () {
  10931. _this.getCatalogs();
  10932. });
  10933. };
  10934. /**
  10935. * 获取大纲数组
  10936. */
  10937. Head.prototype.getCatalogs = function () {
  10938. var editor = this.editor;
  10939. var $textElem = this.editor.$textElem;
  10940. var onCatalogChange = editor.config.onCatalogChange;
  10941. var elems = (0, _find["default"])($textElem).call($textElem, 'h1,h2,h3,h4,h5');
  10942. var catalogs = [];
  10943. (0, _forEach["default"])(elems).call(elems, function (elem, index) {
  10944. var $elem = dom_core_1["default"](elem);
  10945. var id = $elem.attr('id');
  10946. var tag = $elem.getNodeName();
  10947. var text = $elem.text();
  10948. if (!id) {
  10949. id = util_1.getRandomCode();
  10950. $elem.attr('id', id);
  10951. } // 标题为空的情况不生成目录
  10952. if (!text) return;
  10953. catalogs.push({
  10954. tag: tag,
  10955. id: id,
  10956. text: text
  10957. });
  10958. }); // 旧目录和新目录对比是否相等,不相等则运行回调并保存新目录到旧目录变量,以方便下一次对比
  10959. if ((0, _stringify["default"])(this.oldCatalogs) !== (0, _stringify["default"])(catalogs)) {
  10960. this.oldCatalogs = catalogs;
  10961. onCatalogChange && onCatalogChange(catalogs);
  10962. }
  10963. };
  10964. /**
  10965. * 设置选中的多行标题
  10966. * @param value 需要执行的命令值
  10967. */
  10968. Head.prototype.setMultilineHead = function (value) {
  10969. var _this = this;
  10970. var _a, _b;
  10971. var editor = this.editor;
  10972. var $selection = editor.selection; // 初始选区的父节点
  10973. var containerElem = (_a = $selection.getSelectionContainerElem()) === null || _a === void 0 ? void 0 : _a.elems[0]; // 白名单:用户选区里如果有该元素则不进行转换
  10974. var _WHITE_LIST = ['IMG', 'VIDEO', 'TABLE', 'TH', 'TR', 'UL', 'OL', 'PRE', 'HR', 'BLOCKQUOTE']; // 获取选中的首、尾元素
  10975. var startElem = dom_core_1["default"]($selection.getSelectionStartElem());
  10976. var endElem = dom_core_1["default"]($selection.getSelectionEndElem()); // 判断用户选中元素是否为最后一个空元素,如果是将endElem指向上一个元素
  10977. if (endElem.elems[0].outerHTML === dom_core_1["default"](const_1.EMPTY_P).elems[0].outerHTML && !endElem.elems[0].nextSibling) {
  10978. endElem = endElem.prev();
  10979. } // 存放选中的所有元素
  10980. var cacheDomList = [];
  10981. cacheDomList.push(startElem.getNodeTop(editor)); // 选中首尾元素在父级下的坐标
  10982. var indexList = []; // 选区共同祖先元素的所有子节点
  10983. var childList = (_b = $selection.getRange()) === null || _b === void 0 ? void 0 : _b.commonAncestorContainer.childNodes; // 找到选区的首尾元素的下标,方便最后恢复选区
  10984. childList === null || childList === void 0 ? void 0 : (0, _forEach["default"])(childList).call(childList, function (item, index) {
  10985. if (item === cacheDomList[0].getNode()) {
  10986. indexList.push(index);
  10987. }
  10988. if (item === endElem.getNodeTop(editor).getNode()) {
  10989. indexList.push(index);
  10990. }
  10991. }); // 找到首尾元素中间所包含的所有dom
  10992. var i = 0; // 数组中的当前元素不等于选区最后一个节点时循环寻找中间节点
  10993. while (cacheDomList[i].getNode() !== endElem.getNodeTop(editor).getNode()) {
  10994. // 严谨性判断,是否元素为空
  10995. if (!cacheDomList[i].elems[0]) return;
  10996. var d = dom_core_1["default"](cacheDomList[i].next().getNode());
  10997. cacheDomList.push(d);
  10998. i++;
  10999. } // 将选区内的所有子节点进行遍历生成对应的标签
  11000. cacheDomList === null || cacheDomList === void 0 ? void 0 : (0, _forEach["default"])(cacheDomList).call(cacheDomList, function (_node, index) {
  11001. // 判断元素是否含有白名单内的标签元素
  11002. if (!_this.hasTag(_node, _WHITE_LIST)) {
  11003. var $h = dom_core_1["default"](value);
  11004. var $parentNode = _node.parent().getNode(); // 设置标签内容
  11005. $h.html("" + _node.html()); // 插入生成的新标签
  11006. $parentNode.insertBefore($h.getNode(), _node.getNode()); // 移除原有的标签
  11007. _node.remove();
  11008. }
  11009. }); // 重新设置选区起始位置,保留拖蓝区域
  11010. $selection.createRangeByElems(containerElem.children[indexList[0]], containerElem.children[indexList[1]]);
  11011. };
  11012. /**
  11013. * 是否含有某元素
  11014. * @param elem 需要检查的元素
  11015. * @param whiteList 白名单
  11016. */
  11017. Head.prototype.hasTag = function (elem, whiteList) {
  11018. var _this = this;
  11019. var _a;
  11020. if (!elem) return false;
  11021. if ((0, _includes["default"])(whiteList).call(whiteList, elem === null || elem === void 0 ? void 0 : elem.getNodeName())) return true;
  11022. var _flag = false;
  11023. (_a = elem.children()) === null || _a === void 0 ? void 0 : (0, _forEach["default"])(_a).call(_a, function (child) {
  11024. _flag = _this.hasTag(dom_core_1["default"](child), whiteList);
  11025. });
  11026. return _flag;
  11027. };
  11028. /**
  11029. * 尝试改变菜单激活(高亮)状态
  11030. */
  11031. Head.prototype.tryChangeActive = function () {
  11032. var editor = this.editor;
  11033. var reg = /^h/i;
  11034. var cmdValue = editor.cmd.queryCommandValue('formatBlock');
  11035. if (reg.test(cmdValue)) {
  11036. this.active();
  11037. } else {
  11038. this.unActive();
  11039. }
  11040. };
  11041. return Head;
  11042. }(DropListMenu_1["default"]);
  11043. exports["default"] = Head;
  11044. /***/ }),
  11045. /* 317 */
  11046. /***/ (function(module, exports, __webpack_require__) {
  11047. module.exports = __webpack_require__(318);
  11048. /***/ }),
  11049. /* 318 */
  11050. /***/ (function(module, exports, __webpack_require__) {
  11051. var parent = __webpack_require__(319);
  11052. module.exports = parent;
  11053. /***/ }),
  11054. /* 319 */
  11055. /***/ (function(module, exports, __webpack_require__) {
  11056. __webpack_require__(320);
  11057. var core = __webpack_require__(9);
  11058. if (!core.JSON) core.JSON = { stringify: JSON.stringify };
  11059. // eslint-disable-next-line no-unused-vars
  11060. module.exports = function stringify(it, replacer, space) {
  11061. return core.JSON.stringify.apply(null, arguments);
  11062. };
  11063. /***/ }),
  11064. /* 320 */
  11065. /***/ (function(module, exports, __webpack_require__) {
  11066. var $ = __webpack_require__(5);
  11067. var getBuiltIn = __webpack_require__(36);
  11068. var fails = __webpack_require__(11);
  11069. var $stringify = getBuiltIn('JSON', 'stringify');
  11070. var re = /[\uD800-\uDFFF]/g;
  11071. var low = /^[\uD800-\uDBFF]$/;
  11072. var hi = /^[\uDC00-\uDFFF]$/;
  11073. var fix = function (match, offset, string) {
  11074. var prev = string.charAt(offset - 1);
  11075. var next = string.charAt(offset + 1);
  11076. if ((low.test(match) && !hi.test(next)) || (hi.test(match) && !low.test(prev))) {
  11077. return '\\u' + match.charCodeAt(0).toString(16);
  11078. } return match;
  11079. };
  11080. var FORCED = fails(function () {
  11081. return $stringify('\uDF06\uD834') !== '"\\udf06\\ud834"'
  11082. || $stringify('\uDEAD') !== '"\\udead"';
  11083. });
  11084. if ($stringify) {
  11085. // https://github.com/tc39/proposal-well-formed-stringify
  11086. $({ target: 'JSON', stat: true, forced: FORCED }, {
  11087. // eslint-disable-next-line no-unused-vars
  11088. stringify: function stringify(it, replacer, space) {
  11089. var result = $stringify.apply(null, arguments);
  11090. return typeof result == 'string' ? result.replace(re, fix) : result;
  11091. }
  11092. });
  11093. }
  11094. /***/ }),
  11095. /* 321 */
  11096. /***/ (function(module, exports, __webpack_require__) {
  11097. "use strict";
  11098. /**
  11099. * @description 链接 菜单
  11100. * @author wangfupeng
  11101. */
  11102. var _interopRequireDefault = __webpack_require__(0);
  11103. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  11104. var _trim = _interopRequireDefault(__webpack_require__(17));
  11105. (0, _defineProperty["default"])(exports, "__esModule", {
  11106. value: true
  11107. });
  11108. var tslib_1 = __webpack_require__(2);
  11109. var PanelMenu_1 = tslib_1.__importDefault(__webpack_require__(38));
  11110. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  11111. var create_panel_conf_1 = tslib_1.__importDefault(__webpack_require__(322));
  11112. var is_active_1 = tslib_1.__importStar(__webpack_require__(96));
  11113. var Panel_1 = tslib_1.__importDefault(__webpack_require__(33));
  11114. var index_1 = tslib_1.__importDefault(__webpack_require__(324));
  11115. var const_1 = __webpack_require__(7);
  11116. var Link =
  11117. /** @class */
  11118. function (_super) {
  11119. tslib_1.__extends(Link, _super);
  11120. function Link(editor) {
  11121. var _this = this;
  11122. var $elem = dom_core_1["default"]('<div class="w-e-menu" data-title="链接"><i class="w-e-icon-link"></i></div>');
  11123. _this = _super.call(this, $elem, editor) || this; // 绑定事件,如点击链接时,可以查看链接
  11124. index_1["default"](editor);
  11125. return _this;
  11126. }
  11127. /**
  11128. * 菜单点击事件
  11129. */
  11130. Link.prototype.clickHandler = function () {
  11131. var editor = this.editor;
  11132. var $linkElem;
  11133. /**
  11134. @author:Gavin
  11135. @description
  11136. 解决当全选删除编辑区内容时,点击链接没反应的问题(因为选区有问题)
  11137. **/
  11138. var $selectionElem = editor.selection.getSelectionContainerElem();
  11139. var $textElem = editor.$textElem;
  11140. var html = $textElem.html();
  11141. var $txtHtml = (0, _trim["default"])(html).call(html);
  11142. if ($txtHtml === const_1.EMPTY_P) {
  11143. var $emptyChild = $textElem.children(); // 调整选区
  11144. editor.selection.createRangeByElem($emptyChild, true, true); // 重新获取选区
  11145. $selectionElem = editor.selection.getSelectionContainerElem();
  11146. } // 判断是否是多行 多行则退出 否则会出现问题
  11147. if ($selectionElem && editor.$textElem.equal($selectionElem)) {
  11148. return;
  11149. }
  11150. if (this.isActive) {
  11151. var text = '';
  11152. var href = ''; // 菜单被激活,说明选区在链接里
  11153. $linkElem = editor.selection.getSelectionContainerElem();
  11154. if (!$linkElem) {
  11155. return;
  11156. }
  11157. if ($linkElem.getNodeName() !== 'A') {
  11158. var parentNodeA = is_active_1.getParentNodeA($linkElem);
  11159. $linkElem = dom_core_1["default"](parentNodeA);
  11160. }
  11161. text = $linkElem.elems[0].innerText;
  11162. href = $linkElem.attr('href'); // 弹出 panel
  11163. this.createPanel(text, href);
  11164. } else {
  11165. // 菜单未被激活,说明选区不在链接里
  11166. if (editor.selection.isSelectionEmpty()) {
  11167. // 选区是空的,未选中内容
  11168. this.createPanel('', '');
  11169. } else {
  11170. // 选中内容了
  11171. this.createPanel(editor.selection.getSelectionText(), '');
  11172. }
  11173. }
  11174. };
  11175. /**
  11176. * 创建 panel
  11177. * @param text 文本
  11178. * @param link 链接
  11179. */
  11180. Link.prototype.createPanel = function (text, link) {
  11181. var conf = create_panel_conf_1["default"](this.editor, text, link);
  11182. var panel = new Panel_1["default"](this, conf);
  11183. panel.create();
  11184. };
  11185. /**
  11186. * 尝试修改菜单 active 状态
  11187. */
  11188. Link.prototype.tryChangeActive = function () {
  11189. var editor = this.editor;
  11190. if (is_active_1["default"](editor)) {
  11191. this.active();
  11192. } else {
  11193. this.unActive();
  11194. }
  11195. };
  11196. return Link;
  11197. }(PanelMenu_1["default"]);
  11198. exports["default"] = Link;
  11199. /***/ }),
  11200. /* 322 */
  11201. /***/ (function(module, exports, __webpack_require__) {
  11202. "use strict";
  11203. /**
  11204. * @description link 菜单 panel tab 配置
  11205. * @author wangfupeng
  11206. */
  11207. var _interopRequireDefault = __webpack_require__(0);
  11208. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  11209. var _includes = _interopRequireDefault(__webpack_require__(28));
  11210. var _trim = _interopRequireDefault(__webpack_require__(17));
  11211. var _find = _interopRequireDefault(__webpack_require__(29));
  11212. (0, _defineProperty["default"])(exports, "__esModule", {
  11213. value: true
  11214. });
  11215. var tslib_1 = __webpack_require__(2);
  11216. var util_1 = __webpack_require__(6);
  11217. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  11218. var is_active_1 = tslib_1.__importStar(__webpack_require__(96));
  11219. var util_2 = __webpack_require__(323);
  11220. function default_1(editor, text, link) {
  11221. // panel 中需要用到的id
  11222. var inputLinkId = util_1.getRandom('input-link');
  11223. var inputTextId = util_1.getRandom('input-text');
  11224. var btnOkId = util_1.getRandom('btn-ok');
  11225. var btnDelId = util_1.getRandom('btn-del'); // 是否显示“取消链接”
  11226. var delBtnDisplay = is_active_1["default"](editor) ? 'inline-block' : 'none';
  11227. var $selectedLink;
  11228. /**
  11229. * 选中整个链接元素
  11230. */
  11231. function selectLinkElem() {
  11232. if (!is_active_1["default"](editor)) return;
  11233. var $linkElem = editor.selection.getSelectionContainerElem();
  11234. if (!$linkElem) return;
  11235. editor.selection.createRangeByElem($linkElem);
  11236. editor.selection.restoreSelection();
  11237. $selectedLink = $linkElem; // 赋值给函数内全局变量
  11238. }
  11239. /**
  11240. * 插入链接
  11241. * @param text 文字
  11242. * @param link 链接
  11243. */
  11244. function insertLink(text, link) {
  11245. // fix: 修复列表下无法设置超链接的问题(替换选中文字中的标签)
  11246. // const TagRegExp = new RegExp(/(<\/?ul>)|(<\/?li>)|(<\/?ol>)/g)
  11247. // const resultText = text.replace(TagRegExp, '')
  11248. /**
  11249. * fix: 插入链接后再修改链接地址问题,会导致页面链接有问题
  11250. *
  11251. * 同上,列表无法插入链接的原因,是因为在insertLink, 处理text时有问题。
  11252. */
  11253. var resultText = text.replace(/</g, '&lt;').replace(/>/g, '&gt;'); // Link xss
  11254. var $elem = dom_core_1["default"]("<a target=\"_blank\">" + resultText + "</a>");
  11255. var linkDom = $elem.elems[0]; // fix: 字符转义问题,https://xxx.org?bar=1&macro=2 => https://xxx.org?bar=1¯o=2
  11256. linkDom.innerText = text; // 避免拼接字符串,带来的字符串嵌套问题:如: <a href=""><img src=1 xx />"> 造成xss攻击
  11257. linkDom.href = link;
  11258. if (is_active_1["default"](editor)) {
  11259. // 选区处于链接中,则选中整个菜单,再执行 insertHTML
  11260. selectLinkElem();
  11261. editor.cmd["do"]('insertElem', $elem);
  11262. } else {
  11263. // 选区未处于链接中,直接插入即可
  11264. editor.cmd["do"]('insertElem', $elem);
  11265. }
  11266. }
  11267. /**
  11268. * 取消链接
  11269. */
  11270. function delLink() {
  11271. if (!is_active_1["default"](editor)) {
  11272. return;
  11273. } // 选中整个链接
  11274. selectLinkElem();
  11275. /**
  11276. * 替换链接
  11277. *
  11278. * 两种情况
  11279. * 1. 特殊标签里嵌套a,也要保留特殊标签:<b><a></a></b> 先加粗后添加链接
  11280. * 2. a标签里面可能会含有其他元素如:b, i等,要保留: <a><b></b></a> 先添加链接后加粗
  11281. */
  11282. if ($selectedLink.getNodeName() === 'A') {
  11283. var _context;
  11284. var linkElem = $selectedLink.elems[0];
  11285. var linkParentNode = linkElem.parentElement; // 判断父级元素是不是特殊元素
  11286. if (linkParentNode && (0, _includes["default"])(_context = is_active_1.EXTRA_TAG).call(_context, linkParentNode.nodeName)) {
  11287. // 将特殊元素的内容设置为a标签的内容
  11288. linkParentNode.innerHTML = linkElem.innerHTML;
  11289. } else {
  11290. // 如果父级不是特殊元素,直接设置内容
  11291. editor.cmd["do"]('insertHTML', '<span>' + linkElem.innerHTML + '</span>');
  11292. }
  11293. } else {
  11294. // 如果链接上选区是特殊元素,需要获取最近的a标签,获取html结果,以保留特殊元素
  11295. var parentNodeA = is_active_1.getParentNodeA($selectedLink);
  11296. var selectionContent = parentNodeA.innerHTML;
  11297. editor.cmd["do"]('insertHTML', '<span>' + selectionContent + '</span>');
  11298. }
  11299. }
  11300. /**
  11301. * 校验链接是否合法
  11302. * @param link 链接
  11303. */
  11304. function checkLink(text, link) {
  11305. //查看开发者自定义配置的返回值
  11306. var check = editor.config.linkCheck(text, link);
  11307. if (check === undefined) {//用户未能通过开发者的校验,且开发者不希望编辑器提示用户
  11308. } else if (check === true) {
  11309. //用户通过了开发者的校验
  11310. return true;
  11311. } else {
  11312. //用户未能通过开发者的校验,开发者希望我们提示这一字符串
  11313. editor.config.customAlert(check, 'warning');
  11314. }
  11315. return false;
  11316. }
  11317. var conf = {
  11318. width: 300,
  11319. height: 0,
  11320. // 拼接字符串的:xss 攻击:
  11321. // 如值为:"><img src=1 onerror=alert(/xss/)>, 插入后:value=""><img src=1 onerror=alert(/xss/)>", 插入一个img元素
  11322. // panel 中可包含多个 tab
  11323. tabs: [{
  11324. // tab 的标题
  11325. title: editor.i18next.t('menus.panelMenus.link.链接'),
  11326. // 模板
  11327. tpl: "<div>\n <input\n id=\"" + inputTextId + "\"\n type=\"text\"\n class=\"block\"\n placeholder=\"" + editor.i18next.t('menus.panelMenus.link.链接文字') + "\"/>\n </td>\n <input\n id=\"" + inputLinkId + "\"\n type=\"text\"\n class=\"block\"\n placeholder=\"" + editor.i18next.t('如') + " https://...\"/>\n </td>\n <div class=\"w-e-button-container\">\n <button type=\"button\" id=\"" + btnOkId + "\" class=\"right\">\n " + editor.i18next.t('插入') + "\n </button>\n <button type=\"button\" id=\"" + btnDelId + "\" class=\"gray right\" style=\"display:" + delBtnDisplay + "\">\n " + editor.i18next.t('menus.panelMenus.link.取消链接') + "\n </button>\n </div>\n </div>",
  11328. // 事件绑定
  11329. events: [// 插入链接
  11330. {
  11331. selector: '#' + btnOkId,
  11332. type: 'click',
  11333. fn: function fn() {
  11334. var _context2, _context3, _context4;
  11335. var _a, _b; // 获取链接区间的顶层元素
  11336. var $selectionContainerElem = editor.selection.getSelectionContainerElem();
  11337. var $elem = $selectionContainerElem === null || $selectionContainerElem === void 0 ? void 0 : $selectionContainerElem.elems[0]; // 获取选取
  11338. editor.selection.restoreSelection();
  11339. var topNode = editor.selection.getSelectionRangeTopNodes()[0].getNode();
  11340. var selection = window.getSelection(); // 执行插入链接
  11341. var $link = dom_core_1["default"]('#' + inputLinkId);
  11342. var $text = dom_core_1["default"]('#' + inputTextId);
  11343. var link = (0, _trim["default"])(_context2 = $link.val()).call(_context2);
  11344. var text = (0, _trim["default"])(_context3 = $text.val()).call(_context3);
  11345. var html = '';
  11346. if (selection && !(selection === null || selection === void 0 ? void 0 : selection.isCollapsed)) {
  11347. html = (_a = util_2.insertHtml(selection, topNode)) === null || _a === void 0 ? void 0 : (0, _trim["default"])(_a).call(_a);
  11348. } // 去除html的tag标签
  11349. var htmlText = html === null || html === void 0 ? void 0 : html.replace(/<.*?>/g, '');
  11350. var htmlTextLen = (_b = htmlText === null || htmlText === void 0 ? void 0 : htmlText.length) !== null && _b !== void 0 ? _b : 0; // 当input中的text的长度大于等于选区的文字时
  11351. // 需要判断两者相同的长度的text内容是否相同
  11352. // 相同则只需把多余的部分添加上去即可,否则使用input中的内容
  11353. if (htmlTextLen <= text.length) {
  11354. var startText = text.substring(0, htmlTextLen);
  11355. var endText = text.substring(htmlTextLen);
  11356. if (htmlText === startText) {
  11357. text = htmlText + endText;
  11358. }
  11359. } // 链接为空,则不插入
  11360. if (!link) return; // 文本为空,则用链接代替
  11361. if (!text) text = link; // 校验链接是否满足用户的规则,若不满足则不插入
  11362. if (!checkLink(text, link)) return;
  11363. /**
  11364. * 插入链接
  11365. * 1、针对首次插入链接,利用选区插入a标签即可
  11366. * 1、针对:<a><b>xxxx</b></a> 情况,用户操作修改或者替换链接时,编辑得到a,修改已有a标签的href
  11367. * 2、针对:<b><a>xxxx</a></b> 情况, 用户操作修改或者替换链接时,只要修改已有a标签的href
  11368. */
  11369. // 选区范围是a标签,直接替换href链接即可
  11370. if (($elem === null || $elem === void 0 ? void 0 : $elem.nodeName) === 'A') {
  11371. $elem.setAttribute('href', link);
  11372. $elem.innerText = text;
  11373. return true;
  11374. } // 不是a标签,并且为特殊元素, 需要检查是不是首次设置链接,还是已经设置过链接。
  11375. if (($elem === null || $elem === void 0 ? void 0 : $elem.nodeName) !== 'A' && (0, _includes["default"])(_context4 = is_active_1.EXTRA_TAG).call(_context4, $elem.nodeName)) {
  11376. var nodeA = is_active_1.getParentNodeA($selectionContainerElem); // 防止第一次设置就为特殊元素,这种情况应该为首次设置链接
  11377. if (nodeA) {
  11378. // 链接设置a
  11379. nodeA.setAttribute('href', link); // 文案还是要设置刚开始的元素内的文字,比如加粗的元素,不然会将加粗替代
  11380. $elem.innerText = text;
  11381. return true;
  11382. }
  11383. } // 首次插入链接
  11384. insertLink(text, link); // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭
  11385. return true;
  11386. },
  11387. bindEnter: true
  11388. }, // 取消链接
  11389. {
  11390. selector: '#' + btnDelId,
  11391. type: 'click',
  11392. fn: function fn() {
  11393. // 执行取消链接
  11394. delLink(); // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭
  11395. return true;
  11396. }
  11397. }]
  11398. }],
  11399. /**
  11400. * 设置input的值,分别为文案和链接地址设置值
  11401. *
  11402. * 利用dom 设置链接文案的值,防止回填拼接引号问题, 出现xss攻击
  11403. *
  11404. * @param $container 对应上面生成的dom容器
  11405. * @param type text | link
  11406. */
  11407. setLinkValue: function setLinkValue($container, type) {
  11408. var inputId = '';
  11409. var inputValue = '';
  11410. var inputDom; // 设置链接文案
  11411. if (type === 'text') {
  11412. inputId = "#" + inputTextId;
  11413. inputValue = text;
  11414. } // 这只链接地址
  11415. if (type === 'link') {
  11416. inputId = "#" + inputLinkId;
  11417. inputValue = link;
  11418. }
  11419. inputDom = (0, _find["default"])($container).call($container, inputId).elems[0];
  11420. inputDom.value = inputValue;
  11421. }
  11422. };
  11423. return conf;
  11424. }
  11425. exports["default"] = default_1;
  11426. /***/ }),
  11427. /* 323 */
  11428. /***/ (function(module, exports, __webpack_require__) {
  11429. "use strict";
  11430. var _interopRequireDefault = __webpack_require__(0);
  11431. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  11432. var _forEach = _interopRequireDefault(__webpack_require__(4));
  11433. (0, _defineProperty["default"])(exports, "__esModule", {
  11434. value: true
  11435. });
  11436. exports.insertHtml = exports.createPartHtml = exports.makeHtmlString = exports.getTopNode = void 0;
  11437. /**
  11438. * 获取除了包裹在整行区域的顶级Node
  11439. * @param node 最外层node下的某个childNode
  11440. * @param topText 最外层node中文本内容
  11441. */
  11442. function getTopNode(node, topText) {
  11443. var pointerNode = node;
  11444. var topNode = node;
  11445. do {
  11446. if (pointerNode.textContent === topText) break;
  11447. topNode = pointerNode;
  11448. if (pointerNode.parentNode) {
  11449. pointerNode = pointerNode === null || pointerNode === void 0 ? void 0 : pointerNode.parentNode;
  11450. }
  11451. } while ((pointerNode === null || pointerNode === void 0 ? void 0 : pointerNode.nodeName) !== 'P');
  11452. return topNode;
  11453. }
  11454. exports.getTopNode = getTopNode;
  11455. /**
  11456. * 生成html的string形式
  11457. * @param tagName 标签名
  11458. * @param content 需要包裹的内容
  11459. */
  11460. function makeHtmlString(node, content) {
  11461. var tagName = node.nodeName;
  11462. var attr = '';
  11463. if (node.nodeType === 3 || /^(h|H)[1-6]$/.test(tagName)) {
  11464. return content;
  11465. }
  11466. if (node.nodeType === 1) {
  11467. var style = node.getAttribute('style');
  11468. var face = node.getAttribute('face');
  11469. var color = node.getAttribute('color');
  11470. if (style) attr = attr + (" style=\"" + style + "\"");
  11471. if (face) attr = attr + (" face=\"" + face + "\"");
  11472. if (color) attr = attr + (" color=\"" + color + "\"");
  11473. }
  11474. tagName = tagName.toLowerCase();
  11475. return "<" + tagName + attr + ">" + content + "</" + tagName + ">";
  11476. }
  11477. exports.makeHtmlString = makeHtmlString;
  11478. /**
  11479. * 生成开始或者结束位置的html字符片段
  11480. * @param topText 选区所在的行的文本内容
  11481. * @param node 选区给出的node节点
  11482. * @param startPos node文本内容选取的开始位置
  11483. * @param endPos node文本内容选取的结束位置
  11484. */
  11485. function createPartHtml(topText, node, startPos, endPost) {
  11486. var _a;
  11487. var selectionContent = (_a = node.textContent) === null || _a === void 0 ? void 0 : _a.substring(startPos, endPost);
  11488. var pointerNode = node;
  11489. var content = '';
  11490. do {
  11491. content = makeHtmlString(pointerNode, selectionContent !== null && selectionContent !== void 0 ? selectionContent : '');
  11492. selectionContent = content;
  11493. pointerNode = pointerNode === null || pointerNode === void 0 ? void 0 : pointerNode.parentElement;
  11494. } while (pointerNode && pointerNode.textContent !== topText);
  11495. return content;
  11496. }
  11497. exports.createPartHtml = createPartHtml;
  11498. /**
  11499. * 生成需要插入的html内容的字符串形式
  11500. * @param selection 选区对象
  11501. * @param topNode 选区所在行的顶级node节点
  11502. */
  11503. function insertHtml(selection, topNode) {
  11504. var _a, _b, _c, _d, _e;
  11505. var anchorNode = selection.anchorNode,
  11506. focusNode = selection.focusNode,
  11507. anchorPos = selection.anchorOffset,
  11508. focusPos = selection.focusOffset;
  11509. var topText = (_a = topNode.textContent) !== null && _a !== void 0 ? _a : '';
  11510. var TagArr = getContainerTag(topNode);
  11511. var content = '';
  11512. var startContent = '';
  11513. var middleContent = '';
  11514. var endContent = '';
  11515. var startNode = anchorNode;
  11516. var endNode = focusNode; // 用来保存 anchorNode的非p最外层节点
  11517. var pointerNode = anchorNode; // 节点是同一个的处理
  11518. if (anchorNode === null || anchorNode === void 0 ? void 0 : anchorNode.isEqualNode(focusNode !== null && focusNode !== void 0 ? focusNode : null)) {
  11519. var innerContent = createPartHtml(topText, anchorNode, anchorPos, focusPos);
  11520. innerContent = addContainer(TagArr, innerContent);
  11521. return innerContent;
  11522. } // 选中开始位置节点的处理
  11523. if (anchorNode) startContent = createPartHtml(topText, anchorNode, anchorPos !== null && anchorPos !== void 0 ? anchorPos : 0); // 结束位置节点的处理
  11524. if (focusNode) endContent = createPartHtml(topText, focusNode, 0, focusPos); // 将指针节点位置放置到开始的节点
  11525. if (anchorNode) {
  11526. // 获取start的非p顶级node
  11527. startNode = getTopNode(anchorNode, topText);
  11528. }
  11529. if (focusNode) {
  11530. // 获取end的非p顶级node
  11531. endNode = getTopNode(focusNode, topText);
  11532. } // 处于开始和结束节点位置之间的节点的处理
  11533. pointerNode = (_b = startNode === null || startNode === void 0 ? void 0 : startNode.nextSibling) !== null && _b !== void 0 ? _b : anchorNode;
  11534. while (!(pointerNode === null || pointerNode === void 0 ? void 0 : pointerNode.isEqualNode(endNode !== null && endNode !== void 0 ? endNode : null))) {
  11535. var pointerNodeName = pointerNode === null || pointerNode === void 0 ? void 0 : pointerNode.nodeName;
  11536. if (pointerNodeName === '#text') {
  11537. middleContent = middleContent + (pointerNode === null || pointerNode === void 0 ? void 0 : pointerNode.textContent);
  11538. } else {
  11539. var htmlString = (_d = (_c = pointerNode === null || pointerNode === void 0 ? void 0 : pointerNode.firstChild) === null || _c === void 0 ? void 0 : _c.parentElement) === null || _d === void 0 ? void 0 : _d.innerHTML;
  11540. if (pointerNode) middleContent = middleContent + makeHtmlString(pointerNode, htmlString !== null && htmlString !== void 0 ? htmlString : '');
  11541. } // 解决文字和图片同一行时会触发无限循环, 到不了endNode === pointerNode条件
  11542. var nextPointNode = (_e = pointerNode === null || pointerNode === void 0 ? void 0 : pointerNode.nextSibling) !== null && _e !== void 0 ? _e : pointerNode;
  11543. if (nextPointNode === pointerNode) break;
  11544. pointerNode = nextPointNode;
  11545. }
  11546. content = "" + startContent + middleContent + endContent; // 增加最外层包裹标签
  11547. content = addContainer(TagArr, content);
  11548. return content;
  11549. }
  11550. exports.insertHtml = insertHtml;
  11551. /**
  11552. * 获取包裹在最外层的非p Node tagName 数组
  11553. * @param node 选区所在行的node节点
  11554. */
  11555. function getContainerTag(node) {
  11556. var _a;
  11557. var topText = (_a = node.textContent) !== null && _a !== void 0 ? _a : '';
  11558. var tagArr = [];
  11559. while ((node === null || node === void 0 ? void 0 : node.textContent) === topText) {
  11560. if (node.nodeName !== 'P' && node.nodeName !== 'TABLE') {
  11561. tagArr.push(node);
  11562. }
  11563. node = node.childNodes[0];
  11564. }
  11565. return tagArr;
  11566. }
  11567. /**
  11568. * 为内容增加包裹标签
  11569. * @param tagArr 最外层包裹的tag数组,索引越小tag越在外面
  11570. * @param content tag要包裹的内容
  11571. */
  11572. function addContainer(tagArr, content) {
  11573. (0, _forEach["default"])(tagArr).call(tagArr, function (v) {
  11574. content = makeHtmlString(v, content);
  11575. });
  11576. return content;
  11577. }
  11578. /***/ }),
  11579. /* 324 */
  11580. /***/ (function(module, exports, __webpack_require__) {
  11581. "use strict";
  11582. /**
  11583. * @description 绑定链接元素的事件,入口
  11584. * @author wangfupeng
  11585. */
  11586. var _interopRequireDefault = __webpack_require__(0);
  11587. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  11588. (0, _defineProperty["default"])(exports, "__esModule", {
  11589. value: true
  11590. });
  11591. var tslib_1 = __webpack_require__(2);
  11592. var tooltip_event_1 = tslib_1.__importDefault(__webpack_require__(325));
  11593. /**
  11594. * 绑定事件
  11595. * @param editor 编辑器实例
  11596. */
  11597. function bindEvent(editor) {
  11598. // tooltip 事件
  11599. tooltip_event_1["default"](editor);
  11600. }
  11601. exports["default"] = bindEvent;
  11602. /***/ }),
  11603. /* 325 */
  11604. /***/ (function(module, exports, __webpack_require__) {
  11605. "use strict";
  11606. /**
  11607. * @description tooltip 事件
  11608. * @author wangfupeng
  11609. */
  11610. var _interopRequireDefault = __webpack_require__(0);
  11611. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  11612. var _includes = _interopRequireDefault(__webpack_require__(28));
  11613. (0, _defineProperty["default"])(exports, "__esModule", {
  11614. value: true
  11615. });
  11616. var tslib_1 = __webpack_require__(2);
  11617. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  11618. var Tooltip_1 = tslib_1.__importDefault(__webpack_require__(39));
  11619. var is_active_1 = __webpack_require__(96);
  11620. /**
  11621. * 生成 Tooltip 的显示隐藏函数
  11622. */
  11623. function createShowHideFn(editor) {
  11624. var tooltip;
  11625. /**
  11626. * 显示 tooltip
  11627. * @param $link 链接元素
  11628. */
  11629. function showLinkTooltip($link) {
  11630. var conf = [{
  11631. $elem: dom_core_1["default"]("<span>" + editor.i18next.t('menus.panelMenus.link.查看链接') + "</span>"),
  11632. onClick: function onClick(editor, $link) {
  11633. var link = $link.attr('href');
  11634. window.open(link, '_target'); // 返回 true,表示执行完之后,隐藏 tooltip。否则不隐藏。
  11635. return true;
  11636. }
  11637. }, {
  11638. $elem: dom_core_1["default"]("<span>" + editor.i18next.t('menus.panelMenus.link.取消链接') + "</span>"),
  11639. onClick: function onClick(editor, $link) {
  11640. var _a, _b; // 选中链接元素
  11641. editor.selection.createRangeByElem($link);
  11642. editor.selection.restoreSelection();
  11643. var $childNodes = $link.childNodes(); // 如果链接是图片
  11644. if (($childNodes === null || $childNodes === void 0 ? void 0 : $childNodes.getNodeName()) === 'IMG') {
  11645. // 获取选中的图片
  11646. var $selectIMG = (_b = (_a = editor.selection.getSelectionContainerElem()) === null || _a === void 0 ? void 0 : _a.children()) === null || _b === void 0 ? void 0 : _b.elems[0].children[0]; // 插入图片
  11647. editor.cmd["do"]('insertHTML', "<img \n src=" + ($selectIMG === null || $selectIMG === void 0 ? void 0 : $selectIMG.getAttribute('src')) + " \n style=" + ($selectIMG === null || $selectIMG === void 0 ? void 0 : $selectIMG.getAttribute('style')) + ">");
  11648. } else {
  11649. var _context;
  11650. /**
  11651. * 替换链接
  11652. *
  11653. * 两种情况
  11654. * 1. a标签里面可能会含有其他元素如:b, i等,要保留: <a><b></b></a> 先添加链接后加粗
  11655. * 2. 特殊标签里嵌套a,也要保留特殊标签:<b><a></a></b> 先加粗后添加链接
  11656. */
  11657. var linkElem = $link.elems[0]; // a标签里面的html结构
  11658. var selectionContent = linkElem.innerHTML; // a标签的父元素
  11659. var linkParentNode = linkElem.parentElement;
  11660. if (linkParentNode && (0, _includes["default"])(_context = is_active_1.EXTRA_TAG).call(_context, linkParentNode.nodeName)) {
  11661. linkParentNode.innerHTML = selectionContent;
  11662. } else {
  11663. editor.cmd["do"]('insertHTML', '<span>' + selectionContent + '</span>');
  11664. }
  11665. } // 返回 true,表示执行完之后,隐藏 tooltip。否则不隐藏。
  11666. return true;
  11667. }
  11668. }]; // 创建 tooltip
  11669. tooltip = new Tooltip_1["default"](editor, $link, conf);
  11670. tooltip.create();
  11671. }
  11672. /**
  11673. * 隐藏 tooltip
  11674. */
  11675. function hideLinkTooltip() {
  11676. // 移除 tooltip
  11677. if (tooltip) {
  11678. tooltip.remove();
  11679. tooltip = null;
  11680. }
  11681. }
  11682. return {
  11683. showLinkTooltip: showLinkTooltip,
  11684. hideLinkTooltip: hideLinkTooltip
  11685. };
  11686. }
  11687. /**
  11688. * 绑定 tooltip 事件
  11689. * @param editor 编辑器实例
  11690. */
  11691. function bindTooltipEvent(editor) {
  11692. var _a = createShowHideFn(editor),
  11693. showLinkTooltip = _a.showLinkTooltip,
  11694. hideLinkTooltip = _a.hideLinkTooltip; // 点击链接元素是,显示 tooltip
  11695. editor.txt.eventHooks.linkClickEvents.push(showLinkTooltip); // 点击其他地方,或者滚动时,隐藏 tooltip
  11696. editor.txt.eventHooks.clickEvents.push(hideLinkTooltip);
  11697. editor.txt.eventHooks.keyupEvents.push(hideLinkTooltip);
  11698. editor.txt.eventHooks.toolbarClickEvents.push(hideLinkTooltip);
  11699. editor.txt.eventHooks.menuClickEvents.push(hideLinkTooltip);
  11700. editor.txt.eventHooks.textScrollEvents.push(hideLinkTooltip);
  11701. }
  11702. exports["default"] = bindTooltipEvent;
  11703. /***/ }),
  11704. /* 326 */
  11705. /***/ (function(module, exports, __webpack_require__) {
  11706. "use strict";
  11707. /**
  11708. * @description 斜体
  11709. * @author liuwei
  11710. */
  11711. var _interopRequireDefault = __webpack_require__(0);
  11712. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  11713. (0, _defineProperty["default"])(exports, "__esModule", {
  11714. value: true
  11715. });
  11716. var tslib_1 = __webpack_require__(2);
  11717. var BtnMenu_1 = tslib_1.__importDefault(__webpack_require__(23));
  11718. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  11719. var Italic =
  11720. /** @class */
  11721. function (_super) {
  11722. tslib_1.__extends(Italic, _super);
  11723. function Italic(editor) {
  11724. var _this = this;
  11725. var $elem = dom_core_1["default"]("<div class=\"w-e-menu\" data-title=\"\u659C\u4F53\">\n <i class=\"w-e-icon-italic\"></i>\n </div>");
  11726. _this = _super.call(this, $elem, editor) || this;
  11727. return _this;
  11728. }
  11729. /**
  11730. * 点击事件
  11731. */
  11732. Italic.prototype.clickHandler = function () {
  11733. var editor = this.editor;
  11734. var isSelectEmpty = editor.selection.isSelectionEmpty();
  11735. if (isSelectEmpty) {
  11736. // 选区范围是空的,插入并选中一个“空白”
  11737. editor.selection.createEmptyRange();
  11738. } // 执行 italic 命令
  11739. editor.cmd["do"]('italic');
  11740. if (isSelectEmpty) {
  11741. // 需要将选区范围折叠起来
  11742. editor.selection.collapseRange();
  11743. editor.selection.restoreSelection();
  11744. }
  11745. };
  11746. /**
  11747. * 尝试修改菜单激活状态
  11748. */
  11749. Italic.prototype.tryChangeActive = function () {
  11750. var editor = this.editor;
  11751. if (editor.cmd.queryCommandState('italic')) {
  11752. this.active();
  11753. } else {
  11754. this.unActive();
  11755. }
  11756. };
  11757. return Italic;
  11758. }(BtnMenu_1["default"]);
  11759. exports["default"] = Italic;
  11760. /***/ }),
  11761. /* 327 */
  11762. /***/ (function(module, exports, __webpack_require__) {
  11763. "use strict";
  11764. /**
  11765. * @description 下划线 underline
  11766. * @author dyl
  11767. *
  11768. */
  11769. var _interopRequireDefault = __webpack_require__(0);
  11770. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  11771. (0, _defineProperty["default"])(exports, "__esModule", {
  11772. value: true
  11773. });
  11774. var tslib_1 = __webpack_require__(2);
  11775. var BtnMenu_1 = tslib_1.__importDefault(__webpack_require__(23));
  11776. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  11777. var Underline =
  11778. /** @class */
  11779. function (_super) {
  11780. tslib_1.__extends(Underline, _super);
  11781. function Underline(editor) {
  11782. var _this = this;
  11783. var $elem = dom_core_1["default"]("<div class=\"w-e-menu\" data-title=\"\u4E0B\u5212\u7EBF\">\n <i class=\"w-e-icon-underline\"></i>\n </div>");
  11784. _this = _super.call(this, $elem, editor) || this;
  11785. return _this;
  11786. }
  11787. /**
  11788. * 点击事件
  11789. */
  11790. Underline.prototype.clickHandler = function () {
  11791. var editor = this.editor;
  11792. var isSelectEmpty = editor.selection.isSelectionEmpty();
  11793. if (isSelectEmpty) {
  11794. // 选区范围是空的,插入并选中一个“空白”
  11795. editor.selection.createEmptyRange();
  11796. } // 执行 Underline 命令
  11797. editor.cmd["do"]('underline');
  11798. if (isSelectEmpty) {
  11799. // 需要将选区范围折叠起来
  11800. editor.selection.collapseRange();
  11801. editor.selection.restoreSelection();
  11802. }
  11803. };
  11804. /**
  11805. * 尝试修改菜单激活状态
  11806. */
  11807. Underline.prototype.tryChangeActive = function () {
  11808. var editor = this.editor;
  11809. if (editor.cmd.queryCommandState('underline')) {
  11810. this.active();
  11811. } else {
  11812. this.unActive();
  11813. }
  11814. };
  11815. return Underline;
  11816. }(BtnMenu_1["default"]);
  11817. exports["default"] = Underline;
  11818. /***/ }),
  11819. /* 328 */
  11820. /***/ (function(module, exports, __webpack_require__) {
  11821. "use strict";
  11822. /**
  11823. * @description 删除线
  11824. * @author lkw
  11825. */
  11826. var _interopRequireDefault = __webpack_require__(0);
  11827. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  11828. (0, _defineProperty["default"])(exports, "__esModule", {
  11829. value: true
  11830. });
  11831. var tslib_1 = __webpack_require__(2);
  11832. var BtnMenu_1 = tslib_1.__importDefault(__webpack_require__(23));
  11833. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  11834. var StrikeThrough =
  11835. /** @class */
  11836. function (_super) {
  11837. tslib_1.__extends(StrikeThrough, _super);
  11838. function StrikeThrough(editor) {
  11839. var _this = this;
  11840. var $elem = dom_core_1["default"]("<div class=\"w-e-menu\" data-title=\"\u5220\u9664\u7EBF\">\n <i class=\"w-e-icon-strikethrough\"></i>\n </div>");
  11841. _this = _super.call(this, $elem, editor) || this;
  11842. return _this;
  11843. }
  11844. /**
  11845. * 点击事件
  11846. */
  11847. StrikeThrough.prototype.clickHandler = function () {
  11848. var editor = this.editor;
  11849. var isSelectEmpty = editor.selection.isSelectionEmpty();
  11850. if (isSelectEmpty) {
  11851. // 选区范围是空的,插入并选中一个“空白”
  11852. editor.selection.createEmptyRange();
  11853. } // 执行 strikeThrough 命令
  11854. editor.cmd["do"]('strikeThrough');
  11855. if (isSelectEmpty) {
  11856. // 需要将选区范围折叠起来
  11857. editor.selection.collapseRange();
  11858. editor.selection.restoreSelection();
  11859. }
  11860. };
  11861. /**
  11862. * 尝试修改菜单激活状态
  11863. */
  11864. StrikeThrough.prototype.tryChangeActive = function () {
  11865. var editor = this.editor;
  11866. if (editor.cmd.queryCommandState('strikeThrough')) {
  11867. this.active();
  11868. } else {
  11869. this.unActive();
  11870. }
  11871. };
  11872. return StrikeThrough;
  11873. }(BtnMenu_1["default"]);
  11874. exports["default"] = StrikeThrough;
  11875. /***/ }),
  11876. /* 329 */
  11877. /***/ (function(module, exports, __webpack_require__) {
  11878. "use strict";
  11879. /**
  11880. * @description 字体样式 FontStyle
  11881. * @author dyl
  11882. *
  11883. */
  11884. var _interopRequireDefault = __webpack_require__(0);
  11885. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  11886. (0, _defineProperty["default"])(exports, "__esModule", {
  11887. value: true
  11888. });
  11889. var tslib_1 = __webpack_require__(2);
  11890. var DropListMenu_1 = tslib_1.__importDefault(__webpack_require__(24));
  11891. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  11892. var FontStyleList_1 = tslib_1.__importDefault(__webpack_require__(330));
  11893. var FontStyle =
  11894. /** @class */
  11895. function (_super) {
  11896. tslib_1.__extends(FontStyle, _super);
  11897. function FontStyle(editor) {
  11898. var _this = this;
  11899. var $elem = dom_core_1["default"]("<div class=\"w-e-menu\" data-title=\"\u5B57\u4F53\">\n <i class=\"w-e-icon-font\"></i>\n </div>");
  11900. var fontStyleList = new FontStyleList_1["default"](editor.config.fontNames);
  11901. var fontListConf = {
  11902. width: 100,
  11903. title: '设置字体',
  11904. type: 'list',
  11905. list: fontStyleList.getItemList(),
  11906. clickHandler: function clickHandler(value) {
  11907. // this 是指向当前的 FontStyle 对象
  11908. _this.command(value);
  11909. }
  11910. };
  11911. _this = _super.call(this, $elem, editor, fontListConf) || this;
  11912. return _this;
  11913. }
  11914. /**
  11915. * 执行命令
  11916. * @param value value
  11917. */
  11918. FontStyle.prototype.command = function (value) {
  11919. var _a;
  11920. var editor = this.editor;
  11921. var isEmptySelection = editor.selection.isSelectionEmpty();
  11922. var $selectionElem = (_a = editor.selection.getSelectionContainerElem()) === null || _a === void 0 ? void 0 : _a.elems[0];
  11923. if ($selectionElem == null) return;
  11924. var isFont = ($selectionElem === null || $selectionElem === void 0 ? void 0 : $selectionElem.nodeName.toLowerCase()) !== 'p';
  11925. var isSameValue = ($selectionElem === null || $selectionElem === void 0 ? void 0 : $selectionElem.getAttribute('face')) === value;
  11926. if (isEmptySelection) {
  11927. if (isFont && !isSameValue) {
  11928. var $elems = editor.selection.getSelectionRangeTopNodes();
  11929. editor.selection.createRangeByElem($elems[0]);
  11930. editor.selection.moveCursor($elems[0].elems[0]);
  11931. }
  11932. editor.selection.setRangeToElem($selectionElem); // 插入空白选区
  11933. editor.selection.createEmptyRange();
  11934. }
  11935. editor.cmd["do"]('fontName', value);
  11936. if (isEmptySelection) {
  11937. // 需要将选区范围折叠起来
  11938. editor.selection.collapseRange();
  11939. editor.selection.restoreSelection();
  11940. }
  11941. };
  11942. /**
  11943. * 尝试修改菜单激活状态
  11944. * ?字体是否需要有激活状态这个操作?
  11945. */
  11946. FontStyle.prototype.tryChangeActive = function () {// const editor = this.editor
  11947. // const cmdValue = editor.cmd.queryCommandValue('fontName')
  11948. // if (menusConfig.fontNames.indexOf(cmdValue) >= 0) {
  11949. // this.active()
  11950. // } else {
  11951. // this.unActive()
  11952. // }
  11953. };
  11954. return FontStyle;
  11955. }(DropListMenu_1["default"]);
  11956. exports["default"] = FontStyle;
  11957. /***/ }),
  11958. /* 330 */
  11959. /***/ (function(module, exports, __webpack_require__) {
  11960. "use strict";
  11961. var _interopRequireDefault = __webpack_require__(0);
  11962. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  11963. var _forEach = _interopRequireDefault(__webpack_require__(4));
  11964. (0, _defineProperty["default"])(exports, "__esModule", {
  11965. value: true
  11966. });
  11967. var tslib_1 = __webpack_require__(2);
  11968. /**
  11969. * @description 字体 class
  11970. * @author dyl
  11971. */
  11972. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  11973. /**
  11974. * 封装的一个字体菜单列表数据的组装对象,
  11975. * 原因是因为在constructor函数中,直接执行此流程,会让代码量看起来较多,
  11976. * 如果要在constructor调用外部函数,个人目前发现会有错误提示,
  11977. * 因此,想着顺便研究实践下ts,遍创建了这样一个类
  11978. */
  11979. var FontStyleList =
  11980. /** @class */
  11981. function () {
  11982. function FontStyleList(list) {
  11983. var _this = this;
  11984. this.itemList = [];
  11985. (0, _forEach["default"])(list).call(list, function (fontValue) {
  11986. // fontValue 2种情况一种是string类型的直接value等同于font-family
  11987. // Object类型value为font-family name为ui视图呈现
  11988. var fontFamily = typeof fontValue === 'string' ? fontValue : fontValue.value;
  11989. var fontName = typeof fontValue === 'string' ? fontValue : fontValue.name;
  11990. _this.itemList.push({
  11991. $elem: dom_core_1["default"]("<p style=\"font-family:'" + fontFamily + "'\">" + fontName + "</p>"),
  11992. value: fontName
  11993. });
  11994. });
  11995. }
  11996. FontStyleList.prototype.getItemList = function () {
  11997. return this.itemList;
  11998. };
  11999. return FontStyleList;
  12000. }();
  12001. exports["default"] = FontStyleList;
  12002. /***/ }),
  12003. /* 331 */
  12004. /***/ (function(module, exports, __webpack_require__) {
  12005. "use strict";
  12006. /**
  12007. * @description 字号 FontSize
  12008. * @author lkw
  12009. *
  12010. */
  12011. var _interopRequireDefault = __webpack_require__(0);
  12012. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  12013. (0, _defineProperty["default"])(exports, "__esModule", {
  12014. value: true
  12015. });
  12016. var tslib_1 = __webpack_require__(2);
  12017. var DropListMenu_1 = tslib_1.__importDefault(__webpack_require__(24));
  12018. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  12019. var FontSizeList_1 = tslib_1.__importDefault(__webpack_require__(332));
  12020. var FontSize =
  12021. /** @class */
  12022. function (_super) {
  12023. tslib_1.__extends(FontSize, _super);
  12024. function FontSize(editor) {
  12025. var _this = this;
  12026. var $elem = dom_core_1["default"]("<div class=\"w-e-menu\" data-title=\"\u5B57\u53F7\">\n <i class=\"w-e-icon-text-heigh\"></i>\n </div>");
  12027. var fontStyleList = new FontSizeList_1["default"](editor.config.fontSizes);
  12028. var fontListConf = {
  12029. width: 160,
  12030. title: '设置字号',
  12031. type: 'list',
  12032. list: fontStyleList.getItemList(),
  12033. clickHandler: function clickHandler(value) {
  12034. // this 是指向当前的 FontSize 对象
  12035. _this.command(value);
  12036. }
  12037. };
  12038. _this = _super.call(this, $elem, editor, fontListConf) || this;
  12039. return _this;
  12040. }
  12041. /**
  12042. * 执行命令
  12043. * @param value value
  12044. */
  12045. FontSize.prototype.command = function (value) {
  12046. var _a;
  12047. var editor = this.editor;
  12048. var isEmptySelection = editor.selection.isSelectionEmpty();
  12049. var selectionElem = (_a = editor.selection.getSelectionContainerElem()) === null || _a === void 0 ? void 0 : _a.elems[0];
  12050. if (selectionElem == null) return;
  12051. editor.cmd["do"]('fontSize', value);
  12052. if (isEmptySelection) {
  12053. // 需要将选区范围折叠起来
  12054. editor.selection.collapseRange();
  12055. editor.selection.restoreSelection();
  12056. }
  12057. };
  12058. /**
  12059. * 尝试修改菜单激活状态
  12060. * ?字号是否需要有激活状态这个操作?
  12061. */
  12062. FontSize.prototype.tryChangeActive = function () {};
  12063. return FontSize;
  12064. }(DropListMenu_1["default"]);
  12065. exports["default"] = FontSize;
  12066. /***/ }),
  12067. /* 332 */
  12068. /***/ (function(module, exports, __webpack_require__) {
  12069. "use strict";
  12070. var _interopRequireDefault = __webpack_require__(0);
  12071. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  12072. (0, _defineProperty["default"])(exports, "__esModule", {
  12073. value: true
  12074. });
  12075. var tslib_1 = __webpack_require__(2);
  12076. /**
  12077. * @description 字号 class
  12078. * @author lkw
  12079. */
  12080. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  12081. /**
  12082. * FontSizeList 字号配置列表
  12083. */
  12084. var FontSizeList =
  12085. /** @class */
  12086. function () {
  12087. function FontSizeList(list) {
  12088. this.itemList = [];
  12089. for (var key in list) {
  12090. var item = list[key];
  12091. this.itemList.push({
  12092. $elem: dom_core_1["default"]("<p style=\"font-size:" + key + "\">" + item.name + "</p>"),
  12093. value: item.value
  12094. });
  12095. }
  12096. }
  12097. FontSizeList.prototype.getItemList = function () {
  12098. return this.itemList;
  12099. };
  12100. return FontSizeList;
  12101. }();
  12102. exports["default"] = FontSizeList;
  12103. /***/ }),
  12104. /* 333 */
  12105. /***/ (function(module, exports, __webpack_require__) {
  12106. "use strict";
  12107. /**
  12108. * @description 对齐方式
  12109. * @author liuwei
  12110. */
  12111. var _interopRequireDefault = __webpack_require__(0);
  12112. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  12113. var _forEach = _interopRequireDefault(__webpack_require__(4));
  12114. var _indexOf = _interopRequireDefault(__webpack_require__(27));
  12115. (0, _defineProperty["default"])(exports, "__esModule", {
  12116. value: true
  12117. });
  12118. var tslib_1 = __webpack_require__(2);
  12119. var DropListMenu_1 = tslib_1.__importDefault(__webpack_require__(24));
  12120. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  12121. var SPECIAL_NODE_LIST = ['LI'];
  12122. var SPECIAL_TOP_NODE_LIST = ['BLOCKQUOTE'];
  12123. var Justify =
  12124. /** @class */
  12125. function (_super) {
  12126. tslib_1.__extends(Justify, _super);
  12127. function Justify(editor) {
  12128. var _this = this;
  12129. var $elem = dom_core_1["default"]('<div class="w-e-menu" data-title="对齐"><i class="w-e-icon-paragraph-left"></i></div>');
  12130. var dropListConf = {
  12131. width: 100,
  12132. title: '对齐方式',
  12133. type: 'list',
  12134. list: [{
  12135. $elem: dom_core_1["default"]("<p>\n <i class=\"w-e-icon-paragraph-left w-e-drop-list-item\"></i>\n " + editor.i18next.t('menus.dropListMenu.justify.靠左') + "\n </p>"),
  12136. value: 'left'
  12137. }, {
  12138. $elem: dom_core_1["default"]("<p>\n <i class=\"w-e-icon-paragraph-center w-e-drop-list-item\"></i>\n " + editor.i18next.t('menus.dropListMenu.justify.居中') + "\n </p>"),
  12139. value: 'center'
  12140. }, {
  12141. $elem: dom_core_1["default"]("<p>\n <i class=\"w-e-icon-paragraph-right w-e-drop-list-item\"></i>\n " + editor.i18next.t('menus.dropListMenu.justify.靠右') + "\n </p>"),
  12142. value: 'right'
  12143. }, {
  12144. $elem: dom_core_1["default"]("<p>\n <i class=\"w-e-icon-paragraph-justify w-e-drop-list-item\"></i>\n " + editor.i18next.t('menus.dropListMenu.justify.两端') + "\n </p>"),
  12145. value: 'justify'
  12146. }],
  12147. clickHandler: function clickHandler(value) {
  12148. // 执行对应的value操作
  12149. _this.command(value);
  12150. }
  12151. };
  12152. _this = _super.call(this, $elem, editor, dropListConf) || this;
  12153. return _this;
  12154. }
  12155. /**
  12156. * 执行命令
  12157. * @param value value
  12158. */
  12159. Justify.prototype.command = function (value) {
  12160. var editor = this.editor;
  12161. var selection = editor.selection;
  12162. var $selectionElem = selection.getSelectionContainerElem(); // 保存选区
  12163. selection.saveRange(); // 获取顶级元素
  12164. var $elems = editor.selection.getSelectionRangeTopNodes();
  12165. if ($selectionElem === null || $selectionElem === void 0 ? void 0 : $selectionElem.length) {
  12166. // list 在chrome下默认多包裹一个 p,导致不能通过顶层元素判断,所以单独加个判断
  12167. if (this.isSpecialNode($selectionElem, $elems[0]) || this.isSpecialTopNode($elems[0])) {
  12168. var el = this.getSpecialNodeUntilTop($selectionElem, $elems[0]);
  12169. if (el == null) return;
  12170. dom_core_1["default"](el).css('text-align', value);
  12171. } else {
  12172. (0, _forEach["default"])($elems).call($elems, function (el) {
  12173. el.css('text-align', value);
  12174. });
  12175. }
  12176. } //恢复选区
  12177. selection.restoreSelection();
  12178. };
  12179. /**
  12180. * 获取选区中的特殊元素,如果不存在,则直接返回顶层元素子元素
  12181. * @param el DomElement
  12182. * @param topEl DomElement
  12183. */
  12184. Justify.prototype.getSpecialNodeUntilTop = function (el, topEl) {
  12185. var parentNode = el.elems[0];
  12186. var topNode = topEl.elems[0]; // 可能出现嵌套的情况,所以一级一级向上找,是否是特殊元素
  12187. while (parentNode != null) {
  12188. if ((0, _indexOf["default"])(SPECIAL_NODE_LIST).call(SPECIAL_NODE_LIST, parentNode === null || parentNode === void 0 ? void 0 : parentNode.nodeName) !== -1) {
  12189. return parentNode;
  12190. } // 如果再到 top 元素之前还没找到特殊元素,直接返回元素
  12191. if (parentNode.parentNode === topNode) {
  12192. return parentNode;
  12193. }
  12194. parentNode = parentNode.parentNode;
  12195. }
  12196. return parentNode;
  12197. };
  12198. /**
  12199. * 当选区元素或者顶层元素是某些特殊元素时,只需要修改子元素的对齐样式的元素
  12200. * @param el DomElement
  12201. * @param topEl DomElement
  12202. */
  12203. Justify.prototype.isSpecialNode = function (el, topEl) {
  12204. // 如果以后有类似的元素要这样处理,直接修改这个数组即可
  12205. var parentNode = this.getSpecialNodeUntilTop(el, topEl);
  12206. if (parentNode == null) return false;
  12207. return (0, _indexOf["default"])(SPECIAL_NODE_LIST).call(SPECIAL_NODE_LIST, parentNode.nodeName) !== -1;
  12208. };
  12209. /**
  12210. * 当选区 top 元素为某些特殊元素时,只需要修改子元素的对齐样式的元素
  12211. * @param el DomElement
  12212. */
  12213. Justify.prototype.isSpecialTopNode = function (topEl) {
  12214. var _a;
  12215. if (topEl == null) return false;
  12216. return (0, _indexOf["default"])(SPECIAL_TOP_NODE_LIST).call(SPECIAL_TOP_NODE_LIST, (_a = topEl.elems[0]) === null || _a === void 0 ? void 0 : _a.nodeName) !== -1;
  12217. };
  12218. /**
  12219. * 尝试改变菜单激活(高亮)状态
  12220. * 默认左对齐,若选择其他对其方式对active进行高亮否则unActive
  12221. * ?考虑优化的话 是否可以对具体选中的进行高亮
  12222. */
  12223. Justify.prototype.tryChangeActive = function () {};
  12224. return Justify;
  12225. }(DropListMenu_1["default"]);
  12226. exports["default"] = Justify;
  12227. /***/ }),
  12228. /* 334 */
  12229. /***/ (function(module, exports, __webpack_require__) {
  12230. "use strict";
  12231. /**
  12232. * @description 引用
  12233. * @author tonghan
  12234. */
  12235. var _interopRequireDefault = __webpack_require__(0);
  12236. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  12237. var _forEach = _interopRequireDefault(__webpack_require__(4));
  12238. (0, _defineProperty["default"])(exports, "__esModule", {
  12239. value: true
  12240. });
  12241. var tslib_1 = __webpack_require__(2);
  12242. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  12243. var BtnMenu_1 = tslib_1.__importDefault(__webpack_require__(23));
  12244. var bind_event_1 = tslib_1.__importDefault(__webpack_require__(335));
  12245. var create_quote_node_1 = tslib_1.__importDefault(__webpack_require__(336));
  12246. var const_1 = __webpack_require__(7);
  12247. var Quote =
  12248. /** @class */
  12249. function (_super) {
  12250. tslib_1.__extends(Quote, _super);
  12251. function Quote(editor) {
  12252. var _this = this;
  12253. var $elem = dom_core_1["default"]("<div class=\"w-e-menu\" data-title=\"\u5F15\u7528\">\n <i class=\"w-e-icon-quotes-left\"></i>\n </div>");
  12254. _this = _super.call(this, $elem, editor) || this;
  12255. bind_event_1["default"](editor);
  12256. return _this;
  12257. }
  12258. /**
  12259. * 点击事件
  12260. */
  12261. Quote.prototype.clickHandler = function () {
  12262. var _a, _b;
  12263. var editor = this.editor;
  12264. var isSelectEmpty = editor.selection.isSelectionEmpty();
  12265. var topNodeElem = editor.selection.getSelectionRangeTopNodes();
  12266. var $topNodeElem = topNodeElem[topNodeElem.length - 1];
  12267. var nodeName = this.getTopNodeName(); // IE 中不支持 formatBlock <BLOCKQUOTE> ,要用其他方式兼容
  12268. // 兼容firefox无法取消blockquote的问题
  12269. if (nodeName === 'BLOCKQUOTE') {
  12270. // 撤销 quote
  12271. var $targetELem = dom_core_1["default"]($topNodeElem.childNodes());
  12272. var len = $targetELem.length;
  12273. var $middle_1 = $topNodeElem;
  12274. (0, _forEach["default"])($targetELem).call($targetELem, function (elem) {
  12275. var $elem = dom_core_1["default"](elem);
  12276. $elem.insertAfter($middle_1);
  12277. $middle_1 = $elem;
  12278. });
  12279. $topNodeElem.remove();
  12280. editor.selection.moveCursor($targetELem.elems[len - 1]); // 即时更新btn状态
  12281. this.tryChangeActive();
  12282. } else {
  12283. // 将 P 转换为 quote
  12284. /**
  12285. @author:gavin
  12286. @description
  12287. 1. 解决ctrl+a全选删除后,选区错位的问题。
  12288. 2. 或者内容清空,按删除键后,选区错位。
  12289. 导致topNodeElem选择的是编辑器顶层元素,在进行dom操作时,quote插入的位置有问题。
  12290. **/
  12291. var $quote = create_quote_node_1["default"](topNodeElem); //如果选择的元素时顶层元素,就将选区移动到正确的位置
  12292. if (editor.$textElem.equal($topNodeElem)) {
  12293. var containerElem = (_a = editor.selection.getSelectionContainerElem()) === null || _a === void 0 ? void 0 : _a.elems[0];
  12294. editor.selection.createRangeByElems(containerElem.children[0], containerElem.children[0]);
  12295. topNodeElem = editor.selection.getSelectionRangeTopNodes();
  12296. $quote = create_quote_node_1["default"](topNodeElem);
  12297. $topNodeElem.append($quote);
  12298. } else {
  12299. $quote.insertAfter($topNodeElem);
  12300. }
  12301. this.delSelectNode(topNodeElem);
  12302. var moveNode = (_b = $quote.childNodes()) === null || _b === void 0 ? void 0 : _b.last().getNode();
  12303. if (moveNode == null) return; // 兼容firefox(firefox下空行情况下选区会在br后,造成自动换行的问题)
  12304. moveNode.textContent ? editor.selection.moveCursor(moveNode) : editor.selection.moveCursor(moveNode, 0); // 即时更新btn状态
  12305. this.tryChangeActive(); // 防止最后一行无法跳出
  12306. dom_core_1["default"](const_1.EMPTY_P).insertAfter($quote);
  12307. return;
  12308. }
  12309. if (isSelectEmpty) {
  12310. // 需要将选区范围折叠起来
  12311. editor.selection.collapseRange();
  12312. editor.selection.restoreSelection();
  12313. }
  12314. };
  12315. /**
  12316. * 尝试修改菜单激活状态
  12317. */
  12318. Quote.prototype.tryChangeActive = function () {
  12319. var _a;
  12320. var editor = this.editor;
  12321. var cmdValue = (_a = editor.selection.getSelectionRangeTopNodes()[0]) === null || _a === void 0 ? void 0 : _a.getNodeName();
  12322. if (cmdValue === 'BLOCKQUOTE') {
  12323. this.active();
  12324. } else {
  12325. this.unActive();
  12326. }
  12327. };
  12328. /**
  12329. * 获取包裹在最外层的节点(防止内部嵌入多个样式)
  12330. * @param selectionElem 选中的节点
  12331. * @returns {string} 最终要处理的节点名称
  12332. */
  12333. Quote.prototype.getTopNodeName = function () {
  12334. var editor = this.editor;
  12335. var $topNodeElem = editor.selection.getSelectionRangeTopNodes()[0];
  12336. var nodeName = $topNodeElem === null || $topNodeElem === void 0 ? void 0 : $topNodeElem.getNodeName();
  12337. return nodeName;
  12338. };
  12339. /**
  12340. * 删除选中的元素
  12341. * @param selectElem 选中的元素节点数组
  12342. */
  12343. Quote.prototype.delSelectNode = function (selectElem) {
  12344. (0, _forEach["default"])(selectElem).call(selectElem, function (node) {
  12345. node.remove();
  12346. });
  12347. };
  12348. return Quote;
  12349. }(BtnMenu_1["default"]);
  12350. exports["default"] = Quote;
  12351. /***/ }),
  12352. /* 335 */
  12353. /***/ (function(module, exports, __webpack_require__) {
  12354. "use strict";
  12355. var _interopRequireDefault = __webpack_require__(0);
  12356. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  12357. (0, _defineProperty["default"])(exports, "__esModule", {
  12358. value: true
  12359. });
  12360. var tslib_1 = __webpack_require__(2);
  12361. var const_1 = __webpack_require__(7);
  12362. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  12363. function bindEvent(editor) {
  12364. function quoteEnter(e) {
  12365. var _a;
  12366. var $selectElem = editor.selection.getSelectionContainerElem();
  12367. var $topSelectElem = editor.selection.getSelectionRangeTopNodes()[0]; // 对quote的enter进行特殊处理
  12368. //最后一行为空标签时再按会出跳出blockquote
  12369. if (($topSelectElem === null || $topSelectElem === void 0 ? void 0 : $topSelectElem.getNodeName()) === 'BLOCKQUOTE') {
  12370. // firefox下点击引用按钮会选中外容器<blockquote></blockquote>
  12371. if ($selectElem.getNodeName() === 'BLOCKQUOTE') {
  12372. var selectNode = (_a = $selectElem.childNodes()) === null || _a === void 0 ? void 0 : _a.getNode();
  12373. editor.selection.moveCursor(selectNode);
  12374. }
  12375. if ($selectElem.text() === '') {
  12376. e.preventDefault();
  12377. $selectElem.remove();
  12378. var $newLine = dom_core_1["default"](const_1.EMPTY_P);
  12379. $newLine.insertAfter($topSelectElem); // 将光标移动br前面
  12380. editor.selection.moveCursor($newLine.getNode(), 0);
  12381. } // 当blockQuote中没有内容回车后移除blockquote
  12382. if ($topSelectElem.text() === '') {
  12383. $topSelectElem.remove();
  12384. }
  12385. }
  12386. }
  12387. editor.txt.eventHooks.enterDownEvents.push(quoteEnter);
  12388. }
  12389. exports["default"] = bindEvent;
  12390. /***/ }),
  12391. /* 336 */
  12392. /***/ (function(module, exports, __webpack_require__) {
  12393. "use strict";
  12394. var _interopRequireDefault = __webpack_require__(0);
  12395. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  12396. var _forEach = _interopRequireDefault(__webpack_require__(4));
  12397. (0, _defineProperty["default"])(exports, "__esModule", {
  12398. value: true
  12399. });
  12400. var tslib_1 = __webpack_require__(2);
  12401. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  12402. /**
  12403. * 创建一个blockquote元素节点
  12404. * @param editor 编辑器实例
  12405. */
  12406. function createQuote($childElem) {
  12407. var $targetElem = dom_core_1["default"]("<blockquote></blockquote>");
  12408. (0, _forEach["default"])($childElem).call($childElem, function (node) {
  12409. $targetElem.append(node.clone(true));
  12410. });
  12411. return $targetElem;
  12412. }
  12413. exports["default"] = createQuote;
  12414. /***/ }),
  12415. /* 337 */
  12416. /***/ (function(module, exports, __webpack_require__) {
  12417. "use strict";
  12418. /**
  12419. * @description 背景颜色 BackColor
  12420. * @author lkw
  12421. *
  12422. */
  12423. var _interopRequireDefault = __webpack_require__(0);
  12424. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  12425. var _map = _interopRequireDefault(__webpack_require__(26));
  12426. (0, _defineProperty["default"])(exports, "__esModule", {
  12427. value: true
  12428. });
  12429. var tslib_1 = __webpack_require__(2);
  12430. var DropListMenu_1 = tslib_1.__importDefault(__webpack_require__(24));
  12431. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  12432. var util_1 = __webpack_require__(6);
  12433. var BackColor =
  12434. /** @class */
  12435. function (_super) {
  12436. tslib_1.__extends(BackColor, _super);
  12437. function BackColor(editor) {
  12438. var _context;
  12439. var _this = this;
  12440. var $elem = dom_core_1["default"]("<div class=\"w-e-menu\" data-title=\"\u80CC\u666F\u8272\">\n <i class=\"w-e-icon-paint-brush\"></i>\n </div>");
  12441. var colorListConf = {
  12442. width: 120,
  12443. title: '背景颜色',
  12444. // droplist 内容以 block 形式展示
  12445. type: 'inline-block',
  12446. list: (0, _map["default"])(_context = editor.config.colors).call(_context, function (color) {
  12447. return {
  12448. $elem: dom_core_1["default"]("<i style=\"color:" + color + ";\" class=\"w-e-icon-paint-brush\"></i>"),
  12449. value: color
  12450. };
  12451. }),
  12452. clickHandler: function clickHandler(value) {
  12453. // this 是指向当前的 BackColor 对象
  12454. _this.command(value);
  12455. }
  12456. };
  12457. _this = _super.call(this, $elem, editor, colorListConf) || this;
  12458. return _this;
  12459. }
  12460. /**
  12461. * 执行命令
  12462. * @param value value
  12463. */
  12464. BackColor.prototype.command = function (value) {
  12465. var _a;
  12466. var editor = this.editor;
  12467. var isEmptySelection = editor.selection.isSelectionEmpty();
  12468. var $selectionElem = (_a = editor.selection.getSelectionContainerElem()) === null || _a === void 0 ? void 0 : _a.elems[0];
  12469. if ($selectionElem == null) return;
  12470. var isSpan = ($selectionElem === null || $selectionElem === void 0 ? void 0 : $selectionElem.nodeName.toLowerCase()) !== 'p';
  12471. var bgColor = $selectionElem === null || $selectionElem === void 0 ? void 0 : $selectionElem.style.backgroundColor;
  12472. var isSameColor = util_1.hexToRgb(value) === bgColor;
  12473. if (isEmptySelection) {
  12474. if (isSpan && !isSameColor) {
  12475. var $elems = editor.selection.getSelectionRangeTopNodes();
  12476. editor.selection.createRangeByElem($elems[0]);
  12477. editor.selection.moveCursor($elems[0].elems[0]);
  12478. } // 插入空白选区
  12479. editor.selection.createEmptyRange();
  12480. }
  12481. editor.cmd["do"]('backColor', value);
  12482. if (isEmptySelection) {
  12483. // 需要将选区范围折叠起来
  12484. editor.selection.collapseRange();
  12485. editor.selection.restoreSelection();
  12486. }
  12487. };
  12488. /**
  12489. * 尝试修改菜单激活状态
  12490. */
  12491. BackColor.prototype.tryChangeActive = function () {};
  12492. return BackColor;
  12493. }(DropListMenu_1["default"]);
  12494. exports["default"] = BackColor;
  12495. /***/ }),
  12496. /* 338 */
  12497. /***/ (function(module, exports, __webpack_require__) {
  12498. "use strict";
  12499. /**
  12500. * @description 文字颜色 FontColor
  12501. * @author lkw
  12502. *
  12503. */
  12504. var _interopRequireDefault = __webpack_require__(0);
  12505. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  12506. var _map = _interopRequireDefault(__webpack_require__(26));
  12507. (0, _defineProperty["default"])(exports, "__esModule", {
  12508. value: true
  12509. });
  12510. var tslib_1 = __webpack_require__(2);
  12511. var DropListMenu_1 = tslib_1.__importDefault(__webpack_require__(24));
  12512. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  12513. var FontColor =
  12514. /** @class */
  12515. function (_super) {
  12516. tslib_1.__extends(FontColor, _super);
  12517. function FontColor(editor) {
  12518. var _context;
  12519. var _this = this;
  12520. var $elem = dom_core_1["default"]("<div class=\"w-e-menu\" data-title=\"\u6587\u5B57\u989C\u8272\">\n <i class=\"w-e-icon-pencil2\"></i>\n </div>");
  12521. var colorListConf = {
  12522. width: 120,
  12523. title: '文字颜色',
  12524. // droplist 内容以 block 形式展示
  12525. type: 'inline-block',
  12526. list: (0, _map["default"])(_context = editor.config.colors).call(_context, function (color) {
  12527. return {
  12528. $elem: dom_core_1["default"]("<i style=\"color:" + color + ";\" class=\"w-e-icon-pencil2\"></i>"),
  12529. value: color
  12530. };
  12531. }),
  12532. clickHandler: function clickHandler(value) {
  12533. // this 是指向当前的 BackColor 对象
  12534. _this.command(value);
  12535. }
  12536. };
  12537. _this = _super.call(this, $elem, editor, colorListConf) || this;
  12538. return _this;
  12539. }
  12540. /**
  12541. * 执行命令
  12542. * @param value value
  12543. */
  12544. FontColor.prototype.command = function (value) {
  12545. var _a;
  12546. var editor = this.editor;
  12547. var isEmptySelection = editor.selection.isSelectionEmpty();
  12548. var $selectionElem = (_a = editor.selection.getSelectionContainerElem()) === null || _a === void 0 ? void 0 : _a.elems[0];
  12549. if ($selectionElem == null) return; // 获取选区范围的文字
  12550. var $selectionText = editor.selection.getSelectionText(); // 如果设置的是 a 标签就特殊处理一下,避免回车换行设置颜色无效的情况
  12551. // 只处理选中a标签内全部文字的情况,因为选中部分文字不存在换行颜色失效的情况
  12552. if ($selectionElem.nodeName === 'A' && $selectionElem.textContent === $selectionText) {
  12553. // 创建一个相当于占位的元素
  12554. var _payloadElem = dom_core_1["default"]('<span>&#8203;</span>').getNode(); // 添加到a标签之后
  12555. $selectionElem.appendChild(_payloadElem);
  12556. }
  12557. editor.cmd["do"]('foreColor', value);
  12558. if (isEmptySelection) {
  12559. // 需要将选区范围折叠起来
  12560. editor.selection.collapseRange();
  12561. editor.selection.restoreSelection();
  12562. }
  12563. };
  12564. /**
  12565. * 尝试修改菜单激活状态
  12566. */
  12567. FontColor.prototype.tryChangeActive = function () {};
  12568. return FontColor;
  12569. }(DropListMenu_1["default"]);
  12570. exports["default"] = FontColor;
  12571. /***/ }),
  12572. /* 339 */
  12573. /***/ (function(module, exports, __webpack_require__) {
  12574. "use strict";
  12575. /**
  12576. * @description 视频 菜单
  12577. * @author tonghan
  12578. */
  12579. var _interopRequireDefault = __webpack_require__(0);
  12580. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  12581. (0, _defineProperty["default"])(exports, "__esModule", {
  12582. value: true
  12583. });
  12584. var tslib_1 = __webpack_require__(2);
  12585. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  12586. var Panel_1 = tslib_1.__importDefault(__webpack_require__(33));
  12587. var PanelMenu_1 = tslib_1.__importDefault(__webpack_require__(38));
  12588. var create_panel_conf_1 = tslib_1.__importDefault(__webpack_require__(340));
  12589. var index_1 = tslib_1.__importDefault(__webpack_require__(346));
  12590. var Video =
  12591. /** @class */
  12592. function (_super) {
  12593. tslib_1.__extends(Video, _super);
  12594. function Video(editor) {
  12595. var _this = this;
  12596. var $elem = dom_core_1["default"]("<div class=\"w-e-menu\" data-title=\"\u89C6\u9891\">\n <i class=\"w-e-icon-play\"></i>\n </div>");
  12597. _this = _super.call(this, $elem, editor) || this; // 绑定事件 tootip
  12598. index_1["default"](editor);
  12599. return _this;
  12600. }
  12601. /**
  12602. * 菜单点击事件
  12603. */
  12604. Video.prototype.clickHandler = function () {
  12605. // 弹出 panel
  12606. this.createPanel('');
  12607. };
  12608. /**
  12609. * 创建 panel
  12610. * @param link 链接
  12611. */
  12612. Video.prototype.createPanel = function (iframe) {
  12613. var conf = create_panel_conf_1["default"](this.editor, iframe);
  12614. var panel = new Panel_1["default"](this, conf);
  12615. panel.create();
  12616. };
  12617. /**
  12618. * 尝试修改菜单 active 状态
  12619. */
  12620. Video.prototype.tryChangeActive = function () {};
  12621. return Video;
  12622. }(PanelMenu_1["default"]);
  12623. exports["default"] = Video;
  12624. /***/ }),
  12625. /* 340 */
  12626. /***/ (function(module, exports, __webpack_require__) {
  12627. "use strict";
  12628. /**
  12629. * @description video 菜单 panel tab 配置
  12630. * @author tonghan
  12631. */
  12632. var _interopRequireDefault = __webpack_require__(0);
  12633. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  12634. var _trim = _interopRequireDefault(__webpack_require__(17));
  12635. (0, _defineProperty["default"])(exports, "__esModule", {
  12636. value: true
  12637. });
  12638. var tslib_1 = __webpack_require__(2);
  12639. var util_1 = __webpack_require__(6);
  12640. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  12641. var upload_video_1 = tslib_1.__importDefault(__webpack_require__(341));
  12642. var const_1 = __webpack_require__(7);
  12643. function default_1(editor, video) {
  12644. var config = editor.config;
  12645. var uploadVideo = new upload_video_1["default"](editor); // panel 中需要用到的id
  12646. var inputIFrameId = util_1.getRandom('input-iframe');
  12647. var btnOkId = util_1.getRandom('btn-ok');
  12648. var inputUploadId = util_1.getRandom('input-upload');
  12649. var btnStartId = util_1.getRandom('btn-local-ok');
  12650. /**
  12651. * 插入链接
  12652. * @param iframe html标签
  12653. */
  12654. function insertVideo(video) {
  12655. editor.cmd["do"]('insertHTML', video + const_1.EMPTY_P); // video添加后的回调
  12656. editor.config.onlineVideoCallback(video);
  12657. }
  12658. /**
  12659. * 校验在线视频链接
  12660. * @param video 在线视频链接
  12661. */
  12662. function checkOnlineVideo(video) {
  12663. // 查看开发者自定义配置的返回值
  12664. var check = editor.config.onlineVideoCheck(video);
  12665. if (check === true) {
  12666. return true;
  12667. }
  12668. if (typeof check === 'string') {
  12669. //用户未能通过开发者的校验,开发者希望我们提示这一字符串
  12670. editor.config.customAlert(check, 'error');
  12671. }
  12672. return false;
  12673. } // tabs配置
  12674. // const fileMultipleAttr = config.uploadVideoMaxLength === 1 ? '' : 'multiple="multiple"'
  12675. var tabsConf = [{
  12676. // tab 的标题
  12677. title: editor.i18next.t('menus.panelMenus.video.上传视频'),
  12678. tpl: "<div class=\"w-e-up-video-container\">\n <div id=\"" + btnStartId + "\" class=\"w-e-up-btn\">\n <i class=\"w-e-icon-upload2\"></i>\n </div>\n <div style=\"display:none;\">\n <input id=\"" + inputUploadId + "\" type=\"file\" accept=\"video/*\"/>\n </div>\n </div>",
  12679. events: [// 触发选择视频
  12680. {
  12681. selector: '#' + btnStartId,
  12682. type: 'click',
  12683. fn: function fn() {
  12684. var $file = dom_core_1["default"]('#' + inputUploadId);
  12685. var fileElem = $file.elems[0];
  12686. if (fileElem) {
  12687. fileElem.click();
  12688. } else {
  12689. // 返回 true 可关闭 panel
  12690. return true;
  12691. }
  12692. }
  12693. }, // 选择视频完毕
  12694. {
  12695. selector: '#' + inputUploadId,
  12696. type: 'change',
  12697. fn: function fn() {
  12698. var $file = dom_core_1["default"]('#' + inputUploadId);
  12699. var fileElem = $file.elems[0];
  12700. if (!fileElem) {
  12701. // 返回 true 可关闭 panel
  12702. return true;
  12703. } // 获取选中的 file 对象列表
  12704. var fileList = fileElem.files;
  12705. if (fileList.length) {
  12706. uploadVideo.uploadVideo(fileList);
  12707. } // 返回 true 可关闭 panel
  12708. return true;
  12709. }
  12710. }]
  12711. }, {
  12712. // tab 的标题
  12713. title: editor.i18next.t('menus.panelMenus.video.插入视频'),
  12714. // 模板
  12715. tpl: "<div>\n <input \n id=\"" + inputIFrameId + "\" \n type=\"text\" \n class=\"block\" \n placeholder=\"" + editor.i18next.t('如') + "\uFF1A<iframe src=... ></iframe>\"/>\n </td>\n <div class=\"w-e-button-container\">\n <button type=\"button\" id=\"" + btnOkId + "\" class=\"right\">\n " + editor.i18next.t('插入') + "\n </button>\n </div>\n </div>",
  12716. // 事件绑定
  12717. events: [// 插入视频
  12718. {
  12719. selector: '#' + btnOkId,
  12720. type: 'click',
  12721. fn: function fn() {
  12722. var _context;
  12723. // 执行插入视频
  12724. var $video = dom_core_1["default"]('#' + inputIFrameId);
  12725. var video = (0, _trim["default"])(_context = $video.val()).call(_context); // 视频为空,则不插入
  12726. if (!video) return; // 对当前用户插入的内容进行判断,插入为空,或者返回false,都停止插入
  12727. if (!checkOnlineVideo(video)) return;
  12728. insertVideo(video); // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭
  12729. return true;
  12730. },
  12731. bindEnter: true
  12732. }]
  12733. }];
  12734. var conf = {
  12735. width: 300,
  12736. height: 0,
  12737. // panel 中可包含多个 tab
  12738. tabs: []
  12739. }; // 显示“上传视频”
  12740. if (window.FileReader && (config.uploadVideoServer || config.customUploadVideo)) {
  12741. conf.tabs.push(tabsConf[0]);
  12742. } // 显示“插入视频”
  12743. if (config.showLinkVideo) {
  12744. conf.tabs.push(tabsConf[1]);
  12745. }
  12746. return conf;
  12747. }
  12748. exports["default"] = default_1;
  12749. /***/ }),
  12750. /* 341 */
  12751. /***/ (function(module, exports, __webpack_require__) {
  12752. "use strict";
  12753. /**
  12754. * @description 上传视频
  12755. * @author lichunlin
  12756. */
  12757. var _interopRequireDefault = __webpack_require__(0);
  12758. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  12759. var _some = _interopRequireDefault(__webpack_require__(133));
  12760. var _bind = _interopRequireDefault(__webpack_require__(57));
  12761. var _forEach = _interopRequireDefault(__webpack_require__(4));
  12762. var _indexOf = _interopRequireDefault(__webpack_require__(27));
  12763. (0, _defineProperty["default"])(exports, "__esModule", {
  12764. value: true
  12765. });
  12766. var tslib_1 = __webpack_require__(2);
  12767. var util_1 = __webpack_require__(6);
  12768. var upload_core_1 = tslib_1.__importDefault(__webpack_require__(135));
  12769. var progress_1 = tslib_1.__importDefault(__webpack_require__(136));
  12770. var const_1 = __webpack_require__(7);
  12771. var util_2 = __webpack_require__(6);
  12772. var UploadVideo =
  12773. /** @class */
  12774. function () {
  12775. function UploadVideo(editor) {
  12776. this.editor = editor;
  12777. }
  12778. /**
  12779. * 上传视频
  12780. * @param files 文件列表
  12781. */
  12782. UploadVideo.prototype.uploadVideo = function (files) {
  12783. var _this = this;
  12784. if (!files.length) {
  12785. return;
  12786. }
  12787. var editor = this.editor;
  12788. var config = editor.config; // ------------------------------ i18next ------------------------------
  12789. var i18nPrefix = 'validate.';
  12790. var t = function t(text) {
  12791. return editor.i18next.t(i18nPrefix + text);
  12792. }; // ------------------------------ 获取配置信息 ------------------------------
  12793. // 服务端地址
  12794. var uploadVideoServer = config.uploadVideoServer; // 上传视频的最大体积,默认 1024M
  12795. var maxSize = config.uploadVideoMaxSize;
  12796. var uploadVideoMaxSize = maxSize / 1024; // 一次最多上传多少个视频
  12797. // const uploadVideoMaxLength = config.uploadVideoMaxLength
  12798. // 自定义上传视频的名称
  12799. var uploadVideoName = config.uploadVideoName; // 上传视频自定义参数
  12800. var uploadVideoParams = config.uploadVideoParams; // 自定义参数拼接到 url 中
  12801. var uploadVideoParamsWithUrl = config.uploadVideoParamsWithUrl; // 上传视频自定义 header
  12802. var uploadVideoHeaders = config.uploadVideoHeaders; // 钩子函数
  12803. var uploadVideoHooks = config.uploadVideoHooks; // 上传视频超时时间 ms 默认2个小时
  12804. var uploadVideoTimeout = config.uploadVideoTimeout; // 跨域带 cookie
  12805. var withVideoCredentials = config.withVideoCredentials; // 自定义上传
  12806. var customUploadVideo = config.customUploadVideo; // 格式校验
  12807. var uploadVideoAccept = config.uploadVideoAccept; // ------------------------------ 验证文件信息 ------------------------------
  12808. var resultFiles = [];
  12809. var errInfos = [];
  12810. util_1.arrForEach(files, function (file) {
  12811. var name = file.name;
  12812. var size = file.size / 1024 / 1024; // chrome 低版本 name === undefined
  12813. if (!name || !size) {
  12814. return;
  12815. }
  12816. if (!(uploadVideoAccept instanceof Array)) {
  12817. // 格式不是数组
  12818. errInfos.push("\u3010" + uploadVideoAccept + "\u3011" + t('uploadVideoAccept 不是Array'));
  12819. return;
  12820. }
  12821. if (!(0, _some["default"])(uploadVideoAccept).call(uploadVideoAccept, function (item) {
  12822. return item === name.split('.')[name.split('.').length - 1];
  12823. })) {
  12824. // 后缀名不合法,不是视频
  12825. errInfos.push("\u3010" + name + "\u3011" + t('不是视频'));
  12826. return;
  12827. }
  12828. if (uploadVideoMaxSize < size) {
  12829. // 上传视频过大
  12830. errInfos.push("\u3010" + name + "\u3011" + t('大于') + " " + uploadVideoMaxSize + "M");
  12831. return;
  12832. } //验证通过的加入结果列表
  12833. resultFiles.push(file);
  12834. }); // 抛出验证信息
  12835. if (errInfos.length) {
  12836. config.customAlert(t('视频验证未通过') + ": \n" + errInfos.join('\n'), 'warning');
  12837. return;
  12838. } // 如果过滤后文件列表为空直接返回
  12839. if (resultFiles.length === 0) {
  12840. config.customAlert(t('传入的文件不合法'), 'warning');
  12841. return;
  12842. } // ------------------------------ 自定义上传 ------------------------------
  12843. if (customUploadVideo && typeof customUploadVideo === 'function') {
  12844. var _context;
  12845. customUploadVideo(resultFiles, (0, _bind["default"])(_context = this.insertVideo).call(_context, this));
  12846. return;
  12847. } // 添加视频数据
  12848. var formData = new FormData();
  12849. (0, _forEach["default"])(resultFiles).call(resultFiles, function (file, index) {
  12850. var name = uploadVideoName || file.name;
  12851. if (resultFiles.length > 1) {
  12852. // 多个文件时,filename 不能重复
  12853. name = name + (index + 1);
  12854. }
  12855. formData.append(name, file);
  12856. }); // ------------------------------ 上传视频 ------------------------------
  12857. //添加自定义参数 基于有服务端地址的情况下
  12858. if (uploadVideoServer) {
  12859. // 添加自定义参数
  12860. var uploadVideoServerArr = uploadVideoServer.split('#');
  12861. uploadVideoServer = uploadVideoServerArr[0];
  12862. var uploadVideoServerHash = uploadVideoServerArr[1] || '';
  12863. (0, _forEach["default"])(util_1).call(util_1, uploadVideoParams, function (key, val) {
  12864. // 因使用者反应,自定义参数不能默认 encode ,由 v3.1.1 版本开始注释掉
  12865. // val = encodeURIComponent(val)
  12866. // 第一,将参数拼接到 url 中
  12867. if (uploadVideoParamsWithUrl) {
  12868. if ((0, _indexOf["default"])(uploadVideoServer).call(uploadVideoServer, '?') > 0) {
  12869. uploadVideoServer += '&';
  12870. } else {
  12871. uploadVideoServer += '?';
  12872. }
  12873. uploadVideoServer = uploadVideoServer + key + '=' + val;
  12874. } // 第二,将参数添加到 formData 中
  12875. formData.append(key, val);
  12876. });
  12877. if (uploadVideoServerHash) {
  12878. uploadVideoServer += '#' + uploadVideoServerHash;
  12879. } // 开始上传
  12880. var xhr = upload_core_1["default"](uploadVideoServer, {
  12881. timeout: uploadVideoTimeout,
  12882. formData: formData,
  12883. headers: uploadVideoHeaders,
  12884. withCredentials: !!withVideoCredentials,
  12885. beforeSend: function beforeSend(xhr) {
  12886. if (uploadVideoHooks.before) return uploadVideoHooks.before(xhr, editor, resultFiles);
  12887. },
  12888. onTimeout: function onTimeout(xhr) {
  12889. config.customAlert(t('上传视频超时'), 'error');
  12890. if (uploadVideoHooks.timeout) uploadVideoHooks.timeout(xhr, editor);
  12891. },
  12892. onProgress: function onProgress(percent, e) {
  12893. var progressBar = new progress_1["default"](editor);
  12894. if (e.lengthComputable) {
  12895. percent = e.loaded / e.total;
  12896. progressBar.show(percent);
  12897. }
  12898. },
  12899. onError: function onError(xhr) {
  12900. config.customAlert(t('上传视频错误'), 'error', t('上传视频错误') + "\uFF0C" + t('服务器返回状态') + ": " + xhr.status);
  12901. if (uploadVideoHooks.error) uploadVideoHooks.error(xhr, editor);
  12902. },
  12903. onFail: function onFail(xhr, resultStr) {
  12904. config.customAlert(t('上传视频失败'), 'error', t('上传视频返回结果错误') + ("\uFF0C" + t('返回结果') + ": ") + resultStr);
  12905. if (uploadVideoHooks.fail) uploadVideoHooks.fail(xhr, editor, resultStr);
  12906. },
  12907. onSuccess: function onSuccess(xhr, result) {
  12908. if (uploadVideoHooks.customInsert) {
  12909. var _context2;
  12910. // 自定义插入视频
  12911. uploadVideoHooks.customInsert((0, _bind["default"])(_context2 = _this.insertVideo).call(_context2, _this), result, editor);
  12912. return;
  12913. }
  12914. if (result.errno != '0') {
  12915. // 返回格式不对,应该为 { errno: 0, data: [...] }
  12916. config.customAlert(t('上传视频失败'), 'error', t('上传视频返回结果错误') + "\uFF0C" + t('返回结果') + " errno=" + result.errno);
  12917. if (uploadVideoHooks.fail) uploadVideoHooks.fail(xhr, editor, result);
  12918. return;
  12919. } // 成功,插入视频
  12920. var data = result.data;
  12921. _this.insertVideo(data.url); // 钩子函数
  12922. if (uploadVideoHooks.success) uploadVideoHooks.success(xhr, editor, result);
  12923. }
  12924. });
  12925. if (typeof xhr === 'string') {
  12926. // 上传被阻止
  12927. config.customAlert(xhr, 'error');
  12928. }
  12929. }
  12930. };
  12931. /**
  12932. * 往编辑器区域插入视频
  12933. * @param url 视频访问地址
  12934. */
  12935. UploadVideo.prototype.insertVideo = function (url) {
  12936. var editor = this.editor;
  12937. var config = editor.config;
  12938. var i18nPrefix = 'validate.';
  12939. var t = function t(text, prefix) {
  12940. if (prefix === void 0) {
  12941. prefix = i18nPrefix;
  12942. }
  12943. return editor.i18next.t(prefix + text);
  12944. }; // 判断用户是否自定义插入视频
  12945. if (!config.customInsertVideo) {
  12946. if (util_2.UA.isFirefox) {
  12947. editor.cmd["do"]('insertHTML', "<p data-we-video-p=\"true\"><video src=\"" + url + "\" controls=\"controls\" style=\"max-width:100%\"></video></p><p>&#8203</p>");
  12948. } else {
  12949. editor.cmd["do"]('insertHTML', "<video src=\"" + url + "\" controls=\"controls\" style=\"max-width:100%\"></video>" + const_1.EMPTY_P);
  12950. }
  12951. } else {
  12952. config.customInsertVideo(url);
  12953. return;
  12954. } // 加载视频
  12955. var video = document.createElement('video');
  12956. video.onload = function () {
  12957. video = null;
  12958. };
  12959. video.onerror = function () {
  12960. config.customAlert(t('插入视频错误'), 'error', "wangEditor: " + t('插入视频错误') + "\uFF0C" + t('视频链接') + " \"" + url + "\"\uFF0C" + t('下载链接失败'));
  12961. video = null;
  12962. };
  12963. video.onabort = function () {
  12964. return video = null;
  12965. };
  12966. video.src = url;
  12967. };
  12968. return UploadVideo;
  12969. }();
  12970. exports["default"] = UploadVideo;
  12971. /***/ }),
  12972. /* 342 */
  12973. /***/ (function(module, exports, __webpack_require__) {
  12974. module.exports = __webpack_require__(343);
  12975. /***/ }),
  12976. /* 343 */
  12977. /***/ (function(module, exports, __webpack_require__) {
  12978. var parent = __webpack_require__(344);
  12979. module.exports = parent;
  12980. /***/ }),
  12981. /* 344 */
  12982. /***/ (function(module, exports, __webpack_require__) {
  12983. __webpack_require__(345);
  12984. var path = __webpack_require__(9);
  12985. module.exports = path.Date.now;
  12986. /***/ }),
  12987. /* 345 */
  12988. /***/ (function(module, exports, __webpack_require__) {
  12989. var $ = __webpack_require__(5);
  12990. // `Date.now` method
  12991. // https://tc39.github.io/ecma262/#sec-date.now
  12992. $({ target: 'Date', stat: true }, {
  12993. now: function now() {
  12994. return new Date().getTime();
  12995. }
  12996. });
  12997. /***/ }),
  12998. /* 346 */
  12999. /***/ (function(module, exports, __webpack_require__) {
  13000. "use strict";
  13001. /**
  13002. * @description 绑定视频的事件
  13003. * @author lichunlin
  13004. */
  13005. var _interopRequireDefault = __webpack_require__(0);
  13006. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  13007. (0, _defineProperty["default"])(exports, "__esModule", {
  13008. value: true
  13009. });
  13010. var tslib_1 = __webpack_require__(2);
  13011. var tooltip_event_1 = tslib_1.__importDefault(__webpack_require__(347));
  13012. var keyboard_1 = tslib_1.__importDefault(__webpack_require__(349));
  13013. /**
  13014. * 绑定事件
  13015. * @param editor 编辑器实例
  13016. */
  13017. function bindEvent(editor) {
  13018. //Tooltip
  13019. tooltip_event_1["default"](editor);
  13020. keyboard_1["default"](editor);
  13021. }
  13022. exports["default"] = bindEvent;
  13023. /***/ }),
  13024. /* 347 */
  13025. /***/ (function(module, exports, __webpack_require__) {
  13026. "use strict";
  13027. /**
  13028. * @description tooltip 事件
  13029. * @author lichunlin
  13030. */
  13031. var _interopRequireDefault = __webpack_require__(0);
  13032. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  13033. (0, _defineProperty["default"])(exports, "__esModule", {
  13034. value: true
  13035. });
  13036. exports.createShowHideFn = void 0;
  13037. var tslib_1 = __webpack_require__(2);
  13038. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  13039. var Tooltip_1 = tslib_1.__importDefault(__webpack_require__(39));
  13040. var video_alignment_1 = tslib_1.__importDefault(__webpack_require__(348));
  13041. /**
  13042. * 生成 Tooltip 的显示隐藏函数
  13043. */
  13044. function createShowHideFn(editor) {
  13045. var tooltip;
  13046. var t = function t(text, prefix) {
  13047. if (prefix === void 0) {
  13048. prefix = '';
  13049. }
  13050. return editor.i18next.t(prefix + text);
  13051. };
  13052. /**
  13053. * 显示 tooltip
  13054. * @param $node 链接元素
  13055. */
  13056. function showVideoTooltip($node) {
  13057. var conf = [{
  13058. $elem: dom_core_1["default"]("<span class='w-e-icon-trash-o'></span>"),
  13059. onClick: function onClick(editor, $node) {
  13060. // 选中video元素 删除
  13061. $node.remove(); // 返回 true,表示执行完之后,隐藏 tooltip。否则不隐藏。
  13062. return true;
  13063. }
  13064. }, {
  13065. $elem: dom_core_1["default"]('<span>100%</span>'),
  13066. onClick: function onClick(editor, $node) {
  13067. $node.attr('width', '100%');
  13068. $node.removeAttr('height'); // 返回 true,表示执行完之后,隐藏 tooltip。否则不隐藏。
  13069. return true;
  13070. }
  13071. }, {
  13072. $elem: dom_core_1["default"]('<span>50%</span>'),
  13073. onClick: function onClick(editor, $node) {
  13074. $node.attr('width', '50%');
  13075. $node.removeAttr('height'); // 返回 true,表示执行完之后,隐藏 tooltip。否则不隐藏。
  13076. return true;
  13077. }
  13078. }, {
  13079. $elem: dom_core_1["default"]('<span>30%</span>'),
  13080. onClick: function onClick(editor, $node) {
  13081. $node.attr('width', '30%');
  13082. $node.removeAttr('height'); // 返回 true,表示执行完之后,隐藏 tooltip。否则不隐藏。
  13083. return true;
  13084. }
  13085. }, {
  13086. $elem: dom_core_1["default"]("<span>" + t('重置') + "</span>"),
  13087. onClick: function onClick(editor, $node) {
  13088. $node.removeAttr('width');
  13089. $node.removeAttr('height'); // 返回 true,表示执行完之后,隐藏 tooltip。否则不隐藏。
  13090. return true;
  13091. }
  13092. }, {
  13093. $elem: dom_core_1["default"]("<span>" + t('menus.justify.靠左') + "</span>"),
  13094. onClick: function onClick(editor, $node) {
  13095. // 获取顶级元素
  13096. video_alignment_1["default"]($node, 'left'); // 返回 true,表示执行完之后,隐藏 tooltip。否则不隐藏。
  13097. return true;
  13098. }
  13099. }, {
  13100. $elem: dom_core_1["default"]("<span>" + t('menus.justify.居中') + "</span>"),
  13101. onClick: function onClick(editor, $node) {
  13102. // 获取顶级元素
  13103. video_alignment_1["default"]($node, 'center'); // 返回 true,表示执行完之后,隐藏 tooltip。否则不隐藏。
  13104. return true;
  13105. }
  13106. }, {
  13107. $elem: dom_core_1["default"]("<span>" + t('menus.justify.靠右') + "</span>"),
  13108. onClick: function onClick(editor, $node) {
  13109. // 获取顶级元素
  13110. video_alignment_1["default"]($node, 'right'); // 返回 true,表示执行完之后,隐藏 tooltip。否则不隐藏。
  13111. return true;
  13112. }
  13113. }];
  13114. tooltip = new Tooltip_1["default"](editor, $node, conf);
  13115. tooltip.create();
  13116. }
  13117. /**
  13118. * 隐藏 tooltip
  13119. */
  13120. function hideVideoTooltip() {
  13121. // 移除 tooltip
  13122. if (tooltip) {
  13123. tooltip.remove();
  13124. tooltip = null;
  13125. }
  13126. }
  13127. return {
  13128. showVideoTooltip: showVideoTooltip,
  13129. hideVideoTooltip: hideVideoTooltip
  13130. };
  13131. }
  13132. exports.createShowHideFn = createShowHideFn;
  13133. /**
  13134. * 绑定 tooltip 事件
  13135. * @param editor 编辑器实例
  13136. */
  13137. function bindTooltipEvent(editor) {
  13138. var _a = createShowHideFn(editor),
  13139. showVideoTooltip = _a.showVideoTooltip,
  13140. hideVideoTooltip = _a.hideVideoTooltip; // 点击视频元素是,显示 tooltip
  13141. editor.txt.eventHooks.videoClickEvents.push(showVideoTooltip); // 点击其他地方,或者滚动时,隐藏 tooltip
  13142. editor.txt.eventHooks.clickEvents.push(hideVideoTooltip);
  13143. editor.txt.eventHooks.keyupEvents.push(hideVideoTooltip);
  13144. editor.txt.eventHooks.toolbarClickEvents.push(hideVideoTooltip);
  13145. editor.txt.eventHooks.menuClickEvents.push(hideVideoTooltip);
  13146. editor.txt.eventHooks.textScrollEvents.push(hideVideoTooltip); // change 时隐藏
  13147. editor.txt.eventHooks.changeEvents.push(hideVideoTooltip);
  13148. }
  13149. exports["default"] = bindTooltipEvent;
  13150. /***/ }),
  13151. /* 348 */
  13152. /***/ (function(module, exports, __webpack_require__) {
  13153. "use strict";
  13154. /**
  13155. * @description 视频布局 事件
  13156. * @author lichunlin
  13157. */
  13158. var _interopRequireDefault = __webpack_require__(0);
  13159. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  13160. var _includes = _interopRequireDefault(__webpack_require__(28));
  13161. (0, _defineProperty["default"])(exports, "__esModule", {
  13162. value: true
  13163. });
  13164. var tslib_1 = __webpack_require__(2);
  13165. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3)); // 设置布局方式
  13166. function setAlignment($node, value) {
  13167. // 设置顶级元素匹配
  13168. var NODENAME = ['P']; // 获取匹配得顶级元素
  13169. var topNode = getSelectedTopNode($node, NODENAME); // 判断是否存在
  13170. if (topNode) {
  13171. dom_core_1["default"](topNode).css('text-align', value);
  13172. }
  13173. }
  13174. exports["default"] = setAlignment;
  13175. /**
  13176. * 获取选中的元素的顶级元素
  13177. * @params el 选中的元素
  13178. * @params tag 匹配顶级的元素 如 P LI ....
  13179. */
  13180. function getSelectedTopNode(el, tag) {
  13181. var _a;
  13182. var parentNode = el.elems[0]; // 可能出现嵌套的情况,所以一级一级向上找,找到指定得顶级元素
  13183. while (parentNode != null) {
  13184. if ((0, _includes["default"])(tag).call(tag, parentNode === null || parentNode === void 0 ? void 0 : parentNode.nodeName)) {
  13185. return parentNode;
  13186. } // 兜底 body
  13187. if (((_a = parentNode === null || parentNode === void 0 ? void 0 : parentNode.parentNode) === null || _a === void 0 ? void 0 : _a.nodeName) === 'BODY') {
  13188. return null;
  13189. }
  13190. parentNode = parentNode.parentNode;
  13191. }
  13192. return parentNode;
  13193. }
  13194. /***/ }),
  13195. /* 349 */
  13196. /***/ (function(module, exports, __webpack_require__) {
  13197. "use strict";
  13198. var _interopRequireDefault = __webpack_require__(0);
  13199. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  13200. (0, _defineProperty["default"])(exports, "__esModule", {
  13201. value: true
  13202. });
  13203. var util_1 = __webpack_require__(6);
  13204. function bindEventKeyboardEvent(editor) {
  13205. if (!util_1.UA.isFirefox) return;
  13206. var txt = editor.txt,
  13207. selection = editor.selection;
  13208. var keydownEvents = txt.eventHooks.keydownEvents;
  13209. keydownEvents.push(function (e) {
  13210. // 实时保存选区
  13211. // editor.selection.saveRange()
  13212. var $selectionContainerElem = selection.getSelectionContainerElem();
  13213. if ($selectionContainerElem) {
  13214. var $topElem = $selectionContainerElem.getNodeTop(editor);
  13215. var $preElem = $topElem.length ? $topElem.prev().length ? $topElem.prev() : null : null;
  13216. if ($preElem && $preElem.attr('data-we-video-p')) {
  13217. // 光标处于选区开头
  13218. if (selection.getCursorPos() === 0) {
  13219. // 如果上一个dom是包含video, 按下删除连video一块删除
  13220. if (e.keyCode === 8) {
  13221. $preElem.remove();
  13222. }
  13223. }
  13224. }
  13225. }
  13226. });
  13227. }
  13228. exports["default"] = bindEventKeyboardEvent;
  13229. /***/ }),
  13230. /* 350 */
  13231. /***/ (function(module, exports, __webpack_require__) {
  13232. "use strict";
  13233. /**
  13234. * @description 插入、上传图片
  13235. * @author wangfupeng
  13236. */
  13237. var _interopRequireDefault = __webpack_require__(0);
  13238. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  13239. var _map = _interopRequireDefault(__webpack_require__(26));
  13240. (0, _defineProperty["default"])(exports, "__esModule", {
  13241. value: true
  13242. });
  13243. var tslib_1 = __webpack_require__(2);
  13244. var const_1 = __webpack_require__(7);
  13245. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  13246. var Panel_1 = tslib_1.__importDefault(__webpack_require__(33));
  13247. var PanelMenu_1 = tslib_1.__importDefault(__webpack_require__(38));
  13248. var index_1 = tslib_1.__importDefault(__webpack_require__(351));
  13249. var create_panel_conf_1 = tslib_1.__importDefault(__webpack_require__(364));
  13250. var Image =
  13251. /** @class */
  13252. function (_super) {
  13253. tslib_1.__extends(Image, _super);
  13254. function Image(editor) {
  13255. var _this = this;
  13256. var $elem = dom_core_1["default"]('<div class="w-e-menu" data-title="图片"><i class="w-e-icon-image"></i></div>');
  13257. var imgPanelConfig = create_panel_conf_1["default"](editor);
  13258. if (imgPanelConfig.onlyUploadConf) {
  13259. var _context;
  13260. $elem = imgPanelConfig.onlyUploadConf.$elem;
  13261. (0, _map["default"])(_context = imgPanelConfig.onlyUploadConf.events).call(_context, function (event) {
  13262. var type = event.type;
  13263. var fn = event.fn || const_1.EMPTY_FN;
  13264. $elem.on(type, function (e) {
  13265. e.stopPropagation();
  13266. fn(e);
  13267. });
  13268. });
  13269. }
  13270. _this = _super.call(this, $elem, editor) || this;
  13271. _this.imgPanelConfig = imgPanelConfig; // 绑定事件,如粘贴图片
  13272. index_1["default"](editor);
  13273. return _this;
  13274. }
  13275. /**
  13276. * 菜单点击事件
  13277. */
  13278. Image.prototype.clickHandler = function () {
  13279. if (!this.imgPanelConfig.onlyUploadConf) {
  13280. this.createPanel();
  13281. }
  13282. };
  13283. /**
  13284. * 创建 panel
  13285. */
  13286. Image.prototype.createPanel = function () {
  13287. var conf = this.imgPanelConfig;
  13288. var panel = new Panel_1["default"](this, conf);
  13289. this.setPanel(panel);
  13290. panel.create();
  13291. };
  13292. /**
  13293. * 尝试修改菜单 active 状态
  13294. */
  13295. Image.prototype.tryChangeActive = function () {};
  13296. return Image;
  13297. }(PanelMenu_1["default"]);
  13298. exports["default"] = Image;
  13299. /***/ }),
  13300. /* 351 */
  13301. /***/ (function(module, exports, __webpack_require__) {
  13302. "use strict";
  13303. /**
  13304. * @description 绑定图片的事件
  13305. * @author wangfupeng
  13306. */
  13307. var _interopRequireDefault = __webpack_require__(0);
  13308. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  13309. (0, _defineProperty["default"])(exports, "__esModule", {
  13310. value: true
  13311. });
  13312. var tslib_1 = __webpack_require__(2);
  13313. var paste_img_1 = tslib_1.__importDefault(__webpack_require__(352));
  13314. var drop_img_1 = tslib_1.__importDefault(__webpack_require__(353));
  13315. var drag_size_1 = tslib_1.__importDefault(__webpack_require__(354));
  13316. var tooltip_event_1 = tslib_1.__importDefault(__webpack_require__(362));
  13317. var keyboard_event_1 = tslib_1.__importDefault(__webpack_require__(363));
  13318. /**
  13319. * 绑定事件
  13320. * @param editor 编辑器实例
  13321. */
  13322. function bindEvent(editor) {
  13323. // 粘贴图片
  13324. paste_img_1["default"](editor); // 拖拽图片
  13325. drop_img_1["default"](editor); // 可再扩展其他事件...如图片 tooltip 等
  13326. // 拖拽图片尺寸
  13327. drag_size_1["default"](editor); //Tooltip
  13328. tooltip_event_1["default"](editor);
  13329. keyboard_event_1["default"](editor);
  13330. }
  13331. exports["default"] = bindEvent;
  13332. /***/ }),
  13333. /* 352 */
  13334. /***/ (function(module, exports, __webpack_require__) {
  13335. "use strict";
  13336. /**
  13337. * @description 粘贴图片
  13338. * @author wangfupeng
  13339. */
  13340. var _interopRequireDefault = __webpack_require__(0);
  13341. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  13342. (0, _defineProperty["default"])(exports, "__esModule", {
  13343. value: true
  13344. });
  13345. var tslib_1 = __webpack_require__(2);
  13346. var paste_event_1 = __webpack_require__(131);
  13347. var upload_img_1 = tslib_1.__importDefault(__webpack_require__(97));
  13348. /**
  13349. * 剪切板是否有 text 或者 html ?
  13350. * @param editor 编辑器对象
  13351. * @param e 粘贴事件参数
  13352. */
  13353. function _haveTextOrHtml(editor, e) {
  13354. var config = editor.config;
  13355. var pasteFilterStyle = config.pasteFilterStyle;
  13356. var pasteIgnoreImg = config.pasteIgnoreImg;
  13357. var pasteHtml = paste_event_1.getPasteHtml(e, pasteFilterStyle, pasteIgnoreImg);
  13358. if (pasteHtml) return true;
  13359. var pasteText = paste_event_1.getPasteText(e);
  13360. if (pasteText) return true;
  13361. return false; // text html 都没有,则返回 false
  13362. }
  13363. /**
  13364. * 剪切板是否有 Files
  13365. * @param editor 编辑器对象
  13366. * @param e 粘贴事件参数
  13367. */
  13368. function _haveFiles(editor, e) {
  13369. var _a;
  13370. var types = ((_a = e.clipboardData) === null || _a === void 0 ? void 0 : _a.types) || [];
  13371. for (var i = 0; i < types.length; i++) {
  13372. var type = types[i];
  13373. if (type === 'Files') {
  13374. return true;
  13375. }
  13376. }
  13377. return false;
  13378. }
  13379. /**
  13380. * 粘贴图片事件方法
  13381. * @param e 事件参数
  13382. */
  13383. function pasteImgHandler(e, editor) {
  13384. // 粘贴过来的没有 file 时,判断 text 或者 html
  13385. if (!_haveFiles(editor, e)) {
  13386. if (_haveTextOrHtml(editor, e)) {
  13387. // 粘贴过来的有 text 或者 html ,则不执行粘贴图片逻辑
  13388. return;
  13389. }
  13390. } // 获取粘贴的图片列表
  13391. var pastedFiles = paste_event_1.getPasteImgs(e);
  13392. if (!pastedFiles.length) {
  13393. return;
  13394. } // code 中忽略(暂不管它)
  13395. // 执行上传
  13396. var uploadImg = new upload_img_1["default"](editor);
  13397. uploadImg.uploadImg(pastedFiles);
  13398. }
  13399. /**
  13400. * 粘贴图片
  13401. * @param editor 编辑器对象
  13402. * @param pasteEvents 粘贴事件列表
  13403. */
  13404. function bindPasteImg(editor) {
  13405. /**
  13406. * 绑定 paste 事件
  13407. * 这里使用了unshift,以前是push
  13408. * 在以前的流程中,pasteImgHandler触发之前,会调用到window.getSelection().removeAllRanges()
  13409. * 会导致性能变差。在编辑器中粘贴,粘贴耗时多了100+ms,根本原因未知
  13410. * 最小复现demo,在div内粘贴图片就可以看到getData耗时异常得长
  13411. * <html>
  13412. * <div id="a" contenteditable="true"></div>
  13413. * <script>
  13414. * const div = document.getElementById('a')
  13415. * div.addEventListener('paste', (e) => {
  13416. * window.getSelection().removeAllRanges()
  13417. * e.clipboardData.getData('text/html')
  13418. * })
  13419. * </script>
  13420. * </html>
  13421. * 因此改成unshift,先触发pasteImgHandler就不会有性能问题
  13422. */
  13423. editor.txt.eventHooks.pasteEvents.unshift(function (e) {
  13424. pasteImgHandler(e, editor);
  13425. });
  13426. }
  13427. exports["default"] = bindPasteImg;
  13428. /***/ }),
  13429. /* 353 */
  13430. /***/ (function(module, exports, __webpack_require__) {
  13431. "use strict";
  13432. /**
  13433. * @description 拖拽上传图片
  13434. * @author wangfupeng
  13435. */
  13436. var _interopRequireDefault = __webpack_require__(0);
  13437. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  13438. (0, _defineProperty["default"])(exports, "__esModule", {
  13439. value: true
  13440. });
  13441. var tslib_1 = __webpack_require__(2);
  13442. var upload_img_1 = tslib_1.__importDefault(__webpack_require__(97));
  13443. function bindDropImg(editor) {
  13444. /**
  13445. * 拖拽图片的事件
  13446. * @param e 事件参数
  13447. */
  13448. function dropImgHandler(e) {
  13449. var files = e.dataTransfer && e.dataTransfer.files;
  13450. if (!files || !files.length) {
  13451. return;
  13452. } // 上传图片
  13453. var uploadImg = new upload_img_1["default"](editor);
  13454. uploadImg.uploadImg(files);
  13455. } // 绑定 drop 事件
  13456. editor.txt.eventHooks.dropEvents.push(dropImgHandler);
  13457. }
  13458. exports["default"] = bindDropImg;
  13459. /***/ }),
  13460. /* 354 */
  13461. /***/ (function(module, exports, __webpack_require__) {
  13462. "use strict";
  13463. /**
  13464. * @description 图片拖拽事件绑定
  13465. * @author xiaokyo
  13466. */
  13467. var _interopRequireDefault = __webpack_require__(0);
  13468. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  13469. var _find = _interopRequireDefault(__webpack_require__(29));
  13470. var _parseFloat2 = _interopRequireDefault(__webpack_require__(355));
  13471. (0, _defineProperty["default"])(exports, "__esModule", {
  13472. value: true
  13473. });
  13474. exports.createShowHideFn = void 0;
  13475. var tslib_1 = __webpack_require__(2);
  13476. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  13477. __webpack_require__(360);
  13478. var util_1 = __webpack_require__(6);
  13479. /**
  13480. * 设置拖拽框的rect
  13481. * @param $drag drag Dom
  13482. * @param width 要设置的宽度
  13483. * @param height 要设置的高度
  13484. * @param left 要设置的左边
  13485. * @param top 要设置的顶部距离
  13486. */
  13487. function setDragStyle($drag, width, height, left, top) {
  13488. $drag.attr('style', "width:" + width + "px; height:" + height + "px; left:" + left + "px; top:" + top + "px;");
  13489. }
  13490. /**
  13491. * 生成一个图片指定大小的拖拽框
  13492. * @param editor 编辑器实例
  13493. * @param $textContainerElem 编辑框对象
  13494. */
  13495. function createDragBox(editor, $textContainerElem) {
  13496. var $drag = dom_core_1["default"]("<div class=\"w-e-img-drag-mask\">\n <div class=\"w-e-img-drag-show-size\"></div>\n <div class=\"w-e-img-drag-rb\"></div>\n </div>");
  13497. $drag.hide();
  13498. $textContainerElem.append($drag);
  13499. return $drag;
  13500. }
  13501. /**
  13502. * 显示拖拽框并设置宽度
  13503. * @param $textContainerElem 编辑框实例
  13504. * @param $drag 拖拽框对象
  13505. */
  13506. function showDargBox($textContainerElem, $drag, $img) {
  13507. var boxRect = $textContainerElem.getBoundingClientRect();
  13508. var rect = $img.getBoundingClientRect();
  13509. var rectW = rect.width.toFixed(2);
  13510. var rectH = rect.height.toFixed(2);
  13511. (0, _find["default"])($drag).call($drag, '.w-e-img-drag-show-size').text(rectW + "px * " + rectH + "px");
  13512. setDragStyle($drag, (0, _parseFloat2["default"])(rectW), (0, _parseFloat2["default"])(rectH), rect.left - boxRect.left, rect.top - boxRect.top);
  13513. $drag.show();
  13514. }
  13515. /**
  13516. * 生成图片拖拽框的 显示/隐藏 函数
  13517. */
  13518. function createShowHideFn(editor) {
  13519. var $textContainerElem = editor.$textContainerElem;
  13520. var $imgTarget; // 生成拖拽框
  13521. var $drag = createDragBox(editor, $textContainerElem);
  13522. /**
  13523. * 设置拖拽事件
  13524. * @param $drag 拖拽框的domElement
  13525. * @param $textContainerElem 编辑器实例
  13526. */
  13527. function bindDragEvents($drag, $container) {
  13528. $drag.on('click', function (e) {
  13529. e.stopPropagation();
  13530. });
  13531. $drag.on('mousedown', '.w-e-img-drag-rb', function (e) {
  13532. // e.stopPropagation()
  13533. e.preventDefault();
  13534. if (!$imgTarget) return;
  13535. var firstX = e.clientX;
  13536. var firstY = e.clientY;
  13537. var boxRect = $container.getBoundingClientRect();
  13538. var imgRect = $imgTarget.getBoundingClientRect();
  13539. var width = imgRect.width;
  13540. var height = imgRect.height;
  13541. var left = imgRect.left - boxRect.left;
  13542. var top = imgRect.top - boxRect.top;
  13543. var ratio = width / height;
  13544. var setW = width;
  13545. var setH = height;
  13546. var $document = dom_core_1["default"](document);
  13547. function offEvents() {
  13548. $document.off('mousemove', mouseMoveHandler);
  13549. $document.off('mouseup', mouseUpHandler);
  13550. }
  13551. function mouseMoveHandler(ev) {
  13552. ev.stopPropagation();
  13553. ev.preventDefault();
  13554. setW = width + (ev.clientX - firstX);
  13555. setH = height + (ev.clientY - firstY); // 等比计算
  13556. if (setW / setH != ratio) {
  13557. setH = setW / ratio;
  13558. }
  13559. setW = (0, _parseFloat2["default"])(setW.toFixed(2));
  13560. setH = (0, _parseFloat2["default"])(setH.toFixed(2));
  13561. (0, _find["default"])($drag).call($drag, '.w-e-img-drag-show-size').text(setW.toFixed(2).replace('.00', '') + "px * " + setH.toFixed(2).replace('.00', '') + "px");
  13562. setDragStyle($drag, setW, setH, left, top);
  13563. }
  13564. $document.on('mousemove', mouseMoveHandler);
  13565. function mouseUpHandler() {
  13566. $imgTarget.attr('width', setW + '');
  13567. $imgTarget.attr('height', setH + '');
  13568. var newImgRect = $imgTarget.getBoundingClientRect();
  13569. setDragStyle($drag, setW, setH, newImgRect.left - boxRect.left, newImgRect.top - boxRect.top); // 解绑事件
  13570. offEvents();
  13571. }
  13572. $document.on('mouseup', mouseUpHandler); // 解绑事件
  13573. $document.on('mouseleave', offEvents);
  13574. });
  13575. } // 显示拖拽框
  13576. function showDrag($target) {
  13577. if (util_1.UA.isIE()) return false;
  13578. if ($target) {
  13579. $imgTarget = $target;
  13580. showDargBox($textContainerElem, $drag, $imgTarget);
  13581. }
  13582. } // 隐藏拖拽框
  13583. function hideDrag() {
  13584. (0, _find["default"])($textContainerElem).call($textContainerElem, '.w-e-img-drag-mask').hide();
  13585. } // 事件绑定
  13586. bindDragEvents($drag, $textContainerElem); // 后期改成 blur 触发
  13587. dom_core_1["default"](document).on('click', hideDrag);
  13588. editor.beforeDestroy(function () {
  13589. dom_core_1["default"](document).off('click', hideDrag);
  13590. });
  13591. return {
  13592. showDrag: showDrag,
  13593. hideDrag: hideDrag
  13594. };
  13595. }
  13596. exports.createShowHideFn = createShowHideFn;
  13597. /**
  13598. * 点击事件委托
  13599. * @param editor 编辑器实例
  13600. */
  13601. function bindDragImgSize(editor) {
  13602. var _a = createShowHideFn(editor),
  13603. showDrag = _a.showDrag,
  13604. hideDrag = _a.hideDrag; // 显示拖拽框
  13605. editor.txt.eventHooks.imgClickEvents.push(showDrag); // 隐藏拖拽框
  13606. editor.txt.eventHooks.textScrollEvents.push(hideDrag);
  13607. editor.txt.eventHooks.keyupEvents.push(hideDrag);
  13608. editor.txt.eventHooks.toolbarClickEvents.push(hideDrag);
  13609. editor.txt.eventHooks.menuClickEvents.push(hideDrag);
  13610. editor.txt.eventHooks.changeEvents.push(hideDrag);
  13611. }
  13612. exports["default"] = bindDragImgSize;
  13613. /***/ }),
  13614. /* 355 */
  13615. /***/ (function(module, exports, __webpack_require__) {
  13616. module.exports = __webpack_require__(356);
  13617. /***/ }),
  13618. /* 356 */
  13619. /***/ (function(module, exports, __webpack_require__) {
  13620. var parent = __webpack_require__(357);
  13621. module.exports = parent;
  13622. /***/ }),
  13623. /* 357 */
  13624. /***/ (function(module, exports, __webpack_require__) {
  13625. __webpack_require__(358);
  13626. var path = __webpack_require__(9);
  13627. module.exports = path.parseFloat;
  13628. /***/ }),
  13629. /* 358 */
  13630. /***/ (function(module, exports, __webpack_require__) {
  13631. var $ = __webpack_require__(5);
  13632. var parseFloatImplementation = __webpack_require__(359);
  13633. // `parseFloat` method
  13634. // https://tc39.github.io/ecma262/#sec-parsefloat-string
  13635. $({ global: true, forced: parseFloat != parseFloatImplementation }, {
  13636. parseFloat: parseFloatImplementation
  13637. });
  13638. /***/ }),
  13639. /* 359 */
  13640. /***/ (function(module, exports, __webpack_require__) {
  13641. var global = __webpack_require__(8);
  13642. var trim = __webpack_require__(90).trim;
  13643. var whitespaces = __webpack_require__(68);
  13644. var $parseFloat = global.parseFloat;
  13645. var FORCED = 1 / $parseFloat(whitespaces + '-0') !== -Infinity;
  13646. // `parseFloat` method
  13647. // https://tc39.github.io/ecma262/#sec-parsefloat-string
  13648. module.exports = FORCED ? function parseFloat(string) {
  13649. var trimmedString = trim(String(string));
  13650. var result = $parseFloat(trimmedString);
  13651. return result === 0 && trimmedString.charAt(0) == '-' ? -0 : result;
  13652. } : $parseFloat;
  13653. /***/ }),
  13654. /* 360 */
  13655. /***/ (function(module, exports, __webpack_require__) {
  13656. var api = __webpack_require__(20);
  13657. var content = __webpack_require__(361);
  13658. content = content.__esModule ? content.default : content;
  13659. if (typeof content === 'string') {
  13660. content = [[module.i, content, '']];
  13661. }
  13662. var options = {};
  13663. options.insert = "head";
  13664. options.singleton = false;
  13665. var update = api(content, options);
  13666. module.exports = content.locals || {};
  13667. /***/ }),
  13668. /* 361 */
  13669. /***/ (function(module, exports, __webpack_require__) {
  13670. // Imports
  13671. var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(21);
  13672. exports = ___CSS_LOADER_API_IMPORT___(false);
  13673. // Module
  13674. exports.push([module.i, ".w-e-text-container {\n overflow: hidden;\n}\n.w-e-img-drag-mask {\n position: absolute;\n z-index: 1;\n border: 1px dashed #ccc;\n box-sizing: border-box;\n}\n.w-e-img-drag-mask .w-e-img-drag-rb {\n position: absolute;\n right: -5px;\n bottom: -5px;\n width: 16px;\n height: 16px;\n border-radius: 50%;\n background: #ccc;\n cursor: se-resize;\n}\n.w-e-img-drag-mask .w-e-img-drag-show-size {\n min-width: 110px;\n height: 22px;\n line-height: 22px;\n font-size: 14px;\n color: #999;\n position: absolute;\n left: 0;\n top: 0;\n background-color: #999;\n color: #fff;\n border-radius: 2px;\n padding: 0 5px;\n}\n", ""]);
  13675. // Exports
  13676. module.exports = exports;
  13677. /***/ }),
  13678. /* 362 */
  13679. /***/ (function(module, exports, __webpack_require__) {
  13680. "use strict";
  13681. /**
  13682. * @description tooltip 事件
  13683. * @author lichunlin
  13684. */
  13685. var _interopRequireDefault = __webpack_require__(0);
  13686. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  13687. (0, _defineProperty["default"])(exports, "__esModule", {
  13688. value: true
  13689. });
  13690. exports.createShowHideFn = void 0;
  13691. var tslib_1 = __webpack_require__(2);
  13692. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  13693. var Tooltip_1 = tslib_1.__importDefault(__webpack_require__(39));
  13694. /**
  13695. * 生成 Tooltip 的显示隐藏函数
  13696. */
  13697. function createShowHideFn(editor) {
  13698. var tooltip;
  13699. var t = function t(text, prefix) {
  13700. if (prefix === void 0) {
  13701. prefix = '';
  13702. }
  13703. return editor.i18next.t(prefix + text);
  13704. };
  13705. /**
  13706. * 显示 tooltip
  13707. * @param $node 链接元素
  13708. */
  13709. function showImgTooltip($node) {
  13710. var conf = [{
  13711. $elem: dom_core_1["default"]("<span class='w-e-icon-trash-o'></span>"),
  13712. onClick: function onClick(editor, $node) {
  13713. // 选中img元素
  13714. editor.selection.createRangeByElem($node);
  13715. editor.selection.restoreSelection();
  13716. editor.cmd["do"]('delete'); // 返回 true,表示执行完之后,隐藏 tooltip。否则不隐藏。
  13717. return true;
  13718. }
  13719. }, {
  13720. $elem: dom_core_1["default"]('<span>30%</span>'),
  13721. onClick: function onClick(editor, $node) {
  13722. $node.attr('width', '30%');
  13723. $node.removeAttr('height'); // 返回 true,表示执行完之后,隐藏 tooltip。否则不隐藏。
  13724. return true;
  13725. }
  13726. }, {
  13727. $elem: dom_core_1["default"]('<span>50%</span>'),
  13728. onClick: function onClick(editor, $node) {
  13729. $node.attr('width', '50%');
  13730. $node.removeAttr('height'); // 返回 true,表示执行完之后,隐藏 tooltip。否则不隐藏。
  13731. return true;
  13732. }
  13733. }, {
  13734. $elem: dom_core_1["default"]('<span>100%</span>'),
  13735. onClick: function onClick(editor, $node) {
  13736. $node.attr('width', '100%');
  13737. $node.removeAttr('height'); // 返回 true,表示执行完之后,隐藏 tooltip。否则不隐藏。
  13738. return true;
  13739. }
  13740. }];
  13741. conf.push({
  13742. $elem: dom_core_1["default"]("<span>" + t('重置') + "</span>"),
  13743. onClick: function onClick(editor, $node) {
  13744. $node.removeAttr('width');
  13745. $node.removeAttr('height'); // 返回 true,表示执行完之后,隐藏 tooltip。否则不隐藏。
  13746. return true;
  13747. }
  13748. });
  13749. if ($node.attr('data-href')) {
  13750. conf.push({
  13751. $elem: dom_core_1["default"]("<span>" + t('查看链接') + "</span>"),
  13752. onClick: function onClick(editor, $node) {
  13753. var link = $node.attr('data-href');
  13754. if (link) {
  13755. link = decodeURIComponent(link);
  13756. window.open(link, '_target');
  13757. } // 返回 true,表示执行完之后,隐藏 tooltip。否则不隐藏。
  13758. return true;
  13759. }
  13760. });
  13761. }
  13762. tooltip = new Tooltip_1["default"](editor, $node, conf);
  13763. tooltip.create();
  13764. }
  13765. /**
  13766. * 隐藏 tooltip
  13767. */
  13768. function hideImgTooltip() {
  13769. // 移除 tooltip
  13770. if (tooltip) {
  13771. tooltip.remove();
  13772. tooltip = null;
  13773. }
  13774. }
  13775. return {
  13776. showImgTooltip: showImgTooltip,
  13777. hideImgTooltip: hideImgTooltip
  13778. };
  13779. }
  13780. exports.createShowHideFn = createShowHideFn;
  13781. /**
  13782. * 绑定 tooltip 事件
  13783. * @param editor 编辑器实例
  13784. */
  13785. function bindTooltipEvent(editor) {
  13786. var _a = createShowHideFn(editor),
  13787. showImgTooltip = _a.showImgTooltip,
  13788. hideImgTooltip = _a.hideImgTooltip; // 点击图片元素是,显示 tooltip
  13789. editor.txt.eventHooks.imgClickEvents.push(showImgTooltip); // 点击其他地方,或者滚动时,隐藏 tooltip
  13790. editor.txt.eventHooks.clickEvents.push(hideImgTooltip);
  13791. editor.txt.eventHooks.keyupEvents.push(hideImgTooltip);
  13792. editor.txt.eventHooks.toolbarClickEvents.push(hideImgTooltip);
  13793. editor.txt.eventHooks.menuClickEvents.push(hideImgTooltip);
  13794. editor.txt.eventHooks.textScrollEvents.push(hideImgTooltip);
  13795. editor.txt.eventHooks.imgDragBarMouseDownEvents.push(hideImgTooltip); // change 时隐藏
  13796. editor.txt.eventHooks.changeEvents.push(hideImgTooltip);
  13797. }
  13798. exports["default"] = bindTooltipEvent;
  13799. /***/ }),
  13800. /* 363 */
  13801. /***/ (function(module, exports, __webpack_require__) {
  13802. "use strict";
  13803. var _interopRequireDefault = __webpack_require__(0);
  13804. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  13805. (0, _defineProperty["default"])(exports, "__esModule", {
  13806. value: true
  13807. });
  13808. function bindEventKeyboardEvent(editor) {
  13809. var txt = editor.txt,
  13810. selection = editor.selection;
  13811. var keydownEvents = txt.eventHooks.keydownEvents;
  13812. keydownEvents.push(function (e) {
  13813. // 删除图片时,有时会因为浏览器bug删不掉。因此这里手动判断光标前面是不是图片,是就删掉
  13814. var $selectionContainerElem = selection.getSelectionContainerElem();
  13815. var range = selection.getRange();
  13816. if (!range || !$selectionContainerElem || e.keyCode !== 8 || !selection.isSelectionEmpty()) {
  13817. return;
  13818. }
  13819. var startContainer = range.startContainer,
  13820. startOffset = range.startOffset; // 同一段落内上一个节点
  13821. var prevNode = null;
  13822. if (startOffset === 0) {
  13823. // 此时上一个节点需要通过previousSibling去找
  13824. while (startContainer !== $selectionContainerElem.elems[0] && $selectionContainerElem.elems[0].contains(startContainer) && startContainer.parentNode && !prevNode) {
  13825. if (startContainer.previousSibling) {
  13826. prevNode = startContainer.previousSibling;
  13827. break;
  13828. }
  13829. startContainer = startContainer.parentNode;
  13830. }
  13831. } else if (startContainer.nodeType !== 3) {
  13832. // 非文本节点才需要被处理,比如p
  13833. prevNode = startContainer.childNodes[startOffset - 1];
  13834. }
  13835. if (!prevNode) {
  13836. return;
  13837. }
  13838. var lastChildNodeInPrevNode = prevNode; // 找到最右侧叶子节点
  13839. while (lastChildNodeInPrevNode.childNodes.length) {
  13840. lastChildNodeInPrevNode = lastChildNodeInPrevNode.childNodes[lastChildNodeInPrevNode.childNodes.length - 1];
  13841. }
  13842. if (lastChildNodeInPrevNode instanceof HTMLElement && lastChildNodeInPrevNode.tagName === 'IMG') {
  13843. lastChildNodeInPrevNode.remove();
  13844. e.preventDefault();
  13845. }
  13846. });
  13847. }
  13848. exports["default"] = bindEventKeyboardEvent;
  13849. /***/ }),
  13850. /* 364 */
  13851. /***/ (function(module, exports, __webpack_require__) {
  13852. "use strict";
  13853. /**
  13854. * @description image 菜单 panel tab 配置
  13855. * @author wangfupeng
  13856. */
  13857. var _interopRequireDefault = __webpack_require__(0);
  13858. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  13859. var _map = _interopRequireDefault(__webpack_require__(26));
  13860. var _trim = _interopRequireDefault(__webpack_require__(17));
  13861. (0, _defineProperty["default"])(exports, "__esModule", {
  13862. value: true
  13863. });
  13864. var tslib_1 = __webpack_require__(2);
  13865. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  13866. var util_1 = __webpack_require__(6);
  13867. var upload_img_1 = tslib_1.__importDefault(__webpack_require__(97));
  13868. function default_1(editor) {
  13869. var _context;
  13870. var config = editor.config;
  13871. var uploadImg = new upload_img_1["default"](editor); // panel 中需要用到的id
  13872. var upTriggerId = util_1.getRandom('up-trigger-id');
  13873. var upFileId = util_1.getRandom('up-file-id');
  13874. var linkUrlId = util_1.getRandom('input-link-url');
  13875. var linkUrlAltId = util_1.getRandom('input-link-url-alt');
  13876. var linkUrlHrefId = util_1.getRandom('input-link-url-href');
  13877. var linkBtnId = util_1.getRandom('btn-link');
  13878. var i18nPrefix = 'menus.panelMenus.image.';
  13879. var t = function t(text, prefix) {
  13880. if (prefix === void 0) {
  13881. prefix = i18nPrefix;
  13882. }
  13883. return editor.i18next.t(prefix + text);
  13884. };
  13885. /**
  13886. * 校验网络图片链接是否合法
  13887. * @param linkImg 网络图片链接
  13888. */
  13889. function checkLinkImg(src, linkUrlAltText, linkUrlHrefText) {
  13890. //查看开发者自定义配置的返回值
  13891. var check = config.linkImgCheck(src);
  13892. if (check === true) {
  13893. return true;
  13894. } else if (typeof check === 'string') {
  13895. //用户未能通过开发者的校验,开发者希望我们提示这一字符串
  13896. config.customAlert(check, 'error');
  13897. }
  13898. return false;
  13899. } // tabs 配置 -----------------------------------------
  13900. var fileMultipleAttr = config.uploadImgMaxLength === 1 ? '' : 'multiple="multiple"';
  13901. var accepts = (0, _map["default"])(_context = config.uploadImgAccept).call(_context, function (item) {
  13902. return "image/" + item;
  13903. }).join(',');
  13904. /**
  13905. * 设置模板的类名和icon图标
  13906. * w-e-menu是作为button菜单的模板
  13907. * w-e-up-img-container是做为panel菜单的窗口内容的模板
  13908. * @param containerClass 模板最外层的类名
  13909. * @param iconClass 模板中icon的类名
  13910. * @param titleName 模板中标题的名称 需要则设置不需要则设为空字符
  13911. */
  13912. var getUploadImgTpl = function getUploadImgTpl(containerClass, iconClass, titleName) {
  13913. return "<div class=\"" + containerClass + "\" data-title=\"" + titleName + "\">\n <div id=\"" + upTriggerId + "\" class=\"w-e-up-btn\">\n <i class=\"" + iconClass + "\"></i>\n </div>\n <div style=\"display:none;\">\n <input id=\"" + upFileId + "\" type=\"file\" " + fileMultipleAttr + " accept=\"" + accepts + "\"/>\n </div>\n </div>";
  13914. };
  13915. var uploadEvents = [// 触发选择图片
  13916. {
  13917. selector: '#' + upTriggerId,
  13918. type: 'click',
  13919. fn: function fn() {
  13920. var uploadImgFromMedia = config.uploadImgFromMedia;
  13921. if (uploadImgFromMedia && typeof uploadImgFromMedia === 'function') {
  13922. uploadImgFromMedia();
  13923. return true;
  13924. }
  13925. var $file = dom_core_1["default"]('#' + upFileId);
  13926. var fileElem = $file.elems[0];
  13927. if (fileElem) {
  13928. fileElem.click();
  13929. } else {
  13930. // 返回 true 可关闭 panel
  13931. return true;
  13932. }
  13933. }
  13934. }, // 选择图片完毕
  13935. {
  13936. selector: '#' + upFileId,
  13937. type: 'change',
  13938. fn: function fn() {
  13939. var $file = dom_core_1["default"]('#' + upFileId);
  13940. var fileElem = $file.elems[0];
  13941. if (!fileElem) {
  13942. // 返回 true 可关闭 panel
  13943. return true;
  13944. } // 获取选中的 file 对象列表
  13945. var fileList = fileElem.files;
  13946. if (fileList === null || fileList === void 0 ? void 0 : fileList.length) {
  13947. uploadImg.uploadImg(fileList);
  13948. } // 判断用于打开文件的input,有没有值,如果有就清空,以防上传同一张图片时,不会触发change事件
  13949. // input的功能只是单单为了打开文件而已,获取到需要的文件参数,当文件数据获取到后,可以清空。
  13950. if (fileElem) {
  13951. fileElem.value = '';
  13952. } // 返回 true 可关闭 panel
  13953. return true;
  13954. }
  13955. }];
  13956. var linkImgInputs = ["<input\n id=\"" + linkUrlId + "\"\n type=\"text\"\n class=\"block\"\n placeholder=\"" + t('图片地址') + "\"/>"];
  13957. if (config.showLinkImgAlt) {
  13958. linkImgInputs.push("\n <input\n id=\"" + linkUrlAltId + "\"\n type=\"text\"\n class=\"block\"\n placeholder=\"" + t('图片文字说明') + "\"/>");
  13959. }
  13960. if (config.showLinkImgHref) {
  13961. linkImgInputs.push("\n <input\n id=\"" + linkUrlHrefId + "\"\n type=\"text\"\n class=\"block\"\n placeholder=\"" + t('跳转链接') + "\"/>");
  13962. }
  13963. var tabsConf = [// first tab
  13964. {
  13965. // 标题
  13966. title: t('上传图片'),
  13967. // 模板
  13968. tpl: getUploadImgTpl('w-e-up-img-container', 'w-e-icon-upload2', ''),
  13969. // 事件绑定
  13970. events: uploadEvents
  13971. }, // second tab
  13972. {
  13973. title: t('网络图片'),
  13974. tpl: "<div>\n " + linkImgInputs.join('') + "\n <div class=\"w-e-button-container\">\n <button type=\"button\" id=\"" + linkBtnId + "\" class=\"right\">" + t('插入', '') + "</button>\n </div>\n </div>",
  13975. events: [{
  13976. selector: '#' + linkBtnId,
  13977. type: 'click',
  13978. fn: function fn() {
  13979. var _context2;
  13980. var $linkUrl = dom_core_1["default"]('#' + linkUrlId);
  13981. var url = (0, _trim["default"])(_context2 = $linkUrl.val()).call(_context2); //如果url为空则直接返回
  13982. if (!url) return;
  13983. var linkUrlAltText;
  13984. if (config.showLinkImgAlt) {
  13985. var _context3;
  13986. linkUrlAltText = (0, _trim["default"])(_context3 = dom_core_1["default"]('#' + linkUrlAltId).val()).call(_context3);
  13987. }
  13988. var linkUrlHrefText;
  13989. if (config.showLinkImgHref) {
  13990. var _context4;
  13991. linkUrlHrefText = (0, _trim["default"])(_context4 = dom_core_1["default"]('#' + linkUrlHrefId).val()).call(_context4);
  13992. } //如果不能通过校验也直接返回
  13993. if (!checkLinkImg(url, linkUrlAltText, linkUrlHrefText)) return; //插入图片url
  13994. uploadImg.insertImg(url, linkUrlAltText, linkUrlHrefText); // 返回 true 表示函数执行结束之后关闭 panel
  13995. return true;
  13996. },
  13997. bindEnter: true
  13998. }]
  13999. }]; // tabs end
  14000. // 最终的配置 -----------------------------------------
  14001. var conf = {
  14002. width: 300,
  14003. height: 0,
  14004. tabs: [],
  14005. onlyUploadConf: {
  14006. $elem: dom_core_1["default"](getUploadImgTpl('w-e-menu', 'w-e-icon-image', '图片')),
  14007. events: uploadEvents
  14008. }
  14009. }; // 显示“上传图片”
  14010. if (window.FileReader && (config.uploadImgShowBase64 || config.uploadImgServer || config.customUploadImg || config.uploadImgFromMedia)) {
  14011. conf.tabs.push(tabsConf[0]);
  14012. } // 显示“插入网络图片”
  14013. if (config.showLinkImg) {
  14014. conf.tabs.push(tabsConf[1]);
  14015. conf.onlyUploadConf = undefined;
  14016. }
  14017. return conf;
  14018. }
  14019. exports["default"] = default_1;
  14020. /***/ }),
  14021. /* 365 */
  14022. /***/ (function(module, exports, __webpack_require__) {
  14023. "use strict";
  14024. /**
  14025. * @description 增加缩进/减少缩进
  14026. * @author tonghan
  14027. */
  14028. var _interopRequireDefault = __webpack_require__(0);
  14029. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  14030. var _forEach = _interopRequireDefault(__webpack_require__(4));
  14031. (0, _defineProperty["default"])(exports, "__esModule", {
  14032. value: true
  14033. });
  14034. var tslib_1 = __webpack_require__(2);
  14035. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  14036. var DropListMenu_1 = tslib_1.__importDefault(__webpack_require__(24));
  14037. var operate_element_1 = tslib_1.__importDefault(__webpack_require__(366));
  14038. var Indent =
  14039. /** @class */
  14040. function (_super) {
  14041. tslib_1.__extends(Indent, _super);
  14042. function Indent(editor) {
  14043. var _this = this;
  14044. var $elem = dom_core_1["default"]("<div class=\"w-e-menu\" data-title=\"\u7F29\u8FDB\">\n <i class=\"w-e-icon-indent-increase\"></i>\n </div>");
  14045. var dropListConf = {
  14046. width: 130,
  14047. title: '设置缩进',
  14048. type: 'list',
  14049. list: [{
  14050. $elem: dom_core_1["default"]("<p>\n <i class=\"w-e-icon-indent-increase w-e-drop-list-item\"></i>\n " + editor.i18next.t('menus.dropListMenu.indent.增加缩进') + "\n <p>"),
  14051. value: 'increase'
  14052. }, {
  14053. $elem: dom_core_1["default"]("<p>\n <i class=\"w-e-icon-indent-decrease w-e-drop-list-item\"></i>\n " + editor.i18next.t('menus.dropListMenu.indent.减少缩进') + "\n <p>"),
  14054. value: 'decrease'
  14055. }],
  14056. clickHandler: function clickHandler(value) {
  14057. // 注意 this 是指向当前的 Indent 对象
  14058. _this.command(value);
  14059. }
  14060. };
  14061. _this = _super.call(this, $elem, editor, dropListConf) || this;
  14062. return _this;
  14063. }
  14064. /**
  14065. * 执行命令
  14066. * @param value value
  14067. */
  14068. Indent.prototype.command = function (value) {
  14069. var editor = this.editor;
  14070. var $selectionElem = editor.selection.getSelectionContainerElem(); // 判断 当前选区为 textElem 时
  14071. if ($selectionElem && editor.$textElem.equal($selectionElem)) {
  14072. // 当 当前选区 等于 textElem 时
  14073. // 代表 当前选区 可能是一个选择了一个完整的段落或者多个段落
  14074. var $elems = editor.selection.getSelectionRangeTopNodes();
  14075. if ($elems.length > 0) {
  14076. (0, _forEach["default"])($elems).call($elems, function (item) {
  14077. operate_element_1["default"](dom_core_1["default"](item), value, editor);
  14078. });
  14079. }
  14080. } else {
  14081. // 当 当前选区 不等于 textElem 时
  14082. // 代表 当前选区要么是一个段落,要么是段落中的一部分
  14083. if ($selectionElem && $selectionElem.length > 0) {
  14084. (0, _forEach["default"])($selectionElem).call($selectionElem, function (item) {
  14085. operate_element_1["default"](dom_core_1["default"](item), value, editor);
  14086. });
  14087. }
  14088. } // 恢复选区
  14089. editor.selection.restoreSelection();
  14090. this.tryChangeActive();
  14091. };
  14092. /**
  14093. * 尝试改变菜单激活(高亮)状态
  14094. */
  14095. Indent.prototype.tryChangeActive = function () {
  14096. var editor = this.editor;
  14097. var $selectionElem = editor.selection.getSelectionStartElem();
  14098. var $selectionStartElem = dom_core_1["default"]($selectionElem).getNodeTop(editor);
  14099. if ($selectionStartElem.length <= 0) return;
  14100. if ($selectionStartElem.elems[0].style['paddingLeft'] != '') {
  14101. this.active();
  14102. } else {
  14103. this.unActive();
  14104. }
  14105. };
  14106. return Indent;
  14107. }(DropListMenu_1["default"]);
  14108. exports["default"] = Indent;
  14109. /***/ }),
  14110. /* 366 */
  14111. /***/ (function(module, exports, __webpack_require__) {
  14112. "use strict";
  14113. /**
  14114. * @description 对节点 操作 进行封装
  14115. * 获取当前节点的段落
  14116. * 根据type判断是增加还是减少缩进
  14117. * @author tonghan
  14118. */
  14119. var _interopRequireDefault = __webpack_require__(0);
  14120. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  14121. var _slice = _interopRequireDefault(__webpack_require__(45));
  14122. var _trim = _interopRequireDefault(__webpack_require__(17));
  14123. (0, _defineProperty["default"])(exports, "__esModule", {
  14124. value: true
  14125. });
  14126. var tslib_1 = __webpack_require__(2);
  14127. var increase_indent_style_1 = tslib_1.__importDefault(__webpack_require__(367));
  14128. var decrease_indent_style_1 = tslib_1.__importDefault(__webpack_require__(368));
  14129. var lengthRegex = /^(\d+)(\w+)$/;
  14130. var percentRegex = /^(\d+)%$/;
  14131. function parseIndentation(editor) {
  14132. var indentation = editor.config.indentation;
  14133. if (typeof indentation === 'string') {
  14134. if (lengthRegex.test(indentation)) {
  14135. var _context;
  14136. var _a = (0, _slice["default"])(_context = (0, _trim["default"])(indentation).call(indentation).match(lengthRegex)).call(_context, 1, 3),
  14137. value = _a[0],
  14138. unit = _a[1];
  14139. return {
  14140. value: Number(value),
  14141. unit: unit
  14142. };
  14143. } else if (percentRegex.test(indentation)) {
  14144. return {
  14145. value: Number((0, _trim["default"])(indentation).call(indentation).match(percentRegex)[1]),
  14146. unit: '%'
  14147. };
  14148. }
  14149. } else if (indentation.value !== void 0 && indentation.unit) {
  14150. return indentation;
  14151. }
  14152. return {
  14153. value: 2,
  14154. unit: 'em'
  14155. };
  14156. }
  14157. function operateElement($node, type, editor) {
  14158. var $elem = $node.getNodeTop(editor);
  14159. var reg = /^(P|H[0-9]*)$/;
  14160. if (reg.test($elem.getNodeName())) {
  14161. if (type === 'increase') increase_indent_style_1["default"]($elem, parseIndentation(editor));else if (type === 'decrease') decrease_indent_style_1["default"]($elem, parseIndentation(editor));
  14162. }
  14163. }
  14164. exports["default"] = operateElement;
  14165. /***/ }),
  14166. /* 367 */
  14167. /***/ (function(module, exports, __webpack_require__) {
  14168. "use strict";
  14169. /**
  14170. * @description 增加缩进
  14171. * @author tonghan
  14172. */
  14173. var _interopRequireDefault = __webpack_require__(0);
  14174. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  14175. var _slice = _interopRequireDefault(__webpack_require__(45));
  14176. (0, _defineProperty["default"])(exports, "__esModule", {
  14177. value: true
  14178. });
  14179. function increaseIndentStyle($node, options) {
  14180. var $elem = $node.elems[0];
  14181. if ($elem.style['paddingLeft'] === '') {
  14182. $node.css('padding-left', options.value + options.unit);
  14183. } else {
  14184. var oldPL = $elem.style['paddingLeft'];
  14185. var oldVal = (0, _slice["default"])(oldPL).call(oldPL, 0, oldPL.length - options.unit.length);
  14186. var newVal = Number(oldVal) + options.value;
  14187. $node.css('padding-left', "" + newVal + options.unit);
  14188. }
  14189. }
  14190. exports["default"] = increaseIndentStyle;
  14191. /***/ }),
  14192. /* 368 */
  14193. /***/ (function(module, exports, __webpack_require__) {
  14194. "use strict";
  14195. /**
  14196. * @description 减少缩进
  14197. * @author tonghan
  14198. */
  14199. var _interopRequireDefault = __webpack_require__(0);
  14200. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  14201. var _slice = _interopRequireDefault(__webpack_require__(45));
  14202. (0, _defineProperty["default"])(exports, "__esModule", {
  14203. value: true
  14204. });
  14205. function decreaseIndentStyle($node, options) {
  14206. var $elem = $node.elems[0];
  14207. if ($elem.style['paddingLeft'] !== '') {
  14208. var oldPL = $elem.style['paddingLeft'];
  14209. var oldVal = (0, _slice["default"])(oldPL).call(oldPL, 0, oldPL.length - options.unit.length);
  14210. var newVal = Number(oldVal) - options.value;
  14211. if (newVal > 0) {
  14212. $node.css('padding-left', "" + newVal + options.unit);
  14213. } else {
  14214. $node.css('padding-left', '');
  14215. }
  14216. }
  14217. }
  14218. exports["default"] = decreaseIndentStyle;
  14219. /***/ }),
  14220. /* 369 */
  14221. /***/ (function(module, exports, __webpack_require__) {
  14222. "use strict";
  14223. var _interopRequireDefault = __webpack_require__(0);
  14224. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  14225. (0, _defineProperty["default"])(exports, "__esModule", {
  14226. value: true
  14227. });
  14228. var tslib_1 = __webpack_require__(2);
  14229. /**
  14230. * @description 插入表情
  14231. * @author liuwe
  14232. */
  14233. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  14234. var PanelMenu_1 = tslib_1.__importDefault(__webpack_require__(38));
  14235. var Panel_1 = tslib_1.__importDefault(__webpack_require__(33));
  14236. var create_panel_conf_1 = tslib_1.__importDefault(__webpack_require__(370));
  14237. var Emoticon =
  14238. /** @class */
  14239. function (_super) {
  14240. tslib_1.__extends(Emoticon, _super);
  14241. function Emoticon(editor) {
  14242. var _this = this;
  14243. var $elem = dom_core_1["default"]("<div class=\"w-e-menu\" data-title=\"\u8868\u60C5\">\n <i class=\"w-e-icon-happy\"></i>\n </div>");
  14244. _this = _super.call(this, $elem, editor) || this;
  14245. return _this;
  14246. }
  14247. /**
  14248. * 创建 panel
  14249. */
  14250. Emoticon.prototype.createPanel = function () {
  14251. var conf = create_panel_conf_1["default"](this.editor);
  14252. var panel = new Panel_1["default"](this, conf);
  14253. panel.create();
  14254. };
  14255. /**
  14256. * 菜单表情点击事件
  14257. */
  14258. Emoticon.prototype.clickHandler = function () {
  14259. this.createPanel();
  14260. };
  14261. Emoticon.prototype.tryChangeActive = function () {};
  14262. return Emoticon;
  14263. }(PanelMenu_1["default"]);
  14264. exports["default"] = Emoticon;
  14265. /***/ }),
  14266. /* 370 */
  14267. /***/ (function(module, exports, __webpack_require__) {
  14268. "use strict";
  14269. /**
  14270. * @description 表情菜单 panel配置
  14271. * @author liuwei
  14272. */
  14273. var _interopRequireDefault = __webpack_require__(0);
  14274. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  14275. var _map = _interopRequireDefault(__webpack_require__(26));
  14276. var _filter = _interopRequireDefault(__webpack_require__(70));
  14277. var _trim = _interopRequireDefault(__webpack_require__(17));
  14278. (0, _defineProperty["default"])(exports, "__esModule", {
  14279. value: true
  14280. });
  14281. var tslib_1 = __webpack_require__(2);
  14282. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  14283. function default_1(editor) {
  14284. // 声明emotions数据结构
  14285. var emotions = editor.config.emotions;
  14286. /* tabs配置项 ==================================================================*/
  14287. // 生成表情结构 TODO jele type类型待优化
  14288. function GenerateExpressionStructure(ele) {
  14289. // 返回为一个数组对象
  14290. var res = []; // 如果type是image类型则生成一个img标签
  14291. if (ele.type == 'image') {
  14292. var _context;
  14293. res = (0, _map["default"])(_context = ele.content).call(_context, function (con) {
  14294. if (typeof con == 'string') return '';
  14295. return "<span title=\"" + con.alt + "\">\n <img class=\"eleImg\" data-emoji=\"" + con.alt + "\" style src=\"" + con.src + "\" alt=\"[" + con.alt + "]\">\n </span>";
  14296. });
  14297. res = (0, _filter["default"])(res).call(res, function (s) {
  14298. return s !== '';
  14299. });
  14300. } //否则直接当内容处理
  14301. else {
  14302. var _context2;
  14303. res = (0, _map["default"])(_context2 = ele.content).call(_context2, function (con) {
  14304. return "<span class=\"eleImg\" title=\"" + con + "\">" + con + "</span>";
  14305. });
  14306. }
  14307. return res.join('').replace(/&nbsp;/g, '');
  14308. }
  14309. var tabsConf = (0, _map["default"])(emotions).call(emotions, function (ele) {
  14310. return {
  14311. title: editor.i18next.t("menus.panelMenus.emoticon." + ele.title),
  14312. // 判断type类型如果是image则以img的形式插入否则以内容
  14313. tpl: "<div>" + GenerateExpressionStructure(ele) + "</div>",
  14314. events: [{
  14315. selector: '.eleImg',
  14316. type: 'click',
  14317. fn: function fn(e) {
  14318. // e为事件对象
  14319. var $target = dom_core_1["default"](e.target);
  14320. var nodeName = $target.getNodeName();
  14321. var insertHtml;
  14322. if (nodeName === 'IMG') {
  14323. var _context3;
  14324. // 插入图片
  14325. insertHtml = (0, _trim["default"])(_context3 = $target.parent().html()).call(_context3);
  14326. } else {
  14327. // 插入 emoji
  14328. insertHtml = '<span>' + $target.html() + '</span>';
  14329. }
  14330. editor.cmd["do"]('insertHTML', insertHtml); // 示函数执行结束之后关闭 panel
  14331. return true;
  14332. }
  14333. }]
  14334. };
  14335. });
  14336. /* tabs配置项 =================================================================end*/
  14337. // 最终的配置 -----------------------------------------
  14338. var conf = {
  14339. width: 300,
  14340. height: 230,
  14341. tabs: tabsConf
  14342. };
  14343. return conf;
  14344. }
  14345. exports["default"] = default_1;
  14346. /***/ }),
  14347. /* 371 */
  14348. /***/ (function(module, exports, __webpack_require__) {
  14349. "use strict";
  14350. var _interopRequireDefault = __webpack_require__(0);
  14351. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  14352. (0, _defineProperty["default"])(exports, "__esModule", {
  14353. value: true
  14354. });
  14355. exports.createListHandle = exports.ClassType = void 0;
  14356. var tslib_1 = __webpack_require__(2);
  14357. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  14358. var WrapListHandle_1 = tslib_1.__importDefault(__webpack_require__(372));
  14359. var JoinListHandle_1 = tslib_1.__importDefault(__webpack_require__(374));
  14360. var StartJoinListHandle_1 = tslib_1.__importDefault(__webpack_require__(375));
  14361. var EndJoinListHandle_1 = tslib_1.__importDefault(__webpack_require__(376));
  14362. var OtherListHandle_1 = tslib_1.__importDefault(__webpack_require__(377));
  14363. var ClassType;
  14364. (function (ClassType) {
  14365. ClassType["Wrap"] = "WrapListHandle";
  14366. ClassType["Join"] = "JoinListHandle";
  14367. ClassType["StartJoin"] = "StartJoinListHandle";
  14368. ClassType["EndJoin"] = "EndJoinListHandle";
  14369. ClassType["Other"] = "OtherListHandle";
  14370. })(ClassType = exports.ClassType || (exports.ClassType = {}));
  14371. var handle = {
  14372. WrapListHandle: WrapListHandle_1["default"],
  14373. JoinListHandle: JoinListHandle_1["default"],
  14374. StartJoinListHandle: StartJoinListHandle_1["default"],
  14375. EndJoinListHandle: EndJoinListHandle_1["default"],
  14376. OtherListHandle: OtherListHandle_1["default"]
  14377. };
  14378. function createListHandle(classType, options, range) {
  14379. if (classType === ClassType.Other && range === undefined) {
  14380. throw new Error('other 类需要传入 range');
  14381. }
  14382. return classType !== ClassType.Other ? new handle[classType](options) : new handle[classType](options, range);
  14383. }
  14384. exports.createListHandle = createListHandle;
  14385. /**
  14386. * 统一执行的接口
  14387. */
  14388. var ListHandleCommand =
  14389. /** @class */
  14390. function () {
  14391. function ListHandleCommand(handle) {
  14392. this.handle = handle;
  14393. this.handle.exec();
  14394. }
  14395. ListHandleCommand.prototype.getSelectionRangeElem = function () {
  14396. return dom_core_1["default"](this.handle.selectionRangeElem.get());
  14397. };
  14398. return ListHandleCommand;
  14399. }();
  14400. exports["default"] = ListHandleCommand;
  14401. /***/ }),
  14402. /* 372 */
  14403. /***/ (function(module, exports, __webpack_require__) {
  14404. "use strict";
  14405. var _interopRequireDefault = __webpack_require__(0);
  14406. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  14407. var _forEach = _interopRequireDefault(__webpack_require__(4));
  14408. (0, _defineProperty["default"])(exports, "__esModule", {
  14409. value: true
  14410. });
  14411. var tslib_1 = __webpack_require__(2);
  14412. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  14413. var ListHandle_1 = __webpack_require__(58);
  14414. var utils_1 = __webpack_require__(47);
  14415. /**
  14416. * 选区在序列内的处理
  14417. */
  14418. var WrapListHandle =
  14419. /** @class */
  14420. function (_super) {
  14421. tslib_1.__extends(WrapListHandle, _super);
  14422. function WrapListHandle(options) {
  14423. return _super.call(this, options) || this;
  14424. }
  14425. WrapListHandle.prototype.exec = function () {
  14426. var _a = this.options,
  14427. listType = _a.listType,
  14428. listTarget = _a.listTarget,
  14429. $selectionElem = _a.$selectionElem,
  14430. $startElem = _a.$startElem,
  14431. $endElem = _a.$endElem;
  14432. var $containerFragment; // 容器 - HTML 文档片段
  14433. var $nodes = []; // 获取选中的段落
  14434. // 获取 selectionElem 的标签名
  14435. var containerNodeName = $selectionElem === null || $selectionElem === void 0 ? void 0 : $selectionElem.getNodeName(); // 获取开始以及结束的 li 元素
  14436. var $start = $startElem.prior;
  14437. var $end = $endElem.prior; // =====================================
  14438. // 当 开始节点 和 结束节点 没有 prior
  14439. // 并且 开始节点 没有前一个兄弟节点
  14440. // 并且 结束节点 没有后一个兄弟节点
  14441. // 即代表 全选序列
  14442. // =====================================
  14443. if (!$startElem.prior && !$endElem.prior || !($start === null || $start === void 0 ? void 0 : $start.prev().length) && !($end === null || $end === void 0 ? void 0 : $end.next().length)) {
  14444. var _context;
  14445. // 获取当前序列下的所有 li 标签
  14446. ;
  14447. (0, _forEach["default"])(_context = $selectionElem === null || $selectionElem === void 0 ? void 0 : $selectionElem.children()).call(_context, function ($node) {
  14448. $nodes.push(dom_core_1["default"]($node));
  14449. }); // =====================================
  14450. // 当 selectionElem 的标签名和按钮类型 一致 的时候
  14451. // 代表着当前的操作是 取消 序列
  14452. // =====================================
  14453. if (containerNodeName === listType) {
  14454. // 生成对应的段落(p)并添加到文档片段中,然后删除掉无用的 li
  14455. $containerFragment = utils_1.createElementFragment($nodes, utils_1.createDocumentFragment(), // 创建 文档片段
  14456. 'p');
  14457. } // =====================================
  14458. // 当 selectionElem 的标签名和按钮类型 不一致 的时候
  14459. // 代表着当前的操作是 转换 序列
  14460. // =====================================
  14461. else {
  14462. // 创建 序列节点
  14463. $containerFragment = utils_1.createElement(listTarget); // 因为是转换,所以 li 元素可以直接使用
  14464. (0, _forEach["default"])($nodes).call($nodes, function ($node) {
  14465. $containerFragment.appendChild($node.elems[0]);
  14466. });
  14467. } // 把 文档片段 或 序列节点 插入到 selectionElem 的前面
  14468. this.selectionRangeElem.set($containerFragment); // 插入到 $selectionElem 之前
  14469. utils_1.insertBefore($selectionElem, $containerFragment, $selectionElem.elems[0]); // 删除无用的 selectionElem 因为它被掏空了
  14470. $selectionElem.remove();
  14471. } // =====================================
  14472. // 当不是全选序列的时候就代表是非全选序列(废话)
  14473. // 非全选序列的情况
  14474. // =====================================
  14475. else {
  14476. // 获取选中的内容
  14477. var $startDom = $start;
  14478. while ($startDom.length) {
  14479. $nodes.push($startDom);
  14480. ($end === null || $end === void 0 ? void 0 : $end.equal($startDom)) ? $startDom = dom_core_1["default"](undefined) : // 结束
  14481. $startDom = $startDom.next(); // 继续
  14482. } // 获取开始节点的上一个兄弟节点
  14483. var $prveDom = $start.prev(); // 获取结束节点的下一个兄弟节点
  14484. var $nextDom = $end.next(); // =====================================
  14485. // 当 selectionElem 的标签名和按钮类型一致的时候
  14486. // 代表着当前的操作是 取消 序列
  14487. // =====================================
  14488. if (containerNodeName === listType) {
  14489. // 生成对应的段落(p)并添加到文档片段中,然后删除掉无用的 li
  14490. $containerFragment = utils_1.createElementFragment($nodes, utils_1.createDocumentFragment(), // 创建 文档片段
  14491. 'p');
  14492. } // =====================================
  14493. // 当 selectionElem 的标签名和按钮类型不一致的时候
  14494. // 代表着当前的操作是 转换 序列
  14495. // =====================================
  14496. else {
  14497. // 创建 文档片段
  14498. $containerFragment = utils_1.createElement(listTarget); // 因为是转换,所以 li 元素可以直接使用
  14499. (0, _forEach["default"])($nodes).call($nodes, function ($node) {
  14500. $containerFragment.append($node.elems[0]);
  14501. });
  14502. } // =====================================
  14503. // 当 prveDom 和 nextDom 都存在的时候
  14504. // 代表着当前选区是在序列的中间
  14505. // 所以要先把 下半部分 未选择的 li 元素独立出来生成一个 序列
  14506. // =====================================
  14507. if ($prveDom.length && $nextDom.length) {
  14508. // 获取尾部的元素
  14509. var $tailDomArr = [];
  14510. while ($nextDom.length) {
  14511. $tailDomArr.push($nextDom);
  14512. $nextDom = $nextDom.next();
  14513. } // 创建 尾部序列节点
  14514. var $tailDocFragment_1 = utils_1.createElement(containerNodeName); // 把尾部元素节点添加到尾部序列节点中
  14515. (0, _forEach["default"])($tailDomArr).call($tailDomArr, function ($node) {
  14516. $tailDocFragment_1.append($node.elems[0]);
  14517. }); // 把尾部序列节点插入到 selectionElem 的后面
  14518. dom_core_1["default"]($tailDocFragment_1).insertAfter($selectionElem); // =====================================
  14519. // 获取选区容器元素的父元素,一般就是编辑区域
  14520. // 然后判断 selectionElem 是否还有下一个兄弟节点
  14521. // 如果有,就把文档片段添加到 selectionElem 下一个兄弟节点前
  14522. // 如果没有,就把文档片段添加到 编辑区域 末尾
  14523. // =====================================
  14524. this.selectionRangeElem.set($containerFragment);
  14525. var $selectionNextDom = $selectionElem.next();
  14526. $selectionNextDom.length ? utils_1.insertBefore($selectionElem, $containerFragment, $selectionNextDom.elems[0]) : $selectionElem.parent().elems[0].append($containerFragment);
  14527. } // =====================================
  14528. // 不管是 取消 还是 转换 都需要重新插入节点
  14529. //
  14530. // prveDom.length 等于 0 即代表选区是 selectionElem 序列的上半部分
  14531. // 上半部分的 li 元素
  14532. // =====================================
  14533. else if (!$prveDom.length) {
  14534. // 文档片段插入到 selectionElem 之前
  14535. this.selectionRangeElem.set($containerFragment);
  14536. utils_1.insertBefore($selectionElem, $containerFragment, $selectionElem.elems[0]);
  14537. } // =====================================
  14538. // 不管是 取消 还是 转换 都需要重新插入节点
  14539. //
  14540. // nextDom.length 等于 0 即代表选区是 selectionElem 序列的下半部分
  14541. // 下半部分的 li 元素 if (!$nextDom.length)
  14542. // =====================================
  14543. else {
  14544. // 文档片段插入到 selectionElem 之后
  14545. this.selectionRangeElem.set($containerFragment);
  14546. var $selectionNextDom = $selectionElem.next();
  14547. $selectionNextDom.length ? utils_1.insertBefore($selectionElem, $containerFragment, $selectionNextDom.elems[0]) : $selectionElem.parent().elems[0].append($containerFragment);
  14548. }
  14549. }
  14550. };
  14551. return WrapListHandle;
  14552. }(ListHandle_1.ListHandle);
  14553. exports["default"] = WrapListHandle;
  14554. /***/ }),
  14555. /* 373 */
  14556. /***/ (function(module, exports, __webpack_require__) {
  14557. "use strict";
  14558. var _interopRequireDefault = __webpack_require__(0);
  14559. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  14560. var _forEach = _interopRequireDefault(__webpack_require__(4));
  14561. (0, _defineProperty["default"])(exports, "__esModule", {
  14562. value: true
  14563. });
  14564. /**
  14565. * @description 选区的 Element
  14566. * @author tonghan
  14567. */
  14568. var SelectionRangeElem =
  14569. /** @class */
  14570. function () {
  14571. function SelectionRangeElem() {
  14572. this._element = null;
  14573. }
  14574. /**
  14575. * 设置 SelectionRangeElem 的值
  14576. * @param { SetSelectionRangeType } data
  14577. */
  14578. SelectionRangeElem.prototype.set = function (data) {
  14579. //
  14580. if (data instanceof DocumentFragment) {
  14581. var _context;
  14582. var childNode_1 = [];
  14583. (0, _forEach["default"])(_context = data.childNodes).call(_context, function ($node) {
  14584. childNode_1.push($node);
  14585. });
  14586. data = childNode_1;
  14587. }
  14588. this._element = data;
  14589. };
  14590. /**
  14591. * 获取 SelectionRangeElem 的值
  14592. * @returns { SelectionRangeType } Elem
  14593. */
  14594. SelectionRangeElem.prototype.get = function () {
  14595. return this._element;
  14596. };
  14597. /**
  14598. * 清除 SelectionRangeElem 的值
  14599. */
  14600. SelectionRangeElem.prototype.clear = function () {
  14601. this._element = null;
  14602. };
  14603. return SelectionRangeElem;
  14604. }();
  14605. exports["default"] = SelectionRangeElem;
  14606. /***/ }),
  14607. /* 374 */
  14608. /***/ (function(module, exports, __webpack_require__) {
  14609. "use strict";
  14610. var _interopRequireDefault = __webpack_require__(0);
  14611. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  14612. var _forEach = _interopRequireDefault(__webpack_require__(4));
  14613. (0, _defineProperty["default"])(exports, "__esModule", {
  14614. value: true
  14615. });
  14616. var tslib_1 = __webpack_require__(2);
  14617. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  14618. var ListHandle_1 = __webpack_require__(58);
  14619. var utils_1 = __webpack_require__(47);
  14620. var JoinListHandle =
  14621. /** @class */
  14622. function (_super) {
  14623. tslib_1.__extends(JoinListHandle, _super);
  14624. function JoinListHandle(options) {
  14625. return _super.call(this, options) || this;
  14626. }
  14627. JoinListHandle.prototype.exec = function () {
  14628. var _a, _b, _c, _d, _e, _f, _g;
  14629. var _h = this.options,
  14630. editor = _h.editor,
  14631. listType = _h.listType,
  14632. listTarget = _h.listTarget,
  14633. $startElem = _h.$startElem,
  14634. $endElem = _h.$endElem; // 容器 - HTML 文档片段
  14635. var $containerFragment; // 获取选中的段落
  14636. var $nodes = editor.selection.getSelectionRangeTopNodes(); // 获取开始段落和结束段落 标签名
  14637. var startNodeName = $startElem === null || $startElem === void 0 ? void 0 : $startElem.getNodeName();
  14638. var endNodeName = $endElem === null || $endElem === void 0 ? void 0 : $endElem.getNodeName(); // =====================================
  14639. // 开头结尾都是序列的情况下
  14640. // 开头序列 和 结尾序列的标签名一致的时候
  14641. // =====================================
  14642. if (startNodeName === endNodeName) {
  14643. // =====================================
  14644. // 开头序列 和 结尾序列 中间还有其他的段落的时候
  14645. // =====================================
  14646. if ($nodes.length > 2) {
  14647. // 弹出 开头 和 结尾
  14648. $nodes.shift();
  14649. $nodes.pop(); // 把中间部分的节点元素转换成 li 元素并添加到文档片段后删除
  14650. $containerFragment = utils_1.createElementFragment(utils_1.filterSelectionNodes($nodes), // 过滤 $nodes 获取到符合要求的选中元素节点
  14651. utils_1.createDocumentFragment() // 创建 文档片段
  14652. ); // =====================================
  14653. // 由于开头序列 和 结尾序列的标签名一样,所以只判断了开头序列的
  14654. // 当开头序列的标签名和按钮类型 一致 的时候
  14655. // 代表着当前是一个 设置序列 的操作
  14656. // =====================================
  14657. if (startNodeName === listType) {
  14658. // 把结束序列的 li 元素添加到 文档片段中
  14659. (_a = $endElem.children()) === null || _a === void 0 ? void 0 : (0, _forEach["default"])(_a).call(_a, function ($list) {
  14660. $containerFragment.append($list);
  14661. }); // 下序列全选被掏空了,就卸磨杀驴吧
  14662. $endElem.remove(); // 在开始序列中添加 文档片段
  14663. this.selectionRangeElem.set($containerFragment);
  14664. $startElem.elems[0].append($containerFragment);
  14665. } // =====================================
  14666. // 由于开头序列 和 结尾序列的标签名一样,所以只判断了开头序列的
  14667. // 当开头序列的标签名和按钮类型 不一致 的时候
  14668. // 代表着当前是一个 转换序列 的操作
  14669. // =====================================
  14670. else {
  14671. // 创建 开始序列和结束序列的文档片段
  14672. var $startFragment = document.createDocumentFragment();
  14673. var $endFragment_1 = document.createDocumentFragment(); // 获取起点元素
  14674. var $startDom = utils_1.getStartPoint($startElem); // 获取上半序列中的选中内容,并添加到文档片段中
  14675. while ($startDom.length) {
  14676. var _element = $startDom.elems[0];
  14677. $startDom = $startDom.next();
  14678. $startFragment.append(_element);
  14679. } // 获取结束元素
  14680. var $endDom = utils_1.getEndPoint($endElem); // 获取下半序列中选中的内容
  14681. var domArr = [];
  14682. while ($endDom.length) {
  14683. domArr.unshift($endDom.elems[0]);
  14684. $endDom = $endDom.prev();
  14685. } // 添加到文档片段中
  14686. (0, _forEach["default"])(domArr).call(domArr, function ($node) {
  14687. $endFragment_1.append($node);
  14688. }); // 合并文档片段
  14689. var $orderFragment = utils_1.createElement(listTarget);
  14690. $orderFragment.append($startFragment);
  14691. $orderFragment.append($containerFragment);
  14692. $orderFragment.append($endFragment_1);
  14693. $containerFragment = $orderFragment; // 插入
  14694. this.selectionRangeElem.set($containerFragment);
  14695. dom_core_1["default"]($orderFragment).insertAfter($startElem); // 序列全选被掏空了后,就卸磨杀驴吧
  14696. !((_b = $startElem.children()) === null || _b === void 0 ? void 0 : _b.length) && $startElem.remove();
  14697. !((_c = $endElem.children()) === null || _c === void 0 ? void 0 : _c.length) && $endElem.remove();
  14698. }
  14699. } // =====================================
  14700. // 开头序列 和 结尾序列 中间没有其他的段落
  14701. // =====================================
  14702. else {
  14703. $nodes.length = 0; // 获取起点元素
  14704. var $startDom = utils_1.getStartPoint($startElem); // 获取上半序列中的选中内容
  14705. while ($startDom.length) {
  14706. $nodes.push($startDom);
  14707. $startDom = $startDom.next();
  14708. } // 获取结束元素
  14709. var $endDom = utils_1.getEndPoint($endElem); // 获取下半序列中选中的内容
  14710. var domArr = []; // 获取下半序列中的选中内容
  14711. while ($endDom.length) {
  14712. domArr.unshift($endDom);
  14713. $endDom = $endDom.prev();
  14714. } // 融合内容
  14715. $nodes.push.apply($nodes, domArr); // =====================================
  14716. // 由于开头序列 和 结尾序列的标签名一样,所以只判断了开头序列的
  14717. // 当开头序列的标签名和按钮类型 一致 的时候
  14718. // 代表着当前是一个 取消序列 的操作
  14719. // =====================================
  14720. if (startNodeName === listType) {
  14721. // 创建 文档片段
  14722. // 把 li 转换为 p 标签
  14723. $containerFragment = utils_1.createElementFragment($nodes, utils_1.createDocumentFragment(), 'p'); // 插入到 endElem 前
  14724. this.selectionRangeElem.set($containerFragment);
  14725. utils_1.insertBefore($startElem, $containerFragment, $endElem.elems[0]);
  14726. } // =====================================
  14727. // 由于开头序列 和 结尾序列的标签名一样,所以只判断了开头序列的
  14728. // 当开头序列的标签名和按钮类型 不一致 的时候
  14729. // 代表着当前是一个 设置序列 的操作
  14730. // =====================================
  14731. else {
  14732. // 创建 序列元素
  14733. $containerFragment = utils_1.createElement(listTarget); // li 元素添加到 序列元素 中
  14734. (0, _forEach["default"])($nodes).call($nodes, function ($list) {
  14735. $containerFragment.append($list.elems[0]);
  14736. }); // 插入到 startElem 之后
  14737. this.selectionRangeElem.set($containerFragment);
  14738. dom_core_1["default"]($containerFragment).insertAfter($startElem);
  14739. } // 序列全选被掏空了后,就卸磨杀驴吧
  14740. !((_d = $startElem.children()) === null || _d === void 0 ? void 0 : _d.length) && $endElem.remove();
  14741. !((_e = $endElem.children()) === null || _e === void 0 ? void 0 : _e.length) && $endElem.remove();
  14742. }
  14743. } // =====================================
  14744. // 由于开头序列 和 结尾序列的标签名不一样
  14745. // =====================================
  14746. else {
  14747. // 下序列元素数组
  14748. var lowerListElems = []; // 获取结束元素
  14749. var $endDom = utils_1.getEndPoint($endElem); // 获取下半序列中选中的内容
  14750. while ($endDom.length) {
  14751. lowerListElems.unshift($endDom);
  14752. $endDom = $endDom.prev();
  14753. } // 上序列元素数组
  14754. var upperListElems = []; // 获取起点元素
  14755. var $startDom = utils_1.getStartPoint($startElem); // 获取上半序列中的选中内容,并添加到文档片段中
  14756. while ($startDom.length) {
  14757. upperListElems.push($startDom);
  14758. $startDom = $startDom.next();
  14759. } // 创建 文档片段
  14760. $containerFragment = utils_1.createDocumentFragment(); // 弹出开头和结尾的序列
  14761. $nodes.shift();
  14762. $nodes.pop(); // 把头部序列的内容添加到文档片段当中
  14763. (0, _forEach["default"])(upperListElems).call(upperListElems, function ($list) {
  14764. return $containerFragment.append($list.elems[0]);
  14765. }); // 生成 li 标签,并且添加到 文档片段中,删除无用节点
  14766. $containerFragment = utils_1.createElementFragment(utils_1.filterSelectionNodes($nodes), // 序列中间的数据 - 进行数据过滤
  14767. $containerFragment); // 把尾部序列的内容添加到文档片段当中
  14768. (0, _forEach["default"])(lowerListElems).call(lowerListElems, function ($list) {
  14769. return $containerFragment.append($list.elems[0]);
  14770. }); // 记录
  14771. this.selectionRangeElem.set($containerFragment); // =====================================
  14772. // 开头序列 和 设置序列类型相同
  14773. // =====================================
  14774. if (startNodeName === listType) {
  14775. // 插入到 开始序列的尾部(作为子元素)
  14776. $startElem.elems[0].append($containerFragment); // 序列全选被掏空了后,就卸磨杀驴吧
  14777. !((_f = $endElem.children()) === null || _f === void 0 ? void 0 : _f.length) && $endElem.remove();
  14778. } // =====================================
  14779. // 结尾序列 和 设置序列类型相同
  14780. // =====================================
  14781. else {
  14782. // 插入到结束序列的顶部(作为子元素)
  14783. if ((_g = $endElem.children()) === null || _g === void 0 ? void 0 : _g.length) {
  14784. var $endElemChild = $endElem.children();
  14785. utils_1.insertBefore($endElemChild, $containerFragment, $endElemChild.elems[0]);
  14786. } else {
  14787. $endElem.elems[0].append($containerFragment);
  14788. }
  14789. }
  14790. }
  14791. };
  14792. return JoinListHandle;
  14793. }(ListHandle_1.ListHandle);
  14794. exports["default"] = JoinListHandle;
  14795. /***/ }),
  14796. /* 375 */
  14797. /***/ (function(module, exports, __webpack_require__) {
  14798. "use strict";
  14799. var _interopRequireDefault = __webpack_require__(0);
  14800. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  14801. var _forEach = _interopRequireDefault(__webpack_require__(4));
  14802. (0, _defineProperty["default"])(exports, "__esModule", {
  14803. value: true
  14804. });
  14805. var tslib_1 = __webpack_require__(2);
  14806. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  14807. var ListHandle_1 = __webpack_require__(58);
  14808. var utils_1 = __webpack_require__(47);
  14809. var StartJoinListHandle =
  14810. /** @class */
  14811. function (_super) {
  14812. tslib_1.__extends(StartJoinListHandle, _super);
  14813. function StartJoinListHandle(options) {
  14814. return _super.call(this, options) || this;
  14815. }
  14816. StartJoinListHandle.prototype.exec = function () {
  14817. var _a;
  14818. var _b = this.options,
  14819. editor = _b.editor,
  14820. listType = _b.listType,
  14821. listTarget = _b.listTarget,
  14822. $startElem = _b.$startElem; // 容器 - HTML 文档片段
  14823. var $containerFragment; // 获取选中的段落
  14824. var $nodes = editor.selection.getSelectionRangeTopNodes(); // 获取开始段落标签名
  14825. var startNodeName = $startElem === null || $startElem === void 0 ? void 0 : $startElem.getNodeName(); // 弹出 开头序列
  14826. $nodes.shift(); // 上序列元素数组
  14827. var upperListElems = []; // 获取起点元素
  14828. var $startDom = utils_1.getStartPoint($startElem); // 获取上半序列中的选中内容,并添加到文档片段中
  14829. while ($startDom.length) {
  14830. upperListElems.push($startDom);
  14831. $startDom = $startDom.next();
  14832. } // =====================================
  14833. // 当前序列类型和开头序列的类型 一致
  14834. // 代表当前是一个 融合(把其他段落加入到开头序列中) 的操作
  14835. // =====================================
  14836. if (startNodeName === listType) {
  14837. $containerFragment = utils_1.createDocumentFragment();
  14838. (0, _forEach["default"])(upperListElems).call(upperListElems, function ($list) {
  14839. return $containerFragment.append($list.elems[0]);
  14840. }); // 生成 li 元属,并删除
  14841. $containerFragment = utils_1.createElementFragment(utils_1.filterSelectionNodes($nodes), // 过滤元素节点数据
  14842. $containerFragment); // 插入到开始序列末尾
  14843. this.selectionRangeElem.set($containerFragment); // this.selectionRangeElem.set($startElem.elems[0])
  14844. $startElem.elems[0].append($containerFragment);
  14845. } // =====================================
  14846. // 当前序列类型和开头序列的类型 不一致
  14847. // 代表当前是一个 设置序列 的操作
  14848. // =====================================
  14849. else {
  14850. // 创建 序列节点
  14851. $containerFragment = utils_1.createElement(listTarget);
  14852. (0, _forEach["default"])(upperListElems).call(upperListElems, function ($list) {
  14853. return $containerFragment.append($list.elems[0]);
  14854. }); // 生成 li 元素,并添加到 序列节点 当中,删除无用节点
  14855. $containerFragment = utils_1.createElementFragment(utils_1.filterSelectionNodes($nodes), // 过滤普通节点
  14856. $containerFragment); // 插入到开始元素
  14857. this.selectionRangeElem.set($containerFragment);
  14858. dom_core_1["default"]($containerFragment).insertAfter($startElem); // 序列全选被掏空了后,就卸磨杀驴吧
  14859. !((_a = $startElem.children()) === null || _a === void 0 ? void 0 : _a.length) && $startElem.remove();
  14860. }
  14861. };
  14862. return StartJoinListHandle;
  14863. }(ListHandle_1.ListHandle);
  14864. exports["default"] = StartJoinListHandle;
  14865. /***/ }),
  14866. /* 376 */
  14867. /***/ (function(module, exports, __webpack_require__) {
  14868. "use strict";
  14869. var _interopRequireDefault = __webpack_require__(0);
  14870. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  14871. var _forEach = _interopRequireDefault(__webpack_require__(4));
  14872. (0, _defineProperty["default"])(exports, "__esModule", {
  14873. value: true
  14874. });
  14875. var tslib_1 = __webpack_require__(2);
  14876. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  14877. var ListHandle_1 = __webpack_require__(58);
  14878. var utils_1 = __webpack_require__(47);
  14879. var EndJoinListHandle =
  14880. /** @class */
  14881. function (_super) {
  14882. tslib_1.__extends(EndJoinListHandle, _super);
  14883. function EndJoinListHandle(options) {
  14884. return _super.call(this, options) || this;
  14885. }
  14886. EndJoinListHandle.prototype.exec = function () {
  14887. var _a, _b;
  14888. var _c = this.options,
  14889. editor = _c.editor,
  14890. listType = _c.listType,
  14891. listTarget = _c.listTarget,
  14892. $endElem = _c.$endElem; // 容器 - HTML 文档片段
  14893. var $containerFragment; // 获取选中的段落
  14894. var $nodes = editor.selection.getSelectionRangeTopNodes(); // 获取结束段落标签名
  14895. var endNodeName = $endElem === null || $endElem === void 0 ? void 0 : $endElem.getNodeName(); // 弹出 结束序列
  14896. $nodes.pop(); // 下序列元素数组
  14897. var lowerListElems = []; // 获取结束元素
  14898. var $endDom = utils_1.getEndPoint($endElem); // 获取下半序列中选中的内容
  14899. while ($endDom.length) {
  14900. lowerListElems.unshift($endDom);
  14901. $endDom = $endDom.prev();
  14902. } // =====================================
  14903. // 当前序列类型和结束序列的类型 一致
  14904. // 代表当前是一个 融合(把其他段落加入到结束序列中) 的操作
  14905. // =====================================
  14906. if (endNodeName === listType) {
  14907. // 生成 li 元属,并删除原来的 dom 元素
  14908. $containerFragment = utils_1.createElementFragment(utils_1.filterSelectionNodes($nodes), // 过滤元素节点数据
  14909. utils_1.createDocumentFragment() // 创建 文档片段
  14910. );
  14911. (0, _forEach["default"])(lowerListElems).call(lowerListElems, function ($list) {
  14912. return $containerFragment.append($list.elems[0]);
  14913. }); // 插入到结束序列之前
  14914. this.selectionRangeElem.set($containerFragment);
  14915. if ((_a = $endElem.children()) === null || _a === void 0 ? void 0 : _a.length) {
  14916. var $endElemChild = $endElem.children();
  14917. utils_1.insertBefore($endElemChild, $containerFragment, $endElemChild.elems[0]);
  14918. } else {
  14919. $endElem.elems[0].append($containerFragment);
  14920. }
  14921. } // =====================================
  14922. // 当前序列类型和结束序列的类型 不一致
  14923. // 代表当前是一个 设置序列 的操作
  14924. // =====================================
  14925. else {
  14926. // 过滤元素节点数据
  14927. var $selectionNodes = utils_1.filterSelectionNodes($nodes); // 把下序列的内容添加到过滤元素中
  14928. $selectionNodes.push.apply($selectionNodes, lowerListElems); // 生成 li 元素并且添加到序列节点后删除原节点
  14929. $containerFragment = utils_1.createElementFragment($selectionNodes, utils_1.createElement(listTarget) // 创建 序列节点
  14930. ); // 插入到结束序列之前
  14931. this.selectionRangeElem.set($containerFragment);
  14932. dom_core_1["default"]($containerFragment).insertBefore($endElem); // 序列全选被掏空了后,就卸磨杀驴吧
  14933. !((_b = $endElem.children()) === null || _b === void 0 ? void 0 : _b.length) && $endElem.remove();
  14934. }
  14935. };
  14936. return EndJoinListHandle;
  14937. }(ListHandle_1.ListHandle);
  14938. exports["default"] = EndJoinListHandle;
  14939. /***/ }),
  14940. /* 377 */
  14941. /***/ (function(module, exports, __webpack_require__) {
  14942. "use strict";
  14943. var _interopRequireDefault = __webpack_require__(0);
  14944. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  14945. (0, _defineProperty["default"])(exports, "__esModule", {
  14946. value: true
  14947. });
  14948. var tslib_1 = __webpack_require__(2);
  14949. var ListHandle_1 = __webpack_require__(58);
  14950. var utils_1 = __webpack_require__(47);
  14951. var OtherListHandle =
  14952. /** @class */
  14953. function (_super) {
  14954. tslib_1.__extends(OtherListHandle, _super);
  14955. function OtherListHandle(options, range) {
  14956. var _this = _super.call(this, options) || this;
  14957. _this.range = range;
  14958. return _this;
  14959. }
  14960. OtherListHandle.prototype.exec = function () {
  14961. var _a = this.options,
  14962. editor = _a.editor,
  14963. listTarget = _a.listTarget; // 获取选中的段落
  14964. var $nodes = editor.selection.getSelectionRangeTopNodes(); // 生成 li 元素并且添加到序列节点后删除原节点
  14965. var $containerFragment = utils_1.createElementFragment(utils_1.filterSelectionNodes($nodes), // 过滤选取的元素
  14966. utils_1.createElement(listTarget) // 创建 序列节点
  14967. ); // 插入节点到选区
  14968. this.selectionRangeElem.set($containerFragment);
  14969. this.range.insertNode($containerFragment);
  14970. };
  14971. return OtherListHandle;
  14972. }(ListHandle_1.ListHandle);
  14973. exports["default"] = OtherListHandle;
  14974. /***/ }),
  14975. /* 378 */
  14976. /***/ (function(module, exports, __webpack_require__) {
  14977. "use strict";
  14978. /**
  14979. * @description 段落行高 LineHeight
  14980. * @author lichunlin
  14981. *
  14982. */
  14983. var _interopRequireDefault = __webpack_require__(0);
  14984. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  14985. var _forEach = _interopRequireDefault(__webpack_require__(4));
  14986. var _indexOf = _interopRequireDefault(__webpack_require__(27));
  14987. (0, _defineProperty["default"])(exports, "__esModule", {
  14988. value: true
  14989. });
  14990. var tslib_1 = __webpack_require__(2);
  14991. var DropListMenu_1 = tslib_1.__importDefault(__webpack_require__(24));
  14992. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  14993. var lineHeightList_1 = tslib_1.__importDefault(__webpack_require__(379));
  14994. var LineHeight =
  14995. /** @class */
  14996. function (_super) {
  14997. tslib_1.__extends(LineHeight, _super);
  14998. function LineHeight(editor) {
  14999. var _this = this;
  15000. var $elem = dom_core_1["default"]("<div class=\"w-e-menu\" data-title=\"\u884C\u9AD8\">\n <i class=\"w-e-icon-row-height\"></i>\n </div>");
  15001. var lineHeightMenu = new lineHeightList_1["default"](editor, editor.config.lineHeights);
  15002. var DropListMenu = {
  15003. width: 100,
  15004. title: '设置行高',
  15005. type: 'list',
  15006. list: lineHeightMenu.getItemList(),
  15007. clickHandler: function clickHandler(value) {
  15008. //保存焦点
  15009. editor.selection.saveRange();
  15010. _this.command(value);
  15011. }
  15012. };
  15013. _this = _super.call(this, $elem, editor, DropListMenu) || this;
  15014. return _this;
  15015. }
  15016. /**
  15017. * 执行命令
  15018. * @param value value
  15019. */
  15020. LineHeight.prototype.command = function (value) {
  15021. var editor = this.editor; //重置选区
  15022. editor.selection.restoreSelection(); // 获取选区的祖先元素
  15023. var $containerElem = dom_core_1["default"](editor.selection.getSelectionContainerElem());
  15024. if (!$containerElem.elems.length) return; //选中多行操作
  15025. if ($containerElem && editor.$textElem.equal($containerElem)) {
  15026. // 标识是否可以设置行高的样式
  15027. var setStyleLock = false; //获取range 开头结束的dom
  15028. var selectionStartElem = dom_core_1["default"](editor.selection.getSelectionStartElem()).elems[0];
  15029. var SelectionEndElem = dom_core_1["default"](editor.selection.getSelectionEndElem()).elems[0]; // 获取选区中,在contenteditable下的直接父元素
  15030. var StartElemWrap = this.getDom(selectionStartElem);
  15031. var EndElemWrap = this.getDom(SelectionEndElem);
  15032. var containerElemChildren = $containerElem.elems[0].children;
  15033. for (var i = 0; i < containerElemChildren.length; i++) {
  15034. var item = containerElemChildren[i]; // 目前只支持p 段落标签设置行高
  15035. if (dom_core_1["default"](item).getNodeName() !== 'P') {
  15036. continue;
  15037. }
  15038. if (item === StartElemWrap) {
  15039. setStyleLock = true;
  15040. } // 证明在区间节点里
  15041. if (setStyleLock) {
  15042. dom_core_1["default"](item).css('line-height', value);
  15043. if (item === EndElemWrap) {
  15044. setStyleLock = false; // 当设置完选择的EndElemWrap时,就可以退出
  15045. return;
  15046. }
  15047. }
  15048. } //重新设置选区
  15049. editor.selection.createRangeByElems(selectionStartElem, SelectionEndElem);
  15050. return;
  15051. } // 单行操作
  15052. // 选中区间的dom元素
  15053. var selectElem = $containerElem.elems[0]; // 获取选区中,在contenteditable下的直接父元素
  15054. var selectElemWrapdom = this.getDom(selectElem); // 目前只支持p 段落标签设置行高
  15055. if (dom_core_1["default"](selectElemWrapdom).getNodeName() !== 'P') {
  15056. return;
  15057. }
  15058. dom_core_1["default"](selectElemWrapdom).css('line-height', value); //重新设置选区
  15059. editor.selection.createRangeByElems(selectElemWrapdom, selectElemWrapdom);
  15060. return;
  15061. };
  15062. /**
  15063. * 遍历dom 获取祖父元素 直到contenteditable属性的div标签
  15064. *
  15065. */
  15066. LineHeight.prototype.getDom = function (dom) {
  15067. var DOM = dom_core_1["default"](dom).elems[0];
  15068. if (!DOM.parentNode) {
  15069. return DOM;
  15070. }
  15071. function getParentNode($node, editor) {
  15072. var $parent = dom_core_1["default"]($node.parentNode);
  15073. if (editor.$textElem.equal($parent)) {
  15074. return $node;
  15075. } else {
  15076. return getParentNode($parent.elems[0], editor);
  15077. }
  15078. }
  15079. DOM = getParentNode(DOM, this.editor);
  15080. return DOM;
  15081. };
  15082. /**
  15083. * style 处理
  15084. *
  15085. * 废弃的方法
  15086. */
  15087. LineHeight.prototype.styleProcessing = function (styleList) {
  15088. var styleStr = '';
  15089. (0, _forEach["default"])(styleList).call(styleList, function (item) {
  15090. item !== '' && (0, _indexOf["default"])(item).call(item, 'line-height') === -1 ? styleStr = styleStr + item + ';' : '';
  15091. });
  15092. return styleStr;
  15093. };
  15094. /**
  15095. * 段落全选 比如:避免11变成111
  15096. *
  15097. * 废弃的方法
  15098. */
  15099. LineHeight.prototype.setRange = function (startDom, endDom) {
  15100. var editor = this.editor;
  15101. var selection = window.getSelection ? window.getSelection() : document.getSelection(); //清除所有的选区
  15102. selection === null || selection === void 0 ? void 0 : selection.removeAllRanges();
  15103. var range = document.createRange();
  15104. var star = startDom;
  15105. var end = endDom;
  15106. range.setStart(star, 0);
  15107. range.setEnd(end, 1);
  15108. selection === null || selection === void 0 ? void 0 : selection.addRange(range); //保存设置好的选区
  15109. editor.selection.saveRange(); //清除所有的选区
  15110. selection === null || selection === void 0 ? void 0 : selection.removeAllRanges(); //恢复选区
  15111. editor.selection.restoreSelection();
  15112. };
  15113. /**
  15114. * 尝试修改菜单激活状态
  15115. */
  15116. LineHeight.prototype.tryChangeActive = function () {
  15117. var editor = this.editor;
  15118. var $selectionElem = editor.selection.getSelectionContainerElem();
  15119. if ($selectionElem && editor.$textElem.equal($selectionElem)) {
  15120. //避免选中多行设置
  15121. return;
  15122. }
  15123. var dom = dom_core_1["default"](editor.selection.getSelectionStartElem()); // 有些情况下 dom 可能为空,比如编辑器初始化
  15124. if (dom.length === 0) return;
  15125. dom = this.getDom(dom.elems[0]);
  15126. var style = dom.getAttribute('style') ? dom.getAttribute('style') : ''; //判断当前标签是否具有line-height属性
  15127. if (style && (0, _indexOf["default"])(style).call(style, 'line-height') !== -1) {
  15128. this.active();
  15129. } else {
  15130. this.unActive();
  15131. }
  15132. };
  15133. return LineHeight;
  15134. }(DropListMenu_1["default"]);
  15135. exports["default"] = LineHeight;
  15136. /***/ }),
  15137. /* 379 */
  15138. /***/ (function(module, exports, __webpack_require__) {
  15139. "use strict";
  15140. var _interopRequireDefault = __webpack_require__(0);
  15141. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  15142. var _forEach = _interopRequireDefault(__webpack_require__(4));
  15143. (0, _defineProperty["default"])(exports, "__esModule", {
  15144. value: true
  15145. });
  15146. var tslib_1 = __webpack_require__(2);
  15147. /**
  15148. * @description 行高 菜单
  15149. * @author lichunlin
  15150. */
  15151. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  15152. var lineHeightList =
  15153. /** @class */
  15154. function () {
  15155. function lineHeightList(editor, list) {
  15156. var _this = this;
  15157. this.itemList = [{
  15158. $elem: dom_core_1["default"]("<span>" + editor.i18next.t('默认') + "</span>"),
  15159. value: ''
  15160. }];
  15161. (0, _forEach["default"])(list).call(list, function (item) {
  15162. _this.itemList.push({
  15163. $elem: dom_core_1["default"]("<span>" + item + "</span>"),
  15164. value: item
  15165. });
  15166. });
  15167. }
  15168. lineHeightList.prototype.getItemList = function () {
  15169. return this.itemList;
  15170. };
  15171. return lineHeightList;
  15172. }();
  15173. exports["default"] = lineHeightList;
  15174. /***/ }),
  15175. /* 380 */
  15176. /***/ (function(module, exports, __webpack_require__) {
  15177. "use strict";
  15178. /**
  15179. * @description 撤销
  15180. * @author tonghan
  15181. */
  15182. var _interopRequireDefault = __webpack_require__(0);
  15183. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  15184. (0, _defineProperty["default"])(exports, "__esModule", {
  15185. value: true
  15186. });
  15187. var tslib_1 = __webpack_require__(2);
  15188. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  15189. var BtnMenu_1 = tslib_1.__importDefault(__webpack_require__(23));
  15190. var Undo =
  15191. /** @class */
  15192. function (_super) {
  15193. tslib_1.__extends(Undo, _super);
  15194. function Undo(editor) {
  15195. var _this = this;
  15196. var $elem = dom_core_1["default"]("<div class=\"w-e-menu\" data-title=\"\u64A4\u9500\">\n <i class=\"w-e-icon-undo\"></i>\n </div>");
  15197. _this = _super.call(this, $elem, editor) || this;
  15198. return _this;
  15199. }
  15200. /**
  15201. * 点击事件
  15202. */
  15203. Undo.prototype.clickHandler = function () {
  15204. var editor = this.editor;
  15205. editor.history.revoke(); // 重新创建 range,是处理当初始化编辑器,API插入内容后撤销,range 不在编辑器内部的问题
  15206. var children = editor.$textElem.children();
  15207. if (!(children === null || children === void 0 ? void 0 : children.length)) return;
  15208. var $last = children.last();
  15209. editor.selection.createRangeByElem($last, false, true);
  15210. editor.selection.restoreSelection();
  15211. };
  15212. /**
  15213. * 尝试修改菜单激活状态
  15214. */
  15215. Undo.prototype.tryChangeActive = function () {
  15216. // 标准模式下才进行操作
  15217. if (!this.editor.isCompatibleMode) {
  15218. if (this.editor.history.size[0]) {
  15219. this.active();
  15220. } else {
  15221. this.unActive();
  15222. }
  15223. }
  15224. };
  15225. return Undo;
  15226. }(BtnMenu_1["default"]);
  15227. exports["default"] = Undo;
  15228. /***/ }),
  15229. /* 381 */
  15230. /***/ (function(module, exports, __webpack_require__) {
  15231. "use strict";
  15232. /**
  15233. * @description 重做
  15234. * @author tonghan
  15235. */
  15236. var _interopRequireDefault = __webpack_require__(0);
  15237. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  15238. (0, _defineProperty["default"])(exports, "__esModule", {
  15239. value: true
  15240. });
  15241. var tslib_1 = __webpack_require__(2);
  15242. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  15243. var BtnMenu_1 = tslib_1.__importDefault(__webpack_require__(23));
  15244. var Redo =
  15245. /** @class */
  15246. function (_super) {
  15247. tslib_1.__extends(Redo, _super);
  15248. function Redo(editor) {
  15249. var _this = this;
  15250. var $elem = dom_core_1["default"]("<div class=\"w-e-menu\" data-title=\"\u6062\u590D\">\n <i class=\"w-e-icon-redo\"></i>\n </div>");
  15251. _this = _super.call(this, $elem, editor) || this;
  15252. return _this;
  15253. }
  15254. /**
  15255. * 点击事件
  15256. */
  15257. Redo.prototype.clickHandler = function () {
  15258. var editor = this.editor;
  15259. editor.history.restore(); // 重新创建 range,是处理当初始化编辑器,API插入内容后撤销,range 不在编辑器内部的问题
  15260. var children = editor.$textElem.children();
  15261. if (!(children === null || children === void 0 ? void 0 : children.length)) return;
  15262. var $last = children.last();
  15263. editor.selection.createRangeByElem($last, false, true);
  15264. editor.selection.restoreSelection();
  15265. };
  15266. /**
  15267. * 尝试修改菜单激活状态
  15268. */
  15269. Redo.prototype.tryChangeActive = function () {
  15270. // 标准模式下才进行操作
  15271. if (!this.editor.isCompatibleMode) {
  15272. if (this.editor.history.size[1]) {
  15273. this.active();
  15274. } else {
  15275. this.unActive();
  15276. }
  15277. }
  15278. };
  15279. return Redo;
  15280. }(BtnMenu_1["default"]);
  15281. exports["default"] = Redo;
  15282. /***/ }),
  15283. /* 382 */
  15284. /***/ (function(module, exports, __webpack_require__) {
  15285. "use strict";
  15286. /**
  15287. * @description 创建table
  15288. * @author lichunlin
  15289. */
  15290. var _interopRequireDefault = __webpack_require__(0);
  15291. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  15292. (0, _defineProperty["default"])(exports, "__esModule", {
  15293. value: true
  15294. });
  15295. var tslib_1 = __webpack_require__(2);
  15296. var PanelMenu_1 = tslib_1.__importDefault(__webpack_require__(38));
  15297. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  15298. var create_panel_conf_1 = tslib_1.__importDefault(__webpack_require__(383));
  15299. var Panel_1 = tslib_1.__importDefault(__webpack_require__(33));
  15300. var index_1 = tslib_1.__importDefault(__webpack_require__(392));
  15301. var Table =
  15302. /** @class */
  15303. function (_super) {
  15304. tslib_1.__extends(Table, _super);
  15305. function Table(editor) {
  15306. var _this = this;
  15307. var $elem = dom_core_1["default"]('<div class="w-e-menu" data-title="表格"><i class="w-e-icon-table2"></i></div>');
  15308. _this = _super.call(this, $elem, editor) || this; // 绑定事件
  15309. index_1["default"](editor);
  15310. return _this;
  15311. }
  15312. /**
  15313. * 菜单点击事件
  15314. */
  15315. Table.prototype.clickHandler = function () {
  15316. this.createPanel();
  15317. };
  15318. /**
  15319. * 创建 panel
  15320. */
  15321. Table.prototype.createPanel = function () {
  15322. var conf = create_panel_conf_1["default"](this.editor);
  15323. var panel = new Panel_1["default"](this, conf);
  15324. panel.create();
  15325. };
  15326. /**
  15327. * 尝试修改菜单 active 状态
  15328. */
  15329. Table.prototype.tryChangeActive = function () {};
  15330. return Table;
  15331. }(PanelMenu_1["default"]);
  15332. exports["default"] = Table;
  15333. /***/ }),
  15334. /* 383 */
  15335. /***/ (function(module, exports, __webpack_require__) {
  15336. "use strict";
  15337. /**
  15338. * @description table 菜单 panel tab 配置
  15339. * @author lichunlin
  15340. */
  15341. var _interopRequireDefault = __webpack_require__(0);
  15342. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  15343. var _isInteger = _interopRequireDefault(__webpack_require__(384));
  15344. (0, _defineProperty["default"])(exports, "__esModule", {
  15345. value: true
  15346. });
  15347. var tslib_1 = __webpack_require__(2);
  15348. var util_1 = __webpack_require__(6);
  15349. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  15350. __webpack_require__(389);
  15351. var create_table_1 = tslib_1.__importDefault(__webpack_require__(391));
  15352. /**
  15353. * 判断一个数值是否为正整数
  15354. * @param { number } n 被验证的值
  15355. */
  15356. function isPositiveInteger(n) {
  15357. //是否为正整数
  15358. return n > 0 && (0, _isInteger["default"])(n);
  15359. }
  15360. function default_1(editor) {
  15361. var createTable = new create_table_1["default"](editor); // panel 中需要用到的id
  15362. var colId = util_1.getRandom('w-col-id');
  15363. var rowId = util_1.getRandom('w-row-id');
  15364. var insertBtnId = util_1.getRandom('btn-link');
  15365. var i18nPrefix = 'menus.panelMenus.table.';
  15366. var t = function t(text) {
  15367. return editor.i18next.t(text);
  15368. }; // tabs 配置 -----------------------------------------
  15369. var tabsConf = [{
  15370. title: t(i18nPrefix + "\u63D2\u5165\u8868\u683C"),
  15371. tpl: "<div>\n <div class=\"w-e-table\">\n <span>" + t('创建') + "</span>\n <input id=\"" + rowId + "\" type=\"text\" class=\"w-e-table-input\" value=\"5\"/></td>\n <span>" + t(i18nPrefix + "\u884C") + "</span>\n <input id=\"" + colId + "\" type=\"text\" class=\"w-e-table-input\" value=\"5\"/></td>\n <span>" + (t(i18nPrefix + "\u5217") + t(i18nPrefix + "\u7684") + t(i18nPrefix + "\u8868\u683C")) + "</span>\n </div>\n <div class=\"w-e-button-container\">\n <button type=\"button\" id=\"" + insertBtnId + "\" class=\"right\">" + t('插入') + "</button>\n </div>\n </div>",
  15372. events: [{
  15373. selector: '#' + insertBtnId,
  15374. type: 'click',
  15375. fn: function fn() {
  15376. var colValue = Number(dom_core_1["default"]('#' + colId).val());
  15377. var rowValue = Number(dom_core_1["default"]('#' + rowId).val()); //校验是否传值
  15378. if (isPositiveInteger(rowValue) && isPositiveInteger(colValue)) {
  15379. createTable.createAction(rowValue, colValue);
  15380. return true;
  15381. } else {
  15382. editor.config.customAlert('表格行列请输入正整数', 'warning');
  15383. return false;
  15384. } // 返回 true 表示函数执行结束之后关闭 panel
  15385. },
  15386. bindEnter: true
  15387. }]
  15388. }]; // tabs end
  15389. // 最终的配置 -----------------------------------------
  15390. var conf = {
  15391. width: 330,
  15392. height: 0,
  15393. tabs: []
  15394. };
  15395. conf.tabs.push(tabsConf[0]);
  15396. return conf;
  15397. }
  15398. exports["default"] = default_1;
  15399. /***/ }),
  15400. /* 384 */
  15401. /***/ (function(module, exports, __webpack_require__) {
  15402. module.exports = __webpack_require__(385);
  15403. /***/ }),
  15404. /* 385 */
  15405. /***/ (function(module, exports, __webpack_require__) {
  15406. var parent = __webpack_require__(386);
  15407. module.exports = parent;
  15408. /***/ }),
  15409. /* 386 */
  15410. /***/ (function(module, exports, __webpack_require__) {
  15411. __webpack_require__(387);
  15412. var path = __webpack_require__(9);
  15413. module.exports = path.Number.isInteger;
  15414. /***/ }),
  15415. /* 387 */
  15416. /***/ (function(module, exports, __webpack_require__) {
  15417. var $ = __webpack_require__(5);
  15418. var isInteger = __webpack_require__(388);
  15419. // `Number.isInteger` method
  15420. // https://tc39.github.io/ecma262/#sec-number.isinteger
  15421. $({ target: 'Number', stat: true }, {
  15422. isInteger: isInteger
  15423. });
  15424. /***/ }),
  15425. /* 388 */
  15426. /***/ (function(module, exports, __webpack_require__) {
  15427. var isObject = __webpack_require__(13);
  15428. var floor = Math.floor;
  15429. // `Number.isInteger` method implementation
  15430. // https://tc39.github.io/ecma262/#sec-number.isinteger
  15431. module.exports = function isInteger(it) {
  15432. return !isObject(it) && isFinite(it) && floor(it) === it;
  15433. };
  15434. /***/ }),
  15435. /* 389 */
  15436. /***/ (function(module, exports, __webpack_require__) {
  15437. var api = __webpack_require__(20);
  15438. var content = __webpack_require__(390);
  15439. content = content.__esModule ? content.default : content;
  15440. if (typeof content === 'string') {
  15441. content = [[module.i, content, '']];
  15442. }
  15443. var options = {};
  15444. options.insert = "head";
  15445. options.singleton = false;
  15446. var update = api(content, options);
  15447. module.exports = content.locals || {};
  15448. /***/ }),
  15449. /* 390 */
  15450. /***/ (function(module, exports, __webpack_require__) {
  15451. // Imports
  15452. var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(21);
  15453. exports = ___CSS_LOADER_API_IMPORT___(false);
  15454. // Module
  15455. exports.push([module.i, ".w-e-table {\n display: flex;\n}\n.w-e-table .w-e-table-input {\n width: 40px;\n text-align: center!important;\n margin: 0 5px;\n}\n", ""]);
  15456. // Exports
  15457. module.exports = exports;
  15458. /***/ }),
  15459. /* 391 */
  15460. /***/ (function(module, exports, __webpack_require__) {
  15461. "use strict";
  15462. /**
  15463. * @description 创建tabel
  15464. * @author lichunlin
  15465. */
  15466. var _interopRequireDefault = __webpack_require__(0);
  15467. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  15468. (0, _defineProperty["default"])(exports, "__esModule", {
  15469. value: true
  15470. });
  15471. var tslib_1 = __webpack_require__(2);
  15472. var const_1 = __webpack_require__(7);
  15473. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  15474. var CreateTable =
  15475. /** @class */
  15476. function () {
  15477. function CreateTable(editor) {
  15478. this.editor = editor;
  15479. }
  15480. /**
  15481. * 执行创建
  15482. * @param rowValue 行数
  15483. * @param colValue 列数
  15484. */
  15485. CreateTable.prototype.createAction = function (rowValue, colValue) {
  15486. var editor = this.editor; //不允许在有序列表中添加table
  15487. var $selectionElem = dom_core_1["default"](editor.selection.getSelectionContainerElem());
  15488. var $ul = dom_core_1["default"]($selectionElem.elems[0]).parentUntilEditor('UL', editor);
  15489. var $ol = dom_core_1["default"]($selectionElem.elems[0]).parentUntilEditor('OL', editor);
  15490. if ($ul || $ol) {
  15491. return;
  15492. }
  15493. var tableDom = this.createTableHtml(rowValue, colValue);
  15494. editor.cmd["do"]('insertHTML', tableDom);
  15495. };
  15496. /**
  15497. * 创建table、行、列
  15498. * @param rowValue 行数
  15499. * @param colValue 列数
  15500. */
  15501. CreateTable.prototype.createTableHtml = function (rowValue, colValue) {
  15502. var rowStr = '';
  15503. var colStr = '';
  15504. for (var i = 0; i < rowValue; i++) {
  15505. colStr = '';
  15506. for (var j = 0; j < colValue; j++) {
  15507. if (i === 0) {
  15508. colStr = colStr + '<th></th>';
  15509. } else {
  15510. colStr = colStr + '<td></td>';
  15511. }
  15512. }
  15513. rowStr = rowStr + '<tr>' + colStr + '</tr>';
  15514. }
  15515. var tableDom = "<table border=\"0\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\"><tbody>" + rowStr + ("</tbody></table>" + const_1.EMPTY_P);
  15516. return tableDom;
  15517. };
  15518. return CreateTable;
  15519. }();
  15520. exports["default"] = CreateTable;
  15521. /***/ }),
  15522. /* 392 */
  15523. /***/ (function(module, exports, __webpack_require__) {
  15524. "use strict";
  15525. /**
  15526. * @description 绑定点击事件
  15527. * @author lichunlin
  15528. */
  15529. var _interopRequireDefault = __webpack_require__(0);
  15530. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  15531. (0, _defineProperty["default"])(exports, "__esModule", {
  15532. value: true
  15533. });
  15534. var tslib_1 = __webpack_require__(2);
  15535. var tooltip_event_1 = tslib_1.__importDefault(__webpack_require__(393));
  15536. var table_event_1 = __webpack_require__(400);
  15537. /**
  15538. * 绑定事件
  15539. * @param editor 编辑器实例
  15540. */
  15541. function bindEvent(editor) {
  15542. //Tooltip
  15543. tooltip_event_1["default"](editor);
  15544. table_event_1.bindEventKeyboardEvent(editor);
  15545. table_event_1.bindClickEvent(editor);
  15546. }
  15547. exports["default"] = bindEvent;
  15548. /***/ }),
  15549. /* 393 */
  15550. /***/ (function(module, exports, __webpack_require__) {
  15551. "use strict";
  15552. /**
  15553. * @description tooltip 事件
  15554. * @author lichunlin
  15555. */
  15556. var _interopRequireDefault = __webpack_require__(0);
  15557. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  15558. (0, _defineProperty["default"])(exports, "__esModule", {
  15559. value: true
  15560. });
  15561. var tslib_1 = __webpack_require__(2);
  15562. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  15563. var Tooltip_1 = tslib_1.__importDefault(__webpack_require__(39)); //操作事件
  15564. var operating_event_1 = tslib_1.__importDefault(__webpack_require__(394));
  15565. var getNode_1 = tslib_1.__importDefault(__webpack_require__(399));
  15566. var const_1 = __webpack_require__(7);
  15567. /**
  15568. * 生成 Tooltip 的显示隐藏函数
  15569. */
  15570. function createShowHideFn(editor) {
  15571. var tooltip;
  15572. /**
  15573. * 显示 tooltip
  15574. * @param table元素
  15575. */
  15576. function showTableTooltip($node) {
  15577. var getnode = new getNode_1["default"](editor);
  15578. var i18nPrefix = 'menus.panelMenus.table.';
  15579. var t = function t(text, prefix) {
  15580. if (prefix === void 0) {
  15581. prefix = i18nPrefix;
  15582. }
  15583. return editor.i18next.t(prefix + text);
  15584. };
  15585. var conf = [{
  15586. // $elem: $("<span class='w-e-icon-trash-o'></span>"),
  15587. $elem: dom_core_1["default"]("<span>" + t('删除表格') + "</span>"),
  15588. onClick: function onClick(editor, $node) {
  15589. // 选中img元素
  15590. editor.selection.createRangeByElem($node);
  15591. editor.selection.restoreSelection();
  15592. editor.cmd["do"]('insertHTML', const_1.EMPTY_P); // 返回 true,表示执行完之后,隐藏 tooltip。否则不隐藏。
  15593. return true;
  15594. }
  15595. }, {
  15596. $elem: dom_core_1["default"]("<span>" + t('添加行') + "</span>"),
  15597. onClick: function onClick(editor, $node) {
  15598. // 禁止多选操作
  15599. var isMore = isMoreRowAction(editor);
  15600. if (isMore) {
  15601. return true;
  15602. } //当前元素
  15603. var selectDom = dom_core_1["default"](editor.selection.getSelectionStartElem()); //当前行
  15604. var $currentRow = getnode.getRowNode(selectDom.elems[0]);
  15605. if (!$currentRow) {
  15606. return true;
  15607. } //获取当前行的index
  15608. var index = Number(getnode.getCurrentRowIndex($node.elems[0], $currentRow)); //生成要替换的html
  15609. var htmlStr = getnode.getTableHtml($node.elems[0]); //生成新的table
  15610. var newdom = getnode.getTableHtml(operating_event_1["default"].ProcessingRow(dom_core_1["default"](htmlStr), index).elems[0]);
  15611. newdom = _isEmptyP($node, newdom); // 选中table
  15612. editor.selection.createRangeByElem($node);
  15613. editor.selection.restoreSelection();
  15614. editor.cmd["do"]('insertHTML', newdom);
  15615. return true;
  15616. }
  15617. }, {
  15618. $elem: dom_core_1["default"]("<span>" + t('删除行') + "</span>"),
  15619. onClick: function onClick(editor, $node) {
  15620. // 禁止多选操作
  15621. var isMore = isMoreRowAction(editor);
  15622. if (isMore) {
  15623. return true;
  15624. } //当前元素
  15625. var selectDom = dom_core_1["default"](editor.selection.getSelectionStartElem()); //当前行
  15626. var $currentRow = getnode.getRowNode(selectDom.elems[0]);
  15627. if (!$currentRow) {
  15628. return true;
  15629. } //获取当前行的index
  15630. var index = Number(getnode.getCurrentRowIndex($node.elems[0], $currentRow)); //生成要替换的html
  15631. var htmlStr = getnode.getTableHtml($node.elems[0]); //获取新生成的table 判断是否是最后一行被删除 是 删除整个table
  15632. var trLength = operating_event_1["default"].DeleteRow(dom_core_1["default"](htmlStr), index).elems[0].children[0].children.length; //生成新的table
  15633. var newdom = ''; // 选中table
  15634. editor.selection.createRangeByElem($node);
  15635. editor.selection.restoreSelection();
  15636. if (trLength === 0) {
  15637. newdom = const_1.EMPTY_P;
  15638. } else {
  15639. newdom = getnode.getTableHtml(operating_event_1["default"].DeleteRow(dom_core_1["default"](htmlStr), index).elems[0]);
  15640. }
  15641. newdom = _isEmptyP($node, newdom);
  15642. editor.cmd["do"]('insertHTML', newdom);
  15643. return true;
  15644. }
  15645. }, {
  15646. $elem: dom_core_1["default"]("<span>" + t('添加列') + "</span>"),
  15647. onClick: function onClick(editor, $node) {
  15648. // 禁止多选操作
  15649. var isMore = isMoreRowAction(editor);
  15650. if (isMore) {
  15651. return true;
  15652. } //当前元素
  15653. var selectDom = dom_core_1["default"](editor.selection.getSelectionStartElem()); //当前列的index
  15654. var index = getnode.getCurrentColIndex(selectDom.elems[0]); //生成要替换的html
  15655. var htmlStr = getnode.getTableHtml($node.elems[0]); //生成新的table
  15656. var newdom = getnode.getTableHtml(operating_event_1["default"].ProcessingCol(dom_core_1["default"](htmlStr), index).elems[0]);
  15657. newdom = _isEmptyP($node, newdom); // 选中table
  15658. editor.selection.createRangeByElem($node);
  15659. editor.selection.restoreSelection();
  15660. editor.cmd["do"]('insertHTML', newdom);
  15661. return true;
  15662. }
  15663. }, {
  15664. $elem: dom_core_1["default"]("<span>" + t('删除列') + "</span>"),
  15665. onClick: function onClick(editor, $node) {
  15666. // 禁止多选操作
  15667. var isMore = isMoreRowAction(editor);
  15668. if (isMore) {
  15669. return true;
  15670. } //当前元素
  15671. var selectDom = dom_core_1["default"](editor.selection.getSelectionStartElem()); //当前列的index
  15672. var index = getnode.getCurrentColIndex(selectDom.elems[0]); //生成要替换的html
  15673. var htmlStr = getnode.getTableHtml($node.elems[0]); //获取新生成的table 判断是否是最后一列被删除 是 删除整个table
  15674. var newDom = operating_event_1["default"].DeleteCol(dom_core_1["default"](htmlStr), index); // 获取子节点的数量
  15675. var tdLength = newDom.elems[0].children[0].children[0].children.length; //生成新的table
  15676. var newdom = ''; // 选中table
  15677. editor.selection.createRangeByElem($node);
  15678. editor.selection.restoreSelection(); // 如果没有列了 则替换成空行
  15679. if (tdLength === 0) {
  15680. newdom = const_1.EMPTY_P;
  15681. } else {
  15682. newdom = getnode.getTableHtml(newDom.elems[0]);
  15683. }
  15684. newdom = _isEmptyP($node, newdom);
  15685. editor.cmd["do"]('insertHTML', newdom);
  15686. return true;
  15687. }
  15688. }, {
  15689. $elem: dom_core_1["default"]("<span>" + t('设置表头') + "</span>"),
  15690. onClick: function onClick(editor, $node) {
  15691. // 禁止多选操作
  15692. var isMore = isMoreRowAction(editor);
  15693. if (isMore) {
  15694. return true;
  15695. } //当前元素
  15696. var selectDom = dom_core_1["default"](editor.selection.getSelectionStartElem()); //当前行
  15697. var $currentRow = getnode.getRowNode(selectDom.elems[0]);
  15698. if (!$currentRow) {
  15699. return true;
  15700. } //获取当前行的index
  15701. var index = Number(getnode.getCurrentRowIndex($node.elems[0], $currentRow));
  15702. if (index !== 0) {
  15703. //控制在table的第一行
  15704. index = 0;
  15705. } //生成要替换的html
  15706. var htmlStr = getnode.getTableHtml($node.elems[0]); //生成新的table
  15707. var newdom = getnode.getTableHtml(operating_event_1["default"].setTheHeader(dom_core_1["default"](htmlStr), index, 'th').elems[0]);
  15708. newdom = _isEmptyP($node, newdom); // 选中table
  15709. editor.selection.createRangeByElem($node);
  15710. editor.selection.restoreSelection();
  15711. editor.cmd["do"]('insertHTML', newdom);
  15712. return true;
  15713. }
  15714. }, {
  15715. $elem: dom_core_1["default"]("<span>" + t('取消表头') + "</span>"),
  15716. onClick: function onClick(editor, $node) {
  15717. //当前元素
  15718. var selectDom = dom_core_1["default"](editor.selection.getSelectionStartElem()); //当前行
  15719. var $currentRow = getnode.getRowNode(selectDom.elems[0]);
  15720. if (!$currentRow) {
  15721. return true;
  15722. } //获取当前行的index
  15723. var index = Number(getnode.getCurrentRowIndex($node.elems[0], $currentRow));
  15724. if (index !== 0) {
  15725. //控制在table的第一行
  15726. index = 0;
  15727. } //生成要替换的html
  15728. var htmlStr = getnode.getTableHtml($node.elems[0]); //生成新的table
  15729. var newdom = getnode.getTableHtml(operating_event_1["default"].setTheHeader(dom_core_1["default"](htmlStr), index, 'td').elems[0]);
  15730. newdom = _isEmptyP($node, newdom); // 选中table
  15731. editor.selection.createRangeByElem($node);
  15732. editor.selection.restoreSelection();
  15733. editor.cmd["do"]('insertHTML', newdom);
  15734. return true;
  15735. }
  15736. }];
  15737. tooltip = new Tooltip_1["default"](editor, $node, conf);
  15738. tooltip.create();
  15739. }
  15740. /**
  15741. * 隐藏 tooltip
  15742. */
  15743. function hideTableTooltip() {
  15744. // 移除 tooltip
  15745. if (tooltip) {
  15746. tooltip.remove();
  15747. tooltip = null;
  15748. }
  15749. }
  15750. return {
  15751. showTableTooltip: showTableTooltip,
  15752. hideTableTooltip: hideTableTooltip
  15753. };
  15754. }
  15755. /**
  15756. * 判断是否是多行
  15757. */
  15758. function isMoreRowAction(editor) {
  15759. var $startElem = editor.selection.getSelectionStartElem();
  15760. var $endElem = editor.selection.getSelectionEndElem();
  15761. if (($startElem === null || $startElem === void 0 ? void 0 : $startElem.elems[0]) !== ($endElem === null || $endElem === void 0 ? void 0 : $endElem.elems[0])) {
  15762. return true;
  15763. } else {
  15764. return false;
  15765. }
  15766. }
  15767. /**
  15768. * 绑定 tooltip 事件
  15769. * @param editor 编辑器实例
  15770. */
  15771. function bindTooltipEvent(editor) {
  15772. var _a = createShowHideFn(editor),
  15773. showTableTooltip = _a.showTableTooltip,
  15774. hideTableTooltip = _a.hideTableTooltip; // 点击table元素是,显示 tooltip
  15775. editor.txt.eventHooks.tableClickEvents.push(showTableTooltip); // 点击其他地方,或者滚动时,隐藏 tooltip
  15776. editor.txt.eventHooks.clickEvents.push(hideTableTooltip);
  15777. editor.txt.eventHooks.keyupEvents.push(hideTableTooltip);
  15778. editor.txt.eventHooks.toolbarClickEvents.push(hideTableTooltip);
  15779. editor.txt.eventHooks.menuClickEvents.push(hideTableTooltip);
  15780. editor.txt.eventHooks.textScrollEvents.push(hideTableTooltip);
  15781. }
  15782. exports["default"] = bindTooltipEvent;
  15783. /**
  15784. * 判断表格的下一个节点是否是空行
  15785. */
  15786. function _isEmptyP($node, newdom) {
  15787. // 当表格的下一个兄弟节点是空行时,在 newdom 后添加 EMPTY_P
  15788. var nextNode = $node.elems[0].nextSibling;
  15789. if (!nextNode || nextNode.innerHTML === '<br>') {
  15790. newdom += "" + const_1.EMPTY_P;
  15791. }
  15792. return newdom;
  15793. }
  15794. /***/ }),
  15795. /* 394 */
  15796. /***/ (function(module, exports, __webpack_require__) {
  15797. "use strict";
  15798. var _interopRequireDefault = __webpack_require__(0);
  15799. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  15800. var _slice = _interopRequireDefault(__webpack_require__(45));
  15801. var _splice = _interopRequireDefault(__webpack_require__(91));
  15802. var _forEach = _interopRequireDefault(__webpack_require__(4));
  15803. var _from = _interopRequireDefault(__webpack_require__(138));
  15804. (0, _defineProperty["default"])(exports, "__esModule", {
  15805. value: true
  15806. });
  15807. var tslib_1 = __webpack_require__(2);
  15808. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  15809. /**
  15810. * 处理新添加行
  15811. * @param $node 整个table
  15812. * @param _index 行的inde
  15813. */
  15814. function ProcessingRow($node, _index) {
  15815. //执行获取tbody节点
  15816. var $dom = generateDomAction($node); //取出所有的行
  15817. var domArray = (0, _slice["default"])(Array.prototype).apply($dom.children); //列的数量
  15818. var childrenLength = domArray[0].children.length; //创建新tr
  15819. var tr = document.createElement('tr');
  15820. for (var i = 0; i < childrenLength; i++) {
  15821. var td = document.createElement('td');
  15822. tr.appendChild(td);
  15823. } //插入集合中
  15824. (0, _splice["default"])(domArray).call(domArray, _index + 1, 0, tr); //移除、新增节点事件
  15825. removeAndInsertAction($dom, domArray);
  15826. return dom_core_1["default"]($dom.parentNode);
  15827. }
  15828. /**
  15829. * 处理新添加列
  15830. * @param $node 整个table
  15831. * @param _index 列的inde
  15832. */
  15833. function ProcessingCol($node, _index) {
  15834. //执行获取tbody节点
  15835. var $dom = generateDomAction($node); //取出所有的行
  15836. var domArray = (0, _slice["default"])(Array.prototype).apply($dom.children);
  15837. var _loop_1 = function _loop_1(i) {
  15838. var _context;
  15839. var cArray = []; //取出所有的列
  15840. (0, _forEach["default"])(_context = (0, _from["default"])(domArray[i].children)).call(_context, function (item) {
  15841. cArray.push(item);
  15842. }); //移除行的旧的子节点
  15843. while (domArray[i].children.length !== 0) {
  15844. domArray[i].removeChild(domArray[i].children[0]);
  15845. } //列分th td
  15846. var td = dom_core_1["default"](cArray[0]).getNodeName() !== 'TH' ? document.createElement('td') : document.createElement('th'); // let td = document.createElement('td')
  15847. (0, _splice["default"])(cArray).call(cArray, _index + 1, 0, td); //插入新的子节点
  15848. for (var j = 0; j < cArray.length; j++) {
  15849. domArray[i].appendChild(cArray[j]);
  15850. }
  15851. }; //创建td
  15852. for (var i = 0; i < domArray.length; i++) {
  15853. _loop_1(i);
  15854. } //移除、新增节点事件
  15855. removeAndInsertAction($dom, domArray);
  15856. return dom_core_1["default"]($dom.parentNode);
  15857. }
  15858. /**
  15859. * 处理删除行
  15860. * @param $node 整个table
  15861. * @param _index 行的inde
  15862. */
  15863. function DeleteRow($node, _index) {
  15864. //执行获取tbody节点
  15865. var $dom = generateDomAction($node); //取出所有的行
  15866. var domArray = (0, _slice["default"])(Array.prototype).apply($dom.children); //删除行
  15867. (0, _splice["default"])(domArray).call(domArray, _index, 1); //移除、新增节点事件
  15868. removeAndInsertAction($dom, domArray);
  15869. return dom_core_1["default"]($dom.parentNode);
  15870. }
  15871. /**
  15872. * 处理删除列
  15873. * @param $node
  15874. * @param _index
  15875. */
  15876. function DeleteCol($node, _index) {
  15877. //执行获取tbody节点
  15878. var $dom = generateDomAction($node); //取出所有的行
  15879. var domArray = (0, _slice["default"])(Array.prototype).apply($dom.children);
  15880. var _loop_2 = function _loop_2(i) {
  15881. var _context2;
  15882. var cArray = []; //取出所有的列
  15883. (0, _forEach["default"])(_context2 = (0, _from["default"])(domArray[i].children)).call(_context2, function (item) {
  15884. cArray.push(item);
  15885. }); //移除行的旧的子节点
  15886. while (domArray[i].children.length !== 0) {
  15887. domArray[i].removeChild(domArray[i].children[0]);
  15888. }
  15889. (0, _splice["default"])(cArray).call(cArray, _index, 1); //插入新的子节点
  15890. for (var j = 0; j < cArray.length; j++) {
  15891. domArray[i].appendChild(cArray[j]);
  15892. }
  15893. }; //创建td
  15894. for (var i = 0; i < domArray.length; i++) {
  15895. _loop_2(i);
  15896. } //移除、新增节点事件
  15897. removeAndInsertAction($dom, domArray);
  15898. return dom_core_1["default"]($dom.parentNode);
  15899. }
  15900. /**
  15901. * 处理设置/取消表头
  15902. * @param $node
  15903. * @param _index
  15904. * @type 替换的标签 th还是td
  15905. */
  15906. function setTheHeader($node, _index, type) {
  15907. // 执行获取tbody节点
  15908. var $dom = generateDomAction($node); // 取出所有的行
  15909. var domArray = (0, _slice["default"])(Array.prototype).apply($dom.children); // 列的数量
  15910. var cols = domArray[_index].children; // 创建新tr
  15911. var tr = document.createElement('tr');
  15912. var _loop_3 = function _loop_3(i) {
  15913. var _context3;
  15914. // 根据type(td 或者 th)生成对应的el
  15915. var el = document.createElement(type);
  15916. var col = cols[i];
  15917. /**
  15918. * 没有使用children是因为谷歌纯文本内容children数组就为空,而火狐纯文本内容是“xxx<br>”使用children只能获取br
  15919. * 当然使用childNodes也涵盖支持我们表头使用表情,代码块等,不管是设置还是取消都会保留第一行
  15920. */
  15921. (0, _forEach["default"])(_context3 = (0, _from["default"])(col.childNodes)).call(_context3, function (item) {
  15922. el.appendChild(item);
  15923. });
  15924. tr.appendChild(el);
  15925. };
  15926. for (var i = 0; i < cols.length; i++) {
  15927. _loop_3(i);
  15928. } //插入集合中
  15929. (0, _splice["default"])(domArray).call(domArray, _index, 1, tr); //移除、新增节点事件
  15930. removeAndInsertAction($dom, domArray);
  15931. return dom_core_1["default"]($dom.parentNode);
  15932. }
  15933. /**
  15934. * 封装移除、新增节点事件
  15935. * @param $dom tbody节点
  15936. * @param domArray 所有的行
  15937. */
  15938. function removeAndInsertAction($dom, domArray) {
  15939. //移除所有的旧的子节点
  15940. while ($dom.children.length !== 0) {
  15941. $dom.removeChild($dom.children[0]);
  15942. } //插入新的子节点
  15943. for (var i = 0; i < domArray.length; i++) {
  15944. $dom.appendChild(domArray[i]);
  15945. }
  15946. }
  15947. /**
  15948. * 封装判断是否tbody节点
  15949. * 粘贴的table 第一个节点是<colgroup> 最后的节点<tbody>
  15950. * @param dom
  15951. */
  15952. function generateDomAction($node) {
  15953. var $dom = $node.elems[0].children[0];
  15954. if ($dom.nodeName === 'COLGROUP') {
  15955. $dom = $node.elems[0].children[$node.elems[0].children.length - 1];
  15956. }
  15957. return $dom;
  15958. }
  15959. exports["default"] = {
  15960. ProcessingRow: ProcessingRow,
  15961. ProcessingCol: ProcessingCol,
  15962. DeleteRow: DeleteRow,
  15963. DeleteCol: DeleteCol,
  15964. setTheHeader: setTheHeader
  15965. };
  15966. /***/ }),
  15967. /* 395 */
  15968. /***/ (function(module, exports, __webpack_require__) {
  15969. var parent = __webpack_require__(396);
  15970. module.exports = parent;
  15971. /***/ }),
  15972. /* 396 */
  15973. /***/ (function(module, exports, __webpack_require__) {
  15974. __webpack_require__(50);
  15975. __webpack_require__(397);
  15976. var path = __webpack_require__(9);
  15977. module.exports = path.Array.from;
  15978. /***/ }),
  15979. /* 397 */
  15980. /***/ (function(module, exports, __webpack_require__) {
  15981. var $ = __webpack_require__(5);
  15982. var from = __webpack_require__(398);
  15983. var checkCorrectnessOfIteration = __webpack_require__(115);
  15984. var INCORRECT_ITERATION = !checkCorrectnessOfIteration(function (iterable) {
  15985. Array.from(iterable);
  15986. });
  15987. // `Array.from` method
  15988. // https://tc39.github.io/ecma262/#sec-array.from
  15989. $({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, {
  15990. from: from
  15991. });
  15992. /***/ }),
  15993. /* 398 */
  15994. /***/ (function(module, exports, __webpack_require__) {
  15995. "use strict";
  15996. var bind = __webpack_require__(40);
  15997. var toObject = __webpack_require__(31);
  15998. var callWithSafeIterationClosing = __webpack_require__(114);
  15999. var isArrayIteratorMethod = __webpack_require__(112);
  16000. var toLength = __webpack_require__(35);
  16001. var createProperty = __webpack_require__(69);
  16002. var getIteratorMethod = __webpack_require__(113);
  16003. // `Array.from` method implementation
  16004. // https://tc39.github.io/ecma262/#sec-array.from
  16005. module.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {
  16006. var O = toObject(arrayLike);
  16007. var C = typeof this == 'function' ? this : Array;
  16008. var argumentsLength = arguments.length;
  16009. var mapfn = argumentsLength > 1 ? arguments[1] : undefined;
  16010. var mapping = mapfn !== undefined;
  16011. var iteratorMethod = getIteratorMethod(O);
  16012. var index = 0;
  16013. var length, result, step, iterator, next, value;
  16014. if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined, 2);
  16015. // if the target is not iterable or it's an array with the default iterator - use a simple case
  16016. if (iteratorMethod != undefined && !(C == Array && isArrayIteratorMethod(iteratorMethod))) {
  16017. iterator = iteratorMethod.call(O);
  16018. next = iterator.next;
  16019. result = new C();
  16020. for (;!(step = next.call(iterator)).done; index++) {
  16021. value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;
  16022. createProperty(result, index, value);
  16023. }
  16024. } else {
  16025. length = toLength(O.length);
  16026. result = new C(length);
  16027. for (;length > index; index++) {
  16028. value = mapping ? mapfn(O[index], index) : O[index];
  16029. createProperty(result, index, value);
  16030. }
  16031. }
  16032. result.length = index;
  16033. return result;
  16034. };
  16035. /***/ }),
  16036. /* 399 */
  16037. /***/ (function(module, exports, __webpack_require__) {
  16038. "use strict";
  16039. /**
  16040. * @description 获取dom节点
  16041. * @author lichunlin
  16042. */
  16043. var _interopRequireDefault = __webpack_require__(0);
  16044. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  16045. var _forEach = _interopRequireDefault(__webpack_require__(4));
  16046. var _from = _interopRequireDefault(__webpack_require__(138));
  16047. (0, _defineProperty["default"])(exports, "__esModule", {
  16048. value: true
  16049. });
  16050. var tslib_1 = __webpack_require__(2);
  16051. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  16052. var getNode =
  16053. /** @class */
  16054. function () {
  16055. function getNode(editor) {
  16056. this.editor = editor;
  16057. }
  16058. /**
  16059. * 获取焦点所在行
  16060. * @param $node 当前table
  16061. */
  16062. getNode.prototype.getRowNode = function ($node) {
  16063. var _a;
  16064. var DOM = dom_core_1["default"]($node).elems[0];
  16065. if (!DOM.parentNode) {
  16066. return DOM;
  16067. }
  16068. DOM = (_a = dom_core_1["default"](DOM).parentUntil('TR', DOM)) === null || _a === void 0 ? void 0 : _a.elems[0];
  16069. return DOM;
  16070. };
  16071. /**
  16072. * 获取当前行的下标
  16073. * @param $node 当前table
  16074. * @param $dmo 当前行节点
  16075. */
  16076. getNode.prototype.getCurrentRowIndex = function ($node, $dom) {
  16077. var _context;
  16078. var _index = 0;
  16079. var $nodeChild = $node.children[0]; //粘贴的table 最后一个节点才是tbody
  16080. if ($nodeChild.nodeName === 'COLGROUP') {
  16081. $nodeChild = $node.children[$node.children.length - 1];
  16082. }
  16083. (0, _forEach["default"])(_context = (0, _from["default"])($nodeChild.children)).call(_context, function (item, index) {
  16084. item === $dom ? _index = index : '';
  16085. });
  16086. return _index;
  16087. };
  16088. /**
  16089. * 获取当前列的下标
  16090. * @param $node 当前点击元素
  16091. */
  16092. getNode.prototype.getCurrentColIndex = function ($node) {
  16093. var _context2;
  16094. var _a; //当前行
  16095. var _index = 0; //获取当前列 td或th
  16096. var rowDom = dom_core_1["default"]($node).getNodeName() === 'TD' || dom_core_1["default"]($node).getNodeName() === 'TH' ? $node : (_a = dom_core_1["default"]($node).parentUntil('TD', $node)) === null || _a === void 0 ? void 0 : _a.elems[0];
  16097. var colDom = dom_core_1["default"](rowDom).parent();
  16098. (0, _forEach["default"])(_context2 = (0, _from["default"])(colDom.elems[0].children)).call(_context2, function (item, index) {
  16099. item === rowDom ? _index = index : '';
  16100. });
  16101. return _index;
  16102. };
  16103. /**
  16104. * 返回元素html字符串
  16105. * @param $node
  16106. */
  16107. getNode.prototype.getTableHtml = function ($node) {
  16108. var htmlStr = "<table border=\"0\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">" + dom_core_1["default"]($node).html() + "</table>";
  16109. return htmlStr;
  16110. };
  16111. return getNode;
  16112. }();
  16113. exports["default"] = getNode;
  16114. /***/ }),
  16115. /* 400 */
  16116. /***/ (function(module, exports, __webpack_require__) {
  16117. "use strict";
  16118. var _interopRequireDefault = __webpack_require__(0);
  16119. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  16120. (0, _defineProperty["default"])(exports, "__esModule", {
  16121. value: true
  16122. });
  16123. exports.bindEventKeyboardEvent = exports.bindClickEvent = void 0;
  16124. var tslib_1 = __webpack_require__(2);
  16125. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  16126. /**
  16127. * @description 是否是空行
  16128. * @param topElem
  16129. */
  16130. function isEmptyLine(topElem) {
  16131. if (!topElem.length) {
  16132. return false;
  16133. }
  16134. var dom = topElem.elems[0];
  16135. return dom.nodeName === 'P' && dom.innerHTML === '<br>';
  16136. }
  16137. function bindClickEvent(editor) {
  16138. function handleTripleClick($dom, e) {
  16139. // 处理三击事件,此时选区可能离开table,修正回来
  16140. if (e.detail >= 3) {
  16141. var selection = window.getSelection();
  16142. if (selection) {
  16143. var focusNode = selection.focusNode,
  16144. anchorNode = selection.anchorNode;
  16145. var $anchorNode = dom_core_1["default"](anchorNode === null || anchorNode === void 0 ? void 0 : anchorNode.parentElement); // 当focusNode离开了table
  16146. if (!$dom.isContain(dom_core_1["default"](focusNode))) {
  16147. var $td = $anchorNode.elems[0].tagName === 'TD' ? $anchorNode : $anchorNode.parentUntilEditor('td', editor);
  16148. if ($td) {
  16149. var range = editor.selection.getRange();
  16150. range === null || range === void 0 ? void 0 : range.setEnd($td.elems[0], $td.elems[0].childNodes.length);
  16151. editor.selection.restoreSelection();
  16152. }
  16153. }
  16154. }
  16155. }
  16156. }
  16157. editor.txt.eventHooks.tableClickEvents.push(handleTripleClick);
  16158. }
  16159. exports.bindClickEvent = bindClickEvent;
  16160. function bindEventKeyboardEvent(editor) {
  16161. var txt = editor.txt,
  16162. selection = editor.selection;
  16163. var keydownEvents = txt.eventHooks.keydownEvents;
  16164. keydownEvents.push(function (e) {
  16165. // 实时保存选区
  16166. editor.selection.saveRange();
  16167. var $selectionContainerElem = selection.getSelectionContainerElem();
  16168. if ($selectionContainerElem) {
  16169. var $topElem = $selectionContainerElem.getNodeTop(editor);
  16170. var $preElem = $topElem.length ? $topElem.prev().length ? $topElem.prev() : null : null; // 删除时,选区前面是table,且选区没有选中文本,阻止默认行为
  16171. if ($preElem && $preElem.getNodeName() === 'TABLE' && selection.isSelectionEmpty() && selection.getCursorPos() === 0 && e.keyCode === 8) {
  16172. var $nextElem = $topElem.next();
  16173. var hasNext = !!$nextElem.length;
  16174. /**
  16175. * 如果当前是空行,并且当前行下面还有内容,删除当前行
  16176. * 浏览器默认行为不会删除掉当前行的<br>标签
  16177. * 因此阻止默认行为,特殊处理
  16178. */
  16179. if (hasNext && isEmptyLine($topElem)) {
  16180. $topElem.remove();
  16181. editor.selection.setRangeToElem($nextElem.elems[0]);
  16182. }
  16183. e.preventDefault();
  16184. }
  16185. }
  16186. });
  16187. }
  16188. exports.bindEventKeyboardEvent = bindEventKeyboardEvent;
  16189. /***/ }),
  16190. /* 401 */
  16191. /***/ (function(module, exports, __webpack_require__) {
  16192. "use strict";
  16193. /**
  16194. * @description 代码 菜单
  16195. * @author lkw
  16196. */
  16197. var _interopRequireDefault = __webpack_require__(0);
  16198. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  16199. var _map = _interopRequireDefault(__webpack_require__(26));
  16200. (0, _defineProperty["default"])(exports, "__esModule", {
  16201. value: true
  16202. });
  16203. exports.formatCodeHtml = void 0;
  16204. var tslib_1 = __webpack_require__(2);
  16205. var PanelMenu_1 = tslib_1.__importDefault(__webpack_require__(38));
  16206. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  16207. var util_1 = __webpack_require__(6);
  16208. var create_panel_conf_1 = tslib_1.__importDefault(__webpack_require__(402));
  16209. var is_active_1 = tslib_1.__importDefault(__webpack_require__(139));
  16210. var Panel_1 = tslib_1.__importDefault(__webpack_require__(33));
  16211. var index_1 = tslib_1.__importDefault(__webpack_require__(403));
  16212. function formatCodeHtml(editor, html) {
  16213. if (!html) return html;
  16214. html = deleteHighlightCode(html);
  16215. html = formatEnterCode(html);
  16216. html = util_1.replaceSpecialSymbol(html);
  16217. return html; // 格式化换换所产生的code标签
  16218. function formatEnterCode(html) {
  16219. var preArr = html.match(/<pre[\s|\S]+?\/pre>/g);
  16220. if (preArr === null) return html;
  16221. (0, _map["default"])(preArr).call(preArr, function (item) {
  16222. //将连续的code标签换为\n换行
  16223. html = html.replace(item, item.replace(/<\/code><code>/g, '\n').replace(/<br>/g, ''));
  16224. });
  16225. return html;
  16226. } // highlight格式化方法
  16227. function deleteHighlightCode(html) {
  16228. var _context;
  16229. // 获取所有hljs文本
  16230. var m = html.match(/<span\sclass="hljs[\s|\S]+?\/span>/gm); // 没有代码渲染文本则退出
  16231. // @ts-ignore
  16232. if (!m || !m.length) return html; // 获取替换文本
  16233. var r = (0, _map["default"])(_context = util_1.deepClone(m)).call(_context, function (i) {
  16234. i = i.replace(/<span\sclass="hljs[^>]+>/, '');
  16235. return i.replace(/<\/span>/, '');
  16236. }); // @ts-ignore
  16237. for (var i = 0; i < m.length; i++) {
  16238. html = html.replace(m[i], r[i]);
  16239. }
  16240. return deleteHighlightCode(html);
  16241. }
  16242. }
  16243. exports.formatCodeHtml = formatCodeHtml;
  16244. var Code =
  16245. /** @class */
  16246. function (_super) {
  16247. tslib_1.__extends(Code, _super);
  16248. function Code(editor) {
  16249. var _this = this;
  16250. var $elem = dom_core_1["default"]('<div class="w-e-menu" data-title="代码"><i class="w-e-icon-terminal"></i></div>');
  16251. _this = _super.call(this, $elem, editor) || this; // 绑定事件,如点击链接时,可以查看链接
  16252. index_1["default"](editor);
  16253. return _this;
  16254. }
  16255. /**
  16256. * 插入行内代码
  16257. * @param text
  16258. * @return null
  16259. */
  16260. Code.prototype.insertLineCode = function (text) {
  16261. var editor = this.editor; // 行内代码处理
  16262. var $code = dom_core_1["default"]("<code>" + text + "</code>");
  16263. editor.cmd["do"]('insertElem', $code);
  16264. editor.selection.createRangeByElem($code, false);
  16265. editor.selection.restoreSelection();
  16266. };
  16267. /**
  16268. * 菜单点击事件
  16269. */
  16270. Code.prototype.clickHandler = function () {
  16271. var editor = this.editor;
  16272. var selectionText = editor.selection.getSelectionText();
  16273. if (this.isActive) {
  16274. return;
  16275. } else {
  16276. // 菜单未被激活,说明选区不在链接里
  16277. if (editor.selection.isSelectionEmpty()) {
  16278. // 选区是空的,未选中内容
  16279. this.createPanel('', '');
  16280. } else {
  16281. // 行内代码处理 选中了非代码内容
  16282. this.insertLineCode(selectionText);
  16283. }
  16284. }
  16285. };
  16286. /**
  16287. * 创建 panel
  16288. * @param text 代码文本
  16289. * @param languageType 代码类型
  16290. */
  16291. Code.prototype.createPanel = function (text, languageType) {
  16292. var conf = create_panel_conf_1["default"](this.editor, text, languageType);
  16293. var panel = new Panel_1["default"](this, conf);
  16294. panel.create();
  16295. };
  16296. /**
  16297. * 尝试修改菜单 active 状态
  16298. */
  16299. Code.prototype.tryChangeActive = function () {
  16300. var editor = this.editor;
  16301. if (is_active_1["default"](editor)) {
  16302. this.active();
  16303. } else {
  16304. this.unActive();
  16305. }
  16306. };
  16307. return Code;
  16308. }(PanelMenu_1["default"]);
  16309. exports["default"] = Code;
  16310. /***/ }),
  16311. /* 402 */
  16312. /***/ (function(module, exports, __webpack_require__) {
  16313. "use strict";
  16314. /**
  16315. * @description code 菜单 panel tab 配置
  16316. * @author lkw
  16317. */
  16318. var _interopRequireDefault = __webpack_require__(0);
  16319. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  16320. var _map = _interopRequireDefault(__webpack_require__(26));
  16321. (0, _defineProperty["default"])(exports, "__esModule", {
  16322. value: true
  16323. });
  16324. var tslib_1 = __webpack_require__(2);
  16325. var util_1 = __webpack_require__(6);
  16326. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  16327. var is_active_1 = tslib_1.__importDefault(__webpack_require__(139));
  16328. var const_1 = __webpack_require__(7);
  16329. function default_1(editor, text, languageType) {
  16330. var _context;
  16331. // panel 中需要用到的id
  16332. var inputIFrameId = util_1.getRandom('input-iframe');
  16333. var languageId = util_1.getRandom('select');
  16334. var btnOkId = util_1.getRandom('btn-ok');
  16335. /**
  16336. * 插入代码块
  16337. * @param text 文字
  16338. */
  16339. function insertCode(languateType, code) {
  16340. var _a; // 选区处于链接中,则选中整个菜单,再执行 insertHTML
  16341. var active = is_active_1["default"](editor);
  16342. if (active) {
  16343. selectCodeElem();
  16344. }
  16345. var content = (_a = editor.selection.getSelectionStartElem()) === null || _a === void 0 ? void 0 : _a.elems[0].innerHTML;
  16346. if (content) {
  16347. editor.cmd["do"]('insertHTML', const_1.EMPTY_P);
  16348. } // 过滤标签,防止xss
  16349. var formatCode = code.replace(/</g, '&lt;').replace(/>/g, '&gt;'); // 高亮渲染
  16350. if (editor.highlight) {
  16351. formatCode = editor.highlight.highlightAuto(formatCode).value;
  16352. } //增加pre标签
  16353. editor.cmd["do"]('insertHTML', "<pre><code class=\"" + languateType + "\">" + formatCode + "</code></pre>");
  16354. var $code = editor.selection.getSelectionStartElem();
  16355. var $codeElem = $code === null || $code === void 0 ? void 0 : $code.getNodeTop(editor); // 通过dom操作添加换行标签
  16356. if (($codeElem === null || $codeElem === void 0 ? void 0 : $codeElem.getNextSibling().elems.length) === 0) {
  16357. // @ts-ignore
  16358. dom_core_1["default"](const_1.EMPTY_P).insertAfter($codeElem);
  16359. }
  16360. }
  16361. /**
  16362. * 选中整个链接元素
  16363. */
  16364. function selectCodeElem() {
  16365. if (!is_active_1["default"](editor)) return; // eslint-disable-next-line @typescript-eslint/no-unused-vars
  16366. var $selectedCode;
  16367. var $code = editor.selection.getSelectionStartElem();
  16368. var $codeElem = $code === null || $code === void 0 ? void 0 : $code.getNodeTop(editor);
  16369. if (!$codeElem) return;
  16370. editor.selection.createRangeByElem($codeElem);
  16371. editor.selection.restoreSelection();
  16372. $selectedCode = $codeElem; // 赋值给函数内全局变量
  16373. }
  16374. var t = function t(text) {
  16375. return editor.i18next.t(text);
  16376. }; // @ts-ignore
  16377. var conf = {
  16378. width: 500,
  16379. height: 0,
  16380. // panel 中可包含多个 tab
  16381. tabs: [{
  16382. // tab 的标题
  16383. title: t('menus.panelMenus.code.插入代码'),
  16384. // 模板
  16385. tpl: "<div>\n <select name=\"\" id=\"" + languageId + "\">\n " + (0, _map["default"])(_context = editor.config.languageType).call(_context, function (language) {
  16386. return '<option ' + (languageType == language ? 'selected' : '') + ' value ="' + language + '">' + language + '</option>';
  16387. }) + "\n </select>\n <textarea id=\"" + inputIFrameId + "\" type=\"text\" class=\"wang-code-textarea\" placeholder=\"\" style=\"height: 160px\">" + text.replace(/&quot;/g, '"') + "</textarea>\n <div class=\"w-e-button-container\">\n <button type=\"button\" id=\"" + btnOkId + "\" class=\"right\">" + (is_active_1["default"](editor) ? t('修改') : t('插入')) + "</button>\n </div>\n </div>",
  16388. // 事件绑定
  16389. events: [// 插入链接
  16390. {
  16391. selector: '#' + btnOkId,
  16392. type: 'click',
  16393. fn: function fn() {
  16394. var $code = document.getElementById(inputIFrameId);
  16395. var $select = dom_core_1["default"]('#' + languageId);
  16396. var languageType = $select.val(); // @ts-ignore
  16397. var code = $code.value; // 代码为空,则不插入
  16398. if (!code) return; //增加标签
  16399. if (is_active_1["default"](editor)) {
  16400. return false;
  16401. } else {
  16402. // @ts-ignore
  16403. insertCode(languageType, code);
  16404. } // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭
  16405. return true;
  16406. }
  16407. }]
  16408. }]
  16409. };
  16410. return conf;
  16411. }
  16412. exports["default"] = default_1;
  16413. /***/ }),
  16414. /* 403 */
  16415. /***/ (function(module, exports, __webpack_require__) {
  16416. "use strict";
  16417. /**
  16418. * @description 绑定链接元素的事件,入口
  16419. * @author lkw
  16420. */
  16421. var _interopRequireDefault = __webpack_require__(0);
  16422. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  16423. (0, _defineProperty["default"])(exports, "__esModule", {
  16424. value: true
  16425. });
  16426. var tslib_1 = __webpack_require__(2);
  16427. var tooltip_event_1 = tslib_1.__importDefault(__webpack_require__(404));
  16428. var jump_code_block_down_1 = tslib_1.__importDefault(__webpack_require__(405));
  16429. /**
  16430. * 绑定事件
  16431. * @param editor 编辑器实例
  16432. */
  16433. function bindEvent(editor) {
  16434. // tooltip 事件
  16435. tooltip_event_1["default"](editor); // 代码块为最后内容的跳出处理
  16436. jump_code_block_down_1["default"](editor);
  16437. }
  16438. exports["default"] = bindEvent;
  16439. /***/ }),
  16440. /* 404 */
  16441. /***/ (function(module, exports, __webpack_require__) {
  16442. "use strict";
  16443. /**
  16444. * @description tooltip 事件
  16445. * @author lkw
  16446. */
  16447. var _interopRequireDefault = __webpack_require__(0);
  16448. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  16449. (0, _defineProperty["default"])(exports, "__esModule", {
  16450. value: true
  16451. });
  16452. exports.createShowHideFn = void 0;
  16453. var tslib_1 = __webpack_require__(2);
  16454. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  16455. var Tooltip_1 = tslib_1.__importDefault(__webpack_require__(39));
  16456. /**
  16457. * 生成 Tooltip 的显示隐藏函数
  16458. */
  16459. function createShowHideFn(editor) {
  16460. var tooltip;
  16461. /**
  16462. * 显示 tooltip
  16463. * @param $code 链接元素
  16464. */
  16465. function showCodeTooltip($code) {
  16466. var i18nPrefix = 'menus.panelMenus.code.';
  16467. var t = function t(text, prefix) {
  16468. if (prefix === void 0) {
  16469. prefix = i18nPrefix;
  16470. }
  16471. return editor.i18next.t(prefix + text);
  16472. };
  16473. var conf = [{
  16474. $elem: dom_core_1["default"]("<span>" + t('删除代码') + "</span>"),
  16475. onClick: function onClick(editor, $code) {
  16476. //dom操作删除
  16477. $code.remove(); // 返回 true,表示执行完之后,隐藏 tooltip。否则不隐藏。
  16478. return true;
  16479. }
  16480. }]; // 创建 tooltip
  16481. tooltip = new Tooltip_1["default"](editor, $code, conf);
  16482. tooltip.create();
  16483. }
  16484. /**
  16485. * 隐藏 tooltip
  16486. */
  16487. function hideCodeTooltip() {
  16488. // 移除 tooltip
  16489. if (tooltip) {
  16490. tooltip.remove();
  16491. tooltip = null;
  16492. }
  16493. }
  16494. return {
  16495. showCodeTooltip: showCodeTooltip,
  16496. hideCodeTooltip: hideCodeTooltip
  16497. };
  16498. }
  16499. exports.createShowHideFn = createShowHideFn;
  16500. /**
  16501. * preEnterListener是为了统一浏览器 在pre标签内的enter行为而进行的监听
  16502. * 目前并没有使用, 但是在未来处理与Firefox和ie的兼容性时需要用到 暂且放置
  16503. * pre标签内的回车监听
  16504. * @param e
  16505. * @param editor
  16506. */
  16507. /* istanbul ignore next */
  16508. // eslint-disable-next-line @typescript-eslint/no-unused-vars
  16509. function preEnterListener(e, editor) {
  16510. // 获取当前标签元素
  16511. var $selectionElem = editor.selection.getSelectionContainerElem(); // 获取当前节点最顶级标签元素
  16512. var $topElem = $selectionElem === null || $selectionElem === void 0 ? void 0 : $selectionElem.getNodeTop(editor); // 获取顶级节点节点名
  16513. var topNodeName = $topElem === null || $topElem === void 0 ? void 0 : $topElem.getNodeName(); // 非pre标签退出
  16514. if (topNodeName !== 'PRE') return; // 取消默认行为
  16515. e.preventDefault(); // 执行换行
  16516. editor.cmd["do"]('insertHTML', '\n\r');
  16517. }
  16518. /**
  16519. * 绑定 tooltip 事件
  16520. * @param editor 编辑器实例
  16521. */
  16522. function bindTooltipEvent(editor) {
  16523. var _a = createShowHideFn(editor),
  16524. showCodeTooltip = _a.showCodeTooltip,
  16525. hideCodeTooltip = _a.hideCodeTooltip; // 点击代码元素时,显示 tooltip
  16526. editor.txt.eventHooks.codeClickEvents.push(showCodeTooltip); // 点击其他地方,或者滚动时,隐藏 tooltip
  16527. editor.txt.eventHooks.clickEvents.push(hideCodeTooltip);
  16528. editor.txt.eventHooks.toolbarClickEvents.push(hideCodeTooltip);
  16529. editor.txt.eventHooks.menuClickEvents.push(hideCodeTooltip);
  16530. editor.txt.eventHooks.textScrollEvents.push(hideCodeTooltip);
  16531. }
  16532. exports["default"] = bindTooltipEvent;
  16533. /***/ }),
  16534. /* 405 */
  16535. /***/ (function(module, exports, __webpack_require__) {
  16536. "use strict";
  16537. var _interopRequireDefault = __webpack_require__(0);
  16538. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  16539. (0, _defineProperty["default"])(exports, "__esModule", {
  16540. value: true
  16541. });
  16542. var tslib_1 = __webpack_require__(2);
  16543. /**
  16544. * @description 代码块为最后一块内容时往下跳出代码块
  16545. * @author zhengwenjian
  16546. */
  16547. var const_1 = __webpack_require__(7);
  16548. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  16549. /**
  16550. * 在代码块最后一行 按方向下键跳出代码块的处理
  16551. * @param editor 编辑器实例
  16552. */
  16553. function bindEventJumpCodeBlock(editor) {
  16554. var $textElem = editor.$textElem,
  16555. selection = editor.selection,
  16556. txt = editor.txt;
  16557. var keydownEvents = txt.eventHooks.keydownEvents;
  16558. keydownEvents.push(function (e) {
  16559. var _a; // 40 是键盘中的下方向键
  16560. if (e.keyCode !== 40) return;
  16561. var node = selection.getSelectionContainerElem();
  16562. var $lastNode = (_a = $textElem.children()) === null || _a === void 0 ? void 0 : _a.last();
  16563. if ((node === null || node === void 0 ? void 0 : node.elems[0].tagName) === 'XMP' && ($lastNode === null || $lastNode === void 0 ? void 0 : $lastNode.elems[0].tagName) === 'PRE') {
  16564. // 就是最后一块是代码块的情况插入空p标签并光标移至p
  16565. var $emptyP = dom_core_1["default"](const_1.EMPTY_P);
  16566. $textElem.append($emptyP);
  16567. }
  16568. }); // fix: 修复代码块作为最后一个元素时,用户无法再进行输入的问题
  16569. keydownEvents.push(function (e) {
  16570. // 实时保存选区
  16571. editor.selection.saveRange();
  16572. var $selectionContainerElem = selection.getSelectionContainerElem();
  16573. if ($selectionContainerElem) {
  16574. var $topElem = $selectionContainerElem.getNodeTop(editor); // 获取选区所在节点的上一元素
  16575. var $preElem = $topElem === null || $topElem === void 0 ? void 0 : $topElem.prev(); // 判断该元素后面是否还存在元素
  16576. // 如果存在则允许删除
  16577. var $nextElem = $topElem === null || $topElem === void 0 ? void 0 : $topElem.getNextSibling();
  16578. if ($preElem.length && ($preElem === null || $preElem === void 0 ? void 0 : $preElem.getNodeName()) === 'PRE' && $nextElem.length === 0) {
  16579. // 光标处于选区开头
  16580. if (selection.getCursorPos() === 0) {
  16581. // 按下delete键时末尾追加空行
  16582. if (e.keyCode === 8) {
  16583. var $emptyP = dom_core_1["default"](const_1.EMPTY_P);
  16584. $textElem.append($emptyP);
  16585. }
  16586. }
  16587. }
  16588. }
  16589. });
  16590. }
  16591. exports["default"] = bindEventJumpCodeBlock;
  16592. /***/ }),
  16593. /* 406 */
  16594. /***/ (function(module, exports, __webpack_require__) {
  16595. "use strict";
  16596. var _interopRequireDefault = __webpack_require__(0);
  16597. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  16598. (0, _defineProperty["default"])(exports, "__esModule", {
  16599. value: true
  16600. });
  16601. var tslib_1 = __webpack_require__(2);
  16602. /**
  16603. * @description 分割线
  16604. * @author wangqiaoling
  16605. */
  16606. var BtnMenu_1 = tslib_1.__importDefault(__webpack_require__(23));
  16607. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  16608. var index_1 = tslib_1.__importDefault(__webpack_require__(407));
  16609. var util_1 = __webpack_require__(6);
  16610. var const_1 = __webpack_require__(7);
  16611. var splitLine =
  16612. /** @class */
  16613. function (_super) {
  16614. tslib_1.__extends(splitLine, _super);
  16615. function splitLine(editor) {
  16616. var _this = this;
  16617. var $elem = dom_core_1["default"]('<div class="w-e-menu" data-title="分割线"><i class="w-e-icon-split-line"></i></div>');
  16618. _this = _super.call(this, $elem, editor) || this; // 绑定事件
  16619. index_1["default"](editor);
  16620. return _this;
  16621. }
  16622. /**
  16623. * 菜单点击事件
  16624. */
  16625. splitLine.prototype.clickHandler = function () {
  16626. var editor = this.editor;
  16627. var range = editor.selection.getRange();
  16628. var $selectionElem = editor.selection.getSelectionContainerElem();
  16629. if (!($selectionElem === null || $selectionElem === void 0 ? void 0 : $selectionElem.length)) return;
  16630. var $DomElement = dom_core_1["default"]($selectionElem.elems[0]);
  16631. var $tableDOM = $DomElement.parentUntil('TABLE', $selectionElem.elems[0]);
  16632. var $imgDOM = $DomElement.children(); // 禁止在代码块中添加分割线
  16633. if ($DomElement.getNodeName() === 'CODE') return; // 禁止在表格中添加分割线
  16634. if ($tableDOM && dom_core_1["default"]($tableDOM.elems[0]).getNodeName() === 'TABLE') return; // 禁止在图片处添加分割线
  16635. if ($imgDOM && $imgDOM.length !== 0 && dom_core_1["default"]($imgDOM.elems[0]).getNodeName() === 'IMG' && !(range === null || range === void 0 ? void 0 : range.collapsed) // 处理光标在 img 后面的情况
  16636. ) {
  16637. return;
  16638. }
  16639. this.createSplitLine();
  16640. };
  16641. /**
  16642. * 创建 splitLine
  16643. */
  16644. splitLine.prototype.createSplitLine = function () {
  16645. // 防止插入分割线时没有占位元素的尴尬
  16646. var splitLineDOM = "<hr/>" + const_1.EMPTY_P; // 火狐浏览器不需要br标签占位
  16647. if (util_1.UA.isFirefox) {
  16648. splitLineDOM = '<hr/><p></p>';
  16649. }
  16650. this.editor.cmd["do"]('insertHTML', splitLineDOM);
  16651. };
  16652. /**
  16653. * 尝试修改菜单激活状态
  16654. */
  16655. splitLine.prototype.tryChangeActive = function () {};
  16656. return splitLine;
  16657. }(BtnMenu_1["default"]);
  16658. exports["default"] = splitLine;
  16659. /***/ }),
  16660. /* 407 */
  16661. /***/ (function(module, exports, __webpack_require__) {
  16662. "use strict";
  16663. var _interopRequireDefault = __webpack_require__(0);
  16664. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  16665. (0, _defineProperty["default"])(exports, "__esModule", {
  16666. value: true
  16667. });
  16668. var tslib_1 = __webpack_require__(2);
  16669. var tooltip_event_1 = tslib_1.__importDefault(__webpack_require__(408));
  16670. /**
  16671. * 绑定事件
  16672. * @param editor 编辑器实例
  16673. */
  16674. function bindEvent(editor) {
  16675. // 分割线的 tooltip 事件
  16676. tooltip_event_1["default"](editor);
  16677. }
  16678. exports["default"] = bindEvent;
  16679. /***/ }),
  16680. /* 408 */
  16681. /***/ (function(module, exports, __webpack_require__) {
  16682. "use strict";
  16683. var _interopRequireDefault = __webpack_require__(0);
  16684. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  16685. (0, _defineProperty["default"])(exports, "__esModule", {
  16686. value: true
  16687. });
  16688. var tslib_1 = __webpack_require__(2);
  16689. /**
  16690. * @description tooltip 事件
  16691. * @author wangqiaoling
  16692. */
  16693. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  16694. var Tooltip_1 = tslib_1.__importDefault(__webpack_require__(39));
  16695. /**
  16696. * 生成 Tooltip 的显示隐藏函数
  16697. */
  16698. function createShowHideFn(editor) {
  16699. var tooltip;
  16700. /**
  16701. * 显示分割线的 tooltip
  16702. * @param $splitLine 分割线元素
  16703. */
  16704. function showSplitLineTooltip($splitLine) {
  16705. // 定义 splitLine tooltip 配置
  16706. var conf = [{
  16707. $elem: dom_core_1["default"]("<span>" + editor.i18next.t('menus.panelMenus.删除') + "</span>"),
  16708. onClick: function onClick(editor, $splitLine) {
  16709. // 选中 分割线 元素
  16710. editor.selection.createRangeByElem($splitLine);
  16711. editor.selection.restoreSelection();
  16712. editor.cmd["do"]('delete'); // 返回 true,表示执行完之后,隐藏 tooltip。否则不隐藏。
  16713. return true;
  16714. }
  16715. }]; // 实例化 tooltip
  16716. tooltip = new Tooltip_1["default"](editor, $splitLine, conf); // 创建 tooltip
  16717. tooltip.create();
  16718. }
  16719. /**
  16720. * 隐藏分割线的 tooltip
  16721. */
  16722. function hideSplitLineTooltip() {
  16723. if (tooltip) {
  16724. tooltip.remove();
  16725. tooltip = null;
  16726. }
  16727. }
  16728. return {
  16729. showSplitLineTooltip: showSplitLineTooltip,
  16730. hideSplitLineTooltip: hideSplitLineTooltip
  16731. };
  16732. }
  16733. function bindTooltipEvent(editor) {
  16734. var _a = createShowHideFn(editor),
  16735. showSplitLineTooltip = _a.showSplitLineTooltip,
  16736. hideSplitLineTooltip = _a.hideSplitLineTooltip; // 点击分割线时,显示 tooltip
  16737. editor.txt.eventHooks.splitLineEvents.push(showSplitLineTooltip); // 点击其他地方(工具栏、滚动、keyup)时,隐藏 tooltip
  16738. editor.txt.eventHooks.clickEvents.push(hideSplitLineTooltip);
  16739. editor.txt.eventHooks.keyupEvents.push(hideSplitLineTooltip);
  16740. editor.txt.eventHooks.toolbarClickEvents.push(hideSplitLineTooltip);
  16741. editor.txt.eventHooks.menuClickEvents.push(hideSplitLineTooltip);
  16742. editor.txt.eventHooks.textScrollEvents.push(hideSplitLineTooltip);
  16743. }
  16744. exports["default"] = bindTooltipEvent;
  16745. /***/ }),
  16746. /* 409 */
  16747. /***/ (function(module, exports, __webpack_require__) {
  16748. "use strict";
  16749. var _interopRequireDefault = __webpack_require__(0);
  16750. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  16751. var _forEach = _interopRequireDefault(__webpack_require__(4));
  16752. (0, _defineProperty["default"])(exports, "__esModule", {
  16753. value: true
  16754. });
  16755. var tslib_1 = __webpack_require__(2);
  16756. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  16757. var BtnMenu_1 = tslib_1.__importDefault(__webpack_require__(23));
  16758. var util_1 = __webpack_require__(98);
  16759. var bind_event_1 = tslib_1.__importDefault(__webpack_require__(415));
  16760. var todo_1 = tslib_1.__importDefault(__webpack_require__(140));
  16761. var Todo =
  16762. /** @class */
  16763. function (_super) {
  16764. tslib_1.__extends(Todo, _super);
  16765. function Todo(editor) {
  16766. var _this = this;
  16767. var $elem = dom_core_1["default"]("<div class=\"w-e-menu\" data-title=\"\u5F85\u529E\u4E8B\u9879\">\n <i class=\"w-e-icon-checkbox-checked\"></i>\n </div>");
  16768. _this = _super.call(this, $elem, editor) || this;
  16769. bind_event_1["default"](editor);
  16770. return _this;
  16771. }
  16772. /**
  16773. * 点击事件
  16774. */
  16775. Todo.prototype.clickHandler = function () {
  16776. var editor = this.editor;
  16777. if (!util_1.isAllTodo(editor)) {
  16778. // 设置todolist
  16779. this.setTodo();
  16780. } else {
  16781. // 取消设置todolist
  16782. this.cancelTodo();
  16783. this.tryChangeActive();
  16784. }
  16785. };
  16786. Todo.prototype.tryChangeActive = function () {
  16787. if (util_1.isAllTodo(this.editor)) {
  16788. this.active();
  16789. } else {
  16790. this.unActive();
  16791. }
  16792. };
  16793. /**
  16794. * 设置todo
  16795. */
  16796. Todo.prototype.setTodo = function () {
  16797. var editor = this.editor;
  16798. var topNodeElem = editor.selection.getSelectionRangeTopNodes();
  16799. (0, _forEach["default"])(topNodeElem).call(topNodeElem, function ($node) {
  16800. var _a;
  16801. var nodeName = $node === null || $node === void 0 ? void 0 : $node.getNodeName();
  16802. if (nodeName === 'P') {
  16803. var todo = todo_1["default"]($node);
  16804. var todoNode = todo.getTodo();
  16805. var child = (_a = todoNode.children()) === null || _a === void 0 ? void 0 : _a.getNode();
  16806. todoNode.insertAfter($node);
  16807. editor.selection.moveCursor(child);
  16808. $node.remove();
  16809. }
  16810. });
  16811. this.tryChangeActive();
  16812. };
  16813. /**
  16814. * 取消设置todo
  16815. */
  16816. Todo.prototype.cancelTodo = function () {
  16817. var editor = this.editor;
  16818. var $topNodeElems = editor.selection.getSelectionRangeTopNodes();
  16819. (0, _forEach["default"])($topNodeElems).call($topNodeElems, function ($topNodeElem) {
  16820. var _a, _b, _c;
  16821. var content = (_b = (_a = $topNodeElem.childNodes()) === null || _a === void 0 ? void 0 : _a.childNodes()) === null || _b === void 0 ? void 0 : _b.clone(true);
  16822. var $p = dom_core_1["default"]("<p></p>");
  16823. $p.append(content);
  16824. $p.insertAfter($topNodeElem); // 移除input
  16825. (_c = $p.childNodes()) === null || _c === void 0 ? void 0 : _c.get(0).remove();
  16826. editor.selection.moveCursor($p.getNode());
  16827. $topNodeElem.remove();
  16828. });
  16829. };
  16830. return Todo;
  16831. }(BtnMenu_1["default"]);
  16832. exports["default"] = Todo;
  16833. /***/ }),
  16834. /* 410 */
  16835. /***/ (function(module, exports, __webpack_require__) {
  16836. module.exports = __webpack_require__(411);
  16837. /***/ }),
  16838. /* 411 */
  16839. /***/ (function(module, exports, __webpack_require__) {
  16840. var parent = __webpack_require__(412);
  16841. module.exports = parent;
  16842. /***/ }),
  16843. /* 412 */
  16844. /***/ (function(module, exports, __webpack_require__) {
  16845. var every = __webpack_require__(413);
  16846. var ArrayPrototype = Array.prototype;
  16847. module.exports = function (it) {
  16848. var own = it.every;
  16849. return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.every) ? every : own;
  16850. };
  16851. /***/ }),
  16852. /* 413 */
  16853. /***/ (function(module, exports, __webpack_require__) {
  16854. __webpack_require__(414);
  16855. var entryVirtual = __webpack_require__(15);
  16856. module.exports = entryVirtual('Array').every;
  16857. /***/ }),
  16858. /* 414 */
  16859. /***/ (function(module, exports, __webpack_require__) {
  16860. "use strict";
  16861. var $ = __webpack_require__(5);
  16862. var $every = __webpack_require__(32).every;
  16863. var arrayMethodIsStrict = __webpack_require__(67);
  16864. var arrayMethodUsesToLength = __webpack_require__(22);
  16865. var STRICT_METHOD = arrayMethodIsStrict('every');
  16866. var USES_TO_LENGTH = arrayMethodUsesToLength('every');
  16867. // `Array.prototype.every` method
  16868. // https://tc39.github.io/ecma262/#sec-array.prototype.every
  16869. $({ target: 'Array', proto: true, forced: !STRICT_METHOD || !USES_TO_LENGTH }, {
  16870. every: function every(callbackfn /* , thisArg */) {
  16871. return $every(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
  16872. }
  16873. });
  16874. /***/ }),
  16875. /* 415 */
  16876. /***/ (function(module, exports, __webpack_require__) {
  16877. "use strict";
  16878. var _interopRequireDefault = __webpack_require__(0);
  16879. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  16880. var _forEach = _interopRequireDefault(__webpack_require__(4));
  16881. (0, _defineProperty["default"])(exports, "__esModule", {
  16882. value: true
  16883. });
  16884. var tslib_1 = __webpack_require__(2);
  16885. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  16886. var util_1 = __webpack_require__(98);
  16887. var todo_1 = tslib_1.__importDefault(__webpack_require__(140));
  16888. var util_2 = __webpack_require__(98);
  16889. var const_1 = __webpack_require__(7);
  16890. /**
  16891. * todolist 内部逻辑
  16892. * @param editor
  16893. */
  16894. function bindEvent(editor) {
  16895. /**
  16896. * todo的自定义回车事件
  16897. * @param e 事件属性
  16898. */
  16899. function todoEnter(e) {
  16900. var _a, _b; // 判断是否为todo节点
  16901. if (util_1.isAllTodo(editor)) {
  16902. e.preventDefault();
  16903. var selection = editor.selection;
  16904. var $topSelectElem = selection.getSelectionRangeTopNodes()[0];
  16905. var $li = (_a = $topSelectElem.childNodes()) === null || _a === void 0 ? void 0 : _a.get(0);
  16906. var selectionNode = (_b = window.getSelection()) === null || _b === void 0 ? void 0 : _b.anchorNode;
  16907. var range = selection.getRange();
  16908. if (!(range === null || range === void 0 ? void 0 : range.collapsed)) {
  16909. var rangeChildNodes = range === null || range === void 0 ? void 0 : range.commonAncestorContainer.childNodes;
  16910. var startContainer_1 = range === null || range === void 0 ? void 0 : range.startContainer;
  16911. var endContainer_1 = range === null || range === void 0 ? void 0 : range.endContainer;
  16912. var startPos = range === null || range === void 0 ? void 0 : range.startOffset;
  16913. var endPos = range === null || range === void 0 ? void 0 : range.endOffset;
  16914. var startElemIndex_1 = 0;
  16915. var endElemIndex_1 = 0;
  16916. var delList_1 = []; // 找出startContainer和endContainer在rangeChildNodes中的位置
  16917. rangeChildNodes === null || rangeChildNodes === void 0 ? void 0 : (0, _forEach["default"])(rangeChildNodes).call(rangeChildNodes, function (v, i) {
  16918. if (v.contains(startContainer_1)) startElemIndex_1 = i;
  16919. if (v.contains(endContainer_1)) endElemIndex_1 = i;
  16920. }); // 删除两个容器间的内容
  16921. if (endElemIndex_1 - startElemIndex_1 > 1) {
  16922. rangeChildNodes === null || rangeChildNodes === void 0 ? void 0 : (0, _forEach["default"])(rangeChildNodes).call(rangeChildNodes, function (v, i) {
  16923. if (i <= startElemIndex_1) return;
  16924. if (i >= endElemIndex_1) return;
  16925. delList_1.push(v);
  16926. });
  16927. (0, _forEach["default"])(delList_1).call(delList_1, function (v) {
  16928. v.remove();
  16929. });
  16930. } // 删除两个容器里拖蓝的内容
  16931. util_2.dealTextNode(startContainer_1, startPos);
  16932. util_2.dealTextNode(endContainer_1, endPos, false);
  16933. editor.selection.moveCursor(endContainer_1, 0);
  16934. } // 回车时内容为空时,删去此行
  16935. if ($topSelectElem.text() === '') {
  16936. var $p = dom_core_1["default"](const_1.EMPTY_P);
  16937. $p.insertAfter($topSelectElem);
  16938. selection.moveCursor($p.getNode());
  16939. $topSelectElem.remove();
  16940. return;
  16941. }
  16942. var pos = selection.getCursorPos();
  16943. var CursorNextNode = util_1.getCursorNextNode($li === null || $li === void 0 ? void 0 : $li.getNode(), selectionNode, pos);
  16944. var todo = todo_1["default"](dom_core_1["default"](CursorNextNode));
  16945. var $inputcontainer = todo.getInputContainer();
  16946. var todoLiElem = $inputcontainer.parent().getNode();
  16947. var $newTodo = todo.getTodo();
  16948. var contentSection = $inputcontainer.getNode().nextSibling; // 处理光标在最前面时回车input不显示的问题
  16949. if (($li === null || $li === void 0 ? void 0 : $li.text()) === '') {
  16950. $li === null || $li === void 0 ? void 0 : $li.append(dom_core_1["default"]("<br>"));
  16951. }
  16952. $newTodo.insertAfter($topSelectElem); // 处理在google中光标在最后面的,input不显示的问题(必须插入之后移动光标)
  16953. if (!contentSection || (contentSection === null || contentSection === void 0 ? void 0 : contentSection.textContent) === '') {
  16954. // 防止多个br出现的情况
  16955. if ((contentSection === null || contentSection === void 0 ? void 0 : contentSection.nodeName) !== 'BR') {
  16956. var $br = dom_core_1["default"]("<br>");
  16957. $br.insertAfter($inputcontainer);
  16958. }
  16959. selection.moveCursor(todoLiElem, 1);
  16960. } else {
  16961. selection.moveCursor(todoLiElem);
  16962. }
  16963. }
  16964. }
  16965. /**
  16966. * 自定义删除事件,用来处理光标在最前面删除input产生的问题
  16967. */
  16968. function delDown(e) {
  16969. var _a, _b;
  16970. if (util_1.isAllTodo(editor)) {
  16971. var selection = editor.selection;
  16972. var $topSelectElem = selection.getSelectionRangeTopNodes()[0];
  16973. var $li = (_a = $topSelectElem.childNodes()) === null || _a === void 0 ? void 0 : _a.getNode();
  16974. var $p = dom_core_1["default"]("<p></p>");
  16975. var p_1 = $p.getNode();
  16976. var selectionNode = (_b = window.getSelection()) === null || _b === void 0 ? void 0 : _b.anchorNode;
  16977. var pos = selection.getCursorPos();
  16978. var prevNode = selectionNode.previousSibling; // 处理内容为空的情况
  16979. if ($topSelectElem.text() === '') {
  16980. e.preventDefault();
  16981. var $newP = dom_core_1["default"](const_1.EMPTY_P);
  16982. $newP.insertAfter($topSelectElem);
  16983. $topSelectElem.remove();
  16984. selection.moveCursor($newP.getNode(), 0);
  16985. return;
  16986. } // 处理有内容时,光标在最前面的情况
  16987. if ((prevNode === null || prevNode === void 0 ? void 0 : prevNode.nodeName) === 'SPAN' && prevNode.childNodes[0].nodeName === 'INPUT' && pos === 0) {
  16988. var _context;
  16989. e.preventDefault();
  16990. $li === null || $li === void 0 ? void 0 : (0, _forEach["default"])(_context = $li.childNodes).call(_context, function (v, index) {
  16991. if (index === 0) return;
  16992. p_1.appendChild(v.cloneNode(true));
  16993. });
  16994. $p.insertAfter($topSelectElem);
  16995. $topSelectElem.remove();
  16996. }
  16997. }
  16998. }
  16999. /**
  17000. * 自定义删除键up事件
  17001. */
  17002. function deleteUp() {
  17003. var selection = editor.selection;
  17004. var $topSelectElem = selection.getSelectionRangeTopNodes()[0];
  17005. if ($topSelectElem && util_2.isTodo($topSelectElem)) {
  17006. if ($topSelectElem.text() === '') {
  17007. dom_core_1["default"](const_1.EMPTY_P).insertAfter($topSelectElem);
  17008. $topSelectElem.remove();
  17009. }
  17010. }
  17011. }
  17012. /**
  17013. * input 的点击事件( input 默认不会产生 attribute 的改变 )
  17014. * @param e 事件属性
  17015. */
  17016. function inputClick(e) {
  17017. if (e && e.target instanceof HTMLInputElement) {
  17018. if (e.target.type === 'checkbox') {
  17019. if (e.target.checked) {
  17020. e.target.setAttribute('checked', 'true');
  17021. } else {
  17022. e.target.removeAttribute('checked');
  17023. }
  17024. }
  17025. }
  17026. }
  17027. editor.txt.eventHooks.enterDownEvents.push(todoEnter);
  17028. editor.txt.eventHooks.deleteUpEvents.push(deleteUp);
  17029. editor.txt.eventHooks.deleteDownEvents.push(delDown);
  17030. editor.txt.eventHooks.clickEvents.push(inputClick);
  17031. }
  17032. exports["default"] = bindEvent;
  17033. /***/ }),
  17034. /* 416 */
  17035. /***/ (function(module, exports, __webpack_require__) {
  17036. "use strict";
  17037. /**
  17038. * @description 初始化编辑器 DOM 结构
  17039. * @author wangfupeng
  17040. */
  17041. var _interopRequireDefault = __webpack_require__(0);
  17042. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  17043. (0, _defineProperty["default"])(exports, "__esModule", {
  17044. value: true
  17045. });
  17046. exports.selectorValidator = void 0;
  17047. var tslib_1 = __webpack_require__(2);
  17048. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  17049. var util_1 = __webpack_require__(6);
  17050. var const_1 = __webpack_require__(7);
  17051. var text_1 = tslib_1.__importDefault(__webpack_require__(130));
  17052. var styleSettings = {
  17053. border: '1px solid #c9d8db',
  17054. toolbarBgColor: '#FFF',
  17055. toolbarBottomBorder: '1px solid #EEE'
  17056. };
  17057. function default_1(editor) {
  17058. var toolbarSelector = editor.toolbarSelector;
  17059. var $toolbarSelector = dom_core_1["default"](toolbarSelector);
  17060. var textSelector = editor.textSelector;
  17061. var config = editor.config;
  17062. var height = config.height;
  17063. var i18next = editor.i18next;
  17064. var $toolbarElem = dom_core_1["default"]('<div></div>');
  17065. var $textContainerElem = dom_core_1["default"]('<div></div>');
  17066. var $textElem;
  17067. var $children;
  17068. var $subChildren = null;
  17069. if (textSelector == null) {
  17070. // 将编辑器区域原有的内容,暂存起来
  17071. $children = $toolbarSelector.children(); // 添加到 DOM 结构中
  17072. $toolbarSelector.append($toolbarElem).append($textContainerElem); // 自行创建的,需要配置默认的样式
  17073. $toolbarElem.css('background-color', styleSettings.toolbarBgColor).css('border', styleSettings.border).css('border-bottom', styleSettings.toolbarBottomBorder);
  17074. $textContainerElem.css('border', styleSettings.border).css('border-top', 'none').css('height', height + "px");
  17075. } else {
  17076. // toolbarSelector 和 textSelector 都有
  17077. $toolbarSelector.append($toolbarElem); // 菜单分离后,文本区域内容暂存
  17078. $subChildren = dom_core_1["default"](textSelector).children();
  17079. dom_core_1["default"](textSelector).append($textContainerElem); // 将编辑器区域原有的内容,暂存起来
  17080. $children = $textContainerElem.children();
  17081. } // 编辑区域
  17082. $textElem = dom_core_1["default"]('<div></div>');
  17083. $textElem.attr('contenteditable', 'true').css('width', '100%').css('height', '100%'); // 添加 placeholder
  17084. var $placeholder;
  17085. var placeholder = editor.config.placeholder;
  17086. if (placeholder !== text_1["default"].placeholder) {
  17087. $placeholder = dom_core_1["default"]("<div>" + placeholder + "</div>");
  17088. } else {
  17089. $placeholder = dom_core_1["default"]("<div>" + i18next.t(placeholder) + "</div>");
  17090. }
  17091. $placeholder.addClass('placeholder'); // 初始化编辑区域内容
  17092. if ($children && $children.length) {
  17093. $textElem.append($children); // 编辑器有默认值的时候隐藏placeholder
  17094. $placeholder.hide();
  17095. } else {
  17096. $textElem.append(dom_core_1["default"](const_1.EMPTY_P)); // 新增一行,方便继续编辑
  17097. } // 菜单分离后,文本区域有标签的带入编辑器内
  17098. if ($subChildren && $subChildren.length) {
  17099. $textElem.append($subChildren); // 编辑器有默认值的时候隐藏placeholder
  17100. $placeholder.hide();
  17101. } // 编辑区域加入DOM
  17102. $textContainerElem.append($textElem); // 添加placeholder
  17103. $textContainerElem.append($placeholder); // 设置通用的 class
  17104. $toolbarElem.addClass('w-e-toolbar').css('z-index', editor.zIndex.get('toolbar'));
  17105. $textContainerElem.addClass('w-e-text-container');
  17106. $textContainerElem.css('z-index', editor.zIndex.get());
  17107. $textElem.addClass('w-e-text'); // 添加 ID
  17108. var toolbarElemId = util_1.getRandom('toolbar-elem');
  17109. $toolbarElem.attr('id', toolbarElemId);
  17110. var textElemId = util_1.getRandom('text-elem');
  17111. $textElem.attr('id', textElemId); // 判断编辑区与容器高度是否一致
  17112. var textContainerCliheight = $textContainerElem.getBoundingClientRect().height;
  17113. var textElemClientHeight = $textElem.getBoundingClientRect().height;
  17114. if (textContainerCliheight !== textElemClientHeight) {
  17115. $textElem.css('min-height', textContainerCliheight + 'px');
  17116. } // 记录属性
  17117. editor.$toolbarElem = $toolbarElem;
  17118. editor.$textContainerElem = $textContainerElem;
  17119. editor.$textElem = $textElem;
  17120. editor.toolbarElemId = toolbarElemId;
  17121. editor.textElemId = textElemId;
  17122. }
  17123. exports["default"] = default_1;
  17124. /**
  17125. * 工具栏/文本区域 DOM selector 有效性验证
  17126. * @param editor 编辑器实例
  17127. */
  17128. function selectorValidator(editor) {
  17129. var name = 'data-we-id';
  17130. var regexp = /^wangEditor-\d+$/;
  17131. var textSelector = editor.textSelector,
  17132. toolbarSelector = editor.toolbarSelector;
  17133. var $el = {
  17134. bar: dom_core_1["default"]('<div></div>'),
  17135. text: dom_core_1["default"]('<div></div>')
  17136. };
  17137. if (toolbarSelector == null) {
  17138. throw new Error('错误:初始化编辑器时候未传入任何参数,请查阅文档');
  17139. } else {
  17140. $el.bar = dom_core_1["default"](toolbarSelector);
  17141. if (!$el.bar.elems.length) {
  17142. throw new Error("\u65E0\u6548\u7684\u8282\u70B9\u9009\u62E9\u5668\uFF1A" + toolbarSelector);
  17143. }
  17144. if (regexp.test($el.bar.attr(name))) {
  17145. throw new Error('初始化节点已存在编辑器实例,无法重复创建编辑器');
  17146. }
  17147. }
  17148. if (textSelector) {
  17149. $el.text = dom_core_1["default"](textSelector);
  17150. if (!$el.text.elems.length) {
  17151. throw new Error("\u65E0\u6548\u7684\u8282\u70B9\u9009\u62E9\u5668\uFF1A" + textSelector);
  17152. }
  17153. if (regexp.test($el.text.attr(name))) {
  17154. throw new Error('初始化节点已存在编辑器实例,无法重复创建编辑器');
  17155. }
  17156. } // 给节点做上标记
  17157. $el.bar.attr(name, editor.id);
  17158. $el.text.attr(name, editor.id); // 在编辑器销毁前取消标记
  17159. editor.beforeDestroy(function () {
  17160. $el.bar.removeAttr(name);
  17161. $el.text.removeAttr(name);
  17162. });
  17163. }
  17164. exports.selectorValidator = selectorValidator;
  17165. /***/ }),
  17166. /* 417 */
  17167. /***/ (function(module, exports, __webpack_require__) {
  17168. "use strict";
  17169. /**
  17170. * @description 初始化编辑器选区,将光标定位到文档末尾
  17171. * @author wangfupeng
  17172. */
  17173. var _interopRequireDefault = __webpack_require__(0);
  17174. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  17175. (0, _defineProperty["default"])(exports, "__esModule", {
  17176. value: true
  17177. });
  17178. var tslib_1 = __webpack_require__(2);
  17179. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  17180. var const_1 = __webpack_require__(7);
  17181. /**
  17182. * 初始化编辑器选区,将光标定位到文档末尾
  17183. * @param editor 编辑器实例
  17184. * @param newLine 是否新增一行
  17185. */
  17186. function initSelection(editor, newLine) {
  17187. var $textElem = editor.$textElem;
  17188. var $children = $textElem.children();
  17189. if (!$children || !$children.length) {
  17190. // 如果编辑器区域无内容,添加一个空行,重新设置选区
  17191. $textElem.append(dom_core_1["default"](const_1.EMPTY_P));
  17192. initSelection(editor);
  17193. return;
  17194. }
  17195. var $last = $children.last();
  17196. if (newLine) {
  17197. // 新增一个空行
  17198. var html = $last.html().toLowerCase();
  17199. var nodeName = $last.getNodeName();
  17200. if (html !== '<br>' && html !== '<br/>' || nodeName !== 'P') {
  17201. // 最后一个元素不是 空标签,添加一个空行,重新设置选区
  17202. $textElem.append(dom_core_1["default"](const_1.EMPTY_P));
  17203. initSelection(editor);
  17204. return;
  17205. }
  17206. }
  17207. editor.selection.createRangeByElem($last, false, true);
  17208. if (editor.config.focus) {
  17209. editor.selection.restoreSelection();
  17210. } else {
  17211. // 防止focus=false受其他因素影响
  17212. editor.selection.clearWindowSelectionRange();
  17213. }
  17214. }
  17215. exports["default"] = initSelection;
  17216. /***/ }),
  17217. /* 418 */
  17218. /***/ (function(module, exports, __webpack_require__) {
  17219. "use strict";
  17220. /**
  17221. * @description 绑定编辑器事件 change blur focus
  17222. * @author wangfupeng
  17223. */
  17224. var _interopRequireDefault = __webpack_require__(0);
  17225. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  17226. var _forEach = _interopRequireDefault(__webpack_require__(4));
  17227. (0, _defineProperty["default"])(exports, "__esModule", {
  17228. value: true
  17229. });
  17230. var tslib_1 = __webpack_require__(2);
  17231. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  17232. function bindEvent(editor) {
  17233. // 绑定 change 事件
  17234. _bindChange(editor); // 绑定 focus blur 事件
  17235. _bindFocusAndBlur(editor); // 绑定 input 输入
  17236. _bindInput(editor);
  17237. }
  17238. /**
  17239. * 绑定 change 事件
  17240. * @param editor 编辑器实例
  17241. */
  17242. function _bindChange(editor) {
  17243. editor.txt.eventHooks.changeEvents.push(function () {
  17244. var onchange = editor.config.onchange;
  17245. if (onchange) {
  17246. var html = editor.txt.html() || ''; // onchange触发时,是focus状态,详见https://github.com/wangeditor-team/wangEditor/issues/3034
  17247. editor.isFocus = true;
  17248. onchange(html);
  17249. }
  17250. editor.txt.togglePlaceholder();
  17251. });
  17252. }
  17253. /**
  17254. * 绑定 focus blur 事件
  17255. * @param editor 编辑器实例
  17256. */
  17257. function _bindFocusAndBlur(editor) {
  17258. // 当前编辑器是否是焦点状态
  17259. editor.isFocus = false;
  17260. function listener(e) {
  17261. var target = e.target;
  17262. var $target = dom_core_1["default"](target);
  17263. var $textElem = editor.$textElem;
  17264. var $toolbarElem = editor.$toolbarElem; //判断当前点击元素是否在编辑器内
  17265. var isChild = $textElem.isContain($target); //判断当前点击元素是否为工具栏
  17266. var isToolbar = $toolbarElem.isContain($target);
  17267. var isMenu = $toolbarElem.elems[0] == e.target ? true : false;
  17268. if (!isChild) {
  17269. // 若为选择工具栏中的功能,则不视为成 blur 操作
  17270. if (isToolbar && !isMenu || !editor.isFocus) {
  17271. return;
  17272. }
  17273. _blurHandler(editor);
  17274. editor.isFocus = false;
  17275. } else {
  17276. if (!editor.isFocus) {
  17277. _focusHandler(editor);
  17278. }
  17279. editor.isFocus = true;
  17280. }
  17281. } // fix: 增加判断条件,防止当用户设置isFocus=false时,初始化完成后点击其他元素依旧会触发blur事件的问题
  17282. if (document.activeElement === editor.$textElem.elems[0] && editor.config.focus) {
  17283. _focusHandler(editor);
  17284. editor.isFocus = true;
  17285. } // 绑定监听事件
  17286. dom_core_1["default"](document).on('click', listener); // 全局事件在编辑器实例销毁的时候进行解绑
  17287. editor.beforeDestroy(function () {
  17288. dom_core_1["default"](document).off('click', listener);
  17289. });
  17290. }
  17291. /**
  17292. * 绑定 input 事件
  17293. * @param editor 编辑器实例
  17294. */
  17295. function _bindInput(editor) {
  17296. // 绑定中文输入
  17297. editor.$textElem.on('compositionstart', function () {
  17298. editor.isComposing = true;
  17299. editor.txt.togglePlaceholder();
  17300. }).on('compositionend', function () {
  17301. editor.isComposing = false;
  17302. editor.txt.togglePlaceholder();
  17303. });
  17304. }
  17305. /**
  17306. * blur 事件
  17307. * @param editor 编辑器实例
  17308. */
  17309. function _blurHandler(editor) {
  17310. var _context;
  17311. var config = editor.config;
  17312. var onblur = config.onblur;
  17313. var currentHtml = editor.txt.html() || '';
  17314. (0, _forEach["default"])(_context = editor.txt.eventHooks.onBlurEvents).call(_context, function (fn) {
  17315. return fn();
  17316. });
  17317. onblur(currentHtml);
  17318. }
  17319. /**
  17320. * focus 事件
  17321. * @param editor 编辑器实例
  17322. */
  17323. function _focusHandler(editor) {
  17324. var config = editor.config;
  17325. var onfocus = config.onfocus;
  17326. var currentHtml = editor.txt.html() || '';
  17327. onfocus(currentHtml);
  17328. }
  17329. exports["default"] = bindEvent;
  17330. /***/ }),
  17331. /* 419 */
  17332. /***/ (function(module, exports, __webpack_require__) {
  17333. "use strict";
  17334. /**
  17335. * @description 国际化 初始化
  17336. * @author tonghan
  17337. * i18next 是使用 JavaScript 编写的国际化框架
  17338. * i18next 提供了标准的i18n功能,例如(复数,上下文,插值,格式)等
  17339. * i18next 文档地址: https://www.i18next.com/overview/getting-started
  17340. */
  17341. var _interopRequireDefault = __webpack_require__(0);
  17342. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  17343. (0, _defineProperty["default"])(exports, "__esModule", {
  17344. value: true
  17345. });
  17346. function i18nextInit(editor) {
  17347. var _a = editor.config,
  17348. lang = _a.lang,
  17349. languages = _a.languages;
  17350. if (editor.i18next != null) {
  17351. try {
  17352. editor.i18next.init({
  17353. ns: 'wangEditor',
  17354. lng: lang,
  17355. defaultNS: 'wangEditor',
  17356. resources: languages
  17357. });
  17358. } catch (error) {
  17359. throw new Error('i18next:' + error);
  17360. }
  17361. return;
  17362. } // 没有引入 i18next 的替代品
  17363. editor.i18next = {
  17364. t: function t(str) {
  17365. var strArr = str.split('.');
  17366. return strArr[strArr.length - 1];
  17367. }
  17368. };
  17369. }
  17370. exports["default"] = i18nextInit;
  17371. /***/ }),
  17372. /* 420 */
  17373. /***/ (function(module, exports, __webpack_require__) {
  17374. "use strict";
  17375. /**
  17376. * @description 全屏功能
  17377. * @author xiaokyo
  17378. */
  17379. var _interopRequireDefault = __webpack_require__(0);
  17380. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  17381. var _find = _interopRequireDefault(__webpack_require__(29));
  17382. (0, _defineProperty["default"])(exports, "__esModule", {
  17383. value: true
  17384. });
  17385. exports.setUnFullScreen = exports.setFullScreen = void 0;
  17386. var tslib_1 = __webpack_require__(2);
  17387. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  17388. __webpack_require__(421);
  17389. var iconFullScreenText = 'w-e-icon-fullscreen'; // 全屏icon class
  17390. var iconExitFullScreenText = 'w-e-icon-fullscreen_exit'; // 退出全屏icon class
  17391. var classfullScreenEditor = 'w-e-full-screen-editor'; // 全屏添加至编辑器的class
  17392. /**
  17393. * 设置全屏
  17394. * @param editor 编辑器实例
  17395. */
  17396. exports.setFullScreen = function (editor) {
  17397. var $editorParent = dom_core_1["default"](editor.toolbarSelector);
  17398. var $textContainerElem = editor.$textContainerElem;
  17399. var $toolbarElem = editor.$toolbarElem;
  17400. var $iconElem = (0, _find["default"])($toolbarElem).call($toolbarElem, "i." + iconFullScreenText);
  17401. var config = editor.config;
  17402. $iconElem.removeClass(iconFullScreenText);
  17403. $iconElem.addClass(iconExitFullScreenText);
  17404. $editorParent.addClass(classfullScreenEditor);
  17405. $editorParent.css('z-index', config.zIndexFullScreen);
  17406. var bar = $toolbarElem.getBoundingClientRect();
  17407. $textContainerElem.css('height', "calc(100% - " + bar.height + "px)");
  17408. };
  17409. /**
  17410. * 取消全屏
  17411. * @param editor 编辑器实例
  17412. */
  17413. exports.setUnFullScreen = function (editor) {
  17414. var $editorParent = dom_core_1["default"](editor.toolbarSelector);
  17415. var $textContainerElem = editor.$textContainerElem;
  17416. var $toolbarElem = editor.$toolbarElem;
  17417. var $iconElem = (0, _find["default"])($toolbarElem).call($toolbarElem, "i." + iconExitFullScreenText);
  17418. var config = editor.config;
  17419. $iconElem.removeClass(iconExitFullScreenText);
  17420. $iconElem.addClass(iconFullScreenText);
  17421. $editorParent.removeClass(classfullScreenEditor);
  17422. $editorParent.css('z-index', 'auto');
  17423. $textContainerElem.css('height', config.height + 'px');
  17424. };
  17425. /**
  17426. * 初始化全屏功能
  17427. * @param editor 编辑器实例
  17428. */
  17429. var initFullScreen = function initFullScreen(editor) {
  17430. // 当textSelector有值的时候,也就是编辑器是工具栏和编辑区域分离的情况, 则不生成全屏功能按钮
  17431. if (editor.textSelector) return;
  17432. if (!editor.config.showFullScreen) return;
  17433. var $toolbarElem = editor.$toolbarElem;
  17434. var $elem = dom_core_1["default"]("<div class=\"w-e-menu\" data-title=\"\u5168\u5C4F\">\n <i class=\"" + iconFullScreenText + "\"></i>\n </div>");
  17435. $elem.on('click', function (e) {
  17436. var _context;
  17437. var $elemIcon = (0, _find["default"])(_context = dom_core_1["default"](e.currentTarget)).call(_context, 'i');
  17438. if ($elemIcon.hasClass(iconFullScreenText)) {
  17439. $elem.attr('data-title', '取消全屏');
  17440. exports.setFullScreen(editor);
  17441. } else {
  17442. $elem.attr('data-title', '全屏');
  17443. exports.setUnFullScreen(editor);
  17444. }
  17445. });
  17446. $toolbarElem.append($elem);
  17447. };
  17448. exports["default"] = initFullScreen;
  17449. /***/ }),
  17450. /* 421 */
  17451. /***/ (function(module, exports, __webpack_require__) {
  17452. var api = __webpack_require__(20);
  17453. var content = __webpack_require__(422);
  17454. content = content.__esModule ? content.default : content;
  17455. if (typeof content === 'string') {
  17456. content = [[module.i, content, '']];
  17457. }
  17458. var options = {};
  17459. options.insert = "head";
  17460. options.singleton = false;
  17461. var update = api(content, options);
  17462. module.exports = content.locals || {};
  17463. /***/ }),
  17464. /* 422 */
  17465. /***/ (function(module, exports, __webpack_require__) {
  17466. // Imports
  17467. var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(21);
  17468. exports = ___CSS_LOADER_API_IMPORT___(false);
  17469. // Module
  17470. exports.push([module.i, ".w-e-full-screen-editor {\n position: fixed;\n width: 100%!important;\n height: 100%!important;\n left: 0;\n top: 0;\n}\n", ""]);
  17471. // Exports
  17472. module.exports = exports;
  17473. /***/ }),
  17474. /* 423 */
  17475. /***/ (function(module, exports, __webpack_require__) {
  17476. "use strict";
  17477. /**
  17478. * @description 滚动到指定锚点
  17479. * @author zhengwenjian
  17480. */
  17481. var _interopRequireDefault = __webpack_require__(0);
  17482. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  17483. var _find = _interopRequireDefault(__webpack_require__(29));
  17484. (0, _defineProperty["default"])(exports, "__esModule", {
  17485. value: true
  17486. });
  17487. /**
  17488. * 编辑器滚动到指定锚点
  17489. * @param editor 编辑器实例
  17490. * @param id 标题锚点id
  17491. */
  17492. var scrollToHead = function scrollToHead(editor, id) {
  17493. var _context;
  17494. var $textElem = editor.isEnable ? editor.$textElem : (0, _find["default"])(_context = editor.$textContainerElem).call(_context, '.w-e-content-mantle');
  17495. var $targetHead = (0, _find["default"])($textElem).call($textElem, "[id='" + id + "']");
  17496. var targetTop = $targetHead.getOffsetData().top;
  17497. $textElem.scrollTop(targetTop);
  17498. };
  17499. exports["default"] = scrollToHead;
  17500. /***/ }),
  17501. /* 424 */
  17502. /***/ (function(module, exports, __webpack_require__) {
  17503. "use strict";
  17504. var _interopRequireDefault = __webpack_require__(0);
  17505. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  17506. (0, _defineProperty["default"])(exports, "__esModule", {
  17507. value: true
  17508. });
  17509. var tslib_1 = __webpack_require__(2);
  17510. var style_1 = tslib_1.__importDefault(__webpack_require__(129));
  17511. var tier = {
  17512. menu: 2,
  17513. panel: 2,
  17514. toolbar: 1,
  17515. tooltip: 1,
  17516. textContainer: 1
  17517. };
  17518. var ZIndex =
  17519. /** @class */
  17520. function () {
  17521. function ZIndex() {
  17522. // 层级参数
  17523. this.tier = tier; // 默认值
  17524. this.baseZIndex = style_1["default"].zIndex;
  17525. } // 获取 tierName 对应的 z-index 的值。如果 tierName 未定义则返回默认的 z-index 值
  17526. ZIndex.prototype.get = function (tierName) {
  17527. if (tierName && this.tier[tierName]) {
  17528. return this.baseZIndex + this.tier[tierName];
  17529. }
  17530. return this.baseZIndex;
  17531. }; // 初始化
  17532. ZIndex.prototype.init = function (editor) {
  17533. if (this.baseZIndex == style_1["default"].zIndex) {
  17534. this.baseZIndex = editor.config.zIndex;
  17535. }
  17536. };
  17537. return ZIndex;
  17538. }();
  17539. exports["default"] = ZIndex;
  17540. /***/ }),
  17541. /* 425 */
  17542. /***/ (function(module, exports, __webpack_require__) {
  17543. "use strict";
  17544. /**
  17545. * @description 编辑器 change 事件
  17546. * @author fangzhicong
  17547. */
  17548. var _interopRequireDefault = __webpack_require__(0);
  17549. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  17550. var _filter = _interopRequireDefault(__webpack_require__(70));
  17551. var _forEach = _interopRequireDefault(__webpack_require__(4));
  17552. (0, _defineProperty["default"])(exports, "__esModule", {
  17553. value: true
  17554. });
  17555. var tslib_1 = __webpack_require__(2);
  17556. var mutation_1 = tslib_1.__importDefault(__webpack_require__(426));
  17557. var util_1 = __webpack_require__(6);
  17558. var const_1 = __webpack_require__(7);
  17559. /**
  17560. * 剔除编辑区容器的 attribute 变化中的非 contenteditable 变化
  17561. * @param mutations MutationRecord[]
  17562. * @param tar 编辑区容器的 DOM 节点
  17563. */
  17564. function mutationsFilter(mutations, tar) {
  17565. // 剔除编辑区容器的 attribute 变化中的非 contenteditable 变化
  17566. return (0, _filter["default"])(mutations).call(mutations, function (_a) {
  17567. var type = _a.type,
  17568. target = _a.target,
  17569. attributeName = _a.attributeName;
  17570. return type != 'attributes' || type == 'attributes' && (attributeName == 'contenteditable' || target != tar);
  17571. });
  17572. }
  17573. /**
  17574. * Change 实现
  17575. */
  17576. var Change =
  17577. /** @class */
  17578. function (_super) {
  17579. tslib_1.__extends(Change, _super);
  17580. function Change(editor) {
  17581. var _this = _super.call(this, function (mutations, observer) {
  17582. var _a; // 数据过滤
  17583. mutations = mutationsFilter(mutations, observer.target); // 存储数据
  17584. (_a = _this.data).push.apply(_a, mutations); // 标准模式下
  17585. if (!editor.isCompatibleMode) {
  17586. // 在非中文输入状态下时才保存数据
  17587. if (!editor.isComposing) {
  17588. return _this.asyncSave();
  17589. }
  17590. } // 兼容模式下
  17591. else {
  17592. _this.asyncSave();
  17593. }
  17594. }) || this;
  17595. _this.editor = editor;
  17596. /**
  17597. * 变化的数据集合
  17598. */
  17599. _this.data = [];
  17600. /**
  17601. * 异步保存数据
  17602. */
  17603. _this.asyncSave = const_1.EMPTY_FN;
  17604. return _this;
  17605. }
  17606. /**
  17607. * 保存变化的数据并发布 change event
  17608. */
  17609. Change.prototype.save = function () {
  17610. // 有数据
  17611. if (this.data.length) {
  17612. // 保存变化数据
  17613. this.editor.history.save(this.data); // 清除缓存
  17614. this.data.length = 0;
  17615. this.emit();
  17616. }
  17617. };
  17618. /**
  17619. * 发布 change event
  17620. */
  17621. Change.prototype.emit = function () {
  17622. var _context;
  17623. // 执行 onchange 回调
  17624. (0, _forEach["default"])(_context = this.editor.txt.eventHooks.changeEvents).call(_context, function (fn) {
  17625. return fn();
  17626. });
  17627. }; // 重写 observe
  17628. Change.prototype.observe = function () {
  17629. var _this = this;
  17630. _super.prototype.observe.call(this, this.editor.$textElem.elems[0]);
  17631. var timeout = this.editor.config.onchangeTimeout;
  17632. this.asyncSave = util_1.debounce(function () {
  17633. _this.save();
  17634. }, timeout);
  17635. if (!this.editor.isCompatibleMode) {
  17636. this.editor.$textElem.on('compositionend', function () {
  17637. _this.asyncSave();
  17638. });
  17639. }
  17640. };
  17641. return Change;
  17642. }(mutation_1["default"]);
  17643. exports["default"] = Change;
  17644. /***/ }),
  17645. /* 426 */
  17646. /***/ (function(module, exports, __webpack_require__) {
  17647. "use strict";
  17648. /**
  17649. * @description 封装 MutationObserver
  17650. * @author fangzhicong
  17651. */
  17652. var _interopRequireDefault = __webpack_require__(0);
  17653. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  17654. (0, _defineProperty["default"])(exports, "__esModule", {
  17655. value: true
  17656. });
  17657. /**
  17658. * 封装 MutationObserver,抽离成公共类
  17659. */
  17660. var Mutation =
  17661. /** @class */
  17662. function () {
  17663. /**
  17664. * 构造器
  17665. * @param fn 发生变化时执行的回调函数
  17666. * @param options 自定义配置项
  17667. */
  17668. function Mutation(fn, options) {
  17669. var _this = this;
  17670. /**
  17671. * 默认的 MutationObserverInit 配置
  17672. */
  17673. this.options = {
  17674. subtree: true,
  17675. childList: true,
  17676. attributes: true,
  17677. attributeOldValue: true,
  17678. characterData: true,
  17679. characterDataOldValue: true
  17680. };
  17681. this.callback = function (mutations) {
  17682. fn(mutations, _this);
  17683. };
  17684. this.observer = new MutationObserver(this.callback);
  17685. options && (this.options = options);
  17686. }
  17687. (0, _defineProperty["default"])(Mutation.prototype, "target", {
  17688. get: function get() {
  17689. return this.node;
  17690. },
  17691. enumerable: false,
  17692. configurable: true
  17693. });
  17694. /**
  17695. * 绑定监听节点(初次绑定有效)
  17696. * @param node 需要被监听的节点
  17697. */
  17698. Mutation.prototype.observe = function (node) {
  17699. if (!(this.node instanceof Node)) {
  17700. this.node = node;
  17701. this.connect();
  17702. }
  17703. };
  17704. /**
  17705. * 连接监听器(开始观察)
  17706. */
  17707. Mutation.prototype.connect = function () {
  17708. if (this.node) {
  17709. this.observer.observe(this.node, this.options);
  17710. return this;
  17711. }
  17712. throw new Error('还未初始化绑定,请您先绑定有效的 Node 节点');
  17713. };
  17714. /**
  17715. * 断开监听器(停止观察)
  17716. */
  17717. Mutation.prototype.disconnect = function () {
  17718. var list = this.observer.takeRecords();
  17719. list.length && this.callback(list);
  17720. this.observer.disconnect();
  17721. };
  17722. return Mutation;
  17723. }();
  17724. exports["default"] = Mutation;
  17725. /***/ }),
  17726. /* 427 */
  17727. /***/ (function(module, exports, __webpack_require__) {
  17728. "use strict";
  17729. /**
  17730. * @description 历史记录
  17731. * @author fangzhicong
  17732. */
  17733. var _interopRequireDefault = __webpack_require__(0);
  17734. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  17735. (0, _defineProperty["default"])(exports, "__esModule", {
  17736. value: true
  17737. });
  17738. var tslib_1 = __webpack_require__(2);
  17739. var content_1 = tslib_1.__importDefault(__webpack_require__(428));
  17740. var scroll_1 = tslib_1.__importDefault(__webpack_require__(435));
  17741. var range_1 = tslib_1.__importDefault(__webpack_require__(436));
  17742. /**
  17743. * 历史记录(撤销、恢复)
  17744. */
  17745. var History =
  17746. /** @class */
  17747. function () {
  17748. function History(editor) {
  17749. this.editor = editor;
  17750. this.content = new content_1["default"](editor);
  17751. this.scroll = new scroll_1["default"](editor);
  17752. this.range = new range_1["default"](editor);
  17753. }
  17754. (0, _defineProperty["default"])(History.prototype, "size", {
  17755. /**
  17756. * 获取缓存中的数据长度。格式为:[正常的数据的条数,被撤销的数据的条数]
  17757. */
  17758. get: function get() {
  17759. return this.scroll.size;
  17760. },
  17761. enumerable: false,
  17762. configurable: true
  17763. });
  17764. /**
  17765. * 初始化绑定。在 editor.create() 结尾时调用
  17766. */
  17767. History.prototype.observe = function () {
  17768. this.content.observe();
  17769. this.scroll.observe(); // 标准模式下才进行初始化绑定
  17770. !this.editor.isCompatibleMode && this.range.observe();
  17771. };
  17772. /**
  17773. * 保存数据
  17774. */
  17775. History.prototype.save = function (mutations) {
  17776. if (mutations.length) {
  17777. this.content.save(mutations);
  17778. this.scroll.save(); // 标准模式下才进行缓存
  17779. !this.editor.isCompatibleMode && this.range.save();
  17780. }
  17781. };
  17782. /**
  17783. * 撤销
  17784. */
  17785. History.prototype.revoke = function () {
  17786. this.editor.change.disconnect();
  17787. var res = this.content.revoke();
  17788. if (res) {
  17789. this.scroll.revoke(); // 标准模式下才执行
  17790. if (!this.editor.isCompatibleMode) {
  17791. this.range.revoke();
  17792. this.editor.$textElem.focus();
  17793. }
  17794. }
  17795. this.editor.change.connect(); // 如果用户在 onchange 中修改了内容(DOM),那么缓存中的节点数据可能不连贯了,不连贯的数据必将导致恢复失败,所以必须将用户的 onchange 处于监控状态中
  17796. res && this.editor.change.emit();
  17797. };
  17798. /**
  17799. * 恢复
  17800. */
  17801. History.prototype.restore = function () {
  17802. this.editor.change.disconnect();
  17803. var res = this.content.restore();
  17804. if (res) {
  17805. this.scroll.restore(); // 标准模式下才执行
  17806. if (!this.editor.isCompatibleMode) {
  17807. this.range.restore();
  17808. this.editor.$textElem.focus();
  17809. }
  17810. }
  17811. this.editor.change.connect(); // 与 revoke 同理
  17812. res && this.editor.change.emit();
  17813. };
  17814. return History;
  17815. }();
  17816. exports["default"] = History;
  17817. /***/ }),
  17818. /* 428 */
  17819. /***/ (function(module, exports, __webpack_require__) {
  17820. "use strict";
  17821. /**
  17822. * @description 整合差异备份和内容备份,进行统一管理
  17823. * @author fangzhicong
  17824. */
  17825. var _interopRequireDefault = __webpack_require__(0);
  17826. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  17827. (0, _defineProperty["default"])(exports, "__esModule", {
  17828. value: true
  17829. });
  17830. var tslib_1 = __webpack_require__(2);
  17831. var node_1 = tslib_1.__importDefault(__webpack_require__(429));
  17832. var html_1 = tslib_1.__importDefault(__webpack_require__(433));
  17833. var ContentCache =
  17834. /** @class */
  17835. function () {
  17836. function ContentCache(editor) {
  17837. this.editor = editor;
  17838. }
  17839. /**
  17840. * 初始化绑定
  17841. */
  17842. ContentCache.prototype.observe = function () {
  17843. if (this.editor.isCompatibleMode) {
  17844. // 兼容模式(内容备份)
  17845. this.cache = new html_1["default"](this.editor);
  17846. } else {
  17847. // 标准模式(差异备份/节点备份)
  17848. this.cache = new node_1["default"](this.editor);
  17849. }
  17850. this.cache.observe();
  17851. };
  17852. /**
  17853. * 保存
  17854. */
  17855. ContentCache.prototype.save = function (mutations) {
  17856. if (this.editor.isCompatibleMode) {
  17857. ;
  17858. this.cache.save();
  17859. } else {
  17860. ;
  17861. this.cache.compile(mutations);
  17862. }
  17863. };
  17864. /**
  17865. * 撤销
  17866. */
  17867. ContentCache.prototype.revoke = function () {
  17868. var _a;
  17869. return (_a = this.cache) === null || _a === void 0 ? void 0 : _a.revoke();
  17870. };
  17871. /**
  17872. * 恢复
  17873. */
  17874. ContentCache.prototype.restore = function () {
  17875. var _a;
  17876. return (_a = this.cache) === null || _a === void 0 ? void 0 : _a.restore();
  17877. };
  17878. return ContentCache;
  17879. }();
  17880. exports["default"] = ContentCache;
  17881. /***/ }),
  17882. /* 429 */
  17883. /***/ (function(module, exports, __webpack_require__) {
  17884. "use strict";
  17885. /**
  17886. * @description 差异备份
  17887. * @author fangzhicong
  17888. */
  17889. var _interopRequireDefault = __webpack_require__(0);
  17890. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  17891. (0, _defineProperty["default"])(exports, "__esModule", {
  17892. value: true
  17893. });
  17894. var tslib_1 = __webpack_require__(2);
  17895. var cache_1 = tslib_1.__importDefault(__webpack_require__(99));
  17896. var compile_1 = tslib_1.__importDefault(__webpack_require__(431));
  17897. var decompilation_1 = __webpack_require__(432);
  17898. var NodeCache =
  17899. /** @class */
  17900. function (_super) {
  17901. tslib_1.__extends(NodeCache, _super);
  17902. function NodeCache(editor) {
  17903. var _this = _super.call(this, editor.config.historyMaxSize) || this;
  17904. _this.editor = editor;
  17905. return _this;
  17906. }
  17907. NodeCache.prototype.observe = function () {
  17908. this.resetMaxSize(this.editor.config.historyMaxSize);
  17909. };
  17910. /**
  17911. * 编译并保存数据
  17912. */
  17913. NodeCache.prototype.compile = function (data) {
  17914. this.save(compile_1["default"](data));
  17915. return this;
  17916. };
  17917. /**
  17918. * 撤销
  17919. */
  17920. NodeCache.prototype.revoke = function () {
  17921. return _super.prototype.revoke.call(this, function (data) {
  17922. decompilation_1.revoke(data);
  17923. });
  17924. };
  17925. /**
  17926. * 恢复
  17927. */
  17928. NodeCache.prototype.restore = function () {
  17929. return _super.prototype.restore.call(this, function (data) {
  17930. decompilation_1.restore(data);
  17931. });
  17932. };
  17933. return NodeCache;
  17934. }(cache_1["default"]);
  17935. exports["default"] = NodeCache;
  17936. /***/ }),
  17937. /* 430 */
  17938. /***/ (function(module, exports, __webpack_require__) {
  17939. "use strict";
  17940. /**
  17941. * @description 数据结构 - 栈
  17942. * @author fangzhicong
  17943. */
  17944. var _interopRequireDefault = __webpack_require__(0);
  17945. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  17946. (0, _defineProperty["default"])(exports, "__esModule", {
  17947. value: true
  17948. });
  17949. exports.CeilStack = void 0;
  17950. /**
  17951. * 栈(限制最大数据条数,栈满后可以继续入栈,而先入栈的数据将失效)
  17952. */
  17953. // 取名灵感来自 Math.ceil,向上取有效值
  17954. var CeilStack =
  17955. /** @class */
  17956. function () {
  17957. function CeilStack(max) {
  17958. if (max === void 0) {
  17959. max = 0;
  17960. }
  17961. /**
  17962. * 数据缓存
  17963. */
  17964. this.data = [];
  17965. /**
  17966. * 栈的最大长度。为零则长度不限
  17967. */
  17968. this.max = 0;
  17969. /**
  17970. * 标识是否重设过 max 值
  17971. */
  17972. this.reset = false;
  17973. max = Math.abs(max);
  17974. max && (this.max = max);
  17975. }
  17976. /**
  17977. * 允许用户重设一次 max 值
  17978. */
  17979. CeilStack.prototype.resetMax = function (maxSize) {
  17980. maxSize = Math.abs(maxSize);
  17981. if (!this.reset && !isNaN(maxSize)) {
  17982. this.max = maxSize;
  17983. this.reset = true;
  17984. }
  17985. };
  17986. (0, _defineProperty["default"])(CeilStack.prototype, "size", {
  17987. /**
  17988. * 当前栈中的数据条数
  17989. */
  17990. get: function get() {
  17991. return this.data.length;
  17992. },
  17993. enumerable: false,
  17994. configurable: true
  17995. });
  17996. /**
  17997. * 入栈
  17998. * @param data 入栈的数据
  17999. */
  18000. CeilStack.prototype.instack = function (data) {
  18001. this.data.unshift(data);
  18002. if (this.max && this.size > this.max) {
  18003. this.data.length = this.max;
  18004. }
  18005. return this;
  18006. };
  18007. /**
  18008. * 出栈
  18009. */
  18010. CeilStack.prototype.outstack = function () {
  18011. return this.data.shift();
  18012. };
  18013. /**
  18014. * 清空栈
  18015. */
  18016. CeilStack.prototype.clear = function () {
  18017. this.data.length = 0;
  18018. return this;
  18019. };
  18020. return CeilStack;
  18021. }();
  18022. exports.CeilStack = CeilStack;
  18023. /***/ }),
  18024. /* 431 */
  18025. /***/ (function(module, exports, __webpack_require__) {
  18026. "use strict";
  18027. /**
  18028. * @description 数据整理
  18029. * @author fangzhicong
  18030. */
  18031. var _interopRequireDefault = __webpack_require__(0);
  18032. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  18033. var _forEach = _interopRequireDefault(__webpack_require__(4));
  18034. var _indexOf = _interopRequireDefault(__webpack_require__(27));
  18035. (0, _defineProperty["default"])(exports, "__esModule", {
  18036. value: true
  18037. });
  18038. exports.compliePosition = exports.complieNodes = exports.compileValue = exports.compileType = void 0;
  18039. var util_1 = __webpack_require__(6);
  18040. /**
  18041. * 数据类型
  18042. */
  18043. function compileType(data) {
  18044. switch (data) {
  18045. case 'childList':
  18046. return 'node';
  18047. case 'attributes':
  18048. return 'attr';
  18049. default:
  18050. return 'text';
  18051. }
  18052. }
  18053. exports.compileType = compileType;
  18054. /**
  18055. * 获取当前的文本内容
  18056. */
  18057. function compileValue(data) {
  18058. switch (data.type) {
  18059. case 'attributes':
  18060. return data.target.getAttribute(data.attributeName) || '';
  18061. case 'characterData':
  18062. return data.target.textContent;
  18063. default:
  18064. return '';
  18065. }
  18066. }
  18067. exports.compileValue = compileValue;
  18068. /**
  18069. * addedNodes/removedNodes
  18070. */
  18071. function complieNodes(data) {
  18072. var temp = {};
  18073. if (data.addedNodes.length) {
  18074. temp.add = util_1.toArray(data.addedNodes);
  18075. }
  18076. if (data.removedNodes.length) {
  18077. temp.remove = util_1.toArray(data.removedNodes);
  18078. }
  18079. return temp;
  18080. }
  18081. exports.complieNodes = complieNodes;
  18082. /**
  18083. * addedNodes/removedNodes 的相对位置
  18084. */
  18085. function compliePosition(data) {
  18086. var temp;
  18087. if (data.previousSibling) {
  18088. temp = {
  18089. type: 'before',
  18090. target: data.previousSibling
  18091. };
  18092. } else if (data.nextSibling) {
  18093. temp = {
  18094. type: 'after',
  18095. target: data.nextSibling
  18096. };
  18097. } else {
  18098. temp = {
  18099. type: 'parent',
  18100. target: data.target
  18101. };
  18102. }
  18103. return temp;
  18104. }
  18105. exports.compliePosition = compliePosition;
  18106. /**
  18107. * 补全 Firefox 数据的特殊标签
  18108. */
  18109. var tag = ['UL', 'OL', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6'];
  18110. /**
  18111. * 将 MutationRecord 转换成自定义格式的数据
  18112. */
  18113. function compile(data) {
  18114. var temp = []; // 以下两个变量是兼容 Firefox 时使用到的
  18115. // 前一次操作为删除元素节点
  18116. var removeNode = false; // 连续的节点删除记录
  18117. var removeCache = [];
  18118. (0, _forEach["default"])(data).call(data, function (record, index) {
  18119. var item = {
  18120. type: compileType(record.type),
  18121. target: record.target,
  18122. attr: record.attributeName || '',
  18123. value: compileValue(record) || '',
  18124. oldValue: record.oldValue || '',
  18125. nodes: complieNodes(record),
  18126. position: compliePosition(record)
  18127. };
  18128. temp.push(item); // 兼容 Firefox,补全数据(这几十行代码写得吐血,跟 IE 有得一拼)
  18129. if (!util_1.UA.isFirefox) {
  18130. return;
  18131. } // 正常的数据:缩进、行高、超链接、对齐方式、引用、插入表情、插入图片、分割线、表格、插入代码
  18132. // 普通的数据补全:标题(纯文本内容)、加粗、斜体、删除线、下划线、颜色、背景色、字体、字号、列表(纯文本内容)
  18133. // 特殊的数据补全:标题(包含 HTMLElement)、列表(包含 HTMLElement 或 ul -> ol 或 ol -> ul 或 Enter)
  18134. if (removeNode && record.addedNodes.length && record.addedNodes[0].nodeType == 1) {
  18135. // 需要被全数据的目标节点
  18136. var replenishNode = record.addedNodes[0];
  18137. var replenishData = {
  18138. type: 'node',
  18139. target: replenishNode,
  18140. attr: '',
  18141. value: '',
  18142. oldValue: '',
  18143. nodes: {
  18144. add: [removeNode]
  18145. },
  18146. position: {
  18147. type: 'parent',
  18148. target: replenishNode
  18149. }
  18150. }; // 特殊的标签:['UL', 'OL', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6']
  18151. if ((0, _indexOf["default"])(tag).call(tag, replenishNode.nodeName) != -1) {
  18152. replenishData.nodes.add = util_1.toArray(replenishNode.childNodes);
  18153. temp.push(replenishData);
  18154. } // 上一个删除元素是文本节点
  18155. else if (removeNode.nodeType == 3) {
  18156. if (contains(replenishNode, removeCache)) {
  18157. replenishData.nodes.add = util_1.toArray(replenishNode.childNodes);
  18158. }
  18159. temp.push(replenishData);
  18160. } // 上一个删除元素是 Element && 由近到远的删除元素至少有一个是需要补全数据节点的子节点
  18161. else if ((0, _indexOf["default"])(tag).call(tag, record.target.nodeName) == -1 && contains(replenishNode, removeCache)) {
  18162. replenishData.nodes.add = util_1.toArray(replenishNode.childNodes);
  18163. temp.push(replenishData);
  18164. }
  18165. } // 记录本次的节点信息
  18166. if (item.type == 'node' && record.removedNodes.length == 1) {
  18167. removeNode = record.removedNodes[0];
  18168. removeCache.push(removeNode);
  18169. } else {
  18170. removeNode = false;
  18171. removeCache.length = 0;
  18172. }
  18173. });
  18174. return temp;
  18175. }
  18176. exports["default"] = compile; // 删除元素的历史记录中包含有多少个目标节点的子元素
  18177. function contains(tar, childs) {
  18178. var count = 0;
  18179. for (var i = childs.length - 1; i > 0; i--) {
  18180. if (tar.contains(childs[i])) {
  18181. count++;
  18182. } else {
  18183. break;
  18184. }
  18185. }
  18186. return count;
  18187. }
  18188. /***/ }),
  18189. /* 432 */
  18190. /***/ (function(module, exports, __webpack_require__) {
  18191. "use strict";
  18192. var _interopRequireDefault = __webpack_require__(0);
  18193. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  18194. var _forEach = _interopRequireDefault(__webpack_require__(4));
  18195. var _entries = _interopRequireDefault(__webpack_require__(94));
  18196. (0, _defineProperty["default"])(exports, "__esModule", {
  18197. value: true
  18198. });
  18199. exports.restore = exports.revoke = void 0;
  18200. /**
  18201. * 将节点添加到 DOM 树中
  18202. * @param data 数据项
  18203. * @param list 节点集合(addedNodes 或 removedNodes)
  18204. */
  18205. function insertNode(data, list) {
  18206. var reference = data.position.target;
  18207. switch (data.position.type) {
  18208. // reference 在这些节点的前面
  18209. case 'before':
  18210. if (reference.nextSibling) {
  18211. reference = reference.nextSibling;
  18212. (0, _forEach["default"])(list).call(list, function (item) {
  18213. data.target.insertBefore(item, reference);
  18214. });
  18215. } else {
  18216. (0, _forEach["default"])(list).call(list, function (item) {
  18217. data.target.appendChild(item);
  18218. });
  18219. }
  18220. break;
  18221. // reference 在这些节点的后面
  18222. case 'after':
  18223. (0, _forEach["default"])(list).call(list, function (item) {
  18224. data.target.insertBefore(item, reference);
  18225. });
  18226. break;
  18227. // parent
  18228. // reference 是这些节点的父节点
  18229. default:
  18230. (0, _forEach["default"])(list).call(list, function (item) {
  18231. reference.appendChild(item);
  18232. });
  18233. break;
  18234. }
  18235. }
  18236. /* ------------------------------------------------------------------ 撤销逻辑 ------------------------------------------------------------------ */
  18237. function revokeNode(data) {
  18238. for (var _i = 0, _a = (0, _entries["default"])(data.nodes); _i < _a.length; _i++) {
  18239. var _b = _a[_i],
  18240. relative = _b[0],
  18241. list = _b[1];
  18242. switch (relative) {
  18243. // 反向操作,将这些节点从 DOM 中移除
  18244. case 'add':
  18245. (0, _forEach["default"])(list).call(list, function (item) {
  18246. data.target.removeChild(item);
  18247. });
  18248. break;
  18249. // remove(反向操作,将这些节点添加到 DOM 中)
  18250. default:
  18251. {
  18252. insertNode(data, list);
  18253. break;
  18254. }
  18255. }
  18256. }
  18257. }
  18258. /**
  18259. * 撤销 attribute
  18260. */
  18261. function revokeAttr(data) {
  18262. var target = data.target;
  18263. if (data.oldValue == null) {
  18264. target.removeAttribute(data.attr);
  18265. } else {
  18266. target.setAttribute(data.attr, data.oldValue);
  18267. }
  18268. }
  18269. /**
  18270. * 撤销文本内容
  18271. */
  18272. function revokeText(data) {
  18273. data.target.textContent = data.oldValue;
  18274. }
  18275. var revokeFns = {
  18276. node: revokeNode,
  18277. text: revokeText,
  18278. attr: revokeAttr
  18279. }; // 撤销 - 对外暴露的接口
  18280. function revoke(data) {
  18281. for (var i = data.length - 1; i > -1; i--) {
  18282. var item = data[i];
  18283. revokeFns[item.type](item);
  18284. }
  18285. }
  18286. exports.revoke = revoke;
  18287. /* ------------------------------------------------------------------ 恢复逻辑 ------------------------------------------------------------------ */
  18288. function restoreNode(data) {
  18289. for (var _i = 0, _a = (0, _entries["default"])(data.nodes); _i < _a.length; _i++) {
  18290. var _b = _a[_i],
  18291. relative = _b[0],
  18292. list = _b[1];
  18293. switch (relative) {
  18294. case 'add':
  18295. {
  18296. insertNode(data, list);
  18297. break;
  18298. }
  18299. // remove
  18300. default:
  18301. {
  18302. (0, _forEach["default"])(list).call(list, function (item) {
  18303. ;
  18304. item.parentNode.removeChild(item);
  18305. });
  18306. break;
  18307. }
  18308. }
  18309. }
  18310. }
  18311. function restoreText(data) {
  18312. data.target.textContent = data.value;
  18313. }
  18314. function restoreAttr(data) {
  18315. ;
  18316. data.target.setAttribute(data.attr, data.value);
  18317. }
  18318. var restoreFns = {
  18319. node: restoreNode,
  18320. text: restoreText,
  18321. attr: restoreAttr
  18322. }; // 恢复 - 对外暴露的接口
  18323. function restore(data) {
  18324. for (var _i = 0, data_1 = data; _i < data_1.length; _i++) {
  18325. var item = data_1[_i];
  18326. restoreFns[item.type](item);
  18327. }
  18328. }
  18329. exports.restore = restore;
  18330. /***/ }),
  18331. /* 433 */
  18332. /***/ (function(module, exports, __webpack_require__) {
  18333. "use strict";
  18334. var _interopRequireDefault = __webpack_require__(0);
  18335. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  18336. (0, _defineProperty["default"])(exports, "__esModule", {
  18337. value: true
  18338. });
  18339. var chain_1 = __webpack_require__(434);
  18340. var HtmlCache =
  18341. /** @class */
  18342. function () {
  18343. function HtmlCache(editor) {
  18344. this.editor = editor;
  18345. this.data = new chain_1.TailChain();
  18346. }
  18347. /**
  18348. * 初始化绑定
  18349. */
  18350. HtmlCache.prototype.observe = function () {
  18351. this.data.resetMax(this.editor.config.historyMaxSize); // 保存初始化值
  18352. this.data.insertLast(this.editor.$textElem.html());
  18353. };
  18354. /**
  18355. * 保存
  18356. */
  18357. HtmlCache.prototype.save = function () {
  18358. this.data.insertLast(this.editor.$textElem.html());
  18359. return this;
  18360. };
  18361. /**
  18362. * 撤销
  18363. */
  18364. HtmlCache.prototype.revoke = function () {
  18365. var data = this.data.prev();
  18366. if (data) {
  18367. this.editor.$textElem.html(data);
  18368. return true;
  18369. }
  18370. return false;
  18371. };
  18372. /**
  18373. * 恢复
  18374. */
  18375. HtmlCache.prototype.restore = function () {
  18376. var data = this.data.next();
  18377. if (data) {
  18378. this.editor.$textElem.html(data);
  18379. return true;
  18380. }
  18381. return false;
  18382. };
  18383. return HtmlCache;
  18384. }();
  18385. exports["default"] = HtmlCache;
  18386. /***/ }),
  18387. /* 434 */
  18388. /***/ (function(module, exports, __webpack_require__) {
  18389. "use strict";
  18390. /**
  18391. * @description 数据结构 - 链表
  18392. * @author fangzhicong
  18393. */
  18394. var _interopRequireDefault = __webpack_require__(0);
  18395. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  18396. var _splice = _interopRequireDefault(__webpack_require__(91));
  18397. (0, _defineProperty["default"])(exports, "__esModule", {
  18398. value: true
  18399. });
  18400. exports.TailChain = void 0;
  18401. /**
  18402. * 特殊链表(数据尾插入、插入前自动清理指针后边的数据、插入后指针永远定位于最后一位元素、可限制链表长度、指针双向移动)
  18403. */
  18404. var TailChain =
  18405. /** @class */
  18406. function () {
  18407. function TailChain() {
  18408. /**
  18409. * 链表数据
  18410. */
  18411. this.data = [];
  18412. /**
  18413. * 链表最大长度,零表示长度不限
  18414. */
  18415. this.max = 0;
  18416. /**
  18417. * 指针
  18418. */
  18419. this.point = 0; // 当前指针是否人为操作过
  18420. this.isRe = false;
  18421. }
  18422. /**
  18423. * 允许用户重设一次 max 值
  18424. */
  18425. TailChain.prototype.resetMax = function (maxSize) {
  18426. maxSize = Math.abs(maxSize);
  18427. maxSize && (this.max = maxSize);
  18428. };
  18429. (0, _defineProperty["default"])(TailChain.prototype, "size", {
  18430. /**
  18431. * 当前链表的长度
  18432. */
  18433. get: function get() {
  18434. return this.data.length;
  18435. },
  18436. enumerable: false,
  18437. configurable: true
  18438. });
  18439. /**
  18440. * 尾插入
  18441. * @param data 插入的数据
  18442. */
  18443. TailChain.prototype.insertLast = function (data) {
  18444. // 人为操作过指针,清除指针后面的元素
  18445. if (this.isRe) {
  18446. var _context;
  18447. (0, _splice["default"])(_context = this.data).call(_context, this.point + 1);
  18448. this.isRe = false;
  18449. }
  18450. this.data.push(data); // 超出链表最大长度
  18451. while (this.max && this.size > this.max) {
  18452. this.data.shift();
  18453. } // 从新定位指针到最后一个元素
  18454. this.point = this.size - 1;
  18455. return this;
  18456. };
  18457. /**
  18458. * 获取当前指针元素
  18459. */
  18460. TailChain.prototype.current = function () {
  18461. return this.data[this.point];
  18462. };
  18463. /**
  18464. * 获取上一指针元素
  18465. */
  18466. TailChain.prototype.prev = function () {
  18467. !this.isRe && (this.isRe = true);
  18468. this.point--;
  18469. if (this.point < 0) {
  18470. this.point = 0;
  18471. return undefined;
  18472. }
  18473. return this.current();
  18474. };
  18475. /**
  18476. * 下一指针元素
  18477. */
  18478. TailChain.prototype.next = function () {
  18479. !this.isRe && (this.isRe = true);
  18480. this.point++;
  18481. if (this.point >= this.size) {
  18482. this.point = this.size - 1;
  18483. return undefined;
  18484. }
  18485. return this.current();
  18486. };
  18487. return TailChain;
  18488. }();
  18489. exports.TailChain = TailChain;
  18490. /***/ }),
  18491. /* 435 */
  18492. /***/ (function(module, exports, __webpack_require__) {
  18493. "use strict";
  18494. /**
  18495. * @description 记录 scrollTop
  18496. * @author fangzhicong
  18497. */
  18498. var _interopRequireDefault = __webpack_require__(0);
  18499. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  18500. (0, _defineProperty["default"])(exports, "__esModule", {
  18501. value: true
  18502. });
  18503. var tslib_1 = __webpack_require__(2);
  18504. var cache_1 = tslib_1.__importDefault(__webpack_require__(99));
  18505. var ScrollCache =
  18506. /** @class */
  18507. function (_super) {
  18508. tslib_1.__extends(ScrollCache, _super);
  18509. function ScrollCache(editor) {
  18510. var _this = _super.call(this, editor.config.historyMaxSize) || this;
  18511. _this.editor = editor;
  18512. /**
  18513. * 上一次的 scrollTop
  18514. */
  18515. _this.last = 0;
  18516. _this.target = editor.$textElem.elems[0];
  18517. return _this;
  18518. }
  18519. /**
  18520. * 给编辑区容器绑定 scroll 事件
  18521. */
  18522. ScrollCache.prototype.observe = function () {
  18523. var _this = this;
  18524. this.target = this.editor.$textElem.elems[0];
  18525. this.editor.$textElem.on('scroll', function () {
  18526. _this.last = _this.target.scrollTop;
  18527. });
  18528. this.resetMaxSize(this.editor.config.historyMaxSize);
  18529. };
  18530. /**
  18531. * 保存 scrollTop 值
  18532. */
  18533. ScrollCache.prototype.save = function () {
  18534. _super.prototype.save.call(this, [this.last, this.target.scrollTop]);
  18535. return this;
  18536. };
  18537. /**
  18538. * 撤销
  18539. */
  18540. ScrollCache.prototype.revoke = function () {
  18541. var _this = this;
  18542. return _super.prototype.revoke.call(this, function (data) {
  18543. _this.target.scrollTop = data[0];
  18544. });
  18545. };
  18546. /**
  18547. * 恢复
  18548. */
  18549. ScrollCache.prototype.restore = function () {
  18550. var _this = this;
  18551. return _super.prototype.restore.call(this, function (data) {
  18552. _this.target.scrollTop = data[1];
  18553. });
  18554. };
  18555. return ScrollCache;
  18556. }(cache_1["default"]);
  18557. exports["default"] = ScrollCache;
  18558. /***/ }),
  18559. /* 436 */
  18560. /***/ (function(module, exports, __webpack_require__) {
  18561. "use strict";
  18562. /**
  18563. * @description 记录 range 变化
  18564. * @author fangzhicong
  18565. */
  18566. var _interopRequireDefault = __webpack_require__(0);
  18567. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  18568. (0, _defineProperty["default"])(exports, "__esModule", {
  18569. value: true
  18570. });
  18571. var tslib_1 = __webpack_require__(2);
  18572. var cache_1 = tslib_1.__importDefault(__webpack_require__(99));
  18573. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  18574. var util_1 = __webpack_require__(6);
  18575. /**
  18576. * 把 Range 对象转换成缓存对象
  18577. * @param range Range 对象
  18578. */
  18579. function rangeToObject(range) {
  18580. return {
  18581. start: [range.startContainer, range.startOffset],
  18582. end: [range.endContainer, range.endOffset],
  18583. root: range.commonAncestorContainer,
  18584. collapsed: range.collapsed
  18585. };
  18586. }
  18587. /**
  18588. * 编辑区 range 缓存管理器
  18589. */
  18590. var RangeCache =
  18591. /** @class */
  18592. function (_super) {
  18593. tslib_1.__extends(RangeCache, _super);
  18594. function RangeCache(editor) {
  18595. var _this = _super.call(this, editor.config.historyMaxSize) || this;
  18596. _this.editor = editor;
  18597. _this.lastRange = rangeToObject(document.createRange());
  18598. _this.root = editor.$textElem.elems[0];
  18599. _this.updateLastRange = util_1.debounce(function () {
  18600. _this.lastRange = rangeToObject(_this.rangeHandle);
  18601. }, editor.config.onchangeTimeout);
  18602. return _this;
  18603. }
  18604. (0, _defineProperty["default"])(RangeCache.prototype, "rangeHandle", {
  18605. /**
  18606. * 获取 Range 对象
  18607. */
  18608. get: function get() {
  18609. var selection = document.getSelection();
  18610. return selection && selection.rangeCount ? selection.getRangeAt(0) : document.createRange();
  18611. },
  18612. enumerable: false,
  18613. configurable: true
  18614. });
  18615. /**
  18616. * 初始化绑定
  18617. */
  18618. RangeCache.prototype.observe = function () {
  18619. var self = this; // 同步节点数据
  18620. this.root = this.editor.$textElem.elems[0];
  18621. this.resetMaxSize(this.editor.config.historyMaxSize); // selection change 回调函数
  18622. function selectionchange() {
  18623. var handle = self.rangeHandle;
  18624. if (self.root === handle.commonAncestorContainer || self.root.contains(handle.commonAncestorContainer)) {
  18625. // 非中文输入状态下才进行记录
  18626. if (!self.editor.isComposing) {
  18627. self.updateLastRange();
  18628. }
  18629. }
  18630. } // backspace 和 delete 手动更新 Range 缓存
  18631. function deletecallback(e) {
  18632. if (e.key == 'Backspace' || e.key == 'Delete') {
  18633. // self.lastRange = rangeToObject(self.rangeHandle)
  18634. self.updateLastRange();
  18635. }
  18636. } // 绑定事件(必须绑定在 document 上,不能绑定在 window 上)
  18637. dom_core_1["default"](document).on('selectionchange', selectionchange); // 解除事件绑定
  18638. this.editor.beforeDestroy(function () {
  18639. dom_core_1["default"](document).off('selectionchange', selectionchange);
  18640. }); // 删除文本时手动更新 range
  18641. self.editor.$textElem.on('keydown', deletecallback);
  18642. };
  18643. /**
  18644. * 保存 Range
  18645. */
  18646. RangeCache.prototype.save = function () {
  18647. var current = rangeToObject(this.rangeHandle);
  18648. _super.prototype.save.call(this, [this.lastRange, current]);
  18649. this.lastRange = current;
  18650. return this;
  18651. };
  18652. /**
  18653. * 设置 Range,在 撤销/恢复 中调用
  18654. * @param range 缓存的 Range 数据
  18655. */
  18656. RangeCache.prototype.set = function (range) {
  18657. try {
  18658. if (range) {
  18659. var handle = this.rangeHandle;
  18660. handle.setStart.apply(handle, range.start);
  18661. handle.setEnd.apply(handle, range.end);
  18662. this.editor.menus.changeActive();
  18663. return true;
  18664. }
  18665. } catch (err) {
  18666. return false;
  18667. }
  18668. return false;
  18669. };
  18670. /**
  18671. * 撤销
  18672. */
  18673. RangeCache.prototype.revoke = function () {
  18674. var _this = this;
  18675. return _super.prototype.revoke.call(this, function (data) {
  18676. _this.set(data[0]);
  18677. });
  18678. };
  18679. /**
  18680. * 恢复
  18681. */
  18682. RangeCache.prototype.restore = function () {
  18683. var _this = this;
  18684. return _super.prototype.restore.call(this, function (data) {
  18685. _this.set(data[1]);
  18686. });
  18687. };
  18688. return RangeCache;
  18689. }(cache_1["default"]);
  18690. exports["default"] = RangeCache;
  18691. /***/ }),
  18692. /* 437 */
  18693. /***/ (function(module, exports, __webpack_require__) {
  18694. "use strict";
  18695. var _interopRequireDefault = __webpack_require__(0);
  18696. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  18697. var _find = _interopRequireDefault(__webpack_require__(29));
  18698. (0, _defineProperty["default"])(exports, "__esModule", {
  18699. value: true
  18700. });
  18701. var tslib_1 = __webpack_require__(2);
  18702. var dom_core_1 = tslib_1.__importDefault(__webpack_require__(3));
  18703. __webpack_require__(438);
  18704. function disableInit(editor) {
  18705. var isCurtain = false; // 避免重复生成幕布
  18706. var $contentDom;
  18707. var $menuDom; // 禁用期间,通过 js 修改内容后,刷新内容
  18708. editor.txt.eventHooks.changeEvents.push(function () {
  18709. if (isCurtain) {
  18710. (0, _find["default"])($contentDom).call($contentDom, '.w-e-content-preview').html(editor.$textElem.html());
  18711. }
  18712. }); // 创建幕布
  18713. function disable() {
  18714. if (isCurtain) return; // 隐藏编辑区域
  18715. editor.$textElem.hide(); // 生成div 渲染编辑内容
  18716. var textContainerZindexValue = editor.zIndex.get('textContainer');
  18717. var content = editor.txt.html();
  18718. $contentDom = dom_core_1["default"]("<div class=\"w-e-content-mantle\" style=\"z-index:" + textContainerZindexValue + "\">\n <div class=\"w-e-content-preview w-e-text\">" + content + "</div>\n </div>");
  18719. editor.$textContainerElem.append($contentDom); // 生成div 菜单膜布
  18720. var menuZindexValue = editor.zIndex.get('menu');
  18721. $menuDom = dom_core_1["default"]("<div class=\"w-e-menue-mantle\" style=\"z-index:" + menuZindexValue + "\"></div>");
  18722. editor.$toolbarElem.append($menuDom);
  18723. isCurtain = true;
  18724. editor.isEnable = false;
  18725. } // 销毁幕布并显示可编辑区域
  18726. function enable() {
  18727. if (!isCurtain) return;
  18728. $contentDom.remove();
  18729. $menuDom.remove();
  18730. editor.$textElem.show();
  18731. isCurtain = false;
  18732. editor.isEnable = true;
  18733. }
  18734. return {
  18735. disable: disable,
  18736. enable: enable
  18737. };
  18738. }
  18739. exports["default"] = disableInit;
  18740. /***/ }),
  18741. /* 438 */
  18742. /***/ (function(module, exports, __webpack_require__) {
  18743. var api = __webpack_require__(20);
  18744. var content = __webpack_require__(439);
  18745. content = content.__esModule ? content.default : content;
  18746. if (typeof content === 'string') {
  18747. content = [[module.i, content, '']];
  18748. }
  18749. var options = {};
  18750. options.insert = "head";
  18751. options.singleton = false;
  18752. var update = api(content, options);
  18753. module.exports = content.locals || {};
  18754. /***/ }),
  18755. /* 439 */
  18756. /***/ (function(module, exports, __webpack_require__) {
  18757. // Imports
  18758. var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(21);
  18759. exports = ___CSS_LOADER_API_IMPORT___(false);
  18760. // Module
  18761. exports.push([module.i, ".w-e-content-mantle {\n width: 100%;\n height: 100%;\n overflow-y: auto;\n}\n.w-e-content-mantle .w-e-content-preview {\n width: 100%;\n min-height: 100%;\n padding: 0 10px;\n line-height: 1.5;\n}\n.w-e-content-mantle .w-e-content-preview img {\n cursor: default;\n}\n.w-e-content-mantle .w-e-content-preview img:hover {\n box-shadow: none;\n}\n.w-e-menue-mantle {\n position: absolute;\n height: 100%;\n width: 100%;\n top: 0;\n left: 0;\n}\n", ""]);
  18762. // Exports
  18763. module.exports = exports;
  18764. /***/ }),
  18765. /* 440 */
  18766. /***/ (function(module, exports, __webpack_require__) {
  18767. "use strict";
  18768. var _interopRequireDefault = __webpack_require__(0);
  18769. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  18770. (0, _defineProperty["default"])(exports, "__esModule", {
  18771. value: true
  18772. });
  18773. var SelectionChange =
  18774. /** @class */
  18775. function () {
  18776. function SelectionChange(editor) {
  18777. var _this = this;
  18778. this.editor = editor; // 绑定的事件
  18779. var init = function init() {
  18780. var activeElement = document.activeElement;
  18781. if (activeElement === editor.$textElem.elems[0]) {
  18782. _this.emit();
  18783. }
  18784. }; // 选取变化事件监听
  18785. window.document.addEventListener('selectionchange', init); // 摧毁时移除监听
  18786. this.editor.beforeDestroy(function () {
  18787. window.document.removeEventListener('selectionchange', init);
  18788. });
  18789. }
  18790. SelectionChange.prototype.emit = function () {
  18791. var _a; // 执行rangeChange函数
  18792. var onSelectionChange = this.editor.config.onSelectionChange;
  18793. if (onSelectionChange) {
  18794. var selection = this.editor.selection;
  18795. selection.saveRange();
  18796. if (!selection.isSelectionEmpty()) onSelectionChange({
  18797. // 当前文本
  18798. text: selection.getSelectionText(),
  18799. // 当前的html
  18800. html: (_a = selection.getSelectionContainerElem()) === null || _a === void 0 ? void 0 : _a.elems[0].innerHTML,
  18801. // select对象
  18802. selection: selection
  18803. });
  18804. }
  18805. };
  18806. return SelectionChange;
  18807. }();
  18808. exports["default"] = SelectionChange;
  18809. /***/ }),
  18810. /* 441 */
  18811. /***/ (function(module, exports, __webpack_require__) {
  18812. "use strict";
  18813. var _interopRequireDefault = __webpack_require__(0);
  18814. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  18815. var _assign = _interopRequireDefault(__webpack_require__(128));
  18816. var _entries = _interopRequireDefault(__webpack_require__(94));
  18817. var _forEach = _interopRequireDefault(__webpack_require__(4));
  18818. (0, _defineProperty["default"])(exports, "__esModule", {
  18819. value: true
  18820. });
  18821. exports.registerPlugin = void 0;
  18822. var tslib_1 = __webpack_require__(2);
  18823. var editor_1 = tslib_1.__importDefault(__webpack_require__(87));
  18824. var util_1 = __webpack_require__(6);
  18825. /**
  18826. * 插件注册
  18827. * @param { string } name 插件名
  18828. * @param { RegisterOptions } options 插件配置
  18829. * @param { pluginsListType } memory 存储介质
  18830. */
  18831. function registerPlugin(name, options, memory) {
  18832. if (!name) {
  18833. throw new TypeError('name is not define');
  18834. }
  18835. if (!options) {
  18836. throw new TypeError('options is not define');
  18837. }
  18838. if (!options.intention) {
  18839. throw new TypeError('options.intention is not define');
  18840. }
  18841. if (options.intention && typeof options.intention !== 'function') {
  18842. throw new TypeError('options.intention is not function');
  18843. }
  18844. if (memory[name]) {
  18845. console.warn("plugin " + name + " \u5DF2\u5B58\u5728\uFF0C\u5DF2\u8986\u76D6\u3002");
  18846. }
  18847. memory[name] = options;
  18848. }
  18849. exports.registerPlugin = registerPlugin;
  18850. /**
  18851. * 插件初始化
  18852. * @param { Editor } editor 编辑器实例
  18853. */
  18854. function initPlugins(editor) {
  18855. var plugins = (0, _assign["default"])({}, util_1.deepClone(editor_1["default"].globalPluginsFunctionList), util_1.deepClone(editor.pluginsFunctionList));
  18856. var values = (0, _entries["default"])(plugins);
  18857. (0, _forEach["default"])(values).call(values, function (_a) {
  18858. var name = _a[0],
  18859. options = _a[1];
  18860. console.info("plugin " + name + " initializing");
  18861. var intention = options.intention,
  18862. config = options.config;
  18863. intention(editor, config);
  18864. console.info("plugin " + name + " initialization complete");
  18865. });
  18866. }
  18867. exports["default"] = initPlugins;
  18868. /***/ }),
  18869. /* 442 */
  18870. /***/ (function(module, exports, __webpack_require__) {
  18871. "use strict";
  18872. var _interopRequireDefault = __webpack_require__(0);
  18873. var _defineProperty = _interopRequireDefault(__webpack_require__(1));
  18874. (0, _defineProperty["default"])(exports, "__esModule", {
  18875. value: true
  18876. });
  18877. /***/ })
  18878. /******/ ])["default"];
  18879. });
  18880. //# sourceMappingURL=wangEditor.js.map