Permalink
Browse files

End of reorganisation

Now:
- try-ocaml contains the toplevel for Try OCaml
- try-js_of_ocaml contains the toplevel for Try Js_of_ocaml
  • Loading branch information...
1 parent 352ddbd commit a985e78908285a190468f9d5c80bfbba86e5cbd1 @lefessan lefessan committed May 10, 2012
Showing with 784 additions and 908 deletions.
  1. +20 −4 Makefile
  2. +1 −1 Makefile.tryocaml
  3. +1 −1 js_of_ocaml-lessons/lesson1/lesson.html
  4. +0 −1 js_of_ocaml-lessons/lesson1/lesson.html.fr
  5. +24 −17 js_of_ocaml-lessons/lesson1/step1/step.html
  6. +0 −19 js_of_ocaml-lessons/lesson1/step1/step.html.fr
  7. +2 −1 js_of_ocaml-lessons/lesson1/step1/step.ml
  8. +22 −7 js_of_ocaml-lessons/lesson1/step2/step.html
  9. +0 −9 js_of_ocaml-lessons/lesson1/step2/step.html.fr
  10. +0 −26 js_of_ocaml-lessons/lesson1/step3/step.html
  11. +0 −26 js_of_ocaml-lessons/lesson1/step3/step.html.fr
  12. +0 −2 js_of_ocaml-lessons/lesson1/step3/step.ml
  13. +0 −16 js_of_ocaml-lessons/lesson1/step4/step.html
  14. +0 −37 js_of_ocaml-lessons/lesson1/step4/step.html.fr
  15. +0 −3 js_of_ocaml-lessons/lesson1/step4/step.ml
  16. +0 −16 js_of_ocaml-lessons/lesson1/step5/step.html
  17. +0 −37 js_of_ocaml-lessons/lesson1/step5/step.html.fr
  18. +0 −3 js_of_ocaml-lessons/lesson1/step5/step.ml
  19. +0 −15 js_of_ocaml-lessons/lesson1/step6/step.html
  20. +0 −16 js_of_ocaml-lessons/lesson1/step6/step.html.fr
  21. +0 −1 js_of_ocaml-lessons/lesson1/step6/step.ml
  22. +18 −14 js_of_ocaml-lessons/lesson2/step1/step.html
  23. +0 −24 js_of_ocaml-lessons/lesson2/step2/step.html
  24. +0 −3 js_of_ocaml-lessons/lesson2/step2/step.ml
  25. +0 −24 js_of_ocaml-lessons/lesson2/step3/step.html
  26. +0 −3 js_of_ocaml-lessons/lesson2/step3/step.ml
  27. +0 −34 js_of_ocaml-lessons/lesson2/step4/step.html
  28. +0 −3 js_of_ocaml-lessons/lesson2/step4/step.ml
  29. +0 −31 js_of_ocaml-lessons/lesson2/step5/step.html
  30. +0 −2 js_of_ocaml-lessons/lesson2/step5/step.ml
  31. +0 −20 js_of_ocaml-lessons/lesson2/step6/step.html
  32. +0 −4 js_of_ocaml-lessons/lesson2/step6/step.ml
  33. +0 −20 js_of_ocaml-lessons/lesson2/step7/step.html
  34. +0 −3 js_of_ocaml-lessons/lesson2/step7/step.ml
  35. +0 −12 js_of_ocaml-lessons/lesson2/step8/step.html
  36. +0 −3 js_of_ocaml-lessons/lesson2/step8/step.ml
  37. +1 −1 js_of_ocaml-lessons/lesson3/lesson.html
  38. +3 −17 js_of_ocaml-lessons/lesson3/step1/step.html
  39. +0 −18 js_of_ocaml-lessons/lesson3/step1/step.html.fr
  40. +2 −2 js_of_ocaml-lessons/lesson3/step1/step.ml
  41. +0 −17 js_of_ocaml-lessons/lesson3/step2/step.html
  42. +0 −20 js_of_ocaml-lessons/lesson3/step2/step.html.fr
  43. +0 −2 js_of_ocaml-lessons/lesson3/step2/step.ml
  44. +0 −17 js_of_ocaml-lessons/lesson3/step3/step.html
  45. +0 −19 js_of_ocaml-lessons/lesson3/step3/step.html.fr
  46. +0 −2 js_of_ocaml-lessons/lesson3/step3/step.ml
  47. +0 −28 js_of_ocaml-lessons/lesson3/step4/step.html
  48. +0 −28 js_of_ocaml-lessons/lesson3/step4/step.html.fr
  49. +0 −2 js_of_ocaml-lessons/lesson3/step4/step.ml
  50. +0 −11 js_of_ocaml-lessons/lesson3/step5/step.html
  51. +0 −11 js_of_ocaml-lessons/lesson3/step5/step.html.fr
  52. +0 −2 js_of_ocaml-lessons/lesson3/step5/step.ml
  53. +0 −35 js_of_ocaml-lessons/lesson3/step6/step.html
  54. +0 −36 js_of_ocaml-lessons/lesson3/step6/step.html.fr
  55. +0 −2 js_of_ocaml-lessons/lesson3/step6/step.ml
  56. +1 −1 js_of_ocaml-lessons/lesson4/lesson.html
  57. +3 −26 js_of_ocaml-lessons/lesson4/step1/step.html
  58. +1 −1 js_of_ocaml-lessons/lesson4/step1/step.ml
  59. +0 −21 js_of_ocaml-lessons/lesson4/step2/step.html
  60. +0 −2 js_of_ocaml-lessons/lesson4/step2/step.ml
  61. +0 −32 js_of_ocaml-lessons/lesson4/step3/step.html
  62. +0 −3 js_of_ocaml-lessons/lesson4/step3/step.ml
  63. +0 −33 js_of_ocaml-lessons/lesson4/step4/step.html
  64. +0 −2 js_of_ocaml-lessons/lesson4/step4/step.ml
  65. +0 −17 js_of_ocaml-lessons/lesson4/step5/step.html
  66. +0 −2 js_of_ocaml-lessons/lesson4/step5/step.ml
  67. +0 −22 js_of_ocaml-lessons/lesson4/step6/step.html
  68. +0 −2 js_of_ocaml-lessons/lesson4/step6/step.ml
  69. +8 −5 ocp-jslib/cookie.ml
  70. +1 −3 ocp-jslib/cookie.mli
  71. +19 −0 ocp-jslib/utils.ml
  72. +7 −4 ocp-jslib/utils.mli
  73. +6 −0 try-js_of_ocaml/Makefile
  74. +356 −0 try-js_of_ocaml/bootstrap.css
  75. BIN {toplevel → try-js_of_ocaml}/images/arrow.png
  76. BIN {toplevel → try-js_of_ocaml}/images/delicious.png
  77. BIN {toplevel → try-js_of_ocaml}/images/digg.png
  78. BIN {toplevel → try-js_of_ocaml}/images/facebook.png
  79. BIN {toplevel → try-js_of_ocaml}/images/flickr.png
  80. BIN {toplevel → try-js_of_ocaml}/images/friendfeed.png
  81. BIN {toplevel → try-js_of_ocaml}/images/github.png
  82. BIN {toplevel → try-js_of_ocaml}/images/left1.png
  83. BIN {toplevel → try-js_of_ocaml}/images/left2.png
  84. BIN {toplevel → try-js_of_ocaml}/images/linkedin.png
  85. BIN {toplevel → try-js_of_ocaml}/images/myspace.png
  86. BIN {toplevel → try-js_of_ocaml}/images/ocaml_code.png
  87. BIN {toplevel → try-js_of_ocaml}/images/reddit.png
  88. BIN {toplevel → try-js_of_ocaml}/images/right1.png
  89. BIN {toplevel → try-js_of_ocaml}/images/right2.png
  90. BIN {toplevel → try-js_of_ocaml}/images/rssfeed.png
  91. BIN {toplevel → try-js_of_ocaml}/images/slashdot.png
  92. BIN {toplevel → try-js_of_ocaml}/images/stumbleupon.png
  93. BIN {toplevel → try-js_of_ocaml}/images/technorati.png
  94. BIN {toplevel → try-js_of_ocaml}/images/twitter.png
  95. +130 −0 try-js_of_ocaml/index.html
  96. +155 −0 try-js_of_ocaml/style.css
  97. BIN try-ocaml/images/arrow.png
  98. BIN try-ocaml/images/delicious.png
  99. BIN try-ocaml/images/digg.png
  100. BIN try-ocaml/images/facebook.png
  101. BIN try-ocaml/images/flickr.png
  102. BIN try-ocaml/images/friendfeed.png
  103. BIN try-ocaml/images/github.png
  104. BIN try-ocaml/images/left1.png
  105. BIN try-ocaml/images/left2.png
  106. BIN try-ocaml/images/linkedin.png
  107. BIN try-ocaml/images/myspace.png
  108. BIN try-ocaml/images/ocaml_code.png
  109. BIN try-ocaml/images/reddit.png
  110. BIN try-ocaml/images/right1.png
  111. BIN try-ocaml/images/right2.png
  112. BIN try-ocaml/images/rssfeed.png
  113. BIN try-ocaml/images/slashdot.png
  114. BIN try-ocaml/images/stumbleupon.png
  115. BIN try-ocaml/images/technorati.png
  116. BIN try-ocaml/images/twitter.png
  117. +3 −4 tutorial/Makefile
