편집 요약 없음 |
편집 요약 없음 |
||
17번째 줄: | 17번째 줄: | ||
mw.loader.getScript('/index.php?title=사용자:하늘/addArticleMenuItem.js&action=raw&ctype=text/javascript').then(function () { | mw.loader.getScript('/index.php?title=사용자:하늘/addArticleMenuItem.js&action=raw&ctype=text/javascript').then(function () { | ||
if (mw.config.get('wgCanonicalNamespace') == 'Category') { | if (mw.config.get('wgCanonicalNamespace') == 'Category') { | ||
console.log('a') | |||
window.extendedDropdownItemArray.AddItem('분류를 통째로 이동합니다. !클릭 주의!', '분류 이동하기 !!클릭 주의!!', | window.extendedDropdownItemArray.AddItem('분류를 통째로 이동합니다. !클릭 주의!', '분류 이동하기 !!클릭 주의!!', | ||
function () { | function () { |
2022년 9월 3일 (토) 23:16 판
/**
* 분류 자동 이동 도구
* 분류 문서에서 버튼이 활성화됩니다.
*
* 리버티 스킨에서만 작동됩니다.
*
* 몇몇 의존성 스크립트가 있으니 토론으로 물어보세요.
*
* 저작자: 하늘
* 100개 정도 되는 문서가 있다면 다른 도구를 사용하세요.
* 125개까지만 이전이 가능합니다.
*/
var currentCategoryTitle = mw.config.get('wgTitle');
/** '분류:'를 포함한 분류의 이름(분류 문서 이름) */
var currentCategoryPageName = mw.config.get('wgPageName');
mw.loader.getScript('/index.php?title=사용자:하늘/addArticleMenuItem.js&action=raw&ctype=text/javascript').then(function () {
if (mw.config.get('wgCanonicalNamespace') == 'Category') {
console.log('a')
window.extendedDropdownItemArray.AddItem('분류를 통째로 이동합니다. !클릭 주의!', '분류 이동하기 !!클릭 주의!!',
function () {
/** 분류 이름 */
function MoveCategoryDialog(config) {
MoveCategoryDialog.super.call(this, config);
}
OO.inheritClass(MoveCategoryDialog, OO.ui.ProcessDialog);
MoveCategoryDialog.static.name = '분류 이동';
MoveCategoryDialog.static.title = '분류 이동';
MoveCategoryDialog.static.actions = [
{ action: 'moveCategoryEvent', label: '이동', flags: 'primary' },
{ label: '취소', flags: 'safe' }
];
/**
* 새 분류 이름을 입력 받을 곳
* @type {object}
*/
var textInput = new OO.ui.TextInputWidget({ placeholder: '새 분류 이름 입력' });
textInput.on('enter', moveCategoryEvent);
function moveCategoryEvent() {
moveCategory(textInput.getValue());
}
MoveCategoryDialog.prototype.initialize = function () {
MoveCategoryDialog.super.prototype.initialize.apply(this, arguments);
this.content = new OO.ui.PanelLayout({ padded: true, expanded: false });
this.content.$element.append('<p>현재 분류의 이름: ' + currentCategoryTitle + '</p>');
this.content.$element.append('<p>이 분류가 달린 각 문서의 분류를 다른 이름으로 변경합니다. 분류 문서는 수동으로 옮겨주세요.</p>');
this.content.$element.append(textInput.$element);
this.$body.append(this.content.$element);
};
MoveCategoryDialog.prototype.getActionProcess = function (action) {
var dialog = this;
if (action) {
return new OO.ui.Process(function () {
dialog.close({ action: action });
});
}
return MoveCategoryDialog.super.prototype.getActionProcess.call(this, action);
};
var windowManager = new OO.ui.WindowManager();
$(document.body).append(windowManager.$element);
var dialog = new MoveCategoryDialog();
windowManager.addWindows([dialog]);
windowManager.openWindow(dialog);
});
}
});
/**
* 분류가 달린 문서의 분류를 변경하는 함수
* @param {string} toCategoryName 분류 이름
*/
function moveCategory(toCategoryName) {
new mw.Api().get({
action: 'query',
list: 'categorymembers',
cmtitle: currentCategoryPageName,
cmlimit: 125,
format: 'json',
}).then(function (json) {
json.query.categorymembers.forEach(function (data) {
var lowerCase = currentCategoryTitle.charAt(0).toLowerCase() + currentCategoryTitle.slice(1);
var pattern =
new RegExp("\[\[[ ]*분류[ ]*:[ ]*" + currentCategoryTitle + "(.*)[ ]*\]\]|\[\[[ ]*분류[ ]*:[ ]*" + lowerCase + "(.*)[ ]*\]\]", "g");
new mw.Api().edit(
data.title,
function (revision) {
return {
text: revision.content.replaceAll(pattern, "\[\[분류:" + toCategoryName + "$1]]"),
summary: "분류:" + currentCategoryTitle + " -> 분류:" + toCategoryName
};
}).then(function (data) {
console.log(data);
}).fail(function (data) {
alert(data);
});
});
});
}