Utilizator:Valentin JJ./test.js
Notă: După salvare, trebuie să treceți peste cache-ul browser-ului pentru a vedea modificările.
- Mozilla, Google Chrome, Safari, Konqueror: țineți apăsat Shift în timp ce apăsați butonul Reload (sau apăsați Ctrl-Shift-R).
- Internet Explorer: apăsați Ctrl-F5.
- Opera: apăsați F5.
function fetchJsonData(page) {
return $.getJSON("/w/api.php?action=query&format=json&formatversion=2" +
"&titles=" + encodeURIComponent(page) + "&prop=revisions&rvprop=content" +
"&uselang=content&maxage=86400&smaxage=86400"
).then(function(apiResponse) {
const content = apiResponse.query?.pages?.[0]?.revisions?.[0]?.content;
return JSON.parse(content);
});
}
$.when(fetchJsonData("Wikipedia:Cereri_pentru_protejarea_paginilor/Form-configuration.json"), $.ready, mw.loader.using(['mediawiki.api', 'mediawiki.widgets', 'mediawiki.util'])).then(function(config) {
if ((mw.config.get("wgPageName") !== "Wikipedia:Cereri_pentru_protejarea_paginilor/Form")) return;
function sanitizeInput(input) {
return input.replace(/</g, '<').replace(/>/g, '>');
}
var pageDef = '';
if (window.location.href.includes('?page=')) {
pageDef = decodeURIComponent(window.location.href.split('page=').pop());
pageDef = pageDef.replaceAll('_', ' ');
}
var api = new mw.Api();
var previewApi = new mw.Api();
var subpage = 'Default';
config = config[subpage];
var titleInput = new mw.widgets.TitleInputWidget({
'showMissing': false,
'required': true,
'value': pageDef,
});
var reasonInput = new OO.ui.MultilineTextInputWidget({
'placeholder': config.reasonInputPlaceholder,
'required': 'true'
});
var reasonPreview = new OO.ui.LabelWidget();
var currentProtectionLabel = new OO.ui.LabelWidget();
var typeInput = new OO.ui.DropdownWidget( {
label: 'Tipul cererii: Selectați o opțiune',
menu: {
items: [
new OO.ui.MenuOptionWidget( {
data: 'Cerere de protejare pentru ',
label: 'Protejare'
} ),
new OO.ui.MenuOptionWidget( {
data: 'Solicit mărirea nivelului protejării pentru ',
label: 'Mărire nivel de protejare'
} ),
new OO.ui.MenuOptionWidget( {
data: 'Solicit relaxarea nivelului protejării pentru ',
label: 'Relaxare nivel de protejare',
} ),
new OO.ui.MenuOptionWidget( {
data: 'Cerere de deprotejare pentru ',
label: 'Deprotejare',
} )
]
}
} );
var levelInput = new OO.ui.DropdownWidget( {
label: 'Nivelul de protejare: Nu doresc un nivel specific (implicit)',
menu: {
items: [
new OO.ui.MenuOptionWidget( {
data: 'a',
label: 'Semiprotejare'
} ),
new OO.ui.MenuOptionWidget( {
data: 'b',
label: 'Protejare sporită'
} ),
new OO.ui.MenuOptionWidget( {
data: 'c',
label: 'Protejare ca format',
} ),
new OO.ui.MenuOptionWidget( {
data: 'd',
label: 'Protejare totală',
} ),
new OO.ui.MenuOptionWidget( {
data: 'e',
label: 'Protejare la mutare',
} ),
new OO.ui.MenuOptionWidget( {
data: 'f',
label: 'Nu doresc un nivel specific (implicit)',
} )
]
}
});
var submitButton = new OO.ui.ButtonWidget({
'label': 'Trimite cererea',
'flags': ['progressive', 'primary'],
'accesskey': 's'
});
var fieldset = new OO.ui.FieldsetLayout();
fieldset.addItems([
new OO.ui.FieldLayout(titleInput, {
'label': 'Titlul paginii:',
align: 'top'
}),
new OO.ui.FieldLayout(currentProtectionLabel, {
align: 'top'
}),
new OO.ui.FieldLayout(typeInput, {
'label': 'Tip:',
align: 'top'
}),
new OO.ui.FieldLayout(levelInput, {
align: 'top',
}),
new OO.ui.FieldLayout(reasonInput, {
'label': 'Motiv:',
align: 'top',
}),
new OO.ui.FieldLayout(reasonPreview, {
'label': 'Previzualizare:',
align: 'top'
}),
new OO.ui.FieldLayout(submitButton)
]);
$("#mw-content-text").empty().append(fieldset.$element);
$(levelInput.$element).hide();
$(currentProtectionLabel.$element).hide();
if (titleInput.getValue().trim().length > 0) updateForm();
var dropMenus;
var requestsPageTitle = 'Wikipedia:Cereri_pentru_protejarea_paginilor';
submitButton.setDisabled(true);
submitButton.setLabel('Completați cererea');
function updateWidgets(currentPage, protection) {
var widgetOptions = document.querySelectorAll('.oo-ui-menuOptionWidget');
widgetOptions.forEach((element) => element.style.display = 'block');
var options = document.querySelectorAll('.oo-ui-dropdownWidget-handle .oo-ui-labelElement-label')[0]?.innerHTML || '';
var i;
if (!protection) {
if (currentPage.missing == "") {
typeInput.setLabel('Protejare la creare');
for (i = 0; i <= 9; i++) widgetOptions[i].style.display = 'none';
}
else for (i = 1; i <= 3; i++) widgetOptions[i].style.display = 'none';
}
else {
widgetOptions[0].style.display = 'none';
if (currentPage.protection[0].level == 'autoconfirmed') {
widgetOptions[2].style.display = 'none';
widgetOptions[4].style.display = 'none';
}
if (currentPage.protection[0].level == 'extendedconfirmed') {
widgetOptions[5].style.display = 'none';
if (options == 'Mărire nivel de protejare')
widgetOptions[4].style.display = 'none';
if (options == 'Relaxare nivel de protejare')
for (i = 6; i <= 9; i++) widgetOptions[i].style.display = 'none';
}
if (currentPage.protection[0].level == 'templateeditor') {
widgetOptions[6].style.display = 'none';
if (options == 'Mărire nivel de protejare') {
widgetOptions[4].style.display = 'none';
widgetOptions[5].style.display = 'none';
}
if (options == 'Relaxare nivel de protejare')
for (i = 7; i <= 9; i++) widgetOptions[i].style.display = 'none';
}
if (currentPage.protection[0].level == 'sysop') {
widgetOptions[1].style.display = 'none';
widgetOptions[7].style.display = 'none';
}
if (currentPage.missing == "") {
for (i = 0; i <= 9; i++) widgetOptions[i].style.display = 'none';
typeInput.setLabel('Deprotejare');
}
}
}
function currentProtection() {
$(currentProtectionLabel.$element).hide();
if (titleInput.getValue().trim().length > 0) $(currentProtectionLabel.$element).show();
function adjustExpiryDate(expiry) {
if (expiry !== "infinity") {
let expiryDate = new Date(expiry);
expiryDate.setHours(expiryDate.getHours() - 2);
return expiryDate;
}
return expiry;
}
var url = "https://ro.wikipedia.org/w/api.php";
var params = {
action: "query",
format: "json",
titles: sanitizeInput(titleInput.getValue()),
prop: "info",
inprop: "protection"
};
const queryUrl = `${url}?${Object.entries(params).map(([key, val]) => `${key}=${encodeURIComponent(val)}`).join('&')}`;
return fetch(queryUrl)
.then(response => response.json())
.then(data => {
var pages = data.query.pages;
var page = Object.values(pages)[0];
var protection = true;
if (!page || !page.protection || page.protection.length === 0) protection = false;
const protectionByType = {};
page.protection.forEach(rule => {
const { type, level, expiry } = rule;
if (!protectionByType[type] || new Date(expiry) > new Date(protectionByType[type].expiry)) {
protectionByType[type] = { level, expiry: adjustExpiryDate(expiry) };
}
});
var text = "";
if (page.missing == "") text = "Pagina selectată nu există pe Wikipedia în română și ";
else text = "Pagina selectată ";
if (protection) text += "are în prezent următoarele setări pentru protejare:<br>";
else text += "nu are în prezent niciun nivel de protejare.";
for (const [type, { level, expiry }] of Object.entries(protectionByType)) {
const expiryText = expiry === "infinity" ? "permanent" : `expiră pe ${new Date(expiry).toLocaleString()}`;
text += `- ${config[type]}: ${config[level]} (${expiryText})<br>`;
}
currentProtectionLabel.$element.html(text);
updateWidgets(page, protection);
})
.catch(error => {
console.error("Eroare la preluarea nivelului curent al protejării:", error);
});
}
function makeRequestText() {
var reason = reasonInput.getValue() + (
(reasonInput.getValue().indexOf('~~' + '~~') >= 0)
? ''
: (' ~~' + '~~'));
var type = $( ".oo-ui-dropdownWidget-handle .oo-ui-labelElement-label" ).html();
dropMenus = document.querySelectorAll('.oo-ui-dropdownWidget-handle .oo-ui-labelElement-label');
var level = dropMenus[1].innerHTML;
if ( dropMenus[0].innerHTML == 'Deprotejare' || dropMenus[0].innerHTML == 'Tipul cererii: Selectați o opțiune'
|| dropMenus[1].innerHTML == 'Nivelul de protejare: Nu doresc un nivel specific (implicit)' || dropMenus[1].innerHTML == 'Nu doresc un nivel specific (implicit)')
level = '';
return config.template.replace(/\$title/g, titleInput.getValue()).replace(/\$reason/g, reason).replace(/\$type/g, type).replace(/\$level/g, level);
}
function updateForm() {
currentProtection();
dropMenus = document.querySelectorAll('.oo-ui-dropdownWidget-handle .oo-ui-labelElement-label');
if ( dropMenus[0].innerHTML == 'Deprotejare' || dropMenus[0].innerHTML == 'Tipul cererii: Selectați o opțiune' || dropMenus[0].innerHTML == 'Protejare la creare') {
levelInput.setLabel('Nu doresc un nivel specific (implicit)');
$(levelInput.$element).hide();
}
else $(levelInput.$element).show();
var hasTitle = titleInput.getValue().trim().length > 0;
var hasReason = reasonInput.getValue().trim().length > 0;
var hasType = dropMenus[0]?.innerHTML !== 'Tipul cererii: Selectați o opțiune';
var hasLevel = dropMenus[1]?.innerHTML !== 'Nivelul de protejare: Nu doresc un nivel specific (implicit)';
var allowedNamespace = !(titleInput.getValue().includes('Special:'));
var formEnabled = hasTitle && hasReason && hasType && hasLevel && allowedNamespace ;
submitButton.setDisabled(!formEnabled);
if (!allowedNamespace) submitButton.setLabel('Pagina selectată nu poate fi protejată');
else if (!hasTitle && !hasReason) submitButton.setLabel('Selectați pagina și introduceți motivul');
else if (!hasTitle) submitButton.setLabel('Selectați pagina');
else if (!hasReason) submitButton.setLabel('Introduceți motivul');
else if (!hasType) submitButton.setLabel('Introduceți tipul');
else submitButton.setLabel('Trimite cererea');
if (formEnabled) {
previewApi.abort();
previewApi.parse(makeRequestText(), {
pst: true,
title: requestsPageTitle
}).then(function(text) {
text = text.replace(/<script/g, '<script');
reasonPreview.$element.html(text);
});
}
}
function rebuildTypeInputMenu() {
typeInput.getMenu().clearItems();
typeInput.getMenu().addItems([
new OO.ui.MenuOptionWidget({
data: 'Cerere de protejare pentru ',
label: 'Protejare'
}),
new OO.ui.MenuOptionWidget({
data: 'Solicit mărirea nivelului protejării pentru ',
label: 'Mărire nivel de protejare'
}),
new OO.ui.MenuOptionWidget({
data: 'Solicit relaxarea nivelului protejării pentru ',
label: 'Relaxare nivel de protejare',
}),
new OO.ui.MenuOptionWidget({
data: 'Cerere de deprotejare pentru ',
label: 'Deprotejare',
})
]);
typeInput.getMenu().selectItem(null);
typeInput.setLabel('Tipul cererii: Selectați o opțiune');
}
function updateTitleFirst() {
rebuildTypeInputMenu();
levelInput.getMenu().selectItem(null);
levelInput.setLabel('Nivelul de protejare: Nu doresc un nivel specific (implicit)');
updateForm();
}
var statusLayout, statusArea;
function setStatus(type, message) {
if (!statusLayout || !statusLayout.isElementAttached()) {
fieldset.addItems([
statusLayout = new OO.ui.FieldLayout(statusArea = new OO.ui.MessageWidget())
]);
}
statusArea.setType(type);
statusArea.setLabel(message);
}
titleInput.on('change', updateTitleFirst);
reasonInput.on('change', updateForm);
typeInput.getMenu().on('select', updateForm);
levelInput.getMenu().on('select', updateForm);
submitButton.on('click', function() {
updateForm();
fieldset.removeItems([statusLayout]);
if (submitButton.isDisabled()) {
return;
}
submitButton.setDisabled(true);
submitButton.setLabel('Se trimite...');
api.edit(requestsPageTitle, function() {
return {
appendtext: '\n\n' + makeRequestText(),
summary: config.summary.replace(/\$title/g, titleInput.getValue())
};
}).then(function() {
window.location.href = mw.util.getUrl(requestsPageTitle);
}).catch(function(code) {
setStatus('error', 'A eșuat crearea cererii. Cod de eroare: ' + code + '. Vă rugăm să încercați din nou sau să solicitați ajutor la WP:AA.');
submitButton.setDisabled(false);
submitButton.setLabel('Trimite cererea');
});
});
});
var toolsItem = document.createElement('li');
toolsItem.id = 't-requestprotection';
toolsItem.classList.add("mw-list-item");
var a = document.createElement('a');
var linkText = document.createTextNode("Cere protejarea paginii");
a.appendChild(linkText);
a.title = "Cere protejarea paginii";
a.href = "https://ro.wikipedia.org/wiki/Wikipedia:Cereri_pentru_protejarea_paginilor/Form?page=" + mw.config.get("wgPageName");
//console.log(mw.config.get("wgRestrictionEdit"));
toolsItem.appendChild(a);
if (!(mw.config.get("wgPageName").includes('Special:'))) $( "#p-tb .vector-menu-content-list" ).append(toolsItem);