Skip to content
This repository was archived by the owner on Oct 4, 2020. It is now read-only.

Commit 9bacd4e

Browse files
authored
Merge pull request #84 from purescript-contrib/webstorage
Add WebStorage API types & functions
2 parents b01899e + 318de6c commit 9bacd4e

File tree

10 files changed

+159
-8
lines changed

10 files changed

+159
-8
lines changed

.travis.yml

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,8 @@
11
language: node_js
22
dist: trusty
33
sudo: required
4-
node_js: 6
5-
env:
6-
- PATH=$HOME/purescript:$PATH
4+
node_js: stable
75
install:
8-
- TAG=$(wget -q -O - https://github.com/purescript/purescript/releases/latest --server-response --max-redirect 0 2>&1 | sed -n -e 's/.*Location:.*tag\///p')
9-
- wget -O $HOME/purescript.tar.gz https://github.com/purescript/purescript/releases/download/$TAG/linux64.tar.gz
10-
- tar -xvf $HOME/purescript.tar.gz -C $HOME/
11-
- chmod a+x $HOME/purescript
126
- npm install -g bower
137
- npm install
148
- bower install

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@
55
"build": "eslint src && pulp build --censor-lib --strict"
66
},
77
"devDependencies": {
8-
"phantomjs-prebuilt": "^2.1.13",
98
"eslint": "^3.8.1",
9+
"phantomjs-prebuilt": "^2.1.13",
1010
"pulp": "^9.0.1",
1111
"purescript-psa": "^0.3.9",
12+
"purescript": "^0.10.6",
1213
"rimraf": "^2.5.4"
1314
}
1415
}

src/DOM/HTML/Window.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,3 +189,15 @@ exports.url = function (window) {
189189
return window.URL;
190190
};
191191
};
192+
193+
exports.localStorage = function (window) {
194+
return function () {
195+
return window.localStorage;
196+
};
197+
};
198+
199+
exports.sessionStorage = function (window) {
200+
return function () {
201+
return window.sessionStorage;
202+
};
203+
};

src/DOM/HTML/Window.purs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,14 @@ module DOM.HTML.Window
2424
, scrollX
2525
, scrollY
2626
, url
27+
, localStorage
28+
, sessionStorage
2729
) where
2830

