Медијавики:Gadget-metadata.js
Изглед
Напомена: Пошто објавите измене, можда ћете морати да обришете кеш прегледача како бисте их видели.
- Firefox / Safari: Држите Shift и кликните на Reload или притисните Ctrl-F5 или Ctrl-R (⌘-R на Mac-у).
- Google Chrome: Притисните Ctrl-Shift-R (⌘-Shift-R на Mac-у).
- Edge: Држите Ctrl и кликните на Refresh или притисните Ctrl-F5.
/** _____________________________________________________________________________
* | |
* | === UPOZORENJE: GLOBALNI GADŽET FAJL === |
* | Izmene na ovoj stranici utiču na veliki broj korisnika. |
* | Pre izmene, dogovorite se na strani za razgovor ili na [[WT:Gadget]]. |
* |_____________________________________________________________________________|
*
* GADŽET: Metadata (Procena kvaliteta članaka) — lokalizovan za Vojnu enciklopediju
*
* Šta radi:
* - Otvara (čita) početni deo strane za razgovor (Razgovor:Članak)
* - Traži šablon: {{Procene kvaliteta članaka|...}} ili {{Procene kvaliteta članaka|class=...}}
* - Na osnovu pronađene ocene upisuje prikaz ispod naslova članka (#siteSub)
* - Svi linkovi vode na lokalnu stranicu:
* Vojna enciklopedija:Procena sadržaja
*
* Važno:
* - Gadžet radi samo u glavnom imenskom prostoru (članci, ns=0).
* - Da bi prikazao ocenu, na razgovor-strani članka mora postojati šablon.
*/
window.assessment = (function () {
var assessmentObj = { props: {}, methods: {} },
ap = assessmentObj.props,
am = assessmentObj.methods;
/**
* Glavna inicijalizacija gadžeta.
*/
assessmentObj.init = function () {
// Uslovi kada NE treba da se pokrene
if (!$("#siteSub").length || // nema #siteSub (neki skinovi)
mw.config.get("wgNamespaceNumber") !== 0 || // nije članak
(mw.config.get("wgAction") !== "view" && mw.config.get("wgAction") !== "purge") ||
mw.util.getParamValue("printable") || // printable verzija
mw.config.get("wgIsMainPage") === true // glavna strana
) {
return;
}
// 1) Brze provere direktno na članku
ap.foundAssessment = am.checkArticle();
// 2) Ako nema ničega na članku, čitaj razgovor stranu (sekcija 0)
if (!ap.foundAssessment.exists) {
$.ajax({
url: mw.util.getUrl(
mw.Title.newFromText(mw.config.get("wgPageName")).getTalkPage().getPrefixedText(),
{ action: "raw", section: 0 }
),
async: true,
dataType: "text",
success: function (responseText) {
ap.text = responseText;
ap.foundAssessment = am.getAssessment(ap.text);
ap.updata = am.renderAssessment(ap.foundAssessment);
am.update();
}
});
} else {
ap.updata = am.renderAssessment(ap.foundAssessment);
am.update();
}
};
/**
* Brze provere na samom članku.
*/
am.checkArticle = function () {
var checkResult = { extra: [], exists: false },
checksList = [
[$("#disambig, #disambig_disambigbox, #disambigbox").length, "dab"], // višeznačnost
[$("#setindexbox").length, "setindex"], // setindex
[mw.config.get("wgIsRedirect") === true, "redir"], // preusmerenje
[$("#ca-talk").hasClass("new"), "none"] // nema razgovor strane
];
$.each(checksList, function (i, e) {
if (e[0]) {
checkResult.rating = e[1];
checkResult.exists = true;
return false;
}
});
return checkResult;
};
/**
* Iz wikitext-a razgovor strane izvlači ocenu.
*
* Prioritet:
* 1) Lokalni šablon: {{Procene kvaliteta članaka|stub}} (ili class=stub)
* 2) WP1.0 kompatibilnost (class=, currentstatus=...)
*/
am.getRating = function (text) {
var rating = "none",
standardChecks = [
// (1) LOKALNI ŠABLON — NAJBITNIJE
[/\{\{\s*Procene kvaliteta članaka\s*\|\s*(fa|fl|ga|a|b|bplus|c|start|stub|list|dab|setindex|redir|al|bl|cl|sl|cur|future)\s*[\|\}]/i, "$1"],
// (2) WP1.0 / kompatibilnost (rezerva)
[/\|\s*(class|currentstatus)\s*=\s*fa\b/i, "fa"],
[/\|\s*(class|currentstatus)\s*=\s*fl\b/i, "fl"],
[/\|\s*(class|currentstatus)\s*=\s*ga\b/i, "ga"],
[/\|\s*class\s*=\s*a\b/i, "a"],
[/\|\s*class\s*=\s*bplus\b/i, "bplus"],
[/\|\s*class\s*=\s*b\b/i, "b"],
[/\|\s*class\s*=\s*c\b/i, "c"],
[/\|\s*class\s*=\s*start\b/i, "start"],
[/\|\s*class\s*=\s*stub\b/i, "stub"],
[/\|\s*class\s*=\s*list\b/i, "list"],
[/\|\s*class\s*=\s*(dab|disambig)\b/i, "dab"],
[/\|\s*class\s*=\s*setindex\b/i, "setindex"],
[/\|\s*class\s*=\s*redir\b/i, "redir"],
// Liste (rezerva)
[/\|\s*class\s*=\s*al\b/i, "al"],
[/\|\s*class\s*=\s*bl\b/i, "bl"],
[/\|\s*class\s*=\s*cl\b/i, "cl"],
[/\|\s*class\s*=\s*sl\b/i, "sl"],
// Ostalo (rezerva)
[/\|\s*class\s*=\s*cur(rent)?\b/i, "cur"],
[/\|\s*class\s*=\s*future\b/i, "future"]
];
$.each(standardChecks, function (i, e) {
if (text.match(e[0])) {
rating = e[1];
return false;
}
});
// A + GA (rezerva)
if (rating === "a" && text.match(/\|\s*class\s*=\s*ga\b|\|\s*currentstatus\s*=\s*(ffa\/)?ga\b/i)) {
rating = "a/ga";
}
return rating;
};
/**
* Formira objekat procene.
*/
am.getAssessment = function (text) {
return {
rating: am.getRating(text),
pageLink: [null, null],
extra: [],
activeReview: null,
exists: true
};
};
/**
* Pretvara ocenu u:
* - CSS klasu (za boju)
* - HTML slogan (ikonica + plavi link tekst)
*/
am.renderAssessment = function (assess) {
var projectNs = mw.config.get("wgFormattedNamespaces")[4],
assessLink = mw.util.getUrl(projectNs + ":Procena sadržaja"),
info = [],
newClass,
slogan;
// Mapiranje: ocena -> (klasa, ikona, tekst)
var ratingMap = {
// Najviši nivoi
"fa": { className: "assess-fa-text", icon: "assess-icon-fa", label: "Izabrani članak" },
"fl": { className: "assess-fl-text", icon: "assess-icon-fl", label: "Izabrana lista" },
"ga": { className: "assess-ga-text", icon: "assess-icon-ga", label: "Dobar članak" },
// Ocene kvaliteta
"a/ga": { className: "assess-a-text", icon: "assess-icon-a", label: "Članak A-razreda (takođe dobar članak)" },
"a": { className: "assess-a-text", icon: "assess-icon-a", label: "Članak A-razreda" },
"bplus":{ className: "assess-bplus-text", icon: "assess-icon-bplus", label: "Članak B+ razreda" },
"b": { className: "assess-b-text", icon: "assess-icon-b", label: "Članak B-razreda" },
"c": { className: "assess-c-text", icon: "assess-icon-c", label: "Članak C-razreda" },
"start":{ className: "assess-start-text", icon: "assess-icon-start", label: "Početni članak" },
"stub": { className: "assess-stub-text", icon: "assess-icon-stub", label: "Članak-klica" },
// Tipovi strana
"list": { className: "assess-list-text", icon: "assess-icon-list", label: "Članak-spisak" },
"dab": { className: "assess-dab-text", icon: "assess-icon-dab", label: "Višeznačna odrednica" },
"setindex": { className: "assess-setindex-text", icon: "assess-icon-setindex", label: "Indeksna strana" },
"redir": { className: "assess-redir-text", icon: "assess-icon-redir", label: "Preusmerenje" },
// Liste (rezerva/kompatibilnost)
"al": { className: "assess-al-text", icon: "assess-icon-al", label: "Lista A-razreda" },
"bl": { className: "assess-bl-text", icon: "assess-icon-bl", label: "Lista B-razreda" },
"cl": { className: "assess-cl-text", icon: "assess-icon-cl", label: "Lista C-razreda" },
"sl": { className: "assess-sl-text", icon: "assess-icon-sl", label: "Lista-klica" },
// Ostalo (rezerva)
"cur": { className: "assess-cur-text", icon: "assess-icon-cur", label: "Aktuelno (current)" },
"future": { className: "assess-future-text", icon: "assess-icon-future", label: "Buduća tema (future)" }
};
var cfg = ratingMap[assess.rating];
if (cfg) {
newClass = cfg.className;
slogan =
"<span class=\"assess-icon-wrap " + cfg.className + "\">" +
"<span class=\"assess-icon " + cfg.icon + "\" aria-hidden=\"true\"></span>" +
"</span>" +
"<a class=\"assess-rating-link\" href=\"" + assessLink + "\">" + cfg.label + "</a>";
} else {
newClass = "assess-unassessed-text";
slogan =
"<span class=\"assess-icon-wrap assess-unassessed-text\">" +
"<span class=\"assess-icon assess-icon-unassessed\" aria-hidden=\"true\"></span>" +
"</span>" +
"Neprocenjen <a class=\"assess-rating-link\" href=\"" + assessLink + "\">članak</a>";
}
return { newClass: newClass, slogan: slogan, info: info };
};
/**
* Upisuje rezultat u zaglavlje članka.
*/
am.update = function () {
var info = ap.updata.info,
infoSpan = $("<span class=\"assess-info-all\"><\/span>"),
siteSub = $("<div>Procena kvaliteta: <span class=\"assess-article-rating\"><\/span> — iz Vojne enciklopedije<\/div>");
siteSub.find(".assess-article-rating").html(ap.updata.slogan);
if (info && info.length > 0) {
infoSpan.html(".");
$.each(info, function (i, e) {
infoSpan.append(" ").append(e);
});
siteSub.append(infoSpan);
}
$("h1:first").addClass(ap.updata.newClass || null);
$("#siteSub").html(siteSub.html());
};
return assessmentObj;
}());
$(assessment.init);