mirror of
https://github.com/wassname/Mostly-Harmless.git
synced 2026-06-29 16:30:18 +08:00
100 lines
2.7 KiB
JavaScript
100 lines
2.7 KiB
JavaScript
//
|
|
// Copyright (c) 2011 Frank Kohlhepp
|
|
// https://github.com/frankkohlhepp/store-js
|
|
// License: MIT-license
|
|
//
|
|
(function () {
|
|
var Store = this.Store = function (name, defaults) {
|
|
var key;
|
|
this.name = name;
|
|
|
|
if (defaults !== undefined) {
|
|
for (key in defaults) {
|
|
if (defaults.hasOwnProperty(key) && this.get(key) === undefined) {
|
|
this.set(key, defaults[key]);
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
Store.prototype.get = function (name) {
|
|
name = "store." + this.name + "." + name;
|
|
if (localStorage.getItem(name) === null) { return undefined; }
|
|
try {
|
|
return JSON.parse(localStorage.getItem(name));
|
|
} catch (e) {
|
|
return null;
|
|
}
|
|
};
|
|
|
|
Store.prototype.set = function (name, value) {
|
|
if (value === undefined) {
|
|
this.remove(name);
|
|
} else {
|
|
if (typeof value === "function") {
|
|
value = null;
|
|
} else {
|
|
try {
|
|
value = JSON.stringify(value);
|
|
} catch (e) {
|
|
value = null;
|
|
}
|
|
}
|
|
|
|
localStorage.setItem("store." + this.name + "." + name, value);
|
|
}
|
|
|
|
return this;
|
|
};
|
|
|
|
Store.prototype.remove = function (name) {
|
|
localStorage.removeItem("store." + this.name + "." + name);
|
|
return this;
|
|
};
|
|
|
|
Store.prototype.removeAll = function () {
|
|
var name,
|
|
i;
|
|
|
|
name = "store." + this.name + ".";
|
|
for (i = (localStorage.length - 1); i >= 0; i--) {
|
|
if (localStorage.key(i).substring(0, name.length) === name) {
|
|
localStorage.removeItem(localStorage.key(i));
|
|
}
|
|
}
|
|
|
|
return this;
|
|
};
|
|
|
|
Store.prototype.toObject = function () {
|
|
var values,
|
|
name,
|
|
i,
|
|
key,
|
|
value;
|
|
|
|
values = {};
|
|
name = "store." + this.name + ".";
|
|
for (i = (localStorage.length - 1); i >= 0; i--) {
|
|
if (localStorage.key(i).substring(0, name.length) === name) {
|
|
key = localStorage.key(i).substring(name.length);
|
|
value = this.get(key);
|
|
if (value !== undefined) { values[key] = value; }
|
|
}
|
|
}
|
|
|
|
return values;
|
|
};
|
|
|
|
Store.prototype.fromObject = function (values, merge) {
|
|
if (merge !== true) { this.removeAll(); }
|
|
for (var key in values) {
|
|
if (values.hasOwnProperty(key)) {
|
|
this.set(key, values[key]);
|
|
}
|
|
}
|
|
|
|
return this;
|
|
};
|
|
}());
|