63 lines
1.4 KiB
JavaScript
63 lines
1.4 KiB
JavaScript
// Local-only favorites and dietary goal (no cloud backend).
|
|
(function (global) {
|
|
var FAV_KEY = 'fc_fav_slugs';
|
|
var GOAL_KEY = 'fc_diet_goal';
|
|
|
|
function readJson(key, fallback) {
|
|
try {
|
|
var raw = global.localStorage.getItem(key);
|
|
if (!raw) return fallback;
|
|
return JSON.parse(raw);
|
|
} catch (e) {
|
|
return fallback;
|
|
}
|
|
}
|
|
|
|
function writeJson(key, value) {
|
|
try {
|
|
global.localStorage.setItem(key, JSON.stringify(value));
|
|
} catch (e) {
|
|
/* ignore quota errors */
|
|
}
|
|
}
|
|
|
|
global.fcLocal = {
|
|
getFavorites: function () {
|
|
var list = readJson(FAV_KEY, []);
|
|
return Array.isArray(list) ? list : [];
|
|
},
|
|
hasFavorite: function (slug) {
|
|
return this.getFavorites().indexOf(slug) !== -1;
|
|
},
|
|
toggleFavorite: function (slug) {
|
|
var list = this.getFavorites();
|
|
var idx = list.indexOf(slug);
|
|
if (idx === -1) {
|
|
list.push(slug);
|
|
} else {
|
|
list.splice(idx, 1);
|
|
}
|
|
writeJson(FAV_KEY, list);
|
|
return list;
|
|
},
|
|
getGoal: function () {
|
|
try {
|
|
return global.localStorage.getItem(GOAL_KEY) || '';
|
|
} catch (e) {
|
|
return '';
|
|
}
|
|
},
|
|
setGoal: function (goal) {
|
|
try {
|
|
if (goal) {
|
|
global.localStorage.setItem(GOAL_KEY, goal);
|
|
} else {
|
|
global.localStorage.removeItem(GOAL_KEY);
|
|
}
|
|
} catch (e) {
|
|
/* ignore */
|
|
}
|
|
}
|
|
};
|
|
})(window);
|