Sophie

Sophie

distrib > Mageia > 5 > i586 > media > core-release > by-pkgid > b4603fcd3afb71dfbec25f4867b993f4 > files > 849

js_of_ocaml-doc-2.4.1-2.mga5.noarch.rpm

(* Js_of_ocaml examples
 * http://www.ocsigen.org/js_of_ocaml/
 * Copyright (C) 2008 Benjamin Canou
 *
 *           DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
 *  TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 *
 *)

module Html = Dom_html
let js = Js.string
let document = Html.window##document

let int_input name value =
  let res = document##createDocumentFragment() in
  Dom.appendChild res (document##createTextNode(js name));
  let input = Html.createInput ~_type:(js"text") document in
  input##value <- js (string_of_int !value);
  input##onchange <- Html.handler
    (fun _ ->
       begin try
         value := int_of_string (Js.to_string (input##value))
       with Invalid_argument _ ->
         ()
       end;
       input##value <- js (string_of_int !value);
       Js._false);
  Dom.appendChild res input;
  res

let button name callback =
  let res = document##createDocumentFragment() in
  let input = Html.createInput ~_type:(js"submit") document in
  input##value <- js name;
  input##onclick <- Html.handler callback;
  Dom.appendChild res input;
  res

let onload _ =
  let main =
    Js.Opt.get (document##getElementById(js"main"))
      (fun () -> assert false)
  in
  let nbr, nbc, nbm = ref 10, ref 12, ref 15 in
  Dom.appendChild main (int_input "Number of columns" nbr);
  Dom.appendChild main (Html.createBr document);
  Dom.appendChild main (int_input "Number of rows" nbc);
  Dom.appendChild main (Html.createBr document);
  Dom.appendChild main (int_input "Number of mines" nbm);
  Dom.appendChild main (Html.createBr document);
  Dom.appendChild main
    (button "nouvelle partie"
       (fun _ ->
          let div = Html.createDiv document in
          Dom.appendChild main div;
          Minesweeper.run div !nbc !nbr !nbm;
          Js._false));
  Js._false

let _ = Html.window##onload <- Html.handler onload