미디어위키:Gadget-protectionLog.js/core.js

//
// 출처: https://ja.wikipedia.org/w/index.php?title=MediaWiki:Gadget-protectionLog.js/core.js
//
// 틀토론:보호#일본어 위키백과처럼 보호 상태 틀을 관련 소도구로 대체하는 것에 대하여에 의거하여 생성함
// 한국어 위키백과에 맞게 개편
//
// 언어 전환
$userLanguage = mw.config.get("wgUserLanguage");
$contentLanguage = mw.config.get("wgContentLanguage");
// 아이콘 표시 상태 기록
$currentIconStatus = "show";
$currentPageName = encodeURIComponent(mw.config.get("wgPageName"));
// 쿠키를 이용한 의사 리퍼러 확인 (관리자용)
// 문서 상태를 기록하는 변수
$location = document.location.toString();
$formerAction = document.cookie.replace(
/(?:(?:^|.*;\s*)curAction\s*\=\s*(^;*).*$)|^.*$/,
"$1"
);
$formarPageName = document.cookie.replace(
/(?:(?:^|.*;\s*)curPage\s*\=\s*(^;*).*$)|^.*$/,
"$1"
);
// 보호 화면에서 전환된 직후에만 아이콘 미표시
// 상태를 쿠키에 기록, 불필요 시 삭제
if (
$location.indexOf("action=protect") > -1 
$location.indexOf("action=unprotect") > -1
) {
document.cookie = "curAction=protect; Path=/; SameSite=none; Secure";
document.cookie =
"curPage=" + $currentPageName + "; Path=/; SameSite=none; Secure";
} else if (
$formerAction === "protect" &&
$currentPageName === $formarPageName
) {
$currentIconStatus = "hide";
document.cookie = "curAction=; Path=/; max-age=0; SameSite=none; Secure";
document.cookie = "curPage=; Path=/; max-age=0; SameSite=none; Secure";
} else {
$currentIconStatus = "show";
document.cookie = "curAction=; Path=/; max-age=0; SameSite=none; Secure";
document.cookie = "curPage=; Path=/; max-age=0; SameSite=none; Secure";
}
// 보호 기록 이름
$protectionLogLabelDefault = {
de: "Seitenschutz-Logbuch",
fr: "Journal des protections",
en: "Protection Log",
es: "Protecciones de páginas",
it: "Registri",
ja: "保護記録",
ko: "문서 보호 기록",
pt: "Registo de proteções",
pl: "Zabezpieczone",
sv: "sidskydd",
ru: "Журнал защиты",
zh: "保护日志",
"zh-cn": "保护日志",
"zh-hans": "保护日志",
"zh-hant": "保護日誌",
"zh-hk": "保護日誌",
"zh-sg": "保护日志",
"zh-tw": "保護日誌",
yue: "保護日誌",
};
// 탭에 표시할 툴팁, 기본 메시지를 부분적으로 재사용
$protectionLogTooltipDefault = {
de: "Seitenschutz-Logbuch", // betawiki:MediaWiki:Protectlogtext/de
fr: "Modifications des protections de pages", // betawiki:MediaWiki:Protectlogtext/fr
en: "Changes to page protections", // betawiki:MediaWiki:Protectlogtext/en
es: "Cambios en la protección de páginas", // betawiki:MediaWiki:Protectlogtext/es
it: "Modifiche alle protezioni delle pagine", // betawiki:MediaWiki:Protectlogtext/it
ja: "ページに対する保護変更の記録", // betawiki:MediaWiki:Protectlogtext/ja
ko: "보호에 관한 바뀜에 대한 기록입니다", // betawiki:MediaWiki:Protectlogtext/ko
pt: "Proteção e desproteção de páginas", // betawiki:MediaWiki:Protectlogtext/pt
pl: "Zabezpieczeniu pojedynczych stron", // betawiki:MediaWiki:Protectlogtext/pl
ru: "Изменений защиты страницы", // betawiki:MediaWiki:Protectlogtext/ru
sv: "Ändringar av sidskydd", // betawiki:MediaWiki:Protectlogtext/sv
zh: "保护更改的列表", // betawiki:MediaWiki:Protectlogtext/zh
"zh-cn": "保护更改的列表", // betawiki:MediaWiki:Protectlogtext/zh-cn
"zh-hans": "保护更改的列表", // betawiki:MediaWiki:Protectlogtext/zh-hans
"zh-hant": "保護的清單", // betawiki:MediaWiki:Protectlogtext/zh-hant
"zh-hk": "保護的清單", // betawiki:MediaWiki:Protectlogtext/zh-hk
"zh-sg": "保护更改的列表", // betawiki:MediaWiki:Protectlogtext/zh-sg
"zh-tw": "保護的清單", // betawiki:MediaWiki:Protectlogtext/zh-tw
yue: "保護同埋解除保護頁面改動嘅一覽表", // betawiki:MediaWiki:Protectlogtext/zh-yue
};
// 모든 공개 기록의 특수 문서 이름
$allLogLabelDefault = {
de: "Logbuch",
fr: "Journal",
en: "Logs",
es: "Registro",
it: "Protezioni",
ja: "ログ",
ko: "기록",
pt: "Registo",
pl: "Rejestr",
ru: "Журналы",
sv: "Loggar",
zh: "日志",
"zh-cn": "日志",
"zh-hans": "日志",
"zh-hant": "日志",
"zh-hk": "日志",
"zh-sg": "日志",
"zh-tw": "日志",
yue: "日誌",
};
// 탭에 표시할 툴팁, 기본 메시지를 부분적으로 재사용
$allLogTooltipDefault = {
de: "Anzeige aller geführten Logbücher", // betawiki:MediaWiki:Alllogstext/de
fr: "Tous les journaux disponibles", // betawiki:MediaWiki:Alllogstext/fr
en: "All available logs", // betawiki:MediaWiki:Alllogstext/en
es: "Todos los registros", // betawiki:MediaWiki:Alllogstext/es
it: "Tutti i registri pubblici", // betawiki:MediaWiki:Alllogstext/it
ja: "取得できる記録をまとめて表示", // betawiki:MediaWiki:Alllogstext/ja
ko: "사용할 수 있는 모든 기록", // betawiki:MediaWiki:Alllogtextext/ko
pt: "Todos os registos disponíveis", // betawiki:MediaWiki:Alllogstext/pt
pl: "Wspólny rejestr wszystkich typów operacji", // betawiki:MediaWiki:Alllogstext/pl
ru: "Общий список журналов сайта", // betawiki:MediaWiki:Alllogstext/ru
sv: "Alla tillgängliga loggar", // betawiki:MediaWiki:Alllogstext/sv
zh: "公开日志的联合展示", // betawiki:MediaWiki:Alllogstext/zh
"zh-cn": "公开日志的联合展示", // betawiki:MediaWiki:Alllogstext/zh-cn
"zh-hans": "公开日志的联合展示", // betawiki:MediaWiki:Alllogstext/zh-hans
"zh-hant": "所有類型的日誌", // betawiki:MediaWiki:Alllogstext/zh-hant
"zh-hk": "所有類型的日誌", // betawiki:MediaWiki:Alllogstext/zh-hk
"zh-sg": "公开日志的联合展示", // betawiki:MediaWiki:Alllogstext/zh-sg
"zh-tw": "所有類型的日誌", // betawiki:MediaWiki:Alllogstext/zh-tw
yue: "全部日誌嘅綜合顯示", // betawiki:MediaWiki:Alllogstext/zh-yue
};
// 기본값 설정
if (
typeof $protectionLogLabel === "undefined" 
$protectionLogLabel$userLanguage === undefined
) {
$protectionLogLabel = $protectionLogLabelDefault;
}
if (
typeof $protectionLogTooltip === "undefined" 
$protectionLogTooltip$userLanguage === undefined
) {
$protectionLogTooltip = $protectionLogTooltipDefault;
}
if (
typeof $allLogLabel === "undefined" 
$allLogLabel$userLanguage === undefined
) {
$allLogLabel = $allLogLabelDefault;
}
if (
typeof $allLogTooltip === "undefined" 
$allLogTooltip$userLanguage === undefined
) {
$allLogTooltip = $allLogTooltipDefault;
}
if ($protectionLogLabel$userLanguage === undefined) {
$userLanguage = "en";
}
if ($allLogLabel$contentLanguage === undefined) {
$contentLanguage = "en";
}
// 특수 문서 이름 정의
$specialPage = encodeURI(
mw.config.get("wgFormattedNamespaces")-1 +
":" +
$allLogLabel$contentLanguage
);
$(document).ready(function() {
var isRestricted = false;
if (typeof $tabJs !== "undefined") {
if (typeof $protectionLogTab === "undefined") {
$noTab = "true";
}
}
// 편집 보호가 설정 가능한 문서인지 확인
if (mw.config.get("wgRestrictionEdit") !== null) {
	isRestricted = true;
// 보호 기록 탭 추가
if (typeof $noTab === "undefined") {
$protectLogs();
}
// 보호 틀 보완
$addEditStatus();
}
// 생성 보호가 설정 가능한 문서인지 확인
else if (mw.config.get("wgRestrictionCreate") !== null) {
	isRestricted = true;
// 이 경우 기록 탭은 추가하지 않음
// 보호 틀 보완
$addCreateStatus();
}
if (!isRestricted) {
	return;
}
mw.loader.using("mediawiki.ForeignApi").done(function() {
const params = {
action: 'query',
prop: 'info',
inprop: "protection",
titles: mw.config.get("wgRelevantPageName")
}, api = new mw.ForeignApi('/w/api.php');

api.get(params).done(function(data) {
var protection = data.query.pagesmw.config.get("wgArticleId").protection;
var moveData = {
type: null
};
var editData = {
type: null
};
var i;
for (i = 0; i ").attr({
src: "https://upload.wikimedia.org/wikipedia/commons/thumb/5/50/Ionicons_infinite-outline.svg/15px-Ionicons_infinite-outline.svg.png",
class: "skin-invert"
});
if (imgs.length === 1) {
var isInifity = false;
if (moveData.type !== null) {
$(imgs0).attr("title", $(imgs0).attr("title") + "\n" + moveData.type + " : " + moveData.level + " : " + moveData.expiry);
if (moveData.expiry === "무기한") {
isInfinity = true;
}
}
if (editData.type !== null) {
$(imgs0).attr("title", $(imgs0).attr("title") + "\n" + editData.type + " : " + editData.level + " : " + editData.expiry);
if (editData.expiry === "무기한") {
isInfinity = true;
}
}
if (isInfinity) {
$(imgs0).after(infinity.clone());
}
} else {
for (i = 0; i ")
.attr({
id: $id,
class: "mw-indicator script-pp-indicator"
})
.append(
$("")
.attr({
href: $link
})
.append(
$("").attr({
src: $image,
srcset: $altimage,
title: $tooltip,
id: "mw-indicator-protect-img",
decoding: "async",
width: "20px",
height: "20px",
referrerpolicy: "strict-origin-when-cross-origin",
})
)
)
);
}
}