|
|
|
|
@ -1,79 +1,80 @@
|
|
|
|
|
var ElmLocalStoragePorts = function() {};
|
|
|
|
|
const ElmLocalStoragePorts = function () {}
|
|
|
|
|
const localStorage = window.localStorage
|
|
|
|
|
|
|
|
|
|
ElmLocalStoragePorts.prototype.subscribe =
|
|
|
|
|
function(app, getPortName, setPortName, clearPortName, responsePortName, listKeysPortName) {
|
|
|
|
|
if (!getPortName) getPortName = "getItem";
|
|
|
|
|
if (!setPortName) setPortName = "setItem";
|
|
|
|
|
if (!clearPortName) clearPortName = "clear";
|
|
|
|
|
if (!listKeysPortName) listKeysPortName = "listKeys";
|
|
|
|
|
if (!responsePortName) responsePortName = "response";
|
|
|
|
|
function (app, getPortName, setPortName, clearPortName, responsePortName, listKeysPortName) {
|
|
|
|
|
if (!getPortName) getPortName = 'getItem'
|
|
|
|
|
if (!setPortName) setPortName = 'setItem'
|
|
|
|
|
if (!clearPortName) clearPortName = 'clear'
|
|
|
|
|
if (!listKeysPortName) listKeysPortName = 'listKeys'
|
|
|
|
|
if (!responsePortName) responsePortName = 'response'
|
|
|
|
|
|
|
|
|
|
if (app.ports[responsePortName]) {
|
|
|
|
|
var responsePort = app.ports[responsePortName];
|
|
|
|
|
const responsePort = app.ports[responsePortName]
|
|
|
|
|
|
|
|
|
|
if (app.ports[getPortName]) {
|
|
|
|
|
app.ports[getPortName].subscribe(function(key) {
|
|
|
|
|
var val = null;
|
|
|
|
|
app.ports[getPortName].subscribe(function (key) {
|
|
|
|
|
let val = null
|
|
|
|
|
try {
|
|
|
|
|
val = JSON.parse(localStorage.getItem(key))
|
|
|
|
|
} catch (e) {}
|
|
|
|
|
responsePort.send({
|
|
|
|
|
key:key,
|
|
|
|
|
value:val
|
|
|
|
|
key,
|
|
|
|
|
value: val
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
});
|
|
|
|
|
} else {
|
|
|
|
|
console.warn(getPortName + ": This port is not connected.");
|
|
|
|
|
console.warn(getPortName + ': This port is not connected.')
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (app.ports[setPortName]) {
|
|
|
|
|
app.ports[setPortName].subscribe(function(kv) {
|
|
|
|
|
var key = kv[0];
|
|
|
|
|
var json = kv[1];
|
|
|
|
|
app.ports[setPortName].subscribe(function (kv) {
|
|
|
|
|
const key = kv[0]
|
|
|
|
|
const json = kv[1]
|
|
|
|
|
if (json === null) {
|
|
|
|
|
localStorage.removeItem(key);
|
|
|
|
|
localStorage.removeItem(key)
|
|
|
|
|
} else {
|
|
|
|
|
localStorage.setItem(key, JSON.stringify(json));
|
|
|
|
|
localStorage.setItem(key, JSON.stringify(json))
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
})
|
|
|
|
|
} else {
|
|
|
|
|
console.warn(setPortName + ": This port is not connected.");
|
|
|
|
|
console.warn(setPortName + ': This port is not connected.')
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (app.ports[clearPortName]) {
|
|
|
|
|
app.ports[clearPortName].subscribe(function(prefix) {
|
|
|
|
|
app.ports[clearPortName].subscribe(function (prefix) {
|
|
|
|
|
if (prefix) {
|
|
|
|
|
var cnt = localStorage.length;
|
|
|
|
|
for (var i = cnt - 1; i >= 0; --i) {
|
|
|
|
|
var key = localStorage.key(i);
|
|
|
|
|
const cnt = localStorage.length
|
|
|
|
|
for (let i = cnt - 1; i >= 0; --i) {
|
|
|
|
|
const key = localStorage.key(i)
|
|
|
|
|
if (key && key.startsWith(prefix)) {
|
|
|
|
|
localStorage.removeItem(key);
|
|
|
|
|
localStorage.removeItem(key)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
localStorage.clear();
|
|
|
|
|
localStorage.clear()
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
})
|
|
|
|
|
} else {
|
|
|
|
|
console.warn(clearPortName + ": This port is not connected.");
|
|
|
|
|
console.warn(clearPortName + ': This port is not connected.')
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (app.ports[listKeysPortName]) {
|
|
|
|
|
app.ports[listKeysPortName].subscribe(function(prefix) {
|
|
|
|
|
var cnt = localStorage.length;
|
|
|
|
|
var keys = [];
|
|
|
|
|
for (var i = 0; i < cnt; i++) {
|
|
|
|
|
var key = localStorage.key(i);
|
|
|
|
|
app.ports[listKeysPortName].subscribe(function (prefix) {
|
|
|
|
|
const cnt = localStorage.length
|
|
|
|
|
const keys = []
|
|
|
|
|
for (let i = 0; i < cnt; i++) {
|
|
|
|
|
const key = localStorage.key(i)
|
|
|
|
|
if (key && key.startsWith(prefix)) {
|
|
|
|
|
keys.push(key);
|
|
|
|
|
keys.push(key)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
responsePort.send(keys);
|
|
|
|
|
});
|
|
|
|
|
responsePort.send(keys)
|
|
|
|
|
})
|
|
|
|
|
} else {
|
|
|
|
|
console.warn(listKeysPortName + ": This port is not connected.");
|
|
|
|
|
console.warn(listKeysPortName + ': This port is not connected.')
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
console.warn(responsePortName + ": This port is not connected.");
|
|
|
|
|
console.warn(responsePortName + ': This port is not connected.')
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|