]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - client/src/app/shared/misc/peertube-web-storage.ts
Fix input/textarea themes
[github/Chocobozzz/PeerTube.git] / client / src / app / shared / misc / peertube-web-storage.ts
CommitLineData
0bd78bf3
C
1// Thanks: https://github.com/capaj/localstorage-polyfill
2
3const valuesMap = new Map()
4
5class MemoryStorage {
6 [key: string]: any
7 [index: number]: string
8
244b4ae3 9 getItem (key: any) {
0bd78bf3
C
10 const stringKey = String(key)
11 if (valuesMap.has(key)) {
12 return String(valuesMap.get(stringKey))
13 }
14
15 return null
16 }
17
244b4ae3 18 setItem (key: any, val: any) {
0bd78bf3
C
19 valuesMap.set(String(key), String(val))
20 }
21
244b4ae3 22 removeItem (key: any) {
0bd78bf3
C
23 valuesMap.delete(key)
24 }
25
26 clear () {
27 valuesMap.clear()
28 }
29
30 key (i: any) {
31 if (arguments.length === 0) {
32 throw new TypeError('Failed to execute "key" on "Storage": 1 argument required, but only 0 present.')
33 }
34
35 const arr = Array.from(valuesMap.keys())
36 return arr[i]
37 }
38
39 get length () {
40 return valuesMap.size
41 }
42}
43
44let peertubeLocalStorage: Storage
88a7f93f 45let peertubeSessionStorage: Storage
0bd78bf3
C
46try {
47 peertubeLocalStorage = localStorage
88a7f93f 48 peertubeSessionStorage = sessionStorage
0bd78bf3 49} catch (err) {
6189b699
C
50 const instanceLocalStorage = new MemoryStorage()
51 const instanceSessionStorage = new MemoryStorage()
0bd78bf3 52
6189b699
C
53 function proxify (instance: MemoryStorage) {
54 return new Proxy(instance, {
55 set: function (obj, prop: string | number, value) {
56 if (MemoryStorage.prototype.hasOwnProperty(prop)) {
57 instance[prop] = value
58 } else {
59 instance.setItem(prop, value)
60 }
61 return true
62 },
63 get: function (target, name: string | number) {
64 if (MemoryStorage.prototype.hasOwnProperty(name)) {
65 return instance[name]
66 }
67 if (valuesMap.has(name)) {
68 return instance.getItem(name)
69 }
0bd78bf3 70 }
6189b699
C
71 })
72 }
73
74 peertubeLocalStorage = proxify(instanceLocalStorage)
75 peertubeSessionStorage = proxify(instanceSessionStorage)
0bd78bf3
C
76}
77
88a7f93f
RK
78export {
79 peertubeLocalStorage,
80 peertubeSessionStorage
81}