UNPKG

3.33 kBJavaScriptView Raw
1/**
2 * @namespace Splat.saveData
3 */
4
5var platform = require("./platform");
6
7function cookieGet(name) {
8 var value = "; " + document.cookie;
9 var parts = value.split("; " + name + "=");
10 if (parts.length === 2) {
11 return parts.pop().split(";").shift();
12 } else {
13 throw "cookie " + name + " was not found";
14 }
15}
16
17function cookieSet(name, value) {
18 var expire = new Date();
19 expire.setTime(expire.getTime() + 1000 * 60 * 60 * 24 * 365);
20 var cookie = name + "=" + value + "; expires=" + expire.toUTCString() + ";";
21 document.cookie = cookie;
22}
23
24function getMultiple(getSingleFunc, keys, callback) {
25 if (typeof keys === "string") {
26 keys = [keys];
27 }
28
29 try {
30 var data = keys.map(function(key) {
31 return [key, getSingleFunc(key)];
32 }).reduce(function(accum, pair) {
33 accum[pair[0]] = pair[1];
34 return accum;
35 }, {});
36
37 callback(undefined, data);
38 } catch (e) {
39 callback(e);
40 }
41}
42
43function setMultiple(setSingleFunc, data, callback) {
44 try {
45 for (var key in data) {
46 if (data.hasOwnProperty(key)) {
47 setSingleFunc(key, data[key]);
48 }
49 }
50 callback();
51 } catch (e) {
52 callback(e);
53 }
54}
55
56var cookieSaveData = {
57 "get": getMultiple.bind(undefined, cookieGet),
58 "set": setMultiple.bind(undefined, cookieSet)
59};
60
61function localStorageGet(name) {
62 return window.localStorage.getItem(name);
63}
64
65function localStorageSet(name, value) {
66 window.localStorage.setItem(name, value.toString());
67}
68
69var localStorageSaveData = {
70 "get": getMultiple.bind(undefined, localStorageGet),
71 "set": setMultiple.bind(undefined, localStorageSet)
72};
73
74/**
75 * A function that is called when save data has finished being retrieved.
76 * @callback saveDataGetFinished
77 * @param {error} err If defined, err is the error that occurred when retrieving the data.
78 * @param {object} data The key-value pairs of data that were previously saved.
79 */
80/**
81 * Retrieve data previously stored with {@link Splat.saveData.set}.
82 * @alias Splat.saveData.get
83 * @param {string | Array} keys A single key or array of key names of data items to retrieve.
84 * @param {saveDataGetFinished} callback A callback that is called with the data when it has been retrieved.
85 */
86function chromeStorageGet(keys, callback) {
87 window.chrome.storage.sync.get(keys, function(data) {
88 if (window.chrome.runtime.lastError) {
89 callback(window.chrome.runtime.lastError);
90 } else {
91 callback(undefined, data);
92 }
93 });
94}
95
96/**
97 * A function that is called when save data has finished being stored.
98 * @callback saveDataSetFinished
99 * @param {error} err If defined, err is the error that occurred when saving the data.
100 */
101/**
102 * Store data for later.
103 * @alias Splat.saveData.set
104 * @param {object} data An object containing key-value pairs of data to save.
105 * @param {saveDataSetFinished} callback A callback that is called when the data has finished saving.
106 */
107function chromeStorageSet(data, callback) {
108 window.chrome.storage.sync.set(data, function() {
109 callback(window.chrome.runtime.lastError);
110 });
111}
112
113var chromeStorageSaveData = {
114 "get": chromeStorageGet,
115 "set": chromeStorageSet
116};
117
118if (platform.isChromeApp()) {
119 module.exports = chromeStorageSaveData;
120} else if (window.localStorage) {
121 module.exports = localStorageSaveData;
122} else {
123 module.exports = cookieSaveData;
124}