백괴게임>Bd3076 |
백괴게임>Bd3076 |
1번째 줄: |
1번째 줄: |
| /** 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);
| |
|
| |
|
| |
| /** 플러그인 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 끝 */
| |