미디어위키:Gadget-MetadataEditor.js: 두 판 사이의 차이
보이기
커스텀 버전으로 교체 |
잔글 링크 정정 |
||
80번째 줄: | 80번째 줄: | ||
Promise.all([ | Promise.all([ | ||
api.getCategories(title), | api.getCategories(title), | ||
mw.loader.getScript("https://cdn.jsdelivr.net/gh/ | mw.loader.getScript("https://cdn.jsdelivr.net/gh/Xen-alpha/json-editor@latest/dist/jsoneditor.js"), | ||
fetch("https://dev.libertygame.work/index.php/%EB%A6%AC%EB%B2%84%ED%8B%B0%EA%B2%8C%EC%9E%84:%EA%B2%8C%EC%9E%84_%EB%A9%94%ED%83%80%EB%8D%B0%EC%9D%B4%ED%84%B0/%EC%8A%A4%ED%82%A4%EB%A7%88.json?action=raw") | fetch("https://dev.libertygame.work/index.php/%EB%A6%AC%EB%B2%84%ED%8B%B0%EA%B2%8C%EC%9E%84:%EA%B2%8C%EC%9E%84_%EB%A9%94%ED%83%80%EB%8D%B0%EC%9D%B4%ED%84%B0/%EC%8A%A4%ED%82%A4%EB%A7%88.json?action=raw") | ||
]).then((values) =>{ | ]).then((values) =>{ |
2025년 1월 31일 (금) 20:39 기준 최신판
var metadata_schema;
var jsonEditorContainer;
var metadata_editorvalue;
let editor;
const saveToDocument = (ev) => {
const jsonValue = editor.getValue();
if (!jsonValue) {
mw.notify("메타데이터를 저장할 수 없습니다.", {type: "error"});
return;
}
else if (editor.validate().length) {
console.log(editor.getValue());
mw.notify("메타데이터가 적절한지 확인하는 데에 실패했습니다.", {type: "error"});
return;
}
const api = new mw.Api();
api.postWithEditToken( {
"action": "edit",
"title": mw.config.get( "wgPageName" ) + "/game.json",
"text": JSON.stringify(jsonValue),
"summary": "메타데이터 수정",
"contentmodel": "json"
} ).then((result) =>{
mw.notify("메타데이터를 저장했습니다!", {type: "success"});
}).catch((error, result) => {
mw.notify("메타데이터 저장 실패!" + error + " -> " + JSON.stringify(result), {type: "error"});
});
};
const addMetadataTab = (resultPromise) => {
resultPromise.then((result) => {
metadata_schema = result;
metadata_editorvalue = document.querySelector('#value');
// JSONEditor.defaults.languages.ko = TRANSLATION;
JSONEditor.defaults.language = "ko";
// 탭 추가
let metadataTab = mw.util.addPortletLink("p-associated-pages", "#", "메타데이터 편집", "metadata-edittab", "메타데이터를 편집합니다");
metadataTab.addEventListener('click', (ev) => {
var targetJSON = `https://dev.libertygame.work/index.php/${mw.config.get("wgPageName")}/game.json?action=raw`;
fetch(targetJSON).then(function(result){return result.json(); }).then(function (response) {
document.getElementById("jsoneditor-container").style.display = "block";
editor = new JSONEditor(jsonEditorContainer, {
mode: 'tree',
schema: metadata_schema,
theme: 'tailwind',
iconlib: 'openiconic',
keep_oneof_values: false,
disable_edit_json: true,
disable_collapse : true,
array_controls_top : true,
startval:response
});
}).catch((e) => {console.log('JSON 에디터 로딩 후 JSON 타겟 가져오기 실패')});
});
// 메타데이터 편집기 추가
let metadataEditor = document.createElement("div");
metadataEditor.id = "jsoneditor-container";
metadataEditor.style.display = "none";
metadataEditor.style['background-color'] = "#bbeebb";
metadataEditor.style.position= "fixed";
metadataEditor.style["z-index"] = 8;
metadataEditor.style.top = "80px";
document.getElementById("bodyContent").appendChild(metadataEditor);
jsonEditorContainer = metadataEditor;
let metadataCloseButton = document.createElement("button");
metadataCloseButton.onclick = (ev) => {ev.target.parentElement.style.display = "none";};
metadataCloseButton.innerText = "편집기 닫기";
metadataEditor.appendChild(metadataCloseButton);
let metadataSaveButton = document.createElement("button");
metadataSaveButton.onclick = saveToDocument;
metadataSaveButton.innerText = "저장하기";
metadataEditor.appendChild(metadataSaveButton);
});
};
const addJSONEditor = () => {
const title = mw.config.get("wgPageName");
const api = new mw.Api();
Promise.all([
api.getCategories(title),
mw.loader.getScript("https://cdn.jsdelivr.net/gh/Xen-alpha/json-editor@latest/dist/jsoneditor.js"),
fetch("https://dev.libertygame.work/index.php/%EB%A6%AC%EB%B2%84%ED%8B%B0%EA%B2%8C%EC%9E%84:%EA%B2%8C%EC%9E%84_%EB%A9%94%ED%83%80%EB%8D%B0%EC%9D%B4%ED%84%B0/%EC%8A%A4%ED%82%A4%EB%A7%88.json?action=raw")
]).then((values) =>{
if (!values[0]) return;
let esc = true;
for (const category of values[0]){
if (category.title === "리버티게임"){
esc = false;
}
}
if (esc) return;
addMetadataTab(values[2].json());
}).catch((e) => {console.log('메타데이터 편집기 로딩 실패')});
};
$(addJSONEditor);