미디어위키:Gadget-EnableLocalStorage.js

리버티게임(개발), 모두가 만들어가는 자유로운 게임
둘러보기로 이동 검색으로 이동

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

  • 파이어폭스 / 사파리: Shift 키를 누르면서 새로 고침을 클릭하거나, Ctrl-F5 또는 Ctrl-R을 입력 (Mac에서는 ⌘-R)
  • 구글 크롬: Ctrl-Shift-R키를 입력 (Mac에서는 ⌘-Shift-R)
  • 인터넷 익스플로러 / 엣지: Ctrl 키를 누르면서 새로 고침을 클릭하거나, Ctrl-F5를 입력.
  • 오페라: Ctrl-F5를 입력.
/** DB기능 초기화
 * [[틀:DB]]를 사용 가능하게 해 줍니다.
 * 원작성자: [[사용자:BANIP|BANIP]]
 */
 
function enableLocalStorage() {
    // 문서 미리보기 상태일 시 종료
    var searchParams = geturlSearch(location);
    var isNormalMode = 
        searchParams.action === undefined &&
        searchParams.curid ===  undefined &&
        searchParams.oldid === undefined &&
        searchParams.direction === undefined &&
        searchParams.printable === undefined &&
        searchParams.diff === undefined ;
	if (!(isNormalMode)) 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);

/* DB기능 초기화 끝 */