사용자:Bd3076/common.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() {
// 문서 미리보기 상태일 시 종료
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);