리버티게임:관리자 요청/2018년 11월: 두 판 사이의 차이
백괴게임>Bd3076 |
백괴게임>Bd3076 |
||
188번째 줄: | 188번째 줄: | ||
::아... 그런 문제가 있군요. 알겠습니다. -- {{:사용자:Bd3076/서명}} 2018년 11월 11일 (일) 18:40 (KST) | ::아... 그런 문제가 있군요. 알겠습니다. -- {{:사용자:Bd3076/서명}} 2018년 11월 11일 (일) 18:40 (KST) | ||
::json을 통해 실행 가능 플러그인을 검색하는 쪽으로 개발 방향을 돌려 보겠습니다. -- {{:사용자:Bd3076/서명}} 2018년 11월 11일 (일) 18:48 (KST) | ::json을 통해 실행 가능 플러그인을 검색하는 쪽으로 개발 방향을 돌려 보겠습니다. -- {{:사용자:Bd3076/서명}} 2018년 11월 11일 (일) 18:48 (KST) | ||
재요청합니다. 코드는 아래와 같습니다. | |||
{{글 숨김}} | |||
<pre> | |||
/** | |||
* pluginX Core | |||
* pluginX 시스템이 제대로 돌아가게 해 줍니다. | |||
* 작성자: [[사용자:Bd3076|Bd3076]] | |||
*/ | |||
function pluginXCore() { | |||
var _afterLoad = function(){}; | |||
var _ready_for_ready = function(){ | |||
setTimeout(_ready_pluginX, 1000); | |||
}; | |||
var _ready_pluginX = function(){ | |||
document.getElementById('firstHeading').innerHTML = "플러그인 문서를 생성하시려면 아래의 <strong>바꾸기</strong> 버튼을 누르세요."; | |||
$('#ooui-4').css('display', 'none'); | |||
$('#ooui-5').css('display', 'none'); | |||
$('#ooui-6').css('display', 'none'); | |||
}; | |||
if(mw.config.get('wgPageName').substr(0, 11) == "특수:콘텐츠모델바꾸기"){ | |||
var url = new URL(window.location); | |||
var mode = url.searchParams.get('mode'); | |||
if(mode == 'usingPluginX'){ | |||
_afterLoad = _ready_for_ready; | |||
} | |||
} | |||
$(_afterLoad()); | |||
var api = MediaWikiAPI(); | |||
var ipUser = false; | |||
if(mw.config.get("wgUserName") === null) ipUser = true; | |||
var script_list = []; | |||
var pluginExist = false; | |||
var neededPluginExist = false; | |||
var html_before; | |||
var jsonDoc = "사용자:" + mw.config.get("wgUserName") + "/pluginX.json"; | |||
var jsonData = JSON.parse(api.getDocument(jsonDoc)); | |||
/// 플러그인의 정보가 담긴 데이터를 만듭니다. | |||
var generateScriptData = function(_url, _name, _creator, _doc, _script, _revid){ | |||
return { | |||
url: _url, | |||
name: _name, | |||
creator: _creator, | |||
doc: _doc, | |||
script: _script, | |||
revid: _revid | |||
}; | |||
}; | |||
/// 플러그인 목록을 만들어서 script_list[]에 담습니다. | |||
var getPluginList = function(){ | |||
$(".c_pluginX").each(function() { | |||
pluginExist = true; | |||
var url = $(this).attr('data-url'); | |||
var name = $(this).attr('data-name'); | |||
var creator = $(this).attr('data-creator'); | |||
var doc = $(this).attr('data-doc'); | |||
var revid = $(this).attr('data-revid'); | |||
var script = api.getDocument(doc); | |||
script_list.push(generateScriptData(url, name, creator, doc, script, revid)); | |||
if(jsonData[doc] === undefined || jsonData[doc] !== revid){ | |||
neededPluginExist = true; | |||
} | |||
}); | |||
}; | |||
/// 플러그인을 실행합니다. | |||
var executePlugins = function(){ | |||
document.getElementById('mw-content-text').innerHTML = html_before; | |||
script_list.forEach(function(data){ | |||
var link = data.url; | |||
var revid = data.revid; | |||
var doc = data.doc; | |||
if(neededPluginExist){ | |||
jsonData[doc] = revid; | |||
} | |||
$.getScript(link); | |||
}); | |||
if(neededPluginExist && !ipUser){ | |||
api.changeDocument(jsonDoc, "pluginX - 새로운 플러그인", JSON.stringify(jsonData)); | |||
} | |||
}; | |||
/// 플러그인을 실행하지 않습니다. | |||
var doNotExecutePlugins = function(){ | |||
document.getElementById('mw-content-text').innerHTML = html_before; | |||
}; | |||
/// 알림 창을 만듭니다. | |||
var showWindow = function(){ | |||
html_before = document.getElementById('mw-content-text').innerHTML; | |||
$('#mw-content-text').html(api.readDocument("틀:PluginX/setup")); | |||
var script = ""; | |||
script_list.forEach(function(data){ | |||
var addingCode; | |||
addingCode = '<div class="px-code"><pre>'; | |||
addingCode = addingCode.concat(((data.script.replace('&', '&')).replace('<', '<')).replace('>', '>')); | |||
addingCode = addingCode.concat('</pre> </div> <div class="px-codeinfo"> <ul> <li> 플러그인 이름: '); | |||
addingCode = addingCode.concat(data.name); | |||
addingCode = addingCode.concat('</li> <li> 플러그인 제작자: '); | |||
addingCode = addingCode.concat(data.creator); | |||
addingCode = addingCode.concat('</li> </ul> </div>'); | |||
script += addingCode; | |||
}); | |||
document.getElementById('px-script').innerHTML = script; | |||
$('#px-button').on('click', executePlugins); | |||
$('#px-button2').on('click', doNotExecutePlugins); | |||
}; | |||
getPluginList(); | |||
if(pluginExist === false) return; | |||
showWindow(); | |||
if(neededPluginExist === false){ | |||
executePlugins(); | |||
return; | |||
} | |||
} | |||
$(pluginXCore()); | |||
/* pluginX Core 끝 */ | |||
</pre> | |||
위와 기능은 같습니다. | |||
* 이미 실행한 플러그인은 앞으로 확인 없이 계속 실행됨 | |||
이 부분을 ip 사용자에게 처리하는 게 힘들었는데, 이건 그냥 ip 사용자는 계속 확인하는 방식으로 처리했습니다. |
2018년 11월 12일 (월) 19:02 판
관리자 요청 |
---|
◀ 2018년 11월 ▶ |
새 글 쓰기 |
새로 고침 |
Common.js 수정 요청
DB 플러그인 파트를
/** DB기능 초기화 * [[틀:DB]]를 사용 가능하게 해 줍니다. * [[사용자:BANIP|BANIP]] */ function enableLocalStorage() { // 문서 미리보기 상태일 시 종료 if (location.pathname === "/w/index.php") return; //플러그인의 모든 키 순회 function forEach(object, callback) { for (var key in object) { var variable = object[key]; callback(variable, key); } } function setLocalStorage(parentKey, datas) { var stringKeys = JSON.stringify(Object.keys(datas)); localStorage.setItem(parentKey + "/__keys__", stringKeys); forEach(datas, function(v, i) { if (i === "action") return; localStorage.setItem(parentKey + "/" + i, v); }); } function getLocalStorage(parentKey) { var datas = {}; var stringKeys = localStorage.getItem(parentKey + "/__keys__"); if (stringKeys === null) return null; var keys = JSON.parse(stringKeys); keys.forEach(function(key) { datas[key] = localStorage.getItem(parentKey + "/" + key); }) return datas; } function clearLocalStorage(parentKey) { var datas = {}; var stringKeys = localStorage.getItem(parentKey + "/__keys__"); if (stringKeys === null) return null; var keys = JSON.parse(stringKeys); keys.forEach(function(key) { datas[key] = localStorage.removeItem(parentKey + "/" + key); }) } function getSearch() { return geturlSearch(); } function searchParamToString(searchParamsObj){ var params = "?" + Object.entries(searchParamsObj) .map(function(v){ return v.join("=") }) .join("&"); return encodeURI(params); } function setSearch(datas) { var searchParams = getSearch(); forEach(datas, function(v, i) { searchParams[i] = v; }); location.search = searchParamToString(searchParams); } function hasSearch() { return !(location.search === ""); } $(".controlLocalStorage").each(function() { var parentKey = $(this).data("key"); var behavior = $(this).data("behavior"); switch (behavior) { case "세이브": if (!hasSearch()) return; var datas = getSearch(); clearLocalStorage(parentKey); setLocalStorage(parentKey, datas); break; case "로드": if (hasSearch()) return; var datas = getLocalStorage(parentKey, datas); if (datas === null) return; setSearch(datas); break; case "초기화": clearLocalStorage(parentKey); break; } }) } $(enableLocalStorage);
처럼 바꿔주세요. 초기화 기능을 추가했습니다. -- Bd3076 (토론) (둘러보기)기여 횟수:
만든 게임: Bd3076의 게임 2018년 11월 1일 (목) 18:07 (KST)
- 완료 by manymaster (토론|기여) 2018년 11월 1일 (목) 18:16 (KST)
닉네임 변경 문의 (Kh0505 > 초코나무숲)
여기와 비슷합니다.
이 계정이 예전에 게임 DB용으로 대충 만든 계정이었기 때문에(물론 그 이후 아예 버리긴 했다만..) 닉네임을 대충 지었습니다. 때문에 제 닉네임을 현 닉넴에서 초코나무숲으로 변경해주시면 감사드리겠습니다. — Kh0505 토론 · 기여 2018년 11월 4일 (일) 08:34 (KST)
- 보류 한 사용자의 계정 통합 과정에서 미디어위키가 완전히 꼬여버리는 일이 올해 초에 발생했습니다. 이로 인해 사용자 계정명 바꾸기 및 통합이 거의 불가능해졌습니다. 죄송합니다만, 나중에 계정 이름 바꾸기를 요청해 주시면 감사하겠습니다. -- 이의섭(사토|기여|노 백괴게임, 노 잼) 2018년 11월 4일 (일) 09:07 (KST)
로고변경 스크립트를 수정했습니다
/** [[틀:로고 바꾸기]]용 함수 * 작성자: [[사용자:Manymaster|manymaster]] */ function logochange() { // 허용 확장자 및 url 패턴 var allwedURLPattern = ["i.uncyclopedia.kr/game/","i.uncyclopedia.kr/pedia/","upload.wikimedia.org/wikipedia/commons/"] var allowedExt = ["gif","png","jpg","jpeg","svg"] const logoElement = document.getElementsByClassName("changelogo123"); /* .changelogo 요소가 없으면 종료 */ if (logoElement.length === 0) { return; } var logoTest = logoElement[0].innerHTML.toLowerCase(); //이미지 url이 주어진 조건에 맞는지 검사 var isSafeURL = allwedURLPattern.some( function(middleURL){ var reg = new RegExp("^//" + middleURL) return ( logoTest.match(reg) != null) }) var isSafeExt = allowedExt.some( function(ext){ var reg = new RegExp("\." + ext + "$") return ( logoTest.match(reg) != null) }) // URL패턴과 확장자의 조건이 맞지 않으면 종료 if ( !(isSafeURL && isSafeExt) ) { return; } /* 로고 교체 */ var orglogoElement = document.querySelector("#p-logo a"); orglogoElement.style.backgroundImage = "url('" + logoElement[0].innerHTML + "')"; /* 사이즈 교체 */ var sizeElement = document.querySelector(".changelogosize"); orglogoElement.style.backgroundSize = sizeElement === null ? "160px 160px" : sizeElement.innerHTML + " " + sizeElement.innerHTML } logochange() /* [[틀:로고 바꾸기]]용 함수 끝 */
slice로 테스트한 부분을 정규표현식으로 변경함으로써 코드 전체의 가독성을 높이고
확장자와 url을 추가/수정하기 쉽게 고쳤습니다 --BANIP (토론|토론작성) 2018년 11월 7일 (수) 15:47 (KST)
- 완료 언제나 감사드립니다. by manymaster (토론|기여) 2018년 11월 7일 (수) 15:50 (KST)
- 앗.. 죄송합니다 깜빡하고 제가 테스트하던 코드 그대로 넣어서 작동이 안되는것 같습니다
- getElementsByClassName("changelogo123"); 이부분에서 123을 지워주시면 감사드리겠습니다 두번 손보게 해서 죄송합니다.. --2018년 11월 7일 (수) 16:09 (KST)
- 그 부분은 틀:로고 바꾸기의 클래스가 겹치기 쉽다는 것으로 해석되어 그냥 그 틀의 클래스를 바꾸는 것으로 해결했네요. by manymaster (토론|기여) 2018년 11월 7일 (수) 16:57 (KST)
커먼자스 편집 요청
제가 플러그인을 만들다가 실수를 해서 문서 내용을 볼 수 없게 되었습니다. 죄송하지만 아무나 제 커먼자스에서 최근 편집 하나 되돌려 주실 수 있나요? 221.159.32.3 2018년 11월 8일 (목) 07:53 (KST) (Bd3076)
이동+찾아바꾸기
사:올/마피아 게임
문자열을 마피아 게임
으로 바꿔주시고, 해당 문서의 하위 문서들도 이동해주세요.--올ㅋ 잡담 게임들 2018년 11월 10일 (토) 10:58 (KST)
- 완료 — 유한림 2018년 11월 10일 (토) 11:19 (KST)
Common.js 편집 요청
미디어위키:Common.js의 pluginX 부분을 사:Bd3076/common.js의 현재 내용으로 변경해 주세요.
- 플러그인 문서 생성 시 콘텐츠 모델을 자바스크립트로 설정
- 이미 실행한 플러그인은 앞으로 확인 없이 계속 실행됨
위와 같은 변경 사항이 있었습니다. -- Bd3076 (토론) (둘러보기)기여 횟수:
만든 게임: Bd3076의 게임 2018년 11월 11일 (일) 18:27 (KST)
- 보류 현 백괴게임 개인정보 정책에서는 쿠키는 오로지 회원 식별만을 목적으로 하고 있다고 나와있는데, 이와 충돌합니다. 민감한 문제인 만큼, 정책 개정이 우선되어야 할 것 같습니다. by manymaster (토론|기여) 2018년 11월 11일 (일) 18:36 (KST)
- 아... 그런 문제가 있군요. 알겠습니다. -- Bd3076 (토론) (둘러보기)기여 횟수:
만든 게임: Bd3076의 게임 2018년 11월 11일 (일) 18:40 (KST) - json을 통해 실행 가능 플러그인을 검색하는 쪽으로 개발 방향을 돌려 보겠습니다. -- Bd3076 (토론) (둘러보기)기여 횟수:
만든 게임: Bd3076의 게임 2018년 11월 11일 (일) 18:48 (KST)
- 아... 그런 문제가 있군요. 알겠습니다. -- Bd3076 (토론) (둘러보기)기여 횟수:
재요청합니다. 코드는 아래와 같습니다.
이 글을 보려면 오른쪽의 "펼치기"를 눌러 주세요.
- 플러그인 이름: ');
addingCode = addingCode.concat(data.name);
addingCode = addingCode.concat(' - 플러그인 제작자: '); addingCode = addingCode.concat(data.creator); addingCode = addingCode.concat('
script += addingCode; }); document.getElementById('px-script').innerHTML = script;
$('#px-button').on('click', executePlugins); $('#px-button2').on('click', doNotExecutePlugins);
}; getPluginList(); if(pluginExist === false) return; showWindow(); if(neededPluginExist === false){ executePlugins(); return; }
} $(pluginXCore());
/* pluginX Core 끝 */
위와 기능은 같습니다.
- 이미 실행한 플러그인은 앞으로 확인 없이 계속 실행됨
이 부분을 ip 사용자에게 처리하는 게 힘들었는데, 이건 그냥 ip 사용자는 계속 확인하는 방식으로 처리했습니다.