본문으로 이동
주 메뉴
주 메뉴
사이드바로 이동
숨기기
둘러보기
대문
도움말
최근 바뀜
게임 목록
임의의 게임으로
Top 20
청사진
커뮤니티
오락실
토론란
발전소
추천 게임
게임제작도움방
자매 프로젝트
리버티책
오사인덱스
진실위키
큰숲백과
위키연합회의장
연합회의장
사이트 개발 서버
개발 서버
리버티게임
검색
검색
보이기
계정 만들기
로그인
개인 도구
계정 만들기
로그인
로그아웃한 편집자를 위한 문서
더 알아보기
기여
토론
사용자:Erick1212/common.js 문서 원본 보기
사용자 문서
토론
English
읽기
원본 보기
역사 보기
도구
도구
사이드바로 이동
숨기기
동작
읽기
원본 보기
역사 보기
새로 고침
일반
여기를 가리키는 문서
가리키는 글의 최근 바뀜
사용자 기여
기록 목록
사용자 그룹을 보기
특수 문서 목록
문서 정보
축약된 URL 얻기
보이기
사이드바로 이동
숨기기
←
사용자:Erick1212/common.js
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
여기에는 다른 사용자의 개인 설정이 포함되어 있기 때문에 이 자바스크립트 문서를 편집할 수 없습니다.
문서의 원본을 보거나 복사할 수 있습니다.
/** 플러그인 real369*************************** * real369 플레이 * 버전 => 1.1.7 * 작성자 : [[사용자:BANIP|BANIP]] * JSON => real369 = {"name":"real369","descript":"real369 플레이","version":"1.1.7","local":true,"creat":"BANIP","state":"Real 369/플러그인","executable":true}; */ function plugin_real369(){ if($("[data-name='real369']").length >= 1){ /** * 지금 박수를 쳐야되는지 숫자를 외쳐야 하는지 알아 냅니다 * @param {number} number 지금 순서가 몇번째인지 넣는 칸. * @return {number|Array[number]} 박수를 쳐야되는 상황이면 배열 안에 숫자를 담아 반환하고 아니면 파라미터를 반환. */ function getAnswer(number) { var rawNumber = number + ""; var targetNumber = rawNumber.replace(/3|6|9/g, ""); var diff = rawNumber.length - targetNumber.length; if (diff === 0) return number + ""; else return "짝!".repeat(diff); } function isMobile() { return !(navigator.userAgent.match(/Android|iPhone|iPad|iPod/i) === null); } var GUI = /** @class */ (function () { function GUI() { this.domList = { retry: document.querySelector("#gamewrap .gamelink .retry"), answer: document.querySelector("#gamewrap .answer"), dialog: document.querySelector("#gamewrap .dialog"), progress: document.querySelector("#gamewrap .progress"), gamelink: document.querySelector("#gamewrap .gamelink") }; this.bindOtherEvent(); //this.start(); } GUI.prototype.start = function () { this.domList.answer.innerHTML = "시작!"; this.domList.dialog.innerHTML = ""; this.domList.gamelink.style.display = "none"; createGame(gui); input.setGame(game); }; GUI.prototype.bindOtherEvent = function () { var _this = this; this.domList.retry.addEventListener("click", function () { if (game !== null) game.gameOver(); _this.start(); }); }; GUI.prototype.message = function (message) { var dialogNode = this.domList.dialog; var messageNode = document.createElement("li"); messageNode.innerHTML = message; dialogNode.appendChild(messageNode); dialogNode.scrollTop = dialogNode.scrollHeight; }; GUI.prototype.initOrder = function (userCount, startUser) { var orderStringCount = 8; var orderString = new Array(orderStringCount).fill("1") .map(function (v, i) { return (startUser + i) % userCount === 0 ? username : "COM" + (startUser + i) % userCount; }) .join(" => "); this.message("게임이 시작되었습니다!!!"); this.message("게임순서 : " + orderString + "..."); }; GUI.prototype.getProgressColor = function (progress) { var interval = [30, 60, 100]; var color = ["green", "yellow", "red"]; var index = interval.indexOf(interval.filter(function (v) { return v > progress; })[0]); return color[index]; }; GUI.prototype.resetTime = function (duration) { var _this = this; clearInterval(this.timerInterval); var startTime = Date.now(); this.timerInterval = setInterval(function () { var now = Date.now(); var progress = (now - startTime) / duration * 100 - 1; var progressColor = _this.getProgressColor(progress); _this.domList.progress.style.background = "linear-gradient(to right," + progressColor + " " + (100 - progress) + "%,white " + (100 - progress + 0.1) + "%)"; }, 10); }; GUI.prototype.setEnemyTurn = function (order) { this.nextUser = "COM" + order; }; GUI.prototype.setMyTurn = function () { this.nextUser = username; }; GUI.prototype.gameOver = function (reason, lastCount) { this.domList.answer.innerHTML = reason; this.message("게임이 끝났습니다!!"); this.message("최종 카운트: " + lastCount); input.setGame(null); this.domList.gamelink.style.display = "block"; clearInterval(this.timerInterval); }; GUI.prototype.setNumber = function (number) { this.domList.answer.innerHTML = number; }; GUI.prototype.sayNumber = function (number, name) { if (name === void 0) { name = this.nextUser; } this.message(name + " : " + number); }; GUI.prototype.setHandClab = function (clab) { this.domList.answer.innerHTML = clab; }; return GUI; }()); var Game = /** @class */ (function () { function Game(gui, playerCount, time) { if (playerCount === void 0) { playerCount = 3; } if (time === void 0) { time = 1000; } this.gui = gui; this.playerCount = playerCount; this.time = time; this.order = Math.floor(Math.random() * playerCount); this.number = 1; gui.initOrder(playerCount, this.order); this.turnStart(); } Game.prototype.next = function () { var prevNumber = getAnswer(Number(this.number)); this.gui.sayNumber(prevNumber); this.order = (this.order + 1) % this.playerCount; this.handClab = ""; this.number++; this.turnStart(); }; Game.prototype.turnStart = function () { this.gui.resetTime(this.time); if (this.order === 0) this.myTurn(); else this.enemyTurn(); }; Game.prototype.enemyTurn = function () { var _this = this; this.gui.setEnemyTurn(this.order); this.turnTimeout = setTimeout(function () { _this.shortenTime(); _this.next(); }, this.time * Math.random()); }; Game.prototype.myTurn = function () { var _this = this; this.gui.setMyTurn(); this.turnTimeout = setTimeout(function () { if (getAnswer(_this.number) === _this.handClab) _this.next(); else _this.gameOver("시간 초과!"); }, this.time); }; Game.prototype.sayNumber = function (answer) { clearTimeout(this.turnTimeout); var reasonGameOver = null; if (this.order > 0) reasonGameOver = "내 차례가 아닌데 말해버림!"; else if (getAnswer(this.number) === answer) null; else reasonGameOver = "오답!"; if (reasonGameOver === null) this.next(); else { gui.sayNumber(answer, username); this.gameOver(reasonGameOver); } }; Game.prototype.setHandClab = function (clab) { this.handClab = clab; }; Game.prototype.gameOver = function (reason) { clearTimeout(this.turnTimeout); this.gui.gameOver(reason, this.number); game = null; }; Game.prototype.shortenTime = function () { this.time *= 0.94; }; return Game; }()); var Input = /** @class */ (function () { function Input(game, gui) { this.game = game; this.gui = gui; this.clickEventType = isMobile() ? "touchstart" : "click"; this.resetNumber(); this.bindKeyBoardEvent(); this.bindKeyPadEvent(); } Input.prototype.setGame = function (game) { this.game = game; }; Input.prototype.bindKeyBoardEvent = function () { var _this = this; document.addEventListener("keydown", function (e) { var key = e.key; if (["Enter", "Space"].some(function (v) { return v === key; })) return _this.pressEnter(); else if (key === "BackSpace") _this.number = _this.number.slice(0, -1); else if (isNaN(parseInt(key))) return; else _this.number += key; _this.gui.setNumber(_this.number); }); }; Input.prototype.bindKeyPadEvent = function () { var _this = this; document.querySelectorAll(".keypad .key").forEach(function (node) { node.addEventListener(_this.clickEventType, function (e) { e.preventDefault(); _this.number += e.target.dataset.num; _this.gui.setNumber(_this.number); }); }); document.querySelector(".keypad .enter").addEventListener(this.clickEventType, function (e) { e.preventDefault(); _this.pressEnter(); }); document.querySelector(".keypad .reset").addEventListener(this.clickEventType, function (e) { e.preventDefault(); _this.resetNumber(); _this.gui.setNumber(_this.number); }); }; Input.prototype.pressEnter = function () { var _this = this; if (game == null || game == undefined) this.gui.message("아직 게임이 시작되지 않았어요."); clearTimeout(this.enterTimeout); if (this.number == "") { this.enterCount++; var answer_1 = "짝!".repeat(this.enterCount); this.gui.setHandClab(answer_1); this.game.setHandClab(answer_1); this.enterTimeout = setTimeout(function () { if (_this.game.order === 0) { _this.game.sayNumber(answer_1); } _this.resetNumber(); }, 800); } else { this.game.sayNumber(this.number); this.resetNumber(); } }; ; Input.prototype.resetNumber = function () { this.number = ""; this.enterCount = 0; this.gui.setNumber(this.number); }; return Input; }()); var game = null; var createGame = function (gui) { return game = new Game(gui, 4, 5000); }; var username = mw.config.values.wgUserName; var gui = new GUI(); //createGame(gui); var input = new Input(game, gui); } } $( plugin_real369 ); /* real369 끝 */ /** 플러그인 exportBitcoin*************************** * 비트코인 실시간 거래내역 수집, 플러그인 예시 * 버전 => 0.0.6 * 작성자 : [[사용자:BANIP|BANIP]] * JSON => exportBitcoin = {"name":"exportBitcoin","descript":"비트코인 실시간 거래내역 수집, 플러그인 예시","version":"0.0.6","local":true,"creat":"BANIP","state":"리버티게임:플러그인/예시","executable":true}; */ function plugin_exportBitcoin(){ if($("[data-name='exportBitcoin']").length >= 1){ // 이부부분에 코드 입력 // if($(".bitcoin").length === 0) return; setInterval(function(){ fetch("https://api.bithumb.com/public/orderbook") .then(function(data){ return data.json() }) .then(function(json){ const price = json.data.asks[0].price $(".bitcoin").html(price); }) },1500) // 여기까지 코드 입력 // } } $( plugin_exportBitcoin ); /* exportBitcoin 끝 */ /** 플러그인 autosave*************************** * 자동저장 시스템을 위한 플러그인 * 버전 => 2.0.2 * 작성자 : [[사용자:Manymaster|Manymaster]] * JSON => autosave = {"name":"autosave","descript":"자동저장 시스템을 위한 플러그인","version":"2.0.2","local":false,"creat":"Manymaster","state":"틀:자동저장/플러그인","executable":true}; */ function plugin_autosave(){ /* 작동 가능한 네임스페이스 */ var safeNameSpace = [""]; /* autosave 편집모드가 아닐 경우 플러그인 종료 */ var searchParams = geturlSearch(location); var isEditMode = searchParams.action === "edit"; var isAutosaveMode = searchParams.autosave === "1"; if (!(isEditMode && isAutosaveMode)) return ""; /* 자동 저장하기에 안전한 네임스페이스가 아닌 경우 플러그인 종료 */ var thisNamespaceNumber = mw.config.get("wgNamespaceNumber"); var nameSpaceIds = mw.config.get("wgNamespaceIds"); var isSafeNameSpace = safeNameSpace .map(function (namespace) { return nameSpaceIds[namespace]; }) .some(function (nsNumber) { return nsNumber == thisNamespaceNumber; }); if (!(isSafeNameSpace)) return ""; /* 자동 인증된 사용자가 아닌 경우 플러그인 종료 */ var userGroups = mw.config.get('wgUserGroups'); var autocheck = 0; if (userGroups) { for (var i = 0; i < userGroups.length; i++) { if (userGroups[i] === 'autoconfirmed') { autocheck++; } } } if (autocheck!= 1) return ""; /* 지정된 단락에서 불러오기 */ var savetempDom = $(".game-autosave"); if ($(".game-autosave").length === 0) throw new Error("autosave => game-autosave를 클래스명으로 가진 돔을 찾을 수 없습니다."); var savetemp = $(".game-autosave").html(); /* 문제가 되는 문자열 치환 */ savetemp = savetemp.replace(/(<([^>]+)>)/ig, ""); savetemp = savetemp.replace(/\n+/gi, "\n"); savetemp = savetemp.replace("\n", ""); savetemp = savetemp.replace(/</gi, "<"); savetemp = savetemp.replace(/>/gi, ">"); /* 기록, 저장하고 빠져나오기 */ $("#wpTextbox1").val(savetemp); $("#wpSave").click(); return; /** 이 플러그인 제작을 도와주신 분들 * Ver 2 제작자: [[사용자:BANIP|BANIP]] * 원 코드 작성자: [[사용자:*devunt]] */ } $( plugin_autosave ); /* autosave 끝 */ /** 플러그인 uncyslide*************************** * 백괴슬라이드 실행 * 버전 => 1.1.02 * 작성자 : [[사용자:BANIP|BANIP]] * JSON => uncyslide = {"name":"uncyslide","descript":"백괴슬라이드 실행","version":"1.1.02","local":true,"creat":"BANIP","state":"백괴슬라이드/플러그인","executable":true}; */ function plugin_uncyslide(){ if($("[data-name='uncyslide']").length >= 1){ // 이부부분에 코드 입력 // var slideable = plugin_Slideable(); var create = slideable.create; var execute = slideable.execute; var dispose = slideable.dispose; var rankingSystem = plugin_RankingSystem()("백괴슬라이드/랭킹", function(prev,next){ return Number(prev.time) - Number(next.time)}); var outputKeys = {time:"소요시간"}; var startMap = localStorage.getItem("uncySlide/startmap") || 0; var game = { 0: { center: "아래로 밀어주세요.", bottom: 1 }, 1: { center: "오른쪽으로 밀어보세요.", right: 2 }, 2: { center: "어디로 밀어보실래요?", top: 3, bottom: 3, }, 3: { center: "반갑습니다. <br>백괴슬라이드입니다.", bottom: 4, }, 4: { center: "어디로 당기고 미느냐에 따라, 게임의 결과가 달라집니다.", bottom: 5, }, 5: { center: "는 개뿔 이겜 시스템만든다고 그런 장황한거 만들 정신머리는 없었습니다", bottom: 5.1, }, 5.1: { center: "진심 힘들었습니다.", bottom: 5.2, }, 5.2: { center: "잘했죠?", bottom: 5.3, }, 5.3: { center: "위로 밀어서 칭찬하거나 아래로 밀어서 욕해주세요.", top: 5.4, bottom: 5.5, }, 5.4: { center: "감사합니다. 헤헤", bottom: 6, }, 5.5: { center: "흑흑.. 힘들었는데..", bottom: 6, }, 6: { center: "그래도 미디어위키의 틀에서 벗어난 겜인만큼 최대한 나은 경험을 선사하고자 노력했습니다. 잘부탁드립니다.", bottom: function(){ localStorage.setItem("uncySlide/startmap","main"); execute("main"); }, }, main: { center: "<ul><li>아래: 게임시작</li><li>토론: 위</li><li>설명: 오른쪽</li></ul>", bottom: function(){ execute("start",{count:100,time:Date.now()}) }, top: "debate", right: "i0", }, i0: { center:"가장자리에 화살표 보이죠?", bottom:"i1" }, i1: { center:"화면을 넘겨서 드래그해서 진행하는 게임이에요.", bottom:"i2" }, i2: { center:"원래라면 좀 큰 스케일의 게임으로 만들고 싶었는데..", bottom:"i3" }, i3: { center:"제 역량이 겜 크기에서 다 드러나네요...", bottom:"i4" }, i4: { center:"아무쪼록 힘들게 만들었으니 재밌게 즐겨주세요.", right:"main" }, debate: function(){ location.href = "https://libertyga.me/wiki/%ED%86%A0%EB%A1%A0:%EB%B0%B1%EA%B4%B4%EC%8A%AC%EB%9D%BC%EC%9D%B4%EB%93%9C"; }, start: function(arg){ function getRandomDirection(){ switch( Math.ceil(Math.random() * 4) ){ case 1: return "top"; break; case 2: return "bottom"; break; case 3: return "left"; break; case 4: return "right"; break; } } function getColorCode(count,maxcount){ var code = "hsl(" + count / maxcount * 360 +",100%,70%)"; return code } var count = arg.count; var maxcount = arg.maxcount || count; var time = arg.time; var $this = $(this); var timerInterval; var slideableItem = { center: function(){ var $this = $(this); $this.css({ "background": getColorCode(count,maxcount) }); timerInterval = setInterval(function(){ var overtime = (Date.now() - time) * 0.001; var printableTime = overtime.toFixed(2); $this.find(".counter").html(printableTime + "초"); },5) return "<div class='counter' style='font-size:5vw;'></div><div style='font-size:20vw;'>" + count + "</div>"; } }; slideableItem[getRandomDirection()] = function(){ clearInterval(timerInterval); if(count === 1) return execute("result",{count:count - 1,time:time,maxcount:maxcount}); execute("start",{count:count - 1,time:time,maxcount:maxcount}) }; create(slideableItem); }, result: function(arg){ var maxcount = arg.maxcount || count; var time = ( (Date.now() - arg.time) / 1000 ).toFixed(2); var updateParam = { time: time, name: mw.config.get("wgUserName") }; rankingSystem.update(updateParam,function(rankingScore,thisScore){ return rankingScore.time > thisScore.time},outputKeys); create({ center: "갯수: " + maxcount + " <br/>시간: " + time + "<ul><li>왼쪽: 메인으로</li><li>오른쪽: 토론으로</li></ul>", left:"main", right:"debate", }); } } dispose(game, startMap, {}); } } $( plugin_uncyslide ); /* uncyslide 끝 */ /** 플러그인 Slideable*************************** * 슬라이드 플러그인 라이브러리 * 버전 => 1.0.21 * 작성자 : [[사용자:BANIP|BANIP]] * JSON => Slideable = {"name":"Slideable","descript":"슬라이드 플러그인 라이브러리","version":"1.0.21","local":true,"creat":"BANIP","state":"사용자:BANIP/플러그인/슬라이드","executable":false}; */ function plugin_Slideable(){ if($("[data-name='Slideable']").length >= 1){ // 이부부분에 코드 입력 // //모든 키 순회 function forEach(object, callback) { for (var key in object) { var variable = object[key]; callback(variable, key); } } function create(directionData) { function initClassName($target, data) { forEach(data, function(value, direction) { $target.find("." + direction).addClass("on"); }) } function initDOM($target, data) { $target[0].data = data; $target.find(".center").html(data.center); $target.find(".top.on").css("background","url('https://upload.wikimedia.org/wikipedia/commons/8/85/Arrow_top_svg.svg') no-repeat center"); $target.find(".bottom.on").css("background","url('https://upload.wikimedia.org/wikipedia/commons/f/f2/Arrow_bottom_svg.svg') no-repeat center"); $target.find(".left.on").css("background","url('https://upload.wikimedia.org/wikipedia/commons/4/40/Arrowleft_svg.svg') no-repeat center"); $target.find(".right.on").css("background","url('https://upload.wikimedia.org/wikipedia/commons/e/ec/Arrow2right.svg') no-repeat center"); } var slideUtil = { moveObject: function($this, axis) { var x = axis[0], y = axis[1]; var data = $this[0].data; if (!data.right && x > 0) x = 0; if (!data.left && x < 0) x = 0; if (!data.top && y < 0) y = 0; if (!data.bottom && y > 0) y = 0; $this.css("transform", "translate(" + x + "px," + y + "px)"); }, isHideable: function($this, axis, limit) { var x = axis[0], y = axis[1]; var data = $this[0].data; if (data.right && x > limit) return "right"; if (data.left && x < limit * -1) return "left"; if (data.bottom && y > limit) return "bottom"; if (data.top && y < limit * -1) return "top"; }, hide: function(direction, $this) { function getCss(direction) { var css = { opacity: 0.01 }; var interval = 50; switch (direction) { case "left": css.left = -1 * interval + "vw"; break; case "right": css.left = interval + "vw"; break; case "bottom": css.top = interval + "vh"; break; case "top": css.top = -1 * interval + "vh"; break; } return css; } var self = $this[0]; var data = self.data; if (self.isHide === true) { return; } self.isHide = true; $this.animate(getCss(direction), { duration: 300, easing: "swing", start: data[direction], complete: function() { $this.remove(); } }); } } function setEvent($target, data) { var util = slideUtil; var moveLimit = 50; $(".slideable").mousedown(function(e) { this.isMouseDown = true; this.startAxis = [e.clientX, e.clientY]; }) $(".slideable").mousemove(function(e) { if (this.isMouseDown) { event.preventDefault() var axis = [e.clientX, e.clientY]; var startAxis = this.startAxis; var moveInterval = [axis[0] - startAxis[0], axis[1] - startAxis[1]] util.moveObject($(this), moveInterval); var hideDirection = util.isHideable($(this), moveInterval, moveLimit); if (hideDirection) util.hide(hideDirection, $(this)); } }) $(".slideable").mouseup(function(e) { this.isMouseDown = false; }) function getTouchEvent(e) { return e.originalEvent.touches[0] } $(".slideable").on("touchstart", function(e) { var touch = getTouchEvent(e); this.isMouseDown = true; this.startAxis = [touch.clientX, touch.clientY]; }) $(".slideable").on("touchmove", function(e) { event.preventDefault() if (this.isMouseDown) { event.preventDefault() var touch = getTouchEvent(e); var axis = [touch.clientX, touch.clientY]; var startAxis = this.startAxis; var moveInterval = [axis[0] - startAxis[0], axis[1] - startAxis[1]] util.moveObject($(this), moveInterval); var hideDirection = util.isHideable($(this), moveInterval, moveLimit); if (hideDirection) util.hide(hideDirection, $(this)); } }) $(".slideable").on("touchend", function(e) { this.isMouseDown = false; }) } //슬라이드아이템의 방향키로 숫자 혹은 문자로 지정된 경우 //함수로 변환 function setExecutable(target, item){ forEach(item,function(value,direction){ new Promise(function(resolve, reject){ if(direction === "center"){ switch( typeof value ){ case "function": resolve( value.bind(target)() ); break; } } else { switch( typeof value ){ case "string": case "number": resolve(function(){ execute(value); }.bind(target)); break; } } }).then(function(result){ item[direction] = result; }) }) } var $target = $(".slideable.cloneable").clone().removeClass("cloneable"); $("body").prepend($target); setExecutable($target[0], directionData); initClassName($target, directionData); initDOM($target, directionData); setEvent($target, directionData); } // create는 다른 함수들에 의존하지 않음 // var game; function execute(number, argument) { dispose(game, number, argument); } function dispose(slideableArray, start, argument) { game = slideableArray; var slideableItem = slideableArray[start]; switch (typeof slideableItem) { case "function": slideableItem(argument); break; case "object": create(slideableItem); break; } } //모바일 전체화면으로 수정 var setFullScreen = (function(){ //window.scrollTo(0,1); })(); return { create: create, execute: execute, dispose: dispose } } } /* Slideable 끝 */ /** 플러그인 RankingSystem*************************** * 랭킹시스템 라이브러리 * 버전 => 1.1.0 * 작성자 : [[사용자:BANIP|BANIP]] * JSON => RankingSystem = {"name":"RankingSystem","descript":"랭킹시스템 라이브러리","version":"1.1.0","local":true,"creat":"BANIP","state":"사용자:BANIP/플러그인/랭킹시스템","executable":false}; */ function plugin_RankingSystem(){ if($("[data-name='RankingSystem']").length >= 1){ // 이부부분에 코드 입력 // /** * @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) { if (!rankingDoc) return {}; var includeOnlyString = "includeonly" var regexp = new RegExp("\<" + includeOnlyString + "\>(.*)\<\/" + includeOnlyString + "\>"); 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.entries(rankingJSON).sort(function(prev,next){ return sortCallback(prev[1],next[1]) }).map(function(value){ return value[0] }); rankingList.forEach(function(key) { var json = rankingJSON[key]; var outputJSON = getOutputJSON(json); result += getOutputString(outputJSON) }); result += "</only" + "include>"; var reply = documentTitle.replace(new RegExp("\/.*"),"") + " 점수 갱신"; api.changeDocument(documentTitle, reply, 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; } } } /* RankingSystem 끝 */ /** 플러그인 haircut*************************** * 게임 진행에 필요합니다. * 버전 => 2.0 * 작성자 : [[사용자:Lemminkäinen|Lemminkäinen]] * JSON => haircut = {"name":"haircut","descript":"게임 진행에 필요합니다.","version":"2.0","local":true,"creat":"Lemminkäinen","state":"머리 자르기/js","executable":true}; */ function plugin_haircut(){ if($("[data-name='haircut']").length >= 1){ // 이부분에 코드 입력 // /*Elements Load 시작*/ var cut_res_container=document.getElementById("cut_res_container"); var cut_container=document.getElementById("cut_container"); var cut_linehair=document.getElementById("cut_line"); var cuthair=document.getElementById("cuthair"); /*Load 끝*/ var rand=function(r1,r2){ return Math.floor(Math.random()*r1)+r2; } var cut_now=rand(400,600); var cut_line=rand(200,300); var cut_initial=cut_now-cut_line; var cdf=document.getElementById("cut_diff").innerHTML; var cut_diff=(cdf<=0 || isNaN(cdf) || cdf>2)?(0.5):(Number(cdf)); var cut_speed=cut_now/cut_diff; var cut_result1=0; var cut_result2=0; cut_res_container.style.display="none"; cut_container.style.height=cut_now+"px"; cut_linehair.style.height=cut_line+"px"; if(cut_initial<=0) { alert('머리가 너무 짧아 자를 수 없습니다!'); throw("WTF your hair is already short"); } function cut_again(){ $('#scissors').animate({ top:"100%" },cut_speed,'linear',function(){ $('#scissors').animate({ top:0 },cut_speed,'linear',function(){ cut_again() }); }); }//animate는 자스로 대체하려니 setInterval이나 setTimeout 등으로 해야 하는데 여어어엉 귀찮아서.. cut_again(); function cut_calc(pos){ if(pos<cut_line){ cut_rescalc(pos); return; } cut_now=pos; cut_speed=cut_now/cut_diff; cut_container.style.height=cut_now+"px"; cuthair.innerHTML=cut_now; } function cut_rescalc(pos){ document.getElementById("cuthair_info").style.display="none"; cut_container.style.display="none"; document.getElementById("cut").style.display="none"; cut_res_container.style.display="block"; cut_result1=(100*(1-(cut_now-cut_line)/cut_initial)); cut_result2=(100*(pos/cut_line)); document.getElementById("cut_result1").innerHTML=cut_result1; document.getElementById("cut_result2").innerHTML=cut_result2; var cut_stories1=document.getElementsByClassName("cut_story"); var cut_stories2=document.getElementsByClassName("cuts_story"); if(cut_result1===0){ cut_stories1[0].style.display="block"; document.getElementById('cuts_story').style.display="none"; } else if(cut_result1<90){ cut_stories1[1].style.display="block"; } else if(cut_result1<95){ cut_stories1[2].style.display="block"; } else if(cut_result1<98){ cut_stories1[3].style.display="block"; } else if(cut_result1<=100){ cut_stories1[4].style.display="block"; } /* story2 (cut_result2, cuts) */ if(cut_result2<90){ cut_stories2[0].style.display="block"; } else if(cut_result2<95){ cut_stories2[1].style.display="block"; } else if(cut_result2<98){ cut_stories2[2].style.display="block"; } else if(cut_result2<=100){ cut_stories2[3].style.display="block"; } } $('#cut').click(function(){ cut_calc($('#scissors').position().top ); });//addEventListener...그냥 생각하길 관두고 // 여기까지 코드 입력 // } } $( plugin_haircut ); /* haircut 끝 */ /** 플러그인 UncyBeat_levelmaker*************************** * levelMaker * 버전 => 1.0 * 작성자 : [[사용자:Bd3076|Bd3076]] * JSON => UncyBeat_levelmaker = {"name":"UncyBeat_levelmaker","descript":"levelMaker","version":"1.0","local":true,"creat":"Bd3076","state":"UncyBeat/LevelMaker/plugin","executable":true}; */ function plugin_UncyBeat_levelmaker(){ if($("[data-name='UncyBeat_levelmaker']").length >= 1){ } } $( plugin_UncyBeat_levelmaker ); /* UncyBeat_levelmaker 끝 */
사용자:Erick1212/common.js
문서로 돌아갑니다.