UNPKG

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