User:Irukaza/common.js:修订间差异

H萌娘,万物皆可H的百科全书!
跳到导航 跳到搜索
imported>=海豚=
(//QuickEdit)
imported>Irukaza
(清空页面)
 
第1行: 第1行:
// <nowiki>
// Code to make a footer message about pageviews
// © John Erling Blad, Creative Commons by Attribution 3.0


$(function( $content ) {
"use strict";
var days = 7;
var conf = mw.config.get( [
'wgUserLanguage',
'wgNamespaceNumber',
'wgServerName',
'wgPageName'
] );
if ( conf.wgNamespaceNumber !== 0) {
mw.log( "So wise so young, they say do never live long." );
return;
}
var ajax = {
'protocol': mw.Uri.protocol,
'host': 'hmoegirl.com',
'path': '/api/rest_v1/metrics/pageviews/per-article'
};
var buildURI = function(ajax, opts) {
var args = jQuery.extend({}, ajax, opts);
var path = ajax.path.split('/');
if (args.project === undefined) {
args.project = conf.wgServerName;
}
if (/^[\w\.]*$/.test(args.project)) path.push(args.project);
if (args.access === undefined) {
args.access = 'all-access';
}
if (/^[-\w]*$/.test(args.access)) path.push(args.access);
if (args.agents === undefined) {
args.agents = 'all-agents';
}
if (/^[-\w]*$/.test(args.agents)) path.push(args.agents);
if (args.pageName === undefined) {
args.pageName = conf.wgPageName;
path.push(args.pageName);
}
else {
if (/^[-+_\w\s%]*$/i.test(args.pageName)) path.push(args.pageName);
}
if (args.granularity === undefined) {
args.granularity = 'daily';
}
if (/^[\w]*$/.test(args.granularity)) path.push(args.granularity);
var end = new Date();
var start = new Date(end.valueOf()-days*24*60*60*1000);
if (args.start === undefined) {
args.start = ''
+start.getUTCFullYear()
+(start.getUTCMonth()<10 ? '0' : '')+(start.getUTCMonth()+1)
+(start.getUTCDate()<10 ? '0' : '')+start.getUTCDate();
}
if (/^[\d]*$/i.test(args.start)) path.push(args.start);
if (args.end === undefined) {
args.end = ''
+end.getUTCFullYear()
+(end.getUTCMonth()<10 ? '0' : '')+(end.getUTCMonth()+1)
+(end.getUTCDate()<10 ? '0' : '')+end.getUTCDate();
}
if (/^[\d]*$/i.test(args.end)) path.push(args.end);
return new mw.Uri( jQuery.extend({}, args, { 'path': path.join('/')}) );
};
var replied = null;
var stats = {
count: 0,
mean: 0,
items: null
};
var api = new mw.Api();
function loadGraph() {
if (replied !== null) return;
replied = false;
api
.ajax({
action: 'parse',
prop: 'text',
title: conf.wgPageName,
text: "{{Graph:PageViews|"+days+"|"+conf.wgPageName+"}}"
})
.fail(function(){
replied = null;
})
.done(function(data){
replied = true;
var $collapsible = $('#statbox').children('.mw-collapsible-content');
$.each( data.parse.text, function ( index, text ) {
$collapsible.append($('<div>').html(text));
});
});
}
function render() {
if ($('#statbox').size() > 0) {
return;
}
var text = '';
if (stats.count>0) {
var nowMsg = 'pageview-now-single';
if (stats.count>1) {
nowMsg = 'pageview-now-multiple';
}
text += mw.message( nowMsg, stats.items[0].views, stats.items[0].ago ).text();
}
if (stats.count>1) {
var prevMsg = 'pageview-prev-same';
if (stats.items[1].views > stats.items[0].views) {
prevMsg = 'pageview-prev-down';
} else if (stats.items[1].views < stats.items[0].views) {
prevMsg = 'pageview-prev-up';
}
text += ' ' + mw.message( prevMsg, Math.abs(stats.items[0].views - stats.items[1].views), stats.items[1].ago-stats.items[0].ago ).text();
var meanMsg = 'pageview-mean';
text += ' ' + mw.message( meanMsg, Math.round(stats.mean), stats.count ).text();
}
if (stats.count !== days) {
var incompleteMsg = 'pageview-incomplete';
text += ' ' + mw.message( incompleteMsg ).text();
}
var $stat = $('<li>')
.attr({'id': 'statbox', 'data-mw': 'interface'});
$stat
.text(text)
.prependTo('#footer-info');
if (stats.count>1) {
$stat
.addClass('statbox mw-collapsible mw-collapsed')
.append($('<div>').addClass('mw-collapsible-content'))
.makeCollapsible();
}
$stat.children('.mw-collapsible-toggle').mouseover(loadGraph);
}
var statsRequest = $.ajax({
'cache':true,
'dataType': 'json',
'url': buildURI(ajax, {}) })
.done(function(data){
if (!(data.items)) {
data.items = [];
}
data.items.reverse();
var num = 0;
var acc = 0;
var now = new Date();
var daylength = 24*60*60*1000;
$.each( data.items, function ( index, item ) {
acc += item.views;
num++;
var dtg = item.timestamp.replace(/^(\d{4})(\d{2})(\d{2}).*$/, '$1-$2-$3');
var then = new Date(dtg);
item.ago = Math.floor((now - then)/daylength);
});
stats.items = data.items;
stats.count = num;
stats.mean = acc/num;
});
var msgs = {
'pageview-now-single':'本条目在{{PLURAL:$2|昨天|$2天前}}仅有$1次浏览。',
'pageview-now-multiple':'本条目{{PLURAL:$2|昨天|$2天前}}被浏览$1次,',
'pageview-prev-down':'较那天之前$2天减少$1次浏览,',
'pageview-prev-same':'与那天之前$2天相同,',
'pageview-prev-up':'较那天之前$2天增长$1次浏览,',
'pageview-mean':'在$2天内平均浏览量为$1次。',
'pageview-incomplete':'数据集不完整。',
};
var amRequest = api.ajax({
action: 'query',
meta: 'allmessages',
amlang: conf.wgUserLanguage,
ammessages: Object.keys(msgs)
})
.done(function(data){
$.each( data.query.allmessages, function ( index, message ) {
if ( message.missing !== '' ) {
mw.messages.set( message.normalizedname, message['*'] );
} else if (msgs[message.name]) {
mw.messages.set( message.normalizedname, msgs[message.name] );
}
});
});
Promise.all([amRequest, statsRequest]).then(render);
});
// </nowiki>

2022年3月17日 (四) 18:22的最新版本