├── .eslintignore
├── .eslintrc.json
├── .gitignore
├── .gitmodules
├── .gitreview
├── .mailmap
├── .phan
├── config.php
└── stubs
│ └── FlaggedRevs.php
├── .phpcs.xml
├── .stylelintrc.json
├── AUTHORS.txt
├── CONTRIBUTING.md
├── Gruntfile.js
├── LICENSE.txt
├── README.md
├── VisualEditor.i18n.alias.php
├── bin
├── listRecentCommits.sh
├── pre-commit.sh
└── updateSubmodule.sh
├── build
├── .eslintrc.json
├── checkModules.js
├── screenshots-client
│ ├── .eslintrc.json
│ ├── diffs.js
│ ├── userGuide.js
│ └── utils.js
├── screenshots.diffs.js
├── screenshots.js
├── screenshots.userGuide.js
├── screenshots.yml
├── tasks
│ └── screenshotLangs.json
└── typos.json
├── bundlesize.config.json
├── composer.json
├── editcheck
├── i18n
│ ├── af.json
│ ├── api
│ │ ├── en.json
│ │ └── qqq.json
│ ├── ar.json
│ ├── az.json
│ ├── be-tarask.json
│ ├── bn.json
│ ├── br.json
│ ├── ce.json
│ ├── cs.json
│ ├── cy.json
│ ├── da.json
│ ├── de.json
│ ├── en.json
│ ├── eo.json
│ ├── es.json
│ ├── et.json
│ ├── fa.json
│ ├── fi.json
│ ├── fr.json
│ ├── gl.json
│ ├── he.json
│ ├── hr.json
│ ├── ia.json
│ ├── ig.json
│ ├── io.json
│ ├── is.json
│ ├── it.json
│ ├── ja.json
│ ├── ka.json
│ ├── kn.json
│ ├── ko.json
│ ├── lb.json
│ ├── lt.json
│ ├── lv.json
│ ├── mk.json
│ ├── ms.json
│ ├── nb.json
│ ├── ne.json
│ ├── nl-informal.json
│ ├── nl.json
│ ├── nn.json
│ ├── ojb.json
│ ├── pa.json
│ ├── pl.json
│ ├── pt-br.json
│ ├── pt.json
│ ├── qqq.json
│ ├── ro.json
│ ├── ru.json
│ ├── sdh.json
│ ├── sl.json
│ ├── sr-ec.json
│ ├── sr-el.json
│ ├── sv.json
│ ├── tr.json
│ ├── uk.json
│ ├── vi.json
│ ├── zh-hans.json
│ └── zh-hant.json
├── includes
│ ├── ApiEditCheckReferenceUrl.php
│ ├── Hooks.php
│ └── ResourceLoaderData.php
└── modules
│ ├── .eslintrc.json
│ ├── BaseEditCheck.js
│ ├── EditCheck.less
│ ├── EditCheckAction.js
│ ├── EditCheckDialog.js
│ ├── EditCheckFactory.js
│ ├── EditCheckGutterSidebarDialog.js
│ ├── controller.js
│ ├── editchecks
│ ├── AddReferenceEditCheck.js
│ └── experimental
│ │ ├── ConvertReferenceEditCheck.js
│ │ ├── DisambiguationEditCheck.js
│ │ ├── ExternalLinksEditCheck.js
│ │ ├── ImportCopyvioEditCheck.js
│ │ └── TextMatchEditCheck.js
│ └── init.js
├── extension.json
├── i18n
├── ve-mw
│ ├── aae.json
│ ├── ab.json
│ ├── abr.json
│ ├── abs.json
│ ├── ace.json
│ ├── acf.json
│ ├── acm.json
│ ├── ady-cyrl.json
│ ├── aeb-arab.json
│ ├── aeb-latn.json
│ ├── af.json
│ ├── ajg.json
│ ├── alt.json
│ ├── am.json
│ ├── ami.json
│ ├── an.json
│ ├── ang.json
│ ├── ann.json
│ ├── anp.json
│ ├── apc.json
│ ├── api
│ │ ├── af.json
│ │ ├── ar.json
│ │ ├── as.json
│ │ ├── ast.json
│ │ ├── ay.json
│ │ ├── az.json
│ │ ├── ba.json
│ │ ├── be-tarask.json
│ │ ├── bg.json
│ │ ├── bn.json
│ │ ├── bqi.json
│ │ ├── br.json
│ │ ├── bs.json
│ │ ├── ca.json
│ │ ├── cdo-hant.json
│ │ ├── ce.json
│ │ ├── cs.json
│ │ ├── cy.json
│ │ ├── da.json
│ │ ├── de.json
│ │ ├── diq.json
│ │ ├── dty.json
│ │ ├── el.json
│ │ ├── en-gb.json
│ │ ├── en.json
│ │ ├── eo.json
│ │ ├── es.json
│ │ ├── et.json
│ │ ├── eu.json
│ │ ├── fa.json
│ │ ├── fi.json
│ │ ├── fo.json
│ │ ├── fr.json
│ │ ├── fur.json
│ │ ├── gl.json
│ │ ├── gor.json
│ │ ├── gu.json
│ │ ├── he.json
│ │ ├── hi.json
│ │ ├── hu-formal.json
│ │ ├── hu.json
│ │ ├── hy.json
│ │ ├── ia.json
│ │ ├── id.json
│ │ ├── ig.json
│ │ ├── ilo.json
│ │ ├── io.json
│ │ ├── is.json
│ │ ├── it.json
│ │ ├── ja.json
│ │ ├── jv.json
│ │ ├── ka.json
│ │ ├── kaa.json
│ │ ├── kab.json
│ │ ├── kk-cyrl.json
│ │ ├── km.json
│ │ ├── kn.json
│ │ ├── ko.json
│ │ ├── krc.json
│ │ ├── ksh.json
│ │ ├── ku-latn.json
│ │ ├── lb.json
│ │ ├── lki.json
│ │ ├── lt.json
│ │ ├── luz.json
│ │ ├── lv.json
│ │ ├── mg.json
│ │ ├── min.json
│ │ ├── mk.json
│ │ ├── ml.json
│ │ ├── mni.json
│ │ ├── mr.json
│ │ ├── ms.json
│ │ ├── mwl.json
│ │ ├── my.json
│ │ ├── nap.json
│ │ ├── nb.json
│ │ ├── ne.json
│ │ ├── nl.json
│ │ ├── nn.json
│ │ ├── oc.json
│ │ ├── olo.json
│ │ ├── om.json
│ │ ├── os.json
│ │ ├── pa.json
│ │ ├── pl.json
│ │ ├── pms.json
│ │ ├── ps.json
│ │ ├── pt-br.json
│ │ ├── pt.json
│ │ ├── qqq.json
│ │ ├── ro.json
│ │ ├── roa-tara.json
│ │ ├── rsk.json
│ │ ├── ru.json
│ │ ├── sa.json
│ │ ├── sah.json
│ │ ├── sat.json
│ │ ├── scn.json
│ │ ├── sco.json
│ │ ├── sd.json
│ │ ├── sh-latn.json
│ │ ├── sk.json
│ │ ├── sl.json
│ │ ├── sms.json
│ │ ├── sq.json
│ │ ├── sr-ec.json
│ │ ├── sr-el.json
│ │ ├── sv.json
│ │ ├── szy.json
│ │ ├── ta.json
│ │ ├── tay.json
│ │ ├── te.json
│ │ ├── tl.json
│ │ ├── tr.json
│ │ ├── tt-cyrl.json
│ │ ├── tw.json
│ │ ├── uk.json
│ │ ├── ur.json
│ │ ├── vi.json
│ │ ├── war.json
│ │ ├── xmf.json
│ │ ├── yi.json
│ │ ├── yue-hant.json
│ │ ├── zh-hans.json
│ │ └── zh-hant.json
│ ├── ar.json
│ ├── arc.json
│ ├── arn.json
│ ├── arq.json
│ ├── ary.json
│ ├── arz.json
│ ├── as.json
│ ├── ase.json
│ ├── ast.json
│ ├── atj.json
│ ├── av.json
│ ├── avk.json
│ ├── awa.json
│ ├── ay.json
│ ├── az.json
│ ├── azb.json
│ ├── ba.json
│ ├── ban-bali.json
│ ├── ban.json
│ ├── bar.json
│ ├── bbc-latn.json
│ ├── bcc.json
│ ├── bci.json
│ ├── bcl.json
│ ├── bdr.json
│ ├── be-tarask.json
│ ├── be.json
│ ├── bew.json
│ ├── bg.json
│ ├── bgc-arab.json
│ ├── bgc.json
│ ├── bgn.json
│ ├── bho.json
│ ├── bjn.json
│ ├── blc.json
│ ├── blk.json
│ ├── bn.json
│ ├── bo.json
│ ├── bol.json
│ ├── bpy.json
│ ├── bqi.json
│ ├── br.json
│ ├── brh.json
│ ├── brx.json
│ ├── bs.json
│ ├── btm.json
│ ├── bto.json
│ ├── bug-bugi.json
│ ├── bug.json
│ ├── bxr.json
│ ├── ca.json
│ ├── cak.json
│ ├── cbk-zam.json
│ ├── ccp.json
│ ├── cdo-hans.json
│ ├── cdo-hant.json
│ ├── cdo-latn.json
│ ├── ce.json
│ ├── ceb.json
│ ├── chn.json
│ ├── ckb.json
│ ├── cko.json
│ ├── cnr-latn.json
│ ├── co.json
│ ├── cop.json
│ ├── cpx-hans.json
│ ├── cpx-hant.json
│ ├── crh-cyrl.json
│ ├── crh-latn.json
│ ├── crh-ro.json
│ ├── cs.json
│ ├── csb.json
│ ├── cu.json
│ ├── cv.json
│ ├── cy.json
│ ├── da.json
│ ├── dag.json
│ ├── dar.json
│ ├── de-ch.json
│ ├── de-formal.json
│ ├── de.json
│ ├── dga.json
│ ├── din.json
│ ├── diq.json
│ ├── dsb.json
│ ├── dtp.json
│ ├── dty.json
│ ├── dua.json
│ ├── dv.json
│ ├── dz.json
│ ├── ee.json
│ ├── efi.json
│ ├── egl.json
│ ├── ekp.json
│ ├── el.json
│ ├── eml.json
│ ├── en-gb.json
│ ├── en.json
│ ├── eo.json
│ ├── es-formal.json
│ ├── es.json
│ ├── et.json
│ ├── eu.json
│ ├── ext.json
│ ├── fa.json
│ ├── fat.json
│ ├── ff.json
│ ├── fi.json
│ ├── fit.json
│ ├── fo.json
│ ├── fon.json
│ ├── fr.json
│ ├── frc.json
│ ├── frp.json
│ ├── frr.json
│ ├── fur.json
│ ├── fvr.json
│ ├── fy.json
│ ├── ga.json
│ ├── gaa.json
│ ├── gan-hant.json
│ ├── gbm.json
│ ├── gcf.json
│ ├── gcr.json
│ ├── gd.json
│ ├── gl.json
│ ├── gld.json
│ ├── glk.json
│ ├── gn.json
│ ├── gom-deva.json
│ ├── gom-latn.json
│ ├── gor.json
│ ├── got.json
│ ├── gpe.json
│ ├── grc.json
│ ├── gsw.json
│ ├── gu.json
│ ├── guc.json
│ ├── gur.json
│ ├── guw.json
│ ├── gv.json
│ ├── ha.json
│ ├── hak-latn.json
│ ├── hav.json
│ ├── he.json
│ ├── hi.json
│ ├── hif-latn.json
│ ├── hil.json
│ ├── hke.json
│ ├── hno.json
│ ├── hoc-latn.json
│ ├── hoc.json
│ ├── hr.json
│ ├── hrx.json
│ ├── hsb.json
│ ├── hsn.json
│ ├── ht.json
│ ├── hu-formal.json
│ ├── hu.json
│ ├── hy.json
│ ├── hyw.json
│ ├── ia.json
│ ├── iba.json
│ ├── ibb.json
│ ├── id.json
│ ├── ie.json
│ ├── ig.json
│ ├── igl.json
│ ├── ike-cans.json
│ ├── ike-latn.json
│ ├── ilo.json
│ ├── inh.json
│ ├── io.json
│ ├── is.json
│ ├── ish.json
│ ├── isv-cyrl.json
│ ├── isv-latn.json
│ ├── it.json
│ ├── ja.json
│ ├── jam.json
│ ├── jbo.json
│ ├── jje.json
│ ├── jut.json
│ ├── jv.json
│ ├── ka.json
│ ├── kaa.json
│ ├── kab.json
│ ├── kac.json
│ ├── kai.json
│ ├── kaj.json
│ ├── kbd-cyrl.json
│ ├── kbp.json
│ ├── kcg.json
│ ├── kck.json
│ ├── kea.json
│ ├── kg.json
│ ├── kge.json
│ ├── khw.json
│ ├── kip.json
│ ├── kiu.json
│ ├── kjh.json
│ ├── kjp.json
│ ├── kk-cyrl.json
│ ├── km.json
│ ├── kn.json
│ ├── knc.json
│ ├── ko-kp.json
│ ├── ko.json
│ ├── koi.json
│ ├── krc.json
│ ├── kri.json
│ ├── krj.json
│ ├── krl.json
│ ├── ksh.json
│ ├── ksw.json
│ ├── ku-latn.json
│ ├── kum.json
│ ├── kus.json
│ ├── kv.json
│ ├── kw.json
│ ├── ky.json
│ ├── la.json
│ ├── lad.json
│ ├── lag.json
│ ├── lb.json
│ ├── lbe.json
│ ├── lez.json
│ ├── lfn.json
│ ├── lg.json
│ ├── li.json
│ ├── lij.json
│ ├── liv.json
│ ├── ljp.json
│ ├── lki.json
│ ├── lkt.json
│ ├── lld.json
│ ├── lmo.json
│ ├── ln.json
│ ├── lo.json
│ ├── lrc.json
│ ├── lt.json
│ ├── lua.json
│ ├── lus.json
│ ├── luz.json
│ ├── lv.json
│ ├── lzh.json
│ ├── lzz.json
│ ├── mad.json
│ ├── mag.json
│ ├── mai.json
│ ├── mak.json
│ ├── maw.json
│ ├── mdf.json
│ ├── mdh.json
│ ├── mey.json
│ ├── mfa.json
│ ├── mg.json
│ ├── mhr.json
│ ├── mi.json
│ ├── min.json
│ ├── mk.json
│ ├── ml.json
│ ├── mn.json
│ ├── mnc-mong.json
│ ├── mnc.json
│ ├── mni.json
│ ├── mns.json
│ ├── mnw.json
│ ├── mo.json
│ ├── mos.json
│ ├── mr.json
│ ├── mrh.json
│ ├── mrj.json
│ ├── ms-arab.json
│ ├── ms.json
│ ├── msi.json
│ ├── mt.json
│ ├── mui.json
│ ├── mvf.json
│ ├── mwl.json
│ ├── mwlanguagevariant
│ │ ├── af.json
│ │ ├── ami.json
│ │ ├── anp.json
│ │ ├── ar.json
│ │ ├── arn.json
│ │ ├── as.json
│ │ ├── ast.json
│ │ ├── az.json
│ │ ├── azb.json
│ │ ├── ban.json
│ │ ├── be-tarask.json
│ │ ├── be.json
│ │ ├── bg.json
│ │ ├── blk.json
│ │ ├── bn.json
│ │ ├── br.json
│ │ ├── bs.json
│ │ ├── ca.json
│ │ ├── ce.json
│ │ ├── ckb.json
│ │ ├── crh-latn.json
│ │ ├── cs.json
│ │ ├── cy.json
│ │ ├── da.json
│ │ ├── de.json
│ │ ├── diq.json
│ │ ├── el.json
│ │ ├── en.json
│ │ ├── eo.json
│ │ ├── es.json
│ │ ├── eu.json
│ │ ├── fa.json
│ │ ├── fi.json
│ │ ├── fit.json
│ │ ├── fr.json
│ │ ├── fur.json
│ │ ├── fy.json
│ │ ├── gcr.json
│ │ ├── gl.json
│ │ ├── he.json
│ │ ├── hi.json
│ │ ├── hr.json
│ │ ├── hu.json
│ │ ├── hy.json
│ │ ├── hyw.json
│ │ ├── ia.json
│ │ ├── id.json
│ │ ├── ig.json
│ │ ├── io.json
│ │ ├── is.json
│ │ ├── it.json
│ │ ├── ja.json
│ │ ├── jv.json
│ │ ├── ka.json
│ │ ├── kab.json
│ │ ├── kcg.json
│ │ ├── kjp.json
│ │ ├── kn.json
│ │ ├── ko-kp.json
│ │ ├── ko.json
│ │ ├── ku-latn.json
│ │ ├── ky.json
│ │ ├── lag.json
│ │ ├── lb.json
│ │ ├── lfn.json
│ │ ├── lij.json
│ │ ├── lmo.json
│ │ ├── lt.json
│ │ ├── lv.json
│ │ ├── min.json
│ │ ├── mk.json
│ │ ├── ml.json
│ │ ├── mr.json
│ │ ├── ms.json
│ │ ├── mt.json
│ │ ├── my.json
│ │ ├── nb.json
│ │ ├── nds-nl.json
│ │ ├── ne.json
│ │ ├── nl.json
│ │ ├── nn.json
│ │ ├── nqo.json
│ │ ├── pl.json
│ │ ├── pnb.json
│ │ ├── ps.json
│ │ ├── pt-br.json
│ │ ├── pt.json
│ │ ├── pwn.json
│ │ ├── qqq.json
│ │ ├── rmc.json
│ │ ├── ro.json
│ │ ├── roa-tara.json
│ │ ├── rsk.json
│ │ ├── ru.json
│ │ ├── sah.json
│ │ ├── sc.json
│ │ ├── scn.json
│ │ ├── sd.json
│ │ ├── se.json
│ │ ├── sh-latn.json
│ │ ├── sk.json
│ │ ├── skr-arab.json
│ │ ├── sl.json
│ │ ├── sma.json
│ │ ├── smn.json
│ │ ├── sms.json
│ │ ├── sq.json
│ │ ├── sr-ec.json
│ │ ├── sr-el.json
│ │ ├── st.json
│ │ ├── sv.json
│ │ ├── szy.json
│ │ ├── ta.json
│ │ ├── tay.json
│ │ ├── tg-cyrl.json
│ │ ├── th.json
│ │ ├── ti.json
│ │ ├── tly.json
│ │ ├── tok.json
│ │ ├── tr.json
│ │ ├── trv.json
│ │ ├── tt-cyrl.json
│ │ ├── tw.json
│ │ ├── ug-arab.json
│ │ ├── uk.json
│ │ ├── ur.json
│ │ ├── uz.json
│ │ ├── vec.json
│ │ ├── vi.json
│ │ ├── xsy.json
│ │ ├── yi.json
│ │ ├── zgh.json
│ │ ├── zh-hans.json
│ │ └── zh-hant.json
│ ├── my.json
│ ├── myv.json
│ ├── mzn.json
│ ├── nah.json
│ ├── nan-hans.json
│ ├── nan-hant.json
│ ├── nan-latn-pehoeji.json
│ ├── nan-latn-tailo.json
│ ├── nap.json
│ ├── nb.json
│ ├── nds-nl.json
│ ├── nds.json
│ ├── ne.json
│ ├── ng.json
│ ├── nia.json
│ ├── nit.json
│ ├── nl-informal.json
│ ├── nl.json
│ ├── nmz.json
│ ├── nn.json
│ ├── nod.json
│ ├── nog.json
│ ├── nqo.json
│ ├── nr.json
│ ├── nso.json
│ ├── nup.json
│ ├── ny.json
│ ├── nyn.json
│ ├── nyo.json
│ ├── nys.json
│ ├── nzi.json
│ ├── oc.json
│ ├── ojb.json
│ ├── olo.json
│ ├── om.json
│ ├── or.json
│ ├── os.json
│ ├── osi.json
│ ├── pa.json
│ ├── pag.json
│ ├── pam.json
│ ├── pap.json
│ ├── pcd.json
│ ├── pcm.json
│ ├── pfl.json
│ ├── piu.json
│ ├── pl.json
│ ├── pms.json
│ ├── pnb.json
│ ├── ppl.json
│ ├── prg.json
│ ├── prs.json
│ ├── ps.json
│ ├── pt-br.json
│ ├── pt.json
│ ├── pwn.json
│ ├── qqq.json
│ ├── qu.json
│ ├── qwh.json
│ ├── rej.json
│ ├── rif.json
│ ├── rki.json
│ ├── rm.json
│ ├── rmc.json
│ ├── rn.json
│ ├── ro.json
│ ├── roa-tara.json
│ ├── rsk.json
│ ├── ru.json
│ ├── rue.json
│ ├── rut.json
│ ├── rw.json
│ ├── ryu.json
│ ├── sa.json
│ ├── sah.json
│ ├── sat.json
│ ├── sc.json
│ ├── scn.json
│ ├── sco.json
│ ├── sd.json
│ ├── sdc.json
│ ├── sdh.json
│ ├── se.json
│ ├── ses.json
│ ├── sg.json
│ ├── sgs.json
│ ├── sh-latn.json
│ ├── shi.json
│ ├── shn.json
│ ├── shy-latn.json
│ ├── si.json
│ ├── sjd.json
│ ├── sje.json
│ ├── sk.json
│ ├── skr-arab.json
│ ├── sl.json
│ ├── sli.json
│ ├── sma.json
│ ├── smj.json
│ ├── smn.json
│ ├── sms.json
│ ├── sn.json
│ ├── so.json
│ ├── sq.json
│ ├── sr-ec.json
│ ├── sr-el.json
│ ├── sro.json
│ ├── ss.json
│ ├── st.json
│ ├── stq.json
│ ├── sty.json
│ ├── su.json
│ ├── sv.json
│ ├── sw.json
│ ├── sxu.json
│ ├── syl.json
│ ├── szl.json
│ ├── szy.json
│ ├── ta.json
│ ├── tay.json
│ ├── tcy.json
│ ├── tdd.json
│ ├── te.json
│ ├── tg-cyrl.json
│ ├── th.json
│ ├── ti.json
│ ├── tig.json
│ ├── tk.json
│ ├── tl.json
│ ├── tly.json
│ ├── tn.json
│ ├── tok.json
│ ├── tr.json
│ ├── trv.json
│ ├── tsg.json
│ ├── tt-cyrl.json
│ ├── tt-latn.json
│ ├── ttj.json
│ ├── tum.json
│ ├── tw.json
│ ├── tyv.json
│ ├── tzm.json
│ ├── udm.json
│ ├── ug-arab.json
│ ├── uk.json
│ ├── ur.json
│ ├── uz.json
│ ├── vec.json
│ ├── vep.json
│ ├── vi.json
│ ├── vmw.json
│ ├── vo.json
│ ├── vro.json
│ ├── wa.json
│ ├── wal.json
│ ├── war.json
│ ├── wls.json
│ ├── wlx.json
│ ├── wo.json
│ ├── wsg.json
│ ├── wuu-hans.json
│ ├── wuu-hant.json
│ ├── xal.json
│ ├── xh.json
│ ├── xmf.json
│ ├── xmm.json
│ ├── xsy.json
│ ├── yi.json
│ ├── yo.json
│ ├── yoi.json
│ ├── yrl.json
│ ├── yua.json
│ ├── yue-hant.json
│ ├── za.json
│ ├── zgh.json
│ ├── zh-hans.json
│ ├── zh-hant.json
│ ├── zh-hk.json
│ ├── zmi.json
│ └── zu.json
└── ve-wmf
│ ├── abs.json
│ ├── ace.json
│ ├── acm.json
│ ├── ady-cyrl.json
│ ├── af.json
│ ├── alt.json
│ ├── ami.json
│ ├── an.json
│ ├── anp.json
│ ├── ar.json
│ ├── arn.json
│ ├── arq.json
│ ├── ary.json
│ ├── arz.json
│ ├── as.json
│ ├── ast.json
│ ├── atj.json
│ ├── av.json
│ ├── avk.json
│ ├── awa.json
│ ├── az.json
│ ├── azb.json
│ ├── ba.json
│ ├── ban.json
│ ├── bar.json
│ ├── bbc-latn.json
│ ├── bcc.json
│ ├── bci.json
│ ├── bcl.json
│ ├── be-tarask.json
│ ├── be.json
│ ├── bew.json
│ ├── bg.json
│ ├── bgn.json
│ ├── bho.json
│ ├── bjn.json
│ ├── blk.json
│ ├── bn.json
│ ├── bqi.json
│ ├── br.json
│ ├── bs.json
│ ├── btm.json
│ ├── ca.json
│ ├── ccp.json
│ ├── cdo-hant.json
│ ├── cdo-latn.json
│ ├── ce.json
│ ├── ceb.json
│ ├── ckb.json
│ ├── cnr-latn.json
│ ├── co.json
│ ├── cop.json
│ ├── crh-latn.json
│ ├── cs.json
│ ├── csb.json
│ ├── cu.json
│ ├── cv.json
│ ├── cy.json
│ ├── da.json
│ ├── dag.json
│ ├── de-formal.json
│ ├── de.json
│ ├── dga.json
│ ├── din.json
│ ├── diq.json
│ ├── dsb.json
│ ├── dty.json
│ ├── el.json
│ ├── eml.json
│ ├── en.json
│ ├── eo.json
│ ├── es.json
│ ├── et.json
│ ├── eu.json
│ ├── ext.json
│ ├── fa.json
│ ├── ff.json
│ ├── fi.json
│ ├── fit.json
│ ├── fo.json
│ ├── fon.json
│ ├── fr.json
│ ├── frp.json
│ ├── frr.json
│ ├── fur.json
│ ├── fy.json
│ ├── gcr.json
│ ├── gd.json
│ ├── gl.json
│ ├── gld.json
│ ├── glk.json
│ ├── gn.json
│ ├── gom-deva.json
│ ├── gom-latn.json
│ ├── gor.json
│ ├── grc.json
│ ├── gsw.json
│ ├── gu.json
│ ├── guc.json
│ ├── gur.json
│ ├── guw.json
│ ├── gv.json
│ ├── ha.json
│ ├── hak-latn.json
│ ├── he.json
│ ├── hi.json
│ ├── hr.json
│ ├── hrx.json
│ ├── hsb.json
│ ├── hsn.json
│ ├── ht.json
│ ├── hu-formal.json
│ ├── hu.json
│ ├── hy.json
│ ├── hyw.json
│ ├── ia.json
│ ├── id.json
│ ├── ie.json
│ ├── ig.json
│ ├── ilo.json
│ ├── inh.json
│ ├── io.json
│ ├── is.json
│ ├── it.json
│ ├── ja.json
│ ├── jam.json
│ ├── jje.json
│ ├── jut.json
│ ├── jv.json
│ ├── ka.json
│ ├── kaa.json
│ ├── kab.json
│ ├── kbp.json
│ ├── kcg.json
│ ├── khw.json
│ ├── kjp.json
│ ├── kk-cyrl.json
│ ├── km.json
│ ├── kn.json
│ ├── ko-kp.json
│ ├── ko.json
│ ├── koi.json
│ ├── krc.json
│ ├── krl.json
│ ├── ksh.json
│ ├── ku-latn.json
│ ├── kum.json
│ ├── kus.json
│ ├── kw.json
│ ├── ky.json
│ ├── la.json
│ ├── lad.json
│ ├── lb.json
│ ├── lbe.json
│ ├── lez.json
│ ├── lfn.json
│ ├── li.json
│ ├── lij.json
│ ├── lki.json
│ ├── lld.json
│ ├── lmo.json
│ ├── lo.json
│ ├── lrc.json
│ ├── lt.json
│ ├── luz.json
│ ├── lv.json
│ ├── lzh.json
│ ├── mad.json
│ ├── mag.json
│ ├── mai.json
│ ├── mg.json
│ ├── min.json
│ ├── mk.json
│ ├── ml.json
│ ├── mnc-mong.json
│ ├── mnc.json
│ ├── mni.json
│ ├── mnw.json
│ ├── mos.json
│ ├── mr.json
│ ├── mrh.json
│ ├── ms-arab.json
│ ├── ms.json
│ ├── mt.json
│ ├── mui.json
│ ├── mwl.json
│ ├── my.json
│ ├── mzn.json
│ ├── nan-latn-pehoeji.json
│ ├── nap.json
│ ├── nb.json
│ ├── nds-nl.json
│ ├── nds.json
│ ├── ne.json
│ ├── nia.json
│ ├── nl.json
│ ├── nn.json
│ ├── nqo.json
│ ├── nys.json
│ ├── oc.json
│ ├── ojb.json
│ ├── olo.json
│ ├── om.json
│ ├── or.json
│ ├── pa.json
│ ├── pap.json
│ ├── pcd.json
│ ├── pfl.json
│ ├── pl.json
│ ├── pms.json
│ ├── pnb.json
│ ├── prg.json
│ ├── ps.json
│ ├── pt-br.json
│ ├── pt.json
│ ├── pwn.json
│ ├── qqq.json
│ ├── qu.json
│ ├── rmc.json
│ ├── ro.json
│ ├── roa-tara.json
│ ├── rsk.json
│ ├── ru.json
│ ├── rue.json
│ ├── rw.json
│ ├── ryu.json
│ ├── sa.json
│ ├── sah.json
│ ├── sat.json
│ ├── sc.json
│ ├── scn.json
│ ├── sco.json
│ ├── sd.json
│ ├── sdc.json
│ ├── sdh.json
│ ├── se.json
│ ├── ses.json
│ ├── sgs.json
│ ├── sh-latn.json
│ ├── shi.json
│ ├── shn.json
│ ├── shy-latn.json
│ ├── si.json
│ ├── sjd.json
│ ├── sk.json
│ ├── skr-arab.json
│ ├── sl.json
│ ├── sli.json
│ ├── smn.json
│ ├── sms.json
│ ├── sn.json
│ ├── so.json
│ ├── sq.json
│ ├── sr-ec.json
│ ├── sr-el.json
│ ├── sty.json
│ ├── su.json
│ ├── sv.json
│ ├── sw.json
│ ├── syl.json
│ ├── szl.json
│ ├── szy.json
│ ├── tay.json
│ ├── tcy.json
│ ├── tdd.json
│ ├── te.json
│ ├── tg-cyrl.json
│ ├── th.json
│ ├── ti.json
│ ├── tig.json
│ ├── tk.json
│ ├── tl.json
│ ├── tly.json
│ ├── tr.json
│ ├── trv.json
│ ├── tsg.json
│ ├── tt-cyrl.json
│ ├── tt-latn.json
│ ├── tum.json
│ ├── tw.json
│ ├── udm.json
│ ├── uk.json
│ ├── ur.json
│ ├── uz.json
│ ├── vec.json
│ ├── vep.json
│ ├── vi.json
│ ├── vmw.json
│ ├── vo.json
│ ├── vro.json
│ ├── wa.json
│ ├── wal.json
│ ├── war.json
│ ├── wls.json
│ ├── wo.json
│ ├── wuu-hans.json
│ ├── xmf.json
│ ├── xsy.json
│ ├── yi.json
│ ├── yo.json
│ ├── yue-hant.json
│ ├── zgh.json
│ ├── zh-hans.json
│ └── zh-hant.json
├── images
├── betafeatures-icon-collab-ltr.svg
└── betafeatures-icon-collab-rtl.svg
├── includes
├── ApiParsoidTrait.php
├── ApiVisualEditor.php
├── ApiVisualEditorEdit.php
├── BetaPreferenceHooks.php
├── DirectParsoidClient.php
├── Hooks.php
├── ParsoidClient.php
├── ServiceWiring.php
├── SpecialCollabPad.php
├── VisualEditorApiVisualEditorEditPostSaveHook.php
├── VisualEditorApiVisualEditorEditPreSaveHook.php
├── VisualEditorBeforeEditorHook.php
├── VisualEditorDataModule.php
├── VisualEditorDesktopArticleTargetInitModule.php
├── VisualEditorHookRunner.php
└── VisualEditorParsoidClientFactory.php
├── jsdoc.json
├── lib
└── foreign-resources.yaml
├── modules
├── .eslintrc.json
├── eslint-shared.json
├── ve-mw-collab
│ ├── ve.init.mw.CollabTarget.css
│ ├── ve.init.mw.CollabTarget.init.js
│ ├── ve.init.mw.CollabTarget.js
│ ├── ve.init.mw.DesktopCollabTarget.js
│ ├── ve.init.mw.MobileCollabTarget.js
│ ├── ve.init.mw.collab.init.js
│ └── ve.ui.MWExportWikitextDialog.js
└── ve-mw
│ ├── ce
│ ├── annotations
│ │ ├── ve.ce.MWExternalLinkAnnotation.js
│ │ ├── ve.ce.MWInternalLinkAnnotation.js
│ │ └── ve.ce.MWNowikiAnnotation.js
│ ├── nodes
│ │ ├── ve.ce.MWAlienAnnotationNode.js
│ │ ├── ve.ce.MWAlienBlockExtensionNode.js
│ │ ├── ve.ce.MWAlienExtensionNode.js
│ │ ├── ve.ce.MWAlienInlineExtensionNode.js
│ │ ├── ve.ce.MWAnnotationNode.js
│ │ ├── ve.ce.MWBlockExtensionNode.js
│ │ ├── ve.ce.MWBlockImageNode.js
│ │ ├── ve.ce.MWEntityNode.js
│ │ ├── ve.ce.MWExtensionNode.js
│ │ ├── ve.ce.MWGalleryCaptionNode.js
│ │ ├── ve.ce.MWGalleryImageCaptionNode.js
│ │ ├── ve.ce.MWGalleryImageNode.js
│ │ ├── ve.ce.MWGalleryNode.js
│ │ ├── ve.ce.MWHeadingNode.js
│ │ ├── ve.ce.MWImageCaptionNode.js
│ │ ├── ve.ce.MWImageNode.js
│ │ ├── ve.ce.MWIncludesNode.js
│ │ ├── ve.ce.MWInlineExtensionNode.js
│ │ ├── ve.ce.MWInlineImageNode.js
│ │ ├── ve.ce.MWLanguageVariantBlockNode.js
│ │ ├── ve.ce.MWLanguageVariantHiddenNode.js
│ │ ├── ve.ce.MWLanguageVariantInlineNode.js
│ │ ├── ve.ce.MWLanguageVariantNode.js
│ │ ├── ve.ce.MWMagicLinkNode.js
│ │ ├── ve.ce.MWNumberedExternalLinkNode.js
│ │ ├── ve.ce.MWPreNode.js
│ │ ├── ve.ce.MWPreformattedNode.js
│ │ ├── ve.ce.MWSignatureNode.js
│ │ ├── ve.ce.MWTableNode.js
│ │ ├── ve.ce.MWTransclusionBlockNode.js
│ │ ├── ve.ce.MWTransclusionInlineNode.js
│ │ ├── ve.ce.MWTransclusionNode.js
│ │ └── ve.ce.MWTransclusionTableCellNode.js
│ ├── styles
│ │ ├── annotations
│ │ │ └── ve.ce.MWExternalLinkAnnotation.less
│ │ └── nodes
│ │ │ ├── images
│ │ │ └── audioPlayer.svg
│ │ │ ├── ve.ce.MWAnnotationNode.less
│ │ │ ├── ve.ce.MWBlockImageNode.less
│ │ │ ├── ve.ce.MWEntityNode.less
│ │ │ ├── ve.ce.MWImageNode.less
│ │ │ ├── ve.ce.MWIncludesNode.less
│ │ │ ├── ve.ce.MWInlineImageNode.less
│ │ │ ├── ve.ce.MWTableNode.less
│ │ │ └── ve.ce.MWTransclusionNode.less
│ ├── ve.ce.MWResizableNode.js
│ ├── ve.ce.MWWikitextClipboardHandler.js
│ └── ve.ce.MWWikitextSurface.js
│ ├── dm
│ ├── .eslintrc.json
│ ├── annotations
│ │ ├── ve.dm.MWExternalLinkAnnotation.js
│ │ ├── ve.dm.MWInternalLinkAnnotation.js
│ │ └── ve.dm.MWNowikiAnnotation.js
│ ├── metaitems
│ │ ├── ve.dm.MWAlienMetaItem.js
│ │ ├── ve.dm.MWCategoryMetaItem.js
│ │ ├── ve.dm.MWDefaultSortMetaItem.js
│ │ ├── ve.dm.MWDisplayTitleMetaItem.js
│ │ ├── ve.dm.MWFlaggedMetaItem.js
│ │ ├── ve.dm.MWHiddenCategoryMetaItem.js
│ │ ├── ve.dm.MWIndexMetaItem.js
│ │ ├── ve.dm.MWLanguageMetaItem.js
│ │ ├── ve.dm.MWNewSectionEditMetaItem.js
│ │ ├── ve.dm.MWNoContentConvertMetaItem.js
│ │ ├── ve.dm.MWNoEditSectionMetaItem.js
│ │ ├── ve.dm.MWNoGalleryMetaItem.js
│ │ ├── ve.dm.MWNoTitleConvertMetaItem.js
│ │ ├── ve.dm.MWRedirectMetaItem.js
│ │ ├── ve.dm.MWStaticRedirectMetaItem.js
│ │ └── ve.dm.MWTOCMetaItem.js
│ ├── models
│ │ ├── ve.dm.MWImageModel.js
│ │ ├── ve.dm.MWParameterModel.js
│ │ ├── ve.dm.MWTemplateModel.js
│ │ ├── ve.dm.MWTemplatePlaceholderModel.js
│ │ ├── ve.dm.MWTemplateSpecModel.js
│ │ ├── ve.dm.MWTransclusionContentModel.js
│ │ ├── ve.dm.MWTransclusionModel.js
│ │ └── ve.dm.MWTransclusionPartModel.js
│ ├── nodes
│ │ ├── ve.dm.MWAlienAnnotationNode.js
│ │ ├── ve.dm.MWAlienBlockExtensionNode.js
│ │ ├── ve.dm.MWAlienExtensionNode.js
│ │ ├── ve.dm.MWAlienInlineExtensionNode.js
│ │ ├── ve.dm.MWAnnotationNode.js
│ │ ├── ve.dm.MWBlockExtensionNode.js
│ │ ├── ve.dm.MWBlockImageNode.js
│ │ ├── ve.dm.MWEntityNode.js
│ │ ├── ve.dm.MWExtensionNode.js
│ │ ├── ve.dm.MWGalleryCaptionNode.js
│ │ ├── ve.dm.MWGalleryImageCaptionNode.js
│ │ ├── ve.dm.MWGalleryImageNode.js
│ │ ├── ve.dm.MWGalleryNode.js
│ │ ├── ve.dm.MWHeadingNode.js
│ │ ├── ve.dm.MWImageCaptionNode.js
│ │ ├── ve.dm.MWImageNode.js
│ │ ├── ve.dm.MWIncludesNode.js
│ │ ├── ve.dm.MWInlineExtensionNode.js
│ │ ├── ve.dm.MWInlineImageNode.js
│ │ ├── ve.dm.MWLanguageVariantBlockNode.js
│ │ ├── ve.dm.MWLanguageVariantHiddenNode.js
│ │ ├── ve.dm.MWLanguageVariantInlineNode.js
│ │ ├── ve.dm.MWLanguageVariantNode.js
│ │ ├── ve.dm.MWMagicLinkNode.js
│ │ ├── ve.dm.MWNumberedExternalLinkNode.js
│ │ ├── ve.dm.MWPreNode.js
│ │ ├── ve.dm.MWPreformattedNode.js
│ │ ├── ve.dm.MWSignatureNode.js
│ │ ├── ve.dm.MWTableNode.js
│ │ ├── ve.dm.MWTransclusionBlockNode.js
│ │ ├── ve.dm.MWTransclusionInlineNode.js
│ │ ├── ve.dm.MWTransclusionNode.js
│ │ └── ve.dm.MWTransclusionTableCellNode.js
│ ├── ve.dm.MWWikitextSurface.js
│ └── ve.dm.MWWikitextSurfaceFragment.js
│ ├── init
│ ├── apiresponsecache
│ │ ├── ve.init.mw.ApiResponseCache.js
│ │ ├── ve.init.mw.GalleryImageInfoCache.js
│ │ ├── ve.init.mw.ImageInfoCache.js
│ │ └── ve.init.mw.LinkCache.js
│ ├── styles
│ │ ├── ve.init.mw.DesktopArticleTarget-minerva.less
│ │ ├── ve.init.mw.DesktopArticleTarget-monobook.less
│ │ ├── ve.init.mw.DesktopArticleTarget-vector.less
│ │ ├── ve.init.mw.DesktopArticleTarget.less
│ │ ├── ve.init.mw.DesktopArticleTarget.noscript.less
│ │ ├── ve.init.mw.DesktopTarget-monobook.less
│ │ ├── ve.init.mw.DesktopTarget-vector.less
│ │ ├── ve.init.mw.MobileArticleTarget.less
│ │ └── ve.init.mw.Target.less
│ ├── targets
│ │ ├── ve.init.mw.ArticleTarget.js
│ │ ├── ve.init.mw.DesktopArticleTarget.js
│ │ ├── ve.init.mw.MobileArticleTarget.js
│ │ └── ve.init.mw.Target.js
│ ├── ve.init.mw.ArticleTargetEvents.js
│ ├── ve.init.mw.Platform.init.js
│ ├── ve.init.mw.Platform.js
│ ├── ve.init.mw.SaveErrorHandler.js
│ ├── ve.init.mw.TargetFactory.js
│ ├── ve.init.mw.ViewportZoomHandler.js
│ └── ve.init.mw.js
│ ├── preinit
│ ├── .eslintrc.json
│ ├── styles
│ │ ├── ve.init.MWVESwitchConfirmDialog-apex.less
│ │ ├── ve.init.MWVESwitchConfirmDialog-wikimedia.less
│ │ ├── ve.init.MWVESwitchConfirmDialog.css
│ │ ├── ve.init.MWVESwitchPopupWidget.less
│ │ ├── ve.init.mw.DesktopArticleTarget.init-apextheme.css
│ │ ├── ve.init.mw.DesktopArticleTarget.init-monobook.css
│ │ ├── ve.init.mw.DesktopArticleTarget.init-vector-2022.less
│ │ ├── ve.init.mw.DesktopArticleTarget.init-vector.less
│ │ ├── ve.init.mw.DesktopArticleTarget.init-wikimediatheme.css
│ │ ├── ve.init.mw.DesktopArticleTarget.init.less
│ │ ├── ve.init.mw.DiffPage.less
│ │ ├── ve.init.mw.ProgressBarWidget-apextheme.css
│ │ ├── ve.init.mw.ProgressBarWidget-wikimediatheme.css
│ │ ├── ve.init.mw.ProgressBarWidget.css
│ │ └── ve.init.mw.TempWikitextEditorWidget.less
│ ├── ve.init.MWEditModeTool.js
│ ├── ve.init.MWEditingTabDialog.js
│ ├── ve.init.MWVESwitchPopupWidget.js
│ ├── ve.init.MWWelcomeDialog.js
│ ├── ve.init.mw.ArticleTargetLoader.js
│ ├── ve.init.mw.ArticleTargetSaver.js
│ ├── ve.init.mw.DesktopArticleTarget.init.js
│ ├── ve.init.mw.DiffLoader.js
│ ├── ve.init.mw.DiffPage.init.js
│ ├── ve.init.mw.ProgressBarWidget.js
│ ├── ve.init.mw.TempWikitextEditorWidget.js
│ └── ve.utils.parsoid.js
│ ├── tests
│ ├── .eslintrc.json
│ ├── ce
│ │ ├── ve.ce.ClipboardHandler.test.js
│ │ ├── ve.ce.ContentBranchNode.test.js
│ │ └── ve.ce.Document.test.js
│ ├── dm
│ │ ├── annotations
│ │ │ └── ve.dm.MWInternalLinkAnnotation.test.js
│ │ ├── models
│ │ │ ├── ve.dm.MWImageModel.test.js
│ │ │ ├── ve.dm.MWTemplateModel.test.js
│ │ │ ├── ve.dm.MWTemplateSpecModel.test.js
│ │ │ ├── ve.dm.MWTransclusionContentModel.test.js
│ │ │ └── ve.dm.MWTransclusionModel.test.js
│ │ ├── nodes
│ │ │ └── ve.dm.MWTransclusionNode.test.js
│ │ ├── ve.dm.Converter.test.js
│ │ ├── ve.dm.Document.test.js
│ │ ├── ve.dm.SurfaceFragment.test.js
│ │ └── ve.dm.mwExample.js
│ ├── init
│ │ └── targets
│ │ │ └── ve.init.mw.DesktopArticleTarget.test.js
│ ├── preinit
│ │ └── ve.utils.parsoid.test.js
│ ├── ui
│ │ ├── actions
│ │ │ ├── ve.ui.FormatAction.test.js
│ │ │ └── ve.ui.MWLinkAction.test.js
│ │ ├── datatransferhandlers
│ │ │ ├── ve.ui.MWWikitextStringTransferHandler.test.js
│ │ │ └── ve.ui.UrlStringTransferHandler.test.js
│ │ ├── dialogs
│ │ │ └── ve.ui.MWTransclusionDialog.test.js
│ │ ├── inspectors
│ │ │ └── ve.ui.FragmentInspector.test.js
│ │ ├── layouts
│ │ │ └── ve.ui.MWTwoPaneTransclusionDialogLayout.test.js
│ │ ├── pages
│ │ │ ├── ve.ui.MWAddParameterPage.test.js
│ │ │ └── ve.ui.MWParameterPage.test.js
│ │ ├── ve.ui.DiffElement.test.js
│ │ └── widgets
│ │ │ ├── ve.ui.MWParameterCheckboxInputWidget.test.js
│ │ │ ├── ve.ui.MWTemplateTitleInputWidget.test.js
│ │ │ ├── ve.ui.MWTransclusionOutlineButtonWidget.test.js
│ │ │ ├── ve.ui.MWTransclusionOutlineParameterSelectWidget.test.js
│ │ │ ├── ve.ui.MWTransclusionOutlineParameterWidget.test.js
│ │ │ ├── ve.ui.MWTransclusionOutlinePartWidget.test.js
│ │ │ ├── ve.ui.MWTransclusionOutlinePlaceholderWidget.test.js
│ │ │ ├── ve.ui.MWTransclusionOutlineTemplateWidget.test.js
│ │ │ └── ve.ui.MWTransclusionOutlineWidget.test.js
│ └── ve.test.utils.js
│ ├── themes
│ ├── apex.css
│ └── wikimediaui.css
│ ├── treeDiffer-global.js
│ ├── ui
│ ├── actions
│ │ ├── ve.ui.MWLinkAction.js
│ │ ├── ve.ui.MWSaveDialogAction.js
│ │ └── ve.ui.MWWikitextAction.js
│ ├── commands
│ │ ├── ve.ui.MWLinkCommand.js
│ │ └── ve.ui.MWWikitextWarningCommand.js
│ ├── contextitems
│ │ ├── ve.ui.MWAlienAnnotationContextItem.js
│ │ ├── ve.ui.MWAlienExtensionContextItem.js
│ │ ├── ve.ui.MWAnnotationContextItem.js
│ │ ├── ve.ui.MWDefinedTransclusionContextItem.js
│ │ ├── ve.ui.MWGalleryContextItem.js
│ │ ├── ve.ui.MWIncludesContextItem.js
│ │ ├── ve.ui.MWInternalLinkContextItem.js
│ │ ├── ve.ui.MWLanguageVariantNodeContextItem.js
│ │ ├── ve.ui.MWMagicLinkNodeContextItem.js
│ │ ├── ve.ui.MWMediaContextItem.js
│ │ ├── ve.ui.MWNumberedExternalLinkNodeContextItem.js
│ │ ├── ve.ui.MWPreContextItem.js
│ │ ├── ve.ui.MWSignatureContextItem.js
│ │ ├── ve.ui.MWTransclusionContextItem.js
│ │ └── ve.ui.MWWikitextPasteContextItem.js
│ ├── datatransferhandlers
│ │ ├── ve.ui.MWMediaTransferHandler.js
│ │ ├── ve.ui.MWWikitextPlainTextStringTransferHandler.js
│ │ └── ve.ui.MWWikitextStringTransferHandler.js
│ ├── dialogs
│ │ ├── ve.ui.MWCommandHelpDialog.js
│ │ ├── ve.ui.MWExtensionDialog.js
│ │ ├── ve.ui.MWExtensionPreviewDialog.js
│ │ ├── ve.ui.MWFloatingHelpDialog.js
│ │ ├── ve.ui.MWGalleryDialog.js
│ │ ├── ve.ui.MWMediaDialog.js
│ │ ├── ve.ui.MWMetaDialog.js
│ │ ├── ve.ui.MWMobileSaveDialog.js
│ │ ├── ve.ui.MWPreDialog.js
│ │ ├── ve.ui.MWRequiredParamBlankConfirmDialog.js
│ │ ├── ve.ui.MWSaveDialog.js
│ │ ├── ve.ui.MWTableDialog.js
│ │ ├── ve.ui.MWTemplateDialog.js
│ │ └── ve.ui.MWTransclusionDialog.js
│ ├── elements
│ │ ├── ve.ui.MWExpandableContentElement.js
│ │ ├── ve.ui.MWExpandableErrorElement.js
│ │ ├── ve.ui.MWFloatingHelpElement.js
│ │ └── ve.ui.MWPreviewElement.js
│ ├── inspectors
│ │ ├── ve.ui.MWAlienExtensionInspector.js
│ │ ├── ve.ui.MWCommentInspector.js
│ │ ├── ve.ui.MWExtensionInspector.js
│ │ ├── ve.ui.MWLanguageVariantInspector.js
│ │ ├── ve.ui.MWLinkAnnotationInspector.js
│ │ ├── ve.ui.MWLinkNodeInspector.js
│ │ ├── ve.ui.MWLiveExtensionInspector.js
│ │ ├── ve.ui.MWMagicLinkNodeInspector.js
│ │ └── ve.ui.MWWikitextLinkAnnotationInspector.js
│ ├── layouts
│ │ ├── ve.ui.MWTwoPaneTransclusionDialogLayout.js
│ │ └── ve.ui.MWVerticalLayout.js
│ ├── pages
│ │ ├── ve.ui.MWAddParameterPage.js
│ │ ├── ve.ui.MWAdvancedSettingsPage.js
│ │ ├── ve.ui.MWCategoriesPage.js
│ │ ├── ve.ui.MWLanguagesPage.js
│ │ ├── ve.ui.MWParameterPage.js
│ │ ├── ve.ui.MWSettingsPage.js
│ │ ├── ve.ui.MWTemplatePage.js
│ │ ├── ve.ui.MWTemplatePlaceholderPage.js
│ │ ├── ve.ui.MWTemplatesUsedPage.js
│ │ └── ve.ui.MWTransclusionContentPage.js
│ ├── styles
│ │ ├── apex
│ │ │ ├── ve.ui.Icons.json
│ │ │ └── ve.ui.Indicators.json
│ │ ├── contextitems
│ │ │ ├── ve.ui.MWInternalLinkContextItem.less
│ │ │ └── ve.ui.MWLanguageVariantNodeContextItem.less
│ │ ├── dialogs
│ │ │ ├── images
│ │ │ │ ├── welcomeSplash-ltr.png
│ │ │ │ └── welcomeSplash-rtl.png
│ │ │ ├── ve.ui.MWGalleryDialog.less
│ │ │ ├── ve.ui.MWMediaDialog.less
│ │ │ ├── ve.ui.MWMetaDialog.less
│ │ │ ├── ve.ui.MWMobileSaveDialog.less
│ │ │ ├── ve.ui.MWPreDialog.less
│ │ │ ├── ve.ui.MWSaveDialog.less
│ │ │ ├── ve.ui.MWTransclusionDialog.less
│ │ │ └── ve.ui.MWWelcomeDialog.less
│ │ ├── elements
│ │ │ ├── images
│ │ │ │ └── vector-bullet-icon-disabled.svg
│ │ │ ├── ve.ui.DiffElement-minerva.less
│ │ │ ├── ve.ui.DiffElement-vector.less
│ │ │ ├── ve.ui.MWExpandableContentElement.less
│ │ │ ├── ve.ui.MWExpandableErrorElement.less
│ │ │ ├── ve.ui.MWFloatingHelpElement.less
│ │ │ └── ve.ui.MWPreviewElement.less
│ │ ├── images
│ │ │ ├── icons
│ │ │ │ ├── parameter-ltr.svg
│ │ │ │ ├── parameter-rtl.svg
│ │ │ │ └── public-domain.svg
│ │ │ └── indicators
│ │ │ │ └── alert.svg
│ │ ├── inspectors
│ │ │ ├── ve.ui.MWAlienExtensionInspector.less
│ │ │ ├── ve.ui.MWExtensionInspector.less
│ │ │ └── ve.ui.MWLinkAnnotationInspector.less
│ │ ├── layouts
│ │ │ ├── ve.ui.MWTwoPaneTransclusionDialogLayout-minerva.less
│ │ │ └── ve.ui.MWTwoPaneTransclusionDialogLayout.less
│ │ ├── pages
│ │ │ ├── ve.ui.MWAddParameterPage.less
│ │ │ ├── ve.ui.MWParameterPage-default.less
│ │ │ ├── ve.ui.MWParameterPage-minerva.less
│ │ │ ├── ve.ui.MWParameterPage.less
│ │ │ ├── ve.ui.MWTemplatePage-default.less
│ │ │ ├── ve.ui.MWTemplatePage-minerva.less
│ │ │ ├── ve.ui.MWTemplatePage.less
│ │ │ ├── ve.ui.MWTemplatePlaceholderPage.less
│ │ │ └── ve.ui.MWTransclusionContentPage.less
│ │ ├── toolgroups
│ │ │ └── ve.ui.MWHelpListToolGroup.less
│ │ ├── tools
│ │ │ ├── images
│ │ │ │ ├── link-ltr.png
│ │ │ │ └── link-rtl.png
│ │ │ ├── ve.ui.MWFormatTool-minerva.css
│ │ │ ├── ve.ui.MWFormatTool-monobook.css
│ │ │ ├── ve.ui.MWFormatTool-vector.css
│ │ │ ├── ve.ui.MWLinkInspectorTool.css
│ │ │ └── ve.ui.MWPopupTool.css
│ │ ├── ve.ui.MWWikitextSurface.css
│ │ ├── widgets
│ │ │ ├── images
│ │ │ │ └── broken-image.png
│ │ │ ├── ve.ui.MWAceEditorWidget.less
│ │ │ ├── ve.ui.MWCategoryInputWidget.less
│ │ │ ├── ve.ui.MWCategoryItemWidget.less
│ │ │ ├── ve.ui.MWCategoryPopupWidget.less
│ │ │ ├── ve.ui.MWCategoryWidget.less
│ │ │ ├── ve.ui.MWEducationPopupWidget.less
│ │ │ ├── ve.ui.MWMediaInfoFieldWidget.less
│ │ │ ├── ve.ui.MWTocWidget.css
│ │ │ ├── ve.ui.MWTransclusionOutlineControlsWidget.less
│ │ │ └── ve.ui.MWTransclusionOutlineWidget.less
│ │ └── wikimediaui
│ │ │ ├── ve.ui.Icons.json
│ │ │ └── ve.ui.Indicators.json
│ ├── toolgroups
│ │ └── ve.ui.MWHelpListToolGroup.js
│ ├── tools
│ │ ├── ve.ui.MWBackTool.js
│ │ ├── ve.ui.MWEditModeTool.js
│ │ ├── ve.ui.MWFormatTool.js
│ │ ├── ve.ui.MWGalleryDialogTool.js
│ │ ├── ve.ui.MWLinkInspectorTool.js
│ │ ├── ve.ui.MWMediaDialogTool.js
│ │ ├── ve.ui.MWMetaDialogTool.js
│ │ ├── ve.ui.MWMobileLinkInspectorTool.js
│ │ ├── ve.ui.MWPopupTool.js
│ │ ├── ve.ui.MWSaveTool.js
│ │ ├── ve.ui.MWSignatureTool.js
│ │ └── ve.ui.MWTransclusionDialogTool.js
│ ├── ve.ui.MWAriaDescribe.js
│ ├── ve.ui.MWCommandRegistry.js
│ ├── ve.ui.MWExtensionWindow.js
│ ├── ve.ui.MWSequenceRegistry.js
│ ├── ve.ui.MWSurface.js
│ ├── ve.ui.MWWikitextCommandRegistry.js
│ ├── ve.ui.MWWikitextDataTransferHandlerFactory.js
│ ├── ve.ui.MWWikitextSequenceRegistry.js
│ ├── ve.ui.MWWikitextSurface.js
│ ├── ve.ui.MWWikitextTransferRegistry.js
│ └── widgets
│ │ ├── ve.ui.MWAceEditorWidget.js
│ │ ├── ve.ui.MWCategoryInputWidget.js
│ │ ├── ve.ui.MWCategoryItemWidget.js
│ │ ├── ve.ui.MWCategoryPopupWidget.js
│ │ ├── ve.ui.MWCategoryWidget.js
│ │ ├── ve.ui.MWEditSummaryWidget.js
│ │ ├── ve.ui.MWEducationPopupWidget.js
│ │ ├── ve.ui.MWExternalLinkAnnotationWidget.js
│ │ ├── ve.ui.MWGalleryGroupWidget.js
│ │ ├── ve.ui.MWGalleryItemWidget.js
│ │ ├── ve.ui.MWInternalLinkAnnotationWidget.js
│ │ ├── ve.ui.MWLazyMultilineTextInputWidget.js
│ │ ├── ve.ui.MWMediaInfoFieldWidget.js
│ │ ├── ve.ui.MWParameterCheckboxInputWidget.js
│ │ ├── ve.ui.MWPreTextInputWidget.js
│ │ ├── ve.ui.MWTargetWidget.js
│ │ ├── ve.ui.MWTemplateTitleInputWidget.js
│ │ ├── ve.ui.MWTocWidget.js
│ │ ├── ve.ui.MWTransclusionOutlineButtonWidget.js
│ │ ├── ve.ui.MWTransclusionOutlineControlsWidget.js
│ │ ├── ve.ui.MWTransclusionOutlineParameterSelectWidget.js
│ │ ├── ve.ui.MWTransclusionOutlineParameterWidget.js
│ │ ├── ve.ui.MWTransclusionOutlinePartWidget.js
│ │ ├── ve.ui.MWTransclusionOutlinePlaceholderWidget.js
│ │ ├── ve.ui.MWTransclusionOutlineTemplateWidget.js
│ │ ├── ve.ui.MWTransclusionOutlineToggleUnusedWidget.js
│ │ ├── ve.ui.MWTransclusionOutlineWidget.js
│ │ └── ve.ui.MWTransclusionOutlineWikitextWidget.js
│ └── ve.track.js
├── package-lock.json
├── package.json
├── screenshots
└── README.md
└── tests
├── api-testing
└── edit.js
├── phpunit
├── ApiVisualEditorTest.php
├── integration
│ ├── DirectParsoidClientTest.php
│ ├── HooksTest.php
│ └── VisualEditorParsoidClientFactoryTest.php
└── unit
│ └── VisualEditorHookRunnerTest.php
└── selenium
├── .eslintrc.json
├── README.md
├── pageobjects
└── edit.page.js
├── specs
├── content_editable.js
└── toolbar.js
└── wdio.conf.js
/.eslintignore:
--------------------------------------------------------------------------------
1 | # Upstream code
2 | /lib/
3 |
4 | # Build
5 | /vendor/
6 | /docs/
7 |
8 | # Language files written automatically by TranslateWiki
9 | **/i18n/**/*.json
10 | !**/i18n/**/en.json
11 | !**/i18n/**/qqq.json
12 |
--------------------------------------------------------------------------------
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "root": true,
3 | "extends": [
4 | "wikimedia/server"
5 | ],
6 | "env": {
7 | "commonjs": true,
8 | "node": true,
9 | "mocha": true
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Editors
2 | *~
3 | *.kate-swp
4 | .*.swp
5 | sublime-*
6 | .project
7 | .settings
8 | \#*#
9 | .#*
10 | /.idea
11 | .vscode
12 |
13 | # Install and build artifacts
14 | /docs
15 | node_modules
16 | composer.lock
17 | vendor
18 | screenshots/*.png
19 | .eslintcache
20 | tests/selenium/log
21 | .api-testing.config.json
22 |
23 | # OS
24 | .DS_Store
25 | /.stylelintcache
26 |
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "lib/ve"]
2 | path = lib/ve
3 | url = https://gerrit.wikimedia.org/r/VisualEditor/VisualEditor.git
4 |
--------------------------------------------------------------------------------
/.gitreview:
--------------------------------------------------------------------------------
1 | [gerrit]
2 | host=gerrit.wikimedia.org
3 | port=29418
4 | project=mediawiki/extensions/VisualEditor.git
5 | track=1
6 | defaultrebase=0
7 |
--------------------------------------------------------------------------------
/.phan/config.php:
--------------------------------------------------------------------------------
1 | {
2 | ve.collab.join();
3 | } );
4 |
--------------------------------------------------------------------------------
/modules/ve-mw/ce/styles/nodes/ve.ce.MWAnnotationNode.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * VisualEditor ContentEditable MediaWiki MWAnnotationNode styles.
3 | *
4 | * @copyright See AUTHORS.txt
5 | * @license The MIT License (MIT); see LICENSE.txt
6 | */
7 |
8 | .ve-ce-mwAnnotationNode {
9 | display: inline-block;
10 | opacity: 0.5;
11 | /* Support: Blink, Gecko, Webkit */
12 | /* Specify a valid second value to fix size, see T176636 */
13 | font-family: monospace, monospace;
14 | }
15 |
--------------------------------------------------------------------------------
/modules/ve-mw/ce/styles/nodes/ve.ce.MWBlockImageNode.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * VisualEditor ContentEditable MediaWiki MWBlockImageNode styles.
3 | *
4 | * @copyright See AUTHORS.txt
5 | * @license The MIT License (MIT); see LICENSE.txt
6 | */
7 |
8 | .ve-ce-mwBlockImageNode {
9 | /* Override paragraph margins inside of captions */
10 | > figcaption p {
11 | margin: 0 !important; /* stylelint-disable-line declaration-no-important */
12 | }
13 |
14 | /* Disable zoom link */
15 | > a::after {
16 | pointer-events: none;
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/modules/ve-mw/ce/styles/nodes/ve.ce.MWEntityNode.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * VisualEditor ContentEditable MediaWiki MWEntityNode styles.
3 | *
4 | * @copyright See AUTHORS.txt
5 | * @license The MIT License (MIT); see LICENSE.txt
6 | */
7 |
8 | .ve-ce-mwEntityNode-nbsp {
9 | background-color: #ccc;
10 | cursor: help;
11 | }
12 |
--------------------------------------------------------------------------------
/modules/ve-mw/ce/styles/nodes/ve.ce.MWIncludesNode.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * VisualEditor ContentEditable MediaWiki MWIncludesNode styles.
3 | *
4 | * @copyright See AUTHORS.txt
5 | * @license The MIT License (MIT); see LICENSE.txt
6 | */
7 |
8 | .ve-ce-mwIncludesNode {
9 | display: inline-block;
10 | opacity: 0.5;
11 | /* Support: Blink, Gecko, Webkit */
12 | /* Specify a valid second value to fix size, see T176636 */
13 | font-family: monospace, monospace;
14 | }
15 |
--------------------------------------------------------------------------------
/modules/ve-mw/ce/styles/nodes/ve.ce.MWInlineImageNode.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * VisualEditor ContentEditable MediaWiki MWInlineImageNode styles.
3 | *
4 | * @copyright See AUTHORS.txt
5 | * @license The MIT License (MIT); see LICENSE.txt
6 | */
7 |
8 | .ve-ce-mwInlineImageNode {
9 | display: inline-block;
10 | }
11 |
--------------------------------------------------------------------------------
/modules/ve-mw/ce/styles/nodes/ve.ce.MWTransclusionNode.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * VisualEditor ContentEditable MediaWiki MWTransclusionNode styles.
3 | *
4 | * @copyright See AUTHORS.txt
5 | * @license The MIT License (MIT); see LICENSE.txt
6 | */
7 |
8 | .ve-ce-mwTransclusionNode {
9 | > .ve-ce-focusableNode-invisibleIcon.oo-ui-iconElement {
10 | font-size: 1em;
11 | width: auto;
12 | }
13 |
14 | &.ve-ce-focusableNode-invisible {
15 | width: auto;
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/modules/ve-mw/dm/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": false,
4 | "shared-node-browser": true
5 | },
6 | "globals": {
7 | "HTMLElement": "readonly",
8 | "Node": "readonly",
9 | "document": "readonly",
10 | "$": "off"
11 | },
12 | "rules": {
13 | "no-jquery/no-append-html": "warn",
14 | "no-jquery/no-done-fail": "warn"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/modules/ve-mw/init/styles/ve.init.mw.DesktopArticleTarget-minerva.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * VisualEditor MediaWiki Initialization DesktopArticleTarget Minerva skin styles.
3 | *
4 | * @copyright See AUTHORS.txt
5 | * @license The MIT License (MIT); see LICENSE.txt
6 | */
7 |
8 | .ve-init-mw-desktopArticleTarget .ve-init-mw-target-surface {
9 | > .ve-ce-attachedRootNode,
10 | > .ve-ce-surface .ve-ui-surface-placeholder {
11 | padding: 0;
12 | /* Provide clickable gutter */
13 | padding-left: 1000px;
14 | margin-left: -1000px;
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/modules/ve-mw/init/ve.init.mw.Platform.init.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * VisualEditor MediaWiki Platform init.
3 | *
4 | * @copyright See AUTHORS.txt
5 | * @license The MIT License (MIT); see LICENSE.txt
6 | */
7 |
8 | // eslint-disable-next-line no-new
9 | new ve.init.mw.Platform();
10 |
--------------------------------------------------------------------------------
/modules/ve-mw/preinit/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "globals": {
3 | "ve": "off"
4 | },
5 | "rules": {
6 | "no-jquery/no-extend": "off",
7 | "no-jquery/no-deferred": "off",
8 | "no-jquery/no-when": "off",
9 | "no-jquery/no-done-fail": "warn"
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/modules/ve-mw/preinit/styles/ve.init.MWVESwitchConfirmDialog-wikimedia.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * VisualEditor MediaWiki Initialization edit switching styles.
3 | *
4 | * @copyright See AUTHORS.txt
5 | * @license The MIT License (MIT); see LICENSE.txt
6 | */
7 |
8 | .ve-init-mw-editSwitch .oo-ui-popupToolGroup {
9 | height: 32px;
10 | border: 0;
11 | margin: 0;
12 | border-radius: 0;
13 |
14 | &.oo-ui-iconElement .oo-ui-popupToolGroup-handle {
15 | padding-top: 32px;
16 | height: 0;
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/modules/ve-mw/preinit/styles/ve.init.MWVESwitchConfirmDialog.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * VisualEditor MediaWiki Initialization edit switching styles.
3 | *
4 | * @copyright See AUTHORS.txt
5 | * @license The MIT License (MIT); see LICENSE.txt
6 | */
7 |
8 | .ve-init-mw-editSwitch .oo-ui-toolbar-bar {
9 | background: transparent;
10 | box-shadow: none;
11 | border: 0;
12 | }
13 |
--------------------------------------------------------------------------------
/modules/ve-mw/preinit/styles/ve.init.MWVESwitchPopupWidget.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * VisualEditor MediaWiki Initialization edit switching styles.
3 | *
4 | * @copyright See AUTHORS.txt
5 | * @license The MIT License (MIT); see LICENSE.txt
6 | */
7 |
8 | .ve-init-mw-switchPopupWidget {
9 | white-space: normal;
10 | z-index: 4;
11 |
12 | .oo-ui-popupWidget-anchor {
13 | margin-left: 1.25em;
14 | }
15 |
16 | .oo-ui-popupWidget-head {
17 | font-weight: bold;
18 | }
19 |
20 | .oo-ui-fieldLayout:last-child {
21 | margin-bottom: 12px;
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/modules/ve-mw/preinit/styles/ve.init.mw.ProgressBarWidget-wikimediatheme.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * VisualEditor progress bar widget WikimediaUI theme styles.
3 | *
4 | * @copyright See AUTHORS.txt
5 | * @license The MIT License (MIT); see LICENSE.txt
6 | */
7 |
8 | .ve-init-mw-progressBarWidget {
9 | background-color: #fff;
10 | box-sizing: border-box;
11 | height: 0.875em;
12 | border: 1px solid #36c;
13 | border-radius: 0.875em;
14 | box-shadow: 0 1px 1px rgba( 0, 0, 0, 0.15 );
15 | }
16 |
17 | .ve-init-mw-progressBarWidget-bar {
18 | background-color: #36c;
19 | height: 0.875em;
20 | }
21 |
--------------------------------------------------------------------------------
/modules/ve-mw/preinit/styles/ve.init.mw.ProgressBarWidget.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * VisualEditor progress bar widget styles.
3 | *
4 | * @copyright See AUTHORS.txt
5 | * @license The MIT License (MIT); see LICENSE.txt
6 | */
7 |
8 | .ve-init-mw-progressBarWidget {
9 | height: 1em;
10 | overflow: hidden;
11 | margin: 0 25%;
12 | }
13 |
14 | .ve-init-mw-progressBarWidget-bar {
15 | height: 1em;
16 | width: 0;
17 | }
18 |
--------------------------------------------------------------------------------
/modules/ve-mw/preinit/styles/ve.init.mw.TempWikitextEditorWidget.less:
--------------------------------------------------------------------------------
1 | .ve-init-mw-tempWikitextEditorWidget {
2 | border: 0;
3 | padding: 0;
4 | color: inherit;
5 | line-height: 1.5em;
6 | width: 100%;
7 | -moz-tab-size: 4;
8 | tab-size: 4;
9 |
10 | &:focus {
11 | outline: 0;
12 | padding: 0;
13 | }
14 |
15 | /* Mimics ve-ce-attachedRootNode */
16 | /* stylelint-disable-next-line plugin/no-unsupported-browser-features */
17 | &::selection {
18 | background: rgba( 109, 169, 247, 0.5 ); /* #6da9f7 */
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/modules/ve-mw/treeDiffer-global.js:
--------------------------------------------------------------------------------
1 | // Back-compat: Export module as global
2 | window.treeDiffer = module.exports;
3 |
--------------------------------------------------------------------------------
/modules/ve-mw/ui/styles/apex/ve.ui.Icons.json:
--------------------------------------------------------------------------------
1 | {
2 | "images": {
3 | "parameter": {
4 | "file": "../images/icons/parameter-ltr.svg"
5 | },
6 | "public-domain": {
7 | "file": "../images/icons/public-domain.svg"
8 | }
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/modules/ve-mw/ui/styles/apex/ve.ui.Indicators.json:
--------------------------------------------------------------------------------
1 | {
2 | "images": {
3 | "alert": {
4 | "file": "../images/indicators/alert.svg"
5 | }
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/modules/ve-mw/ui/styles/dialogs/images/welcomeSplash-ltr.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wikimedia/mediawiki-extensions-VisualEditor/58d76f0225dfe7abe67fb7e3ef0be7073e12d757/modules/ve-mw/ui/styles/dialogs/images/welcomeSplash-ltr.png
--------------------------------------------------------------------------------
/modules/ve-mw/ui/styles/dialogs/images/welcomeSplash-rtl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wikimedia/mediawiki-extensions-VisualEditor/58d76f0225dfe7abe67fb7e3ef0be7073e12d757/modules/ve-mw/ui/styles/dialogs/images/welcomeSplash-rtl.png
--------------------------------------------------------------------------------
/modules/ve-mw/ui/styles/dialogs/ve.ui.MWMobileSaveDialog.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * VisualEditor MediaWiki UserInterface MWMobileSaveDialog styles.
3 | *
4 | * @copyright See AUTHORS.txt
5 | * @license The MIT License (MIT); see LICENSE.txt
6 | */
7 |
8 | /* stylelint-disable-next-line selector-class-pattern */
9 | .ve-ui-mwMobileSaveDialog .content {
10 | margin: 0;
11 | }
12 |
--------------------------------------------------------------------------------
/modules/ve-mw/ui/styles/dialogs/ve.ui.MWWelcomeDialog.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * VisualEditor MediaWiki UserInterface beta welcome dialog styles.
3 | *
4 | * @copyright See AUTHORS.txt
5 | * @license The MIT License (MIT); see LICENSE.txt
6 | */
7 |
8 | .ve-init-mw-welcomeDialog-content {
9 | display: block;
10 | text-align: center;
11 |
12 | &::before {
13 | content: '';
14 | background: url( images/welcomeSplash-ltr.png ) center no-repeat;
15 | background-size: contain;
16 | display: block;
17 | height: 8em;
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/modules/ve-mw/ui/styles/elements/images/vector-bullet-icon-disabled.svg:
--------------------------------------------------------------------------------
1 |
2 |
5 |
--------------------------------------------------------------------------------
/modules/ve-mw/ui/styles/elements/ve.ui.DiffElement-vector.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * VisualEditor Vector-specific UserInterface DiffElement styles.
3 | *
4 | * @copyright See AUTHORS.txt
5 | * @license The MIT License (MIT); see LICENSE.txt
6 | */
7 |
8 | ul > li[ data-diff-list-none ] {
9 | list-style-image: url( images/vector-bullet-icon-disabled.svg );
10 | }
11 |
--------------------------------------------------------------------------------
/modules/ve-mw/ui/styles/elements/ve.ui.MWPreviewElement.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * VisualEditor MediaWiki UserInterface preview element styles.
3 | *
4 | * @copyright See AUTHORS.txt
5 | * @license The MIT License (MIT); see LICENSE.txt
6 | */
7 |
8 | .mw-body-content .ve-ui-mwPreviewElement {
9 | /* Don't apply font adjustment twice if already inside a content area */
10 | font-size: inherit;
11 | }
12 |
--------------------------------------------------------------------------------
/modules/ve-mw/ui/styles/images/icons/parameter-ltr.svg:
--------------------------------------------------------------------------------
1 |
2 |
5 |
--------------------------------------------------------------------------------
/modules/ve-mw/ui/styles/images/icons/parameter-rtl.svg:
--------------------------------------------------------------------------------
1 |
2 |
5 |
--------------------------------------------------------------------------------
/modules/ve-mw/ui/styles/images/indicators/alert.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/modules/ve-mw/ui/styles/inspectors/ve.ui.MWAlienExtensionInspector.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * VisualEditor MediaWiki UserInterface alien extension inspector styles.
3 | *
4 | * @copyright See AUTHORS.txt
5 | * @license The MIT License (MIT); see LICENSE.txt
6 | */
7 |
8 | .ve-ui-mwAlienExtensionInspector-attributes {
9 | margin-top: 1em;
10 |
11 | .oo-ui-textInputWidget {
12 | width: 100%;
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/modules/ve-mw/ui/styles/inspectors/ve.ui.MWExtensionInspector.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * VisualEditor MediaWiki UserInterface Inspector styles.
3 | *
4 | * @copyright See AUTHORS.txt
5 | * @license The MIT License (MIT); see LICENSE.txt
6 | */
7 | .ve-ui-mwExtensionInspector .ve-ui-mwExtensionWindow-input {
8 | width: 100%;
9 |
10 | textarea {
11 | height: 8em;
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/modules/ve-mw/ui/styles/layouts/ve.ui.MWTwoPaneTransclusionDialogLayout-minerva.less:
--------------------------------------------------------------------------------
1 | .ve-ui-mwTwoPaneTransclusionDialogLayout {
2 | &-stackLayout {
3 | /* We don't want anything to collapse left/right, so shouldn't use margin */
4 | padding: 0 20px;
5 |
6 | /* Allow inputs to use the full width */
7 | .oo-ui-textInputWidget,
8 | .ve-ui-mwParameterPage-inlineDescription,
9 | .oo-ui-actionFieldLayout.oo-ui-fieldLayout-align-top {
10 | max-width: none;
11 | }
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/modules/ve-mw/ui/styles/pages/ve.ui.MWTemplatePage-default.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * VisualEditor MediaWiki UserInterface TemplatePage styles.
3 | *
4 | * @copyright See AUTHORS.txt
5 | * @license The MIT License (MIT); see LICENSE.txt
6 | */
7 | @import 'mediawiki.skin.variables.less';
8 |
9 | .ve-ui-mwTemplatePage-description {
10 | color: @color-subtle;
11 | overflow-wrap: break-word;
12 |
13 | &-extra,
14 | &-missing {
15 | font-style: italic;
16 | }
17 | }
18 |
19 | .ve-ui-mwTemplatePage-favorite {
20 | text-align: end;
21 | }
22 |
--------------------------------------------------------------------------------
/modules/ve-mw/ui/styles/pages/ve.ui.MWTemplatePage-minerva.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * VisualEditor MediaWiki UserInterface TemplatePage styles.
3 | *
4 | * @copyright See AUTHORS.txt
5 | * @license The MIT License (MIT); see LICENSE.txt
6 | */
7 |
8 | .ve-ui-mwTransclusionDialog-multipart-message {
9 | &,
10 | + .oo-ui-panelLayout {
11 | margin-top: 20px;
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/modules/ve-mw/ui/styles/pages/ve.ui.MWTemplatePlaceholderPage.less:
--------------------------------------------------------------------------------
1 | .ve-ui-mwTemplatePlaceholderPage {
2 | .ve-ui-mwTransclusionDialog-addButton {
3 | white-space: nowrap;
4 | }
5 |
6 | .ve-ui-mwTransclusionDialog-addTemplateFieldset {
7 | .mw-widget-titleInputWidget {
8 | min-width: 10em;
9 | }
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/modules/ve-mw/ui/styles/pages/ve.ui.MWTransclusionContentPage.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * VisualEditor MediaWiki UserInterface MWTransclusionContentPage styles.
3 | *
4 | * @copyright See AUTHORS.txt
5 | * @license The MIT License (MIT); see LICENSE.txt
6 | */
7 |
8 | .ve-ui-mwTransclusionContentPage .oo-ui-textInputWidget {
9 | display: block;
10 | width: 100%;
11 |
12 | textarea {
13 | height: 2.5em;
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/modules/ve-mw/ui/styles/tools/images/link-ltr.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wikimedia/mediawiki-extensions-VisualEditor/58d76f0225dfe7abe67fb7e3ef0be7073e12d757/modules/ve-mw/ui/styles/tools/images/link-ltr.png
--------------------------------------------------------------------------------
/modules/ve-mw/ui/styles/tools/images/link-rtl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wikimedia/mediawiki-extensions-VisualEditor/58d76f0225dfe7abe67fb7e3ef0be7073e12d757/modules/ve-mw/ui/styles/tools/images/link-rtl.png
--------------------------------------------------------------------------------
/modules/ve-mw/ui/styles/tools/ve.ui.MWFormatTool-minerva.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * VisualEditor MediaWiki Minerva-specific FormatTool styles.
3 | *
4 | * @copyright See AUTHORS.txt
5 | * @license The MIT License (MIT); see LICENSE.txt
6 | */
7 |
8 | .oo-ui-menuToolGroup-tools .oo-ui-tool-name-heading1 .oo-ui-tool-title,
9 | .oo-ui-menuToolGroup-tools .oo-ui-tool-name-heading2 .oo-ui-tool-title {
10 | font-family: 'Linux Libertine', 'Georgia', 'Times', serif;
11 | }
12 |
--------------------------------------------------------------------------------
/modules/ve-mw/ui/styles/tools/ve.ui.MWLinkInspectorTool.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * VisualEditor MediaWiki UserInterface link inspector tool styles.
3 | *
4 | * @copyright See AUTHORS.txt
5 | * @license The MIT License (MIT); see LICENSE.txt
6 | */
7 |
8 | .ve-ui-educationPopup-image-link {
9 | background: url( images/link-ltr.png ) no-repeat center/90%;
10 | height: 150px;
11 | }
12 |
--------------------------------------------------------------------------------
/modules/ve-mw/ui/styles/ve.ui.MWWikitextSurface.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * VisualEditor MediaWiki Initialization WikitextSurface styles.
3 | *
4 | * @copyright See AUTHORS.txt
5 | * @license The MIT License (MIT); see LICENSE.txt
6 | */
7 |
8 | .ve-ui-mwWikitextSurface .ve-ce-paragraphNode {
9 | line-height: 1.5em;
10 | }
11 |
--------------------------------------------------------------------------------
/modules/ve-mw/ui/styles/widgets/images/broken-image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wikimedia/mediawiki-extensions-VisualEditor/58d76f0225dfe7abe67fb7e3ef0be7073e12d757/modules/ve-mw/ui/styles/widgets/images/broken-image.png
--------------------------------------------------------------------------------
/modules/ve-mw/ui/styles/widgets/ve.ui.MWCategoryInputWidget.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * VisualEditor MediaWiki UserInterface MWCategoryInputWidget styles.
3 | *
4 | * @copyright See AUTHORS.txt
5 | * @license The MIT License (MIT); see LICENSE.txt
6 | */
7 |
8 | .ve-ui-mwCategoryInputWidget {
9 | width: 15em;
10 | margin-bottom: 0.5em;
11 | display: inline-block;
12 |
13 | input {
14 | line-height: 1.35em;
15 | }
16 |
17 | .ve-ui-mwCategoryWidget.oo-ui-draggableGroupElement-dragging & {
18 | opacity: 0.5;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/modules/ve-mw/ui/styles/widgets/ve.ui.MWCategoryItemWidget.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * VisualEditor MediaWiki UserInterface MWCategoryItemWidget styles.
3 | *
4 | * @copyright See AUTHORS.txt
5 | * @license The MIT License (MIT); see LICENSE.txt
6 | */
7 | @import 'mediawiki.skin.variables.less';
8 |
9 | .ve-ui-mwCategoryItemWidget {
10 | margin: 0 0.5em 0.5em 0;
11 | padding: 0;
12 |
13 | /* stylelint-disable-next-line selector-class-pattern */
14 | .oo-ui-labelElement-label.new {
15 | color: @color-error;
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/modules/ve-mw/ui/styles/widgets/ve.ui.MWTocWidget.css:
--------------------------------------------------------------------------------
1 | .ve-ui-mwTocWidget {
2 | cursor: default;
3 | user-select: none;
4 | -moz-user-select: none;
5 | -webkit-user-select: none;
6 | }
7 |
--------------------------------------------------------------------------------
/modules/ve-mw/ui/styles/wikimediaui/ve.ui.Icons.json:
--------------------------------------------------------------------------------
1 | {
2 | "variants": {
3 | "invert": {
4 | "color": "#fff",
5 | "global": true
6 | },
7 | "progressive": {
8 | "color": "#36c",
9 | "global": true
10 | }
11 | },
12 | "images": {
13 | "parameter": {
14 | "file": "../images/icons/parameter-ltr.svg"
15 | },
16 | "public-domain": {
17 | "file": "../images/icons/public-domain.svg"
18 | }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/modules/ve-mw/ui/styles/wikimediaui/ve.ui.Indicators.json:
--------------------------------------------------------------------------------
1 | {
2 | "images": {
3 | "alert": {
4 | "file": "../images/indicators/alert.svg"
5 | }
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/modules/ve-mw/ui/ve.ui.MWWikitextSequenceRegistry.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * VisualEditor Wikitext sequence registry
3 | *
4 | * This should probably never have anything in it.
5 | *
6 | * @copyright See AUTHORS.txt
7 | */
8 |
9 | /* Initialization */
10 |
11 | ve.ui.wikitextSequenceRegistry = new ve.ui.SequenceRegistry();
12 |
--------------------------------------------------------------------------------
/modules/ve-mw/ve.track.js:
--------------------------------------------------------------------------------
1 | // In VE-MW, track events using MediaWiki's system instead of VisualEditor's
2 | ve.track = mw.track;
3 | ve.trackSubscribe = mw.trackSubscribe;
4 |
5 | ve.trackSubscribe( 'activity.', ( topic, data ) => {
6 | mw.track( 'visualEditorFeatureUse', ve.extendObject( data, {
7 | feature: topic.split( '.' )[ 1 ]
8 | } ) );
9 | } );
10 |
--------------------------------------------------------------------------------
/screenshots/README.md:
--------------------------------------------------------------------------------
1 | Generated screenshots will be put here.
2 |
--------------------------------------------------------------------------------
/tests/selenium/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "root": true,
3 | "extends": [
4 | "wikimedia/selenium"
5 | ],
6 | "globals": {
7 | "mw": "readonly",
8 | "ve": "readonly"
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/tests/selenium/README.md:
--------------------------------------------------------------------------------
1 | # Selenium tests
2 |
3 | For more information see https://www.mediawiki.org/wiki/Selenium
4 |
5 | ## Setup
6 |
7 | See https://www.mediawiki.org/wiki/MediaWiki-Docker/Extension/VisualEditor
8 |
9 | ## Run all tests
10 |
11 | npm run selenium-test
12 |
13 | ## Run specific tests
14 |
15 | Filter by file name:
16 |
17 | npm run selenium-test -- --spec tests/selenium/specs/[FILE-NAME]
18 |
19 | Filter by file name and test name:
20 |
21 | npm run selenium-test -- --spec tests/selenium/specs/[FILE-NAME] --mochaOpts.grep [TEST-NAME]
22 |
--------------------------------------------------------------------------------
/tests/selenium/wdio.conf.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const { config } = require( 'wdio-mediawiki/wdio-defaults.conf.js' );
4 |
5 | exports.config = { ...config,
6 | // Override, or add to, the setting from wdio-mediawiki.
7 | // Learn more at https://webdriver.io/docs/configurationfile/
8 | //
9 | // Example:
10 | // logLevel: 'info',
11 |
12 | maxInstances: 4
13 | };
14 |
--------------------------------------------------------------------------------