사용자:Hsl0/common.js

리버티게임, 모두가 만들어가는 자유로운 게임
< 사용자:Hsl0
imported>Hsl0님의 2022년 6월 19일 (일) 03:02 판

참고: 설정을 저장한 후에 바뀐 점을 확인하기 위해서는 브라우저의 캐시를 새로 고쳐야 합니다.

  • 파이어폭스 / 사파리: Shift 키를 누르면서 새로 고침을 클릭하거나, Ctrl-F5 또는 Ctrl-R을 입력 (Mac에서는 ⌘-R)
  • 구글 크롬: Ctrl-Shift-R키를 입력 (Mac에서는 ⌘-Shift-R)
  • 인터넷 익스플로러 / 엣지: Ctrl 키를 누르면서 새로 고침을 클릭하거나, Ctrl-F5를 입력.
  • 오페라: Ctrl-F5를 입력.
function geturlSearch(location) {
    location = location || window.location;
    var result = {};
    if (location.search)
        location.search.substring(1).replace(/\+/g, ' ').split("&").map(function(v) {
            return v.split("=");
        }).forEach(function(v) {
            result[decodeURIComponent(v[0])] = decodeURIComponent(v[1]);
        });
    return result;
}

function vectorHidePersonalLink() {
	function collapse() {
		var $personalLinks = $('#p-personal ul');
		$personalLinks.removeClass('expanded');
		if(mobile.matches) $('#pt-talk-alert a').text('새 메시지');
	}
	var mobile = matchMedia('(max-width:825px)'); // 모바일 버전을 벗어나도 825px까지는 글자수 줄임 (의도적)
	var collapsed = matchMedia('(max-width:750px)');
	if(!mw.user.isAnon()) {
		mw.loader.using('oojs-ui.styles.icons-interactions');
		$('#pt-mytalk').after('<li id="pt-expand"><a class="oo-ui-icon-ellipsis" title="개인 링크 더보기" /></li>');
		$('#p-personal ul').append('<li id="pt-collapse"><a class="oo-ui-icon-close" title="닫기" /></li>');
		if(mobile.matches) $('#pt-talk-alert a').text('새 메시지');
		if(collapsed.matches) collapse();
		$('#pt-expand > a').click(function() {
			if(mobile.matches) $('#pt-talk-alert a').text('새 토론 문서 메시지가 있습니다');
		    $('#p-personal ul').addClass('expanded');
		});
		$('#pt-collapse > a, #content').click(collapse);
		collapsed.addEventListener('change', function(media) {
			if(media.matches) collapse();
		});
		mobile.addEventListener('change', function(media) {
			if(media.matches) $('#pt-talk-alert a').text('새 메시지');
			else $('#pt-talk-alert a').text('새 토론 문서 메시지가 있습니다');
		});
	}
}
//$(vectorHidePersonalLink);

/**
 * 0. 모든 패키지가 로딩되고 DOM이 준비될때까지 기다립니다. 오류 여부는 상관없습니다.
 * 1. renderer: DOM 요소를 만들거나 수정합니다.
 * 2. handler: 이벤트를 예약합니다.
 * 3. trigger: 본격적으로 작업을 수행합니다.
**/
var TASKS = Symbol('tasks_queue');
var WAITING = Symbol('waiting_queue');
var ERRORS = Symbol('errors');

function capture(queue) {
    var arr = Array.from(queue);
    queue.clear();
    return arr;
}

function Tasker() {
    this[TASKS] = new Set();
    this[WAITING] = new Set();
    this[ERRORS] = [];
}
Tasker.prototype.push = function push() {
    var tasker = this;
    var items = arguments;
    
    if(items[0] && typeof items[0][Symbol.iterator] === 'function') items = Array.from(items[0]);
    else items = Array.from(items);
    
    items.forEach(function(item) {
        if(typeof item === 'function') tasker[TASKS].add(item);
        else tasker[WAITING].add(item);
    });
    
    return this;
};
Tasker.prototype.wait = function wait() {
    var tasker = this;
    
    if(this[ERRORS].length) return Promise.reject(this[ERRORS].slice());
    else return Promise.all(capture(tasker[WAITING])).then(function handle() {
    	var captured = capture(tasker[WAITING]);
        if(captured.length) return Promise.all(captured).then(handle);
    });
};
Tasker.prototype.waitSettled = function waitSettled() {
    var tasker = this;

    return Promise.allSettled(capture(tasker[WAITING])).then(function handle() {
    	var captured = capture(tasker[WAITING]);
        if(captured.length) return Promise.allSettled(captured).then(handle);
    });
};
Tasker.prototype.run = function run() {
    var tasker = this;
    this[TASKS].forEach(function(task) {
        try {
        	tasker[WAITING].add(task());
        } catch(error) {
        	tasker[ERRORS].push({
        		task: task,
        		error: error
        	});
        }
    });
    return this;
};
Tasker.prototype.catch = function(handler) {
	if(this[ERRORS].length) handler(this[ERRORS].slice()); // Copy this[ERRORS] array
	return this;
};

window.Tasker = Tasker;

