v4.0.0: 덱 UX·i18n·썸네일 저장 개선 및 413 수정
즐겨찾기·홀드 미리보기·페이지 도움말·3개국어 번역을 추가하고, 덱 저장 시 썸네일을 1200px로 통일하며 Nginx/API 업로드 제한을 상향했다. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
60
script/deck-favorites.js
Normal file
60
script/deck-favorites.js
Normal file
@@ -0,0 +1,60 @@
|
||||
/**
|
||||
* 덱 즐겨찾기 (localStorage, share_code 기준)
|
||||
*/
|
||||
(function initDeckFavorites() {
|
||||
const STORAGE_KEY = 'uadeck.deckFavorites';
|
||||
|
||||
/**
|
||||
* @returns {Set<string>}
|
||||
*/
|
||||
function readSet() {
|
||||
try {
|
||||
const raw = localStorage.getItem(STORAGE_KEY);
|
||||
const list = raw ? JSON.parse(raw) : [];
|
||||
return new Set(Array.isArray(list) ? list : []);
|
||||
} catch {
|
||||
return new Set();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Set<string>} set
|
||||
*/
|
||||
function writeSet(set) {
|
||||
localStorage.setItem(STORAGE_KEY, JSON.stringify([...set]));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} shareCode
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function isFavorite(shareCode) {
|
||||
if (!shareCode) return false;
|
||||
return readSet().has(shareCode);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} shareCode
|
||||
* @returns {boolean} 토글 후 즐겨찾기 여부
|
||||
*/
|
||||
function toggle(shareCode) {
|
||||
if (!shareCode) return false;
|
||||
const set = readSet();
|
||||
if (set.has(shareCode)) {
|
||||
set.delete(shareCode);
|
||||
} else {
|
||||
set.add(shareCode);
|
||||
}
|
||||
writeSet(set);
|
||||
return set.has(shareCode);
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {string[]}
|
||||
*/
|
||||
function getAll() {
|
||||
return [...readSet()];
|
||||
}
|
||||
|
||||
window.UaDeckFavorites = { isFavorite, toggle, getAll };
|
||||
})();
|
||||
Reference in New Issue
Block a user