diff --git a/javascripts/massviews/config.js b/javascripts/massviews/config.js
index 0ad38ef90..79e5d9a21 100644
--- a/javascripts/massviews/config.js
+++ b/javascripts/massviews/config.js
@@ -37,10 +37,18 @@ const config = {
placeholder: 'https://en.wikipedia.org/wiki/Category:Folk_musicians_from_New_York',
type: 'text'
},
+ wikilinks: {
+ placeholder: 'https://en.wikipedia.org/wiki/Book:New_York_City',
+ type: 'text'
+ },
pagepile: {
placeholder: '12345',
type: 'number'
},
+ subpages: {
+ placeholder: 'https://en.wikipedia.org/wiki/User:Example',
+ type: 'text'
+ },
transclusions: {
placeholder: 'https://en.wikipedia.org/wiki/Template:Infobox_Olympic_games',
type: 'text'
@@ -59,7 +67,7 @@ const config = {
validParams: {
direction: ['-1', '1'],
sort: ['title', 'views', 'original'],
- source: ['pagepile', 'category', 'transclusions', 'quarry'],
+ source: ['pagepile', 'category', 'subpages', 'transclusions', 'quarry'],
view: ['list', 'chart'],
subjectpage: ['0', '1']
}
diff --git a/javascripts/massviews/massviews.js b/javascripts/massviews/massviews.js
index 2967a0336..b4e86dfa1 100644
--- a/javascripts/massviews/massviews.js
+++ b/javascripts/massviews/massviews.js
@@ -652,10 +652,7 @@ class MassViews extends mix(Pv).with(ChartHelpers, ListHelpers) {
});
}
- processCategory(cb) {
- const [project, category] = this.getWikiPageFromURL($(this.config.sourceInput).val());
- if (!this.validateProject(project)) return;
-
+ processCategory(project, category, cb) {
if (!category) {
return this.setState('initial', () => {
this.writeMessage($.i18n('invalid-category-url'));
@@ -672,11 +669,6 @@ class MassViews extends mix(Pv).with(ChartHelpers, ListHelpers) {
titles: decodeURIComponent(category)
};
- if ($('.category-subject-toggle--input').is(':checked')) {
- requestData.meta = 'siteinfo';
- requestData.siprop = 'namespaces';
- }
-
const promise = $.ajax({
url: `https://${project}/w/api.php`,
jsonp: 'callback',
@@ -704,7 +696,9 @@ class MassViews extends mix(Pv).with(ChartHelpers, ListHelpers) {
}
const size = data.query.pages[queryKey].categoryinfo.size,
- namespaces = data.query.namespaces;
+ // siteInfo is only populated if they've opted to see subject pages instead of talk pages
+ // Otherwise namespaces are not needed by this.mapCategoryPageNames
+ namespaces = this.siteInfo ? this.siteInfo.namespaces : undefined;
let pages = data.query.categorymembers;
if (!pages.length) {
@@ -751,6 +745,114 @@ class MassViews extends mix(Pv).with(ChartHelpers, ListHelpers) {
});
}
+ processSubpages(project, targetPage, cb) {
+ if (!targetPage) {
+ return this.setState('initial', () => {
+ this.writeMessage($.i18n('invalid-page-url'));
+ });
+ }
+
+ this.sourceProject = project; // for caching purposes
+
+ // determine what namespace the targetPage is in
+ const descoredTargetPage = targetPage.descore();
+ let namespace = 0, queryTargetPage;
+ for (const ns in this.siteInfo.namespaces) {
+ if (ns === '0') continue; // skip mainspace
+
+ const nsName = this.siteInfo.namespaces[ns]['*'] + ':';
+ if (descoredTargetPage.startsWith(nsName)) {
+ namespace = this.siteInfo.namespaces[ns].id;
+ queryTargetPage = targetPage.substring(nsName.length);
+ }
+ }
+
+ // get namespace number of corresponding talk or subject page
+ const inverseNamespace = namespace % 2 === 0 ? namespace + 1 : namespace - 1;
+
+ let promises = [];
+
+ [namespace, inverseNamespace].forEach(apnamespace => {
+ promises.push(
+ $.ajax({
+ url: `https://${project}/w/api.php`,
+ jsonp: 'callback',
+ dataType: 'jsonp',
+ data: {
+ action: 'query',
+ format: 'json',
+ list: 'allpages',
+ aplimit: 500,
+ apnamespace,
+ apprefix: decodeURIComponent(queryTargetPage) + '/'
+ }
+ })
+ );
+ });
+
+ const pageLink = this.getPageLink(decodeURIComponent(targetPage), project);
+
+ $.when(...promises).done((data, data2) => {
+ // show errors, if any
+ const errors = [data, data2].filter(resp => !!resp[0].error);
+ if (errors.length) {
+ errors.forEach(error => {
+ this.setState('initial', () => {
+ this.writeMessage(
+ `${$.i18n('api-error', 'Allpages API')}: ${error[0].error.info.escape()}`
+ );
+ });
+ });
+ return false;
+ }
+
+ let pages = data[0].query.allpages.concat(data2[0].query.allpages);
+ const size = pages.length;
+
+ if (size === 0) {
+ return this.setState('initial', () => {
+ this.writeMessage($.i18n('api-error-no-data'));
+ });
+ }
+
+ if (size > this.config.pageLimit) {
+ this.writeMessage(
+ $.i18n('massviews-oversized-set', pageLink, this.formatNumber(size), this.config.pageLimit)
+ );
+
+ pages = pages.slice(0, this.config.pageLimit);
+ }
+
+ /**
+ * XXX: throttling
+ * At this point we know we have data to process,
+ * so set the throttle flag to disallow additional requests for the next 90 seconds
+ */
+ if (size > 10) this.setThrottle();
+
+ const pageNames = pages.map(page => page.title).concat([targetPage]);
+
+ this.getPageViewsData(project, pageNames).done(pageViewsData => {
+ $('.output-title').html(pageLink);
+ $('.output-params').html($(this.config.dateRangeSelector).val());
+ this.buildMotherDataset(targetPage, pageLink, pageViewsData);
+
+ cb();
+ });
+ }).fail(data => {
+ this.setState('initial');
+
+ /** structured error comes back as a string, otherwise we don't know what happened */
+ if (data && typeof data.error === 'string') {
+ this.writeMessage(
+ $.i18n('api-error', pageLink + ': ' + data.error)
+ );
+ } else {
+ this.writeMessage($.i18n('api-error-unknown', pageLink));
+ }
+ });
+ }
+
processTemplate(cb) {
const [project, template] = this.getWikiPageFromURL($(this.config.sourceInput).val());
if (!this.validateProject(project)) return;
@@ -836,6 +938,91 @@ class MassViews extends mix(Pv).with(ChartHelpers, ListHelpers) {
});
}
+ processWikiPage(cb) {
+ const [project, page] = this.getWikiPageFromURL($(this.config.sourceInput).val());
+ if (!this.validateProject(project)) return;
+
+ if (!page) {
+ return this.setState('initial', () => {
+ this.writeMessage($.i18n('invalid-page-url'));
+ });
+ }
+
+ const promise = $.ajax({
+ url: `https://${project}/w/api.php`,
+ jsonp: 'callback',
+ dataType: 'jsonp',
+ data: {
+ action: 'query',
+ format: 'json',
+ pllimit: 500,
+ titles: decodeURIComponent(page),
+ prop: 'links'
+ }
+ });
+ const pageLink = this.getPageLink(decodeURIComponent(page), project);
+ this.sourceProject = project; // for caching purposes
+
+ promise.done(data => {
+ if (data.error) {
+ return this.setState('initial', () => {
+ this.writeMessage(
+ `${$.i18n('api-error', 'Links API')}: ${data.error.info.escape()}`
+ );
+ });
+ }
+
+ const queryKey = Object.keys(data.query.pages)[0];
+
+ if (queryKey === '-1' || !data.query.pages[queryKey].links) {
+ return this.setState('initial', () => {
+ this.writeMessage($.i18n('api-error-no-data'));
+ });
+ }
+
+ const pages = data.query.pages[queryKey].links.map(page => page.title);
+
+ if (!pages.length) {
+ return this.setState('initial', () => {
+ this.writeMessage($.i18n('massviews-empty-set', pageLink));
+ });
+ }
+
+ // in this case we are limited by the API to 500 pages, not this.config.pageLimit
+ if (data.continue) {
+ this.writeMessage(
+ $.i18n('massviews-oversized-set-unknown', pageLink, 500)
+ );
+ }
+
+ /**
+ * XXX: throttling
+ * At this point we know we have data to process,
+ * so set the throttle flag to disallow additional requests for the next 90 seconds
+ */
+ if (pages.length > 10) this.setThrottle();
+
+ this.getPageViewsData(project, pages).done(pageViewsData => {
+ $('.output-title').html(pageLink);
+ $('.output-params').html($(this.config.dateRangeSelector).val());
+ this.buildMotherDataset(page, pageLink, pageViewsData);
+
+ cb();
+ });
+ }).fail(data => {
+ this.setState('initial');
+
+ /** structured error comes back as a string, otherwise we don't know what happened */
+ if (data && typeof data.error === 'string') {
+ this.writeMessage(
+ $.i18n('api-error', pageLink + ': ' + data.error)
+ );
+ } else {
+ this.writeMessage($.i18n('api-error-unknown', pageLink));
+ }
+ });
+ }
+
processQuarry(cb) {
const project = $('.quarry-project').val(),
id = $(this.config.sourceInput).val();
@@ -946,12 +1133,36 @@ class MassViews extends mix(Pv).with(ChartHelpers, ListHelpers) {
this.renderData();
};
+ let project, target;
+
switch ($('#source_button').data('value')) {
case 'pagepile':
this.processPagePile(cb);
break;
case 'category':
- this.processCategory(cb);
+ // parse input before calling processCategory, so we can query for siteinfo if needed
+ [project, target] = this.getWikiPageFromURL($(this.config.sourceInput).val());
+ if (!this.validateProject(project)) return;
+
+ // fetch siteinfo to get namespaces if they've opted to use subject page instead of talk
+ if ($('.category-subject-toggle--input').is(':checked')) {
+ this.getSiteInfo(project).then(() => {
+ this.processCategory(project, target, cb);
+ });
+ } else {
+ this.processCategory(project, target, cb);
+ }
+ break;
+ case 'subpages':
+ // parse input before calling processSubpages so we can query for siteinfo
+ [project, target] = this.getWikiPageFromURL($(this.config.sourceInput).val());
+ if (!this.validateProject(project)) return;
+
+ // fetch namespaces first
+ this.getSiteInfo(project).then(() => this.processSubpages(project, target, cb));
+ break;
+ case 'wikilinks':
+ this.processWikiPage(cb);
break;
case 'transclusions':
this.processTemplate(cb);
diff --git a/javascripts/shared/pv.js b/javascripts/shared/pv.js
index 3d474c659..c3c49d14e 100644
--- a/javascripts/shared/pv.js
+++ b/javascripts/shared/pv.js
@@ -598,6 +598,47 @@ class Pv extends PvConfig {
}
}
+ /**
+ * Get general information about a project, such as namespaces, title of the main page, etc.
+ * Data returned by the api is also stored in this.siteInfo
+ * @param {String} project - project such as en.wikipedia (with or without .org)
+ * @returns {Deferred} promise resolving with siteinfo
+ */
+ getSiteInfo(project) {
+ project = project.replace(/\.org$/, '');
+ const dfd = $.Deferred(),
+ cacheKey = `pageviews-siteinfo-${project}`;
+
+ // use cached site info if present
+ if (simpleStorage.hasKey(cacheKey)) {
+ this.siteInfo = simpleStorage.get(cacheKey);
+ dfd.resolve(this.siteInfo);
+ } else {
+ // otherwise fetch siteinfo and store in cache
+ $.ajax({
+ url: `https://${project}.org/w/api.php`,
+ data: {
+ action: 'query',
+ meta: 'siteinfo',
+ siprop: 'general|namespaces',
+ format: 'json'
+ },
+ dataType: 'jsonp'
+ }).done(data => {
+ this.siteInfo = data.query;
+
+ // cache for one week (TTL is in milliseconds)
+ simpleStorage.set(cacheKey, this.siteInfo, {TTL: 1000 * 60 * 60 * 24 * 7});
+
+ dfd.resolve(this.siteInfo);
+ }).fail(data => {
+ dfd.reject(data);
+ });
+ }
+
+ return dfd;
+ }
+
/**
* Get user agent, if supported
* @returns {string} user-agent
diff --git a/javascripts/topviews/topviews.js b/javascripts/topviews/topviews.js
index f949ab635..d7b28d8ff 100644
--- a/javascripts/topviews/topviews.js
+++ b/javascripts/topviews/topviews.js
@@ -748,7 +748,7 @@ class TopViews extends Pv {
});
};
- const processPages = () => {
+ this.getSiteInfo(this.project).done(() => {
let unacceptableNamespaces = [];
// for non-mainspace, count 'Wikipedia' and 'Special' since API seems to
@@ -769,33 +769,10 @@ class TopViews extends Pv {
this.excludes = doFiltering(this.excludes, unacceptableNamespaces);
dfd.resolve(pages);
- };
-
- const cacheKey = `pageviews-siteinfo-${this.project}`;
-
- // use cached site info if present
- if (simpleStorage.hasKey(cacheKey)) {
- this.siteInfo = simpleStorage.get(cacheKey);
- processPages();
- } else {
- // otherwise fetch siteinfo and store in cache
- $.ajax({
- url: `https://${this.project}.org/w/api.php`,
- data: {
- action: 'query',
- meta: 'siteinfo',
- siprop: 'general|namespaces',
- format: 'json'
- },
- dataType: 'jsonp'
- }).always(data => {
- this.siteInfo = data.query;
-
- // cache for one week (TTL is in milliseconds)
- simpleStorage.set(cacheKey, this.siteInfo, {TTL: 1000 * 60 * 60 * 24 * 7});
- processPages();
- });
- }
+ }).fail(() => {
+ this.writeMessage(`${$.i18n('api-error', 'Siteinfo API')}`);
+ dfd.resolve(pages);
+ });
return dfd;
}
diff --git a/messages/be-tarask.json b/messages/be-tarask.json
index 8ba8f157e..bb3cb9aa5 100644
--- a/messages/be-tarask.json
+++ b/messages/be-tarask.json
@@ -151,8 +151,8 @@
"faq-source-unique-devices": "— колькасьць унікальных прыладаў, якія наведалі сайт.",
"faq-massviews-sources-title": "Што такое «Крыніцы»?",
"faq-massviews-sources-pagepile": "— лічбавы ідэнтыфікатар старонак, створаных з $1. Вы можаце ствараць сьпісы ды імпартаваць іх у Масавыя прагляды дзеля аналізу колькасьці іхніх праглядаў.",
- "faq-massviews-sources-category-url": "— поўны URL старонкі катэгорыі, напрыклад $1.",
- "faq-massviews-sources-template-url": "— поўны URL старонкі шаблёну, напрыклад $1. Выніковы набор уключацьме старонкі, на якіх выкарыстоўваецца шаблён.",
+ "faq-massviews-sources-category": "— поўны URL старонкі катэгорыі, напрыклад $1.",
+ "faq-massviews-sources-template": "— поўны URL старонкі шаблёну, напрыклад $1. Выніковы набор уключацьме старонкі, на якіх выкарыстоўваецца шаблён.",
"faq-massviews-sources-quarry": "— лічбавы ідэнтыфікатар праекту набору зьвестак $1. Слупок $2 (абавязковы) — тое, што будзе выкарыстанае як назвы старонак.",
"faq-massviews-subject-page-title": "Што азначае опцыя «$1»?",
"faq-throttle-wait-title": "Чаму я мушу чакаць {{PLURAL:$1|сэкунду|сэкунды|сэкундаў}}, перш чым скарыстацца інструмэнтам паўторна?",
@@ -219,12 +219,11 @@
"invalid-template-url": "Няслушны шаблён! Калі ласка, увядзіце поўны вікі-URL шаблёну або старонкі.",
"invalid-quarry-dataset": "Няслушны набор зьвестак Quarry! Неабходны слупок $1 ня знойдзены.",
"source": "Крыніца",
- "page-pile-id": "ідэнтыфікатар Page Pile",
- "category-url": "URL катэгорыі",
+ "category": "катэгорыі",
"elapsed-time": "Мінула часу: $1 {{PLURAL:$1|сэкунда|сэкунды|сэкундаў}}",
"num-pages": "$1 {{PLURAL:$1|старонка|старонкі|старонак}}",
"category-subject-toggle": "Выкарыстоўваць асноўную старонку замест старонкі абмеркаваньня",
- "template-url": "URL шаблёну",
+ "template": "шаблёну",
"logarithmic-scale": "Лягарытмічная шкала",
"bezier-curve-option": "Выкарыстоўваць на лінейных дыяграмах крывую Бэзье",
"list": "Сьпіс",
diff --git a/messages/bn.json b/messages/bn.json
index 5dad5cda7..6bdf540d3 100644
--- a/messages/bn.json
+++ b/messages/bn.json
@@ -186,12 +186,11 @@
"invalid-template-url": "অবৈধ টেমপ্লেট! দয়া করে টেমপ্লেট বা পৃষ্ঠার পূর্ণ উইকি URL লিখুন।",
"invalid-quarry-dataset": "ডেটাসেটের কোয়েরি অবৈধ! $1 কলামটি প্রয়োজনীয় কিন্তু তা পাওয়া যায়নি।",
"source": "উৎস",
- "page-pile-id": "Page Pile আইডি",
- "category-url": "বিষয়শ্রেণীর URL",
+ "category": "বিষয়শ্রেণীর",
"elapsed-time": "অতিবাহিত সময়: $1 {{PLURAL:$1|সেকেন্ড}}",
"num-pages": "$1টি {{PLURAL:$1|পাতা}}",
"category-subject-toggle": "আলাপ পাতার পরিবর্তে বিষয়ের পাতা ব্যবহার করুন",
- "template-url": "টেমপ্লেট URL",
+ "template": "টেমপ্লেট",
"logarithmic-scale": "লগারিদমী স্কেল",
"bezier-curve-option": "রেখার চার্টে বেজিয়ে বক্ররেখা ব্যবহার করুন",
"list": "তালিকা",
diff --git a/messages/ca.json b/messages/ca.json
index a4908b24b..d9e8f4ee6 100644
--- a/messages/ca.json
+++ b/messages/ca.json
@@ -143,8 +143,8 @@
"faq-source-unique-devices": "és el nombre de dispositius únics que han visitat el lloc.",
"faq-massviews-sources-title": "Quins són els \"fonts de dades\"?",
"faq-massviews-sources-pagepile": "és l'IDENTIFICADOR numèric d'un conjunt de pàgines creades amb $1. Podeu crear llistes i importar-los a Massviews a analitzar el nombre de les pàgines vistes.",
- "faq-massviews-sources-category-url": "és la URL completa d'una pàgina de categoria, per exemple $1.",
- "faq-massviews-sources-template-url": "és la URL completa d'una plantilla de pàgina, per exemple $1. El resultat serà les pàgines que transcluien la plantilla.",
+ "faq-massviews-sources-category": "és la URL completa d'una pàgina de categoria, per exemple $1.",
+ "faq-massviews-sources-template": "és la URL completa d'una plantilla de pàgina, per exemple $1. El resultat serà les pàgines que transcluien la plantilla.",
"faq-massviews-subject-page-title": "Què és la \"$1\" opció?",
"faq-massviews-subject-page-body": "Aquesta opció és per a quan vulgueu utilitzar una categoria com la font. En alguns casos la categoria pot contenir pàgines de discussió quan vostè realment vol trobar el tema de les pàgines. Per exemple FA-Classe de la Ciutat de Nova York articles, que llista les pàgines de discussió de l'articles de qualitat FA dins del viquiprojecte de la Ciutat de Nova York.",
"faq-throttle-wait-title": "Per què m'he d'esperar $1 segons abans que jo pugui usar l'eina per la segona vegada?",
diff --git a/messages/cs.json b/messages/cs.json
index 656f4eab7..4f58a693a 100644
--- a/messages/cs.json
+++ b/messages/cs.json
@@ -135,7 +135,7 @@
"massviews-redirect": "Byli jste přesměrováni z $1 , protože jste požádali o více než $2 stránky. $3 byla automaticky vytvořena a bude zpracována.",
"elapsed-time": "Uplynulý čas: $1 {{PLURAL:$1|sekunda|sekundy|sekund}}",
"num-pages": "$1 {{PLURAL:$1|stránka|stránky|stránek}}",
- "template-url": "URL šablony",
+ "template": "šablony",
"logarithmic-scale": "Logaritmické měřítko",
"bezier-curve-option": "Použít Bézierovu křivku na lineární grafy",
"list": "Seznam",
diff --git a/messages/de.json b/messages/de.json
index ad6756a2b..cd3cf04a0 100644
--- a/messages/de.json
+++ b/messages/de.json
@@ -157,8 +157,8 @@
"faq-source-unique-devices": "ist die Anzahl der eindeutigen Geräte, die die Website besucht haben.",
"faq-massviews-sources-title": "Was sind die „Quellen“?",
"faq-massviews-sources-pagepile": "ist die numerische Kennung eines Satzes von Seiten, die mit $1 erstellt wurden. Du kannst Listen erstellen und sie in Massviews importieren, um ihre Seitenaufrufe zu analysieren.",
- "faq-massviews-sources-category-url": "ist die vollständige URL einer Kategorieseite, zum Beispiel $1.",
- "faq-massviews-sources-template-url": "ist die vollständige URL einer Vorlagenseite, zum Beispiel $1. Der Ergebnissatz werden die Seiten sein, die die Vorlage einbinden.",
+ "faq-massviews-sources-category": "ist die vollständige URL einer Kategorieseite, zum Beispiel $1.",
+ "faq-massviews-sources-template": "ist die vollständige URL einer Vorlagenseite, zum Beispiel $1. Der Ergebnissatz werden die Seiten sein, die die Vorlage einbinden.",
"faq-massviews-sources-quarry": "ist die numerische Kennung und das Projekt eines $1-Datensatzes. Die Spalte $2 (erforderlich) wird als die Seitennamen verwendet.",
"faq-massviews-subject-page-title": "Was ist die Option „$1“?",
"faq-massviews-subject-page-body": "Diese Option ist dafür, wenn du eine Kategorie als Quelle verwendest. In einigen Fällen kann die Kategorie Diskussionsseiten enthalten, obwohl du die dazugehörigen Seiten möchtest. Zum Beispiel „exzellente Artikel zu New York City“, die die Diskussionsseiten von exzellenten Artikeln innerhalb des Wikiprojekts „New York City“ auflistet.",
@@ -232,12 +232,11 @@
"invalid-template-url": "Ungültige Vorlage! Bitte gib die vollständige Wiki-URL der Vorlage oder Seite ein.",
"invalid-quarry-dataset": "Ungültiger Quarry-Datensatz! Die Spalte $1 ist erforderlich, wurde aber nicht gefunden.",
"source": "Quelle",
- "page-pile-id": "„Page Pile“-Kennung",
- "category-url": "Kategorie-URL",
+ "category": "Kategorie",
"elapsed-time": "Verstrichene Zeit: {{PLURAL:$1|Eine Sekunde|$1 Sekunden}}",
"num-pages": "{{PLURAL:$1|Eine Seite|$1 Seiten}}",
"category-subject-toggle": "Die dazugehörige Seite anstatt die Diskussionsseite verwenden",
- "template-url": "Vorlagen-URL",
+ "template": "Vorlagen",
"logarithmic-scale": "Logarithmische Skala",
"bezier-curve-option": "Bézierkurven auf Liniendiagrammen verwenden",
"list": "Liste",
diff --git a/messages/el.json b/messages/el.json
index 0688fdb61..0a12e3aef 100644
--- a/messages/el.json
+++ b/messages/el.json
@@ -149,6 +149,5 @@
"unique-devices": "Ατομικές συσκευές",
"massviews-empty-set": "Το $1 δεν περιέχει σελίδες!",
"source": "Πηγή",
- "category-url": "Κατηγορία URL",
- "template-url": "Πρότυπο URL"
+ "category": "Κατηγορία"
}
diff --git a/messages/en.json b/messages/en.json
index a9a63ccd1..dc7e50f9b 100644
--- a/messages/en.json
+++ b/messages/en.json
@@ -155,10 +155,12 @@
"faq-source-pageviews": "is the total number of pageviews the project received.",
"faq-source-unique-devices": "is the number of unique devices that visited the site.",
"faq-massviews-sources-title": "What are the \"Sources\"?",
- "faq-massviews-sources-pagepile": "is the numeric ID of a set of pages created with $1. You can create lists and import them into Massviews to analyze their pageviews.",
- "faq-massviews-sources-category-url": "is the full URL of a category page, for example $1.",
- "faq-massviews-sources-template-url": "is the full URL of a template page, for example $1. The result set will be the pages that transclude the template.",
- "faq-massviews-sources-quarry": "is the numeric ID and project of a $1 dataset. The $2 column (required) is what will be used as the page titles.",
+ "faq-massviews-sources-pagepile": "Enter the numeric ID of a set of pages created with $1. You can create lists and import them into Massviews to analyze their pageviews.",
+ "faq-massviews-sources-category": "Enter the full URL of a category page, for example $1. The result set will be the pages in the category.",
+ "faq-massviews-sources-wikilinks": "Enter the full URL of any page, for example $1. The result set will be all of the wikilinks that are on the page.",
+ "faq-massviews-sources-template": "Enter the full URL of a template page, for example $1. The result set will be the pages that transclude the template.",
+ "faq-massviews-sources-subpages": "Enter the full URL of any page, for example $1. The result set will be the target page and all of its subpages.",
+ "faq-massviews-sources-quarry": "Enter the numeric ID and project of a $1 dataset. The $2 column (required) is what will be used as the page titles.",
"faq-massviews-subject-page-title": "What is the \"$1\" option?",
"faq-massviews-subject-page-body": "This option is for when you are using a category as the source. In some cases the category may contain talk pages when you actually want the subject pages. For instance FA-Class New York City articles, which lists the talk pages of FA-quality articles within WikiProject New York City.",
"faq-throttle-wait-title": "Why do I have to wait $1 seconds before I can use the tool a second time?",
@@ -190,7 +192,7 @@
"url-structure-sort-redirectviews": "Which column to sort. One of $1, $2 or $3",
"url-structure-source": "Either $1 (total page views) or $2 (number of unique devices that viewed the site)",
"url-structure-massviews-example": "Example URL for PagePile: $1\nExample URL for a category: $2\nTo link to Massviews on a category page on your wiki, use:\n$3",
- "url-structure-massviews-source": "One of $1, $2, $3 or $4",
+ "url-structure-massviews-source": "One of $1, $2, $3, $4 or $5",
"url-structure-massviews-target": "The Page Pile ID, or full URL to a category. If a question mark ? is in the URL, it must be encoded.",
"url-structure-massviews-target-example": "For instance, do not use:\n$1\nInstead use:\n$2\nOr you could simply use the shorter wiki URL:\n$3",
"url-structure-massviews-project": "A valid $1 for the pages of Quarry results.",
@@ -228,15 +230,17 @@
"siteviews-description": "Comparison of total pageviews across multiple projects",
"redirectviews-description": "Pageviews of all redirects to a page",
"invalid-category-url": "Invalid category! Please enter the full wiki URL of the category.",
+ "invalid-page-url": "Invalid page! Please enter the full wiki URL of the page.",
"invalid-template-url": "Invalid template! Please enter the full wiki URL of the template or page.",
"invalid-quarry-dataset": "Invalid Quarry dataset! The $1 column is required but was not found.",
"source": "Source",
- "page-pile-id": "Page Pile ID",
- "category-url": "Category URL",
+ "category": "Category",
+ "wikilinks": "Wikilinks",
+ "transclusions": "Transclusions",
+ "subpages": "Subpages",
"elapsed-time": "Elapsed time: $1 {{PLURAL:$1|second|seconds}}",
"num-pages": "$1 {{PLURAL:$1|page|pages}}",
"category-subject-toggle": "Use subject page instead of talk page",
- "template-url": "Template URL",
"logarithmic-scale": "Logarithmic scale",
"bezier-curve-option": "Use Bézier curve on line charts",
"list": "List",
diff --git a/messages/es.json b/messages/es.json
index 1e533d3b2..5f4122dc6 100644
--- a/messages/es.json
+++ b/messages/es.json
@@ -169,7 +169,7 @@
"invalid-category-url": "Categoría no válida. Escribe el URL wiki completo de la categoría.",
"invalid-template-url": "¡Plantilla no válida! Escribe el URL wiki completo de la plantilla o la página.",
"source": "Fuente",
- "category-url": "URL de la categoría",
+ "category": "Categoría",
"elapsed-time": "Tiempo transcurrido: $1 {{PLURAL:$1|segundo|segundos}}",
"num-pages": "$1 {{PLURAL:$1|página|páginas}}",
"logarithmic-scale": "Escala logarítmica",
diff --git a/messages/eu.json b/messages/eu.json
index fc9da2c4f..52a0a97f5 100644
--- a/messages/eu.json
+++ b/messages/eu.json
@@ -135,7 +135,7 @@
"statistics": "Estatistikak",
"most-viewed-pages": "Orrialde ikusienak",
"source": "Iturria",
- "category-url": "URL Kategoria",
+ "category": "Kategoria",
"logarithmic-scale": "Eskala logaritmikoa",
"list": "Zerrenda",
"chart": "Grafikoa",
diff --git a/messages/fa.json b/messages/fa.json
index 555c49940..e38c42178 100644
--- a/messages/fa.json
+++ b/messages/fa.json
@@ -124,7 +124,7 @@
"most-viewed-pages": "صفحههایی که بیشترین تعداد بازدیدکننده را داشتهاند",
"topviews-description": "بیشترین بازدید صفحات از یک پروژه",
"source": "منبع",
- "category-url": "رده نشانی",
+ "category": "رده نشانی",
"elapsed-time": "زمان گذشته: $1 {{PLURAL:$1|ثانیه|ثانیه}}",
"num-pages": "$1 {{PLURAL:$1|صفحه|صفحات}}",
"list": "فهرست",
diff --git a/messages/fr.json b/messages/fr.json
index 4b532314b..25d82a6a5 100644
--- a/messages/fr.json
+++ b/messages/fr.json
@@ -164,8 +164,8 @@
"faq-source-unique-devices": "est le nombre de machines uniques qui ont visité le site.",
"faq-massviews-sources-title": "Quelles sont les \"sources\" ?",
"faq-massviews-sources-pagepile": "est l'IDENTIFIANT numérique d'un ensemble de pages créées avec $1. Vous pouvez créer des listes et les importer dans Massviews pour analyser leurs pages vues.",
- "faq-massviews-sources-category-url": "est l'URL complète d'une page de catégorie, par exemple $1.",
- "faq-massviews-sources-template-url": "est l’URL complète de la page du modèle, par exemple $1. L’ensemble des résultats sera les pages qui incluent le modèle.",
+ "faq-massviews-sources-category": "est l'URL complète d'une page de catégorie, par exemple $1.",
+ "faq-massviews-sources-template": "est l’URL complète de la page du modèle, par exemple $1. L’ensemble des résultats sera les pages qui incluent le modèle.",
"faq-massviews-sources-quarry": "est l’ID numérique et le projet d’un ensemble de données $1. La colonne $2 (obligatoire) est ce qui sera utilisé pour les titres de page.",
"faq-massviews-subject-page-title": "Qu’est-ce que l’option « $1 » ?",
"faq-massviews-subject-page-body": "Cette option sert quand vous utilisez une catégorie comme source. Dans certains cas, la catégorie peut contenir des pages de discussion alors que vous souhaitez les pages du sujet. Par exemple les articles de classe FA de la ville de New-York, qui liste les pages de discussion de qualité FA dans le projet wiki Ville de New-York.",
@@ -239,12 +239,10 @@
"invalid-template-url": "Modèle invalide! Veuillez entrer l'URL complet du wiki pour le modèle ou la page.",
"invalid-quarry-dataset": "Ensemble de données Quarry non valide ! La colonne $1 est obligatoire mais n’a pas été trouvée.",
"source": "Source",
- "page-pile-id": "ID de la pile de pages",
- "category-url": "URL de la catégorie",
+ "category": "Catégorie",
"elapsed-time": "Temps écoulé : $1 seconde{{PLURAL:$1||s}}",
"num-pages": "$1 page{{PLURAL:$1||s}}",
"category-subject-toggle": "Utiliser la page de l’article au lieu de la page de discussion",
- "template-url": "URL du modèle",
"logarithmic-scale": "Échelle logarithmique",
"bezier-curve-option": "Utiliser une courbe de Bézier dans les graphes en ligne",
"list": "Liste",
diff --git a/messages/gl.json b/messages/gl.json
index 12256b20e..55f70da2b 100644
--- a/messages/gl.json
+++ b/messages/gl.json
@@ -137,8 +137,8 @@
"faq-source-pageviews": "é o número total de páxinas vistas que recibeu o proxecto.",
"faq-source-unique-devices": "é o número de dispositivos únicos que visitaron o sitio.",
"faq-massviews-sources-title": "Que son as \"Fontes\"?",
- "faq-massviews-sources-category-url": "é a URL completa da páxina de categoría, por exemplo $1.",
- "faq-massviews-sources-template-url": "é a URL completa da páxina do modelo, por exemplo $1. O conxunto dos resultados serán as páxinas que transclúen o modelo",
+ "faq-massviews-sources-category": "é a URL completa da páxina de categoría, por exemplo $1.",
+ "faq-massviews-sources-template": "é a URL completa da páxina do modelo, por exemplo $1. O conxunto dos resultados serán as páxinas que transclúen o modelo",
"faq-massviews-subject-page-title": "Que é a opción \"$1\"?",
"url-structure-parameters": "Parámetros",
"url-structure-parameters-order": "Pode usarse en calquera orde",
@@ -162,9 +162,8 @@
"massviews-oversized-set-unknown": "$1 contén máis de $2 páxinas. Por motivos de rendemento, só as $2 primeiras páxinas serán procesadas.",
"topviews-description": "Páxinas máis vistas dun proxecto",
"source": "Fonte",
- "category-url": "URL da categoría",
+ "category": "Categoría",
"num-pages": "$1 {{PLURAL:$1|páxina|páxinas}}",
- "template-url": "URL do modelo",
"logarithmic-scale": "Escala logarítmica",
"list": "Lista",
"chart": "Gráfica",
diff --git a/messages/he.json b/messages/he.json
index 64f78f202..2be181b28 100644
--- a/messages/he.json
+++ b/messages/he.json
@@ -155,8 +155,8 @@
"faq-source-unique-devices": "מספר ההתקנים הייחודיים שמשתמשים ביקרו באתר באמצעותם.",
"faq-massviews-sources-title": "מהם ה\"מקורות\"?",
"faq-massviews-sources-pagepile": "המזהה המספרי של ערכת דפים שנוצרו עם $1. אפשר ליצור רשימות ולייצא אותן לצפיות המוניות כדי לנתח את הצפיות בהם.",
- "faq-massviews-sources-category-url": "הוא כתובת ה־URL המלאה של דף הקטגוריה, לדוגמה $1.",
- "faq-massviews-sources-template-url": "ה־URL המלא של דף התבנית, למשל $1. ערכת התוצאות תהיה הדפים שמכלילים את התבנית.",
+ "faq-massviews-sources-category": "הוא כתובת ה־URL המלאה של דף הקטגוריה, לדוגמה $1.",
+ "faq-massviews-sources-template": "ה־URL המלא של דף התבנית, למשל $1. ערכת התוצאות תהיה הדפים שמכלילים את התבנית.",
"faq-massviews-sources-quarry": "המזהה המספרי והמיזם של ערכת הנתונים $1. העמודה $2 (נדרשת) זה מה שישמש לכותרות הדפים.",
"faq-massviews-subject-page-title": "מהי האפשרות \"$1\"?",
"faq-massviews-subject-page-body": "האפשרות הזאת מיועדת למצב שבו קטגוריה משמשת כמקור. במקרים מסוימים הקטגוריה יכולה להכיל דפי שיחה כשבעצם רצית דפי נושא. למשל FA-Class New York City articles, שבה יש רשימת דפי שיחה עם ערכים ברמת „ערך מומלץ” במיזם הוויקי בנושא ניו יורק סיטי.",
@@ -230,12 +230,10 @@
"invalid-template-url": "התבנית אינה תקינה! נא להקליד את כתובת ה־URL המלאה של התבנית או הדף.",
"invalid-quarry-dataset": "ערכת נתונים בלתי־תקינה של Quarry! העמודה $1 נדרשת, אבל לא נמצאה.",
"source": "מקור",
- "page-pile-id": "מזהה ערמת דפים",
- "category-url": "כתובת ה־URL של הקטגוריה",
+ "category": "כתובת ה־URL של הקטגוריה",
"elapsed-time": "הזמן שחלף: {{PLURAL:$1|שנייה אחת|$1 שניות}}",
"num-pages": "{{PLURAL:$1|דף אחד|$1 דפים}}",
"category-subject-toggle": "שימוש בשם של הדף עצמו ולא בשם של דף השיחה",
- "template-url": "כתובת ה־URL של התבנית",
"logarithmic-scale": "סולם לוגריתמי",
"bezier-curve-option": "להשתמש בעקום בזייה בתרשימי קו",
"list": "רשימה",
diff --git a/messages/hi.json b/messages/hi.json
index 5b3eb714f..153fc484f 100644
--- a/messages/hi.json
+++ b/messages/hi.json
@@ -126,6 +126,6 @@
"projects-placeholder": "परियोजना का नाम लिखें...",
"most-viewed-pages": "अधिक देखे गए पन्ने",
"source": "स्रोत",
- "category-url": "श्रेणी यूआरएल",
+ "category": "श्रेणी यूआरएल",
"num-pages": "$1 पन्ने"
}
diff --git a/messages/hu.json b/messages/hu.json
index c3d829ce7..1da7b2837 100644
--- a/messages/hu.json
+++ b/messages/hu.json
@@ -126,8 +126,8 @@
"faq-source-pageviews": "a projekt lapmegtekintéseinek teljes száma.",
"faq-source-unique-devices": "a wikit meglátogató egyedi eszközök száma.",
"faq-massviews-sources-title": "Mik a „források”?",
- "faq-massviews-sources-category-url": "egy kategórialap teljes URL-je, például $1.",
- "faq-massviews-sources-template-url": "egy sablon teljes URL-je, például $1. Az eredményhalmaz a sablont beillesztő lapokból fog állni.",
+ "faq-massviews-sources-category": "egy kategórialap teljes URL-je, például $1.",
+ "faq-massviews-sources-template": "egy sablon teljes URL-je, például $1. Az eredményhalmaz a sablont beillesztő lapokból fog állni.",
"faq-massviews-sources-quarry": "egy $1-adathalmaz numerikus azonosítója. A $2 oszlopból (kötelező) lesznek a lapcímek.",
"faq-massviews-subject-page-title": "Mi az a „$1” opció?",
"faq-massviews-subject-page-body": "Ez az opció arra való, amikor egy kategóriát használsz forrásként. Bizonyos esetekben a kategória vitalapokat tartalmaz, de valójában a tartalmi lapokra van szükség. Például a Kitüntetett besorolású magyar településekkel kapcsolatos szócikkek kategória a Magyar települések műhelyének érdeklődési körébe tartozó kiemelt szócikkek vitalapjait tartalmazza.",
diff --git a/messages/it.json b/messages/it.json
index 10f65e00c..ee0b53f84 100644
--- a/messages/it.json
+++ b/messages/it.json
@@ -150,7 +150,7 @@
"faq-source-pageviews": "è il numero totale di visualizzazioni delle pagine che il progetto ha ricevuto.",
"faq-source-unique-devices": "è il numero di dispositivi unici che hanno visitato il sito.",
"faq-massviews-sources-pagepile": "è l'ID numerico di un insieme di pagine create con $1. E' possibile creare elenchi e importarli dentro Massviews per analizzare le loro visualizzazioni delle pagine.",
- "faq-massviews-sources-category-url": "è l'URL completo della pagina di una categoria, per esempio $1.",
+ "faq-massviews-sources-category": "è l'URL completo della pagina di una categoria, per esempio $1.",
"faq-massviews-sources-quarry": "è l'ID numerico e progetto di un set di dati $1. La colonna $2 (obbligatoria) è quella che verrà utilizzata come titoli di pagina.",
"faq-throttle-wait-title": "Perché devo aspettare $1 secondi prima di poter utilizzare lo strumento una seconda volta?",
"faq-throttle-wait-body": "Le API Wikimedia sulle visualizzazioni delle pagine possono gestire solo un certo numero di richieste in un lasso di tempo. Per garantire che le API non falliscano e che tu ottenga tutti i dati di cui hai bisogno, devi aspettare $1 secondi dopo aver usato lo strumento, prima che tu possa usarlo nuovamente.",
@@ -216,11 +216,9 @@
"invalid-template-url": "Template non valido! Inserisci l'URL wiki completo del template o della pagina.",
"invalid-quarry-dataset": "Set di dati $1 non valido! La colonna $1 è obbligatoria ma non è stata trovata.",
"source": "Sorgente",
- "page-pile-id": "ID Page Pile",
- "category-url": "URL categoria",
+ "category": "URL categoria",
"elapsed-time": "Tempo trascorso: $1 {{PLURAL:$1|secondo|secondi}}",
"num-pages": "$1 {{PLURAL:$1|pagina|pagine}}",
- "template-url": "URL template",
"logarithmic-scale": "Scala logarítmica",
"bezier-curve-option": "Usa curva di Bézier su grafici a linee",
"list": "Elenco",
diff --git a/messages/ko.json b/messages/ko.json
index 412cc2fec..bbd234f91 100644
--- a/messages/ko.json
+++ b/messages/ko.json
@@ -130,8 +130,8 @@
"faq-source-title": "\"데이터 소스\"가 무엇입니까?",
"faq-massviews-sources-title": "\"소스\"가 무엇입니까?",
"faq-massviews-sources-pagepile": "는 $1로 만든 페이지 모음의 숫자형태 ID입니다. 여러분은 목록을 만들 수 있고, 페이지 조회수를 분석하기 위해서 Massview로 가져올 수 있습니다.",
- "faq-massviews-sources-category-url": "는 분류 페이지의 전제 URL입니다. 예를 들면, $1",
- "faq-massviews-sources-template-url": "는 예를 들면, $1과 같은 템플릿 페이지의 전체 주소입니다. 결과는 템플릿을 참조 포함하는 페이지가 됩니다.",
+ "faq-massviews-sources-category": "는 분류 페이지의 전제 URL입니다. 예를 들면, $1",
+ "faq-massviews-sources-template": "는 예를 들면, $1과 같은 템플릿 페이지의 전체 주소입니다. 결과는 템플릿을 참조 포함하는 페이지가 됩니다.",
"faq-massviews-subject-page-title": "\"$1\"옵션이 뭔가요?",
"faq-massviews-subject-page-body": "이 옵션은 여러분이 출처(소스)로서 해당 분류정보를 사용할 때 이용합니다. 어떤 경우에는 여러분이 관련 주제 페이지를 넣고자 할 때, 분류정보에 대화페이지를 넣을 수도 있습니다.\n\n예를 들면, FA-Class New York City articles는 WikiProject New York City안에 FA-quality기사의 대화 페이지를 넣었습니다.",
"url-structure-example-siteviews": "기본 옵션으로 위키의 모든 문서의 총 조회수에 대한 최신 데이터를 가져오려면 이것을 사용하세요:\n$1",
@@ -165,7 +165,6 @@
"elapsed-time": "지연 시간: $1 {{PLURAL:$1|초|초}}",
"num-pages": "$1{{PLURAL:$1|페이지}}",
"category-subject-toggle": "대화 페이지 대신 주제 페이지 사용",
- "template-url": "템플릿 URL",
"chart": "차트",
"begin-at-zero": "0에서 시작",
"search": "검색",
diff --git a/messages/ksh.json b/messages/ksh.json
index f708336a8..ee378a735 100644
--- a/messages/ksh.json
+++ b/messages/ksh.json
@@ -117,10 +117,9 @@
"statistics": "Schtatesteke",
"most-viewed-pages": "De mihts aanjelohrte Sigge",
"source": "Quäll",
- "category-url": "Dä Saachjrobb ier URL",
+ "category": "Dä Saachjrobb ier URL",
"elapsed-time": "Verjange Zigg: {{PLURAL:$1|Ein Sekond|$1 Sekonde|Kein Sekond}}",
"num-pages": "$1 Sigge ",
- "template-url": "De Schablohn ier URL",
"logarithmic-scale": "En lojaretmesche Skahla",
"bezier-curve-option": "Mohl en Kurv nohm Bézier op Dijaramme met Linnije",
"list": "Leß",
diff --git a/messages/lb.json b/messages/lb.json
index 519c02d1b..14f26a05e 100644
--- a/messages/lb.json
+++ b/messages/lb.json
@@ -126,7 +126,7 @@
"faq-try-tool": "Dir kënnt dëst op $1 fannen.",
"faq-bug-report-title": "Ech hunn en Ufro fir eng Funktioun oder e Feeler ze mellen",
"faq-massviews-sources-title": "Wat sinn d'''Quellen''?",
- "faq-massviews-sources-category-url": "ass déi komplett URL vun enger Kategoriesäit, zum Beispill $1.",
+ "faq-massviews-sources-category": "ass déi komplett URL vun enger Kategoriesäit, zum Beispill $1.",
"faq-massviews-subject-page-title": "Wat ass d'Optioun \"$1\"?",
"faq-throttle-wait-title": "Firwat muss ech $1 Sekonne waarden ier ech den Tool nach eng Kéier benotze kann?",
"url-structure-topviews-date-month": "E spezifesche Mount am Format $1",
@@ -161,9 +161,8 @@
"langviews-description": "Gekuckt Säite vun enger Säit op alle Sproochen",
"massviews-description": "Eng Lëscht vu Säiten importéieren an déi gekuckt Säite vergläichen",
"source": "Quell",
- "category-url": "Kategorie-URL",
+ "category": "Kategorie",
"num-pages": "$1 {{PLURAL:$1|Säit|Säiten}}",
- "template-url": "URL vun der Schabloun",
"logarithmic-scale": "Logarithmesch Skala",
"list": "Lëscht",
"chart": "Diagramm",
diff --git a/messages/lt.json b/messages/lt.json
index d2412f5df..af562ed59 100644
--- a/messages/lt.json
+++ b/messages/lt.json
@@ -122,9 +122,7 @@
"most-viewed-pages": "Lankomiausi puslapiai",
"unique-devices": "Unikalūs įrenginiai",
"source": "Šaltinis",
- "page-pile-id": "„Page Pile“ ID",
- "category-url": "Kategorijos URL",
- "template-url": "Šablono URL",
+ "category": "Kategorijos",
"logarithmic-scale": "Logaritminė skalė",
"list": "Sąrašas",
"chart": "Diagrama",
diff --git a/messages/lv.json b/messages/lv.json
index 00eca1a38..525f946f4 100644
--- a/messages/lv.json
+++ b/messages/lv.json
@@ -97,7 +97,7 @@
"massviews-empty-set": "$1 nesatur nevienu lapu!",
"topviews-description": "Visvairāk apskatītās lapas projektā",
"source": "Avots",
- "category-url": "Kategorijas URL",
+ "category": "Kategorijas",
"num-pages": "$1 {{PLURAL:$1|lapas|lapa|lapas}}",
"logarithmic-scale": "Logaritmiskā skala",
"list": "Saraksts",
diff --git a/messages/mi.json b/messages/mi.json
index 0e03c773c..be34b7da3 100644
--- a/messages/mi.json
+++ b/messages/mi.json
@@ -148,8 +148,8 @@
"faq-source-unique-devices": "- te tapeke o ngā rorohiko e tuku ana te wahi ipurangi",
"faq-massviews-sources-title": "He aha te \"sources\"?",
"faq-massviews-sources-pagepile": "ko te nama o tētahi kāhui whārangi e hangaia ana ki $1. Ka taea e koe te hanga ngā ripanga, ka tukua atu ēna ki te taputapu ko Massviews, ki te tātaritia ō ēna whārangi titiro.",
- "faq-massviews-sources-category-url": "ko te katoa o te hononga o tētahi whārangi momo (whakatuaira: $1)",
- "faq-massviews-sources-template-url": "ko te katoa o te URL o tētahi whārangi tauira (whakatauira: $1). Ko te kāhui hua ngā whārangi e mahi ana i te tauira.",
+ "faq-massviews-sources-category": "ko te katoa o te hononga o tētahi whārangi momo (whakatuaira: $1)",
+ "faq-massviews-sources-template": "ko te katoa o te URL o tētahi whārangi tauira (whakatauira: $1). Ko te kāhui hua ngā whārangi e mahi ana i te tauira.",
"faq-massviews-sources-quarry": "ko te nama me te whakakaupapa o ngā raraunga $1. Ko $2 ō ngā whārangi ingoa.",
"faq-massviews-subject-page-title": "He aha te kowhiringa \"$1\"?",
"faq-massviews-subject-page-body": "I a koe e whakamahi ana i tētahi momo whārangi hei ūkaipō, ka taea e koe te whakamahi tēnei kōwhiringa. I ētahi wā, kei roto ngā whārangi kōrero i te momo whārangi, engari kei te pīrangi koe ki ngā whārangi kaupapa. Ko tētahi whakatauira e rārangi ana i ngā whārangi kōrero : FA-Class New York City articles",
@@ -214,12 +214,10 @@
"invalid-template-url": "Kei te manakore te tauira. Tukua mai te katoa o te hononga o te tauira, o te whārangi rānei.",
"invalid-quarry-dataset": "Kei te manakore te kahui raraunga Maina! Kāhore te tīwae ko $1 i te kitea.",
"source": "Ūkaipō",
- "page-pile-id": "Nama Page Pile",
- "category-url": "Hononga momo",
+ "category": "Hononga momo",
"elapsed-time": "Te roanga o te wā kua hipa: $1 {{PLURAL:$1|te|ngā}} hēkene",
"num-pages": "{{PLURAL:$1|Kotahi|E rua ngā|E toru ngā|E whā ngā|E rima ngā|E ono ngā|E whitu ngā|E waru ngā|E iwa ngā|$1 ngā|0=Kāhore ngā}} whārangi ipurangi",
"category-subject-toggle": "Whakamahitia te whārangi kaupapa, tē whakamatitia ke te whārangi kōrero",
- "template-url": "Hononga o te tauira",
"logarithmic-scale": "Āwhata rongariti",
"bezier-curve-option": "Whakamahitia te tāwhana Bézier i roto i ngā tūtohi raina",
"list": "Ripanga",
diff --git a/messages/mk.json b/messages/mk.json
index fad03ecbc..1288f1660 100644
--- a/messages/mk.json
+++ b/messages/mk.json
@@ -156,8 +156,8 @@
"faq-source-unique-devices": "е бројот на поединечни уреди кои го посетиле викито.",
"faq-massviews-sources-title": "Што се тоа „Извори“?",
"faq-massviews-sources-pagepile": "е бројчената назнака за збир страници создадени со $1. Можете да создавате списоци и да ги увезувате во Масовни посети за да ги анализирате посетите",
- "faq-massviews-sources-category-url": "е полната URL на категоријата; на пример $1.",
- "faq-massviews-sources-template-url": "во полната URL на шаблонската страница, на пр. $1. Произлезениот збир ќе бидат страниците што го превметнуваат шаблонот.",
+ "faq-massviews-sources-category": "е полната URL на категоријата; на пример $1.",
+ "faq-massviews-sources-template": "во полната URL на шаблонската страница, на пр. $1. Произлезениот збир ќе бидат страниците што го превметнуваат шаблонот.",
"faq-massviews-sources-quarry": "е бројчената назнака и проектот на податочен збир од $1. Колоната $2 (задолжителна) ќе се користи за наслови на страниците.",
"faq-massviews-subject-page-title": "Што е можноста „$1“?",
"faq-massviews-subject-page-body": "Оваа можност е предвидена за кога користите категорија како извор. Во некои случаи, категоријата може да содржи страници за разговор, а вие впрочем да барате предметни страници. На пример статии за Њујорк од класа FA, каде се наведени страниците за разговор на статиите прогласени за избрани во рамките на википроектот „Њујорк“ на англиската Википедија.",
@@ -231,12 +231,10 @@
"invalid-template-url": "Неважечки шаблон! Внесете ја полната URL на шаблонот или страницата.",
"invalid-quarry-dataset": "Неважечки податочен збир од Quarry! Колоната $1 е задолжителна, но не ја најдов.",
"source": "Извор",
- "page-pile-id": "Назнака на купот страници",
- "category-url": "URL на категоријата",
+ "category": "категоријата",
"elapsed-time": "Изминато време: $1 {{PLURAL:$1|секунда|секунди}}",
"num-pages": "$1 {{PLURAL:$1|страница|страници}}",
"category-subject-toggle": "Користи ја предметната место разговорната страница",
- "template-url": "URL на шаблонот",
"logarithmic-scale": "Логаритамски размер",
"bezier-curve-option": "Користи Безјеова крива во линиските графикони",
"list": "Список",
diff --git a/messages/mn.json b/messages/mn.json
index 4aeed4666..079337415 100644
--- a/messages/mn.json
+++ b/messages/mn.json
@@ -129,8 +129,7 @@
"statistics": "Статистик мэдээлэл",
"most-viewed-pages": "Хамгийн олон үзсэн хуудаснууд",
"source": "Эx код",
- "page-pile-id": "„Page Pile“-Танилт",
- "category-url": "Ангилал URL",
+ "category": "Ангилал",
"elapsed-time": "Зарцуулсан цаг: $1 {{PLURAL:$1|секунд|секунд}}",
"num-pages": "$1 {{PLURAL:$1|xуудас|$1 хуудаснууд}}",
"template-url": "Загвар-URL"
diff --git a/messages/nb.json b/messages/nb.json
index 7bbe9c25e..3dcb8f774 100644
--- a/messages/nb.json
+++ b/messages/nb.json
@@ -174,7 +174,7 @@
"massviews-description": "Importer en liste av sider og analyser antall sidevisninger",
"invalid-category-url": "Ugyldig kategori! Vennlist elgg inn full nettadresse til kategorien.",
"source": "Kilde",
- "category-url": "Kategoriadresse",
+ "category": "Kategoriadresse",
"elapsed-time": "Tid som har gått: $1 sekunder",
"num-pages": "$1 sider"
}
diff --git a/messages/pl.json b/messages/pl.json
index e2231e71c..057a5b73d 100644
--- a/messages/pl.json
+++ b/messages/pl.json
@@ -135,10 +135,9 @@
"invalid-category-url": "Nieprawidłowa kategoria! Podaj pełny URL kategorii.",
"invalid-template-url": "Nieprawidłowy szablon! Podaj pełny URL szablonu lub strony.",
"source": "Źródło",
- "category-url": "URL kategorii",
+ "category": "Kategorii",
"elapsed-time": "Czas, który upłynął: $1 {{PLURAL:$1|sekunda|sekundy|sekund}}",
"num-pages": "$1 {{PLURAL:$1|strona|strony|stron}}",
- "template-url": "URL szablonu",
"logarithmic-scale": "Skala logarytmiczna",
"bezier-curve-option": "Użyj krzywej Béziera na wykresach liniowych",
"list": "Lista",
diff --git a/messages/pt.json b/messages/pt.json
index 4f2b92cb6..c5ab1b18c 100644
--- a/messages/pt.json
+++ b/messages/pt.json
@@ -159,7 +159,6 @@
"redirectviews-description": "Visualizações de todos os redirecionamentos para uma página",
"elapsed-time": "Tempo decorrido: $1 {{PLURAL:$1|segundo|segundos}}",
"num-pages": "$1 {{PLURAL:$1|página|páginas}}",
- "template-url": "URL da predefinição",
"logarithmic-scale": "Escada logarítmica",
"bezier-curve-option": "Usar curva de Bézier nos gráficos em linha",
"list": "Lista",
diff --git a/messages/qqq.json b/messages/qqq.json
index 80ef2277a..91ba7750b 100644
--- a/messages/qqq.json
+++ b/messages/qqq.json
@@ -163,9 +163,11 @@
"faq-source-pageviews": "FAQ - body of the section explaining what the 'source' options are.",
"faq-source-unique-devices": "is the number of unique devices that visited the site.",
"faq-massviews-sources-title": "FAQ - title of the section explaining what the sources are in the Massviews tool.",
- "faq-massviews-sources-pagepile": "FAQ - explanation of what the 'Page Pile ID' source in the Massviews tool is.",
- "faq-massviews-sources-category-url": "FAQ - explanation of what the 'Category URL' source in the Massviews tool is.",
- "faq-massviews-sources-template-url": "FAQ - explanation of what the 'Template URL' source in the Massviews tool is.",
+ "faq-massviews-sources-pagepile": "FAQ - explanation of what the 'Page Pile' source in the Massviews tool is.",
+ "faq-massviews-sources-category": "FAQ - explanation of what the 'Category' source in the Massviews tool is.",
+ "faq-massviews-sources-wikilinks": "FAQ - explanation of what the 'Wikilinks' source in the Massviews tool is.",
+ "faq-massviews-sources-template": "FAQ - explanation of what the 'Template' source in the Massviews tool is.",
+ "faq-massviews-sources-subpages": "FAQ - explanation of what the 'Subpages' source in the Massviews tool is.",
"faq-massviews-sources-quarry": "FAQ - explanation of what the 'Quarry' source in the Massviews tool is. $1 is the name of the Quarry tool. $2 is the name of the column that the Quarry dataset is required to have.",
"faq-massviews-subject-page-title": "FAQ - title of the section explaining what the 'use subject page' option is. $1 is the i18n message 'category-subject-toggle'.",
"faq-massviews-subject-page-body": "FAQ - explanation of what the 'use subject page' option is",
@@ -198,7 +200,7 @@
"url-structure-sort-redirectviews": "Documentation for the 'sort' parameter in the Redirectviews application. $1, $2, and $3 are the valid values. This message is the same as the 'url-structure-sort' message except there are 3 values instead of 4.",
"url-structure-source": "Documentation for the 'source' parameter. $1 and $2 are valid values",
"url-structure-massviews-example": "Example of how to link to Massviews Analysis. $1 is the example for Page Piles, $2 for categories, and $3 for linking on a category wiki page. Shown on https://tools.wmflabs.org/massviews/url_structure/ . Every parameter is shown as a separate paragraph in monospaced font (in a <pre> tag).",
- "url-structure-massviews-source": "States the 'source' parameter can have one of the values 'pagepile' ($1), 'category' ($2) or 'transclusions' ($3)",
+ "url-structure-massviews-source": "States the 'source' parameter can any of the values $1, $2, $3, $4 or $5",
"url-structure-massviews-target": "Explains what the 'target' parameter is, and that if a question mark is in the URL than the URL must be encoded.",
"url-structure-massviews-target-example": "Example of valid and invalid target values. $1 is an invalid example, $2 is the valid equivalent. $3 is the shortened wiki URL which is also valid. Please closely follow the English translation for this message. All parameters are HTML elements that show up on their own line.",
"url-structure-massviews-project": "Similar to the 'url-structure-project' message except indicates this parameter only applies to Quarry results. $1 is the message for 'project' that is a link to the sitematrix (list of valid projects).",
@@ -236,15 +238,17 @@
"siteviews-description": "Brief description of the Siteviews tool. Shown directly under the header.",
"redirectviews-description": "Brief description of the Redirectviews tool. Shown directly under the header.",
"invalid-category-url": "Error message saying the user inputted wiki URL is not a valid category (as in the Category namespace).",
+ "invalid-page-url": "Error message saying the user inputted wiki URL is not a valid page.",
"invalid-template-url": "Error message saying the user inputted wiki URL is not a valid template or page. In this case it does not have to be in the Template namespace, rather it just needs to be a valid page.",
"invalid-quarry-dataset": "Error message saying the user inputted a Quarry dataset without the required column. $1 is the name of the column that is required.",
"source": "Label for the 'source' input field in the Massviews tool.\n{{Identical|Source}}",
- "page-pile-id": "Label for the 'Page Pile ID' input field on the Massviews tool. The proper noun 'Page Pile' should not be translated.",
- "category-url": "Label for the 'Category URL' input field on the Massviews tool. This indicates they should enter a full URL to the wiki category.",
+ "category": "Label for the 'Category' input field on the Massviews tool.\n{{Identical|Category}}",
+ "wikilinks": "Label for the 'Wikilinks' input field on the Massviews tool. Wikilinks are links on a page that link to other pages.\n{{Identical|Wikilinks}}",
+ "transclusions": "Label for the 'Transclusions' input field on the Massviews tool. See the wikidata item for 'transclusion' for possible translations: https://www.wikidata.org/wiki/Q1207412\n{{Identical|Transclusions}}",
+ "subpages": "Label for the 'Subpages' input field on the Massviews tool. See the wikidata item for 'Project:Subpages' for possible translations: https://www.wikidata.org/wiki/Q4592255\n{{Identical|Subpages}}",
"elapsed-time": "Message saying the amount of time the operation took. $1 is the number of seconds.",
"num-pages": "Text simply indicating a number of pages. $1 is the number. This is used as a label in the Massviews app, indicating how many pages are in the collection.\n{{Identical|Page}}",
"category-subject-toggle": "Option shown on Massviews when the 'Category URL' source is selected. This option tells the tool to use the subject page of any talk pages in the category.",
- "template-url": "Label for the 'Template URL' input field on the Massviews tool. This indicates they should enter a full URL to the wiki template.",
"logarithmic-scale": "Label to show the chart using a logarithmic scale. Translation may easily be found on Wikidata, see https://www.wikidata.org/wiki/Q937378\n{{Identical|Logarithmic scale}}",
"bezier-curve-option": "Label for option to plot line charts using the Bézier curve",
"list": "Label for the button to show the 'list view' of Massviews. 'Table' might also be a fitting translation.\n{{Identical|List}}",
diff --git a/messages/ro.json b/messages/ro.json
index 773e62ae2..3bcfbb2d4 100644
--- a/messages/ro.json
+++ b/messages/ro.json
@@ -155,8 +155,8 @@
"faq-source-unique-devices": "este numărul de dispozitive unice care au vizitat saitul.",
"faq-massviews-sources-title": "Ce sunt „Sursele”?",
"faq-massviews-sources-pagepile": "este identificatorul numeric al unui grup de pagini creat cu $1. Puteți crea liste și le puteți importa în „Analiza vizualizărilor pe liste” pentru a le analiza vizualizările.",
- "faq-massviews-sources-category-url": "este URL-ul întreg al unei pagini categorie, de exemplu $1.",
- "faq-massviews-sources-template-url": "este adresa URL completă a unei pagini de tip format, de exemplu $1. Setul rezultat va fi alcătuit din paginile care transclud (încorporează) formatul.",
+ "faq-massviews-sources-category": "este URL-ul întreg al unei pagini categorie, de exemplu $1.",
+ "faq-massviews-sources-template": "este adresa URL completă a unei pagini de tip format, de exemplu $1. Setul rezultat va fi alcătuit din paginile care transclud (încorporează) formatul.",
"faq-massviews-sources-quarry": "este identificatorul numeric și proiectul unui set de date $1. Coloana $2 (necesară) este ceea ce va fi folosit pentru titlurile paginilor.",
"faq-massviews-subject-page-title": "Ce reprezintă opțiunea „$1”?",
"faq-massviews-subject-page-body": "Această opțiune este pentru cazul în care folosiți o categorie ca sursă. În unele cazuri categoria poate conține pagini de discuție ale articolelor când de fapt ați dori paginile articolelor propriu-zise. De exemplu FA-Class New York City articles, care listează paginile de discuție ale articolelor de calitate din cadrul WikiProiectului New York City al Wikipediei în limba engleză.",
@@ -225,11 +225,10 @@
"invalid-quarry-dataset": "Set de date Quarry incorect! Coloana $1 este necesară dar nu a fost găsită.",
"source": "Sursă",
"page-pile-id": "ID-ul Page Pile",
- "category-url": "Adresa URL a categoriei",
+ "category": "Categoriei",
"elapsed-time": "Timpul scurs: $1 {{PLURAL:$1|secundă|secunde}}",
"num-pages": "$1 {{PLURAL:$1|pagină|pagini}}",
"category-subject-toggle": "Folosește pagina articolului în locul paginii de discuție",
- "template-url": "Adresa URL a formatului",
"logarithmic-scale": "Scară logaritmică",
"bezier-curve-option": "Folosire curbă Bézier la graficele cu linii",
"list": "Listă",
diff --git a/messages/ru.json b/messages/ru.json
index 05f3adf4b..e329e5522 100644
--- a/messages/ru.json
+++ b/messages/ru.json
@@ -134,10 +134,9 @@
"massviews-oversized-set": "$1 содержит $2 страниц. По техническим причинам, будут показаны только первые $3 страниц.",
"massviews-oversized-set-unknown": "$1 содержит более $2 страниц. По техническим причинам, будут показаны только первые $2 страниц.",
"source": "Источник",
- "category-url": "URL категории",
+ "category": "категории",
"elapsed-time": "Прошедшее время: $1 {{PLURAL:$1|секунда|секунд|секунды}}",
"num-pages": "$1 {{PLURAL:$1|страница|страниц|страницы}}",
- "template-url": "URL шаблона",
"list": "Список",
"chart": "Диаграмма",
"search": "Поиск"
diff --git a/messages/sv.json b/messages/sv.json
index 114640a25..49a1364c7 100644
--- a/messages/sv.json
+++ b/messages/sv.json
@@ -153,7 +153,7 @@
"faq-source-pageviews": "är det totala antalet sidbesök som projektet får",
"faq-source-unique-devices": "är antalet unika enheter som besöker webbplatsen.",
"faq-massviews-sources-title": "Vilka är \"källorna\"?",
- "faq-massviews-sources-category-url": "är den fullständiga adressen för en kategorisida, t.ex. $1.",
+ "faq-massviews-sources-category": "är den fullständiga adressen för en kategorisida, t.ex. $1.",
"faq-massviews-subject-page-title": "Vad är alternativet \"$1\"?",
"faq-throttle-wait-title": "Varför måste jag vänta $1 sekunder innan jag kan använda verktyget igen?",
"url-structure-example-siteviews": "Använd följande för att få den senaste datan för totala antalet sidbesök för alla artiklar med standardalternativen:\n$1",
@@ -213,11 +213,10 @@
"invalid-template-url": "Ogiltig mall! Ange den fullständiga wikiadressen till mallen eller sidan.",
"source": "Källa",
"page-pile-id": "Sidhögs-ID",
- "category-url": "Kategori-adress",
+ "category": "Kategori-adress",
"elapsed-time": "Förfluten tid: $1 {{PLURAL:$1|sekund|sekunder}}",
"num-pages": "$1 {{PLURAL:$1|sida|sidor}}",
"category-subject-toggle": "Använd ämnessidan istället för diskussionssidan",
- "template-url": "Malladress",
"logarithmic-scale": "Logaritmisk skala",
"bezier-curve-option": "Använd Bézierkurvor i linjediagram",
"list": "Lista",
diff --git a/messages/th.json b/messages/th.json
index f9148c998..ff37d9fb0 100644
--- a/messages/th.json
+++ b/messages/th.json
@@ -177,11 +177,10 @@
"invalid-quarry-dataset": "กลุ่มข้อมูลควอรีไม่ถูกต้อง! $1 คอลัมน์ต้องการ แต่หาไม่พบ",
"source": "แหล่งที่มา",
"page-pile-id": "ไอดี Page Pile",
- "category-url": "หมวดหมู่ URL",
+ "category": "หมวดหมู่",
"elapsed-time": "เวลาล่วงผ่าน: $1 {{PLURAL:$1|วินาที|วินาที}}",
"num-pages": "$1 {{PLURAL:$1|หน้า|หน้า}}",
"category-subject-toggle": "ใช้หัวข้อของหน้าแทนของหน้าพูดคุย",
- "template-url": "แม่แบบยูอาร์แอล",
"logarithmic-scale": "มาตราส่วนเชิงลอการิทึม",
"bezier-curve-option": "ใช้เส้นโค้งเบซิเอร์บนเส้นแผนภูมิ",
"list": "รายการ",
diff --git a/messages/tr.json b/messages/tr.json
index 57bb42280..0fe059e1e 100644
--- a/messages/tr.json
+++ b/messages/tr.json
@@ -151,8 +151,8 @@
"faq-source-unique-devices": "siteyi ziyaret eden benzersiz cihazların sayısıdır.",
"faq-massviews-sources-title": "\"Kaynaklar\" nelerdir?",
"faq-massviews-sources-pagepile": "$1 ile oluşturulan sayfaların bir dizi sayısal kimliğidir. Siz listeler oluşturmak ve bunların sayfa gösterimini analiz etmek amacıyla bunları sihirli kelimeler ile görüntülemelere aktarabilirsiniz.",
- "faq-massviews-sources-category-url": "örneğin $1, bir kategori sayfasının tam URL adresidir.",
- "faq-massviews-sources-template-url": "örneğin $1, bir şablon sayfasının tam URL adresidir. Sonuç olarak bu şablon girdisi olarak ayarlanacaktır.",
+ "faq-massviews-sources-category": "örneğin $1, bir kategori sayfasının tam URL adresidir.",
+ "faq-massviews-sources-template": "örneğin $1, bir şablon sayfasının tam URL adresidir. Sonuç olarak bu şablon girdisi olarak ayarlanacaktır.",
"faq-massviews-sources-quarry": "sayısal bir kimlik ve $1 projesinin veri setidir. $2 sütunu (gerekli) sayfa başlığı olarak kullanılacaktır.",
"faq-massviews-subject-page-title": "\"$1\" seçeneği nedir?",
"faq-massviews-subject-page-body": "Bu seçenek kaynak olarak bir kategori kullanıldığında geçerlidir. Aslında konu sayfaları bazı tartışma sayfalarının kategorilerini içerebilir. Örneğin New York City maddesi ile birlikte New York City VikiProjesine ait benzer kategorideki tartışma sayfasını da listeler.",
@@ -217,11 +217,10 @@
"invalid-quarry-dataset": "Geçersiz Sorgu veri seti. $1 sütunu gerekli ancak bulunamadı.",
"source": "Kaynak",
"page-pile-id": "Sayfa Kütük Kimliği",
- "category-url": "Kategori URL",
+ "category": "Kategori",
"elapsed-time": "Geçen süre: $1 {{PLURAL:$1|saniye|saniye}}",
"num-pages": "$1 {{PLURAL:$1|sayfa|sayfa}}",
"category-subject-toggle": "Konu sayfası yerine tartışma sayfasını kullanın",
- "template-url": "Şablon URL",
"logarithmic-scale": "Logaritmik ölçek",
"bezier-curve-option": "Çizgi grafiklerde eğri kullanın",
"list": "Liste",
diff --git a/messages/uk.json b/messages/uk.json
index a8c344038..ac3dcadb3 100644
--- a/messages/uk.json
+++ b/messages/uk.json
@@ -157,8 +157,8 @@
"faq-source-unique-devices": "— це кількість унікальних пристроїв, що відвідали цей сайт.",
"faq-massviews-sources-title": "Що таке «Джерела»?",
"faq-massviews-sources-pagepile": "— це числовий ідентифікатор набору сторінок, створеного за допомогою $1. Ви можете створювати списки та імпортувати їх у Масові перегляди для аналізу кількості їх переглядів.",
- "faq-massviews-sources-category-url": "— це повна URL-адреса сторінки категорії, наприклад, $1.",
- "faq-massviews-sources-template-url": "— це повна URL-адреса сторінки шаблону, наприклад, $1. Результатом буде виведення сторінок, що включають цей шаблон.",
+ "faq-massviews-sources-category": "— це повна URL-адреса сторінки категорії, наприклад, $1.",
+ "faq-massviews-sources-template": "— це повна URL-адреса сторінки шаблону, наприклад, $1. Результатом буде виведення сторінок, що включають цей шаблон.",
"faq-massviews-sources-quarry": "— це числовий ідентифікатор та проект набору даних $1. Стовпець $2 (обов'язковий) — це те, що буде використано як назви сторінок.",
"faq-massviews-subject-page-title": "Що означає опція «$1»?",
"faq-massviews-subject-page-body": "Ця опція призначена для тих випадків, коли Ви використовуєте категорію як джерело. у деяких випадках така категорія може містити сторінки обговорень, тоді як Ви насправді хочете брати до уваги лише основні сторінки. Наприклад, категорія FA-Class New York City articles, що містить сторінки обговорень вибраних статей із вікіпроекту «New York City».",
@@ -227,11 +227,10 @@
"invalid-quarry-dataset": "Недійсний набір даних Quarry! Стовпець $1 є обов'язковим, але його не було знайдено.",
"source": "Джерело",
"page-pile-id": "Page Pile ID",
- "category-url": "URL категорії",
+ "category": "категорії",
"elapsed-time": "Час, що минув: $1 {{PLURAL:$1|секунда|секунди|секунд}}",
"num-pages": "$1 {{PLURAL:$1|сторінка|сторінки|сторінок}}",
"category-subject-toggle": "Використовувати основні сторінки замість сторінок обговорення",
- "template-url": "URL шаблону",
"logarithmic-scale": "Логарифмічна шкала",
"bezier-curve-option": "Використовувати на лінійних діаграмах криву Безьє",
"list": "Список",
diff --git a/messages/vi.json b/messages/vi.json
index 6fdf23dd1..34ff5280f 100644
--- a/messages/vi.json
+++ b/messages/vi.json
@@ -175,11 +175,9 @@
"topviews-description": "Các trang được xem nhiều nhất của một dự án",
"massviews-description": "Nhập một danh sách trang và so sánh các số lượt xem",
"source": "Nguồn",
- "page-pile-id": "ID Page Pile",
- "category-url": "URL thể loại",
+ "category": "URL thể loại",
"elapsed-time": "Thời gian mất: $1 giây",
"num-pages": "$1 trang",
- "template-url": "URL của bản mẫu",
"logarithmic-scale": "Tỉ lệ lôgarit",
"bezier-curve-option": "Dùng đường cong Bézier cho các biểu đồ đường thẳng",
"list": "Danh sách",
diff --git a/messages/zh-hans.json b/messages/zh-hans.json
index d637fdb47..56c21d455 100644
--- a/messages/zh-hans.json
+++ b/messages/zh-hans.json
@@ -158,8 +158,8 @@
"faq-source-unique-devices": "是访问网站的单一设备数量。",
"faq-massviews-sources-title": "什么是“来源”?",
"faq-massviews-sources-pagepile": "是由$1创建的一系列页面的数字ID。您可以创建列表并将其导入进大量浏览工具,以分析它们的页面浏览统计。",
- "faq-massviews-sources-category-url": "是分类页面的完整URL,例如$1。",
- "faq-massviews-sources-template-url": "是分类页面的完整URL,例如$1。结果集将成为嵌入模板的页面。",
+ "faq-massviews-sources-category": "是分类页面的完整URL,例如$1。",
+ "faq-massviews-sources-template": "是分类页面的完整URL,例如$1。结果集将成为嵌入模板的页面。",
"faq-massviews-sources-quarry": "是$1数据集的数字ID和项目。$2列(必填)将用作页面标题。",
"faq-massviews-subject-page-title": "什么是“$1”选项?",
"faq-massviews-subject-page-body": "此选项用在当您使用分类作为来源的情况。一些情况下,当您实际上想要主题页面时,分类可能包含讨论页。例如FA-Class New York City articles,它列举了在纽约专题中特色条目的讨论页。",
@@ -233,12 +233,10 @@
"invalid-template-url": "无效模板!请输入模板或页面的完整wiki URL。",
"invalid-quarry-dataset": "无效的Quarry数据集!$1列必填,但未找到。",
"source": "来源",
- "page-pile-id": "页面堆ID",
- "category-url": "分类URL",
+ "category": "分类",
"elapsed-time": "运行时间:$1{{PLURAL:$1|秒}}",
"num-pages": "$1个{{PLURAL:$1|页面}}",
"category-subject-toggle": "使用主题页面而不是讨论页",
- "template-url": "模板URL",
"logarithmic-scale": "对数尺度",
"bezier-curve-option": "在折线图上使用贝塞尔曲线",
"list": "列表",
diff --git a/messages/zh-hant.json b/messages/zh-hant.json
index 8fddbe64c..c9a8084fc 100644
--- a/messages/zh-hant.json
+++ b/messages/zh-hant.json
@@ -160,8 +160,8 @@
"faq-source-unique-devices": "為瀏覽該網站各設備的數量",
"faq-massviews-sources-title": "什麼是來源",
"faq-massviews-sources-pagepile": "是使用$1所創建頁面的ID號碼。您可以建立一份匯入至大量瀏覽工具的號碼清單來分析這些頁面的瀏覽次數。",
- "faq-massviews-sources-category-url": "是完整分類頁面的網址,如$1",
- "faq-massviews-sources-template-url": "是模板頁面的完整網址,例如像$1。結果集合內容會成為嵌入至模板的頁面。",
+ "faq-massviews-sources-category": "是完整分類頁面的網址,如$1",
+ "faq-massviews-sources-template": "是模板頁面的完整網址,例如像$1。結果集合內容會成為嵌入至模板的頁面。",
"faq-massviews-sources-quarry": "為數字ID和$1資料集的項目。必填的 $2列是用作頁面標題。",
"faq-massviews-subject-page-title": "什麼是$1選項?",
"faq-massviews-subject-page-body": "此選項使用在以分類作為來源時。某些情形下,您所想要用的主題中,分類裡頭可能包含著討論頁面。如英語維基上與紐約市有關的特色條目分類中,此分類頁面裡便列出紐約市專題裡各特色條目的討論頁連結。",
@@ -235,12 +235,10 @@
"invalid-template-url": "無效模板!請輸入模板或頁面在維基上的完整網址。",
"invalid-quarry-dataset": "無效的查詢資料集!未找出必填的$1列。",
"source": "來源",
- "page-pile-id": "頁面堆疊ID",
- "category-url": "分類項目網址",
+ "category": "分類項目網址",
"elapsed-time": "花費時間:$1{{PLURAL:$1|秒|秒}}",
"num-pages": "$1{{PLURAL:$1|個頁面|個頁面}}",
"category-subject-toggle": "使用專題頁面取代討論頁面",
- "template-url": "模板網址",
"logarithmic-scale": "對數尺度",
"bezier-curve-option": "在線狀圖上啟用貝茲曲線",
"list": "清單",
diff --git a/public_html/application.js b/public_html/application.js
index 383739da6..d0d5c1698 100644
--- a/public_html/application.js
+++ b/public_html/application.js
@@ -11,6 +11,6 @@ if(this.timePicker){var h=parseInt(this.container.find(".left .hourselect").val(
g.easing=f.easing,g.render=function(a,c){var d=b.easingEffects[c.easing],e=c.currentStep/c.numSteps,f=d(e);a.draw(f,e,c.currentStep)},g.onAnimationProgress=f.onProgress,g.onAnimationComplete=f.onComplete,a.animationService.addAnimation(e,g,c,d)}else e.draw(),f&&f.onComplete&&f.onComplete.call&&f.onComplete.call(e);return e},draw:function(c){var d=this,e=c||1;d.clear(),a.plugins.notify("beforeDraw",[d,e]),b.each(d.boxes,function(a){a.draw(d.chartArea)},d),d.scale&&d.scale.draw(),a.plugins.notify("beforeDatasetsDraw",[d,e]),b.each(d.data.datasets,function(a,b){d.isDatasetVisible(b)&&d.getDatasetMeta(b).controller.draw(c)},d,!0),a.plugins.notify("afterDatasetsDraw",[d,e]),d.tooltip.transition(e).draw(),a.plugins.notify("afterDraw",[d,e])},getElementAtEvent:function(a){var c=this,d=b.getRelativePosition(a,c.chart),e=[];return b.each(c.data.datasets,function(a,f){if(c.isDatasetVisible(f)){var g=c.getDatasetMeta(f);b.each(g.data,function(a,b){return a.inRange(d.x,d.y)?(e.push(a),e):void 0})}}),e},getElementsAtEvent:function(a){var c=this,d=b.getRelativePosition(a,c.chart),e=[],f=function(){if(c.data.datasets)for(var a=0;a0&&(b=this.getDatasetMeta(b[0]._datasetIndex).data),b},getDatasetMeta:function(a){var b=this,c=b.data.datasets[a];c._meta||(c._meta={});var d=c._meta[b.id];return d||(d=c._meta[b.id]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null}),d},getVisibleDatasetCount:function(){for(var a=0,b=0,c=this.data.datasets.length;c>b;++b)this.isDatasetVisible(b)&&a++;return a},isDatasetVisible:function(a){var b=this.getDatasetMeta(a);return"boolean"==typeof b.hidden?!b.hidden:!this.data.datasets[a].hidden},generateLegend:function(){return this.options.legendCallback(this)},destroy:function(){var c=this;c.stop(),c.clear(),b.unbindEvents(c,c.events),b.removeResizeListener(c.chart.canvas.parentNode);var d=c.chart.canvas;d.width=c.chart.width,d.height=c.chart.height,void 0!==c.chart.originalDevicePixelRatio&&c.chart.ctx.scale(1/c.chart.originalDevicePixelRatio,1/c.chart.originalDevicePixelRatio),d.style.width=c.chart.originalCanvasStyleWidth,d.style.height=c.chart.originalCanvasStyleHeight,a.plugins.notify("destroy",[c]),delete a.instances[c.id]},toBase64Image:function(){return this.chart.canvas.toDataURL.apply(this.chart.canvas,arguments)},initToolTip:function(){var b=this;b.tooltip=new a.Tooltip({_chart:b.chart,_chartInstance:b,_data:b.data,_options:b.options.tooltips},b)},bindEvents:function(){var a=this;b.bindEvents(a,a.options.events,function(b){a.eventHandler(b)})},updateHoverStyle:function(a,b,c){var d,e,f,g=c?"setHoverStyle":"removeHoverStyle";switch(b){case"single":a=[a[0]];break;case"label":case"dataset":break;default:return}for(e=0,f=a.length;f>e;++e)d=a[e],d&&this.getDatasetMeta(d._datasetIndex).controller[g](d)},eventHandler:function(a){var c=this,d=c.tooltip,e=c.options||{},f=e.hover,g=e.tooltips;return c.lastActive=c.lastActive||[],c.lastTooltipActive=c.lastTooltipActive||[],"mouseout"===a.type?(c.active=[],c.tooltipActive=[]):(c.active=c.getElementsAtEventForMode(a,f.mode),c.tooltipActive=c.getElementsAtEventForMode(a,g.mode)),f.onHover&&f.onHover.call(c,c.active),("mouseup"===a.type||"click"===a.type)&&(e.onClick&&e.onClick.call(c,a,c.active),c.legend&&c.legend.handleEvent&&c.legend.handleEvent(a)),c.lastActive.length&&c.updateHoverStyle(c.lastActive,f.mode,!1),c.active.length&&f.mode&&c.updateHoverStyle(c.active,f.mode,!0),(g.enabled||g.custom)&&(d.initialize(),d._active=c.tooltipActive,d.update(!0)),d.pivot(),c.animating||b.arrayEquals(c.active,c.lastActive)&&b.arrayEquals(c.tooltipActive,c.lastTooltipActive)||(c.stop(),(g.enabled||g.custom)&&d.update(!0),c.render(f.animationDuration,!0)),c.lastActive=c.active,c.lastTooltipActive=c.tooltipActive,c}})}},{}],23:[function(a,b,c){"use strict";b.exports=function(a){var b=a.helpers,c=b.noop;a.DatasetController=function(a,b){this.initialize.call(this,a,b)},b.extend(a.DatasetController.prototype,{datasetElementType:null,dataElementType:null,initialize:function(a,b){var c=this;c.chart=a,c.index=b,c.linkScales(),c.addElements()},updateIndex:function(a){this.index=a},linkScales:function(){var a=this,b=a.getMeta(),c=a.getDataset();null===b.xAxisID&&(b.xAxisID=c.xAxisID||a.chart.options.scales.xAxes[0].id),null===b.yAxisID&&(b.yAxisID=c.yAxisID||a.chart.options.scales.yAxes[0].id)},getDataset:function(){return this.chart.data.datasets[this.index]},getMeta:function(){return this.chart.getDatasetMeta(this.index)},getScaleForId:function(a){return this.chart.scales[a]},reset:function(){this.update(!0)},createMetaDataset:function(){var a=this,b=a.datasetElementType;return b&&new b({_chart:a.chart.chart,_datasetIndex:a.index})},createMetaData:function(a){var b=this,c=b.dataElementType;return c&&new c({_chart:b.chart.chart,_datasetIndex:b.index,_index:a})},addElements:function(){var a,b,c=this,d=c.getMeta(),e=c.getDataset().data||[],f=d.data;for(a=0,b=e.length;b>a;++a)f[a]=f[a]||c.createMetaData(d,a);d.dataset=d.dataset||c.createMetaDataset()},addElementAndReset:function(a){var b=this,c=b.createMetaData(a);b.getMeta().data.splice(a,0,c),b.updateElement(c,a,!0)},buildOrUpdateElements:function(){var a=this.getMeta(),b=a.data,c=this.getDataset().data.length,d=b.length;if(d>c)b.splice(c,d-c);else if(c>d)for(var e=d;c>e;++e)this.addElementAndReset(e)},update:c,draw:function(a){var c=a||1;b.each(this.getMeta().data,function(a,b){a.transition(c).draw()})},removeHoverStyle:function(a,c){var d=this.chart.data.datasets[a._datasetIndex],e=a._index,f=a.custom||{},g=b.getValueAtIndexOrDefault,h=(b.color,a._model);h.backgroundColor=f.backgroundColor?f.backgroundColor:g(d.backgroundColor,e,c.backgroundColor),h.borderColor=f.borderColor?f.borderColor:g(d.borderColor,e,c.borderColor),h.borderWidth=f.borderWidth?f.borderWidth:g(d.borderWidth,e,c.borderWidth)},setHoverStyle:function(a){var c=this.chart.data.datasets[a._datasetIndex],d=a._index,e=a.custom||{},f=b.getValueAtIndexOrDefault,g=(b.color,b.getHoverColor),h=a._model;h.backgroundColor=e.hoverBackgroundColor?e.hoverBackgroundColor:f(c.hoverBackgroundColor,d,g(h.backgroundColor)),h.borderColor=e.hoverBorderColor?e.hoverBorderColor:f(c.hoverBorderColor,d,g(h.borderColor)),h.borderWidth=e.hoverBorderWidth?e.hoverBorderWidth:f(c.hoverBorderWidth,d,h.borderWidth)}}),a.DatasetController.extend=b.inherits}},{}],24:[function(a,b,c){"use strict";b.exports=function(a){var b=a.helpers;a.elements={},a.Element=function(a){b.extend(this,a),this.initialize.apply(this,arguments)},b.extend(a.Element.prototype,{initialize:function(){this.hidden=!1},pivot:function(){var a=this;return a._view||(a._view=b.clone(a._model)),a._start=b.clone(a._view),a},transition:function(a){var c=this;return c._view||(c._view=b.clone(c._model)),1===a?(c._view=c._model,c._start=null,c):(c._start||c.pivot(),b.each(c._model,function(d,e){if("_"===e[0]);else if(c._view.hasOwnProperty(e))if(d===c._view[e]);else if("string"==typeof d)try{var f=b.color(c._model[e]).mix(b.color(c._start[e]),a);c._view[e]=f.rgbString()}catch(g){c._view[e]=d}else if("number"==typeof d){var h=void 0!==c._start[e]&&isNaN(c._start[e])===!1?c._start[e]:0;c._view[e]=(c._model[e]-h)*a+h}else c._view[e]=d;else"number"!=typeof d||isNaN(c._view[e])?c._view[e]=d:c._view[e]=d*a},c),c)},tooltipPosition:function(){return{x:this._model.x,y:this._model.y}},hasValue:function(){return b.isNumber(this._model.x)&&b.isNumber(this._model.y)}}),a.Element.extend=b.inherits}},{}],25:[function(a,b,c){"use strict";var d=a(3);b.exports=function(a){function b(a,b,c){var d;return"string"==typeof a?(d=parseInt(a,10),-1!=a.indexOf("%")&&(d=d/100*b.parentNode[c])):d=a,d}function c(a){return void 0!==a&&null!==a&&"none"!==a}function e(a,d,e){var f=document.defaultView,g=a.parentNode,h=f.getComputedStyle(a)[d],i=f.getComputedStyle(g)[d],j=c(h),k=c(i),l=Number.POSITIVE_INFINITY;return j||k?Math.min(j?b(h,a,e):l,k?b(i,g,e):l):"none"}var f=a.helpers={};f.each=function(a,b,c,d){var e,g;if(f.isArray(a))if(g=a.length,d)for(e=g-1;e>=0;e--)b.call(c,a[e],e);else for(e=0;g>e;e++)b.call(c,a[e],e);else if("object"==typeof a){var h=Object.keys(a);for(g=h.length,e=0;g>e;e++)b.call(c,a[h[e]],h[e])}},f.clone=function(a){var b={};return f.each(a,function(a,c){f.isArray(a)?b[c]=a.slice(0):"object"==typeof a&&null!==a?b[c]=f.clone(a):b[c]=a}),b},f.extend=function(a){for(var b=function(b,c){a[c]=b},c=1,d=arguments.length;d>c;c++)f.each(arguments[c],b);return a},f.configMerge=function(b){var c=f.clone(b);return f.each(Array.prototype.slice.call(arguments,1),function(b){f.each(b,function(b,d){if("scales"===d)c[d]=f.scaleMerge(c.hasOwnProperty(d)?c[d]:{},b);else if("scale"===d)c[d]=f.configMerge(c.hasOwnProperty(d)?c[d]:{},a.scaleService.getScaleDefaults(b.type),b);else if(c.hasOwnProperty(d)&&f.isArray(c[d])&&f.isArray(b)){var e=c[d];f.each(b,function(a,b){b=d[c].length||!d[c][e].type?d[c].push(f.configMerge(h,b)):b.type&&b.type!==d[c][e].type?d[c][e]=f.configMerge(d[c][e],h,b):d[c][e]=f.configMerge(d[c][e],b)}):(d[c]=[],f.each(b,function(b){var e=f.getValueOrDefault(b.type,"xAxes"===c?"category":"linear");d[c].push(f.configMerge(a.scaleService.getScaleDefaults(e),b))})):d.hasOwnProperty(c)&&"object"==typeof d[c]&&null!==d[c]&&"object"==typeof b?d[c]=f.configMerge(d[c],b):d[c]=b}),d},f.getValueAtIndexOrDefault=function(a,b,c){return void 0===a||null===a?c:f.isArray(a)?bc;++c)if(a[c]===b)return c;return-1},f.where=function(a,b){if(f.isArray(a)&&Array.prototype.filter)return a.filter(b);var c=[];return f.each(a,function(a){b(a)&&c.push(a)}),c},f.findIndex=Array.prototype.findIndex?function(a,b,c){return a.findIndex(b,c)}:function(a,b,c){c=void 0===c?a:c;for(var d=0,e=a.length;e>d;++d)if(b.call(c,a[d],d,a))return d;return-1},f.findNextWhere=function(a,b,c){(void 0===c||null===c)&&(c=-1);for(var d=c+1;d=0;d--){var e=a[d];if(b(e))return e}},f.inherits=function(a){var b=this,c=a&&a.hasOwnProperty("constructor")?a.constructor:function(){return b.apply(this,arguments)},d=function(){this.constructor=c};return d.prototype=b.prototype,c.prototype=new d,c.extend=f.inherits,a&&f.extend(c.prototype,a),c.__super__=b.prototype,c},f.noop=function(){},f.uid=function(){var a=0;return function(){return a++}}(),f.isNumber=function(a){return!isNaN(parseFloat(a))&&isFinite(a)},f.almostEquals=function(a,b,c){return Math.abs(a-b)0?1:-1},f.log10=Math.log10?function(a){return Math.log10(a)}:function(a){return Math.log(a)/Math.LN10},f.toRadians=function(a){return a*(Math.PI/180)},f.toDegrees=function(a){return a*(180/Math.PI)},f.getAngleFromPoint=function(a,b){var c=b.x-a.x,d=b.y-a.y,e=Math.sqrt(c*c+d*d),f=Math.atan2(d,c);return f<-.5*Math.PI&&(f+=2*Math.PI),{angle:f,distance:e}},f.aliasPixel=function(a){return a%2===0?0:.5},f.splineCurve=function(a,b,c,d){var e=a.skip?b:a,f=b,g=c.skip?b:c,h=Math.sqrt(Math.pow(f.x-e.x,2)+Math.pow(f.y-e.y,2)),i=Math.sqrt(Math.pow(g.x-f.x,2)+Math.pow(g.y-f.y,2)),j=h/(h+i),k=i/(h+i);j=isNaN(j)?0:j,k=isNaN(k)?0:k;var l=d*j,m=d*k;return{previous:{x:f.x-l*(g.x-e.x),y:f.y-l*(g.y-e.y)},next:{x:f.x+m*(g.x-e.x),y:f.y+m*(g.y-e.y)}}},f.nextItem=function(a,b,c){return c?b>=a.length-1?a[0]:a[b+1]:b>=a.length-1?a[a.length-1]:a[b+1]},f.previousItem=function(a,b,c){return c?0>=b?a[a.length-1]:a[b-1]:0>=b?a[0]:a[b-1]},f.niceNum=function(a,b){var c,d=Math.floor(f.log10(a)),e=a/Math.pow(10,d);return c=b?1.5>e?1:3>e?2:7>e?5:10:1>=e?1:2>=e?2:5>=e?5:10,c*Math.pow(10,d)};var g=f.easingEffects={linear:function(a){return a},easeInQuad:function(a){return a*a},easeOutQuad:function(a){return-1*a*(a-2)},easeInOutQuad:function(a){return(a/=.5)<1?.5*a*a:-.5*(--a*(a-2)-1)},easeInCubic:function(a){return a*a*a},easeOutCubic:function(a){return 1*((a=a/1-1)*a*a+1)},easeInOutCubic:function(a){return(a/=.5)<1?.5*a*a*a:.5*((a-=2)*a*a+2)},easeInQuart:function(a){return a*a*a*a},easeOutQuart:function(a){return-1*((a=a/1-1)*a*a*a-1)},easeInOutQuart:function(a){return(a/=.5)<1?.5*a*a*a*a:-.5*((a-=2)*a*a*a-2)},easeInQuint:function(a){return 1*(a/=1)*a*a*a*a},easeOutQuint:function(a){return 1*((a=a/1-1)*a*a*a*a+1)},easeInOutQuint:function(a){return(a/=.5)<1?.5*a*a*a*a*a:.5*((a-=2)*a*a*a*a+2)},easeInSine:function(a){return-1*Math.cos(a/1*(Math.PI/2))+1},easeOutSine:function(a){return 1*Math.sin(a/1*(Math.PI/2))},easeInOutSine:function(a){return-.5*(Math.cos(Math.PI*a/1)-1)},easeInExpo:function(a){return 0===a?1:1*Math.pow(2,10*(a/1-1))},easeOutExpo:function(a){return 1===a?1:1*(-Math.pow(2,-10*a/1)+1)},easeInOutExpo:function(a){return 0===a?0:1===a?1:(a/=.5)<1?.5*Math.pow(2,10*(a-1)):.5*(-Math.pow(2,-10*--a)+2)},easeInCirc:function(a){return a>=1?a:-1*(Math.sqrt(1-(a/=1)*a)-1)},easeOutCirc:function(a){return 1*Math.sqrt(1-(a=a/1-1)*a)},easeInOutCirc:function(a){return(a/=.5)<1?-.5*(Math.sqrt(1-a*a)-1):.5*(Math.sqrt(1-(a-=2)*a)+1)},easeInElastic:function(a){var b=1.70158,c=0,d=1;return 0===a?0:1===(a/=1)?1:(c||(c=.3),da?-.5*(d*Math.pow(2,10*(a-=1))*Math.sin((1*a-b)*(2*Math.PI)/c)):d*Math.pow(2,-10*(a-=1))*Math.sin((1*a-b)*(2*Math.PI)/c)*.5+1)},easeInBack:function(a){var b=1.70158;return 1*(a/=1)*a*((b+1)*a-b)},easeOutBack:function(a){var b=1.70158;return 1*((a=a/1-1)*a*((b+1)*a+b)+1)},easeInOutBack:function(a){var b=1.70158;return(a/=.5)<1?.5*(a*a*(((b*=1.525)+1)*a-b)):.5*((a-=2)*a*(((b*=1.525)+1)*a+b)+2)},easeInBounce:function(a){return 1-g.easeOutBounce(1-a)},easeOutBounce:function(a){return(a/=1)<1/2.75?1*(7.5625*a*a):2/2.75>a?1*(7.5625*(a-=1.5/2.75)*a+.75):2.5/2.75>a?1*(7.5625*(a-=2.25/2.75)*a+.9375):1*(7.5625*(a-=2.625/2.75)*a+.984375)},easeInOutBounce:function(a){return.5>a?.5*g.easeInBounce(2*a):.5*g.easeOutBounce(2*a-1)+.5}};f.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(a){return window.setTimeout(a,1e3/60)}}(),f.cancelAnimFrame=function(){return window.cancelAnimationFrame||window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame||window.oCancelAnimationFrame||window.msCancelAnimationFrame||function(a){return window.clearTimeout(a,1e3/60)}}(),f.getRelativePosition=function(a,b){var c,d,e=a.originalEvent||a,g=a.currentTarget||a.srcElement,h=g.getBoundingClientRect(),i=e.touches;i&&i.length>0?(c=i[0].clientX,d=i[0].clientY):(c=e.clientX,d=e.clientY);var j=parseFloat(f.getStyle(g,"padding-left")),k=parseFloat(f.getStyle(g,"padding-top")),l=parseFloat(f.getStyle(g,"padding-right")),m=parseFloat(f.getStyle(g,"padding-bottom")),n=h.right-h.left-j-l,o=h.bottom-h.top-k-m;return c=Math.round((c-h.left-j)/n*g.width/b.currentDevicePixelRatio),d=Math.round((d-h.top-k)/o*g.height/b.currentDevicePixelRatio),{x:c,y:d}},f.addEvent=function(a,b,c){a.addEventListener?a.addEventListener(b,c):a.attachEvent?a.attachEvent("on"+b,c):a["on"+b]=c},f.removeEvent=function(a,b,c){a.removeEventListener?a.removeEventListener(b,c,!1):a.detachEvent?a.detachEvent("on"+b,c):a["on"+b]=f.noop},f.bindEvents=function(a,b,c){var d=a.events=a.events||{};f.each(b,function(b){d[b]=function(){c.apply(a,arguments)},f.addEvent(a.chart.canvas,b,d[b])})},f.unbindEvents=function(a,b){var c=a.chart.canvas;f.each(b,function(a,b){f.removeEvent(c,b,a)})},f.getConstraintWidth=function(a){return e(a,"max-width","clientWidth")},f.getConstraintHeight=function(a){return e(a,"max-height","clientHeight")},f.getMaximumWidth=function(a){var b=a.parentNode,c=parseInt(f.getStyle(b,"padding-left"))+parseInt(f.getStyle(b,"padding-right")),d=b.clientWidth-c,e=f.getConstraintWidth(a);return isNaN(e)?d:Math.min(d,e)},f.getMaximumHeight=function(a){var b=a.parentNode,c=parseInt(f.getStyle(b,"padding-top"))+parseInt(f.getStyle(b,"padding-bottom")),d=b.clientHeight-c,e=f.getConstraintHeight(a);return isNaN(e)?d:Math.min(d,e)},f.getStyle=function(a,b){return a.currentStyle?a.currentStyle[b]:document.defaultView.getComputedStyle(a,null).getPropertyValue(b)},f.retinaScale=function(a){var b=a.ctx,c=a.canvas,d=c.width,e=c.height,f=a.currentDevicePixelRatio=window.devicePixelRatio||1;1!==f&&(c.height=e*f,c.width=d*f,b.scale(f,f),a.originalDevicePixelRatio=a.originalDevicePixelRatio||f),c.style.width=d+"px",c.style.height=e+"px"},f.clear=function(a){a.ctx.clearRect(0,0,a.width,a.height)},f.fontString=function(a,b,c){return b+" "+a+"px "+c},f.longestText=function(a,b,c,d){d=d||{};var e=d.data=d.data||{},g=d.garbageCollect=d.garbageCollect||[];d.font!==b&&(e=d.data={},g=d.garbageCollect=[],d.font=b),a.font=b;var h=0;f.each(c,function(b){void 0!==b&&null!==b&&f.isArray(b)!==!0?h=f.measureText(a,e,g,h,b):f.isArray(b)&&f.each(b,function(b){void 0===b||null===b||f.isArray(b)||(h=f.measureText(a,e,g,h,b))})});var i=g.length/2;if(i>c.length){for(var j=0;i>j;j++)delete e[g[j]];g.splice(0,i)}return h},f.measureText=function(a,b,c,d,e){var f=b[e];return f||(f=b[e]=a.measureText(e).width,c.push(e)),f>d&&(d=f),d},f.numberOfLabelLines=function(a){var b=1;return f.each(a,function(a){f.isArray(a)&&a.length>b&&(b=a.length)}),b},f.drawRoundedRectangle=function(a,b,c,d,e,f){a.beginPath(),a.moveTo(b+f,c),a.lineTo(b+d-f,c),a.quadraticCurveTo(b+d,c,b+d,c+f),a.lineTo(b+d,c+e-f),a.quadraticCurveTo(b+d,c+e,b+d-f,c+e),a.lineTo(b+f,c+e),a.quadraticCurveTo(b,c+e,b,c+e-f),a.lineTo(b,c+f),a.quadraticCurveTo(b,c,b+f,c),a.closePath()},f.color=function(b){return d?d(b instanceof CanvasGradient?a.defaults.global.defaultColor:b):(console.log("Color.js not found!"),b)},f.addResizeListener=function(a,b){var c=document.createElement("iframe"),d="chartjs-hidden-iframe";c.classlist?c.classlist.add(d):c.setAttribute("class",d);var e=c.style;e.width="100%",e.display="block",e.border=0,e.height=0,e.margin=0,e.position="absolute",e.left=0,e.right=0,e.top=0,e.bottom=0,a.insertBefore(c,a.firstChild),(c.contentWindow||c).onresize=function(){b&&b()}},f.removeResizeListener=function(a){var b=a.querySelector(".chartjs-hidden-iframe");b&&b.parentNode.removeChild(b)},f.isArray=Array.isArray?function(a){return Array.isArray(a)}:function(a){return"[object Array]"===Object.prototype.toString.call(a)},f.arrayEquals=function(a,b){var c,d,e,g;if(!a||!b||a.length!=b.length)return!1;for(c=0,d=a.length;d>c;++c)if(e=a[c],g=b[c],e instanceof Array&&g instanceof Array){if(!f.arrayEquals(e,g))return!1}else if(e!=g)return!1;return!0},f.callCallback=function(a,b,c){a&&"function"==typeof a.call&&a.apply(c,b)},f.getHoverColor=function(a){return a instanceof CanvasPattern?a:f.color(a).saturate(.5).darken(.1).rgbString()}}},{3:3}],26:[function(a,b,c){"use strict";b.exports=function(){var a=function(b,c){var d=this,e=a.helpers;return d.config=c,b.length&&b[0].getContext&&(b=b[0]),b.getContext&&(b=b.getContext("2d")),d.ctx=b,d.canvas=b.canvas,b.canvas.style.display=b.canvas.style.display||"block",d.width=b.canvas.width||parseInt(e.getStyle(b.canvas,"width"),10)||e.getMaximumWidth(b.canvas),d.height=b.canvas.height||parseInt(e.getStyle(b.canvas,"height"),10)||e.getMaximumHeight(b.canvas),d.aspectRatio=d.width/d.height,(isNaN(d.aspectRatio)||isFinite(d.aspectRatio)===!1)&&(d.aspectRatio=void 0!==c.aspectRatio?c.aspectRatio:2),d.originalCanvasStyleWidth=b.canvas.style.width,d.originalCanvasStyleHeight=b.canvas.style.height,e.retinaScale(d),c&&(d.controller=new a.Controller(d)),e.addResizeListener(b.canvas.parentNode,function(){d.controller&&d.controller.config.options.responsive&&d.controller.resize()}),d.controller?d.controller:d};return a.defaults={global:{responsive:!0,responsiveAnimationDuration:0,maintainAspectRatio:!0,events:["mousemove","mouseout","click","touchstart","touchmove"],hover:{onHover:null,mode:"single",animationDuration:400},onClick:null,defaultColor:"rgba(0,0,0,0.1)",defaultFontColor:"#666",defaultFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",defaultFontSize:12,defaultFontStyle:"normal",showLines:!0,elements:{},legendCallback:function(a){var b=[];b.push('