Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Page
Library
Module
Module type
Parameter
Class
Class type
Source
dom.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 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
open Js let setInnerHtml elt s = elt##.innerHTML := string s let setText elt = function | None -> () | Some s -> elt##.textContent := some (string s) let addClass elt s = elt##.classList##add (string s) let addClasses elt l = List.iter (addClass elt) l let removeClass elt s = elt##.classList##remove (string s) let containsClass elt s = elt##.classList##contains (string s) let setAttribute elt key value = elt##setAttribute (string key) (string value) let removeAttribute elt key = elt##removeAttribute (string key) let getAttribute elt key = Opt.to_option (elt##getAttribute (string key)) let setCSS elt styles = let styles = String.concat "; " (List.map (fun (k, v) -> k ^ ": " ^ v) styles) in setAttribute elt "style" styles let addCSS elt styles = let styles = String.concat "; " (List.map (fun (k, v) -> k ^ ": " ^ v) styles) in let styles = match getAttribute elt "style" with | None -> styles | Some old_styles -> old_styles ^ "; " ^ styles in setAttribute elt "style" styles let appendChild = Dom.appendChild let removeChild = Dom.removeChild let appendChildren parent children = List.iter (Dom.appendChild parent) children let children parent = Dom.list_of_nodeList parent##.childNodes let removeChildi parent i = match List.nth_opt (children parent) i with | None -> () | Some child -> removeChild parent child let removeChildren parent = List.iter (removeChild parent) (children parent) let replaceChildren parent children = removeChildren parent ; appendChildren parent children let by_id s = Dom_html.getElementById s let addListener elt ev f = ignore @@ Dom.addEventListener elt (Dom.Event.make ev) (Dom.handler (fun e -> bool (f e))) module El = struct let create ?(classes = []) ?(styles = []) ?(listen = []) ?(attr = []) ?text f children = let elt = f Dom_html.document in List.iter (fun (ev, f) -> addListener elt ev f) listen ; addClasses elt classes ; setCSS elt styles ; List.iter (fun (k, v) -> setAttribute elt k v) attr ; setText elt text ; appendChildren elt children ; elt let ?classes ?styles ?listen ?attr ?text children = create ?classes ?styles ?listen ?attr ?text Dom_html.createButton children let div ?classes ?styles ?listen ?attr ?text children = create ?classes ?styles ?listen ?attr ?text Dom_html.createDiv children let a ?classes ?styles ?listen ?attr ?text children = create ?classes ?styles ?listen ?attr ?text Dom_html.createA children let span ?classes ?styles ?listen ?attr ?text children = create ?classes ?styles ?listen ?attr ?text Dom_html.createSpan children let form ?classes ?styles ?listen ?attr ?text children = create ?classes ?styles ?listen ?attr ?text Dom_html.createForm children let option ?classes ?styles ?listen ?attr ?text children = create ?classes ?styles ?listen ?attr ?text Dom_html.createOption children let select ?classes ?styles ?listen ?attr ?text children = create ?classes ?styles ?listen ?attr ?text Dom_html.createSelect children let input ?classes ?styles ?listen ?attr ?text () = create ?classes ?styles ?listen ?attr ?text Dom_html.createInput [] let iframe ?classes ?styles ?listen ?attr ?text children = create ?classes ?styles ?listen ?attr ?text Dom_html.createIframe children let label ?classes ?styles ?listen ?attr ?text children = create ?classes ?styles ?listen ?attr ?text Dom_html.createLabel children let ul ?classes ?styles ?listen ?attr ?text children = create ?classes ?styles ?listen ?attr ?text Dom_html.createUl children let li ?classes ?styles ?listen ?attr ?text children = create ?classes ?styles ?listen ?attr ?text Dom_html.createLi children let img ?classes ?styles ?listen ?attr ?text children = create ?classes ?styles ?listen ?attr ?text Dom_html.createImg children let script ?classes ?styles ?listen ?attr ?text children = create ?classes ?styles ?listen ?attr ?text Dom_html.createScript children let table ?classes ?styles ?listen ?attr ?text children = create ?classes ?styles ?listen ?attr ?text Dom_html.createTable children let tr ?classes ?styles ?listen ?attr ?text children = create ?classes ?styles ?listen ?attr ?text Dom_html.createTr children let th ?classes ?styles ?listen ?attr ?text children = create ?classes ?styles ?listen ?attr ?text Dom_html.createTh children let td ?classes ?styles ?listen ?attr ?text children = create ?classes ?styles ?listen ?attr ?text Dom_html.createTd children end let encapse s = "\"" ^ s ^ "\"" let strings_to_array l = "[" ^ String.concat "," l ^ "]" let strings_to_object l = let s = "{" ^ String.concat "," (List.map (fun (k, v) -> encapse k ^ ":" ^ v) l) ^ "}" in try _JSON##parse (string s) with _ -> log_str ("cannot parse json " ^ s) ; Unsafe.obj [||]