Користувач:Bunyk/projector.js
Увага: Після публікування слід очистити кеш браузера, щоб побачити зміни.
- Firefox / Safari: тримайте Shift, коли натискаєте Оновити, або натисніть Ctrl-F5 чи Ctrl-Shift-R (⌘-R на Apple Mac)
- Google Chrome: натисніть Ctrl-Shift-R (⌘-Shift-R на Apple Mac)
- Edge: тримайте Ctrl, коли натискаєте Оновити, або натисніть Ctrl-F5.
//<nowiki>
if ( typeof( window.projector ) == 'undefined' ) {
window.projector = {
projects: [{
id: 'astro',
name: '🔭 Астрономія',
template: '{{Проєкт:Астрономія|важливість=|рівень=}}',
pattern: /Проєкт:Астрономія/,
}, {
id: 'bio',
name: "☣ Біологія",
template: "{{Стаття проєкту Біологія|class=|importance=}}",
pattern: /проєкту ((Молекулярна )?біологія|Екологія|Ентомологія|Історія біології|Г?риби|Птахи)/i,
}, {
id: 'comp_sci',
name: "💻 Комп'ютерні науки",
template: "{{Стаття проєкту Комп'ютерні науки|важливість=|рівень=}}",
pattern: /проєкту Комп'ютерні науки/,
}, {
id: 'math',
name: "∑ Математика",
template: "{{Вікіпроєкт Математика|важливість=|рівень=}}",
pattern: /Вікіпроєкт Математика/,
}, {
id: 'med',
name: "🩺 Медицина",
template: "{{Вікіпроєкт:Медицина|важливість=|рівень=}}",
pattern: /Вікіпроєкт:Медицина/,
}, {
id: 'cinema',
name: '🎥 Кінематограф',
template: '{{Вікіпроєкт:Кінематограф|важливість=|рівень=}}',
pattern: /Вікіпроєкт:Кінематограф/,
}, {
id: 'games',
name: '🎮 Ігри',
template: '{{Проєкт:Відеоігри|важливість=|рівень=}}',
pattern: /Проєкт:Відеоігри/,
}, {
id: 'music',
name: '𝄞 Музика',
template: '{{Проєкт:Музика|важливість=|рівень=}}',
pattern: /Проєкт:Музика/,
}, {
id: 'fanta',
name: '👽 Фантастика',
template: '{{Вікіпроєкт:Фантастика|важливість=|рівень=}}',
pattern: /Вікіпроєкт:(Фентезі|(Наукова )?Фантастика( жахів)?)/,
}, {
id: 'mil',
name: '⚔️ Військова історія',
template: '{{Стаття проєкту Військова історія|важливість=|рівень=}}',
pattern: /Стаття проєкту Військова історія/,
}, {
id: 'miltech',
name: '🚀 Військова техніка',
template: '{{Стаття проєкту Військова техніка|важливість=|рівень=}}',
pattern: /Стаття проєкту Військова техніка/,
}, {
id: 'phys',
name: '⚛️ Фізика',
template: '{{Стаття проєкту Фізика|важливість=|рівень=}}',
pattern: /Стаття проєкту Фізика/,
}, {
id: 'football',
name: '⚽ Футбол',
template: '{{Вікіпроєкт:Футбол}}',
pattern: /Вікіпроєкт:Футбол/,
},
],
api: new mw.Api(),
upsertPage: function(title, text, comment) {
if(this.talk) { // exists
return this.api.edit(title, function() {
return {
text: text,
summary: comment,
minor: true,
};
})
} else { // missing
return this.api.create(title, {}, text)
}
},
install: function () {
var PR = this;
this.readPage(this.getTalkPageTitle(), function(text) {
PR.talk = text;
$.each(PR.projects, function() {
$('#PR-' + this.id).prop('checked', text.match(this.pattern));
})
})
$('#p-Участь').append('<h3 class="vector-menu-heading">Проекти сторінки:</h3>')
$('#p-Участь').append('<div class="vector-menu-content"><ul class="vector-menu-content-list" id="PR-list"></ul></div>');
var save_btn = $('<button>Зберегти</button>').click(function() {
PR.save($(this));
});
$('#p-Участь').append(save_btn);
$.each(PR.projects, function() {
$('#PR-list').append(
'<li class="mw-list-item">' +
'<span style="font-size: 1.5em; display: inline-block; width: 30px; height:30px">' +
this.name.split(' ')[0] +
'</span><input type="checkbox" name="PR-radio" id="PR-' +
this.id + '">' + this.name.split(' ')[1] + '</input></li>'
);
});
},
save: function(button) {
console.log(button);
var PR = this;
var comment = [];
var text = this.talk;
$.each(PR.projects, function() {
var have = text.match(this.pattern);
var want = $('#PR-' + this.id).prop('checked');
if(!have && want) {
text = this.template + '\n' + text
comment.push('додав проєкт ' + this.name)
}
});
button.text("Редагування сторінки обговорення...");
this.upsertPage(this.getTalkPageTitle(), text, comment.join(', ')).then(
function(res) {
button.text("Збережено");
}, function(fail) {
console.log('fail', fail);
button.text("Холєра!");
});
},
getTalkPageTitle: function() {
var ns = mw.config.get('wgNamespaceNumber');
if (ns % 2 == 0) { // Not talk page
ns++
}
return mw.config.get('wgFormattedNamespaces')[ns] + ':' + mw.config.get('wgTitle');
},
readPage: function(title, success) {
var param = {
action: 'query',
prop: 'revisions',
format: 'json',
rvprop: 'content|timestamp',
rvlimit: '1',
titles: title,
indexpageids: ''
};
$.get(mw.util.wikiScript('api'), param).done(function(data) {
var page = data.query.pages[data.query.pageids[0]];
var text = '';
if (page.revisions) {
text = page.revisions[0]['*'];
}
success(text);
});
},
};
}
$(document).ready(function () {
if (mw.config.get('wgNamespaceNumber') > -1) {
projector.install()
}
});
//</nowiki>