MediaWiki:Mobile.js: различия между версиями
Перейти к навигации
Перейти к поиску
м Метки: правка из мобильной версии правка с мобильного устройства |
м Метка: отменено |
||
Строка 1: | Строка 1: | ||
/* All JavaScript here will be loaded for users of the mobile site */ | /* All JavaScript here will be loaded for users of the mobile site */ | ||
/**********Countdown**********/ | |||
;(function (module, mw, $, undefined) { | |||
'use strict'; | |||
var translations = $.extend(true, { | |||
// English (English) | |||
en: { | |||
and: 'и', | |||
second: 'секунда', | |||
seconds: 'секунд', | |||
minute: 'минута', | |||
minutes: 'минут', | |||
hour: 'час', | |||
hours: 'часов', | |||
day: 'день', | |||
days: 'дней' | |||
} | |||
}, module.translations || {}), | |||
i18n = translations[ | |||
mw.config.get('wgContentLanguage') | |||
] || translations.en; | |||
var countdowns = []; | |||
var NO_LEADING_ZEROS = 1; | |||
function output (i, diff) { | |||
/*jshint bitwise:false*/ | |||
var delta, result, parts = []; | |||
delta = diff % 60; | |||
parts.unshift(delta + ' ' + i18n[delta === 1 ? 'second' : 'seconds']); | |||
diff = Math.floor(diff / 60); | |||
delta = diff % 60; | |||
parts.unshift(delta + ' ' + i18n[delta === 1 ? 'minute' : 'minutes']); | |||
diff = Math.floor(diff / 60); | |||
delta = diff % 24; | |||
parts.unshift(delta + ' ' + i18n[delta === 1 ? 'hour' : 'hours' ]); | |||
diff = Math.floor(diff / 24); | |||
parts.unshift(diff + ' ' + i18n[diff === 1 ? 'day' : 'days' ]); | |||
result = parts.pop(); | |||
if (countdowns[i].opts & NO_LEADING_ZEROS) { | |||
while (parts.length && parts[0][0] === '0') { | |||
parts.shift(); | |||
} | |||
} | |||
if (parts.length) { | |||
result = parts.join(', ') + ' ' + i18n.and + ' ' + result; | |||
} | |||
countdowns[i].node.text(result); | |||
} | |||
function end(i) { | |||
var c = countdowns[i].node.parent(); | |||
switch (c.attr('data-end')) { | |||
case 'remove': | |||
c.remove(); | |||
return true; | |||
case 'stop': | |||
output(i, 0); | |||
return true; | |||
case 'toggle': | |||
var toggle = c.attr('data-toggle'); | |||
if (toggle && $(toggle).length) { | |||
$(toggle).css('display', 'inline'); | |||
c.css('display', 'inline'); | |||
return true; | |||
} | |||
break; | |||
case 'callback': | |||
var callback = c.attr('data-callback'); | |||
if (callback && $.isFunction(module[callback])) { | |||
output(i, 0); | |||
module[callback].call(c); | |||
return true; | |||
} | |||
break; | |||
} | |||
countdowns[i].countup = true; | |||
output(i, 0); | |||
return false; | |||
} | |||
function update () { | |||
var now = Date.now(); | |||
var countdownsToRemove = []; | |||
$.each(countdowns.slice(0), function (i, countdown) { | |||
var diff = Math.floor((countdown.date - now) / 1000); | |||
if (diff <= 0 && !countdown.countup) { | |||
if (end(i)) countdownsToRemove.push(i); | |||
} else { | |||
output(i, Math.abs(diff)); | |||
} | |||
}); | |||
var x; | |||
while((x = countdownsToRemove.pop()) !== undefined) { | |||
countdowns.splice(x, 1); | |||
} | |||
if (countdowns.length) { | |||
window.setTimeout(function () { | |||
update(); | |||
}, 1000); | |||
} | |||
} | |||
function getOptions (node) { | |||
/*jshint bitwise:false*/ | |||
var text = node.parent().attr('data-options'), | |||
opts = 0; | |||
if (text) { | |||
if (/no-leading-zeros/.test(text)) { | |||
opts |= NO_LEADING_ZEROS; | |||
} | |||
} | |||
return opts; | |||
} | |||
$(function () { | |||
var countdown = $('.countdown'); | |||
if (!countdown.length) return; | |||
$('.nocountdown').css('display', 'none'); | |||
countdown | |||
.css('display', 'inline') | |||
.find('.countdowndate') | |||
.each(function () { | |||
var $this = $(this), | |||
date = (new Date($this.text())).valueOf(); | |||
if (isNaN(date)) { | |||
$this.text('BAD DATE'); | |||
return; | |||
} | |||
countdowns.push({ | |||
node: $this, | |||
opts: getOptions($this), | |||
date: date, | |||
}); | |||
}); | |||
if (countdowns.length) { | |||
update(); | |||
} | |||
}); | |||
}(window.countdownTimer = window.countdownTimer || {}, mediaWiki, jQuery)); | |||
// | |||
var timer = setInterval(function() { | var timer = setInterval(function() { |
Версия 06:41, 11 января 2024
/* All JavaScript here will be loaded for users of the mobile site */
/**********Countdown**********/
;(function (module, mw, $, undefined) {
'use strict';
var translations = $.extend(true, {
// English (English)
en: {
and: 'и',
second: 'секунда',
seconds: 'секунд',
minute: 'минута',
minutes: 'минут',
hour: 'час',
hours: 'часов',
day: 'день',
days: 'дней'
}
}, module.translations || {}),
i18n = translations[
mw.config.get('wgContentLanguage')
] || translations.en;
var countdowns = [];
var NO_LEADING_ZEROS = 1;
function output (i, diff) {
/*jshint bitwise:false*/
var delta, result, parts = [];
delta = diff % 60;
parts.unshift(delta + ' ' + i18n[delta === 1 ? 'second' : 'seconds']);
diff = Math.floor(diff / 60);
delta = diff % 60;
parts.unshift(delta + ' ' + i18n[delta === 1 ? 'minute' : 'minutes']);
diff = Math.floor(diff / 60);
delta = diff % 24;
parts.unshift(delta + ' ' + i18n[delta === 1 ? 'hour' : 'hours' ]);
diff = Math.floor(diff / 24);
parts.unshift(diff + ' ' + i18n[diff === 1 ? 'day' : 'days' ]);
result = parts.pop();
if (countdowns[i].opts & NO_LEADING_ZEROS) {
while (parts.length && parts[0][0] === '0') {
parts.shift();
}
}
if (parts.length) {
result = parts.join(', ') + ' ' + i18n.and + ' ' + result;
}
countdowns[i].node.text(result);
}
function end(i) {
var c = countdowns[i].node.parent();
switch (c.attr('data-end')) {
case 'remove':
c.remove();
return true;
case 'stop':
output(i, 0);
return true;
case 'toggle':
var toggle = c.attr('data-toggle');
if (toggle && $(toggle).length) {
$(toggle).css('display', 'inline');
c.css('display', 'inline');
return true;
}
break;
case 'callback':
var callback = c.attr('data-callback');
if (callback && $.isFunction(module[callback])) {
output(i, 0);
module[callback].call(c);
return true;
}
break;
}
countdowns[i].countup = true;
output(i, 0);
return false;
}
function update () {
var now = Date.now();
var countdownsToRemove = [];
$.each(countdowns.slice(0), function (i, countdown) {
var diff = Math.floor((countdown.date - now) / 1000);
if (diff <= 0 && !countdown.countup) {
if (end(i)) countdownsToRemove.push(i);
} else {
output(i, Math.abs(diff));
}
});
var x;
while((x = countdownsToRemove.pop()) !== undefined) {
countdowns.splice(x, 1);
}
if (countdowns.length) {
window.setTimeout(function () {
update();
}, 1000);
}
}
function getOptions (node) {
/*jshint bitwise:false*/
var text = node.parent().attr('data-options'),
opts = 0;
if (text) {
if (/no-leading-zeros/.test(text)) {
opts |= NO_LEADING_ZEROS;
}
}
return opts;
}
$(function () {
var countdown = $('.countdown');
if (!countdown.length) return;
$('.nocountdown').css('display', 'none');
countdown
.css('display', 'inline')
.find('.countdowndate')
.each(function () {
var $this = $(this),
date = (new Date($this.text())).valueOf();
if (isNaN(date)) {
$this.text('BAD DATE');
return;
}
countdowns.push({
node: $this,
opts: getOptions($this),
date: date,
});
});
if (countdowns.length) {
update();
}
});
}(window.countdownTimer = window.countdownTimer || {}, mediaWiki, jQuery));
//
var timer = setInterval(function() {
if ($('.menu ul:first').length) {
console.log("mobile menu exists");
clearInterval(timer);
$('.menu ul:first').after(
'<ul class="level1"> \
<li> \
<a href="#" \
class="mw-ui-icon mw-ui-icon-before mw-ui-icon-minerva-articles"> \
<span>Статьи по категориям</span> \
</a> \
</li> \
<ul class ="level2"> \
<li> \
<a href="/Category:Абдулокультура" \
class="mw-ui-icon mw-ui-icon-before"> \
<span>Абдулокультура</span> \
</a> \
</li> \
<li> \
<a href="/Category:Абдулонаука" \
class="mw-ui-icon mw-ui-icon-before"> \
<span>Абдулонаука</span> \
</a> \
</li> \
<li> \
<a href="/Category:Грешники" \
class="mw-ui-icon mw-ui-icon-before"> \
<span>Грешники</span> \
</a> \
</li> \
<li> \
<a href="/Category:Великие грешники" \
class="mw-ui-icon mw-ui-icon-before"> \
<span>Великие грешники</span> \
</a> \
</li> \
<li> \
<a href="/Category:Грехоболезни" \
class="mw-ui-icon mw-ui-icon-before"> \
<span>Грехоболезни</span> \
</a> \
</li> \
<li> \
<a href="/Category:Абдулоистория" \
class="mw-ui-icon mw-ui-icon-before"> \
<span>Абдулоистория</span> \
</a> \
</li> \
<li> \
<a href="/Category:Сониблядство" \
class="mw-ui-icon mw-ui-icon-before"> \
<span>Сониблядство</span> \
</a> \
</li> \
<li> \
<a href="/Category:Абдулоосновы" \
class="mw-ui-icon mw-ui-icon-before"> \
<span>Абдулоосновы</span> \
</a> \
</li> \
<li> \
<a href="/Category:Юмор" \
class="mw-ui-icon mw-ui-icon-before"> \
<span>Юмор</span> \
</a> \
</li> \
<li> \
<a href="/Category:Абдулопередачи" \
class="mw-ui-icon mw-ui-icon-before"> \
<span>Абдулопередачи</span> \
</a> \
</li> \
<li> \
<a href="/Category:Мерзость" \
class="mw-ui-icon mw-ui-icon-before"> \
<span>Мерзость</span> \
</a> \
</li> \
<li> \
<a href="/Category:Автономии адептов" \
class="mw-ui-icon mw-ui-icon-before"> \
<span>Автономии адептов</span> \
</a> \
</li> \
<li> \
<a href="/Category:Абдулопредатели" \
class="mw-ui-icon mw-ui-icon-before"> \
<span>Абдулопредатели</span> \
</a> \
</li> \
<li> \
<a href="/Category:Негативные явления" \
class="mw-ui-icon mw-ui-icon-before"> \
<span>Негативные явления</span> \
</a> \
</li> \
<li> \
<a href="/Category:Абдулоиконы" \
class="mw-ui-icon mw-ui-icon-before"> \
<span>Абдулоиконы</span> \
</a> \
</li> \
</ul> \
</ul> \
<ul> \
<li> \
<a href="/Абдулопедия:Читать_Биборан" \
class="mw-ui-icon mw-ui-icon-before mw-ui-icon-minerva-read"> \
<span>Читать Биборан</span> \
</a> \
</li> \
</ul> \
<ul> \
<li> \
<a href="/Special:RecentChanges" \
class="mw-ui-icon mw-ui-icon-before mw-ui-icon-minerva-rchanges"> \
<span>Свежие правки</span> \
<a href="/Абдулопедия:Устав" \
class="mw-ui-icon mw-ui-icon-before mw-ui-icon-minerva-rules"> \
<span>Правила Абдулопедии</span> \
<a href="/Абдулопедия:Поддержать_проект" \
class="mw-ui-icon mw-ui-icon-before mw-ui-icon-minerva-donate"> \
<span>Поддержать Абдулопедию</span> \
<a href="/Служебная:Contact" \
class="mw-ui-icon mw-ui-icon-before mw-ui-icon-minerva-contact"> \
<span>Написать нам</span> \
<a href="/Абдулопедия:Создать_статью" \
class="mw-ui-icon mw-ui-icon-before mw-ui-icon-minerva-newarticle"> \
<span>Создать статью</span> \
<a href="/Абдулопедия:Чем_помочь%3F" \
class="mw-ui-icon mw-ui-icon-before mw-ui-icon-minerva-help"> \
<span>Чем нам можно помочь</span> \
</a> \
</li> \
</ul>'
);
$(".menu").find(".level2").hide(); // hide level2 until level1 is clicked
$(".level1").click(function(event){
$(this).find(".level2").slideToggle(500);
}); // if level1 is clicked, dropdown level2
}
}, 100); // check every 100ms