diff --git a/app/Resources/views/editCounter/general_stats.html.twig b/app/Resources/views/editCounter/general_stats.html.twig index e88347f7e..321a6cae9 100644 --- a/app/Resources/views/editCounter/general_stats.html.twig +++ b/app/Resources/views/editCounter/general_stats.html.twig @@ -1,4 +1,5 @@ {% extends is_sub_request ? 'subrequest.html.twig' : 'base.html.twig' %} +{% import 'macros/layout.html.twig' as layout %} {% import 'macros/wiki.html.twig' as wiki %} {% import 'macros/pieChart.html.twig' as chart %} @@ -19,7 +20,12 @@
-

{{ msg('general-stats') }}

+

+ {{ msg('general-stats') }} + + {{ layout.downloadLink('EditCounterGeneralStats', {project:project.domain, username:user.username}, ['wikitext']) }} + +

{% endif %} @@ -40,7 +46,7 @@ {% if user.globalGroups(project) %} - {{ msg("global-user-groups") }} + {{ msg('global-user-groups') }} {% for group in user.globalGroups(project) %} {{ group }}{% if not loop.last %}, {% endif %} @@ -123,7 +129,7 @@ {{ msg('average-per-page') }} - {{ ec.averageRevisionsPerPage }} + {{ ec.averageRevisionsPerPage|num_format }} {% spaceless %} diff --git a/app/Resources/views/editCounter/general_stats.wikitext.twig b/app/Resources/views/editCounter/general_stats.wikitext.twig new file mode 100644 index 000000000..9106fa277 --- /dev/null +++ b/app/Resources/views/editCounter/general_stats.wikitext.twig @@ -0,0 +1,226 @@ +{% import 'macros/wiki.html.twig' as wiki %} +{% if not is_sub_request %} +== [[User:{{ user.username }}]] == + +{% set link %}[{{ url('EditCounterGeneralStats', {'username': user.username, 'project': project.domain}) }} {{ msg('xtools-title') }}]{% endset %} +{{ msg('xtools-advert', [link, date()|date('Y-m-d H:i')]) }} +{% endif %} + +=== {{ msg('general-stats') }} === + +{| class="wikitable sortable" +| {{ msg('user-id') }} +| {{ user.id(project) }} +|- +| {{ msg('user-groups') }} +| {% for group in user.groups(project) %}{{ group }}{% if not loop.last %}, {% endif %}{% endfor %} + +{% if user.globalGroups(project) %} +|- +| {{ msg('global-user-groups') }} +| {% for group in user.globalGroups(project) %}{{ group }}{% if not loop.last %}, {% endif %}{% endfor %} + +{% endif %} +|- +| {{ msg('is-admin') }} +| {% if user.isAdmin(project) %}1{% else %}0{% endif %} + +|- +| {{ msg('first-edit') }} +| {% if ec.datetimeFirstRevision %}{{ ec.datetimeFirstRevision|date('Y-m-d H:i') }}{% endif %} + +|- +| {{ msg('latest-edit') }} +| {% if ec.datetimeLastRevision %}{{ ec.datetimeLastRevision|date('Y-m-d H:i') }}{% endif %} + +|- +| {{ msg('live-edits') }} +| [[Special:Contributions/{{user.username}}|{% verbatim %}{{FORMATNUM:{% endverbatim %}{{ec.countLiveRevisions}}}}]] {% if ec.countAllRevisions %}({{ ((ec.countLiveRevisions / ec.countAllRevisions) * 100)|percent_format }}){% endif %} + +|- +| {{ msg('deleted-edits') }} +| [[Special:DeletedContributions/{{user.username}}|{% verbatim %}{{FORMATNUM:{% endverbatim %}{{ec.countDeletedRevisions}}}}]] {% if ec.countAllRevisions %}({{ ((ec.countDeletedRevisions / ec.countAllRevisions) * 100)|percent_format }}){% endif %} + +|- +| {{ msg('total-edits') }} +| {% verbatim %}{{FORMATNUM:{% endverbatim %}{{ ec.countAllRevisions }}}} +|- +| {{ msg('last-day') }} +| {% verbatim %}{{FORMATNUM:{% endverbatim %}{{ ec.countRevisionsInLast('day') }}}} +|- +| {{ msg('last-week') }} +| {% verbatim %}{{FORMATNUM:{% endverbatim %}{{ ec.countRevisionsInLast('week') }}}} +|- +| {{ msg('last-month') }} +| {% verbatim %}{{FORMATNUM:{% endverbatim %}{{ ec.countRevisionsInLast('month') }}}} +|- +| {{ msg('last-year') }} +| {% verbatim %}{{FORMATNUM:{% endverbatim %}{{ ec.countRevisionsInLast('year') }}}} +|- +| {{ msg('average-edits-per-day', [msg('days', [1])]) }} +| {% verbatim %}{{FORMATNUM:{% endverbatim %}{{ ec.averageRevisionsPerDay|round(1) }}}} ({% verbatim %}{{FORMATNUM:{% endverbatim %}{{ ec.days }}}} {{ msg('num-days', [ec.days]) }}) +|- +| {{ msg('average-edit-size') }}* +| {% verbatim %}{{FORMATNUM:{% endverbatim %}{{ ec.averageEditSize|round(1) }}}} {{ msg('num-bytes', [ec.averageEditSize]) }} +|- +|} + +{# ======================== PAGES ======================== #} +=== {{ msg('pages') }} === + +{| class="wikitable sortable" +| {{ msg('pages-edited-total') }} +| {% verbatim %}{{FORMATNUM:{% endverbatim %}{{ ec.countAllPagesEdited}}}} +|- +| {{ msg('average-per-page') }} +| {% verbatim %}{{FORMATNUM:{% endverbatim %}{{ ec.averageRevisionsPerPage }}}} +|- +| {{ msg('pages-created') }} +| [{{ url('PagesResult', {project:project.domain, username:user.username, namespace:'all', redirects:'noredirects'}) }} {% verbatim %}{{FORMATNUM:{% endverbatim %}{{ ec.countPagesCreated }}}}] ({{ msg('pages-created-since-deleted', [ec.countPagesCreatedDeleted]) }}) +|- +| {{ msg('pages-moved') }} +| {% verbatim %}{{FORMATNUM:{% endverbatim %}{{ ec.countPagesMoved }}}} +|- +| {{ msg('pages-deleted') }} +| {% verbatim %}{{FORMATNUM:{% endverbatim %}{{ ec.countPagesDeleted|num_format }}}} +|- +|} + +{# ======================== FILES ======================== #} +=== {{ msg('files') }} === + +{| class="wikitable sortable" +| {{ msg('files-uploaded') }} +| [[Special:ListFiles/{{ user.username }}|{% verbatim %}{{FORMATNUM:{% endverbatim %}{{ ec.countFilesUploaded }}}}]] + +{% if isWMFLabs() %} +|- +| {{ msg('files-uploaded-commons') }} +| [https://commons.wikimedia.org/wiki/Special:ListFiles/{{ user.username|e('url') }} {% verbatim %}{{FORMATNUM:{% endverbatim %}{{ ec.countFilesUploadedCommons }}}}] +{% endif %} +|- +|} + +{# ======================== EDITS ======================== #} +=== {{ msg('edits') }} ({{ msg('live')|lower }}) === + +{| class="wikitable sortable" +| {{ msg('auto-edits') }} +| {% if enabled('autoedits') %}[{{ url('autoeditsResult', {project:project.domain, username:user.username, namespace:'all'}) }} {% verbatim %}{{FORMATNUM:{% endverbatim %}{{ ec.countAutomatedEdits }}}}]{% else %}{% verbatim %}{{FORMATNUM:{% endverbatim %}{{ ec.countAutomatedEdits }}}}{% endif %} +{% if ec.countLiveRevisions %} ({{ ((ec.countAutomatedEdits / ec.countLiveRevisions) * 100)|percent_format }}) +{% endif %} +|- +| {{ msg('edits-with-summaries') }} +| {% if enabled('es') %}[{{ url('EditSummaryResult', {project:project.domain, username:user.username, namespace:'all'}) }} {% verbatim %}{{FORMATNUM:{% endverbatim %}{{ ec.countRevisionsWithComments }}}}]{% else %}{% verbatim %}{{FORMATNUM:{% endverbatim %}{{ ec.countRevisionsWithComments }}}}{% endif %}{% if ec.countLiveRevisions %} ({{ ((ec.countRevisionsWithComments / ec.countLiveRevisions) * 100)|percent_format }}) +{% endif %} +|- +| {{ msg('minor-edits') }} +| {% verbatim %}{{FORMATNUM:{% endverbatim %}{{ ec.countMinorRevisions }}}}{% if ec.countLiveRevisions %} ({{ ((ec.countMinorRevisions / ec.countLiveRevisions) * 100)|percent_format }}) +{% endif %} +|- +| {{ msg('small-edits') }}* +| {% verbatim %}{{FORMATNUM:{% endverbatim %}{{ ec.countSmallEdits }}}}{% if ec.countLast5000 %} ({{ ((ec.countSmallEdits / ec.countLast5000) * 100)|percent_format }}) +{% endif %} +|- +| {{ msg('large-edits') }}* +| {% verbatim %}{{FORMATNUM:{% endverbatim %}{{ ec.countLargeEdits }}}}{% if ec.countLast5000 %} ({{ ((ec.countLargeEdits / ec.countLast5000) * 100)|percent_format }}) +{% endif %} +|- +|} + +{# ======================== ACTIONS ======================== #} +=== {{ msg('actions') }} === + +{| class="wikitable sortable" +| {{ msg('thank') }} +| [[Special:Log/thanks/{{ user.username }}|{% verbatim %}{{FORMATNUM:{% endverbatim %}{{ ec.thanks }}}}]] +|- +| {{ msg('approve') }} +| [[Special:Log/review/{{ user.username }}|{% verbatim %}{{FORMATNUM:{% endverbatim %}{{ ec.approvals }}}}]] +|- +| {{ msg('patrol') }} +| [[Special:Log/patrol/{{ user.username }}|{% verbatim %}{{FORMATNUM:{% endverbatim %}{{ ec.patrols }}}}]] +|- +| {{ msg('accounts-created') }} +| [[Special:Log/newusers/{{ user.username }}|{% verbatim %}{{FORMATNUM:{% endverbatim %}{{ ec.accountsCreated }}}}]] +|- +|} + +{% if user.isAdmin(project) %} +==== {{ msg('actions-as-admin') }} ==== + +{| class="wikitable sortable" +|- +| {{ msg('block') }} +| [{{ wiki.pageUrlRaw('Special:Log/block/' ~ user.username, project, 'subtype=block') }} {% verbatim %}{{FORMATNUM:{% endverbatim %}{{ ec.countBlocksSet }}}}] +|- +| {{ msg('reblock') }} +| [{{ wiki.pageUrlRaw('Special:Log/block/' ~ user.username, project, 'subtype=reblock') }} {% verbatim %}{{FORMATNUM:{% endverbatim %}{{ ec.countReblocksSet }}}}] +|- +| {{ msg('unblock') }} +| [{{ wiki.pageUrlRaw('Special:Log/block/' ~ user.username, project, 'subtype=unblock') }} {% verbatim %}{{FORMATNUM:{% endverbatim %}{{ ec.countUnblocksSet }}}}] +|- +| {{ msg('protect') }} +| [{{ wiki.pageUrlRaw('Special:Log/protect/' ~ user.username, project, 'subtype=protect') }} {% verbatim %}{{FORMATNUM:{% endverbatim %}{{ ec.countPagesProtected }}}}] +|- +| {{ msg('reprotect') }} +| [{{ wiki.pageUrlRaw('Special:Log/protect/' ~ user.username, project, 'subtype=modify') }} {% verbatim %}{{FORMATNUM:{% endverbatim %}{{ ec.countPagesReprotected }}}}] +|- +| {{ msg('unprotect') }} +| [{{ wiki.pageUrlRaw('Special:Log/protect/' ~ user.username, project, 'subtype=unprotect') }} {% verbatim %}{{FORMATNUM:{% endverbatim %}{{ ec.countPagesUnprotected }}}}] +|- +| {{ msg('delete') }} +| [{{ wiki.pageUrlRaw('Special:Log/delete/' ~ user.username, project, 'subtype=delete') }} {% verbatim %}{{FORMATNUM:{% endverbatim %}{{ ec.countPagesDeleted }}}}] +|- +| {{ msg('revision-delete') }} +| [{{ wiki.pageUrlRaw('Special:Log/delete/' ~ user.username, project, 'subtype=revision') }} {% verbatim %}{{FORMATNUM:{% endverbatim %}{{ ec.countEditsDeleted }}}}] +|- +| {{ msg('restore') }} +| [{{ wiki.pageUrlRaw('Special:Log/delete/' ~ user.username, project, 'subtype=restore') }} {% verbatim %}{{FORMATNUM:{% endverbatim %}{{ ec.countPagesRestored }}}}] +|- +| {{ msg('rights') }} +| [{{ wiki.pageUrlRaw('Special:Log/rights/' ~ user.username, project) }} {% verbatim %}{{FORMATNUM:{% endverbatim %}{{ ec.countRightsModified }}}}] +|- +| {{ msg('import') }} +| [{{ wiki.pageUrlRaw('Special:Log/import/' ~ user.username, project) }} {% verbatim %}{{FORMATNUM:{% endverbatim %}{{ ec.countPagesImported }}}}] +|- +|} + +{% endif %}{# ======================== BLOCKS ======================== #} +=== {{ msg('re-blocks') }} === + +{| class="wikitable sortable" +| {{ msg('block-longest') }} +| {% if ec.longestBlockSeconds == -1 %}∞ {# infinity #}{% elseif ec.longestBlockSeconds == false %}–{% else %}{{ formatDuration(ec.longestBlockSeconds) }}{% endif %} + +|- +| {{ msg('block-current') }} +| {% if user.isBlocked(project) %}[[Special:BlockList/{{ user.username }}|{% spaceless %} + {% if user.getBlockExpiry(project) == 'infinity' %}∞{# infinity #}{% else %} + {{ user.getBlockExpiry(project)|date('Y-m-d H:i') }} + {% endif %}]] +{% endspaceless %} + +{% else %}– +{% endif %} +|- +|} + +{# ======================== GLOBAL EDITS ======================== #} +=== {{ msg('top-projects-edit-counts') ~ ' (' ~ msg('approximate')|lower ~ ')' }} === + +{| class="wikitable sortable" +|- +{% set topN = 10 %} +{% for topProj in ec.globalEditCountsTopN(topN) %}{% spaceless %} +| {% if topProj.project.databaseName == project.databaseName %}►{% endif %} +{# use project.domain instead of title due to limited space available in the interface #} +[{{ wiki.pageUrlRaw('Special:Contributions/'~user.username, topProj.project) }} {{ topProj.project.domain }}] +| [{{ url('TopEditsResults', {project:topProj.project.domain, username:user.username}) }} {% verbatim %}{{FORMATNUM:{% endverbatim %}{{ topProj.total }}}}] +{% endspaceless %} + +|- +{% endfor %} +|} + +* {{ msg('data-limit', [5000, 5000|num_format]) }} diff --git a/app/Resources/views/editCounter/monthcounts.csv.twig b/app/Resources/views/editCounter/monthcounts.csv.twig new file mode 100644 index 000000000..8fac10fc6 --- /dev/null +++ b/app/Resources/views/editCounter/monthcounts.csv.twig @@ -0,0 +1,6 @@ +{{ msg('month') }},{{ msg('count') }} +{% for nsId in ec.monthCounts.totals|keys %} +{% for month,total in ec.monthTotals %} +{{ month }},{{ total }} +{% endfor %} +{% endfor %} diff --git a/app/Resources/views/editCounter/monthcounts.html.twig b/app/Resources/views/editCounter/monthcounts.html.twig index ea3fbcf4a..a2a7f54aa 100644 --- a/app/Resources/views/editCounter/monthcounts.html.twig +++ b/app/Resources/views/editCounter/monthcounts.html.twig @@ -18,7 +18,12 @@
-

{{ msg('month-counts') }}

+

+ {{ msg('month-counts') }} + + {{ layout.downloadLink('EditCounterMonthCounts', {project:project.domain, username:user.username}, ['wikitext', 'csv']) }} + +

{% endif %} diff --git a/app/Resources/views/editCounter/monthcounts.wikitext.twig b/app/Resources/views/editCounter/monthcounts.wikitext.twig new file mode 100644 index 000000000..36cc67b7f --- /dev/null +++ b/app/Resources/views/editCounter/monthcounts.wikitext.twig @@ -0,0 +1,22 @@ +{### FIXME: don't show if they haven't opted in ###} + +{% import 'macros/wiki.html.twig' as wiki %} +{% if not is_sub_request %} +== [[User:{{ user.username }}]] == + +{% set link %}[{{ url('EditCounterMonthCounts', {'username': user.username, 'project': project.domain}) }} {{ msg('xtools-title') }}]{% endset %} +{{ msg('xtools-advert', [link, date()|date('Y-m-d H:i')]) }} +{% endif %} + +=== {{ msg('month-counts') }} === + +{| class="wikitable sortable" +! {{ msg('month') }} +! {{ msg('count') }} +|- +{% for month,total in ec.monthTotals %} +| {{ month }} +| {{ total }} +|- +{% endfor %} +|} diff --git a/app/Resources/views/editCounter/namespace_totals.csv.twig b/app/Resources/views/editCounter/namespace_totals.csv.twig new file mode 100644 index 000000000..7df82feea --- /dev/null +++ b/app/Resources/views/editCounter/namespace_totals.csv.twig @@ -0,0 +1,9 @@ +{% for key in ['rank', 'namespace', 'count'] %} +{{ msg(key)|capitalize_first }}{% if not loop.last %},{% endif %} +{% endfor %} + +{% set availableNamespaces = [] %} +{% for nsId, value in ec.namespaceTotals %} +{% set availableNamespaces = availableNamespaces|merge([nsId]) %} +{{ loop.index }},{{ nsName(nsId, project.namespaces) }},{{ value }} +{% endfor %} diff --git a/app/Resources/views/editCounter/namespace_totals.html.twig b/app/Resources/views/editCounter/namespace_totals.html.twig index 9c29bbf52..de7ef67ea 100644 --- a/app/Resources/views/editCounter/namespace_totals.html.twig +++ b/app/Resources/views/editCounter/namespace_totals.html.twig @@ -18,7 +18,12 @@
-

{{ msg('namespace-totals') }}

+

+ {{ msg('namespace-totals') }} + + {{ layout.downloadLink('EditCounterNamespaceTotals', {project:project.domain, username:user.username}, ['wikitext', 'csv']) }} + +

{% endif %} @@ -47,7 +52,7 @@ {{ nsName(nsId, project.namespaces) }} - {{ value|num_format }} + {{ value|num_format }} ({{ value|percent_format(ec.countLiveRevisions) }}) diff --git a/app/Resources/views/editCounter/namespace_totals.wikitext.twig b/app/Resources/views/editCounter/namespace_totals.wikitext.twig new file mode 100644 index 000000000..eb2702ac7 --- /dev/null +++ b/app/Resources/views/editCounter/namespace_totals.wikitext.twig @@ -0,0 +1,28 @@ +{% import 'macros/wiki.html.twig' as wiki %} +{% if not is_sub_request %} +== [[User:{{ user.username }}]] == + +{% set link %}[{{ url('EditCounterNamespaceTotals', {'username': user.username, 'project': project.domain}) }} {{ msg('xtools-title') }}]{% endset %} +{{ msg('xtools-advert', [link, date()|date('Y-m-d H:i')]) }} +{% endif %} + +=== {{ msg('namespace-totals') }} === + +{| class="wikitable sortable" +|- +{% for key in ['rank', 'namespace', 'count'] %} +! {{ msg(key)|capitalize_first }} +{% endfor %} +|- +{% set availableNamespaces = [] %} +{% for nsId, value in ec.namespaceTotals %} +{% set availableNamespaces = availableNamespaces|merge([nsId]) %} +| {{ loop.index }} +| {{ nsName(nsId, project.namespaces) }} +| [{{ url('TopEditsResults', {project:project.domain, username:user.username, namespace:nsId}) }} {% verbatim %}{{FORMATNUM:{% endverbatim %}{{ value }}}}] ({{ value|percent_format(ec.countLiveRevisions) }}) +|- +{% endfor %} +! +! {{ ec.namespaceTotals|length}} {{ msg('num-namespaces', [ec.namespaceTotals|length]) }} +! {% verbatim %}{{FORMATNUM:{% endverbatim %}{{ ec.countLiveRevisions }}}} +|} diff --git a/app/Resources/views/editCounter/result.html.twig b/app/Resources/views/editCounter/result.html.twig index 145dbdff3..ccbd21f54 100644 --- a/app/Resources/views/editCounter/result.html.twig +++ b/app/Resources/views/editCounter/result.html.twig @@ -31,9 +31,12 @@ })) }} {% endset %} {% set headerLink %} - {{ msg("general-stats") }} + {{ msg('general-stats') }} {% endset %} - {{ layout.content_block(headerLink, content, '', 'general-stats', true) }} + {% set downloadLink %} + {{ layout.downloadLink('EditCounterGeneralStats', {project:project.domain, username:user.username}, ['wikitext']) }} + {% endset %} + {{ layout.content_block(headerLink, content, downloadLink, 'general-stats', true) }} {% set content %} {{ render(path('EditCounterNamespaceTotals', { @@ -44,7 +47,10 @@ {% set headerLink %} {{ msg('namespace-totals') }} {% endset %} - {{ layout.content_block(headerLink, content, '', 'namespace-totals', true) }} + {% set downloadLink %} + {{ layout.downloadLink('EditCounterNamespaceTotals', {project:project.domain, username:user.username}, ['wikitext', 'csv']) }} + {% endset %} + {{ layout.content_block(headerLink, content, downloadLink, 'namespace-totals', true) }} {% set content %} {{ render(path('EditCounterYearCounts', { @@ -55,7 +61,10 @@ {% set headerLink %} {{ msg('year-counts') }} {% endset %} - {{ layout.content_block(headerLink, content, '', 'year-counts', true) }} + {% set downloadLink %} + {{ layout.downloadLink('EditCounterYearCounts', {project:project.domain, username:user.username}, ['wikitext', 'csv']) }} + {% endset %} + {{ layout.content_block(headerLink, content, downloadLink, 'year-counts', true) }} {% set content %} {{ render(path('EditCounterMonthCounts', { @@ -68,7 +77,10 @@ {{ msg('month-counts') }} {% endset %} - {{ layout.content_block(headerLink, content, '', 'month-counts', true) }} + {% set downloadLink %} + {{ layout.downloadLink('EditCounterMonthCounts', {project:project.domain, username:user.username}, ['wikitext', 'csv']) }} + {% endset %} + {{ layout.content_block(headerLink, content, downloadLink, 'month-counts', true) }} {% set content %} {{ render(path('EditCounterTimecard', { diff --git a/app/Resources/views/editCounter/yearcounts.csv.twig b/app/Resources/views/editCounter/yearcounts.csv.twig new file mode 100644 index 000000000..c303cf858 --- /dev/null +++ b/app/Resources/views/editCounter/yearcounts.csv.twig @@ -0,0 +1,7 @@ +{{ msg('namespace') }},{% for year in ec.yearCounts.yearLabels %} +{{ year }}{% if not loop.last %},{% endif %} +{% endfor %} + +{% for nsId,namespaceData in ec.yearCounts.totals %} +{{ nsName(nsId, project.namespaces) }},{{ namespaceData|join(',') }} +{% endfor %} diff --git a/app/Resources/views/editCounter/yearcounts.html.twig b/app/Resources/views/editCounter/yearcounts.html.twig index 330a971f1..b05892454 100644 --- a/app/Resources/views/editCounter/yearcounts.html.twig +++ b/app/Resources/views/editCounter/yearcounts.html.twig @@ -18,7 +18,12 @@
-

{{ msg('year-counts') }}

+

+ {{ msg('year-counts') }} + + {{ layout.downloadLink('EditCounterYearCounts', {project:project.domain, username:user.username}, ['wikitext', 'csv']) }} + +

{% endif %} diff --git a/app/Resources/views/editCounter/yearcounts.wikitext.twig b/app/Resources/views/editCounter/yearcounts.wikitext.twig new file mode 100644 index 000000000..921054e55 --- /dev/null +++ b/app/Resources/views/editCounter/yearcounts.wikitext.twig @@ -0,0 +1,20 @@ +{% import 'macros/wiki.html.twig' as wiki %} +{% if not is_sub_request %} +== [[User:{{ user.username }}]] == + +{% set link %}[{{ url('EditCounterYearCounts', {'username': user.username, 'project': project.domain}) }} {{ msg('xtools-title') }}]{% endset %} +{{ msg('xtools-advert', [link, date()|date('Y-m-d H:i')]) }} +{% endif %} + +=== {{ msg('year-counts') }} === + +{| class="wikitable sortable" +! {{ msg('year') }} +! {{ msg('count') }} +|- +{% for year,total in ec.yearTotals %} +| {{ year }} +| {{ total }} +|- +{% endfor %} +|} diff --git a/app/Resources/views/macros/layout.html.twig b/app/Resources/views/macros/layout.html.twig index dd6f64533..cfc7e727d 100644 --- a/app/Resources/views/macros/layout.html.twig +++ b/app/Resources/views/macros/layout.html.twig @@ -62,3 +62,20 @@ {{ msgPrintExists(text, textParams) }}

{% endmacro %} + +{% macro downloadLink(path, params, types = ['wikitext', 'csv', 'json', 'png']) %} + +{% endmacro %} diff --git a/app/Resources/views/macros/wiki.html.twig b/app/Resources/views/macros/wiki.html.twig index 6a8ee8480..3341a95a4 100644 --- a/app/Resources/views/macros/wiki.html.twig +++ b/app/Resources/views/macros/wiki.html.twig @@ -6,9 +6,9 @@ {% endspaceless %} {% endmacro %} -{% macro pageUrlRaw(pageTitle, project) %}{% spaceless %} +{% macro pageUrlRaw(pageTitle, project, queryParams = null) %}{% spaceless %} {% set articlePath = project.articlePath|replace({'$1': (pageTitle|replace({' ': '_'})|e('url'))}) %} - {{ (project.url|trim('/')) ~ articlePath }} + {{ (project.url|trim('/')) ~ articlePath ~ (queryParams is not empty ? '?' ~ queryParams : '') }} {% endspaceless %}{% endmacro %} {% macro pageLink(page, label = null) %}{% spaceless %} diff --git a/i18n/af.json b/i18n/af.json index 39762720d..0279f56d1 100644 --- a/i18n/af.json +++ b/i18n/af.json @@ -1,3 +1,4 @@ { - "documentation": "Dokumentasie" + "documentation": "Dokumentasie", + "download-label": "Laai af" } diff --git a/i18n/ar.json b/i18n/ar.json index 3375e847b..1a1496b32 100644 --- a/i18n/ar.json +++ b/i18n/ar.json @@ -70,14 +70,15 @@ "considered-usernames": "أسماء المستخدمين المُعتبرة", "count": "عدد", "created-by": "أنشأها", + "csv": "CSV", "current-admins": "الإداريون الحاليون", "current-size": "الحجم الحالي", "data-limit": "البيانات تقتصر على ال$2 {{PLURAL:$1|تعديل}} السابق", "date": "التاريخ", "date-from": "من: $1", - "date-to": "إلى: $1", "date-range": "$1 - $2", "date-range-outside-revisions": "لم يتم العثور على مراجعات للنطاق الزمني المحدد", + "date-to": "إلى: $1", "delete": "حذف", "deleted": "حُذفت", "deleted-bytes": "تم حذف (بايت)", @@ -88,6 +89,7 @@ "delpagesfilter-live": "استبعاد الصفحات المحذوفة", "diff": "فرق", "documentation": "التوثيق", + "download-label": "تنزيل", "duplicate-vote": "تصويت مكرر", "edit": "عدل", "edit-count": "عدد التعديلات", diff --git a/i18n/as.json b/i18n/as.json index 788367705..8e9a51428 100644 --- a/i18n/as.json +++ b/i18n/as.json @@ -3,6 +3,7 @@ "all-languages": "সকলো ভাষা", "bot": "ব'ট", "date": "তাৰিখ", + "download-label": "ডাউনল'ড", "help-translate": "অনুবাদ কৰাত সহায় কৰক", "history": "ইতিহাস", "last-day": "যোৱা ২৪ ঘণ্টাৰ সম্পাদনা", diff --git a/i18n/az.json b/i18n/az.json index 8d7c0d39b..53c264bed 100644 --- a/i18n/az.json +++ b/i18n/az.json @@ -70,9 +70,9 @@ "data-limit": "Son $2 ilə məhdud olan məlumatlar {{PLURAL:$1|redaktə|düzəlişlər}}", "date": "Tarix", "date-from": "$1-dən", - "date-to": "$1-ə", "date-range": "$1 - $2", "date-range-outside-revisions": "Verilən tarix üçün heç bir təftiş tapılmadı", + "date-to": "$1-ə", "delete": "Sil", "deleted": "Silindi", "deleted-bytes": "Silindi (baytlarla)", @@ -83,6 +83,7 @@ "delpagesfilter-live": "Silinmiş səhifələri istisna et", "diff": "Fərq", "documentation": "Sənədləşdirmə", + "download-label": "Yüklə", "duplicate-vote": "Dublikat səs", "edit": "Redaktə", "edit-count": "Redaktə sayı", diff --git a/i18n/ba.json b/i18n/ba.json index 1cc3acc85..c20891f1c 100644 --- a/i18n/ba.json +++ b/i18n/ba.json @@ -2,6 +2,7 @@ "all": "Барыһы", "all-languages": "Бөтә телдәр", "bot": "Бот", + "csv": "CSV", "help-translate": "Тәржемә менән ярҙам итергә", "history": "Тарих", "pager-newer-n": "{{PLURAL:$1|1=1 яңыраҡ|$1 яңыраҡ}}", diff --git a/i18n/be-tarask.json b/i18n/be-tarask.json index c158ad722..d72f6f08e 100644 --- a/i18n/be-tarask.json +++ b/i18n/be-tarask.json @@ -52,6 +52,7 @@ "deleted-edits": "Выдаленыя рэдагаваньні", "diff": "Зьмена", "documentation": "Дакумэнтацыя", + "download-label": "Загрузіць", "duplicate-vote": "Дублікат голасу", "edit": "Рэдагаваць", "edit-count": "Колькасьць рэдагаваньняў", diff --git a/i18n/be.json b/i18n/be.json index 056df2fd4..1b39940ef 100644 --- a/i18n/be.json +++ b/i18n/be.json @@ -3,9 +3,11 @@ "all-languages": "Усе мовы", "api-error": "Памылка пры запыце $1", "bot": "Бот", + "csv": "CSV", "current-size": "Бягучы памер", "date": "Дата", "documentation": "Дакументацыя", + "download-label": "Загрузіць", "editors": "Рэдактары", "edits": "Змены", "help-translate": "Дапамажыце перакласці", diff --git a/i18n/bg.json b/i18n/bg.json index e6fc78835..18ea85a24 100644 --- a/i18n/bg.json +++ b/i18n/bg.json @@ -4,6 +4,7 @@ "api-error": "Грешка в заявката $1", "bot": "Бот", "documentation": "Документация", + "download-label": "Изтегляне", "help-translate": "Помощ с превода", "history": "История", "namespace": "Именно пространство", diff --git a/i18n/bgn.json b/i18n/bgn.json index 5c5f6e749..bddd93ed3 100644 --- a/i18n/bgn.json +++ b/i18n/bgn.json @@ -1,6 +1,7 @@ { "all": "موچین", "bot": "روبوٹ", + "csv": "CSV", "pager-newer-n": "{{PLURAL:$1|یک نوکتیرین مورد|$1 نوکتیرین مورد}}", "pager-older-n": "{{PLURAL:$1|یک دیمتیرین مورد|$1 دیمتیرین مورد}}", "pages": "تاکدیمان", diff --git a/i18n/bn.json b/i18n/bn.json index c7c6bb786..7b7e034be 100644 --- a/i18n/bn.json +++ b/i18n/bn.json @@ -61,13 +61,14 @@ "considered-usernames": "বিবেচিত ব্যবহারকারীনাম", "count": "গণনা", "created-by": "তৈরী করেছেন", + "csv": "CSV", "current-admins": "বর্তমান প্রশাসক", "current-size": "বর্তমান আকার", "data-limit": "উপাত্ত গত $2টি {{PLURAL:$1|সম্পাদনার}} উপর সীমাবদ্ধ", "date": "তারিখ", "date-from": "এই থেকে: $1", - "date-to": "এই পর্যন্ত: $1", "date-range": "$1 - $2", + "date-to": "এই পর্যন্ত: $1", "delete": "অপসারণ", "deleted": "অপসারিত", "deleted-bytes": "অপসারিত (বাইট)", @@ -75,6 +76,7 @@ "deleted-pages": "অপসারিত পাতা", "diff": "পার্থক্য", "documentation": "নথিপত্র", + "download-label": "ডাউনলোড", "duplicate-vote": "সদৃশ ভোট", "edit": "সম্পাদনা", "edit-count": "সম্পাদনা গণনা", diff --git a/i18n/br.json b/i18n/br.json index de2fcc5ee..5f551740f 100644 --- a/i18n/br.json +++ b/i18n/br.json @@ -6,6 +6,7 @@ "current-size": "Ment zo bremañ", "date": "Deiziad", "documentation": "Teuliadur", + "download-label": "Pellgargañ", "editors": "Aozerien", "edits": "Kemmoù", "help-translate": "Sikour da dreiñ", diff --git a/i18n/bs.json b/i18n/bs.json index ef849a091..d0cca0708 100644 --- a/i18n/bs.json +++ b/i18n/bs.json @@ -47,12 +47,14 @@ "bottom-ninety": "Ostalih 90%", "bugs": "Greške", "count": "Broj", + "csv": "CSV", "current-size": "Trenutna veličina", "data-limit": "Podaci su ograničeni na {{PLURAL:$1|posljednju izmjenu|posljednje $2 izmjene|posljednjih $2 izmjena}}", "date": "Datum", "deleted-edits": "Obrisane izmjene", "diff": "Razl", "documentation": "Dokumentacija", + "download-label": "Preuzmi", "edit": "Uredi", "edit-count": "Broj izmjena", "edit-summaries": "Sažeci izmjena", diff --git a/i18n/ca.json b/i18n/ca.json index 6d9b56d21..331ce79aa 100644 --- a/i18n/ca.json +++ b/i18n/ca.json @@ -3,6 +3,7 @@ "api-error": "Error consultar $1", "bot": "Bot", "documentation": "Documentació", + "download-label": "Descarrega", "help-translate": "Ajudeu a traduir", "last-day": "Edicions a les darreres 24 hores", "last-month": "Edicions als darrers 30 dies", diff --git a/i18n/ckb.json b/i18n/ckb.json index 254b680da..76f1bd7fb 100644 --- a/i18n/ckb.json +++ b/i18n/ckb.json @@ -60,6 +60,7 @@ "deleted-edits": "بەشدارییە سڕدراوەکان", "diff": "جیاوازییەکان", "documentation": "بەڵگەنامە", + "download-label": "داگرتن", "edit": "دەستکاری", "edit-count": "ژمارەی دەستکارییەکان", "edit-summaries": "کورتەی دەستکارییەکان", diff --git a/i18n/cs.json b/i18n/cs.json index d03706402..26dc75fdc 100644 --- a/i18n/cs.json +++ b/i18n/cs.json @@ -65,6 +65,7 @@ "delpagesfilter-live": "Neobsahuje smazané stránky", "diff": "Rozdíl", "documentation": "Dokumentace", + "download-label": "Stáhnout", "duplicate-vote": "Duplicitní hlas", "edit": "Editace", "edit-count": "Počet editací", diff --git a/i18n/da.json b/i18n/da.json index 3cd0171ba..be3487905 100644 --- a/i18n/da.json +++ b/i18n/da.json @@ -67,14 +67,15 @@ "considered-usernames": "Overvejede brugernavne", "count": "Antal", "created-by": "Oprettet af", + "csv": "CSV", "current-admins": "Nuværende administratorer", "current-size": "Nuværende størrelse", "data-limit": "Data begrænset til de seneste $2 {{PLURAL:$1|redigering|redigeringer}}", "date": "Dato", "date-from": "Fra: $1", - "date-to": "Til: $1", "date-range": "$1 - $2", "date-range-outside-revisions": "Ingen revisioner fundet for det angivne datointerval", + "date-to": "Til: $1", "delete": "Slet", "deleted": "Slettet", "deleted-bytes": "Slettet (byte)", @@ -85,6 +86,7 @@ "delpagesfilter-live": "Ekskluder slettede sider", "diff": "Forskel", "documentation": "Dokumentation", + "download-label": "Hent", "duplicate-vote": "Dupliker stemme", "edit": "Rediger", "edit-count": "Redigeringsantal", diff --git a/i18n/de.json b/i18n/de.json index f38434e8e..8ed0535d7 100644 --- a/i18n/de.json +++ b/i18n/de.json @@ -68,14 +68,15 @@ "considered-usernames": "Berücksichtigte Benutzernamen", "count": "Zähler", "created-by": "Erstellt von", + "csv": "CSV", "current-admins": "Aktuelle Administratoren", "current-size": "Aktuelle Größe", "data-limit": "Daten begrenzt auf die {{PLURAL:$1|letzte Bearbeitung|letzten $2 Bearbeitungen}}", "date": "Datum", "date-from": "Vom: $1", - "date-to": "Bis: $1", "date-range": "$1 bis $2", "date-range-outside-revisions": "Für den angegebenen Datumsbereich wurden keine Versionen gefunden", + "date-to": "Bis: $1", "delete": "Löschungen", "deleted": "Gelöscht", "deleted-bytes": "Gelöscht (Bytes)", @@ -86,6 +87,7 @@ "delpagesfilter-live": "Gelöschte Seiten ausschließen", "diff": "Unterschied", "documentation": "Dokumentation", + "download-label": "Herunterladen", "duplicate-vote": "Doppelte Abstimmung", "edit": "Bearbeiten", "edit-count": "Bearbeitungszähler", diff --git a/i18n/diq.json b/i18n/diq.json index 015041140..f6b1c7b83 100644 --- a/i18n/diq.json +++ b/i18n/diq.json @@ -2,7 +2,9 @@ "all": "Pêro", "all-languages": "Zıwani pêro", "bot": "Bot", + "csv": "CSV", "date": "Dem", + "download-label": "Ron", "editors": "Editori", "edits": "Vurnayışi", "help-translate": "Destegê tadayışi", diff --git a/i18n/el.json b/i18n/el.json index 95eedd9ca..629a3d519 100644 --- a/i18n/el.json +++ b/i18n/el.json @@ -65,6 +65,7 @@ "considered-usernames": "Προσδιορισμένα ονόματα χρήστη", "count": "Μέτρηση", "created-by": "Δημιουργήθηκε από", + "csv": "CSV", "current-admins": "Τρέχων διαχειριστές", "current-size": "Τρέχων μέγεθος", "data-limit": "Τα δεδομένα είναι περιορισμένα στις τελευταίες $2 {{PLURAL:$1|επεξεργασία|επεξεργασίες}}", @@ -83,6 +84,7 @@ "delpagesfilter-live": "Εξαίρεση των διαγεγραμμένων σελίδων", "diff": "Διαφορά", "documentation": "Τεκμηρίωση", + "download-label": "Λήψη", "duplicate-vote": "Διπλότυπη ψήφος", "edit": "Επεξεργασία", "edit-count": "Καταμέτρηση επεξεργασιών", diff --git a/i18n/en.json b/i18n/en.json index 1abaa8241..211042b7f 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -68,14 +68,15 @@ "considered-usernames": "Considered usernames", "count": "Count", "created-by": "Created by", + "csv": "CSV", "current-admins": "Current admins", "current-size": "Current size", "data-limit": "Data limited to the past $2 {{PLURAL:$1|edit|edits}}", "date": "Date", "date-from": "From: $1", - "date-to": "To: $1", "date-range": "$1 - $2", "date-range-outside-revisions": "No revisions found for the given date range", + "date-to": "To: $1", "delete": "Delete", "deleted": "Deleted", "deleted-bytes": "Deleted (bytes)", @@ -86,6 +87,7 @@ "delpagesfilter-live": "Exclude deleted pages", "diff": "Diff", "documentation": "Documentation", + "download-label": "Download", "duplicate-vote": "Duplicate vote", "edit": "Edit", "edit-count": "Edit count", @@ -393,8 +395,10 @@ "wednesday": "Wednesday", "wiki": "Wiki", "wikiproject": "WikiProject", + "wikitext": "Wikitext", "with-summary": "With summary", "words": "Words", + "xtools-advert": "Generated using $1 on $2", "xtools-slogan": "Feeding your data hunger", "xtools-title": "XTools", "year": "Year", diff --git a/i18n/eo.json b/i18n/eo.json index 62ade67f5..0b0ae0a5e 100644 --- a/i18n/eo.json +++ b/i18n/eo.json @@ -1,5 +1,6 @@ { "bot": "Roboto", + "download": "Elŝuti kiel $1", "last-day": "Redaktoj en lastaj 24 horoj", "last-month": "Redaktoj en lastaj 30 tagoj", "last-week": "Redaktoj en lastaj 7 tagoj", diff --git a/i18n/es.json b/i18n/es.json index 461cb8f45..81091d673 100644 --- a/i18n/es.json +++ b/i18n/es.json @@ -67,14 +67,15 @@ "considered-usernames": "Nombres de usuarios considerados", "count": "Conteo", "created-by": "Creado por", + "csv": "CSV", "current-admins": "Administradores actuales", "current-size": "Tamaño actual", "data-limit": "Datos limitados a {{PLURAL:$1|la última edición|las últimas $2 ediciones}}", "date": "Fecha", "date-from": "De: $1", - "date-to": "A: $1", "date-range": "$1–$2", "date-range-outside-revisions": "No se encontró ninguna revisión en el intervalo de fechas indicado", + "date-to": "A: $1", "delete": "Borrar", "deleted": "Eliminaciones", "deleted-edits": "Ediciones borradas", @@ -84,6 +85,7 @@ "delpagesfilter-live": "Excluir páginas borradas", "diff": "Diferencias", "documentation": "Documentación", + "download-label": "Descargar", "duplicate-vote": "Voto duplicado", "edit": "Editar", "edit-count": "Conteo de ediciones", diff --git a/i18n/eu.json b/i18n/eu.json index 9dc6159a1..7810faeaa 100644 --- a/i18n/eu.json +++ b/i18n/eu.json @@ -67,14 +67,15 @@ "considered-usernames": "Kontuan hartutako erabiltzaileak", "count": "Zenbaketa", "created-by": "Honek sortua:", + "csv": "CSV", "current-admins": "Egungo administratzaileak", "current-size": "Oraingo tamaina", "data-limit": "Data aurreko $2 {{PLURAL:$1|aldaketara|$2 aldaketetara}} mugatua", "date": "Data", "date-from": "Jatorria: $1", - "date-to": "Helmuga: $1", "date-range": "$1 - $2", "date-range-outside-revisions": "Ez da berrikusketarik aurkitu emandako datan", + "date-to": "Helmuga: $1", "delete": "Ezabatu", "deleted": "Ezabatuta", "deleted-bytes": "Ezabatuta (bytes)", @@ -85,6 +86,7 @@ "delpagesfilter-live": "Kendu ezabatutako orriak", "diff": "Ezb", "documentation": "Dokumentazioa", + "download-label": "Jaitsi", "duplicate-vote": "Botua bikoiztu", "edit": "Editatu", "edit-count": "Edizio kontaketa", diff --git a/i18n/fa.json b/i18n/fa.json index 65acabffb..79f4a9032 100644 --- a/i18n/fa.json +++ b/i18n/fa.json @@ -67,6 +67,7 @@ "considered-usernames": "نام کاربری مورد نظر", "count": "تعداد", "created-by": "ایجاد شده توسط", + "csv": "مقادیر جداشده با ویرگول", "current-admins": "مدیران فعلی", "current-size": "اندازه فعلی", "data-limit": "داده‌ها به $2 {{PLURAL:$1|ویرایش|ویرایش}} گذشته محدود شده‌اند", @@ -80,6 +81,7 @@ "delpagesfilter-live": "صفحات حذف‌شده در نظر گرفته نشوند", "diff": "تفاوت", "documentation": "مستندات", + "download-label": "دریافت", "duplicate-vote": "رأی تکراری", "edit": "ویرایش", "edit-count": "شمار ویرایش‌ها", diff --git a/i18n/fi.json b/i18n/fi.json index c224c0878..77041dfe1 100644 --- a/i18n/fi.json +++ b/i18n/fi.json @@ -27,12 +27,14 @@ "bot-edits": "Bottimuokkauksia", "bugs": "Bugit", "bytes": "tavua", + "csv": "CSV", "current-admins": "Nykyiset ylläpitäjät", "current-size": "Nykyinen koko", "date": "Päiväys", "deleted": "Poistettu", "deleted-edits": "Kumottuja muokkauksia", "documentation": "Dokumentaatio", + "download-label": "Lataa", "edit-summary": "Kommentoi", "editors": "Muokkaajien määrä", "edits": "muokkauksia", diff --git a/i18n/fr.json b/i18n/fr.json index 9c5020c10..b1b056df3 100644 --- a/i18n/fr.json +++ b/i18n/fr.json @@ -72,14 +72,15 @@ "considered-usernames": "Noms d’utilisateurs estimés", "count": "Total", "created-by": "Créée par", + "csv": "CSV", "current-admins": "Administrateurs actuels", "current-size": "Taille actuelle", "data-limit": "Données limitées {{PLURAL:$1|à la dernière modification|aux $2 dernières modifications}}", "date": "Date", "date-from": "Depuis : $1", - "date-to": "Jusqu'au : $1", "date-range": "$1 - $2", "date-range-outside-revisions": "Pas de version trouvée dans l'intervalle de dates donné", + "date-to": "Jusqu'au : $1", "delete": "Suppressions", "deleted": "Supprimé", "deleted-bytes": "Supprimé (octets)", @@ -90,6 +91,7 @@ "delpagesfilter-live": "Exclure les pages supprimées", "diff": "Différence", "documentation": "Documentation", + "download-label": "Télécharger", "duplicate-vote": "Vote en doublon", "edit": "Modifier", "edit-count": "Nombre de modifications", diff --git a/i18n/gl.json b/i18n/gl.json index 958555d0d..50f244d3c 100644 --- a/i18n/gl.json +++ b/i18n/gl.json @@ -55,6 +55,7 @@ "considered-usernames": "Nomes de usuario(a) considerados", "count": "Total", "created-by": "Creado por", + "csv": "CSV", "current-admins": "Administradores actuais", "current-size": "Tamaño actual", "data-limit": "Datos limitados {{PLURAL:$1|á última edición|ás últimas $2 edicións}}", @@ -64,6 +65,7 @@ "deleted-edits": "Edicións borradas", "diff": "Dif", "documentation": "Documentación", + "download-label": "Descargar", "duplicate-vote": "Voto duplicado", "edit": "Editar", "edit-count": "Contador de edicións", diff --git a/i18n/he.json b/i18n/he.json index 01eb1e898..5c6fdfb85 100644 --- a/i18n/he.json +++ b/i18n/he.json @@ -36,6 +36,7 @@ "deleted": "נמחק", "deleted-edits": "עריכות שנמחקו", "documentation": "תיעוד", + "download-label": "הורדה", "edit-summary": "הערה", "editors": "מספר העורכים", "edits": "עריכות", diff --git a/i18n/hi.json b/i18n/hi.json index f23398614..9333e0b93 100644 --- a/i18n/hi.json +++ b/i18n/hi.json @@ -38,6 +38,7 @@ "bytes": "बाइट", "considered-usernames": "विचाराधिन सदस्यनाम", "created-by": "के द्वारा बनाई गई", + "csv": "सीएसवी", "current-size": "वर्तमान आकार", "date": "दिनांक", "delete": "हटाया", @@ -48,6 +49,7 @@ "delpagesfilter-deleted": "केवल हटाए गए पृष्ठों को शामिल करें", "delpagesfilter-live": "हटाए गए पृष्ठों को हटाएं", "documentation": "प्रलेखन", + "download-label": "डाउनलोड", "edit-summary": "टिप्पणी", "editors": "संपादक", "edits": "सम्पादन", diff --git a/i18n/hr.json b/i18n/hr.json index fda5e5dd0..29d25de0a 100644 --- a/i18n/hr.json +++ b/i18n/hr.json @@ -54,6 +54,7 @@ "categories": "Kategorije", "count": "Broj", "created-by": "Stvorio", + "csv": "CSV", "current-size": "Trenutačna veličina", "data-limit": "Podatci ograničeni na $2 {{PLURAL:$1|zadnje uređivanje|zadnja uređivanja|zadnjih uređivanja}}", "date": "Datum", @@ -67,6 +68,7 @@ "delpagesfilter-live": "Izuzete izbrisane stranice", "diff": "Razl", "documentation": "Dokumentacija", + "download-label": "Preuzmi", "edit": "Uredi", "edit-count": "Broj uređivanja", "edit-count-desc": "$2 {{PLURAL:$1|uređivanje|uređivanja}}", diff --git a/i18n/hu.json b/i18n/hu.json index 35a43d376..b220feeca 100644 --- a/i18n/hu.json +++ b/i18n/hu.json @@ -60,6 +60,7 @@ "considered-usernames": "Figyelembe vett felhasználói nevek", "count": "Számláló", "created-by": "Létrehozta", + "csv": "CSV", "current-admins": "Aktuális Adminok", "current-size": "aktuális méret", "data-limit": "Az adatok kizárólag a(z) $2 {{PLURAL:$1|edit|szerkesztések}} számára vonatkoznak", @@ -73,6 +74,7 @@ "delpagesfilter-live": "A törölt oldalak nélkül", "diff": "Diff", "documentation": "dokumentációt", + "download-label": "Letöltés", "duplicate-vote": "Duplikált szavazat", "edit": "Szerkesztés", "edit-count": "Szerkesztések száma", diff --git a/i18n/hy.json b/i18n/hy.json index b471f9f96..2ffa744af 100644 --- a/i18n/hy.json +++ b/i18n/hy.json @@ -36,6 +36,7 @@ "deleted": "Հեռացվել է", "deleted-edits": "Ջնջված խմբագրումները", "documentation": "Ձեռնարկ", + "download-label": "Ներբեռնել", "edit-summary": "Մեկնաբանություն", "editors": "Խմբագրողների քանակը", "edits": "խմբագրում", diff --git a/i18n/ia.json b/i18n/ia.json index 29d66ddf3..de4aa97dd 100644 --- a/i18n/ia.json +++ b/i18n/ia.json @@ -3,6 +3,8 @@ "all-languages": "Tote le linguas", "api-error": "Error al consultar $1", "bot": "Robot", + "csv": "CSV", + "download-label": "Discargar", "help-translate": "Adjutar a traducer", "history": "Historia", "page-title": "Titulo del pagina", diff --git a/i18n/it.json b/i18n/it.json index 957aad32b..31d241ba2 100644 --- a/i18n/it.json +++ b/i18n/it.json @@ -43,13 +43,14 @@ "comma-character": ",", "considered-usernames": "Nomi utente considerati", "created-by": "Creato da", + "csv": "CSV", "current-admins": "Amministratori attuali", "current-size": "Dimensione attuale", "date": "Data", "date-from": "Da: $1", - "date-to": "A: $1", "date-range": "$1 - $2", "date-range-outside-revisions": "Nessuna versione trovata nell'intervallo di date specificato", + "date-to": "A: $1", "delete": "Cancella", "deleted": "Cancellato", "deleted-bytes": "Cancellati (byte)", @@ -59,6 +60,7 @@ "delpagesfilter-live": "Escludi pagine cancellate", "diff": "Diff", "documentation": "Documentazione", + "download-label": "Scarica", "duplicate-vote": "Voto duplicato", "edit": "Modifica", "edit-count-desc": "$2 {{PLURAL:$1|modifica|modifiche}}", diff --git a/i18n/ja.json b/i18n/ja.json index 35d177a94..42ff5b926 100644 --- a/i18n/ja.json +++ b/i18n/ja.json @@ -52,6 +52,7 @@ "bytes": "バイト", "count": "回数", "created-by": "作成者:", + "csv": "CSV", "current-admins": "現在の管理者", "current-size": "現在のサイズ", "data-limit": "データは過去$2件までの編集による", @@ -65,6 +66,7 @@ "delpagesfilter-live": "削除されたページを除外する", "diff": "差分", "documentation": "説明書", + "download-label": "ダウンロード", "edit": "編集", "edit-count": "編集回数", "edit-count-desc": "$2回{{PLURAL:$1|編集}}されました", diff --git a/i18n/ka.json b/i18n/ka.json index e4d160706..f77568f86 100644 --- a/i18n/ka.json +++ b/i18n/ka.json @@ -53,6 +53,7 @@ "bytes": "ბაიტი", "count": "რაოდენობა", "created-by": "შემქმნელი", + "csv": "CSV", "current-admins": "მიმდინარე ადმინები", "current-size": "მიმდინარე ზომა", "date": "თარიღი", @@ -60,6 +61,7 @@ "deleted": "წაიშალა", "deleted-edits": "წაშლილი რედაქტირებები", "documentation": "დოკუმენტაცია", + "download-label": "გადმოწერა", "edit": "რედაქტირება", "edit-count": "რედაქტირებების რაოდენობა", "edit-summary": "კომენტარი", diff --git a/i18n/kab.json b/i18n/kab.json index 2011d5b09..2d295ea7b 100644 --- a/i18n/kab.json +++ b/i18n/kab.json @@ -56,6 +56,7 @@ "deleted": "Yettwakkes", "deleted-edits": "Tiẓrigin yettwakksen", "diff": "Amgired", + "download-label": "Zdem", "duplicate-vote": "Tafrant tusligt", "edit": "Ẓreg", "edit-count": "Ẓreg amiḍan", diff --git a/i18n/kk-cyrl.json b/i18n/kk-cyrl.json index 0cf6a9a87..f58418abf 100644 --- a/i18n/kk-cyrl.json +++ b/i18n/kk-cyrl.json @@ -3,6 +3,8 @@ "all-languages": "Барлық тілдер", "api-error": "API-ден дерек оқылудан проблем пайда болды.", "bot": "Бот", + "csv": "CSV", + "download-label": "Түсіріп алу", "help-translate": "Аударуға көмектесу", "history": "Тарихы", "last-day": "Өткен 24 сағаттағы өңдемелер", diff --git a/i18n/ko.json b/i18n/ko.json index 0fff17777..c4a39bd43 100644 --- a/i18n/ko.json +++ b/i18n/ko.json @@ -57,13 +57,14 @@ "considered-usernames": "고려된 사용자 이름", "count": "개수", "created-by": "최초 작성자", + "csv": "CSV", "current-admins": "현재 관리자", "current-size": "현재 크기", "date": "날짜", "date-from": "시작 날짜: $1", - "date-to": "끝 날짜: $1", "date-range": "$1 - $2", "date-range-outside-revisions": "지정된 날짜 범위에 해당하는 판이 없습니다", + "date-to": "끝 날짜: $1", "delete": "삭제", "deleted": "삭제됨", "deleted-bytes": "삭제됨 (바이트)", @@ -74,6 +75,7 @@ "delpagesfilter-live": "삭제된 페이지를 제외", "diff": "차이", "documentation": "설명서", + "download-label": "다운로드", "duplicate-vote": "중복 투표", "edit": "편집", "edit-count": "편집 수", diff --git a/i18n/ksh.json b/i18n/ksh.json index 6d24049f9..c6355c62e 100644 --- a/i18n/ksh.json +++ b/i18n/ksh.json @@ -2,6 +2,8 @@ "all": "Alle", "all-languages": "Alle Schprohche", "bot": "Bot", + "csv": "CSV", + "download-label": "Eronger lahde", "help-translate": "Hellef beim Övversäze", "history": "Väsjohne", "last-day": "Aanzahl Änderonge en de läzde 24 Schtonde", diff --git a/i18n/lb.json b/i18n/lb.json index 2491f923e..626f11817 100644 --- a/i18n/lb.json +++ b/i18n/lb.json @@ -56,12 +56,13 @@ "considered-usernames": "Berücksichtegt Benotzernimm", "count": "Zuel", "created-by": "Ugeluecht vum", + "csv": "CSV", "current-admins": "Aktuell Administrateuren", "current-size": "Aktuell Gréisst", "date": "Datum", "date-from": "Vum: $1", - "date-to": "Bis: $1", "date-range": "$1 bis $2", + "date-to": "Bis: $1", "delete": "Läschen", "deleted": "Geläscht", "deleted-bytes": "Geläscht (Byten)", @@ -71,6 +72,7 @@ "delpagesfilter-live": "Geläscht Säiten ausschléissen", "diff": "Ënnerscheed", "documentation": "Dokumentatioun", + "download-label": "Eroflueden", "edit": "Änneren", "edit-count": "Zuel vun den Ännerungen", "edit-count-desc": "$2 {{PLURAL:$1|Ännerung|Ännerungen}}", diff --git a/i18n/lt.json b/i18n/lt.json index 398ac7275..24ac5e707 100644 --- a/i18n/lt.json +++ b/i18n/lt.json @@ -81,6 +81,7 @@ "delpagesfilter-live": "Neįtraukti ištrintų puslapių", "diff": "Skirt", "documentation": "Dokumentacija", + "download-label": "Atsisiųsti", "duplicate-vote": "Pasikartojantis balsas", "edit": "Redaguoti", "edit-count": "Pakeitimų skaičius", diff --git a/i18n/lv.json b/i18n/lv.json index c99f942f2..99966495c 100644 --- a/i18n/lv.json +++ b/i18n/lv.json @@ -2,8 +2,10 @@ "all": "Visas", "all-languages": "Visas valodas", "bot": "Boti", + "csv": "CSV", "date": "Datums", "documentation": "Dokumentācija", + "download-label": "Lejupielādēt", "editors": "Redaktori", "edits": "Labojumi", "help-translate": "Palīdzi iztulkot", diff --git a/i18n/mi.json b/i18n/mi.json index f148396eb..06da37e55 100644 --- a/i18n/mi.json +++ b/i18n/mi.json @@ -3,9 +3,11 @@ "all-languages": "Ngā reo katoa", "api-error": "I ngā raraunga nō te API $1 e tukua ana, ka ngere:", "bot": "Ngā keretao anake", + "csv": "RPM (CSV)", "current-size": "Nui inaianei", "date": "Rā", "documentation": "He whakamārama", + "download-label": "Tukua mai", "editors": "Ngā kaiwhakahuri", "edits": "Ngā whakahuri", "help-translate": "Tautokohia te whakamāoritanga", diff --git a/i18n/mk.json b/i18n/mk.json index 532a06717..f3e85d5f3 100644 --- a/i18n/mk.json +++ b/i18n/mk.json @@ -67,14 +67,15 @@ "considered-usernames": "Кориснички имиња предвид", "count": "Број", "created-by": "Создадено од", + "csv": "CSV", "current-admins": "Тековни администратори", "current-size": "Тековна големина", "data-limit": "Податоците се ограничени на {{PLURAL:$1|последното уердување|последните $2 уредувања}}", "date": "Датум", "date-from": "Од: $1", - "date-to": "До: $1", "date-range": "$1 - $2", "date-range-outside-revisions": "Не пронајдов преработки во дадениот временски опсег", + "date-to": "До: $1", "delete": "Бришење", "deleted": "Избришано", "deleted-bytes": "Избришано (бајти)", @@ -85,6 +86,7 @@ "delpagesfilter-live": "Изземи избришани страници", "diff": "Разл", "documentation": "Документација", + "download-label": "Преземи", "duplicate-vote": "Дуплиран глас", "edit": "Уреди", "edit-count": "Бр. на уредувања", diff --git a/i18n/mn.json b/i18n/mn.json index e316cd6c0..e8e72c1d2 100644 --- a/i18n/mn.json +++ b/i18n/mn.json @@ -3,8 +3,10 @@ "all-languages": "Бүх хэлнүүд", "api-error": "$1-ийг дуудахад алдаа гарсан", "bot": "Бот", + "csv": "CSV", "current-size": "Одооны хэмжээ", "documentation": "Баримтжуулалт", + "download-label": "Татаж авах", "editors": "Засварлагч", "edits": "Засварласан", "help-translate": "Орчуулганд тусална уу", diff --git a/i18n/nb.json b/i18n/nb.json index 1abe66c26..dac1d28ef 100644 --- a/i18n/nb.json +++ b/i18n/nb.json @@ -59,6 +59,7 @@ "considered-usernames": "Brukernavn undersøkt", "count": "Antall", "created-by": "Opprettet av", + "csv": "CSV", "current-admins": "Nåværende administratorer", "current-size": "Nåværende størrelse", "data-limit": "Dataene er begrenset til {{PLURAL:$1|den siste redigeringen|de siste $2 redigeringene}}.", diff --git a/i18n/ne.json b/i18n/ne.json index 2044c5dc3..9a18bf8d1 100644 --- a/i18n/ne.json +++ b/i18n/ne.json @@ -52,6 +52,7 @@ "deleted-edits": "मेटाएको सम्पादन", "diff": "भिन्नता", "documentation": "मिसिलिकरण", + "download-label": "डाउनलोड", "edit": "सम्पादन", "edit-count": "सम्पादन गणना", "edit-summaries": "सम्पादन सारांशहरू", diff --git a/i18n/nl.json b/i18n/nl.json index 42893ed39..4c96c70ce 100644 --- a/i18n/nl.json +++ b/i18n/nl.json @@ -51,6 +51,7 @@ "considered-usernames": "Overwogen gebruikersnamen", "count": "Aantal", "created-by": "Aangemaakt door", + "csv": "CSV", "current-admins": "Huidige administrators", "current-size": "Huidige grootte", "date": "Datum", @@ -59,6 +60,7 @@ "deleted-edits": "Verwijderde bewerkingen", "diff": "Wijz", "documentation": "Documentatie", + "download-label": "Downloaden", "edit": "Bewerken", "edit-count": "Bewerkingsteller", "edit-summaries": "Bewerkingssamenvattingen", diff --git a/i18n/oc.json b/i18n/oc.json index bbfffa2d9..13a513687 100644 --- a/i18n/oc.json +++ b/i18n/oc.json @@ -53,6 +53,7 @@ "considered-usernames": "Noms d’utilizaires estimats", "count": "Compte", "created-by": "Creat per", + "csv": "CSV", "current-size": "Talha actuala", "date": "Data", "delete": "Supressions", @@ -60,6 +61,7 @@ "deleted-edits": "Modificacions suprimidas", "diff": "Dif", "documentation": "Documentacion", + "download-label": "Telecargar", "edit": "Modificar", "edit-count": "Nombre de modificacions", "edit-summaries": "Resumit de la modificacion", diff --git a/i18n/pcd.json b/i18n/pcd.json index 8bbc6e8c1..3cb66e234 100644 --- a/i18n/pcd.json +++ b/i18n/pcd.json @@ -4,6 +4,7 @@ "bot": "Robot", "date": "Date", "documentation": "documintacion", + "download-label": "Téléquértcher", "help-translate": "Aïuder à értréduire", "history": "Histoère", "page-title": "Tite deul pache", diff --git a/i18n/pl.json b/i18n/pl.json index 403aafd5f..683f9b034 100644 --- a/i18n/pl.json +++ b/i18n/pl.json @@ -47,16 +47,18 @@ "characters": "Znaki", "considered-usernames": "Uwzględnione nazwy użytkowników", "created-by": "Utworzone przez", + "csv": "CSV", "current-size": "Aktualny rozmiar", "date": "Data", "date-from": "Od: $1", - "date-to": "Do: $1", "date-range": "$1 – $2", + "date-to": "Do: $1", "delete": "Usuwanie", "deleted": "Usunięte", "deleted-edits": "Usunięte edycje", "deleted-pages": "Usunięte strony", "documentation": "Dokumentacja", + "download-label": "Pobierz", "edit-count": "Liczba edycji", "edit-count-desc": "$2 {{PLURAL:$1|edycja|edycje|edycji}}", "edit-summary": "Komentarz", diff --git a/i18n/ps.json b/i18n/ps.json index 95170c8d4..04bd4ec03 100644 --- a/i18n/ps.json +++ b/i18n/ps.json @@ -60,6 +60,7 @@ "considered-usernames": "په پام کې نیول شوي کارن نومونه", "count": "شمېر", "created-by": "جوړیدنه لخوا د", + "csv": "CSV", "current-admins": "اوسنۍ پازوالان", "current-size": "اوسنۍ اندازه", "data-limit": "د معلوماتو محدودیت په تیر $2 {{PLURAL:$1|سمونونه|سمونونه}}", @@ -73,6 +74,7 @@ "delpagesfilter-live": "ړنګ شوي پاڼې خارج کړئ", "diff": "توپير", "documentation": "لاسوند", + "download": "د $1 په بڼه ښکته کول", "duplicate-vote": "جعلي رای", "edit": "سمول", "edit-count": "د سمونونو شمېر", diff --git a/i18n/pt-br.json b/i18n/pt-br.json index 34ff691fe..05517c2f5 100644 --- a/i18n/pt-br.json +++ b/i18n/pt-br.json @@ -61,6 +61,7 @@ "considered-usernames": "Nomes de usuário(a) considerados", "count": "Contagem", "created-by": "Criado por", + "csv": "CSV", "current-admins": "Administradores atuais", "current-size": "Tamanho atual", "data-limit": "Dados limitados $2 {{PLURAL:$1|à última edição|às últimas edições}}", @@ -74,6 +75,7 @@ "delpagesfilter-live": "Excluir as páginas eliminadas", "diff": "Diferenças", "documentation": "Documentação", + "download-label": "Baixar", "duplicate-vote": "Voto duplicado", "edit": "Editar", "edit-count": "Contagem de edições", diff --git a/i18n/pt.json b/i18n/pt.json index 7cf0a922b..199a47b71 100644 --- a/i18n/pt.json +++ b/i18n/pt.json @@ -68,14 +68,15 @@ "considered-usernames": "Nomes de utilizador(a) considerados", "count": "Contagem", "created-by": "Criada por", + "csv": "CSV", "current-admins": "Administradores atuais", "current-size": "Tamanho atual", "data-limit": "Dados limitados $2 {{PLURAL:$1|à última edição|às últimas edições}}", "date": "Data", "date-from": "De: $1", - "date-to": "A: $1", "date-range": "$1 - $2", "date-range-outside-revisions": "Não foi possível localizar nenhuma revisão no intervalo de datas especificado.", + "date-to": "A: $1", "delete": "Eliminar", "deleted": "Eliminado", "deleted-bytes": "Eliminado (bytes)", @@ -86,6 +87,7 @@ "delpagesfilter-live": "Excluir as páginas eliminadas", "diff": "Diferenças", "documentation": "documentação", + "download-label": "Descarregar", "duplicate-vote": "Voto duplicado", "edit": "Editar", "edit-count": "Contagem de edições", diff --git a/i18n/qqq.json b/i18n/qqq.json index 9d9830d10..d80b0d75e 100644 --- a/i18n/qqq.json +++ b/i18n/qqq.json @@ -69,14 +69,15 @@ "considered-usernames": "detected usernames and known socks", "count": "General term for 'count'.\n{{Identical|Count}}", "created-by": "Label for the creator of a page.", + "csv": "{{Optional}}\nLink for CSV file. See https://en.wikipedia.org/wiki/Comma-separated_values for information on what a CSV file is.\nCSV is the name of a file format; should not be translated.", "current-admins": "Label for the current number of admins for a project.", "current-size": "Indicates the current size of a page.\n{{Identical|Current size}}", "data-limit": "Footnote indictaing that data only accounts for the past $1 edits the user has made. $1 is the raw number that can be used in {{PLURAL}}, and $2 is the formatted number.", "date": "Label for a date field\n{{Identical|Date}}", "date-from": "Label for date opening dates range for revisions. Parameters:\n* $1 - date from in Y-m-d format", - "date-to": "Label for date closing dates range for revisions. Parameters:\n* $1 - date to in Y-m-d format", "date-range": "Label for dates both opening and closing dates range for revisions. Parameters:\n* $1 - date from in Y-m-d format\n* $2 - date to in Y-m-d format", "date-range-outside-revisions": "Text shown in info flash message saying that choosen date range does not contain any revisions", + "date-to": "Label for date closing dates range for revisions. Parameters:\n* $1 - date to in Y-m-d format", "delete": "Name of a MediaWiki log action, used as header of a row in the table of log action counts for a user.\n{{Identical|Delete}}", "deleted": "Deleted in the context of deleted text or deleted edits.\n{{Identical|Deleted}}", "deleted-bytes": "Label for the number of bytes that were removed from an article.", @@ -87,6 +88,7 @@ "delpagesfilter-live": "Filter to show live pages", "diff": "Link to a MediaWiki diff on a wiki\n{{Identical|Diff}}", "documentation": "The word documentation. This is used as the text for a link to a documentation page.\n{{Identical|Documentation}}", + "download-label": "Label for the download buttons.\n{{Identical|Download}}", "edit": "Link to edit a page\n{{Identical|Edit}}", "edit-count": "Label for the edit count of a user.\n{{Identical|Edit count}}", "edit-count-desc": "Further description for edit-count. $1 is the unformatted number, $2 is a formatted number", @@ -392,8 +394,10 @@ "wednesday": "{{Identical|Wednesday}}", "wiki": "Short label for Wiki\n{{Identical|Wiki}}", "wikiproject": "{{Identical|WikiProject}}", + "wikitext": "Name of the markup language used on wiki pages. This message is shown as one of the download options.\n{{Identical|Wikitext}}", "with-summary": "Chart label for edits with summary. This message should be short", "words": "Label for the number of words that are in an article.\n{{Identical|Word}}", + "xtools-advert": "When exporting statistics, this message is shown at the top. $1 is a link to XTools, and $2 is the date and time the statistics were fetched.", "xtools-slogan": "Slogan of XTools shown on the splash page.", "xtools-title": "The tool's title", "year": "General term for 'year'.\n{{Identical|Year}}", diff --git a/i18n/ro.json b/i18n/ro.json index 238eee2af..2948f7ff1 100644 --- a/i18n/ro.json +++ b/i18n/ro.json @@ -52,6 +52,7 @@ "bytes": "Octeți", "count": "Număr", "created-by": "Creată de", + "csv": "CSV", "current-admins": "Administratori actuali", "current-size": "Dimensiune actuală", "data-limit": "Date limitate la ultimele $2 {{PLURAL:$1|editare|editări|de editări}}", @@ -61,6 +62,7 @@ "deleted-edits": "Modificări șterse", "diff": "Diferență", "documentation": "Documentație", + "download-label": "Descărcare", "duplicate-vote": "Dublură vot", "edit": "Modificare", "edit-count": "Contor de modificări", diff --git a/i18n/ru.json b/i18n/ru.json index d59cbdff0..65d044017 100644 --- a/i18n/ru.json +++ b/i18n/ru.json @@ -59,17 +59,19 @@ "considered-usernames": "Учтённые имена пользователей", "count": "Количество", "created-by": "Создатель", + "csv": "CSV", "current-size": "Текущий размер", "date": "Дата", "date-from": "От: $1", - "date-to": "До: $1", "date-range": "$1 - $2", "date-range-outside-revisions": "Не найдено ревизий за данный промежуток времени", + "date-to": "До: $1", "delete": "Удаление", "deleted": "Удалено", "deleted-bytes": "Удалено (байты)", "deleted-edits": "Удалённые правки", "documentation": "Документация", + "download-label": "Загрузить", "edit": "Править", "edit-count": "Число правок", "edit-count-desc": "$2 {{PLURAL:$1|правка|правки|правок}}", diff --git a/i18n/skr-arab.json b/i18n/skr-arab.json index 7de7e72cf..a05c2cb2d 100644 --- a/i18n/skr-arab.json +++ b/i18n/skr-arab.json @@ -27,12 +27,13 @@ "count": "ڳݨو", "date": "تاریخ", "date-from": "کنوں: $1", - "date-to": "کوں: $1", "date-range": "$1 - $2", + "date-to": "کوں: $1", "delete": "مٹاؤ", "deleted": "مٹا ݙتے", "deleted-pages": "مٹائے ہوئے ورقے", "diff": "فرق", + "download-label": "ڈاؤن لوڈ ، لہاوݨ", "edit": "لکھو", "edit-count": "تبدیلیاں دی گنتی", "edit-summary": "تبدیلی دا خلاصہ", diff --git a/i18n/sl.json b/i18n/sl.json index 02cf2deae..927e56abf 100644 --- a/i18n/sl.json +++ b/i18n/sl.json @@ -5,6 +5,7 @@ "current-size": "Trenutna velikost", "date": "Datum", "documentation": "Dokumentacija", + "download-label": "Prenos", "editors": "Urejevalci", "edits": "Urejanja", "help-translate": "Pomoč pri prevajanju", diff --git a/i18n/sr-ec.json b/i18n/sr-ec.json index e71ad56cd..ca58ffea5 100644 --- a/i18n/sr-ec.json +++ b/i18n/sr-ec.json @@ -71,14 +71,15 @@ "considered-usernames": "Разматрана корисничка имена", "count": "Број", "created-by": "Направио", + "csv": "CSV", "current-admins": "Тренутни админи", "current-size": "Тренутна величина", "data-limit": "Подаци ограничени на {{PLURAL:$1|последњу $2 измену|последње $2 измене|последњих $2 измена}}", "date": "Датум", "date-from": "Од: $1", - "date-to": "До: $1", "date-range": "$1 – $2", "date-range-outside-revisions": "Нисам пронашао измену за одређени временски период", + "date-to": "До: $1", "delete": "Брисање", "deleted": "Обрисано", "deleted-bytes": "Обрисано (бајтова)", @@ -89,6 +90,7 @@ "delpagesfilter-live": "Немој обухватити обрисане странице", "diff": "Разл", "documentation": "Документација", + "download-label": "Преузми", "duplicate-vote": "Дуплирани глас", "edit": "Измена", "edit-count": "Број измена", diff --git a/i18n/sv.json b/i18n/sv.json index 5c39d20f5..052f97e39 100644 --- a/i18n/sv.json +++ b/i18n/sv.json @@ -68,14 +68,15 @@ "considered-usernames": "Funna användarnamn", "count": "Antal", "created-by": "Skapad av", + "csv": "CSV", "current-admins": "Nuvarande administratörer", "current-size": "Aktuell storlek", "data-limit": "Data begränsad till {{PLURAL:$1|den senaste redigeringen|de $2 senaste redigeringarna}}", "date": "Datum", "date-from": "Från: $1", - "date-to": "Till: $1", "date-range": "$1 - $2", "date-range-outside-revisions": "Inga sidversioner hittades för angivet datumintervall", + "date-to": "Till: $1", "delete": "Radering", "deleted": "Raderad", "deleted-bytes": "Raderad (byte)", @@ -86,6 +87,7 @@ "delpagesfilter-live": "Exkludera raderade sidor", "diff": "Skillnad", "documentation": "Dokumentation", + "download-label": "Ladda ned", "duplicate-vote": "Duplicera röst", "edit": "Redigera", "edit-count": "Antal redigeringar", diff --git a/i18n/ta.json b/i18n/ta.json index 0e5d3be72..a2ca51adf 100644 --- a/i18n/ta.json +++ b/i18n/ta.json @@ -21,6 +21,7 @@ "delete": "நீக்கவும்", "deleted": "நீக்கப்பட்டது", "deleted-edits": "நீக்கப்பட்ட தொகுப்புகள்", + "download-label": "பதிவிறக்கம் செய்", "edit": "தொகு", "edit-summary": "கருத்துரை", "editors": "தொகுத்தவர்களின் எண்ணிக்கை", diff --git a/i18n/th.json b/i18n/th.json index 0f2adba62..9b2b78257 100644 --- a/i18n/th.json +++ b/i18n/th.json @@ -31,11 +31,13 @@ "bytes": "ไบต์", "considered-usernames": "การพิจารณาผู้ใช้", "created-by": "สร้างโดย", + "csv": "CSV", "date": "วันที่", "delete": "ลบ", "deleted": "ถูกลบ", "deleted-edits": "ลบการแก้ไข", "documentation": "เอกสาร", + "download-label": "ดาวน์โหลด", "edit-summary": "ความคิดเห็น", "editors": "จำนวนการแก้ไข", "edits": "การแก้ไข", diff --git a/i18n/tr.json b/i18n/tr.json index 5641083ea..c0d2327a3 100644 --- a/i18n/tr.json +++ b/i18n/tr.json @@ -51,6 +51,7 @@ "deleted-pages": "Silinen sayfalar", "diff": "Fark", "documentation": "Belgelendirme", + "download-label": "İndir", "edit": "Değişiklik", "edit-count": "Değişiklik sayısı", "edit-summaries": "Değişiklik özetleri", diff --git a/i18n/tt-cyrl.json b/i18n/tt-cyrl.json new file mode 100644 index 000000000..1f9404876 --- /dev/null +++ b/i18n/tt-cyrl.json @@ -0,0 +1,3 @@ +{ + "download-label": "Йөкләү" +} diff --git a/i18n/uk.json b/i18n/uk.json index 4fbd69753..d3e781fd7 100644 --- a/i18n/uk.json +++ b/i18n/uk.json @@ -56,6 +56,7 @@ "considered-usernames": "Враховані імена користувачів", "count": "Кількість", "created-by": "Створено", + "csv": "CSV", "current-admins": "Поточні адміни", "current-size": "Поточний розмір", "data-limit": "Дані обмежені до $2 {{PLURAL:$1|останнього редагування|останніх редагувань}}", @@ -65,6 +66,7 @@ "deleted-edits": "Вилучено редагувань", "diff": "Різниця", "documentation": "Документація", + "download-label": "Завантажити", "duplicate-vote": "Дублікат голосу", "edit": "Редагувати", "edit-count": "Лічильник редагувань", diff --git a/i18n/ur.json b/i18n/ur.json index 0a7546e16..15a62d04c 100644 --- a/i18n/ur.json +++ b/i18n/ur.json @@ -4,6 +4,7 @@ "bot": "روبہ/بوٹ", "comma-character": "،", "date": "تاریخ", + "download-label": "ڈاؤنلوڈ", "help-translate": "ترجمہ کرنے میں مدد کریں", "history": "تاریخچہ", "last-day": "آخری 24 گھنٹوں میں ترامیم", diff --git a/i18n/vi.json b/i18n/vi.json index 7e4e4f784..f726efca7 100644 --- a/i18n/vi.json +++ b/i18n/vi.json @@ -30,11 +30,13 @@ "bytes": "byte", "considered-usernames": "Tên người dùng được tính", "created-by": "Được tạo bởi", + "csv": "CSV", "date": "Ngày tháng", "delete": "Xóa", "deleted": "Đã xóa", "deleted-edits": "Số sửa đổi bị xóa", "documentation": "Tài liệu", + "download-label": "Tải về", "edit-summary": "Miêu tả", "editors": "Số người sửa đổi", "edits": "sửa đổi", diff --git a/i18n/yi.json b/i18n/yi.json new file mode 100644 index 000000000..770758b56 --- /dev/null +++ b/i18n/yi.json @@ -0,0 +1,3 @@ +{ + "download-label": "אַראָפלאָדן" +} diff --git a/i18n/yue.json b/i18n/yue.json index 5f49e3e53..9e92d5c6a 100644 --- a/i18n/yue.json +++ b/i18n/yue.json @@ -1,6 +1,8 @@ { "all": "全部", "bot": "機械人", + "csv": "CSV", + "download": "下載做$1", "pager-newer-n": "新$1次", "pager-older-n": "舊$1次", "pages": "版", diff --git a/i18n/zh-hans.json b/i18n/zh-hans.json index 04a8160cc..deabd3eda 100644 --- a/i18n/zh-hans.json +++ b/i18n/zh-hans.json @@ -68,14 +68,15 @@ "considered-usernames": "考虑的用户名", "count": "次数", "created-by": "创建者", + "csv": "CSV", "current-admins": "当前管理员", "current-size": "当前大小", "data-limit": "限最近$2次{{PLURAL:$1|编辑}}数据", "date": "日期", "date-from": "从$1", - "date-to": "至$1", "date-range": "$1~$2", "date-range-outside-revisions": "在指定日期范围内找不到修订版本", + "date-to": "至$1", "delete": "删除", "deleted": "已删除", "deleted-bytes": "已删除(字节)", @@ -86,6 +87,7 @@ "delpagesfilter-live": "排除已删除页面", "diff": "差异", "documentation": "文档", + "download-label": "下载", "duplicate-vote": "重复投票", "edit": "编辑", "edit-count": "编辑数", diff --git a/i18n/zh-hant.json b/i18n/zh-hant.json index bfbe43b3c..257e9bd2a 100644 --- a/i18n/zh-hant.json +++ b/i18n/zh-hant.json @@ -69,14 +69,15 @@ "considered-usernames": "考慮的使用者名稱", "count": "數量", "created-by": "建立由", + "csv": "CSV", "current-admins": "目前管理員", "current-size": "目前大小", "data-limit": "資料已限定至最近 $2 次{{PLURAL:$1|編輯|編輯}}", "date": "日期", "date-from": "開始:$1", - "date-to": "結束:$1", "date-range": "$1 - $2", "date-range-outside-revisions": "所給予的日期範圍未發現修訂", + "date-to": "結束:$1", "delete": "刪除", "deleted": "已刪除", "deleted-bytes": "刪除(位元組)", @@ -87,6 +88,7 @@ "delpagesfilter-live": "不包含已刪除頁面", "diff": "差異", "documentation": "文件", + "download-label": "下載", "duplicate-vote": "重複投票", "edit": "編輯", "edit-count": "編輯次數", diff --git a/src/AppBundle/Controller/EditCounterController.php b/src/AppBundle/Controller/EditCounterController.php index 689fa5d90..d412128cf 100644 --- a/src/AppBundle/Controller/EditCounterController.php +++ b/src/AppBundle/Controller/EditCounterController.php @@ -163,14 +163,17 @@ public function generalStatsAction(Request $request) } $isSubRequest = $this->get('request_stack')->getParentRequest() !== null; - return $this->render('editCounter/general_stats.html.twig', [ + $ret = [ 'xtTitle' => $this->user->getUsername(), 'xtPage' => 'ec', 'is_sub_request' => $isSubRequest, 'user' => $this->user, 'project' => $this->project, 'ec' => $this->editCounter, - ]); + ]; + + // Output the relevant format template. + return $this->getFormattedReponse($request, 'editCounter/general_stats', $ret); } /** @@ -188,14 +191,17 @@ public function namespaceTotalsAction(Request $request) } $isSubRequest = $this->get('request_stack')->getParentRequest() !== null; - return $this->render('editCounter/namespace_totals.html.twig', [ + $ret = [ 'xtTitle' => $this->user->getUsername(), 'xtPage' => 'ec', 'is_sub_request' => $isSubRequest, 'user' => $this->user, 'project' => $this->project, 'ec' => $this->editCounter, - ]); + ]; + + // Output the relevant format template. + return $this->getFormattedReponse($request, 'editCounter/namespace_totals', $ret); } /** @@ -242,14 +248,17 @@ public function yearcountsAction(Request $request) } $isSubRequest = $this->container->get('request_stack')->getParentRequest() !== null; - return $this->render('editCounter/yearcounts.html.twig', [ + $ret = [ 'xtTitle' => $this->user->getUsername(), 'xtPage' => 'ec', 'is_sub_request' => $isSubRequest, 'user' => $this->user, 'project' => $this->project, 'ec' => $this->editCounter, - ]); + ]; + + // Output the relevant format template. + return $this->getFormattedReponse($request, 'editCounter/yearcounts', $ret); } /** @@ -270,7 +279,7 @@ public function monthcountsAction(Request $request) $optedInPage = $this->project ->getRepository() ->getPage($this->project, $this->project->userOptInPage($this->user)); - return $this->render('editCounter/monthcounts.html.twig', [ + $ret = [ 'xtTitle' => $this->user->getUsername(), 'xtPage' => 'ec', 'is_sub_request' => $isSubRequest, @@ -278,7 +287,10 @@ public function monthcountsAction(Request $request) 'project' => $this->project, 'ec' => $this->editCounter, 'opted_in_page' => $optedInPage, - ]); + ]; + + // Output the relevant format template. + return $this->getFormattedReponse($request, 'editCounter/monthcounts', $ret); } /** diff --git a/src/AppBundle/Controller/XtoolsController.php b/src/AppBundle/Controller/XtoolsController.php index 5dc425ad8..90d5704af 100644 --- a/src/AppBundle/Controller/XtoolsController.php +++ b/src/AppBundle/Controller/XtoolsController.php @@ -350,4 +350,35 @@ public function recordApiUsage($endpoint) $conn->query($updateSql); } } + + /** + * Get the rendered template for the requested format. + * @param Request $request + * @param string $templatePath Path to template without format, + * such as '/editCounter/latest_global'. + * @param array $ret Data that should be passed to the views. + * @return array + * @codeCoverageIgnore + */ + public function getFormattedReponse(Request $request, $templatePath, $ret) + { + $format = $request->query->get('format', 'html'); + if ($format == '') { + // The default above doesn't work when the 'format' parameter is blank. + $format = 'html'; + } + + $formatMap = [ + 'wikitext' => 'text/plain', + 'csv' => 'text/csv', + 'json' => 'application/json', + ]; + + $response = $this->render("$templatePath.$format.twig", $ret); + + $contentType = isset($formatMap[$format]) ? $formatMap[$format] : 'text/html'; + $response->headers->set('Content-Type', $contentType); + + return $response; + } } diff --git a/src/Xtools/EditCounter.php b/src/Xtools/EditCounter.php index 05ef09493..7ee49e5f1 100644 --- a/src/Xtools/EditCounter.php +++ b/src/Xtools/EditCounter.php @@ -973,6 +973,30 @@ private function fillInMonthTotalsAndLabels($out, DatePeriod $dateRange) return $out; } + /** + * Get total edits for each month. Used in wikitext export. + * @param null|DateTime $currentTime *USED ONLY FOR UNIT TESTING* + * @return array With the months as the keys, counts as the values. + */ + public function monthTotals($currentTime = null) + { + $months = []; + + foreach ($this->monthCounts($currentTime)['totals'] as $nsId => $nsData) { + foreach ($nsData as $year => $monthData) { + foreach ($monthData as $month => $count) { + $monthLabel = $year.'-'.sprintf('%02d', $month); + if (!isset($months[$monthLabel])) { + $months[$monthLabel] = 0; + } + $months[$monthLabel] += $count; + } + } + } + + return $months; + } + /** * Get the total numbers of edits per year. * @param null|DateTime $currentTime - *USED ONLY FOR UNIT TESTING* @@ -998,6 +1022,27 @@ public function yearCounts($currentTime = null) return $out; } + /** + * Get total edits for each year. Used in wikitext export. + * @param null|DateTime $currentTime *USED ONLY FOR UNIT TESTING* + * @return array With the years as the keys, counts as the values. + */ + public function yearTotals($currentTime = null) + { + $years = []; + + foreach ($this->yearCounts($currentTime)['totals'] as $nsId => $nsData) { + foreach ($nsData as $year => $count) { + if (!isset($years[$year])) { + $years[$year] = 0; + } + $years[$year] += $count; + } + } + + return $years; + } + /** * Get the total edit counts for the top n projects of this user. * @param int $numProjects diff --git a/tests/Xtools/EditCounterTest.php b/tests/Xtools/EditCounterTest.php index 4fffb3a23..8676e84ae 100644 --- a/tests/Xtools/EditCounterTest.php +++ b/tests/Xtools/EditCounterTest.php @@ -221,6 +221,21 @@ public function testMonthCounts() // Labels for the years $this->assertEquals(['2016', '2017'], $monthCounts['yearLabels']); + + $monthTotals = $this->editCounter->monthTotals(new DateTime('2017-04-30 23:59:59')); + $this->assertEquals( + [ + '2016-12' => 10, + '2017-01' => 0, + '2017-02' => 50, + '2017-03' => 20, + '2017-04' => 0, + ], + $monthTotals + ); + + $yearTotals = $this->editCounter->yearTotals(new DateTime('2017-04-30 23:59:59')); + $this->assertEquals(['2016' => 10, '2017' => 70], $yearTotals); } /** diff --git a/web/static/css/application.scss b/web/static/css/application.scss index 4cc8d4f8c..e20c2005a 100644 --- a/web/static/css/application.scss +++ b/web/static/css/application.scss @@ -678,6 +678,10 @@ input.form-control.show-loader { margin-top: 15px; } +.download-dropdown { + bottom: 5px; +} + @media (min-width: $bootstrap-lg) { .xt-panel-body table { width: auto;