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 {
32 var data = keys.map(function(key) {
33 return [key, getSingleFunc(key)];
34 }).reduce(function(accum, pair) {
35 accum[pair[0]] = pair[1];
36 return accum;
37 }, {});
38
39 callback(undefined, data);
40 }
41 catch (e) {
42 callback(e);
43 }
44}
45
46function setMultiple(setSingleFunc, data, callback) {
47 try {
48 for (var key in data) {
49 if (data.hasOwnProperty(key)) {
50 setSingleFunc(key, data[key]);
51 }
52 }
53 callback();
54 }
55 catch (e) {
56 callback(e);
57 }
58}
59
60var cookieSaveData = {
61 "get": getMultiple.bind(undefined, cookieGet),
62 "set": setMultiple.bind(undefined, cookieSet)
63};
64
65function localStorageGet(name) {
66 return window.localStorage.getItem(name);
67}
68
69function localStorageSet(name, value) {
70 window.localStorage.setItem(name, value.toString());
71}
72
73var localStorageSaveData = {
74 "get": getMultiple.bind(undefined, localStorageGet),
75 "set": setMultiple.bind(undefined, localStorageSet)
76};
77
78/**
79 * A function that is called when save data has finished being retrieved.
80 * @callback saveDataGetFinished
81 * @param {error} err If defined, err is the error that occurred when retrieving the data.
82 * @param {object} data The key-value pairs of data that were previously saved.
83 */
84/**
85 * Retrieve data previously stored with {@link Splat.saveData.set}.
86 * @alias Splat.saveData.get
87 * @param {string | Array} keys A single key or array of key names of data items to retrieve.
88 * @param {saveDataGetFinished} callback A callback that is called with the data when it has been retrieved.
89 */
90function chromeStorageGet(keys, callback) {
91 window.chrome.storage.sync.get(keys, function(data) {
92 if (window.chrome.runtime.lastError) {
93 callback(window.chrome.runtime.lastError);
94 } else {
95 callback(undefined, data);
96 }
97 });
98}
99
100/**
101 * A function that is called when save data has finished being stored.
102 * @callback saveDataSetFinished
103 * @param {error} err If defined, err is the error that occurred when saving the data.
104 */
105/**
106 * Store data for later.
107 * @alias Splat.saveData.set
108 * @param {object} data An object containing key-value pairs of data to save.
109 * @param {saveDataSetFinished} callback A callback that is called when the data has finished saving.
110 */
111function chromeStorageSet(data, callback) {
112 window.chrome.storage.sync.set(data, function() {
113 callback(window.chrome.runtime.lastError);
114 });
115}
116
117var chromeStorageSaveData = {
118 "get": chromeStorageGet,
119 "set": chromeStorageSet,
120};
121
122if (platform.isChromeApp()) {
123 module.exports = chromeStorageSaveData;
124} else if (window.localStorage) {
125 module.exports = localStorageSaveData;
126} else {
127 module.exports = cookieSaveData;
128}