function ModuleTasker() {
	Tasker.call(this);
	
	this.done = false;
}
ModuleTasker.prototype = Object.create(Tasker.prototype);
ModuleTasker.prototype.constructor = ModuleTasker;
ModuleTasker.prototype.run = function run() {
    var tasker = this;
    
    this[TASKS].forEach(function(task) {
        if(typeof task === 'string') tasker[WAITING].add(mw.loader.using(task));
        else try {
        	tasker[WAITING].add(task());
        } catch(error) {
        	tasker[ERRORS].push({
        		task: task,
        		error: error
        	});
        }
    });
    
    this.done = true;
    
    return this;
};
ModuleTasker.prototype.push = function() {
    Tasker.prototype.push.apply(this, arguments);
    if(this.done) this.run();
    return this;
};

var taskers = {
    renderer: new ModuleTasker(),
    handler: new ModuleTasker(),
    trigger: new ModuleTasker()
};

window.registerRenderer = function registerRenderer() {
    var renderers = arguments;
    if(renderers[0] && typeof renderers[0][Symbol.iterator] === 'function') renderers = renderers[0];
    taskers.renderer.push(renderers);
};
window.registerHandler = function registerHandler() {
    var handlers = arguments;
    if(handlers[0] && typeof handlers[0][Symbol.iterator] === 'function') handlers = handlers[0];
    taskers.handler.push(handlers);
};
window.registerTrigger = function registerTrigger() {
    var triggers = arguments;
    if(triggers[0] && typeof triggers[0][Symbol.iterator] === 'function') triggers = triggers[0];
    taskers.trigger.push(triggers);
};

$(function() {
    mw.loader.using(RLPAGEMODULES).always/*finally*/(function() {
        return taskers.renderer.run().waitSettled();
    }).then(function() {
        return taskers.handler.run().waitSettled();
    }).then(function() {
        taskers.trigger.run();
    });
});

function testHook(name) {
	mw.hook(name).add(function() {
		logStack.push([name].concat(arguments));
		console.log.apply(null, [name].concat(arguments));
	});
}

var logStack = [];

testHook('postEdit');
testHook('postEdit.afterRemoval');
testHook('structuredChangeFilters.ui.initialized');
testHook('wikipage.categories');
testHook('wikipage.collapsibleContent');
testHook('wikipage.content');
testHook('wikipage.diff');
testHook('wikipage.editform');
testHook('wikipage.indicators');


/** 플러그인 msgame***************************
* 스톱워치 게임
* 버전 => 0.942
* 작성자 : [[사용자:Riemann|Riemann]] 
* JSON => msgame = {"name":"msgame","descript":"스톱워치 게임","version":"0.942","local":true,"creat":"Riemann","state":"사용자:Riemann/msgame","executable":true}; 
*/ 
function plugin_msgame(){
  if($("[data-name='msgame']").length >= 1){
		  // 이부분에 코드 입력 //
sc = 0
cb = 0

bl = false;
$(document.body).keydown(function() {
  if (bl == false) {
  	bl = true
    startF();
  } else {
    bl = false
    stopF();
  }
});

$("#msgame-start").click(function() {
  bl = true
	startF();
});

$("#msgame-stop").click(function() {
  bl = false
	stopF();
});

function startF() {
  obj = Math.floor(Math.random() * 10) + 5;
  $("#msgame-start").css("display", "none");
  $("#msgame-stop").css("display", "block");
  it = new Date();
  si = setInterval(clockUpdate, 20)
  $("#msgame-console").text(obj + " 초를 세세요.");
}

function stopF() {
  $("#msgame-clockText").css("display", "inline");
  $("#msgame-stop").css("display", "none");
  $("#msgame-start").css("display", "block");
  clearInterval(si);
  ie = new Date();
  ifin = ie - it;
  $("#msgame-clockText").text(toMilliSec(ifin));
  finished(obj, ifin);
}

function clockUpdate() {
  ic = new Date();
  id = ic - it;
  ii = toMilliSec(id);
  $("#msgame-clockText").text(ii);
  if (obj * 1000 - id < 500 * cb && cb > 4 ) {
    $("#msgame-clockText").fadeOut();
  }
}

function toMilliSec(d) {
  return (Math.floor(d / 1000) + "\"" + ("" + d % 1000).padStart(3, "0")).padStart(6, "0");
}

function finished(a, b) {
  ath = a * 1000
  if (ath == b) {
    cbm = Math.floor(Math.pow(800, (1 + cb / 10)))
    $("#msgame-console").text("정확하시군요. " + cbm + " 점 드리겠습니다.");
    sc += cbm
    cb += 1
  } else if (Math.abs(ath - b) < 100) {
    cbm = Math.floor(Math.pow((500 / Math.abs(ath - b)), (1 + cb / 10)))
    $("#msgame-console").text("정확하시군요. " + cbm + " 점 드리겠습니다.");
    sc += cbm
    cb += 1
  } else {
    $("#msgame-console").text("안타깝습니다. 조금 더 노력해 보세요!");
    cb = 0
  }
  $("#msgame-score").text(sc);
  $("#msgame-combo").text(cb);
}
 // 여기까지 코드 입력 //

		
  }

}
$( plugin_msgame );
/* msgame 끝 */