summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Legler <alex@a3li.li>2014-12-23 17:49:26 +0100
committerAlex Legler <alex@a3li.li>2014-12-23 17:49:26 +0100
commite352fff59842ca14fbfd81ee1c4a64297bb598c5 (patch)
tree153f268484aa5cc41cacf912bdce8c4847df222d /MLEB/CleanChanges
downloadextensions-e352fff59842ca14fbfd81ee1c4a64297bb598c5.tar.gz
extensions-e352fff59842ca14fbfd81ee1c4a64297bb598c5.tar.bz2
extensions-e352fff59842ca14fbfd81ee1c4a64297bb598c5.zip
Add initial set of additional extensions
Diffstat (limited to 'MLEB/CleanChanges')
-rw-r--r--MLEB/CleanChanges/.idea/.name1
-rw-r--r--MLEB/CleanChanges/.idea/CleanChanges.iml9
-rw-r--r--MLEB/CleanChanges/.idea/encodings.xml5
-rw-r--r--MLEB/CleanChanges/.idea/misc.xml5
-rw-r--r--MLEB/CleanChanges/.idea/modules.xml9
-rw-r--r--MLEB/CleanChanges/.idea/scopes/scope_settings.xml5
-rw-r--r--MLEB/CleanChanges/.idea/vcs.xml7
-rw-r--r--MLEB/CleanChanges/.idea/workspace.xml172
-rw-r--r--MLEB/CleanChanges/.jshintrc1
-rw-r--r--MLEB/CleanChanges/CleanChanges.i18n.php35
-rw-r--r--MLEB/CleanChanges/CleanChanges.php54
-rw-r--r--MLEB/CleanChanges/CleanChanges_body.php709
-rw-r--r--MLEB/CleanChanges/Filters.php112
-rw-r--r--MLEB/CleanChanges/RELEASE-NOTES5
-rw-r--r--MLEB/CleanChanges/Resources.php17
-rw-r--r--MLEB/CleanChanges/composer.json11
-rw-r--r--MLEB/CleanChanges/i18n/af.json13
-rw-r--r--MLEB/CleanChanges/i18n/am.json9
-rw-r--r--MLEB/CleanChanges/i18n/an.json8
-rw-r--r--MLEB/CleanChanges/i18n/ar.json14
-rw-r--r--MLEB/CleanChanges/i18n/arc.json12
-rw-r--r--MLEB/CleanChanges/i18n/arz.json14
-rw-r--r--MLEB/CleanChanges/i18n/ast.json14
-rw-r--r--MLEB/CleanChanges/i18n/az.json8
-rw-r--r--MLEB/CleanChanges/i18n/azb.json11
-rw-r--r--MLEB/CleanChanges/i18n/ba.json13
-rw-r--r--MLEB/CleanChanges/i18n/bcl.json13
-rw-r--r--MLEB/CleanChanges/i18n/be-tarask.json14
-rw-r--r--MLEB/CleanChanges/i18n/bg.json14
-rw-r--r--MLEB/CleanChanges/i18n/bn.json14
-rw-r--r--MLEB/CleanChanges/i18n/br.json13
-rw-r--r--MLEB/CleanChanges/i18n/bs.json13
-rw-r--r--MLEB/CleanChanges/i18n/ca.json15
-rw-r--r--MLEB/CleanChanges/i18n/ce.json14
-rw-r--r--MLEB/CleanChanges/i18n/cs.json14
-rw-r--r--MLEB/CleanChanges/i18n/cu.json8
-rw-r--r--MLEB/CleanChanges/i18n/cy.json13
-rw-r--r--MLEB/CleanChanges/i18n/da.json14
-rw-r--r--MLEB/CleanChanges/i18n/de.json14
-rw-r--r--MLEB/CleanChanges/i18n/diq.json11
-rw-r--r--MLEB/CleanChanges/i18n/dsb.json13
-rw-r--r--MLEB/CleanChanges/i18n/ee.json10
-rw-r--r--MLEB/CleanChanges/i18n/el.json16
-rw-r--r--MLEB/CleanChanges/i18n/en.json13
-rw-r--r--MLEB/CleanChanges/i18n/eo.json14
-rw-r--r--MLEB/CleanChanges/i18n/es.json13
-rw-r--r--MLEB/CleanChanges/i18n/et.json14
-rw-r--r--MLEB/CleanChanges/i18n/eu.json14
-rw-r--r--MLEB/CleanChanges/i18n/fa.json17
-rw-r--r--MLEB/CleanChanges/i18n/fi.json14
-rw-r--r--MLEB/CleanChanges/i18n/fr.json17
-rw-r--r--MLEB/CleanChanges/i18n/frp.json12
-rw-r--r--MLEB/CleanChanges/i18n/fy.json14
-rw-r--r--MLEB/CleanChanges/i18n/ga.json10
-rw-r--r--MLEB/CleanChanges/i18n/gl.json14
-rw-r--r--MLEB/CleanChanges/i18n/grc.json14
-rw-r--r--MLEB/CleanChanges/i18n/gsw.json14
-rw-r--r--MLEB/CleanChanges/i18n/gu.json9
-rw-r--r--MLEB/CleanChanges/i18n/gv.json8
-rw-r--r--MLEB/CleanChanges/i18n/ha.json4
-rw-r--r--MLEB/CleanChanges/i18n/haw.json13
-rw-r--r--MLEB/CleanChanges/i18n/he.json15
-rw-r--r--MLEB/CleanChanges/i18n/hi.json12
-rw-r--r--MLEB/CleanChanges/i18n/hr.json13
-rw-r--r--MLEB/CleanChanges/i18n/hsb.json13
-rw-r--r--MLEB/CleanChanges/i18n/hu.json13
-rw-r--r--MLEB/CleanChanges/i18n/ia.json13
-rw-r--r--MLEB/CleanChanges/i18n/id.json14
-rw-r--r--MLEB/CleanChanges/i18n/ig.json13
-rw-r--r--MLEB/CleanChanges/i18n/is.json9
-rw-r--r--MLEB/CleanChanges/i18n/it.json15
-rw-r--r--MLEB/CleanChanges/i18n/ja.json18
-rw-r--r--MLEB/CleanChanges/i18n/jv.json8
-rw-r--r--MLEB/CleanChanges/i18n/ka.json15
-rw-r--r--MLEB/CleanChanges/i18n/kk-cyrl.json11
-rw-r--r--MLEB/CleanChanges/i18n/kl.json8
-rw-r--r--MLEB/CleanChanges/i18n/km.json14
-rw-r--r--MLEB/CleanChanges/i18n/kn.json9
-rw-r--r--MLEB/CleanChanges/i18n/ko.json14
-rw-r--r--MLEB/CleanChanges/i18n/krc.json8
-rw-r--r--MLEB/CleanChanges/i18n/ksh.json13
-rw-r--r--MLEB/CleanChanges/i18n/ku-latn.json12
-rw-r--r--MLEB/CleanChanges/i18n/kw.json9
-rw-r--r--MLEB/CleanChanges/i18n/lb.json13
-rw-r--r--MLEB/CleanChanges/i18n/li.json13
-rw-r--r--MLEB/CleanChanges/i18n/lrc.json8
-rw-r--r--MLEB/CleanChanges/i18n/lt.json11
-rw-r--r--MLEB/CleanChanges/i18n/ltg.json8
-rw-r--r--MLEB/CleanChanges/i18n/lv.json8
-rw-r--r--MLEB/CleanChanges/i18n/lzh.json10
-rw-r--r--MLEB/CleanChanges/i18n/mhr.json8
-rw-r--r--MLEB/CleanChanges/i18n/mk.json13
-rw-r--r--MLEB/CleanChanges/i18n/ml.json14
-rw-r--r--MLEB/CleanChanges/i18n/mn.json9
-rw-r--r--MLEB/CleanChanges/i18n/mr.json15
-rw-r--r--MLEB/CleanChanges/i18n/ms.json14
-rw-r--r--MLEB/CleanChanges/i18n/mt.json14
-rw-r--r--MLEB/CleanChanges/i18n/myv.json9
-rw-r--r--MLEB/CleanChanges/i18n/nah.json14
-rw-r--r--MLEB/CleanChanges/i18n/nb.json13
-rw-r--r--MLEB/CleanChanges/i18n/nds.json10
-rw-r--r--MLEB/CleanChanges/i18n/nl.json13
-rw-r--r--MLEB/CleanChanges/i18n/nn.json14
-rw-r--r--MLEB/CleanChanges/i18n/oc.json13
-rw-r--r--MLEB/CleanChanges/i18n/or.json11
-rw-r--r--MLEB/CleanChanges/i18n/os.json8
-rw-r--r--MLEB/CleanChanges/i18n/pa.json8
-rw-r--r--MLEB/CleanChanges/i18n/pdc.json9
-rw-r--r--MLEB/CleanChanges/i18n/pfl.json9
-rw-r--r--MLEB/CleanChanges/i18n/pl.json18
-rw-r--r--MLEB/CleanChanges/i18n/pms.json13
-rw-r--r--MLEB/CleanChanges/i18n/ps.json13
-rw-r--r--MLEB/CleanChanges/i18n/pt-br.json14
-rw-r--r--MLEB/CleanChanges/i18n/pt.json14
-rw-r--r--MLEB/CleanChanges/i18n/qqq.json19
-rw-r--r--MLEB/CleanChanges/i18n/qu.json9
-rw-r--r--MLEB/CleanChanges/i18n/rif.json10
-rw-r--r--MLEB/CleanChanges/i18n/ro.json14
-rw-r--r--MLEB/CleanChanges/i18n/roa-tara.json13
-rw-r--r--MLEB/CleanChanges/i18n/ru.json15
-rw-r--r--MLEB/CleanChanges/i18n/rue.json12
-rw-r--r--MLEB/CleanChanges/i18n/sah.json13
-rw-r--r--MLEB/CleanChanges/i18n/scn.json8
-rw-r--r--MLEB/CleanChanges/i18n/si.json12
-rw-r--r--MLEB/CleanChanges/i18n/sk.json13
-rw-r--r--MLEB/CleanChanges/i18n/sl.json13
-rw-r--r--MLEB/CleanChanges/i18n/sr-ec.json15
-rw-r--r--MLEB/CleanChanges/i18n/sr-el.json14
-rw-r--r--MLEB/CleanChanges/i18n/stq.json13
-rw-r--r--MLEB/CleanChanges/i18n/su.json14
-rw-r--r--MLEB/CleanChanges/i18n/sv.json15
-rw-r--r--MLEB/CleanChanges/i18n/sw.json9
-rw-r--r--MLEB/CleanChanges/i18n/szl.json8
-rw-r--r--MLEB/CleanChanges/i18n/ta.json13
-rw-r--r--MLEB/CleanChanges/i18n/te.json14
-rw-r--r--MLEB/CleanChanges/i18n/tet.json9
-rw-r--r--MLEB/CleanChanges/i18n/tg-cyrl.json10
-rw-r--r--MLEB/CleanChanges/i18n/tg-latn.json10
-rw-r--r--MLEB/CleanChanges/i18n/th.json8
-rw-r--r--MLEB/CleanChanges/i18n/tk.json9
-rw-r--r--MLEB/CleanChanges/i18n/tl.json13
-rw-r--r--MLEB/CleanChanges/i18n/tr.json14
-rw-r--r--MLEB/CleanChanges/i18n/tru.json8
-rw-r--r--MLEB/CleanChanges/i18n/tt-cyrl.json13
-rw-r--r--MLEB/CleanChanges/i18n/ug-arab.json8
-rw-r--r--MLEB/CleanChanges/i18n/ug-latn.json8
-rw-r--r--MLEB/CleanChanges/i18n/uk.json14
-rw-r--r--MLEB/CleanChanges/i18n/uz.json9
-rw-r--r--MLEB/CleanChanges/i18n/vec.json13
-rw-r--r--MLEB/CleanChanges/i18n/vep.json10
-rw-r--r--MLEB/CleanChanges/i18n/vi.json14
-rw-r--r--MLEB/CleanChanges/i18n/vo.json13
-rw-r--r--MLEB/CleanChanges/i18n/wa.json13
-rw-r--r--MLEB/CleanChanges/i18n/yi.json9
-rw-r--r--MLEB/CleanChanges/i18n/yo.json8
-rw-r--r--MLEB/CleanChanges/i18n/zh-hans.json16
-rw-r--r--MLEB/CleanChanges/i18n/zh-hant.json16
-rw-r--r--MLEB/CleanChanges/images/Arr_.pngbin0 -> 96 bytes
-rw-r--r--MLEB/CleanChanges/images/Arr_d.pngbin0 -> 205 bytes
-rw-r--r--MLEB/CleanChanges/images/Arr_l.pngbin0 -> 205 bytes
-rw-r--r--MLEB/CleanChanges/images/Arr_r.pngbin0 -> 206 bytes
-rw-r--r--MLEB/CleanChanges/images/Arr_u.pngbin0 -> 207 bytes
-rw-r--r--MLEB/CleanChanges/images/showuserlinks.pngbin0 -> 204 bytes
-rw-r--r--MLEB/CleanChanges/resources/cleanchanges.js23
-rw-r--r--MLEB/CleanChanges/resources/cleanchanges.uls.css24
-rw-r--r--MLEB/CleanChanges/resources/cleanchanges.uls.js59
166 files changed, 2971 insertions, 0 deletions
diff --git a/MLEB/CleanChanges/.idea/.name b/MLEB/CleanChanges/.idea/.name
new file mode 100644
index 00000000..9de73e2d
--- /dev/null
+++ b/MLEB/CleanChanges/.idea/.name
@@ -0,0 +1 @@
+CleanChanges \ No newline at end of file
diff --git a/MLEB/CleanChanges/.idea/CleanChanges.iml b/MLEB/CleanChanges/.idea/CleanChanges.iml
new file mode 100644
index 00000000..6b8184f8
--- /dev/null
+++ b/MLEB/CleanChanges/.idea/CleanChanges.iml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="WEB_MODULE" version="4">
+ <component name="NewModuleRootManager">
+ <content url="file://$MODULE_DIR$" />
+ <orderEntry type="inheritedJdk" />
+ <orderEntry type="sourceFolder" forTests="false" />
+ </component>
+</module>
+
diff --git a/MLEB/CleanChanges/.idea/encodings.xml b/MLEB/CleanChanges/.idea/encodings.xml
new file mode 100644
index 00000000..e206d70d
--- /dev/null
+++ b/MLEB/CleanChanges/.idea/encodings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" />
+</project>
+
diff --git a/MLEB/CleanChanges/.idea/misc.xml b/MLEB/CleanChanges/.idea/misc.xml
new file mode 100644
index 00000000..1162f438
--- /dev/null
+++ b/MLEB/CleanChanges/.idea/misc.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="ProjectRootManager" version="2" />
+</project>
+
diff --git a/MLEB/CleanChanges/.idea/modules.xml b/MLEB/CleanChanges/.idea/modules.xml
new file mode 100644
index 00000000..7f086057
--- /dev/null
+++ b/MLEB/CleanChanges/.idea/modules.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="ProjectModuleManager">
+ <modules>
+ <module fileurl="file://$PROJECT_DIR$/.idea/CleanChanges.iml" filepath="$PROJECT_DIR$/.idea/CleanChanges.iml" />
+ </modules>
+ </component>
+</project>
+
diff --git a/MLEB/CleanChanges/.idea/scopes/scope_settings.xml b/MLEB/CleanChanges/.idea/scopes/scope_settings.xml
new file mode 100644
index 00000000..922003b8
--- /dev/null
+++ b/MLEB/CleanChanges/.idea/scopes/scope_settings.xml
@@ -0,0 +1,5 @@
+<component name="DependencyValidationManager">
+ <state>
+ <option name="SKIP_IMPORT_STATEMENTS" value="false" />
+ </state>
+</component> \ No newline at end of file
diff --git a/MLEB/CleanChanges/.idea/vcs.xml b/MLEB/CleanChanges/.idea/vcs.xml
new file mode 100644
index 00000000..c80f2198
--- /dev/null
+++ b/MLEB/CleanChanges/.idea/vcs.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="VcsDirectoryMappings">
+ <mapping directory="$PROJECT_DIR$" vcs="Git" />
+ </component>
+</project>
+
diff --git a/MLEB/CleanChanges/.idea/workspace.xml b/MLEB/CleanChanges/.idea/workspace.xml
new file mode 100644
index 00000000..bb21c3f6
--- /dev/null
+++ b/MLEB/CleanChanges/.idea/workspace.xml
@@ -0,0 +1,172 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="ChangeListManager">
+ <list default="true" id="476fbbcd-ad4f-42c2-9dc7-904fc7d5c9b9" name="Default" comment="" />
+ <ignored path="CleanChanges.iws" />
+ <ignored path=".idea/workspace.xml" />
+ <option name="TRACKING_ENABLED" value="true" />
+ <option name="SHOW_DIALOG" value="false" />
+ <option name="HIGHLIGHT_CONFLICTS" value="true" />
+ <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
+ <option name="LAST_RESOLUTION" value="IGNORE" />
+ </component>
+ <component name="ChangesViewManager" flattened_view="true" show_ignored="false" />
+ <component name="CreatePatchCommitExecutor">
+ <option name="PATCH_PATH" value="" />
+ </component>
+ <component name="DaemonCodeAnalyzer">
+ <disable_hints />
+ </component>
+ <component name="ExecutionTargetManager" SELECTED_TARGET="default_target" />
+ <component name="FavoritesManager">
+ <favorites_list name="CleanChanges" />
+ </component>
+ <component name="FileEditorManager">
+ <leaf />
+ </component>
+ <component name="FindManager">
+ <FindUsagesManager>
+ <setting name="OPEN_NEW_TAB" value="false" />
+ </FindUsagesManager>
+ </component>
+ <component name="Git.Settings">
+ <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
+ </component>
+ <component name="PhpWorkspaceProjectConfiguration" backward_compatibility_performed="true" />
+ <component name="ProjectFrameBounds">
+ <option name="y" value="14" />
+ <option name="width" value="1278" />
+ <option name="height" value="770" />
+ </component>
+ <component name="ProjectLevelVcsManager" settingsEditedManually="false">
+ <OptionsSetting value="true" id="Add" />
+ <OptionsSetting value="true" id="Remove" />
+ <OptionsSetting value="true" id="Checkout" />
+ <OptionsSetting value="true" id="Update" />
+ <OptionsSetting value="true" id="Status" />
+ <OptionsSetting value="true" id="Edit" />
+ <ConfirmationsSetting value="0" id="Add" />
+ <ConfirmationsSetting value="0" id="Remove" />
+ </component>
+ <component name="ProjectReloadState">
+ <option name="STATE" value="0" />
+ </component>
+ <component name="ProjectView">
+ <navigator currentView="ProjectPane" proportions="" version="1" splitterProportion="0.5">
+ <flattenPackages />
+ <showMembers />
+ <showModules />
+ <showLibraryContents />
+ <hideEmptyPackages />
+ <abbreviatePackageNames />
+ <autoscrollToSource />
+ <autoscrollFromSource />
+ <sortByType />
+ </navigator>
+ <panes>
+ <pane id="Scope" />
+ <pane id="ProjectPane">
+ <subPane>
+ <PATH>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="CleanChanges" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+ </PATH_ELEMENT>
+ </PATH>
+ <PATH>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="CleanChanges" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT>
+ <option name="myItemId" value="CleanChanges" />
+ <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+ </PATH_ELEMENT>
+ </PATH>
+ </subPane>
+ </pane>
+ </panes>
+ </component>
+ <component name="PropertiesComponent">
+ <property name="options.lastSelected" value="web-ide.project.structure" />
+ <property name="options.splitter.main.proportions" value="0.3" />
+ <property name="options.splitter.details.proportions" value="0.2" />
+ <property name="options.searchVisible" value="true" />
+ <property name="WebServerToolWindowFactoryState" value="false" />
+ </component>
+ <component name="RunManager">
+ <configuration default="true" type="PHPUnitRunConfigurationType" factoryName="PHPUnit">
+ <TestRunner />
+ <method />
+ </configuration>
+ <configuration default="true" type="PhpLocalRunConfigurationType" factoryName="PHP Console">
+ <method />
+ </configuration>
+ <configuration default="true" type="JavascriptDebugType" factoryName="JavaScript Debug" singleton="true">
+ <method />
+ </configuration>
+ <configuration default="true" type="PhpUnitRemoteRunConfigurationType" factoryName="PHPUnit on Server">
+ <method />
+ </configuration>
+ <list size="0" />
+ </component>
+ <component name="ShelveChangesManager" show_recycled="false" />
+ <component name="TaskManager">
+ <task active="true" id="Default" summary="Default task">
+ <changelist id="476fbbcd-ad4f-42c2-9dc7-904fc7d5c9b9" name="Default" comment="" />
+ <created>1387983990054</created>
+ <updated>1387983990054</updated>
+ </task>
+ <servers />
+ </component>
+ <component name="ToolWindowManager">
+ <frame x="0" y="14" width="1278" height="770" extended-state="0" />
+ <editor active="false" />
+ <layout>
+ <window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
+ <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
+ <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
+ <window_info id="Find" active="true" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.32892805" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+ <window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
+ <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+ <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.25" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
+ <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+ <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="true" content_ui="tabs" />
+ <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="true" content_ui="tabs" />
+ <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
+ <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
+ <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
+ <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
+ <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+ <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
+ <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
+ <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
+ </layout>
+ </component>
+ <component name="Vcs.Log.UiProperties">
+ <option name="RECENTLY_FILTERED_USERS">
+ <collection />
+ </option>
+ </component>
+ <component name="VcsContentAnnotationSettings">
+ <option name="myLimit" value="2678400000" />
+ </component>
+ <component name="VcsManagerConfiguration">
+ <option name="myTodoPanelSettings">
+ <TodoPanelSettings />
+ </option>
+ </component>
+ <component name="XDebuggerManager">
+ <breakpoint-manager />
+ </component>
+ <component name="editorHistoryManager">
+ <entry file="file://$PROJECT_DIR$/CleanChanges_body.php">
+ <provider selected="true" editor-type-id="text-editor">
+ <state line="85" column="23" selection-start="1859" selection-end="1859" vertical-scroll-proportion="0.33333334" vertical-offset="1153" max-vertical-offset="9990">
+ <folding />
+ </state>
+ </provider>
+ </entry>
+ </component>
+</project>
+
diff --git a/MLEB/CleanChanges/.jshintrc b/MLEB/CleanChanges/.jshintrc
new file mode 100644
index 00000000..0967ef42
--- /dev/null
+++ b/MLEB/CleanChanges/.jshintrc
@@ -0,0 +1 @@
+{}
diff --git a/MLEB/CleanChanges/CleanChanges.i18n.php b/MLEB/CleanChanges/CleanChanges.i18n.php
new file mode 100644
index 00000000..17bcda67
--- /dev/null
+++ b/MLEB/CleanChanges/CleanChanges.i18n.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * This is a backwards-compatibility shim, generated by:
+ * https://git.wikimedia.org/blob/mediawiki%2Fcore.git/HEAD/maintenance%2FgenerateJsonI18n.php
+ *
+ * Beginning with MediaWiki 1.23, translation strings are stored in json files,
+ * and the EXTENSION.i18n.php file only exists to provide compatibility with
+ * older releases of MediaWiki. For more information about this migration, see:
+ * https://www.mediawiki.org/wiki/Requests_for_comment/Localisation_format
+ *
+ * This shim maintains compatibility back to MediaWiki 1.17.
+ */
+$messages = array();
+if ( !function_exists( 'wfJsonI18nShimd87671d4445e53f6' ) ) {
+ function wfJsonI18nShimd87671d4445e53f6( $cache, $code, &$cachedData ) {
+ $codeSequence = array_merge( array( $code ), $cachedData['fallbackSequence'] );
+ foreach ( $codeSequence as $csCode ) {
+ $fileName = dirname( __FILE__ ) . "/i18n/$csCode.json";
+ if ( is_readable( $fileName ) ) {
+ $data = FormatJson::decode( file_get_contents( $fileName ), true );
+ foreach ( array_keys( $data ) as $key ) {
+ if ( $key === '' || $key[0] === '@' ) {
+ unset( $data[$key] );
+ }
+ }
+ $cachedData['messages'] = array_merge( $data, $cachedData['messages'] );
+ }
+
+ $cachedData['deps'][] = new FileDependency( $fileName );
+ }
+ return true;
+ }
+
+ $GLOBALS['wgHooks']['LocalisationCacheRecache'][] = 'wfJsonI18nShimd87671d4445e53f6';
+}
diff --git a/MLEB/CleanChanges/CleanChanges.php b/MLEB/CleanChanges/CleanChanges.php
new file mode 100644
index 00000000..760d596a
--- /dev/null
+++ b/MLEB/CleanChanges/CleanChanges.php
@@ -0,0 +1,54 @@
+<?php
+if ( !defined( 'MEDIAWIKI' ) ) die();
+/**
+ * An extension to show a nice compact changes list and few extra filters for
+ * Special:RecentChanges.php
+ *
+ * @file
+ * @ingroup Extensions
+ *
+ * @author Niklas Laxström
+ * @copyright Copyright © 2008-2012, Niklas Laxström
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ */
+
+/* Set up messages and includes */
+$dir = __DIR__;
+$wgMessagesDirs['CleanChanges'] = __DIR__ . '/i18n';
+$wgExtensionMessagesFiles['CleanChanges'] = "$dir/CleanChanges.i18n.php";
+$wgAutoloadClasses['NCL'] = "$dir/CleanChanges_body.php";
+
+require_once __DIR__ . '/Resources.php';
+
+/* Hook into code */
+$wgHooks['FetchChangesList'][] = 'NCL::hook';
+$wgHooks['MakeGlobalVariablesScript'][] = 'NCL::addScriptVariables';
+
+/* Extension information */
+$wgExtensionCredits['other'][] = array(
+ 'path' => __FILE__,
+ 'name' => 'Clean Changes',
+ 'version' => '[https://www.mediawiki.org/wiki/MLEB MLEB 2014.11]',
+ 'author' => 'Niklas Laxström',
+ 'descriptionmsg' => 'cleanchanges-desc',
+ 'url' => 'https://www.mediawiki.org/wiki/Extension:CleanChanges',
+);
+
+$wgCCUserFilter = true;
+$wgCCTrailerFilter = false;
+
+$wgExtensionFunctions[] = 'ccSetupFilters';
+$wgAutoloadClasses['CCFilters'] = "$dir/Filters.php";
+
+function ccSetupFilters() {
+ global $wgCCUserFilter, $wgCCTrailerFilter, $wgHooks;
+
+ if ( $wgCCUserFilter ) {
+ $wgHooks['SpecialRecentChangesQuery'][] = 'CCFilters::user';
+ $wgHooks['SpecialRecentChangesPanel'][] = 'CCFilters::userForm';
+ }
+ if ( $wgCCTrailerFilter ) {
+ $wgHooks['SpecialRecentChangesQuery'][] = 'CCFilters::trailer';
+ $wgHooks['SpecialRecentChangesPanel'][] = 'CCFilters::trailerForm';
+ }
+}
diff --git a/MLEB/CleanChanges/CleanChanges_body.php b/MLEB/CleanChanges/CleanChanges_body.php
new file mode 100644
index 00000000..05806614
--- /dev/null
+++ b/MLEB/CleanChanges/CleanChanges_body.php
@@ -0,0 +1,709 @@
+<?php
+
+/**
+ * Generate a list of changes using an Enhanced system (use javascript).
+ */
+class NCL extends EnhancedChangesList {
+ /**
+ * Determines which version of changes list to provide, or none.
+ */
+ public static function hook( User $user, Skin &$skin, &$list ) {
+ $list = null;
+
+ if ( defined( 'ULS_VERSION' ) ) {
+ $skin->getOutput()->addModules( 'ext.cleanchanges.uls' );
+ }
+
+ /* allow override */
+ $request = $skin->getRequest();
+ if ( $request->getBool( 'cleanrc' ) ) {
+ $list = new NCL( $skin );
+ }
+ if ( $request->getBool( 'newrc' ) ) {
+ $list = new EnhancedChangesList( $skin );
+ }
+ if ( $request->getBool( 'oldrc' ) ) {
+ $list = new OldChangesList( $skin );
+ }
+
+ if ( !$list && $user->getOption( 'usenewrc' ) ) {
+ $list = new NCL( $skin );
+ }
+
+ if ( $list instanceof NCL ) {
+ $skin->getOutput()->addModules( 'ext.cleanchanges' );
+ }
+
+ /* If some list was specified, stop processing */
+ return $list === null;
+ }
+
+ protected static $userinfo = array();
+
+ /**
+ * @param $vars array
+ * @return bool
+ */
+ public static function addScriptVariables( &$vars ) {
+ $vars += self::$userinfo;
+ return true;
+ }
+
+ /**
+ * String that comes between page details and the user details. By default
+ * only larger space.
+ */
+ protected $userSeparator = "\xc2\xa0 \xc2\xa0";
+
+ /**
+ * Text direction, true for ltr and false for rtl
+ */
+ protected $direction = true;
+
+ /**
+ * @param IContextSource|Skin $skin
+ */
+ public function __construct( $skin ) {
+ $lang = $this->getLanguage();
+ parent::__construct( $skin );
+ $this->direction = !$lang->isRTL();
+ $this->dir = $lang->getDirMark();
+ }
+
+ /**
+ * @return String
+ */
+ public function beginRecentChangesList() {
+ parent::beginRecentChangesList();
+ $dir = $this->direction ? 'ltr' : 'rtl';
+ return
+ Xml::openElement(
+ 'div',
+ array( 'style' => "direction: $dir" )
+ );
+ }
+
+ /**
+ * @return string
+ */
+ public function endRecentChangesList() {
+ return $this->recentChangesBlock() . '</div>';
+ }
+
+ /**
+ * @param RCCacheEntry $rc
+ * @return int
+ */
+ protected function isLog( RCCacheEntry $rc = null ) {
+ if ( $rc && $rc->getAttribute( 'rc_type' ) == RC_LOG ) {
+ return 2;
+ }
+ return 0;
+ }
+
+ /**
+ * @param RCCacheEntry $rc
+ * @return string
+ */
+ protected function getLogTitle( RCCacheEntry $rc ) {
+ $logtype = $rc->getAttribute( 'rc_log_type' );
+ $logpage = new LogPage( $logtype );
+ $logname = $logpage->getName()->escaped();
+ $titleObj = SpecialPage::getTitleFor( 'Log', $logtype );
+ $link = Linker::link( $titleObj, $logname );
+ return $this->msg( 'parentheses' )->rawParams( $link )->escaped();
+ }
+
+ /**
+ * Format a line for enhanced recentchange (aka with JavaScript and block of lines).
+ * @param RecentChange $baseRC
+ * @param bool $watched
+ * @return string
+ */
+ public function recentChangesLine( &$baseRC, $watched = false ) {
+ # Create a specialised object
+ $rc = RCCacheEntry::newFromParent( $baseRC );
+
+ // Extract most used variables
+ $timestamp = $rc->getAttribute( 'rc_timestamp' );
+ $titleObj = $rc->getTitle();
+ $rc_id = $rc->getAttribute( 'rc_id' );
+
+ $lang = $this->getLanguage();
+ $date = $lang->date( $timestamp, /* adj */ true, /* format */ true );
+ $time = $lang->time( $timestamp, /* adj */ true, /* format */ true );
+
+ # Should patrol-related stuff be shown?
+ $rc->unpatrolled = $this->showAsUnpatrolled( $rc );
+
+ $logEntry = $this->isLog( $rc );
+ if ( $logEntry ) {
+ $clink = $this->getLogTitle( $rc );
+ } elseif ( $rc->unpatrolled && $rc->getAttribute( 'rc_type' ) == RC_NEW ) {
+ # Unpatrolled new page, give rc_id in query
+ $clink = linker::linkKnown(
+ $titleObj,
+ null,
+ array(),
+ array( 'rcid' => $rc_id )
+ );
+ } else {
+ $clink = Linker::linkKnown( $titleObj );
+ }
+
+ $rc->watched = $watched;
+ $rc->link = $this->maybeWatchedLink( $clink, $watched );
+ $rc->timestamp = $time;
+ $rc->numberofWatchingusers = $baseRC->numberofWatchingusers;
+
+ $rc->_reqCurId = array( 'curid' => $rc->getAttribute( 'rc_cur_id' ) );
+ $rc->_reqOldId = array( 'oldid' => $rc->getAttribute( 'rc_this_oldid' ) );
+ $this->makeLinks( $rc );
+
+ // Make user links
+ if ( $this->isDeleted( $rc, Revision::DELETED_USER ) ) {
+ $rc->_user = ' <span class="history-deleted">' . $this->msg( 'rev-deleted-user' )->escaped() . '</span>';
+ $rc->_userInfo = '';
+ self::$userinfo += array();
+ } else {
+ $rc->_user = Linker::userLink(
+ $rc->getAttribute( 'rc_user' ),
+ $rc->getAttribute( 'rc_user_text' )
+ );
+ $stuff = $this->userToolLinks(
+ $rc->getAttribute( 'rc_user' ),
+ $rc->getAttribute( 'rc_user_text' )
+ );
+ // TODO: userToolLinks can return ''
+ self::$userinfo += $stuff[1];
+ $rc->_userInfo = $stuff[0];
+ }
+
+ if ( !$this->isLog( $rc ) ) {
+ $rc->_comment = $this->getComment( $rc );
+ }
+
+ $rc->_watching = $this->numberofWatchingusers( $baseRC->numberofWatchingusers );
+
+ # If it's a new day, add the headline and flush the cache
+ $ret = '';
+ if ( $date !== $this->lastdate ) {
+ # Process current cache
+ $ret = $this->recentChangesBlock();
+ $this->rc_cache = array();
+ $ret .= Xml::element( 'h4', null, $date ) . "\n";
+ $this->lastdate = $date;
+ }
+
+ # Put accumulated information into the cache, for later display
+ # Page moves go on their own line
+ if ( $logEntry ) {
+ $secureName = $this->getLogTitle( $rc );
+ } else {
+ $secureName = $titleObj->getPrefixedDBkey();
+ }
+ $this->rc_cache[$secureName][] = $rc;
+
+ return $ret;
+ }
+
+ /**
+ * @param RCCacheEntry $rc
+ */
+ protected function makeLinks( RCCacheEntry $rc ) {
+ /* These will be overriden with actual links below, if applicable */
+ $rc->_curLink = $this->message['cur'];
+ $rc->_diffLink = $this->message['diff'];
+ $rc->_lastLink = $this->message['last'];
+ $rc->_histLink = $this->message['hist'];
+
+ if ( !$this->isLog( $rc ) ) {
+ # Make cur, diff and last links
+ $querycur = array( 'diff' => 0 ) + $rc->_reqCurId + $rc->_reqOldId;
+ $querydiff = array(
+ 'diff' => $rc->getAttribute( 'rc_this_oldid' ),
+ 'oldid' => $rc->getAttribute( 'rc_last_oldid' ),
+ 'rcid' => $rc->unpatrolled ? $rc->getAttribute( 'rc_id' ) : '',
+ ) + $rc->_reqCurId;
+
+ $rc->_curLink = Linker::linkKnown( $rc->getTitle(),
+ $this->message['cur'], array(), $querycur );
+
+ if ( $rc->getAttribute( 'rc_type' ) != RC_NEW ) {
+ $rc->_diffLink = Linker::linkKnown( $rc->getTitle(),
+ $this->message['diff'], array(), $querydiff );
+ }
+
+ if ( $rc->getAttribute( 'rc_last_oldid' ) != 0 ) {
+ // This is not the first revision
+ $rc->_lastLink = Linker::linkKnown( $rc->getTitle(),
+ $this->message['last'], array(), $querydiff );
+ }
+
+ $rc->_histLink = Linker::link( $rc->getTitle(),
+ $this->message['hist'], array(),
+ $rc->_reqCurId + array( 'action' => 'history' )
+ );
+ }
+ }
+
+ /**
+ * Enhanced RC group
+ * @param RCCacheEntry[] $block
+ * @return string
+ */
+ protected function recentChangesBlockGroup( $block ) {
+ # Collate list of users
+ $isnew = false;
+ $userlinks = array();
+ $overrides = array( 'minor' => false, 'bot' => false );
+ $oldid = 0;
+ foreach ( $block as $rcObj ) {
+ $oldid = $rcObj->mAttribs['rc_last_oldid'];
+ if ( $rcObj->mAttribs['rc_new'] ) {
+ $isnew = $overrides['new'] = true;
+ }
+ $u = $rcObj->_user;
+ if ( !isset( $userlinks[$u] ) ) {
+ $userlinks[$u] = 0;
+ }
+ if ( $rcObj->unpatrolled ) {
+ $overrides['patrol'] = true;
+ }
+
+ $userlinks[$u]++;
+ }
+
+ # Main line, flags and timestamp
+
+ $info = Xml::tags( 'code', null,
+ $this->getFlags( $block[0], $overrides ) . ' ' . $block[0]->timestamp );
+ $rci = 'RCI' . $this->rcCacheIndex;
+ $rcl = 'RCL' . $this->rcCacheIndex;
+ $rcm = 'RCM' . $this->rcCacheIndex;
+ $toggleLink = "javascript:toggleVisibilityE('$rci', '$rcm', '$rcl', 'block')";
+ $tl =
+ Xml::tags( 'span', array( 'id' => $rcm ),
+ Xml::tags( 'a', array( 'href' => $toggleLink ), $this->arrow( $this->direction ? 'r' : 'l' ) ) ) .
+ Xml::tags( 'span', array( 'id' => $rcl, 'style' => 'display: none;' ),
+ Xml::tags( 'a', array( 'href' => $toggleLink ), $this->downArrow() ) );
+
+ $items[] = $tl . $info;
+
+ # Article link
+ $items[] = $block[0]->link;
+
+ $log = $this->isLog( $block[0] );
+ if ( !$log ) {
+ # Changes
+ $n = count( $block );
+ static $nchanges = array();
+ if ( !isset( $nchanges[$n] ) ) {
+ $nchanges[$n] = $this->msg( 'nchanges' )->numParams( $n )->escaped();
+ }
+
+ if ( !$isnew ) {
+ $changes = Linker::linkKnown(
+ $block[0]->getTitle(),
+ $nchanges[$n],
+ array(),
+ array(
+ 'curid' => $block[0]->mAttribs['rc_cur_id'],
+ 'diff' => $block[0]->mAttribs['rc_this_oldid'],
+ 'oldid' => $oldid
+ )
+ );
+ } else {
+ $changes = $nchanges[$n];
+ }
+
+ $size = $this->getCharacterDifference( $block[0], $block[count( $block ) -1] );
+ $items[] = $this->changeInfo( $changes, $block[0]->_histLink, $size );
+ }
+
+ $items[] = $this->userSeparator;
+
+ # Sort the list and convert to text
+ $items[] = $this->makeUserlinks( $userlinks );
+ $items[] = $block[0]->_watching;
+
+ $lines = Xml::tags( 'div', null, implode( " {$this->dir}", $items ) ) . "\n" ;
+
+ # Sub-entries
+ $lines .= Xml::tags( 'div',
+ array( 'id' => $rci, 'style' => 'display: none;' ),
+ $this->subEntries( $block )
+ ) . "\n";
+
+ $this->rcCacheIndex++;
+ return $lines . "\n";
+ }
+
+ /**
+ * Generate HTML for an arrow or placeholder graphic
+ * @param string $dir One of '', 'd', 'l', 'r'
+ * @param string $alt
+ * @param string $title
+ * @return string HTML "<img>" tag
+ */
+ protected function arrow( $dir, $alt = '', $title = '' ) {
+ global $wgExtensionAssetsPath;
+ $encUrl = htmlspecialchars( $wgExtensionAssetsPath . '/CleanChanges/images/Arr_' . $dir . '.png' );
+ $encAlt = htmlspecialchars( $alt );
+ $encTitle = htmlspecialchars( $title );
+
+ return "<img src=\"$encUrl\" width=\"12\" height=\"12\" alt=\"$encAlt\" title=\"$encTitle\" />";
+ }
+
+ /**
+ * Generate HTML for a right- or left-facing arrow,
+ * depending on language direction.
+ * @return string HTML "<img>" tag
+ */
+ protected function sideArrow() {
+ $dir = $this->getLanguage()->isRTL() ? 'l' : 'r';
+
+ return $this->arrow( $dir, '+', $this->msg( 'rc-enhanced-expand' )->text() );
+ }
+
+ /**
+ * Generate HTML for a down-facing arrow
+ * depending on language direction.
+ * @return string HTML "<img>" tag
+ */
+ protected function downArrow() {
+ return $this->arrow( 'd', '-', $this->msg( 'rc-enhanced-hide' )->text() );
+ }
+
+ /**
+ * Generate HTML for a spacer image
+ * @return string HTML "<img>" tag
+ */
+ protected function spacerArrow() {
+ return $this->arrow( '', codepointToUtf8( 0xa0 ) ); // non-breaking space
+ }
+
+ /**
+ * @param RCCacheEntry[] $block
+ * @return string
+ */
+ protected function subEntries( array $block ) {
+ $lines = '';
+ foreach ( $block as $rcObj ) {
+ $items = array();
+ $log = $this->isLog( $rcObj );
+
+ $time = $rcObj->timestamp;
+ if ( !$log ) {
+ $time = Linker::linkKnown(
+ $rcObj->getTitle(),
+ $rcObj->timestamp,
+ array(),
+ $rcObj->_reqOldId + $rcObj->_reqCurId
+ );
+ }
+
+ $info = $this->getFlags( $rcObj ) . ' ' . $time;
+ $items[] = $this->spacerArrow() . Xml::tags( 'code', null, $info );
+
+ if ( !$log ) {
+ $cur = $rcObj->_curLink;
+ $last = $rcObj->_lastLink;
+
+ if ( $block[0] === $rcObj ) {
+ // no point diffing first to first
+ $cur = $this->message['cur'];
+ }
+
+ $items[] = $this->changeInfo( $cur, $last, $this->getCharacterDifference( $rcObj ) );
+ }
+
+ $items[] = $this->userSeparator;
+
+ if ( $this->isLog( $rcObj ) ) {
+ $items[] = $this->insertLogEntry( $rcObj );
+ } else {
+ $items[] = $rcObj->_user;
+ $items[] = $rcObj->_userInfo;
+ $items[] = $rcObj->_comment;
+ }
+
+ $lines .= '<div>' . implode( " {$this->dir}", $items ) . "</div>\n";
+ }
+ return $lines;
+ }
+
+ /**
+ * @param string $diff
+ * @param string $hist
+ * @param mixed $size
+ * @return string
+ */
+ protected function changeInfo( $diff, $hist, $size ) {
+ if ( is_int( $size ) ) {
+ $size = $this->wrapCharacterDifference( $size );
+ // FIXME: i18n: Hard coded parentheses and spaces.
+ return $this->msg( 'cleanchanges-rcinfo-3' )->rawParams( $diff, $hist, $size)->escaped();
+ } else {
+ return $this->msg( 'cleanchanges-rcinfo-2' )->rawParams( $diff, $hist )->escaped();
+ }
+ }
+
+ /**
+ * Enhanced RC ungrouped line.
+ * @param RCCacheEntry $rcObj
+ * @return string a HTML formated line
+ */
+ protected function recentChangesBlockLine( $rcObj ) {
+ # Flag and Timestamp
+ $info = $this->getFlags( $rcObj ) . ' ' . $rcObj->timestamp;
+ $items[] = $this->spacerArrow() . Xml::tags( 'code', null, $info );
+
+ # Article link
+ $items[] = $rcObj->link;
+
+ if ( !$this->isLog( $rcObj ) ) {
+ $items[] = $this->changeInfo( $rcObj->_diffLink, $rcObj->_histLink,
+ $this->getCharacterDifference( $rcObj )
+ );
+ }
+
+ $items[] = $this->userSeparator;
+
+ if ( $this->isLog( $rcObj ) ) {
+ $items[] = $this->insertLogEntry( $rcObj );
+ } else {
+ $items[] = $rcObj->_user;
+ $items[] = $rcObj->_userInfo;
+ $items[] = $rcObj->_comment;
+ $items[] = $rcObj->_watching;
+ }
+
+ return '<div>' . implode( " {$this->dir}", $items ) . "</div>\n";
+ }
+
+ /**
+ * @param RCCacheEntry $rc
+ * @return string
+ */
+ public function getComment( RCCacheEntry $rc ) {
+ $comment = $rc->getAttribute( 'rc_comment' );
+ $action = '';
+ if ( $comment === '' ) {
+ return $action;
+ } elseif ( $this->isDeleted( $rc, LogPage::DELETED_COMMENT ) ) {
+ $priviledged = $this->getUser()->isAllowed( 'deleterevision' );
+ if ( $priviledged ) {
+ return $action . ' <span class="history-deleted">' . Linker::formatComment( $comment ) . '</span>';
+ }
+ return $action . ' <span class="history-deleted">' . $this->msg( 'rev-deleted-comment' )->escaped() . '</span>';
+ }
+ return $action . Linker::commentBlock( $comment, $rc->getTitle() );
+ }
+
+ /**
+ * Enhanced user tool links, with javascript functionality.
+ * @param int $userId user id, 0 for anons
+ * @param string $userText username
+ * @return array|string Either an array of html and array of messages, or ''
+ * [0]: html span and links to user tools
+ * [1]: array of escaped message strings
+ */
+ public function userToolLinks( $userId, $userText ) {
+ global $wgDisableAnonTalk;
+ $talkable = !( $wgDisableAnonTalk && 0 == $userId );
+
+ /*
+ * Assign each different user a running id. This is used to show user tool
+ * links on demand with javascript, to reduce page size when one user has
+ * multiple changes.
+ *
+ * $linkindex is the running id, and $users contain username -> html snippet
+ * for javascript.
+ */
+
+ static $linkindex = 0;
+ $linkindex++;
+
+ static $users = array();
+ $userindex = array_search( $userText, $users, true );
+ if ( $userindex === false ) {
+ $users[] = $userText;
+ $userindex = count( $users ) -1;
+ }
+
+ global $wgExtensionAssetsPath;
+ $image = Xml::element( 'img', array(
+ 'src' => $wgExtensionAssetsPath . '/CleanChanges/images/showuserlinks.png',
+ 'alt' => $this->msg( 'cleanchanges-showuserlinks' )->text(),
+ 'title' => $this->msg( 'cleanchanges-showuserlinks' )->text(),
+ 'width' => '15',
+ 'height' => '11',
+ )
+ );
+
+ $rci = 'RCUI' . $userindex;
+ $rcl = 'RCUL' . $linkindex;
+ $rcm = 'RCUM' . $linkindex;
+ $toggleLink = "javascript:showUserInfo('wgUserInfo$rci', '$rcl' )";
+ $tl = Xml::tags( 'span', array( 'id' => $rcm ),
+ Xml::tags( 'a', array( 'href' => $toggleLink ), $image ) );
+ $tl .= Xml::element( 'span', array( 'id' => $rcl ), ' ' );
+
+ $items = array();
+ if ( $talkable ) {
+ $items[] = Linker::userTalkLink( $userId, $userText );
+ }
+ if ( $userId ) {
+ $targetPage = SpecialPage::getTitleFor( 'Contributions', $userText );
+ $items[] = Linker::linkKnown( $targetPage,
+ $this->msg( 'contribslink' )->escaped() );
+ }
+ if ( $this->getUser()->isAllowed( 'block' ) ) {
+ $items[] = Linker::blockLink( $userId, $userText );
+ }
+ if ( $userId ) {
+ $userrightsPage = new UserrightsPage();
+ if ( $userrightsPage->userCanChangeRights( User::newFromId( $userId ) ) ) {
+ $targetPage = SpecialPage::getTitleFor( 'Userrights', $userText );
+ $items[] = Linker::linkKnown( $targetPage,
+ $this->msg( 'cleanchanges-changerightslink' )->escaped() );
+ }
+ }
+
+ if ( $items ) {
+ $msg = $this->msg( 'parentheses' )
+ ->rawParams( $this->getLanguage()->pipeList( $items ) )
+ ->escaped();
+ $data = array( "wgUserInfo$rci" => $msg );
+
+ return array( $tl, $data );
+ } else {
+ return '';
+ }
+ }
+
+ /**
+ * Makes aggregated list of contributors for a changes group.
+ * Example: [Usera; AnotherUser; ActiveUser ‎(2×); Userabc ‎(6×)]
+ */
+ protected function makeUserlinks( $userlinks ) {
+ /*
+ * User with least changes first, and fallback to alphabetical sorting if
+ * multiple users have same number of changes.
+ */
+ krsort( $userlinks );
+ asort( $userlinks );
+
+ $users = array();
+ foreach ( $userlinks as $userlink => $count ) {
+ $text = $userlink;
+ if ( $count > 1 ) {
+ $lang = $this->getLanguage();
+ $count = $lang->formatNum( $count );
+ $text .= "{$lang->getDirMark()}×$count";
+ }
+ array_push( $users, $text );
+ }
+ $text = implode( '; ', $users );
+ return $this->XMLwrapper( 'changedby', "[$text]", 'span', false );
+ }
+
+ /**
+ * @param RCCacheEntry $rc
+ * @param array $overrides
+ * @return string
+ */
+ protected function getFlags( $rc, array $overrides = null ) {
+ // @todo We assume all characters are of equal width, which they may be not
+ $map = array(
+ # item => field letter-or-something
+ 'new' => array( 'rc_new', self::flag( 'newpage' ) ),
+ 'minor' => array( 'rc_minor', self::flag( 'minor' ) ),
+ 'bot' => array( 'rc_bot', self::flag( 'bot' ) ),
+ );
+
+ static $nothing = "\xc2\xa0";
+
+ $items = array();
+ foreach ( $map as $item => $data ) {
+ list( $field, $flag ) = $data;
+ $bool = isset( $overrides[$item] ) ? $overrides[$item] : $rc->getAttribute( $field );
+ $items[] = $bool ? $flag : $nothing;
+ }
+
+ if ( $this->getUser()->useRCPatrol() ) {
+ if ( isset( $overrides['patrol'] ) ) {
+ $items[] = $overrides['patrol'] ? self::flag( 'unpatrolled' ) : $nothing;
+ } elseif ( $this->showAsUnpatrolled( $rc ) ) {
+ $items[] = self::flag( 'unpatrolled' );
+ } else {
+ $items[] = $nothing;
+ }
+ }
+
+ return implode( '', $items );
+ }
+
+ /**
+ * @param RCCacheEntry $new
+ * @param RCCacheEntry|null $old
+ * @return mixed
+ */
+ protected function getCharacterDifference( $new, $old = null ) {
+ if ( $old === null ) {
+ $old = $new;
+ }
+
+ $newSize = $new->getAttribute( 'rc_new_len' );
+ $oldSize = $old->getAttribute( 'rc_old_len' );
+ if ( $newSize === null || $oldSize === null ) {
+ // @todo Return null instead of string here?
+ return '';
+ }
+
+ return $newSize - $oldSize;
+ }
+
+ /**
+ * @param mixed $szdiff Character difference.
+ * @return string
+ */
+ public function wrapCharacterDifference( $szdiff ) {
+ global $wgRCChangedSizeThreshold;
+ static $cache = array();
+ if ( !isset( $cache[$szdiff] ) ) {
+ // @todo FIXME: Hard coded text (+).
+ $prefix = $szdiff > 0 ? '+' : '';
+ $cache[$szdiff] = $prefix . $this->msg( 'rc-change-size',
+ $this->getLanguage()->formatNum( $szdiff )
+ )->text();
+ }
+
+ $tag = 'span';
+ if ( abs( $szdiff ) > abs( $wgRCChangedSizeThreshold ) ) {
+ $tag = 'strong';
+ }
+
+ if ( $szdiff === 0 ) {
+ return $this->XMLwrapper( 'mw-plusminus-null', $cache[$szdiff], $tag );
+ } elseif ( $szdiff > 0 ) {
+ return $this->XMLwrapper( 'mw-plusminus-pos', $cache[$szdiff], $tag );
+ }
+ return $this->XMLwrapper( 'mw-plusminus-neg', $cache[$szdiff], $tag );
+ }
+
+ /**
+ * @param $class
+ * @param $content
+ * @param string $tag
+ * @param bool $escape
+ * @return string
+ */
+ protected function XMLwrapper( $class, $content, $tag = 'span', $escape = true ) {
+ if ( $escape ) {
+ return Xml::element( $tag, array( 'class' => $class ), $content );
+ }
+ return Xml::tags( $tag, array( 'class' => $class ), $content );
+ }
+}
diff --git a/MLEB/CleanChanges/Filters.php b/MLEB/CleanChanges/Filters.php
new file mode 100644
index 00000000..d6e9939e
--- /dev/null
+++ b/MLEB/CleanChanges/Filters.php
@@ -0,0 +1,112 @@
+<?php
+
+class CCFilters {
+
+ /**
+ * @param array $conds
+ * @param array $tables
+ * @param array $join_conds
+ * @param FormOptions $opts
+ * @return bool
+ */
+ public static function user( &$conds, &$tables, &$join_conds, FormOptions $opts ) {
+ global $wgRequest;
+ $opts->add( 'users', '' );
+ $users = $wgRequest->getVal( 'users' );
+ if ( $users === null ) {
+ return true;
+ }
+
+ $idfilters = array();
+ $userArr = explode( '|', $users );
+ foreach ( $userArr as $u ) {
+ $id = User::idFromName( $u );
+ if ( $id !== null ) {
+ $idfilters[] = $id;
+ }
+ }
+ if ( count( $idfilters ) ) {
+ $dbr = wfGetDB( DB_SLAVE );
+ $conds[] = 'rc_user IN (' . $dbr->makeList( $idfilters ) . ')';
+ $opts->setValue( 'users', $users );
+ }
+
+ return true;
+ }
+
+ /**
+ * @param $items array
+ * @param $opts FormOptions
+ * @return bool
+ */
+ public static function userForm( &$items, FormOptions $opts ) {
+ $opts->consumeValue( 'users' );
+ global $wgRequest;
+
+ $default = $wgRequest->getVal( 'users', '' );
+ $items['users'] = Xml::inputLabelSep( wfMessage( 'cleanchanges-users' )->text(), 'users',
+ 'mw-users', 40, $default );
+ return true;
+ }
+
+ /**
+ * @param array $conds
+ * @param array $tables
+ * @param array $join_conds
+ * @param FormOptions $opts
+ * @return bool
+ */
+ public static function trailer( &$conds, &$tables, &$join_conds, FormOptions $opts ) {
+ global $wgRequest;
+ $opts->add( 'trailer', '' );
+ $trailer = $wgRequest->getVal( 'trailer' );
+ if ( $trailer === null ) return true;
+
+ $dbr = wfGetDB( DB_SLAVE );
+ $conds[] = 'rc_title ' . $dbr->buildLike( $dbr->anyString(), $trailer );
+ $opts->setValue( 'trailer', $trailer );
+
+ return true;
+ }
+
+ /**
+ * @param array $items
+ * @param FormOptions $opts
+ * @return bool
+ */
+ public static function trailerForm( &$items, FormOptions $opts ) {
+ $opts->consumeValue( 'trailer' );
+
+ global $wgRequest;
+ $default = $wgRequest->getVal( 'trailer', '' );
+ /**
+ * @var Language $wgLang
+ */
+ global $wgLang;
+ if ( is_callable( array( 'LanguageNames', 'getNames' ) ) ) {
+ $languages = LanguageNames::getNames( $wgLang->getCode(),
+ LanguageNames::FALLBACK_NORMAL,
+ LanguageNames::LIST_MW
+ );
+ } else {
+ $languages = Language::getLanguageNames( false );
+ }
+ ksort( $languages );
+ $options = Xml::option( wfMessage( 'cleanchanges-language-na' )->text(), '', $default === '' );
+ foreach ( $languages as $code => $name ) {
+ $selected = ( "/$code" === $default );
+ $options .= Xml::option( "$code - $name", "/$code", $selected ) . "\n";
+ }
+ $str =
+ Xml::openElement( 'select', array(
+ 'name' => 'trailer',
+ 'class' => 'mw-language-selector',
+ 'id' => 'sp-rc-language',
+ ) ) .
+ $options .
+ Xml::closeElement( 'select' );
+
+ $items['tailer'] = array( wfMessage( 'cleanchanges-language' )->escaped(), $str );
+ return true;
+ }
+}
diff --git a/MLEB/CleanChanges/RELEASE-NOTES b/MLEB/CleanChanges/RELEASE-NOTES
new file mode 100644
index 00000000..26cdcc46
--- /dev/null
+++ b/MLEB/CleanChanges/RELEASE-NOTES
@@ -0,0 +1,5 @@
+== CleanChanges 2014.11 ==
+Released at 2014-11-29.
+
+=== Noteworthy changes ===
+* Only localisation updates.
diff --git a/MLEB/CleanChanges/Resources.php b/MLEB/CleanChanges/Resources.php
new file mode 100644
index 00000000..2a8b36c5
--- /dev/null
+++ b/MLEB/CleanChanges/Resources.php
@@ -0,0 +1,17 @@
+<?php
+
+global $wgResourceModules;
+
+$resourcePaths = array(
+ 'localBasePath' => __DIR__,
+ 'remoteExtPath' => 'CleanChanges'
+);
+
+$wgResourceModules['ext.cleanchanges'] = array(
+ 'scripts' => 'resources/cleanchanges.js',
+) + $resourcePaths;
+
+$wgResourceModules['ext.cleanchanges.uls'] = array(
+ 'scripts' => 'resources/cleanchanges.uls.js',
+ 'styles' => 'resources/cleanchanges.uls.css',
+) + $resourcePaths;
diff --git a/MLEB/CleanChanges/composer.json b/MLEB/CleanChanges/composer.json
new file mode 100644
index 00000000..beb266f8
--- /dev/null
+++ b/MLEB/CleanChanges/composer.json
@@ -0,0 +1,11 @@
+{
+ "name": "mediawiki/cleanchanges",
+ "type": "mediawiki-extension",
+ "description": "More compact display of recent changes lists",
+ "homepage": "https://www.mediawiki.org/wiki/Extension:CleanChanges",
+ "license": "GPL-2.0+",
+
+ "require": {
+ "composer/installers": "*"
+ }
+}
diff --git a/MLEB/CleanChanges/i18n/af.json b/MLEB/CleanChanges/i18n/af.json
new file mode 100644
index 00000000..5c2c5635
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/af.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Naudefj"
+ ]
+ },
+ "cleanchanges-changerightslink": "verander groepe",
+ "cleanchanges-desc": "Meer kompakte weergawe van die [[Special:RecentChanges|lys van onlangse wysigings]]",
+ "cleanchanges-language": "Taal:",
+ "cleanchanges-language-na": "Alle tale",
+ "cleanchanges-users": "Gebruikers (geskei deur \"|\"):",
+ "cleanchanges-showuserlinks": "Wys gebruiker se skakels"
+}
diff --git a/MLEB/CleanChanges/i18n/am.json b/MLEB/CleanChanges/i18n/am.json
new file mode 100644
index 00000000..7c16bfa3
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/am.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Codex Sinaiticus"
+ ]
+ },
+ "cleanchanges-language": "ቋንቋ፦",
+ "cleanchanges-language-na": "ሁሉ"
+}
diff --git a/MLEB/CleanChanges/i18n/an.json b/MLEB/CleanChanges/i18n/an.json
new file mode 100644
index 00000000..eb2863dc
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/an.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Juanpabl"
+ ]
+ },
+ "cleanchanges-language-na": "Totz"
+}
diff --git a/MLEB/CleanChanges/i18n/ar.json b/MLEB/CleanChanges/i18n/ar.json
new file mode 100644
index 00000000..ab6e677e
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/ar.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Meno25",
+ "OsamaK"
+ ]
+ },
+ "cleanchanges-changerightslink": "تغيير المجموعات",
+ "cleanchanges-desc": "عرض أكثر ضغطا ل [[Special:RecentChanges|قائمة أحدث التغييرات]]",
+ "cleanchanges-language": "اللغة:",
+ "cleanchanges-language-na": "الكل",
+ "cleanchanges-users": "المستخدمون (للفصل: |):",
+ "cleanchanges-showuserlinks": "إظهار وصلات المستخدم"
+}
diff --git a/MLEB/CleanChanges/i18n/arc.json b/MLEB/CleanChanges/i18n/arc.json
new file mode 100644
index 00000000..1ec471cd
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/arc.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Basharh",
+ "Michaelovic"
+ ]
+ },
+ "cleanchanges-desc": "[[Special:RecentChanges|ܫܘܚܠܦ̈ܐ ܚܕ̈ܬܐ]]ܚܙܝܬܐ ܙܥܘܪܬܐ ܕ",
+ "cleanchanges-language": "ܠܫܢܐ:",
+ "cleanchanges-language-na": "ܟܠ",
+ "cleanchanges-showuserlinks": "ܚܘܝ ܐܣܘܪ̈ܐ ܕܡܦܠܚܢܐ"
+}
diff --git a/MLEB/CleanChanges/i18n/arz.json b/MLEB/CleanChanges/i18n/arz.json
new file mode 100644
index 00000000..24b5dd31
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/arz.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Meno25",
+ "Ouda"
+ ]
+ },
+ "cleanchanges-changerightslink": "تغيير المجموعات",
+ "cleanchanges-desc": "عرض أكثر ضغطا ل [[Special:RecentChanges|قائمة أحدث التغييرات]]",
+ "cleanchanges-language": "اللغة:",
+ "cleanchanges-language-na": "الكل",
+ "cleanchanges-users": "المستخدمون (للفصل: |):",
+ "cleanchanges-showuserlinks": "إظهار وصلات المستخدم"
+}
diff --git a/MLEB/CleanChanges/i18n/ast.json b/MLEB/CleanChanges/i18n/ast.json
new file mode 100644
index 00000000..63ba599b
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/ast.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Esbardu",
+ "Xuacu"
+ ]
+ },
+ "cleanchanges-changerightslink": "camudar grupos",
+ "cleanchanges-desc": "Vísualización más compacta de la [[Special:RecentChanges|llista de cambeos recientes]]",
+ "cleanchanges-language": "Llingua:",
+ "cleanchanges-language-na": "Toos",
+ "cleanchanges-users": "Usuarios (Sep: |):",
+ "cleanchanges-showuserlinks": "Amosar enllaces d'usuariu"
+}
diff --git a/MLEB/CleanChanges/i18n/az.json b/MLEB/CleanChanges/i18n/az.json
new file mode 100644
index 00000000..1268368d
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/az.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cekli829"
+ ]
+ },
+ "cleanchanges-language-na": "Hamısı"
+}
diff --git a/MLEB/CleanChanges/i18n/azb.json b/MLEB/CleanChanges/i18n/azb.json
new file mode 100644
index 00000000..6588f322
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/azb.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ebrahimi-amir",
+ "පසිඳු කාවින්ද"
+ ]
+ },
+ "cleanchanges-language": "دیل:",
+ "cleanchanges-language-na": "بوتون",
+ "cleanchanges-users": "ایستیفاده‌چی‌لر (آییرماق: |):"
+}
diff --git a/MLEB/CleanChanges/i18n/ba.json b/MLEB/CleanChanges/i18n/ba.json
new file mode 100644
index 00000000..7873ba0b
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/ba.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Assele"
+ ]
+ },
+ "cleanchanges-changerightslink": "төркөмдәрҙе үҙгәртергә",
+ "cleanchanges-desc": "[[Special:RecentChanges|Һуңғы үҙгәртеүҙәр исемлегенең]] ҡыҫылған күренеше",
+ "cleanchanges-language": "Тел:",
+ "cleanchanges-language-na": "Барыһы ла",
+ "cleanchanges-users": "Ҡатнашыусылар (Бүлгес: |):",
+ "cleanchanges-showuserlinks": "Ҡатнашыусы һылтанмаларын күрһәтергә"
+}
diff --git a/MLEB/CleanChanges/i18n/bcl.json b/MLEB/CleanChanges/i18n/bcl.json
new file mode 100644
index 00000000..23003710
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/bcl.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Geopoet"
+ ]
+ },
+ "cleanchanges-changerightslink": "ribayan an mga grupo",
+ "cleanchanges-desc": "Mas masidsidong pagpapahiling kan [[Special:RecentChanges|listahan kan dae pa sana nahahaloy na mga kaliwatan]]",
+ "cleanchanges-language": "Lengguwahe:",
+ "cleanchanges-language-na": "Gabos",
+ "cleanchanges-users": "Mga Paragamit (Pagsuhayon:|):",
+ "cleanchanges-showuserlinks": "Ipahiling an kasugpunan nin paragamit"
+}
diff --git a/MLEB/CleanChanges/i18n/be-tarask.json b/MLEB/CleanChanges/i18n/be-tarask.json
new file mode 100644
index 00000000..734d4103
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/be-tarask.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "EugeneZelenko",
+ "Jim-by"
+ ]
+ },
+ "cleanchanges-changerightslink": "зьмяніць групы",
+ "cleanchanges-desc": "Болей кампактны паказ [[Special:RecentChanges|сьпісу апошніх зьменаў]]",
+ "cleanchanges-language": "Мова:",
+ "cleanchanges-language-na": "Усе",
+ "cleanchanges-users": "Удзельнікі (разьдзяляльнік: |):",
+ "cleanchanges-showuserlinks": "Паказваць спасылкі ўдзельнікаў"
+}
diff --git a/MLEB/CleanChanges/i18n/bg.json b/MLEB/CleanChanges/i18n/bg.json
new file mode 100644
index 00000000..8ddf65da
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/bg.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "DCLXVI",
+ "Spiritia"
+ ]
+ },
+ "cleanchanges-changerightslink": "промяна на групите",
+ "cleanchanges-desc": "По-компактно показване на [[Special:RecentChanges|списъка с последните промени]]",
+ "cleanchanges-language": "Език:",
+ "cleanchanges-language-na": "Всички",
+ "cleanchanges-users": "Потребители (Разд: |):",
+ "cleanchanges-showuserlinks": "Показване на потребителските връзки"
+}
diff --git a/MLEB/CleanChanges/i18n/bn.json b/MLEB/CleanChanges/i18n/bn.json
new file mode 100644
index 00000000..c2327e8b
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/bn.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Wikitanvir",
+ "Zaheen"
+ ]
+ },
+ "cleanchanges-changerightslink": "দল পরিবর্তন করুন",
+ "cleanchanges-desc": "[[Special:RecentChanges|সাম্প্রতিক পরিবর্তনসমূহের তালিকার]] আরও সংহত প্রদর্শন",
+ "cleanchanges-language": "ভাষা:",
+ "cleanchanges-language-na": "সকল",
+ "cleanchanges-users": "ব্যবহারকারী (পার্থক্যকারী: |):",
+ "cleanchanges-showuserlinks": "ব্যবহারকারী লিংকগুলো দেখাও"
+}
diff --git a/MLEB/CleanChanges/i18n/br.json b/MLEB/CleanChanges/i18n/br.json
new file mode 100644
index 00000000..5dec41e0
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/br.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Fulup"
+ ]
+ },
+ "cleanchanges-changerightslink": "kemmañ a ra ar strolladoù",
+ "cleanchanges-desc": "Doare diskouez krennoc'h evit [[Special:RecentChanges|roll ar c'hemmoù diwezhañ]]",
+ "cleanchanges-language": "Yezh :",
+ "cleanchanges-language-na": "An holl",
+ "cleanchanges-users": "Implijerien (Dispart. gant |) :",
+ "cleanchanges-showuserlinks": "Diskwel liammoù an implijer-mañ"
+}
diff --git a/MLEB/CleanChanges/i18n/bs.json b/MLEB/CleanChanges/i18n/bs.json
new file mode 100644
index 00000000..338e99e2
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/bs.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "CERminator"
+ ]
+ },
+ "cleanchanges-changerightslink": "promijeni grupe",
+ "cleanchanges-desc": "Kompaktniji prikaz [[Special:RecentChanges|spiska nedavnih promjena]]",
+ "cleanchanges-language": "Jezik:",
+ "cleanchanges-language-na": "Sve",
+ "cleanchanges-users": "Korisnici: (Razdv: |):",
+ "cleanchanges-showuserlinks": "Prikaži korisničke linkove"
+}
diff --git a/MLEB/CleanChanges/i18n/ca.json b/MLEB/CleanChanges/i18n/ca.json
new file mode 100644
index 00000000..f2fbae35
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/ca.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "El libre",
+ "SMP",
+ "Solde"
+ ]
+ },
+ "cleanchanges-changerightslink": "canvia els grups",
+ "cleanchanges-desc": "Versió més compacta de la [[Special:RecentChanges|llista de canvis recents]]",
+ "cleanchanges-language": "Idioma:",
+ "cleanchanges-language-na": "Tot",
+ "cleanchanges-users": "Usuaris (Separador: |):",
+ "cleanchanges-showuserlinks": "Mostra els enllaços de l'usuari/a"
+}
diff --git a/MLEB/CleanChanges/i18n/ce.json b/MLEB/CleanChanges/i18n/ce.json
new file mode 100644
index 00000000..ba3f844b
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/ce.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Sasan700",
+ "Умар"
+ ]
+ },
+ "cleanchanges-changerightslink": "хийца тобанаш",
+ "cleanchanges-desc": "Алсамо тIеIовдан гайтар [[Special:RecentChanges|керла нисдарийн могӀам]]",
+ "cleanchanges-language": "Мотт:",
+ "cleanchanges-language-na": "Массо",
+ "cleanchanges-users": "Декъашхой (буькъарг: |):",
+ "cleanchanges-showuserlinks": "Декъашхойн хьажоргаш гойту"
+}
diff --git a/MLEB/CleanChanges/i18n/cs.json b/MLEB/CleanChanges/i18n/cs.json
new file mode 100644
index 00000000..59fae4f8
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/cs.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Danny B.",
+ "Matěj Grabovský"
+ ]
+ },
+ "cleanchanges-changerightslink": "změnit skupiny",
+ "cleanchanges-desc": "Kompaktnější zobrazení [[Special:RecentChanges|seznamu posledních změn]]",
+ "cleanchanges-language": "Jazyk:",
+ "cleanchanges-language-na": "Všechny",
+ "cleanchanges-users": "Uživatelé (oddělovač |):",
+ "cleanchanges-showuserlinks": "Ukázat uživatelské odkazy"
+}
diff --git a/MLEB/CleanChanges/i18n/cu.json b/MLEB/CleanChanges/i18n/cu.json
new file mode 100644
index 00000000..223dfcc9
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/cu.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "ОйЛ"
+ ]
+ },
+ "cleanchanges-language": "ѩꙁꙑкъ :"
+}
diff --git a/MLEB/CleanChanges/i18n/cy.json b/MLEB/CleanChanges/i18n/cy.json
new file mode 100644
index 00000000..fc329bb7
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/cy.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Lloffiwr"
+ ]
+ },
+ "cleanchanges-changerightslink": "newid grwpiau",
+ "cleanchanges-desc": "Dangos manylion cryno yn unig ar y [[Special:RecentChanges|rhestr newidiadau diweddar]]",
+ "cleanchanges-language": "Iaith:",
+ "cleanchanges-language-na": "Oll",
+ "cleanchanges-users": "Defnyddwyr (Gwah: |):",
+ "cleanchanges-showuserlinks": "Dangos cysylltiadau at ddefnyddwyr"
+}
diff --git a/MLEB/CleanChanges/i18n/da.json b/MLEB/CleanChanges/i18n/da.json
new file mode 100644
index 00000000..102c1154
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/da.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Byrial",
+ "Christian List"
+ ]
+ },
+ "cleanchanges-changerightslink": "ændr grupper",
+ "cleanchanges-desc": "Mere kompakt visning af [[Special:RecentChanges|seneste ændringer]]",
+ "cleanchanges-language": "Sprog:",
+ "cleanchanges-language-na": "Alle",
+ "cleanchanges-users": "Brugere (adskil med |):",
+ "cleanchanges-showuserlinks": "Vis brugerhenvisninger"
+}
diff --git a/MLEB/CleanChanges/i18n/de.json b/MLEB/CleanChanges/i18n/de.json
new file mode 100644
index 00000000..016e53d8
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/de.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kghbln",
+ "Raimond Spekking"
+ ]
+ },
+ "cleanchanges-changerightslink": "Gruppen ändern",
+ "cleanchanges-desc": "Ermöglicht eine kompaktere Anzeige der [[Special:RecentChanges|letzten Änderungen]]",
+ "cleanchanges-language": "Sprache:",
+ "cleanchanges-language-na": "Alle",
+ "cleanchanges-users": "Benutzer (Trennzeichen:&nbsp;„|“):",
+ "cleanchanges-showuserlinks": "Zeige Benutzerlinks"
+}
diff --git a/MLEB/CleanChanges/i18n/diq.json b/MLEB/CleanChanges/i18n/diq.json
new file mode 100644
index 00000000..08648f02
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/diq.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Erdemaslancan",
+ "Mirzali"
+ ]
+ },
+ "cleanchanges-language": "Zıwan:",
+ "cleanchanges-language-na": "Pêro",
+ "cleanchanges-users": "Karberi (Ciya: |):"
+}
diff --git a/MLEB/CleanChanges/i18n/dsb.json b/MLEB/CleanChanges/i18n/dsb.json
new file mode 100644
index 00000000..3abe40ea
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/dsb.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Michawiki"
+ ]
+ },
+ "cleanchanges-changerightslink": "kupki změniś",
+ "cleanchanges-desc": "Kompaktnejše zwobraznjenje [[Special:RecentChanges|lisćiny aktualnych změnow]]",
+ "cleanchanges-language": "Rěc:",
+ "cleanchanges-language-na": "Wšykne",
+ "cleanchanges-users": "Wužywarje (źěleńske znamješko: |);",
+ "cleanchanges-showuserlinks": "Wužywarske wótkaze pokazaś"
+}
diff --git a/MLEB/CleanChanges/i18n/ee.json b/MLEB/CleanChanges/i18n/ee.json
new file mode 100644
index 00000000..e4f515f9
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/ee.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Natsubee"
+ ]
+ },
+ "cleanchanges-changerightslink": "ɖɔli hamewo",
+ "cleanchanges-language": "Gbe:",
+ "cleanchanges-language-na": "Wokatã"
+}
diff --git a/MLEB/CleanChanges/i18n/el.json b/MLEB/CleanChanges/i18n/el.json
new file mode 100644
index 00000000..00386d97
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/el.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Consta",
+ "Crazymadlover",
+ "Omnipaedista",
+ "Protnet"
+ ]
+ },
+ "cleanchanges-changerightslink": "αλλαγή ομάδων",
+ "cleanchanges-desc": "Πιο συμπαγής προβολή της [[Special:RecentChanges|λίστας προσφάτων αλλαγών]]",
+ "cleanchanges-language": "Γλώσσα:",
+ "cleanchanges-language-na": "Όλες",
+ "cleanchanges-users": "Χρήστες (διαχωρισμένοι με |):",
+ "cleanchanges-showuserlinks": "Προβολή συνδέσμων χρήστη"
+}
diff --git a/MLEB/CleanChanges/i18n/en.json b/MLEB/CleanChanges/i18n/en.json
new file mode 100644
index 00000000..8eab9667
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/en.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": []
+ },
+ "cleanchanges-changerightslink": "change groups",
+ "cleanchanges-desc": "More compact display of the [[Special:RecentChanges|recent changes list]]",
+ "cleanchanges-language": "Language:",
+ "cleanchanges-language-na": "All",
+ "cleanchanges-users": "Users (Sep: |):",
+ "cleanchanges-showuserlinks": "Show user links",
+ "cleanchanges-rcinfo-2": "($1; $2)",
+ "cleanchanges-rcinfo-3": "($1; $2; $3)"
+} \ No newline at end of file
diff --git a/MLEB/CleanChanges/i18n/eo.json b/MLEB/CleanChanges/i18n/eo.json
new file mode 100644
index 00000000..ef0ce15d
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/eo.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Melancholie",
+ "Yekrats"
+ ]
+ },
+ "cleanchanges-changerightslink": "ŝanĝu grupojn",
+ "cleanchanges-desc": "Pli kompakta versio de la [[Special:RecentChanges|listo de lastaj ŝanĝoj]]",
+ "cleanchanges-language": "Lingvo:",
+ "cleanchanges-language-na": "Ĉiuj",
+ "cleanchanges-users": "Uzantoj (disigilo: |):",
+ "cleanchanges-showuserlinks": "Vidi uzantoj ligiloj"
+}
diff --git a/MLEB/CleanChanges/i18n/es.json b/MLEB/CleanChanges/i18n/es.json
new file mode 100644
index 00000000..5fedd987
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/es.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Sanbec"
+ ]
+ },
+ "cleanchanges-changerightslink": "cambiar grupos",
+ "cleanchanges-desc": "Visualización más compacta de la [[Special:RecentChanges|lista de cambios recientes]]",
+ "cleanchanges-language": "Idioma:",
+ "cleanchanges-language-na": "Todos",
+ "cleanchanges-users": "Usuarios (Sep: |):",
+ "cleanchanges-showuserlinks": "Mostrar enlaces de usuario"
+}
diff --git a/MLEB/CleanChanges/i18n/et.json b/MLEB/CleanChanges/i18n/et.json
new file mode 100644
index 00000000..36dc395b
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/et.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Avjoska",
+ "Pikne"
+ ]
+ },
+ "cleanchanges-changerightslink": "muuda rühmi",
+ "cleanchanges-desc": "Kompaktsem ülevaade [[Special:RecentChanges|viimastest muudatustest]]",
+ "cleanchanges-language": "Keel:",
+ "cleanchanges-language-na": "Kõik",
+ "cleanchanges-users": "Kasutajad (erald:&nbsp;|):",
+ "cleanchanges-showuserlinks": "Näita kasutajalinke"
+}
diff --git a/MLEB/CleanChanges/i18n/eu.json b/MLEB/CleanChanges/i18n/eu.json
new file mode 100644
index 00000000..6d49c82b
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/eu.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "An13sa",
+ "Kobazulo"
+ ]
+ },
+ "cleanchanges-changerightslink": "taldeak aldatu",
+ "cleanchanges-desc": "Bistaratze trinkoagoa [[Special:RecentChanges|aldaketa berrien zerrendarako]]",
+ "cleanchanges-language": "Hizkuntza:",
+ "cleanchanges-language-na": "Guztiak",
+ "cleanchanges-users": "Erabiltzaileak (\"|\" ikurrarekin bereizirik)",
+ "cleanchanges-showuserlinks": "Erabiltzaileen estekak erakutsi"
+}
diff --git a/MLEB/CleanChanges/i18n/fa.json b/MLEB/CleanChanges/i18n/fa.json
new file mode 100644
index 00000000..18402c55
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/fa.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ebraminio",
+ "Huji",
+ "Mjbmr"
+ ]
+ },
+ "cleanchanges-changerightslink": "گروه‌های تغییر",
+ "cleanchanges-desc": "نمایش فشرده‌تری از [[Special:RecentChanges|فهرست تغییرات اخیر]]",
+ "cleanchanges-language": "زبان:",
+ "cleanchanges-language-na": "همه",
+ "cleanchanges-users": "کاربران (جدا کردن با: |):",
+ "cleanchanges-showuserlinks": "نمایش پیوندهای کاربر",
+ "cleanchanges-rcinfo-2": "($1؛ $2)",
+ "cleanchanges-rcinfo-3": "($1؛ $2؛ $3)"
+}
diff --git a/MLEB/CleanChanges/i18n/fi.json b/MLEB/CleanChanges/i18n/fi.json
new file mode 100644
index 00000000..d7064c2b
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/fi.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Nike",
+ "Vililikku"
+ ]
+ },
+ "cleanchanges-changerightslink": "muokkaa ryhmiä",
+ "cleanchanges-desc": "Tiivistetymmät [[Special:RecentChanges|muutoslistaukset]].",
+ "cleanchanges-language": "Kieli:",
+ "cleanchanges-language-na": "Kaikki",
+ "cleanchanges-users": "Käyttäjät (erotin: |)",
+ "cleanchanges-showuserlinks": "Näytä käyttäjälinkit"
+}
diff --git a/MLEB/CleanChanges/i18n/fr.json b/MLEB/CleanChanges/i18n/fr.json
new file mode 100644
index 00000000..5de13026
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/fr.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Grondin",
+ "IAlex",
+ "Verdy p"
+ ]
+ },
+ "cleanchanges-changerightslink": "changer les groupes",
+ "cleanchanges-desc": "Affichage plus compact de la [[Special:RecentChanges|liste des modifications récentes]]",
+ "cleanchanges-language": "Langue :",
+ "cleanchanges-language-na": "Tous",
+ "cleanchanges-users": "Utilisateurs (sép. par |) :",
+ "cleanchanges-showuserlinks": "Afficher les liens de cet utilisateur",
+ "cleanchanges-rcinfo-2": "($1 ; $2)",
+ "cleanchanges-rcinfo-3": "($1 ; $2 ; $3)"
+}
diff --git a/MLEB/CleanChanges/i18n/frp.json b/MLEB/CleanChanges/i18n/frp.json
new file mode 100644
index 00000000..076bc944
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/frp.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "ChrisPtDe"
+ ]
+ },
+ "cleanchanges-changerightslink": "changiér les tropes",
+ "cleanchanges-language": "Lengoua :",
+ "cleanchanges-language-na": "Tôs",
+ "cleanchanges-users": "Usanciérs (sèp. per |) :",
+ "cleanchanges-showuserlinks": "Fâre vêre los lims a l’usanciér"
+}
diff --git a/MLEB/CleanChanges/i18n/fy.json b/MLEB/CleanChanges/i18n/fy.json
new file mode 100644
index 00000000..5f356597
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/fy.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "SK-luuut",
+ "Snakesteuben"
+ ]
+ },
+ "cleanchanges-changerightslink": "feroarje groepen",
+ "cleanchanges-desc": "Kompaktere werjefte fan de [[Special:RecentChanges|list mei lêste feroarings]]",
+ "cleanchanges-language": "Taal:",
+ "cleanchanges-language-na": "Alle talen",
+ "cleanchanges-users": "Meidoggers (Skiedingsteken: |):",
+ "cleanchanges-showuserlinks": "Meidoggerskeppelingen sjen litte"
+}
diff --git a/MLEB/CleanChanges/i18n/ga.json b/MLEB/CleanChanges/i18n/ga.json
new file mode 100644
index 00000000..a4905c3f
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/ga.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Alison"
+ ]
+ },
+ "cleanchanges-language": "Teanga:",
+ "cleanchanges-language-na": "An t-iomlán",
+ "cleanchanges-users": "Úsáideoirí (Sep: |):"
+}
diff --git a/MLEB/CleanChanges/i18n/gl.json b/MLEB/CleanChanges/i18n/gl.json
new file mode 100644
index 00000000..c26b043e
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/gl.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Alma",
+ "Toliño"
+ ]
+ },
+ "cleanchanges-changerightslink": "mudar grupos",
+ "cleanchanges-desc": "Unha mostra máis compacta da [[Special:RecentChanges|lista de cambios recentes]]",
+ "cleanchanges-language": "Lingua:",
+ "cleanchanges-language-na": "Todas",
+ "cleanchanges-users": "Usuarios (separados por |):",
+ "cleanchanges-showuserlinks": "Mostrar as ligazóns de usuario"
+}
diff --git a/MLEB/CleanChanges/i18n/grc.json b/MLEB/CleanChanges/i18n/grc.json
new file mode 100644
index 00000000..3a311044
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/grc.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Crazymadlover",
+ "Omnipaedista"
+ ]
+ },
+ "cleanchanges-changerightslink": "ἀλλάττειν ὁμάδας",
+ "cleanchanges-desc": "Ἔτι συμπεπυκνωμένη δεῖξις τῆς [[Special:RecentChanges|καταλογῆς προσφάτων μεταβολῶν]]",
+ "cleanchanges-language": "Γλῶττα:",
+ "cleanchanges-language-na": "Ἅπασαι",
+ "cleanchanges-users": "Χρώμενοι (Διαχ: |):",
+ "cleanchanges-showuserlinks": "Δεικνύναι συνδέσμους χρωμένου"
+}
diff --git a/MLEB/CleanChanges/i18n/gsw.json b/MLEB/CleanChanges/i18n/gsw.json
new file mode 100644
index 00000000..ca1ca5f9
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/gsw.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Als-Chlämens",
+ "Als-Holder"
+ ]
+ },
+ "cleanchanges-changerightslink": "Gruppen ändere",
+ "cleanchanges-desc": "Kompakteri Aazeig vu dr [[Special:RecentChanges|letschten Änderige]]",
+ "cleanchanges-language": "Sproch:",
+ "cleanchanges-language-na": "Alli",
+ "cleanchanges-users": "Benutzer (Trännzeiche: |):",
+ "cleanchanges-showuserlinks": "Zeig Benutzer-Links"
+}
diff --git a/MLEB/CleanChanges/i18n/gu.json b/MLEB/CleanChanges/i18n/gu.json
new file mode 100644
index 00000000..ca19ecf1
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/gu.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "KartikMistry"
+ ]
+ },
+ "cleanchanges-language": "ભાષા:",
+ "cleanchanges-language-na": "બધું"
+}
diff --git a/MLEB/CleanChanges/i18n/gv.json b/MLEB/CleanChanges/i18n/gv.json
new file mode 100644
index 00000000..fd4a50f8
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/gv.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "MacTire02"
+ ]
+ },
+ "cleanchanges-language": "Çhengey:"
+}
diff --git a/MLEB/CleanChanges/i18n/ha.json b/MLEB/CleanChanges/i18n/ha.json
new file mode 100644
index 00000000..44b34d35
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/ha.json
@@ -0,0 +1,4 @@
+{
+ "@metadata": [],
+ "cleanchanges-language-na": "Duka"
+}
diff --git a/MLEB/CleanChanges/i18n/haw.json b/MLEB/CleanChanges/i18n/haw.json
new file mode 100644
index 00000000..3c43f4d5
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/haw.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kalani",
+ "Kolonahe"
+ ]
+ },
+ "cleanchanges-changerightslink": "hoʻololi hui",
+ "cleanchanges-language": "ʻŌlelo:",
+ "cleanchanges-language-na": "Nā mea apau",
+ "cleanchanges-users": "Mea hoʻohana (hoʻokaʻawale ʻia: |):",
+ "cleanchanges-showuserlinks": "Hōʻike i nā loulou mea hoʻohana"
+}
diff --git a/MLEB/CleanChanges/i18n/he.json b/MLEB/CleanChanges/i18n/he.json
new file mode 100644
index 00000000..5cc5fee3
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/he.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Agbad",
+ "Rotemliss",
+ "YaronSh"
+ ]
+ },
+ "cleanchanges-changerightslink": "שינוי קבוצות",
+ "cleanchanges-desc": "הצגה מרוכזת יותר של [[Special:RecentChanges|רשימת השינויים האחרונים]]",
+ "cleanchanges-language": "שפה:",
+ "cleanchanges-language-na": "הכול",
+ "cleanchanges-users": "משתמשים (הפרדה: |):",
+ "cleanchanges-showuserlinks": "הצגת קישורי המשתמש"
+}
diff --git a/MLEB/CleanChanges/i18n/hi.json b/MLEB/CleanChanges/i18n/hi.json
new file mode 100644
index 00000000..3ebdb2fc
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/hi.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ansumang",
+ "Kaustubh"
+ ]
+ },
+ "cleanchanges-changerightslink": "ग्रुप बदलें",
+ "cleanchanges-desc": "[[Special:RecentChanges|हाल में हुए बदलाव]] संक्षिप्त रूपमें दर्शायें",
+ "cleanchanges-language": "भाषा:",
+ "cleanchanges-language-na": "सभी"
+}
diff --git a/MLEB/CleanChanges/i18n/hr.json b/MLEB/CleanChanges/i18n/hr.json
new file mode 100644
index 00000000..bf44b03d
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/hr.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ex13"
+ ]
+ },
+ "cleanchanges-changerightslink": "promijeni grupe",
+ "cleanchanges-desc": "Kompaktniji prikaz [[Special:RecentChanges|nedavnih promjena]]",
+ "cleanchanges-language": "Jezik:",
+ "cleanchanges-language-na": "Svi",
+ "cleanchanges-users": "Suradnici (Raz: |):",
+ "cleanchanges-showuserlinks": "Prikaži poveznice suradnika"
+}
diff --git a/MLEB/CleanChanges/i18n/hsb.json b/MLEB/CleanChanges/i18n/hsb.json
new file mode 100644
index 00000000..78095190
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/hsb.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Michawiki"
+ ]
+ },
+ "cleanchanges-changerightslink": "skupiny změnić",
+ "cleanchanges-desc": "Kompaktniše zwobraznjenje [[Special:RecentChanges|lisćiny aktualnych změnow]]",
+ "cleanchanges-language": "Rěč:",
+ "cleanchanges-language-na": "Wšě",
+ "cleanchanges-users": "Wužiwarjo (dźělenske znamješko: |):",
+ "cleanchanges-showuserlinks": "Wužiwarske wotkazy pokazać"
+}
diff --git a/MLEB/CleanChanges/i18n/hu.json b/MLEB/CleanChanges/i18n/hu.json
new file mode 100644
index 00000000..6f66408a
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/hu.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dani"
+ ]
+ },
+ "cleanchanges-changerightslink": "csoportok megváltoztatása",
+ "cleanchanges-desc": "A [[Special:RecentChanges|friss változtatások listájának]] tömörebb változata",
+ "cleanchanges-language": "Nyelv:",
+ "cleanchanges-language-na": "összes",
+ "cleanchanges-users": "Szerkesztők (elválasztó: |):",
+ "cleanchanges-showuserlinks": "Szerkesztőlinkek megjelenítése"
+}
diff --git a/MLEB/CleanChanges/i18n/ia.json b/MLEB/CleanChanges/i18n/ia.json
new file mode 100644
index 00000000..f47d4091
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/ia.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "McDutchie"
+ ]
+ },
+ "cleanchanges-changerightslink": "cambiar gruppos",
+ "cleanchanges-desc": "Presentation plus compacte del [[Special:RecentChanges|lista de modificationes recente]]",
+ "cleanchanges-language": "Lingua:",
+ "cleanchanges-language-na": "Totes",
+ "cleanchanges-users": "Usatores (Sep: |):",
+ "cleanchanges-showuserlinks": "Monstrar ligamines de usator"
+}
diff --git a/MLEB/CleanChanges/i18n/id.json b/MLEB/CleanChanges/i18n/id.json
new file mode 100644
index 00000000..1bd9491e
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/id.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bennylin",
+ "Rex"
+ ]
+ },
+ "cleanchanges-changerightslink": "ubah kelompok",
+ "cleanchanges-desc": "Tampilan lebih padat dari [[Special:RecentChanges|daftar perubahan terbaru]]",
+ "cleanchanges-language": "Bahasa:",
+ "cleanchanges-language-na": "Semua",
+ "cleanchanges-users": "Pengguna (Pemisah: |):",
+ "cleanchanges-showuserlinks": "Tunjukkan pranala pengguna"
+}
diff --git a/MLEB/CleanChanges/i18n/ig.json b/MLEB/CleanChanges/i18n/ig.json
new file mode 100644
index 00000000..28370cf4
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/ig.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ukabia"
+ ]
+ },
+ "cleanchanges-changerightslink": "gbánwe ọtú",
+ "cleanchanges-desc": "Nke ílé gí dí ntà nke [[Special:RecentChanges|ndétu ihe gbanwere na ógè nso]]",
+ "cleanchanges-language": "Ásụ̀sụ̀:",
+ "cleanchanges-language-na": "Haníle",
+ "cleanchanges-users": "Ọ'bànifé (Sep: |):",
+ "cleanchanges-showuserlinks": "Zí jikodo ọ'bànifé"
+}
diff --git a/MLEB/CleanChanges/i18n/is.json b/MLEB/CleanChanges/i18n/is.json
new file mode 100644
index 00000000..5ae28fed
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/is.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "පසිඳු කාවින්ද"
+ ]
+ },
+ "cleanchanges-language": "Tungumál:",
+ "cleanchanges-language-na": "Allir"
+}
diff --git a/MLEB/CleanChanges/i18n/it.json b/MLEB/CleanChanges/i18n/it.json
new file mode 100644
index 00000000..677d867b
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/it.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "BrokenArrow",
+ "Darth Kule",
+ "Nemo bis"
+ ]
+ },
+ "cleanchanges-changerightslink": "modifica gruppi",
+ "cleanchanges-desc": "Presentazione più compatta della [[Special:RecentChanges|lista delle ultime modifiche]]",
+ "cleanchanges-language": "Lingua:",
+ "cleanchanges-language-na": "Tutte",
+ "cleanchanges-users": "Utenti (Sep: |):",
+ "cleanchanges-showuserlinks": "Mostra collegamenti utente"
+}
diff --git a/MLEB/CleanChanges/i18n/ja.json b/MLEB/CleanChanges/i18n/ja.json
new file mode 100644
index 00000000..d5e47024
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/ja.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aotake",
+ "Fryed-peach",
+ "JtFuruhata",
+ "Shirayuki"
+ ]
+ },
+ "cleanchanges-changerightslink": "権限を変更",
+ "cleanchanges-desc": "[[Special:RecentChanges|最近の更新一覧]]をよりコンパクトに表示する",
+ "cleanchanges-language": "言語:",
+ "cleanchanges-language-na": "すべて",
+ "cleanchanges-users": "利用者 (| で区切る):",
+ "cleanchanges-showuserlinks": "利用者リンクを表示",
+ "cleanchanges-rcinfo-2": "($1; $2)",
+ "cleanchanges-rcinfo-3": "($1; $2; $3)"
+}
diff --git a/MLEB/CleanChanges/i18n/jv.json b/MLEB/CleanChanges/i18n/jv.json
new file mode 100644
index 00000000..aa98fdf0
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/jv.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Meursault2004"
+ ]
+ },
+ "cleanchanges-changerightslink": "owahana grup"
+}
diff --git a/MLEB/CleanChanges/i18n/ka.json b/MLEB/CleanChanges/i18n/ka.json
new file mode 100644
index 00000000..39e99111
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/ka.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "David1010",
+ "BRUTE"
+ ]
+ },
+ "cleanchanges-changerightslink": "ჯგუფების ცვლილება",
+ "cleanchanges-desc": "[[Special:RecentChanges|ბოლო ცვლილებების სიის]] უფრო კომპაქტური ჩვენება",
+ "cleanchanges-language": "ენა:",
+ "cleanchanges-language-na": "ყველა",
+ "cleanchanges-users": "მომხმარებლები (გამყოფი: |):",
+ "cleanchanges-rcinfo-2": "($1; $2)",
+ "cleanchanges-rcinfo-3": "($1; $2; $3)"
+}
diff --git a/MLEB/CleanChanges/i18n/kk-cyrl.json b/MLEB/CleanChanges/i18n/kk-cyrl.json
new file mode 100644
index 00000000..a6f98b32
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/kk-cyrl.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Arystanbek"
+ ]
+ },
+ "cleanchanges-changerightslink": "Топтарды өзгерту",
+ "cleanchanges-language": "Тіл:",
+ "cleanchanges-language-na": "Барлығы",
+ "cleanchanges-showuserlinks": "Қатысушы сілтемелерін көрсету"
+}
diff --git a/MLEB/CleanChanges/i18n/kl.json b/MLEB/CleanChanges/i18n/kl.json
new file mode 100644
index 00000000..1a7b2253
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/kl.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Qaqqalik"
+ ]
+ },
+ "cleanchanges-language": "Oqaatsit:"
+}
diff --git a/MLEB/CleanChanges/i18n/km.json b/MLEB/CleanChanges/i18n/km.json
new file mode 100644
index 00000000..0955eb4f
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/km.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chhorran",
+ "Lovekhmer",
+ "Thearith"
+ ]
+ },
+ "cleanchanges-changerightslink": "ផ្លាស់ប្តូរក្រុម",
+ "cleanchanges-language": "ភាសា៖",
+ "cleanchanges-language-na": "ទាំងអស់",
+ "cleanchanges-users": "អ្នកប្រើប្រាស់​(ខណ្ឌដោយ |)៖",
+ "cleanchanges-showuserlinks": "បង្ហាញ​តំណ​អ្នកប្រើប្រាស់"
+}
diff --git a/MLEB/CleanChanges/i18n/kn.json b/MLEB/CleanChanges/i18n/kn.json
new file mode 100644
index 00000000..6cd7ab88
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/kn.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Nayvik"
+ ]
+ },
+ "cleanchanges-language": "ಭಾಷೆ:",
+ "cleanchanges-language-na": "ಎಲ್ಲಾ"
+}
diff --git a/MLEB/CleanChanges/i18n/ko.json b/MLEB/CleanChanges/i18n/ko.json
new file mode 100644
index 00000000..52213937
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/ko.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kwj2772",
+ "아라"
+ ]
+ },
+ "cleanchanges-changerightslink": "그룹 바꾸기",
+ "cleanchanges-desc": "[[Special:RecentChanges|최근 바뀜 목록]]을 더 조밀하게 보이기",
+ "cleanchanges-language": "언어:",
+ "cleanchanges-language-na": "모두",
+ "cleanchanges-users": "사용자 (구분선: |):",
+ "cleanchanges-showuserlinks": "사용자 링크 보기"
+}
diff --git a/MLEB/CleanChanges/i18n/krc.json b/MLEB/CleanChanges/i18n/krc.json
new file mode 100644
index 00000000..f50ab82b
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/krc.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Iltever"
+ ]
+ },
+ "cleanchanges-language": "Тил:"
+}
diff --git a/MLEB/CleanChanges/i18n/ksh.json b/MLEB/CleanChanges/i18n/ksh.json
new file mode 100644
index 00000000..2d2d2fde
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/ksh.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Purodha"
+ ]
+ },
+ "cleanchanges-changerightslink": "Jruppe aanpasse",
+ "cleanchanges-desc": "Määt en köötere [[Special:RecentChanges|Leß met de {{lcfirst:{{int:Recentchanges}}}}]].",
+ "cleanchanges-language": "Schprohch:",
+ "cleanchanges-language-na": "all",
+ "cleanchanges-users": "Metmaacher (donn | dozwesche, wann et zwei udder mieh sen):",
+ "cleanchanges-showuserlinks": "Links op Metmaacher zeije"
+}
diff --git a/MLEB/CleanChanges/i18n/ku-latn.json b/MLEB/CleanChanges/i18n/ku-latn.json
new file mode 100644
index 00000000..c8ef8f16
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/ku-latn.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "George Animal"
+ ]
+ },
+ "cleanchanges-changerightslink": "koman biguherîne",
+ "cleanchanges-language": "Ziman:",
+ "cleanchanges-language-na": "Hemû",
+ "cleanchanges-users": "Bikarhêner (Sep: |):",
+ "cleanchanges-showuserlinks": "Lînkên bikarhêneran nîşan bide"
+}
diff --git a/MLEB/CleanChanges/i18n/kw.json b/MLEB/CleanChanges/i18n/kw.json
new file mode 100644
index 00000000..416b1057
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/kw.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kw-Moon"
+ ]
+ },
+ "cleanchanges-language": "Yeth:",
+ "cleanchanges-language-na": "Oll"
+}
diff --git a/MLEB/CleanChanges/i18n/lb.json b/MLEB/CleanChanges/i18n/lb.json
new file mode 100644
index 00000000..d9b6f057
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/lb.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Robby"
+ ]
+ },
+ "cleanchanges-changerightslink": "ännert d'Gruppen",
+ "cleanchanges-desc": "[[Special:RecentChanges|Lëscht vun de rezenten Ännerunge]] méi kompakt weisen",
+ "cleanchanges-language": "Sprooch:",
+ "cleanchanges-language-na": "All",
+ "cleanchanges-users": "Benotzer (Sep: |):",
+ "cleanchanges-showuserlinks": "D'Linke vun dësem Benotzer weisen"
+}
diff --git a/MLEB/CleanChanges/i18n/li.json b/MLEB/CleanChanges/i18n/li.json
new file mode 100644
index 00000000..2ce38693
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/li.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Pahles"
+ ]
+ },
+ "cleanchanges-changerightslink": "gróppe verangere",
+ "cleanchanges-desc": "Mier compacte weergave van de [[Special:RecentChanges|lies mit recènte verangeringe]]",
+ "cleanchanges-language": "Sjpraok:",
+ "cleanchanges-language-na": "Alle sjpraoke",
+ "cleanchanges-users": "Gebroekers (sjeijingsteike \"|\"):",
+ "cleanchanges-showuserlinks": "Gebroekersverwiezinge betrachte"
+}
diff --git a/MLEB/CleanChanges/i18n/lrc.json b/MLEB/CleanChanges/i18n/lrc.json
new file mode 100644
index 00000000..2de434e9
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/lrc.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bonevarluri"
+ ]
+ },
+ "cleanchanges-language": "زون:"
+}
diff --git a/MLEB/CleanChanges/i18n/lt.json b/MLEB/CleanChanges/i18n/lt.json
new file mode 100644
index 00000000..a8537044
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/lt.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Eitvys200"
+ ]
+ },
+ "cleanchanges-changerightslink": "pakeisti grupes",
+ "cleanchanges-language": "Kalba:",
+ "cleanchanges-language-na": "Visi",
+ "cleanchanges-showuserlinks": "Rodyti vartotojo nuorodas"
+}
diff --git a/MLEB/CleanChanges/i18n/ltg.json b/MLEB/CleanChanges/i18n/ltg.json
new file mode 100644
index 00000000..e2baeb1b
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/ltg.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dark Eagle"
+ ]
+ },
+ "cleanchanges-language-na": "Vysi"
+}
diff --git a/MLEB/CleanChanges/i18n/lv.json b/MLEB/CleanChanges/i18n/lv.json
new file mode 100644
index 00000000..6e991539
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/lv.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Papuass"
+ ]
+ },
+ "cleanchanges-showuserlinks": "Rādīt lietotāja saites"
+}
diff --git a/MLEB/CleanChanges/i18n/lzh.json b/MLEB/CleanChanges/i18n/lzh.json
new file mode 100644
index 00000000..579f3a1e
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/lzh.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jason924tw"
+ ]
+ },
+ "cleanchanges-language": "語:",
+ "cleanchanges-language-na": "全",
+ "cleanchanges-users": "簿 (隔: |):"
+}
diff --git a/MLEB/CleanChanges/i18n/mhr.json b/MLEB/CleanChanges/i18n/mhr.json
new file mode 100644
index 00000000..06bf66b9
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/mhr.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Сай"
+ ]
+ },
+ "cleanchanges-language-na": "Чыла"
+}
diff --git a/MLEB/CleanChanges/i18n/mk.json b/MLEB/CleanChanges/i18n/mk.json
new file mode 100644
index 00000000..248ccb89
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/mk.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Brest"
+ ]
+ },
+ "cleanchanges-changerightslink": "промена на групи",
+ "cleanchanges-desc": "Компактен приказ на [[Special:RecentChanges|скорешни промени]]",
+ "cleanchanges-language": "Јазик:",
+ "cleanchanges-language-na": "Сите",
+ "cleanchanges-users": "Корисници (разделник: |):",
+ "cleanchanges-showuserlinks": "Прикажи кориснички врски"
+}
diff --git a/MLEB/CleanChanges/i18n/ml.json b/MLEB/CleanChanges/i18n/ml.json
new file mode 100644
index 00000000..a6fe9201
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/ml.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Praveenp",
+ "Shijualex"
+ ]
+ },
+ "cleanchanges-changerightslink": "സംഘങ്ങൾ മാറ്റുക",
+ "cleanchanges-desc": "[[Special:RecentChanges|പുതിയ മാറ്റങ്ങളുടെ പട്ടികയുടെ]] ഒതുക്കമുള്ള പ്രദർശനം",
+ "cleanchanges-language": "ഭാഷ:",
+ "cleanchanges-language-na": "എല്ലാം",
+ "cleanchanges-users": "ഉപയോക്താക്കൾ (പിരിക്കാൻ: |)",
+ "cleanchanges-showuserlinks": "ഉപയോക്തൃ കണ്ണികൾ പ്രദർശിപ്പിക്കുക"
+}
diff --git a/MLEB/CleanChanges/i18n/mn.json b/MLEB/CleanChanges/i18n/mn.json
new file mode 100644
index 00000000..94847d2b
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/mn.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chinneeb"
+ ]
+ },
+ "cleanchanges-language": "Хэл:",
+ "cleanchanges-language-na": "Бүгдийг"
+}
diff --git a/MLEB/CleanChanges/i18n/mr.json b/MLEB/CleanChanges/i18n/mr.json
new file mode 100644
index 00000000..5b0e7813
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/mr.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kaustubh",
+ "Mahitgar",
+ "V.narsikar"
+ ]
+ },
+ "cleanchanges-changerightslink": "गट बदला",
+ "cleanchanges-desc": "[[Special:RecentChanges|अलीकडील बदल यादीचे]] संक्षिप्त रुपात दर्शन",
+ "cleanchanges-language": "भाषा:",
+ "cleanchanges-language-na": "सर्व",
+ "cleanchanges-users": "सदस्य (Sep: |):",
+ "cleanchanges-showuserlinks": "सदस्य दुवे दाखवा"
+}
diff --git a/MLEB/CleanChanges/i18n/ms.json b/MLEB/CleanChanges/i18n/ms.json
new file mode 100644
index 00000000..44179bb6
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/ms.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Anakmalaysia",
+ "Emrrans"
+ ]
+ },
+ "cleanchanges-changerightslink": "tukar kumpulan",
+ "cleanchanges-desc": "Pemaparan [[Special:RecentChanges|senarai perubahan terkini]] yang lebih padat",
+ "cleanchanges-language": "Bahasa:",
+ "cleanchanges-language-na": "Semua",
+ "cleanchanges-users": "Pengguna (Sep: |):",
+ "cleanchanges-showuserlinks": "Tunjukkan pautan pengguna"
+}
diff --git a/MLEB/CleanChanges/i18n/mt.json b/MLEB/CleanChanges/i18n/mt.json
new file mode 100644
index 00000000..357cdf25
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/mt.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chrisportelli",
+ "Roderick Mallia"
+ ]
+ },
+ "cleanchanges-changerightslink": "biddel il-gruppi",
+ "cleanchanges-desc": "Preżentazzjoni iktar kompatta tal-[[Special:RecentChanges|lista tat-tibdil riċenti]]",
+ "cleanchanges-language": "Lingwa:",
+ "cleanchanges-language-na": "Kollha",
+ "cleanchanges-users": "Utenti (Sep: |):",
+ "cleanchanges-showuserlinks": "Uri l-ħoloq tal-utent"
+}
diff --git a/MLEB/CleanChanges/i18n/myv.json b/MLEB/CleanChanges/i18n/myv.json
new file mode 100644
index 00000000..3c06c188
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/myv.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Botuzhaleny-sodamo"
+ ]
+ },
+ "cleanchanges-language": "Келесь:",
+ "cleanchanges-language-na": "Весе"
+}
diff --git a/MLEB/CleanChanges/i18n/nah.json b/MLEB/CleanChanges/i18n/nah.json
new file mode 100644
index 00000000..f41a49cb
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/nah.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Fluence",
+ "Teòtlalili"
+ ]
+ },
+ "cleanchanges-changerightslink": "tlátlasèntlàlìlpátlalòs",
+ "cleanchanges-desc": "Monèxtìs okachi tepitòn in [[Special:RecentChanges|welok tlapátlalli pàmitl]]",
+ "cleanchanges-language": "Tlâtòlli:",
+ "cleanchanges-language-na": "Mochtìn",
+ "cleanchanges-users": "Motekìuhtiànimë (Sep: |):",
+ "cleanchanges-showuserlinks": "Mà monèxti ìnetzòwìlwàn in motekìuhtiàni"
+}
diff --git a/MLEB/CleanChanges/i18n/nb.json b/MLEB/CleanChanges/i18n/nb.json
new file mode 100644
index 00000000..705ae2eb
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/nb.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Nghtwlkr"
+ ]
+ },
+ "cleanchanges-changerightslink": "endre grupper",
+ "cleanchanges-desc": "Mer kompakt visning av [[Special:RecentChanges|siste endringer]]",
+ "cleanchanges-language": "Språk:",
+ "cleanchanges-language-na": "Alle",
+ "cleanchanges-users": "Brukere (separer med |):",
+ "cleanchanges-showuserlinks": "Vis brukerlenker"
+}
diff --git a/MLEB/CleanChanges/i18n/nds.json b/MLEB/CleanChanges/i18n/nds.json
new file mode 100644
index 00000000..615eb8f4
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/nds.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Joachim Mos"
+ ]
+ },
+ "cleanchanges-language": "Spraak:",
+ "cleanchanges-language-na": "All",
+ "cleanchanges-users": "Brukers (Sep: |):"
+}
diff --git a/MLEB/CleanChanges/i18n/nl.json b/MLEB/CleanChanges/i18n/nl.json
new file mode 100644
index 00000000..b8700bb5
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/nl.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Siebrand"
+ ]
+ },
+ "cleanchanges-changerightslink": "groepen wijzigen",
+ "cleanchanges-desc": "Meer compacte weergave van de [[Special:RecentChanges|lijst met recente wijzigingen]]",
+ "cleanchanges-language": "Taal:",
+ "cleanchanges-language-na": "Alle talen",
+ "cleanchanges-users": "Gebruikers (scheidingsteken \"|\"):",
+ "cleanchanges-showuserlinks": "Gebruikerskoppelingen weergeven"
+}
diff --git a/MLEB/CleanChanges/i18n/nn.json b/MLEB/CleanChanges/i18n/nn.json
new file mode 100644
index 00000000..6cf9795b
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/nn.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Harald Khan",
+ "Njardarlogar"
+ ]
+ },
+ "cleanchanges-changerightslink": "endra grupper",
+ "cleanchanges-desc": "Meir kompakt vising av [[Special:RecentChanges|siste endringar]]",
+ "cleanchanges-language": "Språk:",
+ "cleanchanges-language-na": "Alle",
+ "cleanchanges-users": "Brukarar (separer med |):",
+ "cleanchanges-showuserlinks": "Vis brukarlenkjer"
+}
diff --git a/MLEB/CleanChanges/i18n/oc.json b/MLEB/CleanChanges/i18n/oc.json
new file mode 100644
index 00000000..e2b0cf8a
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/oc.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cedric31"
+ ]
+ },
+ "cleanchanges-changerightslink": "càmbia los gropes",
+ "cleanchanges-desc": "Afichatge mai compacte de la [[Special:RecentChanges|lista dels darrièrs cambiaments]]",
+ "cleanchanges-language": "Lenga :",
+ "cleanchanges-language-na": "Totes",
+ "cleanchanges-users": "Utilizaires (sep. per |) :",
+ "cleanchanges-showuserlinks": "Afichar los ligams d'aqueste utilizaire"
+}
diff --git a/MLEB/CleanChanges/i18n/or.json b/MLEB/CleanChanges/i18n/or.json
new file mode 100644
index 00000000..8f2e4bc1
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/or.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jnanaranjan Sahu",
+ "Odisha1"
+ ]
+ },
+ "cleanchanges-language": "ଭାଷା:",
+ "cleanchanges-language-na": "ସବୁ",
+ "cleanchanges-showuserlinks": "ବ୍ୟବହାରକାରୀ ଲିଙ୍କ ଦେଖାନ୍ତୁ"
+}
diff --git a/MLEB/CleanChanges/i18n/os.json b/MLEB/CleanChanges/i18n/os.json
new file mode 100644
index 00000000..43fb1e7e
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/os.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amikeco"
+ ]
+ },
+ "cleanchanges-language": "Æвзаг:"
+}
diff --git a/MLEB/CleanChanges/i18n/pa.json b/MLEB/CleanChanges/i18n/pa.json
new file mode 100644
index 00000000..938a30bf
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/pa.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gman124"
+ ]
+ },
+ "cleanchanges-language-na": "ਸਭ"
+}
diff --git a/MLEB/CleanChanges/i18n/pdc.json b/MLEB/CleanChanges/i18n/pdc.json
new file mode 100644
index 00000000..900a5ebe
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/pdc.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Xqt"
+ ]
+ },
+ "cleanchanges-language": "Schprooch:",
+ "cleanchanges-language-na": "all"
+}
diff --git a/MLEB/CleanChanges/i18n/pfl.json b/MLEB/CleanChanges/i18n/pfl.json
new file mode 100644
index 00000000..c335b312
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/pfl.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Manuae"
+ ]
+ },
+ "cleanchanges-language": "Schbrooch:",
+ "cleanchanges-language-na": "alle"
+}
diff --git a/MLEB/CleanChanges/i18n/pl.json b/MLEB/CleanChanges/i18n/pl.json
new file mode 100644
index 00000000..15409248
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/pl.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "BeginaFelicysym",
+ "Leinad",
+ "Masti",
+ "McMonster",
+ "Sp5uhe",
+ "Wpedzich"
+ ]
+ },
+ "cleanchanges-changerightslink": "zmień grupy",
+ "cleanchanges-desc": "Bardziej zwarta wersja „[[Special:RecentChanges|Ostatnich zmian]]”",
+ "cleanchanges-language": "Język:",
+ "cleanchanges-language-na": "Wszystkie",
+ "cleanchanges-users": "Użytkownicy (rozdziel znakiem „|”):",
+ "cleanchanges-showuserlinks": "Pokaż linki użytkownika"
+}
diff --git a/MLEB/CleanChanges/i18n/pms.json b/MLEB/CleanChanges/i18n/pms.json
new file mode 100644
index 00000000..98f60663
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/pms.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dragonòt"
+ ]
+ },
+ "cleanchanges-changerightslink": "cambia ij grup",
+ "cleanchanges-desc": "Visualisassion pì s-ciassa dla [[Special:RecentChanges|lista dij cambe ressent]]",
+ "cleanchanges-language": "Lenga:",
+ "cleanchanges-language-na": "Tùit",
+ "cleanchanges-users": "Utent (Sep: |):",
+ "cleanchanges-showuserlinks": "Mosta colegament ëd l'utent"
+}
diff --git a/MLEB/CleanChanges/i18n/ps.json b/MLEB/CleanChanges/i18n/ps.json
new file mode 100644
index 00000000..13e06305
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/ps.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ahmed-Najib-Biabani-Ibrahimkhel"
+ ]
+ },
+ "cleanchanges-changerightslink": "ډلې بدلول",
+ "cleanchanges-desc": "د [[Special:RecentChanges|وروستي بدلونونو لړليک]] په ډېره وړوکې بڼه ښکاره کوي.",
+ "cleanchanges-language": "ژبه:",
+ "cleanchanges-language-na": "ټول",
+ "cleanchanges-users": "کارن (بېلول: |):",
+ "cleanchanges-showuserlinks": "د کارن تړنې ښکاره کول"
+}
diff --git a/MLEB/CleanChanges/i18n/pt-br.json b/MLEB/CleanChanges/i18n/pt-br.json
new file mode 100644
index 00000000..525053f9
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/pt-br.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Eduardo.mps",
+ "Luckas"
+ ]
+ },
+ "cleanchanges-changerightslink": "alterar grupos",
+ "cleanchanges-desc": "Apresentação mais compacta da [[Special:RecentChanges|lista de mudanças recentes]]",
+ "cleanchanges-language": "Língua:",
+ "cleanchanges-language-na": "Todas",
+ "cleanchanges-users": "Utilizadores (Sep: |):",
+ "cleanchanges-showuserlinks": "Mostrar links de usuário"
+}
diff --git a/MLEB/CleanChanges/i18n/pt.json b/MLEB/CleanChanges/i18n/pt.json
new file mode 100644
index 00000000..0a5b286f
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/pt.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hamilton Abreu",
+ "Malafaya"
+ ]
+ },
+ "cleanchanges-changerightslink": "alterar grupos",
+ "cleanchanges-desc": "Apresentação mais compacta da [[Special:RecentChanges|lista de mudanças recentes]]",
+ "cleanchanges-language": "Língua:",
+ "cleanchanges-language-na": "Todas",
+ "cleanchanges-users": "Utilizadores (Sep: |):",
+ "cleanchanges-showuserlinks": "Mostrar links de utilizador"
+}
diff --git a/MLEB/CleanChanges/i18n/qqq.json b/MLEB/CleanChanges/i18n/qqq.json
new file mode 100644
index 00000000..4eb2d860
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/qqq.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Byrial",
+ "Jon Harald Søby",
+ "Meno25",
+ "Purodha",
+ "Shirayuki"
+ ]
+ },
+ "cleanchanges-changerightslink": "Link text for a link in the recent changes page to manage user rights for a user.\nIt is shown after clicking on the \"Show user links\"-picture if you are allowed to manage user rights.",
+ "cleanchanges-desc": "Shown in [[Special:Version]]",
+ "cleanchanges-language": "{{Identical|Language}}",
+ "cleanchanges-language-na": "Used in the trailer selection of [[Special:RecentChanges]] to not filter on any trailer.\n\n{{Identical|All}}",
+ "cleanchanges-users": "Used as label for \"Users\" input box.\n\n\"Sep: |\" stands for \"Separate with |\" or \"|-separated\".",
+ "cleanchanges-showuserlinks": "Used as HTML <code>alt=</code> and <code>title=</code> attribute for HTML <code><nowiki><img></nowiki></code> tag for <code>magnify-clip.png</code>.\n\nThe image is used as link text.\nThe link is an action link to show/hide User Info.",
+ "cleanchanges-rcinfo-2": "{{Optional}}\nUse in enhanced recent changes when CleanChanges is enabled. Parameters:\n* $1 - the number of changes in the overview with {{msg-mw|Nchanges}} used as link text or a diff link with {{msg-mw|Diff}} as link text\n* $2 - a link to the page history. {{msg-mw|Hist}} is used as link text",
+ "cleanchanges-rcinfo-3": "{{Optional}}\nUse in enhanced recent changes when CleanChanges is enabled. Parameters:\n* $1 - the number of changes in the overview with {{msg-mw|Nchanges}} used as link text or a diff link with {{msg-mw|Diff}} as link text\n* $2 - a link to the page history. {{msg-mw|Hist}} is used as link text\n* $3 - the size change from the oldest revision to the latest revision in the overview"
+}
diff --git a/MLEB/CleanChanges/i18n/qu.json b/MLEB/CleanChanges/i18n/qu.json
new file mode 100644
index 00000000..286876dd
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/qu.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "AlimanRuna"
+ ]
+ },
+ "cleanchanges-language": "Rimay:",
+ "cleanchanges-language-na": "Tukuy"
+}
diff --git a/MLEB/CleanChanges/i18n/rif.json b/MLEB/CleanChanges/i18n/rif.json
new file mode 100644
index 00000000..89d8cf5d
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/rif.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aryaz",
+ "Jose77"
+ ]
+ },
+ "cleanchanges-language": "Tutlayt:",
+ "cleanchanges-language-na": "Marra"
+}
diff --git a/MLEB/CleanChanges/i18n/ro.json b/MLEB/CleanChanges/i18n/ro.json
new file mode 100644
index 00000000..c67e03e0
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/ro.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "KlaudiuMihaila",
+ "Minisarm",
+ "Stelistcristi"
+ ]
+ },
+ "cleanchanges-changerightslink": "schimbă grupurile",
+ "cleanchanges-language": "Limbă:",
+ "cleanchanges-language-na": "Toate",
+ "cleanchanges-users": "Utilizatori (sep. prin |):",
+ "cleanchanges-showuserlinks": "Arată legăturile utilizatorului"
+}
diff --git a/MLEB/CleanChanges/i18n/roa-tara.json b/MLEB/CleanChanges/i18n/roa-tara.json
new file mode 100644
index 00000000..4f27af0c
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/roa-tara.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Joetaras"
+ ]
+ },
+ "cleanchanges-changerightslink": "cange le gruppe",
+ "cleanchanges-desc": "Fa vedè cchiù combatte 'a [[Special:RecentChanges|liste de le cangiaminde recende]]",
+ "cleanchanges-language": "Lènghe:",
+ "cleanchanges-language-na": "Tutte",
+ "cleanchanges-users": "Utinde (Sep: |):",
+ "cleanchanges-showuserlinks": "Fa vedè le collagaminde de l'utende"
+}
diff --git a/MLEB/CleanChanges/i18n/ru.json b/MLEB/CleanChanges/i18n/ru.json
new file mode 100644
index 00000000..91d5515e
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/ru.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ferrer",
+ "Innv",
+ "Александр Сигачёв"
+ ]
+ },
+ "cleanchanges-changerightslink": "изменить группы",
+ "cleanchanges-desc": "Более сжатое представление [[Special:RecentChanges|списка свежих правок]]",
+ "cleanchanges-language": "Язык:",
+ "cleanchanges-language-na": "Все",
+ "cleanchanges-users": "Участники (разделитель: |):",
+ "cleanchanges-showuserlinks": "Показывать ссылки участников"
+}
diff --git a/MLEB/CleanChanges/i18n/rue.json b/MLEB/CleanChanges/i18n/rue.json
new file mode 100644
index 00000000..6e222403
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/rue.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gazeb"
+ ]
+ },
+ "cleanchanges-changerightslink": "змінити ґрупы",
+ "cleanchanges-language": "Язык:",
+ "cleanchanges-language-na": "Вшыткы",
+ "cleanchanges-users": "Хоснователї (Оддїлёвач |):",
+ "cleanchanges-showuserlinks": "Указати одказы хоснователя"
+}
diff --git a/MLEB/CleanChanges/i18n/sah.json b/MLEB/CleanChanges/i18n/sah.json
new file mode 100644
index 00000000..163b6816
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/sah.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "HalanTul"
+ ]
+ },
+ "cleanchanges-changerightslink": "бөлөхтөрү уларытыы",
+ "cleanchanges-desc": "[[Special:RecentChanges|Кэнники уларытыылары]] арыый дьаһамырдык көрдөрүү",
+ "cleanchanges-language": "Тыла:",
+ "cleanchanges-language-na": "Бары",
+ "cleanchanges-users": "Кыттааччылар (араарыы: |):",
+ "cleanchanges-showuserlinks": "Кыттааччылар сигэлэрин көрдөр"
+}
diff --git a/MLEB/CleanChanges/i18n/scn.json b/MLEB/CleanChanges/i18n/scn.json
new file mode 100644
index 00000000..6e303dfa
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/scn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aushulz"
+ ]
+ },
+ "cleanchanges-language-na": "Tutti"
+}
diff --git a/MLEB/CleanChanges/i18n/si.json b/MLEB/CleanChanges/i18n/si.json
new file mode 100644
index 00000000..dc5cb999
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/si.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "පසිඳු කාවින්ද"
+ ]
+ },
+ "cleanchanges-changerightslink": "කාණ්ඩ වෙනස් කරන්න",
+ "cleanchanges-language": "භාෂාව:",
+ "cleanchanges-language-na": "සියල්ල",
+ "cleanchanges-users": "පරිශීලකයන් (වෙන්: |):",
+ "cleanchanges-showuserlinks": "පරිශීලක සබැඳි පෙන්වන්න"
+}
diff --git a/MLEB/CleanChanges/i18n/sk.json b/MLEB/CleanChanges/i18n/sk.json
new file mode 100644
index 00000000..8cecd2d4
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/sk.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Helix84"
+ ]
+ },
+ "cleanchanges-changerightslink": "zmeniť skupiny",
+ "cleanchanges-desc": "Kompaktnejšie zobrazenie [[Special:RecentChanges|zoznamu posledných úprav]]",
+ "cleanchanges-language": "Jazyk:",
+ "cleanchanges-language-na": "Všetky",
+ "cleanchanges-users": "Používatelia (Oddeľ: „|”):",
+ "cleanchanges-showuserlinks": "Zobrazovať používateľské odkazy"
+}
diff --git a/MLEB/CleanChanges/i18n/sl.json b/MLEB/CleanChanges/i18n/sl.json
new file mode 100644
index 00000000..fdbead4c
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/sl.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dbc334"
+ ]
+ },
+ "cleanchanges-changerightslink": "spremeni skupine",
+ "cleanchanges-desc": "Bolj strjen prikaz [[Special:RecentChanges|seznama zadnjih sprememb]]",
+ "cleanchanges-language": "Jezik:",
+ "cleanchanges-language-na": "Vse",
+ "cleanchanges-users": "Uporabniki (ločilo: |):",
+ "cleanchanges-showuserlinks": "Prikaži uporabniške povezave"
+}
diff --git a/MLEB/CleanChanges/i18n/sr-ec.json b/MLEB/CleanChanges/i18n/sr-ec.json
new file mode 100644
index 00000000..1e16dcfc
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/sr-ec.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Rancher",
+ "Sasa Stefanovic",
+ "Михајло Анђелковић"
+ ]
+ },
+ "cleanchanges-changerightslink": "промени групе",
+ "cleanchanges-desc": "Компактнији приказ списка [[Special:RecentChanges|скорашњих измена]]",
+ "cleanchanges-language": "Језик:",
+ "cleanchanges-language-na": "Све",
+ "cleanchanges-users": "Корисници (раздв. |):",
+ "cleanchanges-showuserlinks": "Прикажи корисничке везе"
+}
diff --git a/MLEB/CleanChanges/i18n/sr-el.json b/MLEB/CleanChanges/i18n/sr-el.json
new file mode 100644
index 00000000..35fe1730
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/sr-el.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Michaello",
+ "Rancher"
+ ]
+ },
+ "cleanchanges-changerightslink": "promeni grupe",
+ "cleanchanges-desc": "Kompaktniji prikaz spiska [[Special:RecentChanges|skorašnjih izmena]]",
+ "cleanchanges-language": "Jezik:",
+ "cleanchanges-language-na": "Sve",
+ "cleanchanges-users": "Korisnici (razdv. |):",
+ "cleanchanges-showuserlinks": "Pokaži korisničke linkove"
+}
diff --git a/MLEB/CleanChanges/i18n/stq.json b/MLEB/CleanChanges/i18n/stq.json
new file mode 100644
index 00000000..7cd0473b
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/stq.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Pyt"
+ ]
+ },
+ "cleanchanges-changerightslink": "Benutsergjuchte",
+ "cleanchanges-desc": "Kompaktere Anwiesenge fon do [[Special:RecentChanges|lääste Annerengen]]",
+ "cleanchanges-language": "Sproake:",
+ "cleanchanges-language-na": "aal",
+ "cleanchanges-users": "Benutsere (Tränteeken: |):",
+ "cleanchanges-showuserlinks": "Wies Benutser-Linke"
+}
diff --git a/MLEB/CleanChanges/i18n/su.json b/MLEB/CleanChanges/i18n/su.json
new file mode 100644
index 00000000..2d39b581
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/su.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Irwangatot",
+ "Kandar"
+ ]
+ },
+ "cleanchanges-changerightslink": "Ganti grup",
+ "cleanchanges-desc": "Pamidang leuwih basajan ti [[Special:RecentChanges|Nu anyar robah]]",
+ "cleanchanges-language": "Basa:",
+ "cleanchanges-language-na": "Kabéh",
+ "cleanchanges-users": "Pamaké (Pisah: |):",
+ "cleanchanges-showuserlinks": "Témbongkeun tumbu pamaké"
+}
diff --git a/MLEB/CleanChanges/i18n/sv.json b/MLEB/CleanChanges/i18n/sv.json
new file mode 100644
index 00000000..fd2283bd
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/sv.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Lejonel",
+ "M.M.S.",
+ "Najami"
+ ]
+ },
+ "cleanchanges-changerightslink": "ändra grupper",
+ "cleanchanges-desc": "Visar [[Special:RecentChanges|senaste ändringarna]] på ett mer kompakt sätt",
+ "cleanchanges-language": "Språk:",
+ "cleanchanges-language-na": "Alla",
+ "cleanchanges-users": "Användare (Separera med: |):",
+ "cleanchanges-showuserlinks": "Visa användarlänkar"
+}
diff --git a/MLEB/CleanChanges/i18n/sw.json b/MLEB/CleanChanges/i18n/sw.json
new file mode 100644
index 00000000..ee7fe41f
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/sw.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Stephenwanjau"
+ ]
+ },
+ "cleanchanges-language": "Lugha:",
+ "cleanchanges-language-na": "Wote"
+}
diff --git a/MLEB/CleanChanges/i18n/szl.json b/MLEB/CleanChanges/i18n/szl.json
new file mode 100644
index 00000000..54bee012
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/szl.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ozi64"
+ ]
+ },
+ "cleanchanges-language-na": "Wšyjske"
+}
diff --git a/MLEB/CleanChanges/i18n/ta.json b/MLEB/CleanChanges/i18n/ta.json
new file mode 100644
index 00000000..d5eecd52
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/ta.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "TRYPPN"
+ ]
+ },
+ "cleanchanges-changerightslink": "குழுக்களை மாற்று",
+ "cleanchanges-desc": "[[Special:RecentChanges|அண்மைய மாற்றங்களின் பட்டியல்]] மிகச் சுருக்கமாக காட்டப்பட்டுள்ளது",
+ "cleanchanges-language": "மொழி:",
+ "cleanchanges-language-na": "அனைத்தும்",
+ "cleanchanges-users": "பயனர்கள் (Sep: |):",
+ "cleanchanges-showuserlinks": "பயனரின் இணைப்புக்களைக் காட்டவும்"
+}
diff --git a/MLEB/CleanChanges/i18n/te.json b/MLEB/CleanChanges/i18n/te.json
new file mode 100644
index 00000000..a979719e
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/te.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kiranmayee",
+ "Veeven"
+ ]
+ },
+ "cleanchanges-changerightslink": "గుంపులను మార్చండి",
+ "cleanchanges-desc": "[[Special:RecentChanges|ఇటీవలి మార్పుల]]ని సంక్షిప్తముగా చూపుము",
+ "cleanchanges-language": "భాష:",
+ "cleanchanges-language-na": "అన్నీ",
+ "cleanchanges-users": "వాడుకరులు (| తో వేరుపరచి):",
+ "cleanchanges-showuserlinks": "వాడుకరి లింకులను చూపుము"
+}
diff --git a/MLEB/CleanChanges/i18n/tet.json b/MLEB/CleanChanges/i18n/tet.json
new file mode 100644
index 00000000..14841e52
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/tet.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "MF-Warburg"
+ ]
+ },
+ "cleanchanges-language": "Lian:",
+ "cleanchanges-language-na": "Hotu"
+}
diff --git a/MLEB/CleanChanges/i18n/tg-cyrl.json b/MLEB/CleanChanges/i18n/tg-cyrl.json
new file mode 100644
index 00000000..bdd7de65
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/tg-cyrl.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ibrahim"
+ ]
+ },
+ "cleanchanges-changerightslink": "тағйири гурӯҳҳо",
+ "cleanchanges-language": "Забон:",
+ "cleanchanges-language-na": "Ҳама"
+}
diff --git a/MLEB/CleanChanges/i18n/tg-latn.json b/MLEB/CleanChanges/i18n/tg-latn.json
new file mode 100644
index 00000000..63f68dff
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/tg-latn.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Liangent"
+ ]
+ },
+ "cleanchanges-changerightslink": "taƣjiri gurūhho",
+ "cleanchanges-language": "Zabon:",
+ "cleanchanges-language-na": "Hama"
+}
diff --git a/MLEB/CleanChanges/i18n/th.json b/MLEB/CleanChanges/i18n/th.json
new file mode 100644
index 00000000..5b6b64b5
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/th.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Octahedron80"
+ ]
+ },
+ "cleanchanges-language-na": "ทั้งหมด"
+}
diff --git a/MLEB/CleanChanges/i18n/tk.json b/MLEB/CleanChanges/i18n/tk.json
new file mode 100644
index 00000000..7064b427
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/tk.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hanberke"
+ ]
+ },
+ "cleanchanges-language": "Dil:",
+ "cleanchanges-language-na": "Ählisi"
+}
diff --git a/MLEB/CleanChanges/i18n/tl.json b/MLEB/CleanChanges/i18n/tl.json
new file mode 100644
index 00000000..33790634
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/tl.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "AnakngAraw"
+ ]
+ },
+ "cleanchanges-changerightslink": "baguhin ang mga pangkat",
+ "cleanchanges-desc": "Mas masinsing pagpapalitaw ng [[Special:RecentChanges|talaan ng kamakailang mga pagbabago]]",
+ "cleanchanges-language": "Wika:",
+ "cleanchanges-language-na": "Lahat",
+ "cleanchanges-users": "Mga tagagamit (Panghiwalay: |):",
+ "cleanchanges-showuserlinks": "Ipakita ang mga kawing ng tagagamit"
+}
diff --git a/MLEB/CleanChanges/i18n/tr.json b/MLEB/CleanChanges/i18n/tr.json
new file mode 100644
index 00000000..aeef1572
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/tr.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Joseph",
+ "Karduelis"
+ ]
+ },
+ "cleanchanges-changerightslink": "grupları değiştir",
+ "cleanchanges-desc": "[[Special:RecentChanges|Son değişiklikler listesinin]] daha kompakt görünümü",
+ "cleanchanges-language": "Dil:",
+ "cleanchanges-language-na": "Hepsi",
+ "cleanchanges-users": "Kullanıcılar (Ayr: |):",
+ "cleanchanges-showuserlinks": "Kullanıcı bağlantılarını göster"
+}
diff --git a/MLEB/CleanChanges/i18n/tru.json b/MLEB/CleanChanges/i18n/tru.json
new file mode 100644
index 00000000..c58d0e82
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/tru.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ariyo"
+ ]
+ },
+ "cleanchanges-language": "Leşono:"
+}
diff --git a/MLEB/CleanChanges/i18n/tt-cyrl.json b/MLEB/CleanChanges/i18n/tt-cyrl.json
new file mode 100644
index 00000000..91a659da
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/tt-cyrl.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Рашат Якупов"
+ ]
+ },
+ "cleanchanges-changerightslink": "төркемнәрне төзәтергә",
+ "cleanchanges-desc": "[[Special:RecentChanges|Баягы төзәтмәләрнең]] тыгызлау",
+ "cleanchanges-language": "Тел:",
+ "cleanchanges-language-na": "Барысы",
+ "cleanchanges-users": "Катнашучылар (бүлү: |):",
+ "cleanchanges-showuserlinks": "Катнашучылар сылтамаларын күрсәтү"
+}
diff --git a/MLEB/CleanChanges/i18n/ug-arab.json b/MLEB/CleanChanges/i18n/ug-arab.json
new file mode 100644
index 00000000..9acf34ca
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/ug-arab.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Alfredie"
+ ]
+ },
+ "cleanchanges-language": "تىل:"
+}
diff --git a/MLEB/CleanChanges/i18n/ug-latn.json b/MLEB/CleanChanges/i18n/ug-latn.json
new file mode 100644
index 00000000..c543ac2a
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/ug-latn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jose77"
+ ]
+ },
+ "cleanchanges-language": "Til:"
+}
diff --git a/MLEB/CleanChanges/i18n/uk.json b/MLEB/CleanChanges/i18n/uk.json
new file mode 100644
index 00000000..6bcc0c1d
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/uk.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ahonc",
+ "Prima klasy4na"
+ ]
+ },
+ "cleanchanges-changerightslink": "змінити групи",
+ "cleanchanges-desc": "Більш стисле відображення [[Special:RecentChanges|списку останніх змін]]",
+ "cleanchanges-language": "Мова:",
+ "cleanchanges-language-na": "Усі",
+ "cleanchanges-users": "Користувачі (розділювач: |):",
+ "cleanchanges-showuserlinks": "Показувати посилання користувачів"
+}
diff --git a/MLEB/CleanChanges/i18n/uz.json b/MLEB/CleanChanges/i18n/uz.json
new file mode 100644
index 00000000..3dc9de7f
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/uz.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "CoderSI"
+ ]
+ },
+ "cleanchanges-language": "Til:",
+ "cleanchanges-users": "Ishtirokchilar (ajratuvchi: |):"
+}
diff --git a/MLEB/CleanChanges/i18n/vec.json b/MLEB/CleanChanges/i18n/vec.json
new file mode 100644
index 00000000..c5072e64
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/vec.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Candalua"
+ ]
+ },
+ "cleanchanges-changerightslink": "canbia grupi",
+ "cleanchanges-desc": "Visualixassion pi conpatta de la [[Special:RecentChanges|lista dei canbiamenti reçenti]]",
+ "cleanchanges-language": "Lengua:",
+ "cleanchanges-language-na": "Tute",
+ "cleanchanges-users": "Utenti (separà da |):",
+ "cleanchanges-showuserlinks": "Mostra colegamenti utente"
+}
diff --git a/MLEB/CleanChanges/i18n/vep.json b/MLEB/CleanChanges/i18n/vep.json
new file mode 100644
index 00000000..85341f3a
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/vep.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Игорь Бродский"
+ ]
+ },
+ "cleanchanges-language": "Kel':",
+ "cleanchanges-language-na": "Kaik",
+ "cleanchanges-users": "Kävutajad (erigoitim: |)"
+}
diff --git a/MLEB/CleanChanges/i18n/vi.json b/MLEB/CleanChanges/i18n/vi.json
new file mode 100644
index 00000000..0f6c38e1
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/vi.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Minh Nguyen",
+ "Vinhtantran"
+ ]
+ },
+ "cleanchanges-changerightslink": "thay đổi nhóm",
+ "cleanchanges-desc": "Hiển thị [[Special:RecentChanges|danh sách thay đổi gần đây]] ngắn gọn hơn",
+ "cleanchanges-language": "Ngôn ngữ:",
+ "cleanchanges-language-na": "Tất cả",
+ "cleanchanges-users": "Các thành viên (Phân cách: |):",
+ "cleanchanges-showuserlinks": "Hiện liên kết người dùng"
+}
diff --git a/MLEB/CleanChanges/i18n/vo.json b/MLEB/CleanChanges/i18n/vo.json
new file mode 100644
index 00000000..5e319f07
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/vo.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Smeira"
+ ]
+ },
+ "cleanchanges-changerightslink": "votükön grupis",
+ "cleanchanges-desc": "Jonön ma fomät brefikum [[Special:RecentChanges|lisedi votükamas nulik]]",
+ "cleanchanges-language": "Pük:",
+ "cleanchanges-language-na": "Valiks",
+ "cleanchanges-users": "Gebans (teilamal: |):",
+ "cleanchanges-showuserlinks": "Jonön gebanayümis"
+}
diff --git a/MLEB/CleanChanges/i18n/wa.json b/MLEB/CleanChanges/i18n/wa.json
new file mode 100644
index 00000000..d5b9a845
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/wa.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Srtxg"
+ ]
+ },
+ "cleanchanges-changerightslink": "candjî les groupes",
+ "cleanchanges-desc": "Håynaedje pus rasseré del [[Special:RecentChanges|djivêye des dierins candjmints]]",
+ "cleanchanges-language": "Lingaedje:",
+ "cleanchanges-language-na": "Tos",
+ "cleanchanges-users": "Uzeus (disp. avou |):",
+ "cleanchanges-showuserlinks": "Mostrer les loyéns d' l' uzeus"
+}
diff --git a/MLEB/CleanChanges/i18n/yi.json b/MLEB/CleanChanges/i18n/yi.json
new file mode 100644
index 00000000..2e8adc9f
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/yi.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "פוילישער"
+ ]
+ },
+ "cleanchanges-language": "שפראך:",
+ "cleanchanges-language-na": "אלע"
+}
diff --git a/MLEB/CleanChanges/i18n/yo.json b/MLEB/CleanChanges/i18n/yo.json
new file mode 100644
index 00000000..7999031e
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/yo.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Demmy"
+ ]
+ },
+ "cleanchanges-language-na": "Gbogbo wọn"
+}
diff --git a/MLEB/CleanChanges/i18n/zh-hans.json b/MLEB/CleanChanges/i18n/zh-hans.json
new file mode 100644
index 00000000..69275d09
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/zh-hans.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chenxiaoqino",
+ "Chenzw",
+ "Liangent",
+ "Xiaomingyan"
+ ]
+ },
+ "cleanchanges-changerightslink": "更改群组",
+ "cleanchanges-desc": "更简洁的显示[[Special:RecentChanges|最近更改清单]]",
+ "cleanchanges-language": "语言:",
+ "cleanchanges-language-na": "所有",
+ "cleanchanges-users": "用户 (Sep: |):",
+ "cleanchanges-showuserlinks": "显示用户链接"
+}
diff --git a/MLEB/CleanChanges/i18n/zh-hant.json b/MLEB/CleanChanges/i18n/zh-hant.json
new file mode 100644
index 00000000..6097c238
--- /dev/null
+++ b/MLEB/CleanChanges/i18n/zh-hant.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Alexsh",
+ "Liangent",
+ "Mark85296341",
+ "Cwlin0416"
+ ]
+ },
+ "cleanchanges-changerightslink": "更改群組",
+ "cleanchanges-desc": "更精簡的顯示 [[Special:RecentChanges|最近變更清單]]",
+ "cleanchanges-language": "語言:",
+ "cleanchanges-language-na": "全部",
+ "cleanchanges-users": "使用者 (分隔: |):",
+ "cleanchanges-showuserlinks": "顯示使用者連結"
+}
diff --git a/MLEB/CleanChanges/images/Arr_.png b/MLEB/CleanChanges/images/Arr_.png
new file mode 100644
index 00000000..bc67a4b6
--- /dev/null
+++ b/MLEB/CleanChanges/images/Arr_.png
Binary files differ
diff --git a/MLEB/CleanChanges/images/Arr_d.png b/MLEB/CleanChanges/images/Arr_d.png
new file mode 100644
index 00000000..58a9fc66
--- /dev/null
+++ b/MLEB/CleanChanges/images/Arr_d.png
Binary files differ
diff --git a/MLEB/CleanChanges/images/Arr_l.png b/MLEB/CleanChanges/images/Arr_l.png
new file mode 100644
index 00000000..2246254f
--- /dev/null
+++ b/MLEB/CleanChanges/images/Arr_l.png
Binary files differ
diff --git a/MLEB/CleanChanges/images/Arr_r.png b/MLEB/CleanChanges/images/Arr_r.png
new file mode 100644
index 00000000..467a555a
--- /dev/null
+++ b/MLEB/CleanChanges/images/Arr_r.png
Binary files differ
diff --git a/MLEB/CleanChanges/images/Arr_u.png b/MLEB/CleanChanges/images/Arr_u.png
new file mode 100644
index 00000000..1aa543af
--- /dev/null
+++ b/MLEB/CleanChanges/images/Arr_u.png
Binary files differ
diff --git a/MLEB/CleanChanges/images/showuserlinks.png b/MLEB/CleanChanges/images/showuserlinks.png
new file mode 100644
index 00000000..00a9cee1
--- /dev/null
+++ b/MLEB/CleanChanges/images/showuserlinks.png
Binary files differ
diff --git a/MLEB/CleanChanges/resources/cleanchanges.js b/MLEB/CleanChanges/resources/cleanchanges.js
new file mode 100644
index 00000000..c11ec80b
--- /dev/null
+++ b/MLEB/CleanChanges/resources/cleanchanges.js
@@ -0,0 +1,23 @@
+(function ( mw, $ ) {
+ 'use strict';
+
+ window.toggleVisibilityE = function ( levelId, otherId, linkId, type ) {
+ var thisLevel = document.getElementById( levelId ),
+ otherLevel = document.getElementById( otherId ),
+ linkLevel = document.getElementById( linkId );
+
+ if ( thisLevel.style.display === 'none' ) {
+ thisLevel.style.display = type;
+ otherLevel.style.display = 'none';
+ linkLevel.style.display = 'inline';
+ } else {
+ thisLevel.style.display = 'none';
+ otherLevel.style.display = 'inline';
+ linkLevel.style.display = 'none';
+ }
+ };
+
+ window.showUserInfo = function ( sourceVar, targetId ) {
+ $( '#' + targetId ).html( mw.config.get( sourceVar ) );
+ };
+}( mediaWiki, jQuery ) );
diff --git a/MLEB/CleanChanges/resources/cleanchanges.uls.css b/MLEB/CleanChanges/resources/cleanchanges.uls.css
new file mode 100644
index 00000000..3e902cc4
--- /dev/null
+++ b/MLEB/CleanChanges/resources/cleanchanges.uls.css
@@ -0,0 +1,24 @@
+.ext-cc-language-selector__trigger {
+ color: #0645AD;
+ cursor: pointer;
+}
+
+.ext-cc-language-selector__trigger:after {
+ margin-left: 4px;
+ border-left: 4px solid transparent;
+ border-right: 4px solid transparent;
+ border-top: 4px solid #0645AD;
+ content: "";
+ display: inline-block;
+ vertical-align: middle;
+}
+
+.ext-cc-language-selector__clear {
+ padding-left: 10px;
+ font-weight: bold;
+ cursor: pointer;
+}
+
+.ext-cc-language-selector {
+ padding-right: 50px;
+}
diff --git a/MLEB/CleanChanges/resources/cleanchanges.uls.js b/MLEB/CleanChanges/resources/cleanchanges.uls.js
new file mode 100644
index 00000000..45673416
--- /dev/null
+++ b/MLEB/CleanChanges/resources/cleanchanges.uls.js
@@ -0,0 +1,59 @@
+/**
+ *
+ * @author Niklas Laxström
+ * @license GPL-2.0+
+ */
+( function ( $, mw ) {
+ 'use strict';
+
+ function useULS( $trigger ) {
+ var update, $selected, $clear, $button = $( '<span>' );
+
+ $button
+ .addClass( 'ext-cc-language-selector__trigger' );
+
+ $clear = $( '<span>' )
+ .text( 'X' )
+ .addClass( 'ext-cc-language-selector__clear' );
+
+
+ $trigger.hide().after(
+ $( '<span>' )
+ .addClass( 'ext-cc-language-selector' )
+ .append( $button, $clear )
+ );
+
+ update = function ( value ) {
+ $selected = $trigger.children( ':selected' );
+ if ( value === '' ) {
+ $button.text( $selected.text() );
+ $clear.hide();
+ } else {
+ $button.text( $.uls.data.getAutonym( value ) );
+ $clear.show();
+ }
+ };
+
+ update( $trigger.val().replace( '/', '' ) );
+
+ $clear.on( 'click', function () {
+ $trigger.val( '' );
+ update( '' );
+ $( this ).hide();
+ } );
+
+ $button.uls( {
+ onSelect: function ( language ) {
+ $trigger.val( '/' + language );
+ update( language );
+ },
+ quickList: mw.uls.getFrequentLanguageList
+ } );
+ }
+
+ $( document ).ready( function () {
+ mw.loader.using( 'ext.uls.mediawiki', function () {
+ useULS( $( '#sp-rc-language' ) );
+ } );
+ } );
+}( jQuery, mediaWiki ) );