View
@@ -10,11 +10,27 @@ all:
$(MAKE) -C try-js_of_ocaml
clean:
- $(MAKE) -C tryocaml clean
+ $(MAKE) -C js_of_ocaml clean
+ $(MAKE) -C cmicomp clean
+ $(MAKE) -C ocp-jslib clean
+ $(MAKE) -C toplevel clean
+ $(MAKE) -C ocaml-num clean
+ $(MAKE) -C tutorial clean
+ $(MAKE) -C try-ocaml clean
+ $(MAKE) -C try-js_of_ocaml clean
+
depend:
- $(MAKE) -C depend
+ $(MAKE) -C js_of_ocaml depend
+ $(MAKE) -C cmicomp depend
+ $(MAKE) -C ocp-jslib depend
+ $(MAKE) -C toplevel depend
+ $(MAKE) -C ocaml-num depend
+ $(MAKE) -C tutorial depend
+ $(MAKE) -C try-ocaml depend
+ $(MAKE) -C try-js_of_ocaml depend
update-lessons:
- touch lessons/goodies.ml
- $(MAKE) -C tryocaml tuto tryocaml
+ touch ocaml-lessons/goodies.ml
+ $(MAKE) -C try-ocaml
+
View
@@ -104,5 +104,5 @@ $(TRYOCAML_NAME).byte: $(TOPLEVEL_CMIS) $(TOPLEVEL_CMOS) $(TOPLEVEL_CMAS) \
$(EXPUNGE) $@.tmp $@ $(TOPLEVEL_MODULES) $(TRYOCAML_EXTRA_MODULES)
rm -f $@.tmp
-byte: lessons.cmo try-ocaml.byte
+byte: lessons.cmo $(TRYOCAML_NAME).byte
@@ -1 +1 @@
-<h3>Simple Expressions</h3>
+<h3>A moving box</h3>
@@ -1 +0,0 @@
-<h3>Expressions Simples</h3>
@@ -1,17 +1,24 @@
-<h3>Simple Expressions</h3>
-
-<p>Numerical expressions are easy to compute in OCaml. For example:</p>
-
-<p><code>1+2</code></p>
-
-<br/>
-
-<p>Strings are also easy to define. For example, you can define a string with your name:</p>
-
-<p><code>"Mary"</code></p>
-
-<br/>
-
-<p>The basic element of a string is a char:</p>
-
-<p><code>'a'</code></p>
+<h3>A moving box</h3>
+
+<pre><code>
+open Utils
+
+let canvas = Dom_html.createCanvas doc
+let body = get_element_by_id "main-title"
+let context = canvas##getContext (Dom_html._2d_)
+
+let x = ref 10.
+let y = ref 60.
+
+let redraw _ =
+ context##clearRect (!x, !y, 20., 20. );
+ x := if !x > 400. then 0. else !x +. 2.;
+ y := if !y > 150. then 0. else !y +. 1.;
+ context##fillStyle <- Js.string "red";
+ context##fillRect (!x,!y, 20., 20.)
+
+let _ =
+ Dom.appendChild body canvas;
+ let _ = window##setInterval (_f redraw, 2.5) in
+ ()
+</code></pre>
@@ -1,19 +0,0 @@
-<h3>Expressions Simples</h3>
-
-<p>Les expressions numeriques sont faciles à écrire en OCaml. Par
-exemple :</p>
-
-<p><code>1+2</code></p>
-
-<br/>
-
-<p>Les chaînes (<em>string</em>) sont aussi faciles à créer. Par
-exemple, vous pouvez créer une chaîne avec votre prénom :</p>
-
-<p><code>"Mary"</code></p>
-
-<br/>
-
-<p>L'élément de base d'une chaîne est le caractère (<em>char</em>) :</p>
-
-<p><code>'a'</code></p>
@@ -1,2 +1,3 @@
fun input output ->
- find_in "- : char =" output
+ false
+
@@ -1,9 +1,24 @@
-<h3>Lists and arrays</h3>
+<h3>A moving box</h3>
-<p>Lists and arrays are predefined data structures, for
-example you can have a list of integers:</p>
-<p><code>[ 42; 1; 55 ]</code></p>
+<pre><code>
+open Utils
+let canvas = Dom_html.createCanvas doc
+let body = get_element_by_id "main-title"
+let context = canvas##getContext (Dom_html._2d_)
-<br />
-<p>An array of strings:<p>
-<p><code>[|"John"; "Doe"|]</code></p>
+let x = ref 10.
+let y = ref 60.
+
+let redraw _ =
+ context##clearRect (!x, !y, 20., 20. );
+ x := if !x > 400. then 0. else !x +. 2.;
+ y := if !y > 150. then 0. else !y +. 1.;
+ context##fillStyle <- Js.string "red";
+ context##fillRect (!x,!y, 20., 20.)
+
+let _ =
+ Dom.appendChild body canvas;
+ let stop = setInterval redraw 2.5 in
+ Dom.appendChild body (Button.create "Stop" stop);
+ setTimeout stop 50000.
+</code></pre>
@@ -1,9 +0,0 @@
-<h3>Listes et tableaux</h3>
-
-<p>Les listes et tableaux sont des structures de données
- prédéfinies. Par exemple on peut avoir une liste d'entier:</p>
-<p><code>[ 42; 1; 55 ]</code></p>
-
-<br />
-<p>Un tableau de chaîne de caractères:<p>
-<p><code>[|"John"; "Doe"|]</code></p>
@@ -1,26 +0,0 @@
-<h3>Operations on lists</h3>
-
-<p>You can use some predefined functions on lists such as reversing the list</p>
-<p><code>List.rev [1; 2; 3]</code></p>
-
-<br />
-<p>Get the first element of the list:</p>
-<p><code>List.hd [1; 2; 3]</code></p>
-
-<br />
-<h3>Operations on arrays</h3>
-
-<p>You can also use some predefined functions on arrays such as
-concatenate two arrays</p>
-<p><code>Array.append [| 1; 2 |] [| 3; 4; 5 |]</code></p>
-
-<br />
-<p>To get the element number <code>i</code> of an array, you have two
-ways to do this (don't forget, the first element has number <code>0</code>):</p>
-<p><code>Array.get [| 42; 51; 32 |] 2 </code></p>
-
-<p>or</p>
-
-<p><code>[| 42; 51; 32 |].(2) </code></p>
-
-
@@ -1,26 +0,0 @@
-<h3>Opérations sur les listes</h3>
-
-<p><p>On retrouve des fonctions prédéfinies sur les listes tels que le
- renversement d'une liste:</p>
-<p><code>List.rev [1; 2; 3]</code></p>
-
-<br />
-<p>Récupérer le premier élement d'une liste:</p>
-<p><code>List.hd [1; 2; 3]</code></p>
-
-<br />
-<h3>Opérations sur les tableaux</h3>
-
-<p><p>On a également des fonctions prédéfinies sur les tableaux, comme
- la concaténation de deux tableaux:</p>
-<p><code>Array.append [| 1; 2 |] [| 3; 4; 5 |]</code></p>
-
-<br />
-<p>Il existe deux façons de faire pour récupérer le ième
- d'une tableau: (ne pas oublier que le premier élément est à la
- position <code>0</code>):</p>
-<p><code>Array.get [| 42; 51; 32 |] 2 </code></p>
-
-<p>ou</p>
-
-<p><code>[| 42; 51; 32 |].(2) </code></p>
@@ -1,2 +0,0 @@
-fun input output ->
- find_in "- : int = 32" output
@@ -1,16 +0,0 @@
-<h3>Basic operations on strings</h3>
-
-<p>Strings are sequences of chars. It is possible to create a
-string from just one char, using:</p>
-<p><code>String.make 10 'x'</code></p>
-
-<br />
-<p>Strings can also be created by joining other strings:</p>
-<p><code>"Mary" ^ " and " ^ "John"</code></p>
-
-<br />
-<p>It might also be interesting to get the length of a string:</p>
-
-<p><code>String.length "abcdefghijklmnopqstuvwxyz"</code></p>
-
-<p>(and yes, one character is missing !)</p>
@@ -1,37 +0,0 @@
-<h3>Opérations sur les chaînes de caractères</h3>
-
-<p>Les chaînes de caractères sont des séquences de caractères. Il est
- tout à fait possible de créer une chaîne de caractère à partir d'un
- seul caractère, en utilisant:</p>
-<p><code>String.make 10 'x'</code></p>
-
-<br />
-
-<p>Les chaînes de caractères peuvent également être créér en
- concaténant plusieurs autres chaînes:</p>
-<p><code>"Mary" ^ " and " ^ "John"</code></p>
-
-<br />
-<p>Il peut être intéressant de récuperer la taille d'une chaîne de
- caractère:</p>
-
-<p><code>String.length "abcdefghijklmnopqstuvwxyz"</code></p>
-
-<p>(et oui, il manque un caractère !)</p>
-
-<br />
-<p>Il y a bien sûr d'autres opérations disponibles sur les chaînes de
- caractères, comme une fonction qui retourne une copie de l'argument,
- avec toutes les majuscules transformées en minuscules:</p>
-<p><code>String.lowercase "MARY"</code></p>
-
-<br />
-<p>Voyons un exemple plus pratique, qui génère un nom de fichier à
- partir d'un composant:</p>
-<p><code>String.concat "/" [""; "usr"; "local"; "bin"]</code></p>
-<p>Notez que le second argument est une liste de chaînes de caractères</p>
-
-<br />
-<p>Il peut être parfois utile d'extraire un entier depuis une chaîne
- de caractères. Pour cela rien de plus simple:</p>
-<p><code>int_of_string "546"</code></p>
@@ -1,3 +0,0 @@
-fun input output ->
- find_in "- : int =" output
-
@@ -1,16 +0,0 @@
-<h3>More operations on strings</h3>
-
-<p>There are many operations available on strings, like a function
-which returns a copy of the argument, with all uppercase letters
-translated to lowercase:</p>
-<p><code>String.lowercase "MARY"</code></p>
-
-<br />
-<p>Here's a more practical example, generating a filename from components: </p>
-<p><code>String.concat "/" [""; "usr"; "local"; "bin"]</code></p>
-<p>Note that the second argument is a list of strings.</p>
-
-<br />
-<p>It is sometimes useful to extract an integer from a string. This is
-easy in OCaml:</p>
-<p><code>int_of_string "546"</code></p>
@@ -1,37 +0,0 @@
-<h3>Opérations sur les chaînes de caractères</h3>
-
-<p>Les chaînes de caractères sont des séquences de caractères. Il est
- tout à fait possible de créer une chaîne de caractère à partir d'un
- seul caractère, en utilisant:</p>
-<p><code>String.make 10 'x'</code></p>
-
-<br />
-
-<p>Les chaînes de caractères peuvent également être créér en
- concaténant plusieurs autres chaînes:</p>
-<p><code>"Mary" ^ " and " ^ "John"</code></p>
-
-<br />
-<p>Il peut être intéressant de récuperer la taille d'une chaîne de
- caractère:</p>
-
-<p><code>String.length "abcdefghijklmnopqstuvwxyz"</code></p>
-
-<p>(et oui, il manque un caractère !)</p>
-
-<br />
-<p>Il y a bien sûr d'autres opérations disponibles sur les chaînes de
- caractères, comme une fonction qui retourne une copie de l'argument,
- avec toutes les majuscules transformées en minuscules:</p>
-<p><code>String.lowercase "MARY"</code></p>
-
-<br />
-<p>Voyons un exemple plus pratique, qui génère un nom de fichier à
- partir d'un composant:</p>
-<p><code>String.concat "/" [""; "usr"; "local"; "bin"]</code></p>
-<p>Notez que le second argument est une liste de chaînes de caractères</p>
-
-<br />
-<p>Il peut être parfois utile d'extraire un entier depuis une chaîne
- de caractères. Pour cela rien de plus simple:</p>
-<p><code>int_of_string "546"</code></p>
@@ -1,3 +0,0 @@
-fun input output ->
- find_in "- : int =" output
-
@@ -1,15 +0,0 @@
-<h3>Operations on Tuples</h3>
-
-<p>A tuple consists of values (zero or more), enclosed in parentheses
-and separated by commas. Note that you can have differents types for
-each element, remember</p>
-<p><code>(42, "John", true)</code></p>
-
-<br />
-<p>When you have a pair (a tuple with two elements), you can use some
-predefined functions like get the first element:</p>
-<p><code>fst (42, "John")</code></p>
-
-<br />
-<p>Or the second element:</p>
-<p><code>snd (42, "John")</code></p>
@@ -1,16 +0,0 @@
-<h3>Operations sur les tuples</h3>
-
-<p>Un tuple est constitué de valeurs (zéro ou plus), entre parenthèses
-et séparés par des virgules. Notez que vous pouvez avoir différents types pour
-chaque élément, par exemple :<p>
-<p><code>(42, "John", true)</code></p>
-
-<br />
-<p>Quand vous avez une pair (un tuple avec deux éléments), il existe
- quelques fonctions prédéfinies, comme une fonction pour récupérer le
- premier élément:</p>
-<p><code>fst (42, "John")</code></p>
-
-<br />
-<p>Ou le second élément:</p>
-<p><code>snd (42, "John")</code></p>
@@ -1 +0,0 @@
-fun input output -> find_in "- : string =" output
@@ -1,17 +1,21 @@
-<h3>Variables</h3>
+<h3>Play with Cookies</h3>
-<p>As in other languages, you can associate a name to a value. To do
-that, we use the <code>let</code> syntax which associates the result
-of some computation with a name:</p>
+<pre><code>
+open Utils
-<p><code>let x = 6 * 7</code></p>
+let _ =
+ let title = get_element_by_id "main-title" in
+ let v = try
+ int_of_string (List.assoc "counter" (Cookie.get_cookie () ))
+ with Not_found -> 0 in
-<br />
-
-<p>We can now check the value associated with <code>x</code> in the
-toplevel:</p>
-<p><code>x</code></p>
-
-<br />
-<p>And we can use the name where we would like the value:</p>
-<p><code>let y = x + 1</code></p>
+ let v = v + 1 in
+ Cookie.set_cookie "counter" (string_of_int v);
+ title##innerHTML <- _s (
+ Printf.sprintf "This is your %s time in TryOCaml"
+ (match v with
+ 1 -> "first"
+ | 2 -> "second"
+ | 3 -> "third"
+ | _ -> string_of_int v ^ "th"))
+</code></pre>
Oops, something went wrong.

0 comments on commit a985e78

Please sign in to comment.