2931
import Control.Monad.Eff (Eff)
3032
import DOM (DOM)
3133
import DOM.HTML.Types (ALERT, CONFIRM, HISTORY, HTMLDocument, History, Location, Navigator, PROMPT, WINDOW, Window, URL)
34+
import DOM.WebStorage.Types (Storage)
3235
import Data.Maybe (Maybe)
3336
import Data.Nullable (Nullable, toMaybe)
3437
import Prelude (Unit, (<$>))
@@ -95,3 +98,7 @@ foreign import scrollBy :: forall eff. Int -> Int -> Window -> Eff (window :: WI
9598
foreign import scrollX :: forall eff. Window -> Eff (dom :: DOM | eff) Int
9699

97100
foreign import scrollY :: forall eff. Window -> Eff (dom :: DOM | eff) Int
101+
102+
foreign import localStorage :: forall eff. Window -> Eff (dom :: DOM | eff) Storage
103+
104+
foreign import sessionStorage :: forall eff. Window -> Eff (dom :: DOM | eff) Storage
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
"use strict";
2+
3+
exports.key = function (storage) {
4+
return function () {
5+
return storage.key;
6+
};
7+
};
8+
9+
exports.oldValue = function (storage) {
10+
return function () {
11+
return storage.oldValue;
12+
};
13+
};
14+
15+
exports.newValue = function (storage) {
16+
return function () {
17+
return storage.newValue;
18+
};
19+
};
20+
21+
exports.url = function (storage) {
22+
return function () {
23+
return storage.url;
24+
};
25+
};
26+
27+
exports.storageArea = function (storage) {
28+
return function () {
29+
return storage.storageArea;
30+
};
31+
};
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
module DOM.WebStorage.Event.StorageEvent
2+
( module DOM.WebStorage.Event.StorageEvent
3+
, module DOM.WebStorage.Event.Types
4+
, module DOM.WebStorage.Types
5+
) where
6+
7+
import DOM.WebStorage.Types (Storage)
8+
import DOM.WebStorage.Event.Types (StorageEvent)
9+
10+
import Data.Nullable (Nullable)
11+
12+
foreign import key :: StorageEvent -> Nullable String
13+
foreign import oldValue :: StorageEvent -> Nullable String
14+
foreign import newValue :: StorageEvent -> Nullable String
15+
foreign import url :: StorageEvent -> String
16+
foreign import storageArea :: StorageEvent -> Nullable Storage

src/DOM/WebStorage/Event/Types.purs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
module DOM.WebStorage.Event.Types where
2+
3+
import Data.Foreign (Foreign, F, unsafeReadTagged)
4+
5+
import DOM.Event.Types (Event)
6+
7+
import Unsafe.Coerce as U
8+
9+
foreign import data StorageEvent :: Type
10+
11+
readStorageEvent :: Foreign -> F StorageEvent
12+
readStorageEvent = unsafeReadTagged "StorageEvent"
13+
14+
storageEventToEvent :: StorageEvent -> Event
15+
storageEventToEvent = U.unsafeCoerce

src/DOM/WebStorage/Storage.js

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
"use strict";
2+
3+
exports.length = function (storage) {
4+
return function () {
5+
return storage.length;
6+
};
7+
};
8+
9+
exports.key = function (index) {
10+
return function (storage) {
11+
return function () {
12+
return storage.key(index);
13+
};
14+
};
15+
};
16+
17+
exports.getItem = function (key) {
18+
return function (storage) {
19+
return function () {
20+
return storage.getItem(key);
21+
};
22+
};
23+
};
24+
25+
exports.setItem = function (key) {
26+
return function (value) {
27+
return function (storage) {
28+
return function () {
29+
storage.setItem(key, value);
30+
};
31+
};
32+
};
33+
};
34+
35+
exports.removeItem = function (key) {
36+
return function (storage) {
37+
return function () {
38+
storage.removeItem(key);
39+
};
40+
};
41+
};
42+
43+
exports.clear = function (storage) {
44+
return function () {
45+
storage.clear();
46+
};
47+
};

src/DOM/WebStorage/Storage.purs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
module DOM.WebStorage.Storage
2+
( module DOM.WebStorage.Storage
3+
, module DOM.WebStorage.Types
4+
) where
5+
6+
import Prelude
7+
8+
import Control.Monad.Eff (Eff)
9+
10+
import DOM (DOM)
11+
import DOM.WebStorage.Types (Storage)
12+
13+
import Data.Nullable (Nullable)
14+
15+
foreign import length :: forall eff. Storage -> Eff (dom :: DOM | eff) Int
16+
foreign import key :: forall eff. Int -> Storage -> Eff (dom :: DOM | eff) (Nullable String)
17+
foreign import getItem :: forall eff. String -> Storage -> Eff (dom :: DOM | eff) (Nullable String)
18+
foreign import setItem :: forall eff. String -> String -> Storage -> Eff (dom :: DOM | eff) Unit
19+
foreign import removeItem :: forall eff. String -> Storage -> Eff (dom :: DOM | eff) Unit
20+
foreign import clear :: forall eff. Storage -> Eff (dom :: DOM | eff) Unit

src/DOM/WebStorage/Types.purs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
module DOM.WebStorage.Types where
2+
3+
import Data.Foreign (Foreign, F, unsafeReadTagged)
4+
5+
foreign import data Storage :: Type
6+
7+
readStorage :: Foreign -> F Storage
8+
readStorage = unsafeReadTagged "Storage"

0 commit comments

Comments
 (0)