사용자:BANIP/플러그인/랭킹시스템: 두 판 사이의 차이
백괴게임>BANIP 잔글 (ver 1.0.3 랭킹 소트 기능 추가) |
백괴게임>Manymaster 잔글 (문자열 찾아 바꾸기 - "!!!!!!!!!!!!!!!! 플러그인 정보 입력 구간 끝 아래는 만지지 마시오!!!!!!!!!!!!!!!!! {{플러그인/preset/css}} </div>{{#switch: {{{1|화면}}} |dump = |화면 = <p<includeonly" 문자열을 "!!!!!!...) |
||
123번째 줄: | 123번째 줄: | ||
!!!!!!!!!!!!!!!! 플러그인 정보 입력 구간 끝 아래는 만지지 마시오!!!!!!!!!!!!!!!!! | !!!!!!!!!!!!!!!! 플러그인 정보 입력 구간 끝 아래는 만지지 마시오!!!!!!!!!!!!!!!!! | ||
</div>{{#switch: {{{1|화면}}} | </div>{{#switch: {{{1|화면}}} | ||
|dump = | |dump = | ||
|화면 = | |화면 = {{플러그인/preset/각주}} | ||
<p<includeonly></includeonly>re class="script" data-name="{{#var:name}}" | <p<includeonly></includeonly>re class="script" data-name="{{#var:name}}" | ||
data-create="{{#var:creat}}" | data-create="{{#var:creat}}" |
2018년 3월 5일 (월) 14:19 판
이 플러그인에 대한 설명문서는 사용자:BANIP/플러그인/랭킹시스템/설명문서에서 만들 수 있습니다.
// 이부부분에 코드 입력 // /** * @param {string} documentTitle 랭킹정보가 있는 문서의 제목. {function} sortCallback 랭킹을 정렬할때 기준으로 사용하는 함수 {any} prev 랭킹 정렬 기준으로 사용할 왼쪽의 값 {any} next 랭킹 정렬 기준으로 사용할 오른쪽의 값 {object} api MediaWikiapi의 인스턴스, 없어도 됨. @return {Object} {function} get 랭킹정보를 object형태로 획득 {function} update 랭킹정보 업데이트 {object} updateInfo 업데이트할 사용자 정보 {function} updateCriteria 사용자정보의 업데이트 기준 @param {any} rankingScore 랭킹에서 사용중인 스코어 {any} thisScore 사용자 스코어 @return{bool} true가 반환되면 업데이트 {object} alternateKeys 랭킹에서 보여지는 대체 키 */ return function(documentTitle, sortCallback, api) { function forEach(object, callback) { for (var key in object) { var variable = object[key]; callback(variable, key); } } function getRankingJSON(rankingDoc) { console.log(rankingDoc) if (!rankingDoc) return {}; var regexp = /\<includeonly\>(.*)\<\/includeonly\>/; var stringRanking = regexp.exec(rankingDoc)[1]; return JSON.parse(stringRanking); } function updateDoc(rankingJSON, api, alternateKeys) { //alternateKeys가 반영된 개개인의 랭킹정보 획득 function getOutputJSON(json) { var result = {}; forEach(json, function(value, key) { key = alternateKeys[key] || key; result[key] = value; }) return result; } //보여지는 형태의 랭킹정보 획득 function getOutputString(json) { var name = json.name; var result = "* '''" + name + "''' : "; forEach(json, function(value, key) { if (key === "name") return; key = alternateKeys[key] || key; result += key + ": " + value + ", "; }) result += "\n" return result } var stringRanking = JSON.stringify(rankingJSON); var result = "<includ" + "eonly>" + stringRanking + "</inclu" + "deonly>\n"; result += "<onlyin" + "clude>\n"; var rankingList = Object.keys(rankingJSON); rankingList = rankingList.sort(sortCallback); rankingList.forEach(function(key) { var json = rankingJSON[key]; var outputJSON = getOutputJSON(json); result += getOutputString(outputJSON) }); result += "</only" + "include>"; api.changeDocument("백괴슬라이드/랭킹", "백괴슬라이드 점수 갱신", result, true); return result; } function updateUserScore(rankingJSON, thisScore, updateCriteria) { updateCriteria = updateCriteria || function(rankingScore, thisScore) { return rankingScore.score < thisScore.score; } var userName = thisScore.name; var rankingScore = rankingJSON[userName]; if (!rankingScore || updateCriteria(rankingScore, thisScore)) { rankingJSON[userName] = thisScore; } } api = api || MediaWikiAPI(); var userName = mw.config.get("wgUserName"); var rankingDoc = api.getDocument(documentTitle); var rankingJSON = getRankingJSON(rankingDoc); var actions = { get: function() { return rankingJSON; }, update: function(updateInfo, updateCriteria, alternateKeys) { rankingJSON = actions.get(); updateUserScore(rankingJSON, updateInfo, updateCriteria); updateDoc(rankingJSON, api, alternateKeys); } } return actions; }