Медијавики:Gadget-metadata.js — разлика између измена
Изглед
Promena koda |
Promena koda |
||
| (10 међуизмена истог корисника није приказано) | |||
| Ред 1: | Ред 1: | ||
/** _____________________________________________________________________________ | /** _____________________________________________________________________________ | ||
* | | | * | | | ||
* | === | * | === 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 () { | window.assessment = (function () { | ||
var assessmentObj = { | var assessmentObj = { props: {}, methods: {} }, | ||
ap = assessmentObj.props, | ap = assessmentObj.props, | ||
am = assessmentObj.methods; | am = assessmentObj.methods; | ||
/** | /** | ||
* | * Glavna inicijalizacija gadžeta. | ||
*/ | */ | ||
assessmentObj.init = function () { | assessmentObj.init = function () { | ||
if (!$("#siteSub").length || // | // 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; | ) { | ||
return; | |||
} | } | ||
ap.foundAssessment = am.checkArticle(); // | |||
if (!ap.foundAssessment.exists) { | // 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({ | $.ajax({ | ||
url: mw.util.getUrl( | url: mw.util.getUrl( | ||
mw.Title.newFromText(mw.config.get("wgPageName")).getTalkPage().getPrefixedText(), | |||
{ action: "raw", section: 0 } | |||
), | ), | ||
async: true, | async: true, | ||
dataType: "text", | dataType: "text", | ||
| Ред 63: | Ред 64: | ||
/** | /** | ||
* | * Brze provere na samom članku. | ||
*/ | */ | ||
am.checkArticle = function () { | am.checkArticle = function () { | ||
var checkResult = { | 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) { | $.each(checksList, function (i, e) { | ||
if (e[0]) { | if (e[0]) { | ||
| Ред 86: | Ред 82: | ||
} | } | ||
}); | }); | ||
return checkResult; | 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) { | am.getRating = function (text) { | ||
var rating = "none", | var rating = "none", | ||
standardChecks = [ | 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*fa\b/i, "fa"], | ||
[/\|\s*(class|currentstatus)\s*=\s*fl\b/i, "fl"], | [/\|\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*a\b/i, "a"], | ||
[/\|\s*class\s*=\s*bplus\b/i, "bplus"], | |||
[/\|\s*class\s*=\s*b\b/i, "b"], | [/\|\s*class\s*=\s*b\b/i, "b"], | ||
[/\|\s*class\s*=\s*c\b/i, "c"], | [/\|\s*class\s*=\s*c\b/i, "c"], | ||
[/\|\s*class\s*=\s*start/i, "start"], | [/\|\s*class\s*=\s*start\b/i, "start"], | ||
[/\|\s*class\s*=\s*stub/i, "stub"], | [/\|\s*class\s*=\s*stub\b/i, "stub"], | ||
[/\|\s*class\s*=\s* | [/\|\s*class\s*=\s*list\b/i, "list"], | ||
[/\|\s*class\s*=\s* | [/\|\s*class\s*=\s*(dab|disambig)\b/i, "dab"], | ||
[/\|\s*class\s*=\s* | [/\|\s*class\s*=\s*setindex\b/i, "setindex"], | ||
[/\|\s*class\s*=\s* | [/\|\s*class\s*=\s*redir\b/i, "redir"], | ||
[/\|\s*class\s*=\s* | |||
[/\|\s*class\s*=\s* | // Liste (rezerva) | ||
[/\|\s*class\s*=\s*cur(rent)?/i, "cur"], | [/\|\s*class\s*=\s*al\b/i, "al"], | ||
[/\|\s*class\s*=\s*future/i, "future"] | [/\|\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) { | $.each(standardChecks, function (i, e) { | ||
if (text.match(e[0])) { | if (text.match(e[0])) { | ||
| Ред 124: | Ред 131: | ||
} | } | ||
}); | }); | ||
// | |||
// A + GA (rezerva) | |||
if (rating === "a" && text.match(/\|\s*class\s*=\s*ga\b|\|\s*currentstatus\s*=\s*(ffa\/)?ga\b/i)) { | if (rating === "a" && text.match(/\|\s*class\s*=\s*ga\b|\|\s*currentstatus\s*=\s*(ffa\/)?ga\b/i)) { | ||
rating = "a/ | rating = "a/ga"; | ||
} | } | ||
return rating; | return rating; | ||
}; | }; | ||
/** | /** | ||
* | * Formira objekat procene. | ||
*/ | */ | ||
am.getAssessment = function (text) { | am.getAssessment = function (text) { | ||
return { | |||
rating: am.getRating(text), | rating: am.getRating(text), | ||
pageLink: [null, null], | pageLink: [null, null], | ||
| Ред 148: | Ред 150: | ||
activeReview: null, | activeReview: null, | ||
exists: true | exists: true | ||
} | }; | ||
}; | }; | ||
/** | /** | ||
* | * Pretvara ocenu u: | ||
* - CSS klasu (za boju) | |||
* - HTML slogan (ikonica + plavi link tekst) | |||
* | |||
* | |||
*/ | */ | ||
am.renderAssessment = function (assess) { | am.renderAssessment = function (assess) { | ||
var projectNs = mw.config.get( | var projectNs = mw.config.get("wgFormattedNamespaces")[4], | ||
assessLink = mw.util.getUrl(projectNs + ":Procena sadržaja"), | |||
info = [], | |||
info = | |||
newClass, | newClass, | ||
slogan | 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]; | |||
var | |||
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 () { | am.update = function () { | ||
var info = ap.updata.info, | var info = ap.updata.info, | ||
infoSpan = $("<span class=\"assess-info-all\"><\/span>"), | infoSpan = $("<span class=\"assess-info-all\"><\/span>"), | ||
siteSub = $("<div><span class=\"assess-article-rating\"><\/span> | siteSub = $("<div>Procena kvaliteta: <span class=\"assess-article-rating\"><\/span> — iz Vojne enciklopedije<\/div>"); | ||
siteSub. | |||
siteSub.find(".assess-article-rating").html(ap.updata.slogan); | |||
if (info && info.length > 0) { | if (info && info.length > 0) { | ||
infoSpan.html("."); | infoSpan.html("."); | ||
| Ред 674: | Ред 237: | ||
siteSub.append(infoSpan); | siteSub.append(infoSpan); | ||
} | } | ||
$("h1:first").addClass(ap.updata.newClass || null); | $("h1:first").addClass(ap.updata.newClass || null); | ||
$("#siteSub").html(siteSub.html()); | $("#siteSub").html(siteSub.html()); | ||
}; | }; | ||
| Ред 690: | Ред 245: | ||
}()); | }()); | ||
$(assessment.init); | $(assessment.init); | ||
Тренутна верзија на датум 7. фебруар 2026. у 20:54
/** _____________________________________________________________________________
* | |
* | === 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);