문서 편집 권한이 없습니다. 다음 이유를 확인해주세요: 여기에는 다른 사용자의 개인 설정이 포함되어 있기 때문에 이 자바스크립트 문서를 편집할 수 없습니다. 문서의 원본을 보거나 복사할 수 있습니다. /** * 분류 자동 이동 도구 * 분류 문서에서 버튼이 활성화됩니다. * * 몇몇 의존성 스크립트가 있으니 토론으로 물어보세요. * * 저작자: 하늘 * 100개 정도 되는 문서가 있다면 다른 도구를 사용하세요. * 125개까지만 이전이 가능합니다. * 성능이 떨어지는 사이트에서는 사용하지 말아주세요. */ /** XX */ var currentCategoryTitle = mw.config.get('wgTitle'); /** 분류:XX */ 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') { window.extendedDropdownItemArray.AddItem('분류를 통째로 이동합니다. !클릭 주의!', '분류 이동하기 !!클릭 주의!!', function () { /** 분류 이름 */ // ProcessDialog의 자식 클래스 생성 function MoveCategoryDialog(config) { MoveCategoryDialog.super.call(this, config); } OO.inheritClass(MoveCategoryDialog, OO.ui.ProcessDialog); // 정적 설정 세팅 MoveCategoryDialog.static.name = '분류 이동'; MoveCategoryDialog.static.title = '분류 이동'; MoveCategoryDialog.static.actions = [ { action: 'move', label: '이동', flags: 'primary' }, { label: '취소', flags: 'safe' } ]; function moveCategoryEvent() { moveCategory(textInput.getValue()); } /** * 새 분류 이름을 입력 받을 곳 * @type {object} */ var textInput = new OO.ui.TextInputWidget({ placeholder: '새 분류 이름 입력' }); textInput.on('enter', moveCategoryEvent); /** * 초기화 */ 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>현재 분류의 이름: <b>' + currentCategoryTitle + '</b></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 === 'move' ) { // Create a new process to handle the action return new OO.ui.Process( function () { moveCategoryEvent(); dialog.close( { action: action } ); // 창닫기 -> 추후 완료 메시지 기능 추가 }, this ); } // Fallback to parent handler 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} newCategoryName 분류 이름 */ function moveCategory(newCategoryName) { var oldCategoryName = currentCategoryTitle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // escape for regex var lowerCase = oldCategoryName.charAt(0).toLowerCase() + oldCategoryName.slice(1); var pattern = new RegExp("\[\[[ ]*분류[ ]*:[ ]*" + oldCategoryName + "(.*)[ ]*\]\]|\[\[[ ]*분류[ ]*:[ ]*" + lowerCase + "(.*)[ ]*\]\]", "g"); /** * Mediawiki Api GET * members of category */ new mw.Api().get({ action: 'query', list: 'categorymembers', cmtitle: currentCategoryPageName, cmlimit: 125, format: 'json', }).then(function (json) { json.query.categorymembers.forEach(function (data) { new mw.Api().edit( data.title, function (revision) { var text = revision.content.replaceAll(pattern, "\[\[분류:" + newCategoryName + "$1]]"); return { text: text, summary: "분류:" + currentCategoryTitle + " -> 분류:" + newCategoryName }; }).then(function (data) { console.log(data); }).fail(function (data) { alert(data); }); }); }); } 사용자:하늘/moveCategory.js 문서로 돌아갑니다.