package ezjs_extension

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

Source file storage_local.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
open Ezjs_min

let local_storage f =
  match Optdef.to_option Dom_html.window##.localStorage with
  | None -> ()
  | Some storage -> f storage

let get_item_storage storage key =
  match Opt.to_option @@ storage##getItem (string key) with
  | None -> Printf.printf "no storage value for %S" key; None
  | Some v ->
    if v = string "undefined" || v = string "null" then None
    else Some (_JSON##parse v)

let get_item key f = local_storage @@ fun storage ->
  match get_item_storage storage key with
  | None -> ()
  | Some v -> f v

let get_items keys f = local_storage @@ fun storage ->
  let l = List.map (fun k -> k, Unsafe.inject @@ Optdef.option @@ get_item_storage storage k) keys in
  f @@ Unsafe.obj (Array.of_list l)

let get_keys f = local_storage @@ fun storage ->
  let n = storage##.length in
  let l = List.init n (fun i -> storage##key i) in
  f @@ List.rev @@ List.fold_left (fun acc x -> match Opt.to_option x with
      | None -> acc
      | Some s -> to_string s :: acc) [] l

let set_item key value = local_storage @@ fun storage ->
  storage##setItem (string key) (_JSON##stringify value)

let get ?key _ f = match key with
  | Some k -> get_item k f
  | None -> get_keys (fun keys -> get_items keys f)

let get_arr ?keys _ f = match keys with
  | Some ks -> get_items ks f
  | None -> get_keys (fun keys -> get_items keys f)

let get_o ?obj _ f = match obj with
  | Some o -> let keys = List.map to_string @@ Array.to_list (to_array (object_keys o)) in
    get_items keys f
  | None -> get_keys (fun keys -> get_items keys f)

let set ?callback _ o =
  let keys = Array.to_list (to_array (object_keys o)) in
  List.iter (fun k ->
      let v = Unsafe.get o k in
      set_item (to_string k) v) keys;
  match callback with None -> () | Some f -> f ()

let remove ?callback _ s = local_storage @@ fun storage ->
  storage##removeItem (string s);
  match callback with None -> () | Some f -> f ()

let clear ?callback _ = local_storage @@ fun storage ->
  storage##clear;
  match callback with None -> () | Some f -> f ()

let sync = ()
let local = ()
OCaml

Innovation. Community. Security.