From f450d07ee85cfd10c39389436ce24f4d3c06aaac Mon Sep 17 00:00:00 2001 From: Vincent Balat Date: Fri, 13 Sep 2024 15:27:16 +0200 Subject: [PATCH] Tuto 8.0 --- tutos/8.0/manual/application.wiki | 1170 ++++++++++++++++ tutos/8.0/manual/basics-server.wiki | 797 +++++++++++ tutos/8.0/manual/basics.md | 0 tutos/8.0/manual/basics.wiki | 1245 +++++++++++++++++ tutos/8.0/manual/chat.wiki | 116 ++ tutos/8.0/manual/custom-conf.wiki | 89 ++ tutos/8.0/manual/files/2014-epita-video.png | Bin 0 -> 119932 bytes tutos/8.0/manual/files/screenshots/.directory | 4 + .../files/screenshots/start-mobile-1.png | Bin 0 -> 47486 bytes .../files/screenshots/start-mobile-2.png | Bin 0 -> 69243 bytes .../files/screenshots/start-mobile-3.png | Bin 0 -> 326008 bytes .../files/screenshots/start-mobile-4.png | Bin 0 -> 163555 bytes .../files/screenshots/start-mobile-5.png | Bin 0 -> 106144 bytes .../files/screenshots/start-mobile-6.png | Bin 0 -> 105954 bytes .../files/screenshots/start-mobile-7.png | Bin 0 -> 133747 bytes .../files/screenshots/start-mobile-8.png | Bin 0 -> 70206 bytes tutos/8.0/manual/files/screenshots/start1.png | Bin 0 -> 75499 bytes tutos/8.0/manual/files/screenshots/start2.png | Bin 0 -> 135117 bytes tutos/8.0/manual/files/screenshots/start3.png | Bin 0 -> 289560 bytes tutos/8.0/manual/files/screenshots/start4.png | Bin 0 -> 138790 bytes tutos/8.0/manual/files/screenshots/start5.png | Bin 0 -> 118282 bytes tutos/8.0/manual/files/screenshots/start6.png | Bin 0 -> 160446 bytes .../8.0/manual/files/tutorial/chapter1/README | 1 + .../chapter1/distillery-no-oclosure/Makefile | 242 ++++ .../distillery-no-oclosure/Makefile.options | 57 + .../chapter1/distillery-no-oclosure/README | 59 + .../distillery-no-oclosure/graffiti.conf.in | 28 + .../distillery-no-oclosure/graffiti.eliom | 146 ++ .../distillery-no-oclosure/update-symlinks.sh | 4 + .../chapter1/distillery-oclosure/Makefile | 242 ++++ .../distillery-oclosure/Makefile.options | 57 + .../chapter1/distillery-oclosure/README | 59 + .../distillery-oclosure/graffiti.conf.in | 28 + .../distillery-oclosure/graffiti.eliom | 163 +++ .../distillery-oclosure/update-symlinks.sh | 4 + .../tutorial/chapter1/no_oclosure/.depend | 8 + .../tutorial/chapter1/no_oclosure/Makefile | 133 ++ .../chapter1/no_oclosure/graffiti.conf | 38 + .../chapter1/no_oclosure/graffiti.eliom | 124 ++ .../files/tutorial/chapter1/start/Makefile | 2 + .../tutorial/chapter1/start/graffiti.conf | 29 + .../files/tutorial/chapter1/start/graffiti.ml | 10 + .../tutorial/chapter1/with_oclosure/.depend | 8 + .../tutorial/chapter1/with_oclosure/Makefile | 144 ++ .../chapter1/with_oclosure/graffiti.conf | 38 + .../chapter1/with_oclosure/graffiti.eliom | 163 +++ .../manual/files/tutorial/chapter2/Makefile | 240 ++++ .../files/tutorial/chapter2/Makefile.options | 61 + .../tutorial/chapter2/static/css/tuto.css | 3 + .../files/tutorial/chapter2/tuto.conf.in | 28 + .../manual/files/tutorial/chapter2/tuto.eliom | 210 +++ .../8.0/manual/files/tutorial/chapter3/README | 1 + .../tutorial/chapter3/multigraffiti/Makefile | 68 + .../chapter3/multigraffiti/Makefile.common | 165 +++ .../tutorial/chapter3/multigraffiti/client.ml | 80 ++ .../tutorial/chapter3/multigraffiti/common.ml | 4 + .../chapter3/multigraffiti/css/common.css | 41 + .../chapter3/multigraffiti/css/graffiti.css | 21 + .../chapter3/multigraffiti/css/hsvpalette.css | 179 +++ .../chapter3/multigraffiti/css/slider.css | 45 + .../chapter3/multigraffiti/graffiti.conf.in | 35 + .../chapter3/multigraffiti/graffiti.eliom | 36 + .../multigraffiti/images/hsv-sprite-sm.png | Bin 0 -> 19537 bytes .../tutorial/chapter3/multigraffiti/server.ml | 205 +++ .../multigraffiti_audio/graffiti.eliom | 43 + .../chapter3/multigraffiti_feed/Makefile | 68 + .../chapter3/multigraffiti_feed/feed.ml | 108 ++ .../multigraffiti_feed/graffiti.eliom | 42 + .../chapter3/multigraffiti_macaque/Makefile | 68 + .../multigraffiti_macaque/create_table.sql | 5 + .../multigraffiti_macaque/graffiti.conf.in | 36 + .../chapter3/multigraffiti_macaque/server.ml | 236 ++++ .../multigraffiti_ocsipersist/server.ml | 208 +++ .../reactive_media_player.eliom | 107 ++ .../files/tutorial/client-server-req.svg | 577 ++++++++ .../manual/files/tutorial/client-server.png | Bin 0 -> 54985 bytes .../manual/files/tutorial/client-server.svg | 684 +++++++++ .../files/tutorial/static/css/common.css | 41 + .../files/tutorial/static/css/graffiti.css | 68 + .../files/tutorial/static/css/hsvpalette.css | 179 +++ .../files/tutorial/static/css/slider.css | 45 + .../tutorial/static/images/hsv-sprite-sm.png | Bin 0 -> 19537 bytes .../files/tutorial/tutowidgets/ex-final.png | Bin 0 -> 19671 bytes .../manual/files/tutorial/tutowidgets/ex.css | 30 + .../manual/files/tutorial/tutowidgets/ex1.png | Bin 0 -> 12472 bytes .../manual/files/tutorial/tutowidgets/ex2.png | Bin 0 -> 15659 bytes tutos/8.0/manual/hash-password.wiki | 27 + ...e-a-cryptographically-safe-identifier.wiki | 3 + .../how-does-a-page-s-source-code-look.wiki | 81 ++ tutos/8.0/manual/how-to-add-a-div.wiki | 25 + tutos/8.0/manual/how-to-add-a-favicon.wiki | 16 + .../how-to-add-a-javascript-script.wiki | 30 + tutos/8.0/manual/how-to-add-a-list.wiki | 70 + ...to-add-a-select-or-other-form-element.wiki | 42 + tutos/8.0/manual/how-to-add-an-image.wiki | 46 + .../8.0/manual/how-to-add-css-stylesheet.wiki | 45 + ...o-attach-ocaml-values-to-dom-elements.wiki | 14 + ...-to-the-html-nodes-sent-to-the-client.wiki | 3 + tutos/8.0/manual/how-to-build-js-object.wiki | 13 + ...server-side-function-from-client-side.wiki | 36 + ...o-call-an-ocaml-function-from-js-code.wiki | 3 + .../how-to-compile-my-ocsigen-pages.wiki | 41 + ...nfigure-and-launch-the-ocsigen-server.wiki | 23 + ...ding-on-data-entered-on-previous-ones.wiki | 88 ++ ...-current-page-without-knowing-its-url.wiki | 11 + .../how-to-detect-channel-disconnection.wiki | 55 + ...-side-state-for-the-process-is-closed.wiki | 13 + .../how-to-do-links-to-other-pages.wiki | 28 + ...ow-to-implement-a-notification-system.wiki | 110 ++ ...belonging-to-a-form-towards-a-service.wiki | 20 + ...all-sessions-for-one-user-or-all-tabs.wiki | 25 + ...e-browser-window-has-the-focus-or-not.wiki | 16 + .../how-to-make-hello-world-in-ocsigen.wiki | 56 + .../manual/how-to-make-page-a-skeleton.wiki | 46 + .../manual/how-to-make-responsive-css.wiki | 13 + ...-the-server-and-insert-it-in-the-page.wiki | 30 + ...vice-that-decides-itself-what-to-send.wiki | 21 + .../manual/how-to-register-session-data.wiki | 74 + ...r-without-stopping-the-client-process.wiki | 48 + .../8.0/manual/how-to-send-file-download.wiki | 7 + tutos/8.0/manual/how-to-send-file-upload.wiki | 63 + ...-or-other-attributes-to-html-elements.wiki | 67 + ...w-to-stop-default-behaviour-of-events.wiki | 21 + ...t-parameters-or-parameters-in-the-url.wiki | 88 ++ .../manual/how-to-write-a-json-service.wiki | 25 + tutos/8.0/manual/how-to-write-forms.wiki | 110 ++ .../how-to-write-titles-and-paragraphs.wiki | 34 + tutos/8.0/manual/html.wiki | 157 +++ tutos/8.0/manual/interaction.wiki | 1226 ++++++++++++++++ tutos/8.0/manual/intro.wiki | 157 +++ tutos/8.0/manual/lwt.wiki | 178 +++ tutos/8.0/manual/macaque.wiki | 129 ++ tutos/8.0/manual/menu.wiki | 73 + tutos/8.0/manual/misc.wiki | 521 +++++++ tutos/8.0/manual/mobile.wiki | 43 + tutos/8.0/manual/music.wiki | 33 + tutos/8.0/manual/ocsipersist.wiki | 49 + tutos/8.0/manual/pictures.wiki | 182 +++ tutos/8.0/manual/reactivemediaplayer.wiki | 291 ++++ tutos/8.0/manual/rest.wiki | 506 +++++++ tutos/8.0/manual/start.wiki | 109 ++ tutos/8.0/manual/tutoreact.wiki | 943 +++++++++++++ tutos/8.0/manual/tutowidgets.wiki | 402 ++++++ 143 files changed, 15761 insertions(+) create mode 100644 tutos/8.0/manual/application.wiki create mode 100644 tutos/8.0/manual/basics-server.wiki create mode 100644 tutos/8.0/manual/basics.md create mode 100644 tutos/8.0/manual/basics.wiki create mode 100644 tutos/8.0/manual/chat.wiki create mode 100644 tutos/8.0/manual/custom-conf.wiki create mode 100644 tutos/8.0/manual/files/2014-epita-video.png create mode 100644 tutos/8.0/manual/files/screenshots/.directory create mode 100644 tutos/8.0/manual/files/screenshots/start-mobile-1.png create mode 100644 tutos/8.0/manual/files/screenshots/start-mobile-2.png create mode 100644 tutos/8.0/manual/files/screenshots/start-mobile-3.png create mode 100644 tutos/8.0/manual/files/screenshots/start-mobile-4.png create mode 100644 tutos/8.0/manual/files/screenshots/start-mobile-5.png create mode 100644 tutos/8.0/manual/files/screenshots/start-mobile-6.png create mode 100644 tutos/8.0/manual/files/screenshots/start-mobile-7.png create mode 100644 tutos/8.0/manual/files/screenshots/start-mobile-8.png create mode 100644 tutos/8.0/manual/files/screenshots/start1.png create mode 100644 tutos/8.0/manual/files/screenshots/start2.png create mode 100644 tutos/8.0/manual/files/screenshots/start3.png create mode 100644 tutos/8.0/manual/files/screenshots/start4.png create mode 100644 tutos/8.0/manual/files/screenshots/start5.png create mode 100644 tutos/8.0/manual/files/screenshots/start6.png create mode 100644 tutos/8.0/manual/files/tutorial/chapter1/README create mode 100644 tutos/8.0/manual/files/tutorial/chapter1/distillery-no-oclosure/Makefile create mode 100644 tutos/8.0/manual/files/tutorial/chapter1/distillery-no-oclosure/Makefile.options create mode 100644 tutos/8.0/manual/files/tutorial/chapter1/distillery-no-oclosure/README create mode 100644 tutos/8.0/manual/files/tutorial/chapter1/distillery-no-oclosure/graffiti.conf.in create mode 100644 tutos/8.0/manual/files/tutorial/chapter1/distillery-no-oclosure/graffiti.eliom create mode 100755 tutos/8.0/manual/files/tutorial/chapter1/distillery-no-oclosure/update-symlinks.sh create mode 100644 tutos/8.0/manual/files/tutorial/chapter1/distillery-oclosure/Makefile create mode 100644 tutos/8.0/manual/files/tutorial/chapter1/distillery-oclosure/Makefile.options create mode 100644 tutos/8.0/manual/files/tutorial/chapter1/distillery-oclosure/README create mode 100644 tutos/8.0/manual/files/tutorial/chapter1/distillery-oclosure/graffiti.conf.in create mode 100644 tutos/8.0/manual/files/tutorial/chapter1/distillery-oclosure/graffiti.eliom create mode 100755 tutos/8.0/manual/files/tutorial/chapter1/distillery-oclosure/update-symlinks.sh create mode 100644 tutos/8.0/manual/files/tutorial/chapter1/no_oclosure/.depend create mode 100644 tutos/8.0/manual/files/tutorial/chapter1/no_oclosure/Makefile create mode 100644 tutos/8.0/manual/files/tutorial/chapter1/no_oclosure/graffiti.conf create mode 100644 tutos/8.0/manual/files/tutorial/chapter1/no_oclosure/graffiti.eliom create mode 100644 tutos/8.0/manual/files/tutorial/chapter1/start/Makefile create mode 100644 tutos/8.0/manual/files/tutorial/chapter1/start/graffiti.conf create mode 100644 tutos/8.0/manual/files/tutorial/chapter1/start/graffiti.ml create mode 100644 tutos/8.0/manual/files/tutorial/chapter1/with_oclosure/.depend create mode 100644 tutos/8.0/manual/files/tutorial/chapter1/with_oclosure/Makefile create mode 100644 tutos/8.0/manual/files/tutorial/chapter1/with_oclosure/graffiti.conf create mode 100644 tutos/8.0/manual/files/tutorial/chapter1/with_oclosure/graffiti.eliom create mode 100644 tutos/8.0/manual/files/tutorial/chapter2/Makefile create mode 100644 tutos/8.0/manual/files/tutorial/chapter2/Makefile.options create mode 100644 tutos/8.0/manual/files/tutorial/chapter2/static/css/tuto.css create mode 100644 tutos/8.0/manual/files/tutorial/chapter2/tuto.conf.in create mode 100644 tutos/8.0/manual/files/tutorial/chapter2/tuto.eliom create mode 100644 tutos/8.0/manual/files/tutorial/chapter3/README create mode 100644 tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/Makefile create mode 100644 tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/Makefile.common create mode 100644 tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/client.ml create mode 100644 tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/common.ml create mode 100644 tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/css/common.css create mode 100644 tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/css/graffiti.css create mode 100644 tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/css/hsvpalette.css create mode 100644 tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/css/slider.css create mode 100644 tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/graffiti.conf.in create mode 100644 tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/graffiti.eliom create mode 100644 tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/images/hsv-sprite-sm.png create mode 100644 tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/server.ml create mode 100644 tutos/8.0/manual/files/tutorial/chapter3/multigraffiti_audio/graffiti.eliom create mode 100644 tutos/8.0/manual/files/tutorial/chapter3/multigraffiti_feed/Makefile create mode 100644 tutos/8.0/manual/files/tutorial/chapter3/multigraffiti_feed/feed.ml create mode 100644 tutos/8.0/manual/files/tutorial/chapter3/multigraffiti_feed/graffiti.eliom create mode 100644 tutos/8.0/manual/files/tutorial/chapter3/multigraffiti_macaque/Makefile create mode 100644 tutos/8.0/manual/files/tutorial/chapter3/multigraffiti_macaque/create_table.sql create mode 100644 tutos/8.0/manual/files/tutorial/chapter3/multigraffiti_macaque/graffiti.conf.in create mode 100644 tutos/8.0/manual/files/tutorial/chapter3/multigraffiti_macaque/server.ml create mode 100644 tutos/8.0/manual/files/tutorial/chapter3/multigraffiti_ocsipersist/server.ml create mode 100644 tutos/8.0/manual/files/tutorial/chapter3/reactive_media_player/reactive_media_player.eliom create mode 100644 tutos/8.0/manual/files/tutorial/client-server-req.svg create mode 100644 tutos/8.0/manual/files/tutorial/client-server.png create mode 100644 tutos/8.0/manual/files/tutorial/client-server.svg create mode 100644 tutos/8.0/manual/files/tutorial/static/css/common.css create mode 100644 tutos/8.0/manual/files/tutorial/static/css/graffiti.css create mode 100644 tutos/8.0/manual/files/tutorial/static/css/hsvpalette.css create mode 100644 tutos/8.0/manual/files/tutorial/static/css/slider.css create mode 100644 tutos/8.0/manual/files/tutorial/static/images/hsv-sprite-sm.png create mode 100644 tutos/8.0/manual/files/tutorial/tutowidgets/ex-final.png create mode 100644 tutos/8.0/manual/files/tutorial/tutowidgets/ex.css create mode 100644 tutos/8.0/manual/files/tutorial/tutowidgets/ex1.png create mode 100644 tutos/8.0/manual/files/tutorial/tutowidgets/ex2.png create mode 100644 tutos/8.0/manual/hash-password.wiki create mode 100644 tutos/8.0/manual/how-do-i-create-a-cryptographically-safe-identifier.wiki create mode 100644 tutos/8.0/manual/how-does-a-page-s-source-code-look.wiki create mode 100644 tutos/8.0/manual/how-to-add-a-div.wiki create mode 100644 tutos/8.0/manual/how-to-add-a-favicon.wiki create mode 100644 tutos/8.0/manual/how-to-add-a-javascript-script.wiki create mode 100644 tutos/8.0/manual/how-to-add-a-list.wiki create mode 100644 tutos/8.0/manual/how-to-add-a-select-or-other-form-element.wiki create mode 100644 tutos/8.0/manual/how-to-add-an-image.wiki create mode 100644 tutos/8.0/manual/how-to-add-css-stylesheet.wiki create mode 100644 tutos/8.0/manual/how-to-attach-ocaml-values-to-dom-elements.wiki create mode 100644 tutos/8.0/manual/how-to-attach-ocaml-values-to-the-html-nodes-sent-to-the-client.wiki create mode 100644 tutos/8.0/manual/how-to-build-js-object.wiki create mode 100644 tutos/8.0/manual/how-to-call-a-server-side-function-from-client-side.wiki create mode 100644 tutos/8.0/manual/how-to-call-an-ocaml-function-from-js-code.wiki create mode 100644 tutos/8.0/manual/how-to-compile-my-ocsigen-pages.wiki create mode 100644 tutos/8.0/manual/how-to-configure-and-launch-the-ocsigen-server.wiki create mode 100644 tutos/8.0/manual/how-to-create-form-wizard-sequence-of-pages-depending-on-data-entered-on-previous-ones.wiki create mode 100644 tutos/8.0/manual/how-to-create-link-to-a-current-page-without-knowing-its-url.wiki create mode 100644 tutos/8.0/manual/how-to-detect-channel-disconnection.wiki create mode 100644 tutos/8.0/manual/how-to-detect-on-client-side-that-the-server-side-state-for-the-process-is-closed.wiki create mode 100644 tutos/8.0/manual/how-to-do-links-to-other-pages.wiki create mode 100644 tutos/8.0/manual/how-to-implement-a-notification-system.wiki create mode 100644 tutos/8.0/manual/how-to-insert-raw-form-elements-not-belonging-to-a-form-towards-a-service.wiki create mode 100644 tutos/8.0/manual/how-to-iterate-on-all-sessions-for-one-user-or-all-tabs.wiki create mode 100644 tutos/8.0/manual/how-to-know-whether-the-browser-window-has-the-focus-or-not.wiki create mode 100644 tutos/8.0/manual/how-to-make-hello-world-in-ocsigen.wiki create mode 100644 tutos/8.0/manual/how-to-make-page-a-skeleton.wiki create mode 100644 tutos/8.0/manual/how-to-make-responsive-css.wiki create mode 100644 tutos/8.0/manual/how-to-make-the-client-side-program-get-an-html-element-from-the-server-and-insert-it-in-the-page.wiki create mode 100644 tutos/8.0/manual/how-to-register-a-service-that-decides-itself-what-to-send.wiki create mode 100644 tutos/8.0/manual/how-to-register-session-data.wiki create mode 100644 tutos/8.0/manual/how-to-send-a-file-to-server-without-stopping-the-client-process.wiki create mode 100644 tutos/8.0/manual/how-to-send-file-download.wiki create mode 100644 tutos/8.0/manual/how-to-send-file-upload.wiki create mode 100644 tutos/8.0/manual/how-to-set-and-id-classes-or-other-attributes-to-html-elements.wiki create mode 100644 tutos/8.0/manual/how-to-stop-default-behaviour-of-events.wiki create mode 100644 tutos/8.0/manual/how-to-use-get-parameters-or-parameters-in-the-url.wiki create mode 100644 tutos/8.0/manual/how-to-write-a-json-service.wiki create mode 100644 tutos/8.0/manual/how-to-write-forms.wiki create mode 100644 tutos/8.0/manual/how-to-write-titles-and-paragraphs.wiki create mode 100644 tutos/8.0/manual/html.wiki create mode 100644 tutos/8.0/manual/interaction.wiki create mode 100644 tutos/8.0/manual/intro.wiki create mode 100644 tutos/8.0/manual/lwt.wiki create mode 100644 tutos/8.0/manual/macaque.wiki create mode 100644 tutos/8.0/manual/menu.wiki create mode 100644 tutos/8.0/manual/misc.wiki create mode 100644 tutos/8.0/manual/mobile.wiki create mode 100644 tutos/8.0/manual/music.wiki create mode 100644 tutos/8.0/manual/ocsipersist.wiki create mode 100644 tutos/8.0/manual/pictures.wiki create mode 100644 tutos/8.0/manual/reactivemediaplayer.wiki create mode 100644 tutos/8.0/manual/rest.wiki create mode 100644 tutos/8.0/manual/start.wiki create mode 100644 tutos/8.0/manual/tutoreact.wiki create mode 100644 tutos/8.0/manual/tutowidgets.wiki diff --git a/tutos/8.0/manual/application.wiki b/tutos/8.0/manual/application.wiki new file mode 100644 index 00000000..cc12891e --- /dev/null +++ b/tutos/8.0/manual/application.wiki @@ -0,0 +1,1170 @@ +<> + +In this chapter, we will write a [[site:graffiti/|collaborative +drawing application]]. It is a client/server web application +displaying an area where users can draw using the mouse, and see what +other users are drawing at the same time and in real-time. + +This tutorial is a good starting point if you want a step-by-step +introduction to Eliom programming. + +<> + +<<|outline target="documentation">> + +==@@id="basics"@@ Basics== + +If not already done, install Eliom first: +{{{ +opam install ocsipersist-sqlite eliom ocsigen-ppx-rpc +}}} + +To get started, we recommend using <>, a program which +creates scaffolds for Eliom projects. The following command creates a +very simple project called {{{graffiti}}} in the directory +{{{graffiti}}}: + +<> + +===My first page=== + +<> + +Our web application consists of a single page for now. Let's start by +creating a very basic page. We define the service that will implement +this page by the following declaration: + +< + Lwt.return + (html + (head (title (txt "Page title")) []) + (body [h1 [txt "Graffiti"]]))) +>> + +Annotations {{{%server}}} tells the compiler that the code is going to be executed +on the server (see later). + +Replace the content of file {{{graffiti.eliom}}} by the above lines and run: + +<> + +This will compile your application and run {{{ocsigenserver}}}. + +Your page is now available at URL [[http://localhost:8080/graff|{{{http://localhost:8080/graff}}}]]. + + +<> allows to +create new entry points to your web site, called //services//. In +general, services are attached to a URL and generate a web page. +Services are represented by OCaml values, through which you must +register a function that will generate a page. + +The {{{~path}}} parameter corresponds to the URL where you want to +attach your service. It is a list of strings. The value +<> corresponds to the URL +<>. <> corresponds to +the URL <> (that is: the default page of the +directory <>). + +>> + +< + + + + +}}} + +{{{}}} asks the server to load Eliom module +{{{graffiti.cma}}}, containing the Eliom application, +at startup and attach it to this host (and site). + +Extensions {{{}}} (staticmod) and {{{}}} +are called successively: +* If they exist, files from the directory <> will be served, +* Otherwise, Server will try to generate pages with Eliom + ({{{}}}), +* Otherwise it will generate a 404 (Not found) error (default). + +>> + +<>, +which is implemented using the <> +library. The module defines a construction function for each HTML +tag. + +//Note that it is also possible to use the usual HTML syntax directly + in OCaml, cf. <>.// + +The TyXML library (and thus <>) is very strict and compels you to respect +HTML standard (with some limitations). For example if you write: + +<> + +You will get an error message similar to the following, referring to +the end of line 2: + +{{{ +Error: This expression has type ([> `TXT ] as 'a) Html.elt + but an expression was expected of type + Html_types.head_content_fun Html.elt + Type 'a is not compatible with type Html_types.head_content_fun = + [ `Base + | `Command + | `Link + | `Meta + | `Noscript of [ `Link | `Meta | `Style ] + | `Script + | `Style ] + The second variant type does not allow tag(s) `TXT +}}} + +where <> +is the type of content allowed inside {{{}}} ({{{}}}, +{{{}}}, {{{}}}, {{{}}}, etc.). Notice that +{{{`TXT}}} (i.e. raw text) is not included in this polymorphic +variant type, which means that {{{}}} cannot contain raw text. + +Most functions take as parameter the list representing its contents. +See other examples below. Each of them take an optional {{{?a}}} +parameter for optional HTML attributes. +Mandatory HTML attributes correspond to mandatory OCaml parameters. +See below for examples. + +<<| +**Another example:** In HTML, some tags cannot be empty. For example +{{{}}}must contain at least one row. To enforce this, function +<> +takes two parameters: the first one is the first row, while +the second one is a list containing all the other rows (same thing for +{{{}}}, {{{}}}, {{{
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 L3=^j>-tpf6Jpc}M literal 0 HcmV?d00001 diff --git a/tutos/8.0/manual/files/screenshots/start1.png b/tutos/8.0/manual/files/screenshots/start1.png new file mode 100644 index 0000000000000000000000000000000000000000..185e08bb13cdf5fa0de271dd6b1b406c26565d5d GIT binary patch literal 75499 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 literal 0 HcmV?d00001 diff --git a/tutos/8.0/manual/files/screenshots/start2.png b/tutos/8.0/manual/files/screenshots/start2.png new file mode 100644 index 0000000000000000000000000000000000000000..1ce3676a54c5eae52022fbc3b7e31272d1d88599 GIT binary patch literal 135117 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�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 MKF{#_)KxqGFTA_gX#fBK literal 0 HcmV?d00001 diff --git a/tutos/8.0/manual/files/screenshots/start3.png b/tutos/8.0/manual/files/screenshots/start3.png new file mode 100644 index 0000000000000000000000000000000000000000..62ac5ce519949071565d32f9d86b73734c69c009 GIT binary patch literal 289560 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±__=McAp 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 V8%O+4v+; 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�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Иvn<`+aw*9BA_ANVI-Gbs;xVUpc0fb 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 literal 0 HcmV?d00001 diff --git a/tutos/8.0/manual/files/screenshots/start6.png b/tutos/8.0/manual/files/screenshots/start6.png new file mode 100644 index 0000000000000000000000000000000000000000..b961511d670c965712544bcb1f45a610e1094f01 GIT binary patch literal 160446 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

X?)!g>)xCCm6NzI7b%A5KN+ipUD- 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

V`uHF_Y=-3?iGZeWu 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 literal 0 HcmV?d00001 diff --git a/tutos/8.0/manual/files/tutorial/chapter1/README b/tutos/8.0/manual/files/tutorial/chapter1/README new file mode 100644 index 00000000..37d111c1 --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter1/README @@ -0,0 +1 @@ +This code isn't maintened anymore and might not work. Please go to https://github.com/ocsigen/graffiti/simple for the latest working versions. diff --git a/tutos/8.0/manual/files/tutorial/chapter1/distillery-no-oclosure/Makefile b/tutos/8.0/manual/files/tutorial/chapter1/distillery-no-oclosure/Makefile new file mode 100644 index 00000000..70b892db --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter1/distillery-no-oclosure/Makefile @@ -0,0 +1,242 @@ + +##---------------------------------------------------------------------- +## DISCLAIMER +## +## This file contains the rules to make an Eliom project. The project is +## configured through the variables in the file Makefile.options. +##---------------------------------------------------------------------- + +include Makefile.options + +##---------------------------------------------------------------------- +## Internals + +## Required binaries +ELIOMC := eliomc +ELIOMOPT := eliomopt +JS_OF_ELIOM := js_of_eliom +ELIOMDEP := eliomdep +OCSIGENSERVER := ocsigenserver +OCSIGENSERVER.OPT := ocsigenserver.opt + +## Where to put intermediate object files. +## - ELIOM_{SERVER,CLIENT}_DIR must be distinct +## - ELIOM_CLIENT_DIR must not be the local dir. +## - ELIOM_SERVER_DIR could be ".", but you need to +## remove it from the "clean" rules... +export ELIOM_SERVER_DIR := _server +export ELIOM_CLIENT_DIR := _client +export ELIOM_TYPE_DIR := _server +DEPSDIR := _deps + +ifeq ($(DEBUG),yes) + GENERATE_DEBUG ?= -g + RUN_DEBUG ?= "-v" + DEBUG_JS ?= -jsopt -pretty -jsopt -noinline -jsopt -debuginfo +endif + +##---------------------------------------------------------------------- +## General + +.PHONY: all byte opt +all: byte opt +byte opt:: $(TEST_PREFIX)$(ELIOMSTATICDIR)/${PROJECT_NAME}.js +byte opt:: $(TEST_PREFIX)$(ETCDIR)/$(PROJECT_NAME).conf +byte opt:: $(TEST_PREFIX)$(ETCDIR)/$(PROJECT_NAME)-test.conf +byte:: $(TEST_PREFIX)$(LIBDIR)/${PROJECT_NAME}.cma +opt:: $(TEST_PREFIX)$(LIBDIR)/${PROJECT_NAME}.cmxs + +DIST_DIRS = $(ETCDIR) $(DATADIR) $(LIBDIR) $(LOGDIR) $(STATICDIR) $(ELIOMSTATICDIR) $(shell dirname $(CMDPIPE)) + +##---------------------------------------------------------------------- +## Testing + +DIST_FILES = $(ELIOMSTATICDIR)/$(PROJECT_NAME).js $(LIBDIR)/$(PROJECT_NAME).cma + +.PHONY: test.byte test.opt +test.byte: $(addprefix $(TEST_PREFIX),$(ETCDIR)/$(PROJECT_NAME)-test.conf $(DIST_DIRS) $(DIST_FILES)) + $(OCSIGENSERVER) $(RUN_DEBUG) -c $< +test.opt: $(addprefix $(TEST_PREFIX),$(ETCDIR)/$(PROJECT_NAME)-test.conf $(DIST_DIRS) $(patsubst %.cma,%.cmxs, $(DIST_FILES))) + $(OCSIGENSERVER.OPT) $(RUN_DEBUG) -c $< + +$(addprefix $(TEST_PREFIX), $(DIST_DIRS)): + mkdir -p $@ + +##---------------------------------------------------------------------- +## Installing & Running + +.PHONY: install install.byte install.byte install.opt install.static install.etc install.lib install.lib.byte install.lib.opt run.byte run.opt +install: install.byte install.opt +install.byte: install.lib.byte install.etc install.static | $(addprefix $(PREFIX),$(DATADIR) $(LOGDIR) $(shell dirname $(CMDPIPE))) +install.opt: install.lib.opt install.etc install.static | $(addprefix $(PREFIX),$(DATADIR) $(LOGDIR) $(shell dirname $(CMDPIPE))) +install.lib: install.lib.byte install.lib.opt +install.lib.byte: $(TEST_PREFIX)$(LIBDIR)/$(PROJECT_NAME).cma | $(PREFIX)$(LIBDIR) + install $< $(PREFIX)$(LIBDIR) +install.lib.opt: $(TEST_PREFIX)$(LIBDIR)/$(PROJECT_NAME).cmxs | $(PREFIX)$(LIBDIR) + install $< $(PREFIX)$(LIBDIR) +install.static: $(TEST_PREFIX)$(ELIOMSTATICDIR)/$(PROJECT_NAME).js | $(PREFIX)$(STATICDIR) $(PREFIX)$(ELIOMSTATICDIR) + cp -r $(LOCAL_STATIC)/* $(PREFIX)$(STATICDIR) + [ -z $(WWWUSER) ] || chown -R $(WWWUSER) $(PREFIX)$(STATICDIR) + install $(addprefix -o ,$(WWWUSER)) $< $(PREFIX)$(ELIOMSTATICDIR) +install.etc: $(TEST_PREFIX)$(ETCDIR)/$(PROJECT_NAME).conf | $(PREFIX)$(ETCDIR) + install $< $(PREFIX)$(ETCDIR)/$(PROJECT_NAME).conf + +.PHONY: +print-install-files: + @echo $(PREFIX)$(LIBDIR) + @echo $(PREFIX)$(STATICDIR) + @echo $(PREFIX)$(ELIOMSTATICDIR) + @echo $(PREFIX)$(ETCDIR) + +$(addprefix $(PREFIX),$(ETCDIR) $(LIBDIR)): + install -d $@ +$(addprefix $(PREFIX),$(DATADIR) $(LOGDIR) $(STATICDIR) $(ELIOMSTATICDIR) $(shell dirname $(CMDPIPE))): + install $(addprefix -o ,$(WWWUSER)) -d $@ + +run.byte: + $(OCSIGENSERVER) $(RUN_DEBUG) -c ${PREFIX}${ETCDIR}/${PROJECT_NAME}.conf +run.opt: + $(OCSIGENSERVER.OPT) $(RUN_DEBUG) -c ${PREFIX}${ETCDIR}/${PROJECT_NAME}.conf + +##---------------------------------------------------------------------- +## Aux + +# Use `eliomdep -sort' only in OCaml>4 +ifeq ($(shell ocamlc -version|cut -c1),4) +eliomdep=$(shell $(ELIOMDEP) $(1) -sort $(2) $(filter %.eliom %.ml,$(3)))) +else +eliomdep=$(3) +endif +objs=$(patsubst %.ml,$(1)/%.$(2),$(patsubst %.eliom,$(1)/%.$(2),$(filter %.eliom %.ml,$(3)))) +depsort=$(call objs,$(1),$(2),$(call eliomdep,$(3),$(4),$(5))) + +##---------------------------------------------------------------------- +## Config files + +FINDLIB_PACKAGES=$(patsubst %,\,$(SERVER_PACKAGES)) +EDIT_WARNING=DON\'T EDIT THIS FILE! It is generated from $(PROJECT_NAME).conf.in, edit that one, or the variables in Makefile.options +SED_ARGS := -e "/^ *%%%/d" +SED_ARGS += -e "s|%%PROJECT_NAME%%|$(PROJECT_NAME)|g" +SED_ARGS += -e "s|%%DATABASE_NAME%%|$(DATABASE_NAME)|g" +SED_ARGS += -e "s|%%DATABASE_USER%%|$(DATABASE_USER)|g" +SED_ARGS += -e "s|%%CMDPIPE%%|%%PREFIX%%$(CMDPIPE)|g" +SED_ARGS += -e "s|%%LOGDIR%%|%%PREFIX%%$(LOGDIR)|g" +SED_ARGS += -e "s|%%DATADIR%%|%%PREFIX%%$(DATADIR)|g" +SED_ARGS += -e "s|%%LIBDIR%%|%%PREFIX%%$(LIBDIR)|g" +SED_ARGS += -e "s|%%WARNING%%|$(EDIT_WARNING)|g" +SED_ARGS += -e "s|%%PACKAGES%%|$(FINDLIB_PACKAGES)|g" +SED_ARGS += -e "s|%%ELIOMSTATICDIR%%|%%PREFIX%%$(ELIOMSTATICDIR)|g" +ifeq ($(DEBUG),yes) + SED_ARGS += -e "s|%%DEBUGMODE%%|\|g" +else + SED_ARGS += -e "s|%%DEBUGMODE%%||g" +endif + +LOCAL_SED_ARGS := -e "s|%%PORT%%|$(TEST_PORT)|g" +LOCAL_SED_ARGS += -e "s|%%STATICDIR%%|$(LOCAL_STATIC)|g" +LOCAL_SED_ARGS += -e "s|%%USERGROUP%%||g" +GLOBAL_SED_ARGS := -e "s|%%PORT%%|$(PORT)|g" +GLOBAL_SED_ARGS += -e "s|%%STATICDIR%%|%%PREFIX%%$(STATICDIR)|g" +ifeq ($(WWWUSER)$(WWWGROUP),) + GLOBAL_SED_ARGS += -e "s|%%USERGROUP%%||g" +else + GLOBAL_SED_ARGS += -e "s|%%USERGROUP%%|$(WWWUSER)$(WWWGROUP)|g" +endif + +$(TEST_PREFIX)${ETCDIR}/${PROJECT_NAME}.conf: ${PROJECT_NAME}.conf.in Makefile.options | $(TEST_PREFIX)$(ETCDIR) + sed $(SED_ARGS) $(GLOBAL_SED_ARGS) $< | sed -e "s|%%PREFIX%%|$(PREFIX)|g" > $@ +$(TEST_PREFIX)${ETCDIR}/${PROJECT_NAME}-test.conf: ${PROJECT_NAME}.conf.in Makefile.options | $(TEST_PREFIX)$(ETCDIR) + sed $(SED_ARGS) $(LOCAL_SED_ARGS) $< | sed -e "s|%%PREFIX%%|$(TEST_PREFIX)|g" > $@ + +##---------------------------------------------------------------------- +## Server side compilation + +SERVER_INC := ${addprefix -package ,${SERVER_PACKAGES}} + +${ELIOM_TYPE_DIR}/%.type_mli: %.eliom + ${ELIOMC} -infer ${SERVER_INC} $< + +$(TEST_PREFIX)$(LIBDIR)/$(PROJECT_NAME).cma: $(call objs,$(ELIOM_SERVER_DIR),cmo,$(SERVER_FILES)) | $(TEST_PREFIX)$(LIBDIR) + ${ELIOMC} -a -o $@ $(GENERATE_DEBUG) \ + $(call depsort,$(ELIOM_SERVER_DIR),cmo,-server,$(SERVER_INC),$(SERVER_FILES)) + +$(TEST_PREFIX)$(LIBDIR)/$(PROJECT_NAME).cmxa: $(call objs,$(ELIOM_SERVER_DIR),cmx,$(SERVER_FILES)) | $(TEST_PREFIX)$(LIBDIR) + ${ELIOMOPT} -a -o $@ $(GENERATE_DEBUG) \ + $(call depsort,$(ELIOM_SERVER_DIR),cmx,-server,$(SERVER_INC),$(SERVER_FILES)) + +%.cmxs: %.cmxa + $(ELIOMOPT) -shared -linkall -o $@ $(GENERATE_DEBUG) $< + +${ELIOM_SERVER_DIR}/%.cmi: %.mli + ${ELIOMC} -c ${SERVER_INC} $(GENERATE_DEBUG) $< + +${ELIOM_SERVER_DIR}/%.cmi: %.eliomi + ${ELIOMC} -c ${SERVER_INC} $(GENERATE_DEBUG) $< + +${ELIOM_SERVER_DIR}/%.cmo: %.ml + ${ELIOMC} -c ${SERVER_INC} $(GENERATE_DEBUG) $< +${ELIOM_SERVER_DIR}/%.cmo: %.eliom + ${ELIOMC} -c ${SERVER_INC} $(GENERATE_DEBUG) $< + +${ELIOM_SERVER_DIR}/%.cmx: %.ml + ${ELIOMOPT} -c ${SERVER_INC} $(GENERATE_DEBUG) $< +${ELIOM_SERVER_DIR}/%.cmx: %.eliom + ${ELIOMOPT} -c ${SERVER_INC} $(GENERATE_DEBUG) $< + + +##---------------------------------------------------------------------- +## Client side compilation + +CLIENT_LIBS := ${addprefix -package ,${CLIENT_PACKAGES}} +CLIENT_INC := ${addprefix -package ,${CLIENT_PACKAGES}} + +CLIENT_OBJS := $(filter %.eliom %.ml, $(CLIENT_FILES)) +CLIENT_OBJS := $(patsubst %.eliom,${ELIOM_CLIENT_DIR}/%.cmo, ${CLIENT_OBJS}) +CLIENT_OBJS := $(patsubst %.ml,${ELIOM_CLIENT_DIR}/%.cmo, ${CLIENT_OBJS}) + +$(TEST_PREFIX)$(ELIOMSTATICDIR)/$(PROJECT_NAME).js: $(call objs,$(ELIOM_CLIENT_DIR),cmo,$(CLIENT_FILES)) | $(TEST_PREFIX)$(ELIOMSTATICDIR) + ${JS_OF_ELIOM} -o $@ $(GENERATE_DEBUG) $(CLIENT_INC) $(DEBUG_JS) \ + $(call depsort,$(ELIOM_CLIENT_DIR),cmo,-client,$(CLIENT_INC),$(CLIENT_FILES)) + +$(TEST_PREFIX)$(ELIOMSTATICDIR)/$(PROJECT_NAME)_oclosure.js: $(TEST_PREFIX)$(ELIOMSTATICDIR)/$(PROJECT_NAME).js + oclosure_req $< + +${ELIOM_CLIENT_DIR}/%.cmi: %.mli + ${JS_OF_ELIOM} -c ${CLIENT_INC} $(GENERATE_DEBUG) $< + +${ELIOM_CLIENT_DIR}/%.cmo: %.eliom + ${JS_OF_ELIOM} -c ${CLIENT_INC} $(GENERATE_DEBUG) $< +${ELIOM_CLIENT_DIR}/%.cmo: %.ml + ${JS_OF_ELIOM} -c ${CLIENT_INC} $(GENERATE_DEBUG) $< + +${ELIOM_CLIENT_DIR}/%.cmi: %.eliomi + ${JS_OF_ELIOM} -c ${CLIENT_INC} $(GENERATE_DEBUG) $< + +##---------------------------------------------------------------------- +## Dependencies + +include .depend + +.depend: $(patsubst %,$(DEPSDIR)/%.server,$(SERVER_FILES)) $(patsubst %,$(DEPSDIR)/%.client,$(CLIENT_FILES)) + cat $^ > $@ + +$(DEPSDIR)/%.server: % | $(DEPSDIR) + $(ELIOMDEP) -server $(SERVER_INC) $< > $@ + +$(DEPSDIR)/%.client: % | $(DEPSDIR) + $(ELIOMDEP) -client $(CLIENT_INC) $< > $@ + +$(DEPSDIR): + mkdir $@ + +##---------------------------------------------------------------------- +## Clean up + +clean: + -rm -f *.cm[ioax] *.cmxa *.cmxs *.o *.a *.annot + -rm -f *.type_mli + -rm -f ${PROJECT_NAME}.js + -rm -rf ${ELIOM_CLIENT_DIR} ${ELIOM_SERVER_DIR} + +distclean: clean + -rm -rf $(TEST_PREFIX) $(DEPSDIR) .depend diff --git a/tutos/8.0/manual/files/tutorial/chapter1/distillery-no-oclosure/Makefile.options b/tutos/8.0/manual/files/tutorial/chapter1/distillery-no-oclosure/Makefile.options new file mode 100644 index 00000000..a001a7ba --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter1/distillery-no-oclosure/Makefile.options @@ -0,0 +1,57 @@ + +##---------------------------------------------------------------------- +## SETTINGS FOR THE ELIOM PROJECT graffiti +##---------------------------------------------------------------------- + +PROJECT_NAME := graffiti + +## Do not forget `make depend' after adding a file! +## Source files for the server +SERVER_FILES := $(wildcard *.eliomi *.eliom) +## Source files for the client +CLIENT_FILES := $(wildcard *.eliomi *.eliom) + +## OCamlfind packages for the server +SERVER_PACKAGES := deriving.syntax cairo +## OCamlfind packages for the client +CLIENT_PACKAGES := deriving.syntax ojwidgets + +## Directory with files to be statically served +LOCAL_STATIC = static + +## Debug application (yes/no): Debugging info in compilation, +## JavaScript, ocsigenserver +DEBUG := no + +## User to run server with (make run.*) +WWWUSER := www-data +WWWGROUP := www-data + +## Port for running the server (make run.*) +PORT := 80 + +## Port for testing (make test.*) +TEST_PORT := 8080 + +## Root of installation (must end with /) +PREFIX := / + +## Local folder for make test.* (must end with /) +TEST_PREFIX := local/ + +## The installation tree (relative to $(PREFIX) when installing/runnin +## or $(TEST_PREFIX) when testing). +# Configuration file $(PROJECT_NAME).conf +ETCDIR := etc/${PROJECT_NAME} +# Project's library $(PROJECT_NAME).cma (cmxs) +LIBDIR := var/lib/${PROJECT_NAME} +# Command pipe, eg. $ echo restart > $(INSTALL_PREFIX)$(CMDPIPE) +CMDPIPE := var/run/${PROJECT_NAME}-cmd +# Ocsigenserver's logging files +LOGDIR := var/log/${PROJECT_NAME} +# Ocsigenserver's persistent data files +DATADIR := var/data/${PROJECT_NAME} +# Copy of $(LOCAL_STATIC) +STATICDIR := var/www/${PROJECT_NAME}/static +# Project's JavaScript file +ELIOMSTATICDIR := var/www/${PROJECT_NAME}/eliom diff --git a/tutos/8.0/manual/files/tutorial/chapter1/distillery-no-oclosure/README b/tutos/8.0/manual/files/tutorial/chapter1/distillery-no-oclosure/README new file mode 100644 index 00000000..d2f190e5 --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter1/distillery-no-oclosure/README @@ -0,0 +1,59 @@ + +This project is (initially) generated by eliom-distillery as the basic +project "graffiti". + +It contains the following files: + + - graffiti.eliom + This is your initial source file. + All Eliom files (*.eliom, *.eliomi) in this directory are + automatically considered. To add a .ml/.mli file to your project, + add it to the variable SERVER_FILES or CLIENT_FILES. + + - static/ + The content of this folder is statically served. It contains + initially a basic CSS file for your project. + + - Makefile.options + Configure your project here! + + - graffiti.conf.in + This file is a template for the configuration file for + ocsigenserver. You will rarely have to edit itself - it takes its + variables from the Makefile.options. This way, the installation + rules and the configuration files are synchronized with respect to + the different folders. + + - Makefile + This contains all rules necessary to build, test, and run your + Eliom application. You better don't touch it ;) See below for the + relevant targets. + + - README + Not completely desribable here. + + +Here's some help on how to work with this basic distillery project: + + - Compile it + $ make all (or byte/opt) + + - Test your application by running ocsigenserver locally + $ make test.byte (or test.opt) + + - Install it + $ sudo make install (or install.byte/install.opt) + + - Run the server on the installation + $ sudo make run.byte (or run.opt) + If the user to run ocsigenserver is yourself, you don't need the + `sudo'. If Ocsigen isn't installed in a global position, however, + you may need to re-export some environment variables to make this + work: + $ sudo PATH=$PATH OCAMLPATH=$OCAMLPATH LD_LIBRARY_PATH=$LD_LIBRARY_PATH make run.byte/run.opt + + - If you need a findlib package in your project, add it to the + variables SERVER_PACKAGES and/or CLIENT_PACKAGES. + + - The directory static/ will be statically served. Put your CSS and + additional JavaScript files here! diff --git a/tutos/8.0/manual/files/tutorial/chapter1/distillery-no-oclosure/graffiti.conf.in b/tutos/8.0/manual/files/tutorial/chapter1/distillery-no-oclosure/graffiti.conf.in new file mode 100644 index 00000000..82244ac9 --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter1/distillery-no-oclosure/graffiti.conf.in @@ -0,0 +1,28 @@ +%%% This is the template for your configuration file. The %%VALUES%% below are +%%% taken from the Makefile to generate the actual configuration files. +%%% This comment will disappear. + + + + %%PORT%% + %%% Only set for running, not for testing + %%USERGROUP%% + %%LOGDIR%% + %%DATADIR%% + utf-8 + %%% Only set when debugging + %%DEBUGMODE%% + %%CMDPIPE%% + + + + %%% This will include the packages defined as SERVER_PACKAGES in your Makefile: + %%PACKAGES%% + + + + + + + + diff --git a/tutos/8.0/manual/files/tutorial/chapter1/distillery-no-oclosure/graffiti.eliom b/tutos/8.0/manual/files/tutorial/chapter1/distillery-no-oclosure/graffiti.eliom new file mode 100644 index 00000000..54d2e3ff --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter1/distillery-no-oclosure/graffiti.eliom @@ -0,0 +1,146 @@ +{shared{ + open Eliom_lib.Lwt_ops + open Eliom_content.Html5.D + + let width = 700 + let height = 400 + + type messages = ((int * int * int) * int * (int * int) * (int * int)) + deriving (Json) +}} + +module My_app = + Eliom_registration.App ( + struct + let application_name = "graffiti" + end) + +let bus = Eliom_bus.create Json.t + +let canvas_elt = + canvas ~a:[a_width width; a_height height] + [pcdata "your browser doesn't support canvas"] + +let slider = int_input ~a:[a_id "slider"] ~input_type:`Range () + +let page = + html + (Eliom_tools.F.head ~title:"Graffiti" + ~css:[["css";"graffiti.css"]] + ~js:[] ()) + (body [h1 [pcdata "Graffiti"]; canvas_elt; div [slider]]) + + +let draw_server, image_string = + let rgb_floats_from_ints (r, g, b) = + float r /. 255., float g /. 255., float b /. 255. in + let surface = + Cairo.image_surface_create Cairo.FORMAT_ARGB32 ~width ~height + in + let ctx = Cairo.create surface in + ((fun (rgb, size, (x1, y1), (x2, y2)) -> + + (* Set thickness of brush *) + Cairo.set_line_width ctx (float size) ; + Cairo.set_line_join ctx Cairo.LINE_JOIN_ROUND ; + Cairo.set_line_cap ctx Cairo.LINE_CAP_ROUND ; + let red, green, blue = rgb_floats_from_ints rgb in + Cairo.set_source_rgb ctx ~red ~green ~blue ; + + Cairo.move_to ctx (float x1) (float y1) ; + Cairo.line_to ctx (float x2) (float y2) ; + Cairo.close_path ctx ; + + (* Apply the ink *) + Cairo.stroke ctx ; + ), + (fun () -> + let b = Buffer.create 10000 in + (* Output a PNG in a string *) + Cairo_png.surface_write_to_stream surface (Buffer.add_string b); + Buffer.contents b + )) + +let imageservice = + Eliom_registration.String.register_service + ~path:["image"] + ~get_params:Eliom_parameter.unit + (fun () () -> Lwt.return (image_string (), "image/png")) + +{client{ + + let draw ctx ((r, g, b), size, (x1, y1), (x2, y2)) = + let color = CSS.Color.string_of_t (CSS.Color.rgb r g b) in + ctx##strokeStyle <- (Js.string color); + ctx##lineWidth <- float size; + ctx##beginPath(); + ctx##moveTo(float x1, float y1); + ctx##lineTo(float x2, float y2); + ctx##stroke() + + let init_client () = + + let canvas = Eliom_content.Html5.To_dom.of_canvas %canvas_elt in + + let ctx = canvas##getContext (Dom_html._2d_) in + ctx##lineCap <- Js.string "round"; + + (* The initial image: *) + let img = + Eliom_content.Html5.To_dom.of_img + (img ~alt:"canvas" + ~src:(make_uri ~service:%imageservice ()) + ()) + in + img##onload <- Dom_html.handler + (fun ev -> ctx##drawImage(img, 0., 0.); Js._false); + + (* Color of the brush *) + let colorpicker = Ojw_color_picker.create ~width:150 () in + Ojw_color_picker.append_at (Dom_html.document##body) colorpicker; + Ojw_color_picker.init_handler colorpicker; + + let x = ref 0 and y = ref 0 in + + let set_coord ev = + let x0, y0 = Dom_html.elementClientPosition canvas in + x := ev##clientX - x0; y := ev##clientY - y0 + in + + let compute_line ev = + let oldx = !x and oldy = !y in + set_coord ev; + let color = Ojw_color_picker.get_rgb colorpicker in + let size_slider = Eliom_content.Html5.To_dom.of_input %slider in + let size = int_of_string (Js.to_string size_slider##value) in + (color, size, (oldx, oldy), (!x, !y)) + in + + let line ev = + let v = compute_line ev in + let _ = Eliom_bus.write %bus v in + draw ctx v; + Lwt.return () in + + Lwt.async + (fun () -> + let open Lwt_js_events in + mousedowns canvas + (fun ev _ -> + set_coord ev; line ev >>= fun () -> + Lwt.pick [mousemoves Dom_html.document (fun x _ -> line x); + mouseup Dom_html.document >>= line])); + + Lwt.async (fun () -> Lwt_stream.iter (draw ctx) (Eliom_bus.stream %bus)); + + +}} + +let _ = Lwt_stream.iter draw_server (Eliom_bus.stream bus) + +let main_service = + My_app.register_service ~path:[""] ~get_params:Eliom_parameter.unit + (fun () () -> + (* Cf. the box "Client side side-effects on the server" *) + ignore {unit{ init_client () }}; + Lwt.return page) diff --git a/tutos/8.0/manual/files/tutorial/chapter1/distillery-no-oclosure/update-symlinks.sh b/tutos/8.0/manual/files/tutorial/chapter1/distillery-no-oclosure/update-symlinks.sh new file mode 100755 index 00000000..f49ae5cf --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter1/distillery-no-oclosure/update-symlinks.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +ln -s ../../static . + diff --git a/tutos/8.0/manual/files/tutorial/chapter1/distillery-oclosure/Makefile b/tutos/8.0/manual/files/tutorial/chapter1/distillery-oclosure/Makefile new file mode 100644 index 00000000..70b892db --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter1/distillery-oclosure/Makefile @@ -0,0 +1,242 @@ + +##---------------------------------------------------------------------- +## DISCLAIMER +## +## This file contains the rules to make an Eliom project. The project is +## configured through the variables in the file Makefile.options. +##---------------------------------------------------------------------- + +include Makefile.options + +##---------------------------------------------------------------------- +## Internals + +## Required binaries +ELIOMC := eliomc +ELIOMOPT := eliomopt +JS_OF_ELIOM := js_of_eliom +ELIOMDEP := eliomdep +OCSIGENSERVER := ocsigenserver +OCSIGENSERVER.OPT := ocsigenserver.opt + +## Where to put intermediate object files. +## - ELIOM_{SERVER,CLIENT}_DIR must be distinct +## - ELIOM_CLIENT_DIR must not be the local dir. +## - ELIOM_SERVER_DIR could be ".", but you need to +## remove it from the "clean" rules... +export ELIOM_SERVER_DIR := _server +export ELIOM_CLIENT_DIR := _client +export ELIOM_TYPE_DIR := _server +DEPSDIR := _deps + +ifeq ($(DEBUG),yes) + GENERATE_DEBUG ?= -g + RUN_DEBUG ?= "-v" + DEBUG_JS ?= -jsopt -pretty -jsopt -noinline -jsopt -debuginfo +endif + +##---------------------------------------------------------------------- +## General + +.PHONY: all byte opt +all: byte opt +byte opt:: $(TEST_PREFIX)$(ELIOMSTATICDIR)/${PROJECT_NAME}.js +byte opt:: $(TEST_PREFIX)$(ETCDIR)/$(PROJECT_NAME).conf +byte opt:: $(TEST_PREFIX)$(ETCDIR)/$(PROJECT_NAME)-test.conf +byte:: $(TEST_PREFIX)$(LIBDIR)/${PROJECT_NAME}.cma +opt:: $(TEST_PREFIX)$(LIBDIR)/${PROJECT_NAME}.cmxs + +DIST_DIRS = $(ETCDIR) $(DATADIR) $(LIBDIR) $(LOGDIR) $(STATICDIR) $(ELIOMSTATICDIR) $(shell dirname $(CMDPIPE)) + +##---------------------------------------------------------------------- +## Testing + +DIST_FILES = $(ELIOMSTATICDIR)/$(PROJECT_NAME).js $(LIBDIR)/$(PROJECT_NAME).cma + +.PHONY: test.byte test.opt +test.byte: $(addprefix $(TEST_PREFIX),$(ETCDIR)/$(PROJECT_NAME)-test.conf $(DIST_DIRS) $(DIST_FILES)) + $(OCSIGENSERVER) $(RUN_DEBUG) -c $< +test.opt: $(addprefix $(TEST_PREFIX),$(ETCDIR)/$(PROJECT_NAME)-test.conf $(DIST_DIRS) $(patsubst %.cma,%.cmxs, $(DIST_FILES))) + $(OCSIGENSERVER.OPT) $(RUN_DEBUG) -c $< + +$(addprefix $(TEST_PREFIX), $(DIST_DIRS)): + mkdir -p $@ + +##---------------------------------------------------------------------- +## Installing & Running + +.PHONY: install install.byte install.byte install.opt install.static install.etc install.lib install.lib.byte install.lib.opt run.byte run.opt +install: install.byte install.opt +install.byte: install.lib.byte install.etc install.static | $(addprefix $(PREFIX),$(DATADIR) $(LOGDIR) $(shell dirname $(CMDPIPE))) +install.opt: install.lib.opt install.etc install.static | $(addprefix $(PREFIX),$(DATADIR) $(LOGDIR) $(shell dirname $(CMDPIPE))) +install.lib: install.lib.byte install.lib.opt +install.lib.byte: $(TEST_PREFIX)$(LIBDIR)/$(PROJECT_NAME).cma | $(PREFIX)$(LIBDIR) + install $< $(PREFIX)$(LIBDIR) +install.lib.opt: $(TEST_PREFIX)$(LIBDIR)/$(PROJECT_NAME).cmxs | $(PREFIX)$(LIBDIR) + install $< $(PREFIX)$(LIBDIR) +install.static: $(TEST_PREFIX)$(ELIOMSTATICDIR)/$(PROJECT_NAME).js | $(PREFIX)$(STATICDIR) $(PREFIX)$(ELIOMSTATICDIR) + cp -r $(LOCAL_STATIC)/* $(PREFIX)$(STATICDIR) + [ -z $(WWWUSER) ] || chown -R $(WWWUSER) $(PREFIX)$(STATICDIR) + install $(addprefix -o ,$(WWWUSER)) $< $(PREFIX)$(ELIOMSTATICDIR) +install.etc: $(TEST_PREFIX)$(ETCDIR)/$(PROJECT_NAME).conf | $(PREFIX)$(ETCDIR) + install $< $(PREFIX)$(ETCDIR)/$(PROJECT_NAME).conf + +.PHONY: +print-install-files: + @echo $(PREFIX)$(LIBDIR) + @echo $(PREFIX)$(STATICDIR) + @echo $(PREFIX)$(ELIOMSTATICDIR) + @echo $(PREFIX)$(ETCDIR) + +$(addprefix $(PREFIX),$(ETCDIR) $(LIBDIR)): + install -d $@ +$(addprefix $(PREFIX),$(DATADIR) $(LOGDIR) $(STATICDIR) $(ELIOMSTATICDIR) $(shell dirname $(CMDPIPE))): + install $(addprefix -o ,$(WWWUSER)) -d $@ + +run.byte: + $(OCSIGENSERVER) $(RUN_DEBUG) -c ${PREFIX}${ETCDIR}/${PROJECT_NAME}.conf +run.opt: + $(OCSIGENSERVER.OPT) $(RUN_DEBUG) -c ${PREFIX}${ETCDIR}/${PROJECT_NAME}.conf + +##---------------------------------------------------------------------- +## Aux + +# Use `eliomdep -sort' only in OCaml>4 +ifeq ($(shell ocamlc -version|cut -c1),4) +eliomdep=$(shell $(ELIOMDEP) $(1) -sort $(2) $(filter %.eliom %.ml,$(3)))) +else +eliomdep=$(3) +endif +objs=$(patsubst %.ml,$(1)/%.$(2),$(patsubst %.eliom,$(1)/%.$(2),$(filter %.eliom %.ml,$(3)))) +depsort=$(call objs,$(1),$(2),$(call eliomdep,$(3),$(4),$(5))) + +##---------------------------------------------------------------------- +## Config files + +FINDLIB_PACKAGES=$(patsubst %,\,$(SERVER_PACKAGES)) +EDIT_WARNING=DON\'T EDIT THIS FILE! It is generated from $(PROJECT_NAME).conf.in, edit that one, or the variables in Makefile.options +SED_ARGS := -e "/^ *%%%/d" +SED_ARGS += -e "s|%%PROJECT_NAME%%|$(PROJECT_NAME)|g" +SED_ARGS += -e "s|%%DATABASE_NAME%%|$(DATABASE_NAME)|g" +SED_ARGS += -e "s|%%DATABASE_USER%%|$(DATABASE_USER)|g" +SED_ARGS += -e "s|%%CMDPIPE%%|%%PREFIX%%$(CMDPIPE)|g" +SED_ARGS += -e "s|%%LOGDIR%%|%%PREFIX%%$(LOGDIR)|g" +SED_ARGS += -e "s|%%DATADIR%%|%%PREFIX%%$(DATADIR)|g" +SED_ARGS += -e "s|%%LIBDIR%%|%%PREFIX%%$(LIBDIR)|g" +SED_ARGS += -e "s|%%WARNING%%|$(EDIT_WARNING)|g" +SED_ARGS += -e "s|%%PACKAGES%%|$(FINDLIB_PACKAGES)|g" +SED_ARGS += -e "s|%%ELIOMSTATICDIR%%|%%PREFIX%%$(ELIOMSTATICDIR)|g" +ifeq ($(DEBUG),yes) + SED_ARGS += -e "s|%%DEBUGMODE%%|\|g" +else + SED_ARGS += -e "s|%%DEBUGMODE%%||g" +endif + +LOCAL_SED_ARGS := -e "s|%%PORT%%|$(TEST_PORT)|g" +LOCAL_SED_ARGS += -e "s|%%STATICDIR%%|$(LOCAL_STATIC)|g" +LOCAL_SED_ARGS += -e "s|%%USERGROUP%%||g" +GLOBAL_SED_ARGS := -e "s|%%PORT%%|$(PORT)|g" +GLOBAL_SED_ARGS += -e "s|%%STATICDIR%%|%%PREFIX%%$(STATICDIR)|g" +ifeq ($(WWWUSER)$(WWWGROUP),) + GLOBAL_SED_ARGS += -e "s|%%USERGROUP%%||g" +else + GLOBAL_SED_ARGS += -e "s|%%USERGROUP%%|$(WWWUSER)$(WWWGROUP)|g" +endif + +$(TEST_PREFIX)${ETCDIR}/${PROJECT_NAME}.conf: ${PROJECT_NAME}.conf.in Makefile.options | $(TEST_PREFIX)$(ETCDIR) + sed $(SED_ARGS) $(GLOBAL_SED_ARGS) $< | sed -e "s|%%PREFIX%%|$(PREFIX)|g" > $@ +$(TEST_PREFIX)${ETCDIR}/${PROJECT_NAME}-test.conf: ${PROJECT_NAME}.conf.in Makefile.options | $(TEST_PREFIX)$(ETCDIR) + sed $(SED_ARGS) $(LOCAL_SED_ARGS) $< | sed -e "s|%%PREFIX%%|$(TEST_PREFIX)|g" > $@ + +##---------------------------------------------------------------------- +## Server side compilation + +SERVER_INC := ${addprefix -package ,${SERVER_PACKAGES}} + +${ELIOM_TYPE_DIR}/%.type_mli: %.eliom + ${ELIOMC} -infer ${SERVER_INC} $< + +$(TEST_PREFIX)$(LIBDIR)/$(PROJECT_NAME).cma: $(call objs,$(ELIOM_SERVER_DIR),cmo,$(SERVER_FILES)) | $(TEST_PREFIX)$(LIBDIR) + ${ELIOMC} -a -o $@ $(GENERATE_DEBUG) \ + $(call depsort,$(ELIOM_SERVER_DIR),cmo,-server,$(SERVER_INC),$(SERVER_FILES)) + +$(TEST_PREFIX)$(LIBDIR)/$(PROJECT_NAME).cmxa: $(call objs,$(ELIOM_SERVER_DIR),cmx,$(SERVER_FILES)) | $(TEST_PREFIX)$(LIBDIR) + ${ELIOMOPT} -a -o $@ $(GENERATE_DEBUG) \ + $(call depsort,$(ELIOM_SERVER_DIR),cmx,-server,$(SERVER_INC),$(SERVER_FILES)) + +%.cmxs: %.cmxa + $(ELIOMOPT) -shared -linkall -o $@ $(GENERATE_DEBUG) $< + +${ELIOM_SERVER_DIR}/%.cmi: %.mli + ${ELIOMC} -c ${SERVER_INC} $(GENERATE_DEBUG) $< + +${ELIOM_SERVER_DIR}/%.cmi: %.eliomi + ${ELIOMC} -c ${SERVER_INC} $(GENERATE_DEBUG) $< + +${ELIOM_SERVER_DIR}/%.cmo: %.ml + ${ELIOMC} -c ${SERVER_INC} $(GENERATE_DEBUG) $< +${ELIOM_SERVER_DIR}/%.cmo: %.eliom + ${ELIOMC} -c ${SERVER_INC} $(GENERATE_DEBUG) $< + +${ELIOM_SERVER_DIR}/%.cmx: %.ml + ${ELIOMOPT} -c ${SERVER_INC} $(GENERATE_DEBUG) $< +${ELIOM_SERVER_DIR}/%.cmx: %.eliom + ${ELIOMOPT} -c ${SERVER_INC} $(GENERATE_DEBUG) $< + + +##---------------------------------------------------------------------- +## Client side compilation + +CLIENT_LIBS := ${addprefix -package ,${CLIENT_PACKAGES}} +CLIENT_INC := ${addprefix -package ,${CLIENT_PACKAGES}} + +CLIENT_OBJS := $(filter %.eliom %.ml, $(CLIENT_FILES)) +CLIENT_OBJS := $(patsubst %.eliom,${ELIOM_CLIENT_DIR}/%.cmo, ${CLIENT_OBJS}) +CLIENT_OBJS := $(patsubst %.ml,${ELIOM_CLIENT_DIR}/%.cmo, ${CLIENT_OBJS}) + +$(TEST_PREFIX)$(ELIOMSTATICDIR)/$(PROJECT_NAME).js: $(call objs,$(ELIOM_CLIENT_DIR),cmo,$(CLIENT_FILES)) | $(TEST_PREFIX)$(ELIOMSTATICDIR) + ${JS_OF_ELIOM} -o $@ $(GENERATE_DEBUG) $(CLIENT_INC) $(DEBUG_JS) \ + $(call depsort,$(ELIOM_CLIENT_DIR),cmo,-client,$(CLIENT_INC),$(CLIENT_FILES)) + +$(TEST_PREFIX)$(ELIOMSTATICDIR)/$(PROJECT_NAME)_oclosure.js: $(TEST_PREFIX)$(ELIOMSTATICDIR)/$(PROJECT_NAME).js + oclosure_req $< + +${ELIOM_CLIENT_DIR}/%.cmi: %.mli + ${JS_OF_ELIOM} -c ${CLIENT_INC} $(GENERATE_DEBUG) $< + +${ELIOM_CLIENT_DIR}/%.cmo: %.eliom + ${JS_OF_ELIOM} -c ${CLIENT_INC} $(GENERATE_DEBUG) $< +${ELIOM_CLIENT_DIR}/%.cmo: %.ml + ${JS_OF_ELIOM} -c ${CLIENT_INC} $(GENERATE_DEBUG) $< + +${ELIOM_CLIENT_DIR}/%.cmi: %.eliomi + ${JS_OF_ELIOM} -c ${CLIENT_INC} $(GENERATE_DEBUG) $< + +##---------------------------------------------------------------------- +## Dependencies + +include .depend + +.depend: $(patsubst %,$(DEPSDIR)/%.server,$(SERVER_FILES)) $(patsubst %,$(DEPSDIR)/%.client,$(CLIENT_FILES)) + cat $^ > $@ + +$(DEPSDIR)/%.server: % | $(DEPSDIR) + $(ELIOMDEP) -server $(SERVER_INC) $< > $@ + +$(DEPSDIR)/%.client: % | $(DEPSDIR) + $(ELIOMDEP) -client $(CLIENT_INC) $< > $@ + +$(DEPSDIR): + mkdir $@ + +##---------------------------------------------------------------------- +## Clean up + +clean: + -rm -f *.cm[ioax] *.cmxa *.cmxs *.o *.a *.annot + -rm -f *.type_mli + -rm -f ${PROJECT_NAME}.js + -rm -rf ${ELIOM_CLIENT_DIR} ${ELIOM_SERVER_DIR} + +distclean: clean + -rm -rf $(TEST_PREFIX) $(DEPSDIR) .depend diff --git a/tutos/8.0/manual/files/tutorial/chapter1/distillery-oclosure/Makefile.options b/tutos/8.0/manual/files/tutorial/chapter1/distillery-oclosure/Makefile.options new file mode 100644 index 00000000..53ea7f5f --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter1/distillery-oclosure/Makefile.options @@ -0,0 +1,57 @@ + +##---------------------------------------------------------------------- +## SETTINGS FOR THE ELIOM PROJECT graffiti +##---------------------------------------------------------------------- + +PROJECT_NAME := graffiti + +## Do not forget `make depend' after adding a file! +## Source files for the server +SERVER_FILES := $(wildcard *.eliomi *.eliom) +## Source files for the client +CLIENT_FILES := $(wildcard *.eliomi *.eliom) + +## OCamlfind packages for the server +SERVER_PACKAGES := cairo +## OCamlfind packages for the client +CLIENT_PACKAGES := oclosure + +## Directory with files to be statically served +LOCAL_STATIC = static + +## Debug application (yes/no): Debugging info in compilation, +## JavaScript, ocsigenserver +DEBUG := no + +## User to run server with (make run.*) +WWWUSER := www-data +WWWGROUP := www-data + +## Port for running the server (make run.*) +PORT := 80 + +## Port for testing (make test.*) +TEST_PORT := 8080 + +## Root of installation (must end with /) +PREFIX := / + +## Local folder for make test.* (must end with /) +TEST_PREFIX := local/ + +## The installation tree (relative to $(PREFIX) when installing/runnin +## or $(TEST_PREFIX) when testing). +# Configuration file $(PROJECT_NAME).conf +ETCDIR := etc/${PROJECT_NAME} +# Project's library $(PROJECT_NAME).cma (cmxs) +LIBDIR := var/lib/${PROJECT_NAME} +# Command pipe, eg. $ echo restart > $(INSTALL_PREFIX)$(CMDPIPE) +CMDPIPE := var/run/${PROJECT_NAME}-cmd +# Ocsigenserver's logging files +LOGDIR := var/log/${PROJECT_NAME} +# Ocsigenserver's persistent data files +DATADIR := var/data/${PROJECT_NAME} +# Copy of $(LOCAL_STATIC) +STATICDIR := var/www/${PROJECT_NAME}/static +# Project's JavaScript file +ELIOMSTATICDIR := var/www/${PROJECT_NAME}/eliom diff --git a/tutos/8.0/manual/files/tutorial/chapter1/distillery-oclosure/README b/tutos/8.0/manual/files/tutorial/chapter1/distillery-oclosure/README new file mode 100644 index 00000000..d2f190e5 --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter1/distillery-oclosure/README @@ -0,0 +1,59 @@ + +This project is (initially) generated by eliom-distillery as the basic +project "graffiti". + +It contains the following files: + + - graffiti.eliom + This is your initial source file. + All Eliom files (*.eliom, *.eliomi) in this directory are + automatically considered. To add a .ml/.mli file to your project, + add it to the variable SERVER_FILES or CLIENT_FILES. + + - static/ + The content of this folder is statically served. It contains + initially a basic CSS file for your project. + + - Makefile.options + Configure your project here! + + - graffiti.conf.in + This file is a template for the configuration file for + ocsigenserver. You will rarely have to edit itself - it takes its + variables from the Makefile.options. This way, the installation + rules and the configuration files are synchronized with respect to + the different folders. + + - Makefile + This contains all rules necessary to build, test, and run your + Eliom application. You better don't touch it ;) See below for the + relevant targets. + + - README + Not completely desribable here. + + +Here's some help on how to work with this basic distillery project: + + - Compile it + $ make all (or byte/opt) + + - Test your application by running ocsigenserver locally + $ make test.byte (or test.opt) + + - Install it + $ sudo make install (or install.byte/install.opt) + + - Run the server on the installation + $ sudo make run.byte (or run.opt) + If the user to run ocsigenserver is yourself, you don't need the + `sudo'. If Ocsigen isn't installed in a global position, however, + you may need to re-export some environment variables to make this + work: + $ sudo PATH=$PATH OCAMLPATH=$OCAMLPATH LD_LIBRARY_PATH=$LD_LIBRARY_PATH make run.byte/run.opt + + - If you need a findlib package in your project, add it to the + variables SERVER_PACKAGES and/or CLIENT_PACKAGES. + + - The directory static/ will be statically served. Put your CSS and + additional JavaScript files here! diff --git a/tutos/8.0/manual/files/tutorial/chapter1/distillery-oclosure/graffiti.conf.in b/tutos/8.0/manual/files/tutorial/chapter1/distillery-oclosure/graffiti.conf.in new file mode 100644 index 00000000..82244ac9 --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter1/distillery-oclosure/graffiti.conf.in @@ -0,0 +1,28 @@ +%%% This is the template for your configuration file. The %%VALUES%% below are +%%% taken from the Makefile to generate the actual configuration files. +%%% This comment will disappear. + + + + %%PORT%% + %%% Only set for running, not for testing + %%USERGROUP%% + %%LOGDIR%% + %%DATADIR%% + utf-8 + %%% Only set when debugging + %%DEBUGMODE%% + %%CMDPIPE%% + + + + %%% This will include the packages defined as SERVER_PACKAGES in your Makefile: + %%PACKAGES%% + + + + + + + + diff --git a/tutos/8.0/manual/files/tutorial/chapter1/distillery-oclosure/graffiti.eliom b/tutos/8.0/manual/files/tutorial/chapter1/distillery-oclosure/graffiti.eliom new file mode 100644 index 00000000..fa2bc8cc --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter1/distillery-oclosure/graffiti.eliom @@ -0,0 +1,163 @@ + + +{shared{ + open Eliom_lib.Lwt_ops + open Eliom_content.Html5.D + + let width = 700 + let height = 400 + + type messages = (string * int * (int * int) * (int * int)) + deriving (Json) +}} + +module My_app = + Eliom_registration.App ( + struct + let application_name = "graffiti" + end) + +let bus = Eliom_bus.create Json.t + +let canvas_elt = + canvas ~a:[a_width width; a_height height] + [pcdata "your browser doesn't support canvas"] + +let page = + html + (Eliom_tools.F.head ~title:"Graffiti" + ~css:[ + ["css";"common.css"]; + ["css";"hsvpalette.css"]; + ["css";"slider.css"]; + ["css";"graffiti.css"]; + ["graffiti_oclosure.js"]; + ] + ~js:[ ["graffiti_oclosure.js"] ] ()) + (body [h1 [pcdata "Graffiti"]; canvas_elt]) + + +let rgb_from_string color = (* color is in format "#rrggbb" *) + let get_color i = + (float_of_string ("0x"^(String.sub color (1+2*i) 2))) /. 255. + in + try get_color 0, get_color 1, get_color 2 with | _ -> 0.,0.,0. + +let draw_server, image_string = + let surface = + Cairo.image_surface_create Cairo.FORMAT_ARGB32 ~width ~height + in + let ctx = Cairo.create surface in + ((fun ((color : string), size, (x1, y1), (x2, y2)) -> + + (* Set thickness of brush *) + Cairo.set_line_width ctx (float size) ; + Cairo.set_line_join ctx Cairo.LINE_JOIN_ROUND ; + Cairo.set_line_cap ctx Cairo.LINE_CAP_ROUND ; + let red, green, blue = rgb_from_string color in + Cairo.set_source_rgb ctx ~red ~green ~blue ; + + Cairo.move_to ctx (float x1) (float y1) ; + Cairo.line_to ctx (float x2) (float y2) ; + Cairo.close_path ctx ; + + (* Apply the ink *) + Cairo.stroke ctx ; + ), + (fun () -> + let b = Buffer.create 10000 in + (* Output a PNG in a string *) + Cairo_png.surface_write_to_stream surface (Buffer.add_string b); + Buffer.contents b + )) + +let imageservice = + Eliom_registration.String.register_service + ~path:["image"] + ~get_params:Eliom_parameter.unit + (fun () () -> Lwt.return (image_string (), "image/png")) + +{client{ + + let draw ctx (color, size, (x1, y1), (x2, y2)) = + ctx##strokeStyle <- (Js.string color); + ctx##lineWidth <- float size; + ctx##beginPath(); + ctx##moveTo(float x1, float y1); + ctx##lineTo(float x2, float y2); + ctx##stroke() + + let init_client () = + + let canvas = Eliom_content.Html5.To_dom.of_canvas %canvas_elt in + + let ctx = canvas##getContext (Dom_html._2d_) in + ctx##lineCap <- Js.string "round"; + + (* The initial image: *) + let img = + Eliom_content.Html5.To_dom.of_img + (img ~alt:"canvas" + ~src:(make_uri ~service:%imageservice ()) + ()) + in + img##onload <- Dom_html.handler + (fun ev -> ctx##drawImage(img, 0., 0.); Js._false); + + (* Size of the brush *) + let slider = jsnew Goog.Ui.slider(Js.null) in + slider##setMinimum(1.); + slider##setMaximum(80.); + slider##setValue(10.); + slider##setMoveToPointEnabled(Js._true); + slider##render(Js.some Dom_html.document##body); + (* The color palette: *) + let pSmall = + jsnew Goog.Ui.hsvPalette(Js.null, Js.null, + Js.some (Js.string "goog-hsv-palette-sm")) + in + pSmall##render(Js.some Dom_html.document##body); + + let x = ref 0 and y = ref 0 in + + let set_coord ev = + let x0, y0 = Dom_html.elementClientPosition canvas in + x := ev##clientX - x0; y := ev##clientY - y0 + in + + let compute_line ev = + let oldx = !x and oldy = !y in + set_coord ev; + let color = Js.to_string (pSmall##getColor()) in + let size = int_of_float (Js.to_float (slider##getValue())) in + (color, size, (oldx, oldy), (!x, !y)) + in + + let line ev = + let v = compute_line ev in + let _ = Eliom_bus.write %bus v in + draw ctx v; + Lwt.return () in + + Lwt.async + (fun () -> + let open Lwt_js_events in + mousedowns canvas + (fun ev _ -> + set_coord ev; line ev >>= fun () -> + Lwt.pick [mousemoves Dom_html.document (fun x _ -> line x); + mouseup Dom_html.document >>= line])); + + Lwt.async (fun () -> Lwt_stream.iter (draw ctx) (Eliom_bus.stream %bus)); + + +}} + +let _ = Lwt_stream.iter draw_server (Eliom_bus.stream bus) + +let main_service = + My_app.register_service ~path:[""] ~get_params:Eliom_parameter.unit + (fun () () -> + (* Cf. the box "Client side side-effects on the server" *) + ignore {unit{ init_client () }}; + Lwt.return page) diff --git a/tutos/8.0/manual/files/tutorial/chapter1/distillery-oclosure/update-symlinks.sh b/tutos/8.0/manual/files/tutorial/chapter1/distillery-oclosure/update-symlinks.sh new file mode 100755 index 00000000..f49ae5cf --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter1/distillery-oclosure/update-symlinks.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +ln -s ../../static . + diff --git a/tutos/8.0/manual/files/tutorial/chapter1/no_oclosure/.depend b/tutos/8.0/manual/files/tutorial/chapter1/no_oclosure/.depend new file mode 100644 index 00000000..c5555cda --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter1/no_oclosure/.depend @@ -0,0 +1,8 @@ +_server/graffiti.cmo : +_server/graffiti.cmx : +_server/graffiti.cmo : graffiti.type_mli +_server/graffiti.cmx : graffiti.type_mli +_client/graffiti.cmo : +_client/graffiti.cmx : +_client/graffiti.cmo : graffiti.type_mli +_client/graffiti.cmx : graffiti.type_mli diff --git a/tutos/8.0/manual/files/tutorial/chapter1/no_oclosure/Makefile b/tutos/8.0/manual/files/tutorial/chapter1/no_oclosure/Makefile new file mode 100644 index 00000000..ada2060e --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter1/no_oclosure/Makefile @@ -0,0 +1,133 @@ + +## Sample Makefile for eliom application. + +APP_NAME := graffiti + +## Packages required to build the server part of the application + +SERVER_PACKAGES := cairo + +## Packages to be linked in the client part + +CLIENT_PACKAGES := + +## Source files for the server part + +SERVER_FILES := ${wildcard *.eliom} + +## Source files for the client part + +CLIENT_FILES := ${wildcard *.eliom} + +## Required binaries + +ELIOMC := eliomc +ELIOMOPT := eliomopt +ELIOMDEP := eliomdep +JS_OF_ELIOM := js_of_eliom + +## Where to put intermediate object files. +## - ELIOM_{SERVER,CLIENT}_DIR must be distinct +## - ELIOM_CLIENT_DIR mustn't be the local dir. +## - ELIOM_SERVER_DIR could be ".", but you need to +## remove it from the "clean" rules... + +export ELIOM_SERVER_DIR := _server +export ELIOM_CLIENT_DIR := _client +export ELIOM_TYPE_DIR := . + +##################################### + +all: byte opt +byte:: ${APP_NAME}.cma ${APP_NAME}.js +opt:: ${APP_NAME}.cmxs ${APP_NAME}.js + +#### Server side compilation ####### + +SERVER_INC := ${addprefix -package ,${SERVER_PACKAGES}} + +SERVER_OBJS := $(patsubst %.eliom,${ELIOM_SERVER_DIR}/%.cmo, ${SERVER_FILES}) +SERVER_OBJS := $(patsubst %.ml,${ELIOM_SERVER_DIR}/%.cmo, ${SERVER_OBJS}) + +${APP_NAME}.cma: ${SERVER_OBJS} + ${ELIOMC} -a -o $@ $^ +${APP_NAME}.cmxa: ${SERVER_OBJS:.cmo=.cmx} + ${ELIOMOPT} -a -o $@ $^ + +${ELIOM_TYPE_DIR}/%.type_mli: %.eliom + ${ELIOMC} -infer ${SERVER_INC} $< + +${ELIOM_SERVER_DIR}/%.cmi: %.mli + ${ELIOMC} -c ${SERVER_INC} $< + +${ELIOM_SERVER_DIR}/%.cmo: %.ml + ${ELIOMC} -c ${SERVER_INC} $< +${ELIOM_SERVER_DIR}/%.cmo: %.eliom + ${ELIOMC} -c ${SERVER_INC} $< + +${ELIOM_SERVER_DIR}/%.cmx: %.ml + ${ELIOMOPT} -c ${SERVER_INC} $< +${ELIOM_SERVER_DIR}/%.cmx: %.eliom + ${ELIOMOPT} -c ${SERVER_INC} $< + +%.cmxs: %.cmxa + $(ELIOMOPT) -shared -linkall -o $@ $< + +##### Client side compilation #### + +SERVER_INC_FOR_JS_OF_ELIOM := ${addprefix -package ,${SERVER_PACKAGES}} + +CLIENT_LIBS := ${addprefix -package ,${CLIENT_PACKAGES}} +CLIENT_INC := ${addprefix -package ,${CLIENT_PACKAGES}} + +CLIENT_OBJS := $(patsubst %.eliom,${ELIOM_CLIENT_DIR}/%.cmo, ${CLIENT_FILES}) +CLIENT_OBJS := $(patsubst %.ml,${ELIOM_CLIENT_DIR}/%.cmo, ${CLIENT_OBJS}) + +${APP_NAME}.js: ${CLIENT_OBJS} + ${JS_OF_ELIOM} -o $@ ${CLIENT_LIBS} $^ + +${ELIOM_CLIENT_DIR}/%.cmi: %.mli + ${JS_OF_ELIOM} -c ${CLIENT_INC} $< + +${ELIOM_CLIENT_DIR}/%.cmo: %.eliom + ${JS_OF_ELIOM} -c ${SERVER_INC_FOR_JS_OF_ELIOM} ${CLIENT_INC} $< +${ELIOM_CLIENT_DIR}/%.cmo: %.ml + ${JS_OF_ELIOM} -c ${CLIENT_INC} $< + +############ + +## Clean up + +clean: + -rm -f *.cm[ioax] *.cmxa *.cmxs *.o *.a *.annot + -rm -f *.type_mli + -rm -f ${APP_NAME}.js + -rm -rf ${ELIOM_CLIENT_DIR} ${ELIOM_SERVER_DIR} + +distclean: clean.local + -rm -f *~ \#* .\#* + +## Dependencies + +depend: .depend +.depend: ${SERVER_FILES} ${CLIENT_FILES} + $(ELIOMDEP) -server ${SERVER_INC} ${SERVER_FILES} > .depend + $(ELIOMDEP) -client ${CLIENT_INC} ${CLIENT_FILES} >> .depend + +## Warning: Dependencies towards *.eliom are not handled by eliomdep yet. +## Add manually dependencies between cmo and cmx files here, +## for example: +## oneeliomfile.cmo: anothereliomfile.cmo +## oneeliomfile.cmx: anothereliomfile.cmx + +-include .depend + +## installation ######### + +STATICDIR := /tmp/static + +$(STATICDIR): + mkdir -p $@ + +install: all $(STATICDIR) + cp $(APP_NAME).js $(STATICDIR)/$(APP_NAME).js diff --git a/tutos/8.0/manual/files/tutorial/chapter1/no_oclosure/graffiti.conf b/tutos/8.0/manual/files/tutorial/chapter1/no_oclosure/graffiti.conf new file mode 100644 index 00000000..5e4ddfd8 --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter1/no_oclosure/graffiti.conf @@ -0,0 +1,38 @@ + + + + + 8080 + + + + /tmp + /tmp + + + /tmp/ocsigen_command + + utf-8 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tutos/8.0/manual/files/tutorial/chapter1/no_oclosure/graffiti.eliom b/tutos/8.0/manual/files/tutorial/chapter1/no_oclosure/graffiti.eliom new file mode 100644 index 00000000..967438c7 --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter1/no_oclosure/graffiti.eliom @@ -0,0 +1,124 @@ +{shared{ + open Eliom_content + open Eliom_content.Html5.D + open Eliom_lib.Lwt_ops + let width = 700 + let height = 400 +}} + +module My_appl = + Eliom_registration.App ( + struct + let application_name = "graffiti" + end) + +{client{ + let draw ctx (color, size, (x1, y1), (x2, y2)) = + ctx##strokeStyle <- (Js.string color); + ctx##lineWidth <- float size; + ctx##beginPath(); + ctx##moveTo(float x1, float y1); + ctx##lineTo(float x2, float y2); + ctx##stroke() +}} + +{shared{ + type messages = (string * int * (int * int) * (int * int)) deriving (Json) +}} + +let bus = Eliom_bus.create ~name:"graff" Json.t + +let rgb_from_string color = (* color is in format "#rrggbb" *) + let get_color i = (float_of_string ("0x"^(String.sub color (1+2*i) 2))) /. 255. in + try get_color 0, get_color 1, get_color 2 with | _ -> 0.,0.,0. + +let draw_server, image_string = + let surface = Cairo.image_surface_create Cairo.FORMAT_ARGB32 ~width ~height in + let ctx = Cairo.create surface in + ((fun ((color : string), size, (x1, y1), (x2, y2)) -> + + (* Set thickness of brush *) + Cairo.set_line_width ctx (float size) ; + Cairo.set_line_join ctx Cairo.LINE_JOIN_ROUND ; + Cairo.set_line_cap ctx Cairo.LINE_CAP_ROUND ; + let red, green, blue = rgb_from_string color in + Cairo.set_source_rgb ctx ~red ~green ~blue ; + + Cairo.move_to ctx (float x1) (float y1) ; + Cairo.line_to ctx (float x2) (float y2) ; + Cairo.close_path ctx ; + + (* Apply the ink *) + Cairo.stroke ctx ; + ), + (fun () -> + let b = Buffer.create 10000 in + (* Output a PNG in a string *) + Cairo_png.surface_write_to_stream surface (Buffer.add_string b); + Buffer.contents b + )) + +let _ = Lwt_stream.iter draw_server (Eliom_bus.stream bus) + +let imageservice = + Eliom_registration.String.register_service + ~path:["image"] + ~get_params:Eliom_parameter.unit + (fun () () -> Lwt.return (image_string (), "image/png")) + +let page = + html + (head (title (pcdata "Graffiti")) []) + (body [h1 [pcdata "Graffiti"]]) + +let init_client () = ignore {unit{ + let canvas = Dom_html.createCanvas Dom_html.document in + let ctx = canvas##getContext (Dom_html._2d_) in + canvas##width <- width; canvas##height <- height; + ctx##lineCap <- Js.string "round"; + + Dom.appendChild Dom_html.document##body canvas; + + (* The initial image: *) + let img = + Html5.To_dom.of_img + (img ~alt:"canvas" + ~src:(make_uri ~service:%imageservice ()) + ()) + in + img##onload <- Dom_html.handler + (fun ev -> ctx##drawImage(img, 0., 0.); Js._false); + + let x = ref 0 and y = ref 0 in + + let set_coord ev = + let x0, y0 = Dom_html.elementClientPosition canvas in + x := ev##clientX - x0; y := ev##clientY - y0 in + + let compute_line ev = + let oldx = !x and oldy = !y in + set_coord ev; + ("#ff9933", 5, (oldx, oldy), (!x, !y)) + in + + let line ev = + let v = compute_line ev in + let _ = Eliom_bus.write %bus v in + draw ctx v; + Lwt.return () + in + + let _ = Lwt_stream.iter (draw ctx) (Eliom_bus.stream %bus) in + + let open Lwt_js_events in + ignore (mousedowns canvas + (fun ev _ -> set_coord ev; line ev >>= fun () -> + Lwt.pick [mousemoves Dom_html.document (fun a _ -> line a); + mouseup Dom_html.document >>= line])); +}} + +let main_service = + My_appl.register_service ~path:[""] ~get_params:Eliom_parameter.unit + (fun () () -> + init_client (); + Lwt.return page) diff --git a/tutos/8.0/manual/files/tutorial/chapter1/start/Makefile b/tutos/8.0/manual/files/tutorial/chapter1/start/Makefile new file mode 100644 index 00000000..4b16f914 --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter1/start/Makefile @@ -0,0 +1,2 @@ +graffiti.cmo: graffiti.ml + ocamlfind ocamlc -thread -package eliom.server -c graffiti.ml diff --git a/tutos/8.0/manual/files/tutorial/chapter1/start/graffiti.conf b/tutos/8.0/manual/files/tutorial/chapter1/start/graffiti.conf new file mode 100644 index 00000000..82b016de --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter1/start/graffiti.conf @@ -0,0 +1,29 @@ + + + + + 8080 + + + + /tmp + /tmp + + + /tmp/ocsigen_command + + + + + + + + + + + + + + + + diff --git a/tutos/8.0/manual/files/tutorial/chapter1/start/graffiti.ml b/tutos/8.0/manual/files/tutorial/chapter1/start/graffiti.ml new file mode 100644 index 00000000..3c597168 --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter1/start/graffiti.ml @@ -0,0 +1,10 @@ +open Lwt +open Eliom_parameter +open Eliom_content.Html5.D +open Eliom_registration.Html5 + +let main_service = + register_service ~path:["graff"] ~get_params:unit + (fun () () -> return (html (head (title (pcdata "")) []) + (body [h1 [pcdata "Graffiti"]]))) + diff --git a/tutos/8.0/manual/files/tutorial/chapter1/with_oclosure/.depend b/tutos/8.0/manual/files/tutorial/chapter1/with_oclosure/.depend new file mode 100644 index 00000000..5736884c --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter1/with_oclosure/.depend @@ -0,0 +1,8 @@ +_server/graffiti.cmo: _server/graffiti.type_mli +_server/graffiti.cmx: _server/graffiti.type_mli +_server/graffiti.cmo: +_server/graffiti.cmx: +_client/graffiti.cmo: _server/graffiti.type_mli +_client/graffiti.cmx: _server/graffiti.type_mli +_client/graffiti.cmo: +_client/graffiti.cmx: diff --git a/tutos/8.0/manual/files/tutorial/chapter1/with_oclosure/Makefile b/tutos/8.0/manual/files/tutorial/chapter1/with_oclosure/Makefile new file mode 100644 index 00000000..e9067111 --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter1/with_oclosure/Makefile @@ -0,0 +1,144 @@ + +## Sample Makefile for eliom application. + +APP_NAME := graffiti + +## Packages required to build the server part of the application + +SERVER_PACKAGES := cairo + +## Packages to be linked in the client part + +CLIENT_PACKAGES := oclosure + +## Source files for the server part + +SERVER_FILES := ${wildcard *.eliom} + +## Source files for the client part + +CLIENT_FILES := ${wildcard *.eliom} + +## Required binaries + +ELIOMC := eliomc +ELIOMOPT := eliomopt +ELIOMDEP := eliomdep +JS_OF_ELIOM := js_of_eliom +OCLOSURE_REQ := oclosure_req + +## Where to put intermediate object files. +## - ELIOM_{SERVER,CLIENT}_DIR must be distinct +## - ELIOM_CLIENT_DIR mustn't be the local dir. +## - ELIOM_SERVER_DIR could be ".", but you need to +## remove it from the "clean" rules... + +export ELIOM_SERVER_DIR := _server +export ELIOM_CLIENT_DIR := _client +export ELIOM_TYPE_DIR := ${ELIOM_SERVER_DIR} + +##################################### + +all: byte opt +byte:: ${APP_NAME}.cma ${APP_NAME}.js ${APP_NAME}_oclosure.js +opt:: ${APP_NAME}.cmxs ${APP_NAME}.js ${APP_NAME}_oclosure.js + +#### Server side compilation ####### + +SERVER_INC := ${addprefix -package ,${SERVER_PACKAGES}} + +SERVER_OBJS := $(patsubst %.eliom,${ELIOM_SERVER_DIR}/%.cmo, ${SERVER_FILES}) +SERVER_OBJS := $(patsubst %.ml,${ELIOM_SERVER_DIR}/%.cmo, ${SERVER_OBJS}) + +${APP_NAME}.cma: ${SERVER_OBJS} + ${ELIOMC} -a -o $@ $^ +${APP_NAME}.cmxa: ${SERVER_OBJS:.cmo=.cmx} + ${ELIOMOPT} -a -o $@ $^ + +${ELIOM_TYPE_DIR}/%.type_mli: %.eliom + ${ELIOMC} -infer ${SERVER_INC} $< + +${ELIOM_SERVER_DIR}/%.cmi: %.mli + ${ELIOMC} -c ${SERVER_INC} $< + +${ELIOM_SERVER_DIR}/%.cmo: %.ml + ${ELIOMC} -c ${SERVER_INC} $< +${ELIOM_SERVER_DIR}/%.cmo: %.eliom + ${ELIOMC} -c -noinfer ${SERVER_INC} $< + +${ELIOM_SERVER_DIR}/%.cmx: %.ml + ${ELIOMOPT} -c ${SERVER_INC} $< +${ELIOM_SERVER_DIR}/%.cmx: %.eliom + ${ELIOMOPT} -c -noinfer ${SERVER_INC} $< + +%.cmxs: %.cmxa + $(ELIOMOPT) -shared -linkall -o $@ $< + +##### Client side compilation #### + +CLIENT_LIBS := ${addprefix -package ,${CLIENT_PACKAGES}} +CLIENT_INC := ${addprefix -package ,${CLIENT_PACKAGES}} + +CLIENT_OBJS := $(patsubst %.eliom,${ELIOM_CLIENT_DIR}/%.cmo, ${CLIENT_FILES}) +CLIENT_OBJS := $(patsubst %.ml,${ELIOM_CLIENT_DIR}/%.cmo, ${CLIENT_OBJS}) + +${APP_NAME}.js: ${CLIENT_OBJS} + ${JS_OF_ELIOM} -o $@ ${CLIENT_LIBS} $^ + +${ELIOM_CLIENT_DIR}/%.cmi: %.mli + ${JS_OF_ELIOM} -c ${CLIENT_INC} $< + +${ELIOM_CLIENT_DIR}/%.cmo: %.eliom + ${JS_OF_ELIOM} -c ${CLIENT_INC} $< +${ELIOM_CLIENT_DIR}/%.cmo: %.ml + ${JS_OF_ELIOM} -c ${CLIENT_INC} $< + +############ + +## Clean up + +clean: + -rm -f *.cm[ioax] *.cmxa *.cmxs *.o *.a *.annot + -rm -f *.type_mli + -rm -f ${APP_NAME}.js + -rm -rf ${ELIOM_CLIENT_DIR} ${ELIOM_SERVER_DIR} + -rm -f $(APP_NAME)_oclosure.js + +distclean: clean + -rm -f *~ \#* .\#* + -rm -f .depend + +## Dependencies + +depend: .depend +.depend: ${SERVER_FILES} ${CLIENT_FILES} + $(ELIOMDEP) -server ${SERVER_INC} ${SERVER_FILES} > .depend + $(ELIOMDEP) -client ${CLIENT_INC} ${CLIENT_FILES} >> .depend + +## Warning: Dependencies towards *.eliom are not handled by eliomdep yet. +## Add manually dependencies between cmo and cmx files here, +## for example: +## oneeliomfile.cmo: anothereliomfile.cmo +## oneeliomfile.cmx: anothereliomfile.cmx + +include .depend + +## installation ######### + +STATICDIR := /tmp/static + +$(STATICDIR): + mkdir -p $@ + +install: all $(STATICDIR) + cp $(APP_NAME)_oclosure.js $(STATICDIR)/$(APP_NAME)_oclosure.js + cp $(APP_NAME).js $(STATICDIR)/$(APP_NAME).js + +## oclosure ############# + +OCAML := ocaml +OCAMLFIND := ocamlfind +OCLOSUREDIR := $(shell ${OCAMLFIND} query oclosure) + +$(APP_NAME)_oclosure.js: $(APP_NAME).js + ${OCLOSURE_REQ} $^ diff --git a/tutos/8.0/manual/files/tutorial/chapter1/with_oclosure/graffiti.conf b/tutos/8.0/manual/files/tutorial/chapter1/with_oclosure/graffiti.conf new file mode 100644 index 00000000..5e4ddfd8 --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter1/with_oclosure/graffiti.conf @@ -0,0 +1,38 @@ + + + + + 8080 + + + + /tmp + /tmp + + + /tmp/ocsigen_command + + utf-8 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tutos/8.0/manual/files/tutorial/chapter1/with_oclosure/graffiti.eliom b/tutos/8.0/manual/files/tutorial/chapter1/with_oclosure/graffiti.eliom new file mode 100644 index 00000000..442f125b --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter1/with_oclosure/graffiti.eliom @@ -0,0 +1,163 @@ +{shared{ + open Eliom_content + open Eliom_content.Html5.D + open Eliom_lib.Lwt_ops + let width = 700 + let height = 400 +}} + +module My_appl = + Eliom_registration.App ( + struct + let application_name = "graffiti" + end) + +{client{ + let draw ctx (color, size, (x1, y1), (x2, y2)) = + ctx##strokeStyle <- (Js.string color); + ctx##lineWidth <- float size; + ctx##beginPath(); + ctx##moveTo(float x1, float y1); + ctx##lineTo(float x2, float y2); + ctx##stroke() +}} + +{shared{ + type messages = (string * int * (int * int) * (int * int)) deriving (Json) +}} + +let bus = Eliom_bus.create ~name:"graff" Json.t + +let rgb_from_string color = (* color is in format "#rrggbb" *) + let get_color i = (float_of_string ("0x"^(String.sub color (1+2*i) 2))) /. 255. in + try get_color 0, get_color 1, get_color 2 with | _ -> 0.,0.,0. + +let draw_server, image_string = + let surface = Cairo.image_surface_create Cairo.FORMAT_ARGB32 ~width ~height in + let ctx = Cairo.create surface in + ((fun ((color : string), size, (x1, y1), (x2, y2)) -> + + (* Set thickness of brush *) + Cairo.set_line_width ctx (float size) ; + Cairo.set_line_join ctx Cairo.LINE_JOIN_ROUND ; + Cairo.set_line_cap ctx Cairo.LINE_CAP_ROUND ; + let red, green, blue = rgb_from_string color in + Cairo.set_source_rgb ctx ~red ~green ~blue ; + + Cairo.move_to ctx (float x1) (float y1) ; + Cairo.line_to ctx (float x2) (float y2) ; + Cairo.close_path ctx ; + + (* Apply the ink *) + Cairo.stroke ctx ; + ), + (fun () -> + let b = Buffer.create 10000 in + (* Output a PNG in a string *) + Cairo_png.surface_write_to_stream surface (Buffer.add_string b); + Buffer.contents b + )) + +let _ = Lwt_stream.iter draw_server (Eliom_bus.stream bus) + +let imageservice = + Eliom_registration.String.register_service + ~path:["image"] + ~get_params:Eliom_parameter.unit + (fun () () -> Lwt.return (image_string (), "image/png")) + +let canvas_elt = + canvas ~a:[a_width width; a_height height] + [pcdata "your browser doesn't support canvas"] + +let page = + html + (head + (title (pcdata "Graffiti")) + [ css_link + ~uri:(make_uri (Eliom_service.static_dir ()) + ["css";"common.css"]) (); + css_link + ~uri:(make_uri (Eliom_service.static_dir ()) + ["css";"hsvpalette.css"]) (); + css_link + ~uri:(make_uri (Eliom_service.static_dir ()) + ["css";"slider.css"]) (); + css_link + ~uri:(make_uri (Eliom_service.static_dir ()) + ["css";"graffiti.css"]) (); + js_script + ~uri:(make_uri (Eliom_service.static_dir ()) + ["graffiti_oclosure.js"]) (); + ]) + (body [h1 [pcdata "Graffiti"]; canvas_elt]) + +let init_client () = ignore {unit{ + + (* Initialize the canvas *) + let canvas = Html5.To_dom.of_canvas %canvas_elt in + let ctx = canvas##getContext (Dom_html._2d_) in + ctx##lineCap <- Js.string "round"; + + (* The initial image: *) + let img = + Html5.To_dom.of_img + (img ~alt:"canvas" + ~src:(make_uri ~service:%imageservice ()) + ()) + in + img##onload <- Dom_html.handler + (fun _ -> ctx##drawImage(img, 0., 0.); Js._false); + + (* Size of the brush *) + let slider = jsnew Goog.Ui.slider(Js.null) in + slider##setOrientation(Goog.Ui.SliderBase.Orientation._VERTICAL); + slider##setMinimum(1.); + slider##setMaximum(80.); + slider##setValue(10.); + slider##setMoveToPointEnabled(Js._true); + slider##render(Js.some Dom_html.document##body); + + (* The color palette: *) + let pSmall = + jsnew Goog.Ui.hsvPalette(Js.null, Js.null, + Js.some (Js.string "goog-hsv-palette-sm")) + in + pSmall##render(Js.some Dom_html.document##body); + + let x = ref 0 and y = ref 0 in + + let set_coord ev = + let x0, y0 = Dom_html.elementClientPosition canvas in + x := ev##clientX - x0; y := ev##clientY - y0 in + + let compute_line ev = + let oldx = !x and oldy = !y in + set_coord ev; + let color = Js.to_string (pSmall##getColor()) in + let size = int_of_float (Js.to_float (slider##getValue())) in + (color, size, (oldx, oldy), (!x, !y)) + in + + let line ev = + let v = compute_line ev in + let _ = Eliom_bus.write %bus v in + draw ctx v; + Lwt.return () + in + + let _ = Lwt_stream.iter (draw ctx) (Eliom_bus.stream %bus) in + + let open Lwt_js_events in + ignore (mousedowns canvas + (fun ev _ -> set_coord ev; line ev >>= fun () -> + Lwt.pick [mousemoves Dom_html.document (fun x _ -> line x); + mouseup Dom_html.document >>= line])); +}} + +let main_service = + My_appl.register_service ~path:[""] ~get_params:Eliom_parameter.unit + (fun () () -> + init_client (); + Lwt.return page) + diff --git a/tutos/8.0/manual/files/tutorial/chapter2/Makefile b/tutos/8.0/manual/files/tutorial/chapter2/Makefile new file mode 100644 index 00000000..8c47d398 --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter2/Makefile @@ -0,0 +1,240 @@ + +##---------------------------------------------------------------------- +## DISCLAIMER +## +## This file contains the rules to make an Eliom project. The project is +## configured through the variables in the file Makefile.options. +##---------------------------------------------------------------------- + +include Makefile.options + +##---------------------------------------------------------------------- +## Internals + +## Required binaries +ELIOMC := eliomc -ppx +ELIOMOPT := eliomopt -ppx +JS_OF_ELIOM := js_of_eliom -ppx +ELIOMDEP := eliomdep +OCSIGENSERVER := ocsigenserver +OCSIGENSERVER.OPT := ocsigenserver.opt + +## Where to put intermediate object files. +## - ELIOM_{SERVER,CLIENT}_DIR must be distinct +## - ELIOM_CLIENT_DIR must not be the local dir. +## - ELIOM_SERVER_DIR could be ".", but you need to +## remove it from the "clean" rules... +export ELIOM_SERVER_DIR := _server +export ELIOM_CLIENT_DIR := _client +export ELIOM_TYPE_DIR := _server +DEPSDIR := _deps + +ifeq ($(DEBUG),yes) + GENERATE_DEBUG ?= -g + RUN_DEBUG ?= "-v" + DEBUG_JS ?= -jsopt -pretty -jsopt -noinline -jsopt -debuginfo +endif + +##---------------------------------------------------------------------- +## General + +.PHONY: all byte opt +all: byte opt +byte opt:: $(TEST_PREFIX)$(ELIOMSTATICDIR)/${PROJECT_NAME}.js +byte opt:: $(TEST_PREFIX)$(ETCDIR)/$(PROJECT_NAME).conf +byte opt:: $(TEST_PREFIX)$(ETCDIR)/$(PROJECT_NAME)-test.conf +byte:: $(TEST_PREFIX)$(LIBDIR)/${PROJECT_NAME}.cma +opt:: $(TEST_PREFIX)$(LIBDIR)/${PROJECT_NAME}.cmxs + +DIST_DIRS = $(ETCDIR) $(DATADIR) $(LIBDIR) $(LOGDIR) $(STATICDIR) $(ELIOMSTATICDIR) $(shell dirname $(CMDPIPE)) + +##---------------------------------------------------------------------- +## Testing + +DIST_FILES = $(ELIOMSTATICDIR)/$(PROJECT_NAME).js $(LIBDIR)/$(PROJECT_NAME).cma + +.PHONY: test.byte test.opt +test.byte: $(addprefix $(TEST_PREFIX),$(ETCDIR)/$(PROJECT_NAME)-test.conf $(DIST_DIRS) $(DIST_FILES)) + $(OCSIGENSERVER) $(RUN_DEBUG) -c $< +test.opt: $(addprefix $(TEST_PREFIX),$(ETCDIR)/$(PROJECT_NAME)-test.conf $(DIST_DIRS) $(patsubst %.cma,%.cmxs, $(DIST_FILES))) + $(OCSIGENSERVER.OPT) $(RUN_DEBUG) -c $< + +$(addprefix $(TEST_PREFIX), $(DIST_DIRS)): + mkdir -p $@ + +##---------------------------------------------------------------------- +## Installing & Running + +.PHONY: install install.byte install.byte install.opt install.static install.etc install.lib install.lib.byte install.lib.opt run.byte run.opt +install: install.byte install.opt +install.byte: install.lib.byte install.etc install.static | $(addprefix $(PREFIX),$(DATADIR) $(LOGDIR) $(shell dirname $(CMDPIPE))) +install.opt: install.lib.opt install.etc install.static | $(addprefix $(PREFIX),$(DATADIR) $(LOGDIR) $(shell dirname $(CMDPIPE))) +install.lib: install.lib.byte install.lib.opt +install.lib.byte: $(TEST_PREFIX)$(LIBDIR)/$(PROJECT_NAME).cma | $(PREFIX)$(LIBDIR) + install $< $(PREFIX)$(LIBDIR) +install.lib.opt: $(TEST_PREFIX)$(LIBDIR)/$(PROJECT_NAME).cmxs | $(PREFIX)$(LIBDIR) + install $< $(PREFIX)$(LIBDIR) +install.static: $(TEST_PREFIX)$(ELIOMSTATICDIR)/$(PROJECT_NAME).js | $(PREFIX)$(STATICDIR) $(PREFIX)$(ELIOMSTATICDIR) + cp -r $(LOCAL_STATIC)/* $(PREFIX)$(STATICDIR) + [ -z $(WWWUSER) ] || chown -R $(WWWUSER) $(PREFIX)$(STATICDIR) + install $(addprefix -o ,$(WWWUSER)) $< $(PREFIX)$(ELIOMSTATICDIR) +install.etc: $(TEST_PREFIX)$(ETCDIR)/$(PROJECT_NAME).conf | $(PREFIX)$(ETCDIR) + install $< $(PREFIX)$(ETCDIR)/$(PROJECT_NAME).conf + +.PHONY: +print-install-files: + @echo $(PREFIX)$(LIBDIR) + @echo $(PREFIX)$(STATICDIR) + @echo $(PREFIX)$(ELIOMSTATICDIR) + @echo $(PREFIX)$(ETCDIR) + +$(addprefix $(PREFIX),$(ETCDIR) $(LIBDIR)): + install -d $@ +$(addprefix $(PREFIX),$(DATADIR) $(LOGDIR) $(STATICDIR) $(ELIOMSTATICDIR) $(shell dirname $(CMDPIPE))): + install $(addprefix -o ,$(WWWUSER)) -d $@ + +run.byte: + $(OCSIGENSERVER) $(RUN_DEBUG) -c ${PREFIX}${ETCDIR}/${PROJECT_NAME}.conf +run.opt: + $(OCSIGENSERVER.OPT) $(RUN_DEBUG) -c ${PREFIX}${ETCDIR}/${PROJECT_NAME}.conf + +##---------------------------------------------------------------------- +## Aux + +# Use `eliomdep -sort' only in OCaml>4 +ifeq ($(shell ocamlc -version|cut -c1),4) +eliomdep=$(shell $(ELIOMDEP) $(1) -ppx -sort $(2) $(filter %.eliom %.ml,$(3)))) +else +eliomdep=$(3) +endif +objs=$(patsubst %.ml,$(1)/%.$(2),$(patsubst %.eliom,$(1)/%.$(2),$(filter %.eliom %.ml,$(3)))) +depsort=$(call objs,$(1),$(2),$(call eliomdep,$(3),$(4),$(5))) + +##---------------------------------------------------------------------- +## Config files + +FINDLIB_PACKAGES=$(patsubst %,\,$(SERVER_PACKAGES)) +EDIT_WARNING=DON\'T EDIT THIS FILE! It is generated from $(PROJECT_NAME).conf.in, edit that one, or the variables in Makefile.options +SED_ARGS := -e "/^ *%%%/d" +SED_ARGS += -e "s|%%PROJECT_NAME%%|$(PROJECT_NAME)|g" +SED_ARGS += -e "s|%%DATABASE_NAME%%|$(DATABASE_NAME)|g" +SED_ARGS += -e "s|%%DATABASE_USER%%|$(DATABASE_USER)|g" +SED_ARGS += -e "s|%%CMDPIPE%%|%%PREFIX%%$(CMDPIPE)|g" +SED_ARGS += -e "s|%%LOGDIR%%|%%PREFIX%%$(LOGDIR)|g" +SED_ARGS += -e "s|%%DATADIR%%|%%PREFIX%%$(DATADIR)|g" +SED_ARGS += -e "s|%%PERSISTENT_DATA_BACKEND%%|$(PERSISTENT_DATA_BACKEND)|g" +SED_ARGS += -e "s|%%LIBDIR%%|%%PREFIX%%$(LIBDIR)|g" +SED_ARGS += -e "s|%%WARNING%%|$(EDIT_WARNING)|g" +SED_ARGS += -e "s|%%PACKAGES%%|$(FINDLIB_PACKAGES)|g" +SED_ARGS += -e "s|%%ELIOMSTATICDIR%%|%%PREFIX%%$(ELIOMSTATICDIR)|g" +ifeq ($(DEBUG),yes) + SED_ARGS += -e "s|%%DEBUGMODE%%|\|g" +else + SED_ARGS += -e "s|%%DEBUGMODE%%||g" +endif + +LOCAL_SED_ARGS := -e "s|%%PORT%%|$(TEST_PORT)|g" +LOCAL_SED_ARGS += -e "s|%%STATICDIR%%|$(LOCAL_STATIC)|g" +LOCAL_SED_ARGS += -e "s|%%USERGROUP%%||g" +GLOBAL_SED_ARGS := -e "s|%%PORT%%|$(PORT)|g" +GLOBAL_SED_ARGS += -e "s|%%STATICDIR%%|%%PREFIX%%$(STATICDIR)|g" +ifeq ($(WWWUSER)$(WWWGROUP),) + GLOBAL_SED_ARGS += -e "s|%%USERGROUP%%||g" +else + GLOBAL_SED_ARGS += -e "s|%%USERGROUP%%|$(WWWUSER)$(WWWGROUP)|g" +endif + +$(TEST_PREFIX)${ETCDIR}/${PROJECT_NAME}.conf: ${PROJECT_NAME}.conf.in Makefile.options | $(TEST_PREFIX)$(ETCDIR) + sed $(SED_ARGS) $(GLOBAL_SED_ARGS) $< | sed -e "s|%%PREFIX%%|$(PREFIX)|g" > $@ +$(TEST_PREFIX)${ETCDIR}/${PROJECT_NAME}-test.conf: ${PROJECT_NAME}.conf.in Makefile.options | $(TEST_PREFIX)$(ETCDIR) + sed $(SED_ARGS) $(LOCAL_SED_ARGS) $< | sed -e "s|%%PREFIX%%|$(TEST_PREFIX)|g" > $@ + +##---------------------------------------------------------------------- +## Server side compilation + +SERVER_INC := ${addprefix -package ,${SERVER_PACKAGES}} + +${ELIOM_TYPE_DIR}/%.type_mli: %.eliom + ${ELIOMC} -infer ${SERVER_INC} $< + +$(TEST_PREFIX)$(LIBDIR)/$(PROJECT_NAME).cma: $(call objs,$(ELIOM_SERVER_DIR),cmo,$(SERVER_FILES)) | $(TEST_PREFIX)$(LIBDIR) + ${ELIOMC} -a -o $@ $(GENERATE_DEBUG) \ + $(call depsort,$(ELIOM_SERVER_DIR),cmo,-server,$(SERVER_INC),$(SERVER_FILES)) + +$(TEST_PREFIX)$(LIBDIR)/$(PROJECT_NAME).cmxa: $(call objs,$(ELIOM_SERVER_DIR),cmx,$(SERVER_FILES)) | $(TEST_PREFIX)$(LIBDIR) + ${ELIOMOPT} -a -o $@ $(GENERATE_DEBUG) \ + $(call depsort,$(ELIOM_SERVER_DIR),cmx,-server,$(SERVER_INC),$(SERVER_FILES)) + +%.cmxs: %.cmxa + $(ELIOMOPT) -shared -linkall -o $@ $(GENERATE_DEBUG) $< + +${ELIOM_SERVER_DIR}/%.cmi: %.mli + ${ELIOMC} -c ${SERVER_INC} $(GENERATE_DEBUG) $< + +${ELIOM_SERVER_DIR}/%.cmi: %.eliomi + ${ELIOMC} -c ${SERVER_INC} $(GENERATE_DEBUG) $< + +${ELIOM_SERVER_DIR}/%.cmo: %.ml + ${ELIOMC} -c ${SERVER_INC} $(GENERATE_DEBUG) $< +${ELIOM_SERVER_DIR}/%.cmo: %.eliom + ${ELIOMC} -c ${SERVER_INC} $(GENERATE_DEBUG) $< + +${ELIOM_SERVER_DIR}/%.cmx: %.ml + ${ELIOMOPT} -c ${SERVER_INC} $(GENERATE_DEBUG) $< +${ELIOM_SERVER_DIR}/%.cmx: %.eliom + ${ELIOMOPT} -c ${SERVER_INC} $(GENERATE_DEBUG) $< + + +##---------------------------------------------------------------------- +## Client side compilation + +CLIENT_LIBS := ${addprefix -package ,${CLIENT_PACKAGES}} +CLIENT_INC := ${addprefix -package ,${CLIENT_PACKAGES}} + +CLIENT_OBJS := $(filter %.eliom %.ml, $(CLIENT_FILES)) +CLIENT_OBJS := $(patsubst %.eliom,${ELIOM_CLIENT_DIR}/%.cmo, ${CLIENT_OBJS}) +CLIENT_OBJS := $(patsubst %.ml,${ELIOM_CLIENT_DIR}/%.cmo, ${CLIENT_OBJS}) + +$(TEST_PREFIX)$(ELIOMSTATICDIR)/$(PROJECT_NAME).js: $(call objs,$(ELIOM_CLIENT_DIR),cmo,$(CLIENT_FILES)) | $(TEST_PREFIX)$(ELIOMSTATICDIR) + ${JS_OF_ELIOM} -o $@ $(GENERATE_DEBUG) $(CLIENT_INC) $(DEBUG_JS) \ + $(call depsort,$(ELIOM_CLIENT_DIR),cmo,-client,$(CLIENT_INC),$(CLIENT_FILES)) + +${ELIOM_CLIENT_DIR}/%.cmi: %.mli + ${JS_OF_ELIOM} -c ${CLIENT_INC} $(GENERATE_DEBUG) $< + +${ELIOM_CLIENT_DIR}/%.cmo: %.eliom + ${JS_OF_ELIOM} -c ${CLIENT_INC} $(GENERATE_DEBUG) $< +${ELIOM_CLIENT_DIR}/%.cmo: %.ml + ${JS_OF_ELIOM} -c ${CLIENT_INC} $(GENERATE_DEBUG) $< + +${ELIOM_CLIENT_DIR}/%.cmi: %.eliomi + ${JS_OF_ELIOM} -c ${CLIENT_INC} $(GENERATE_DEBUG) $< + +##---------------------------------------------------------------------- +## Dependencies + +include .depend + +.depend: $(patsubst %,$(DEPSDIR)/%.server,$(SERVER_FILES)) $(patsubst %,$(DEPSDIR)/%.client,$(CLIENT_FILES)) + cat $^ > $@ + +$(DEPSDIR)/%.server: % | $(DEPSDIR) + $(ELIOMDEP) -server -ppx $(SERVER_INC) $< > $@ + +$(DEPSDIR)/%.client: % | $(DEPSDIR) + $(ELIOMDEP) -client -ppx $(CLIENT_INC) $< > $@ + +$(DEPSDIR): + mkdir $@ + +##---------------------------------------------------------------------- +## Clean up + +clean: + -rm -f *.cm[ioax] *.cmxa *.cmxs *.o *.a *.annot + -rm -f *.type_mli + -rm -f ${PROJECT_NAME}.js + -rm -rf ${ELIOM_CLIENT_DIR} ${ELIOM_SERVER_DIR} + +distclean: clean + -rm -rf $(TEST_PREFIX) $(DEPSDIR) .depend diff --git a/tutos/8.0/manual/files/tutorial/chapter2/Makefile.options b/tutos/8.0/manual/files/tutorial/chapter2/Makefile.options new file mode 100644 index 00000000..845db57b --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter2/Makefile.options @@ -0,0 +1,61 @@ + +#---------------------------------------------------------------------- +# SETTINGS FOR THE ELIOM PROJECT tuto +#---------------------------------------------------------------------- + +PROJECT_NAME := tuto + +# Source files for the server +SERVER_FILES := $(wildcard *.eliomi *.eliom) +# Source files for the client +CLIENT_FILES := $(wildcard *.eliomi *.eliom) + +# OCamlfind packages for the server +SERVER_PACKAGES := lwt.ppx js_of_ocaml.deriving.ppx +# OCamlfind packages for the client +CLIENT_PACKAGES := lwt.ppx js_of_ocaml.ppx js_of_ocaml.deriving.ppx + +# Directory with files to be statically served +LOCAL_STATIC = static + +# The backend for persistent data. Can be dbm or sqlite. +PERSISTENT_DATA_BACKEND = dbm + +# Debug application (yes/no): Debugging info in compilation, +# JavaScript, ocsigenserver +DEBUG := no + +# User to run server with (make run.*) +WWWUSER := www-data +WWWGROUP := www-data + +# Port for running the server (make run.*) +PORT := 80 + +# Port for testing (make test.*) +TEST_PORT := 8080 + +# Root of installation (must end with /) +PREFIX := /usr/local/ + +# Local folder for make test.* (must end with /) +# Do not add files manually in this directory. +# It is just here to test your installation before installing in / +TEST_PREFIX := local/ + +# The installation tree (relative to $(PREFIX) when +# installing/running or $(TEST_PREFIX) when testing). +# Configuration file $(PROJECT_NAME).conf +ETCDIR := etc/${PROJECT_NAME} +# Project's library $(PROJECT_NAME).cma (cmxs) +LIBDIR := lib/${PROJECT_NAME} +# Command pipe, eg. $ echo reload > $(INSTALL_PREFIX)$(CMDPIPE) +CMDPIPE := var/run/${PROJECT_NAME}-cmd +# Ocsigenserver's logging files +LOGDIR := var/log/${PROJECT_NAME} +# Ocsigenserver's persistent data files +DATADIR := var/data/${PROJECT_NAME} +# Copy of $(LOCAL_STATIC) +STATICDIR := var/www/${PROJECT_NAME}/static +# Project's JavaScript file +ELIOMSTATICDIR := var/www/${PROJECT_NAME}/eliom diff --git a/tutos/8.0/manual/files/tutorial/chapter2/static/css/tuto.css b/tutos/8.0/manual/files/tutorial/chapter2/static/css/tuto.css new file mode 100644 index 00000000..b71fa50a --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter2/static/css/tuto.css @@ -0,0 +1,3 @@ +* { + font-family: sans-serif; +} diff --git a/tutos/8.0/manual/files/tutorial/chapter2/tuto.conf.in b/tutos/8.0/manual/files/tutorial/chapter2/tuto.conf.in new file mode 100644 index 00000000..13a8a1fd --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter2/tuto.conf.in @@ -0,0 +1,28 @@ +%%% This is the template for your configuration file. The %%VALUES%% below are +%%% taken from the Makefile to generate the actual configuration files. +%%% This comment will disappear. + + + + %%PORT%% + %%% Only set for running, not for testing + %%USERGROUP%% + %%LOGDIR%% + %%DATADIR%% + utf-8 + %%% Only set when debugging + %%DEBUGMODE%% + %%CMDPIPE%% + + + + %%% This will include the packages defined as SERVER_PACKAGES in your Makefile: + %%PACKAGES%% + + + + + + + + diff --git a/tutos/8.0/manual/files/tutorial/chapter2/tuto.eliom b/tutos/8.0/manual/files/tutorial/chapter2/tuto.eliom new file mode 100644 index 00000000..1b2bafab --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter2/tuto.eliom @@ -0,0 +1,210 @@ + +(* =============================Eliom references============================= *) + +let username = + Eliom_reference.eref ~scope:Eliom_common.default_session_scope None + +let wrong_pwd = + Eliom_reference.eref ~scope:Eliom_common.request_scope false + + +(* =================================Services================================= *) + +let main_service = Eliom_service.create + ~path:(Eliom_service.Path [""]) + ~meth:(Eliom_service.Get Eliom_parameter.unit) + () + +let user_service = Eliom_service.create + ~path:(Eliom_service.Path ["users"]) + ~meth:(Eliom_service.Get Eliom_parameter.(suffix (string "name"))) + () + +let redir_service = Eliom_service.create + ~path:(Eliom_service.Path ["redir"]) + ~meth:(Eliom_service.Get Eliom_parameter.unit) + () + +let connection_service = Eliom_service.create + ~path:(Eliom_service.No_path) + ~meth:(Eliom_service.Post ( + Eliom_parameter.unit, + Eliom_parameter.(string "name" ** string "password"))) + () + +let disconnection_service = + Eliom_service.attach_post + ~fallback:redir_service + ~post_params:Eliom_parameter.unit + () + +let new_user_form_service = Eliom_service.create + ~path:(Eliom_service.Path ["registration"]) + ~meth:(Eliom_service.Get Eliom_parameter.unit) + () + +let account_confirmation_service = + Eliom_service.attach_post + ~fallback:new_user_form_service + ~post_params:Eliom_parameter.(string "name" ** string "password") + () + +(* ===========================Usernames/Passwords============================ *) + +let users = ref [("Calvin", "123"); ("Hobbes", "456")] + +let user_links = Eliom_content.Html.D.( + let link_of_user = fun (name, _) -> + li [a ~service:user_service [pcdata name] name] + in + fun () -> ul (List.map link_of_user !users) +) + +let check_pwd name pwd = + try List.assoc name !users = pwd with Not_found -> false + + +(* =================================Widgets================================== *) + +let account_form = Eliom_content.Html.D.( + Form.post_form ~service:account_confirmation_service + (fun (name1, name2) -> + [fieldset + [label [pcdata "login: "]; + Form.input ~input_type:`Text ~name:name1 Form.string; + br (); + label [pcdata "password: "]; + Form.input ~input_type:`Password ~name:name2 Form.string; + br (); + Form.input ~input_type:`Submit ~value:"Create Account" Form.string + ]]) () +) + +let disconnect_box () = Eliom_content.Html.D.( + Form.post_form disconnection_service + (fun _ -> + [fieldset [Form.input ~input_type:`Submit ~value:"Log out" Form.string]] + ) + () + |> Lwt.return +) + +(* =========================Authentification Handler========================= *) + +let authenticated_handler g f = Eliom_content.Html.D.( + let handle_anonymous _get _post = + let%lwt wp = Eliom_reference.get wrong_pwd in + let connection_box = + let l = [ + Form.post_form ~service:connection_service + (fun (name1, name2) -> + [fieldset + [label [pcdata "login: "]; + Form.input ~input_type:`Text ~name:name1 Form.string; + br (); + label [pcdata "password: "]; + Form.input ~input_type:`Password ~name:name2 Form.string; + br (); + Form.input ~input_type:`Submit ~value:"Connect" Form.string + ]]) (); + p [a new_user_form_service + [pcdata "Create an account"] ()]] + in + div (if wp then p [pcdata "Wrong login or password"]::l else l) + in + g + (html + (head (title (pcdata "")) []) + (body [h1 [pcdata "Please connect"]; + connection_box;])) + in + Eliom_tools.wrap_handler + (fun () -> Eliom_reference.get username) + handle_anonymous (* Called when [username] is [None] *) + f (* Called [username] contains something *) +) +(* ===========================Services Registration========================== *) + +let () = Eliom_content.Html.D.( + + Eliom_registration.Html.register + ~service:main_service + (authenticated_handler Lwt.return (fun name () () -> + let%lwt cf = disconnect_box () in + Lwt.return + (html (head (title (pcdata "")) []) + (body [h1 [pcdata ("Hello " ^ name)]; + cf; + user_links ()])))); + + Eliom_registration.Any.register + ~service:user_service + (authenticated_handler Eliom_registration.Html.send (fun _ name () -> + if List.mem_assoc name !users then + begin + let%lwt cf = disconnect_box () in + Eliom_registration.Html.send + (html (head (title (pcdata name)) []) + (body [h1 [pcdata name]; + cf; + p [a ~service:main_service [pcdata "Home"] ()]])) + end + else + Eliom_registration.Html.send + ~code:404 + (html (head (title (pcdata "404")) []) + (body [h1 [pcdata "404"]; + p [pcdata "That page does not exist"]])) + )); + + Eliom_registration.Action.register + ~service:connection_service + (fun () (name, password) -> + if check_pwd name password + then Eliom_reference.set username (Some name) + else Eliom_reference.set wrong_pwd true); + + Eliom_registration.Redirection.register + ~service:redir_service + (fun () () -> Lwt.return (Eliom_registration.Redirection main_service)); + + Eliom_registration.Action.register + ~service:disconnection_service + (fun () () -> Eliom_state.discard ~scope:Eliom_common.default_session_scope ()); + + Eliom_registration.Html.register + ~service:new_user_form_service + (fun () () -> + Lwt.return + (html (head (title (pcdata "")) []) + (body [h1 [pcdata "Create an account"]; + account_form; + ]))); + + Eliom_registration.Html.register + ~service:account_confirmation_service + (fun () (name, pwd) -> + let create_account_service = + Eliom_service.attach_get + ~fallback:main_service + ~get_params:Eliom_parameter.unit + ~timeout:60. + ~max_use:1 + () + in + let _ = Eliom_registration.Action.register + ~service:create_account_service + (fun () () -> + users := (name, pwd)::!users; + Lwt.return ()) + in + Lwt.return + (html + (head (title (pcdata "")) []) + (body + [h1 [pcdata "Confirm account creation for "; pcdata name]; + p [a ~service:create_account_service [pcdata "Yes"] (); + pcdata " "; + a ~service:main_service [pcdata "No"] ()] + ]))); +) diff --git a/tutos/8.0/manual/files/tutorial/chapter3/README b/tutos/8.0/manual/files/tutorial/chapter3/README new file mode 100644 index 00000000..37d111c1 --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter3/README @@ -0,0 +1 @@ +This code isn't maintened anymore and might not work. Please go to https://github.com/ocsigen/graffiti/simple for the latest working versions. diff --git a/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/Makefile b/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/Makefile new file mode 100644 index 00000000..675ba493 --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/Makefile @@ -0,0 +1,68 @@ + +APP_NAME := graffiti +SERVER_PACKAGE := cairo, unix +CLIENT_PACKAGE := + +SERVER_FILES = common.ml server.ml ${wildcard *.eliom} +CLIENT_FILES = common.ml client.ml ${wildcard *.eliom} + +PORT := 8080 + +OCLOSURE := YES + +### + +all: local byte opt conf + +LIBDIR := local/var/www/lib +JSDIR := local/var/www/static + +include Makefile.common + +distclean:: + -rm -rf css/closure + -rm -rf local + -rm -f graffiti.conf + +#### + +DIRS = local/var/lib/ocsidbm local/var/run local/var/log \ + local/var/www/static local/var/www/lib local/etc \ + local/var/www/static/graffiti_saved + +local: ${DIRS} local/var/www/static/css local/var/www/static/images css/closure + +local/var/www/static/css: + ln -fs $(shell pwd)/css local/var/www/static/css + +local/var/www/static/images: + ln -fs $(shell pwd)/images local/var/www/static/images + +css/closure: + ln -fs $(shell ocamlfind query oclosure)/closure/goog/css/ css/closure + +${DIRS}: + mkdir -p $@ + +conf: graffiti.conf + +graffiti.conf: graffiti.conf.in + sed -e "s|%%SRC%%|$(shell pwd)|" \ + -e "s|%%LIBDIR%%|${LIBDIR}|" \ + -e "s|%%JSDIR%%|${JSDIR}|" \ + -e "s|%%PORT%%|${PORT}|" \ + $< > $@ + +run.local: graffiti.conf + ocsigenserver -c graffiti.conf + +run.opt.local: graffiti.conf + ocsigenserver.opt -c graffiti.conf + +#### + +install:: + install -d -m 775 ${INSTALL_USER} ${INSTALL_DIR}/static/css + install -m 664 ${INSTALL_USER} css/*.css ${INSTALL_DIR}/static/css + cd $(shell ocamlfind query oclosure)/closure/goog/css/ && \ + find -type f -exec install -D -m 664 {} ${INSTALL_DIR}/static/css/closure/{} \; diff --git a/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/Makefile.common b/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/Makefile.common new file mode 100644 index 00000000..76143752 --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/Makefile.common @@ -0,0 +1,165 @@ +## Sample Makefile for eliom application. + +APP_NAME ?= $(error Please define the APP_NAME variable) + +## Package required to build the server part of the application + +SERVER_PACKAGE ?= + +## Package to be linked in the client part + +CLIENT_PACKAGE ?= + +## Source files for the server part + +SERVER_FILES ?= ${wildcard *.eliom} + +## Source files for the client part + +CLIENT_FILES ?= ${wildcard *.eliom} + +## Needed binaries + +ELIOMC ?= eliomc +ELIOMOPT ?= eliomopt +ELIOMDEP ?= eliomdep +JS_OF_ELIOM ?= js_of_eliom +OCLOSURE_REQ ?= oclosure_req + +## Where to put intermediate object files. +## - ELIOM_{SERVER,CLIENT}_DIR must be distinct +## - ELIOM_CLIENT_DIR mustn't be the local dir. +## - ELIOM_SERVER_DIR could be ".", but you need to +## remove it from the "clean" rules... + +ELIOM_SERVER_DIR ?= _server +ELIOM_CLIENT_DIR ?= _client +ELIOM_TYPE_DIR ?= ${ELIOM_SERVER_DIR} + +export ELIOM_SERVER_DIR +export ELIOM_CLIENT_DIR +export ELIOM_TYPE_DIR + +#### + +LIBDIR ?= . + +byte:: ${LIBDIR}/${APP_NAME}.cma +opt:: ${LIBDIR}/${APP_NAME}.cmxs + +JSDIR ?= . + +ifneq (${CLIENT_FILES},) +byte:: ${JSDIR}/${APP_NAME}.js +opt:: ${JSDIR}/${APP_NAME}.js + +OCLOSURE ?= NO + +ifeq ($(OCLOSURE),YES) +CLIENT_PACKAGE += oclosure +byte:: ${JSDIR}/${APP_NAME}_oclosure.js +opt:: ${JSDIR}/${APP_NAME}_oclosure.js +endif +endif + +#### Server side compilation ####### + +SERVER_INC := ${addprefix -package ,${SERVER_PACKAGE}} + +SERVER_OBJS := $(patsubst %.eliom,${ELIOM_SERVER_DIR}/%.cmo, ${SERVER_FILES}) +SERVER_OBJS := $(patsubst %.ml,${ELIOM_SERVER_DIR}/%.cmo, ${SERVER_OBJS}) + +${LIBDIR}/${APP_NAME}.cma: ${SERVER_OBJS} + ${ELIOMC} ${ELIOMCFLAGS} -a -o $@ $^ +${LIBDIR}/${APP_NAME}.cmxa: ${SERVER_OBJS:.cmo=.cmx} + ${ELIOMOPT} ${ELIOMOPTFLAGS} -a -o $@ $^ + +${ELIOM_TYPE_DIR}/%.type_mli: %.eliom + ${ELIOMC} ${ELIOMCFLAGS} -infer ${SERVER_INC} $< + +${ELIOM_SERVER_DIR}/%.cmi: %.mli + ${ELIOMC} ${ELIOMCFLAGS} -c ${SERVER_INC} $< + +${ELIOM_SERVER_DIR}/%.cmo: %.ml + ${ELIOMC} ${ELIOMCFLAGS} -c ${SERVER_INC} $< +${ELIOM_SERVER_DIR}/%.cmo: %.eliom + ${ELIOMC} ${ELIOMCFLAGS} -c -noinfer ${SERVER_INC} $< + +${ELIOM_SERVER_DIR}/%.cmx: %.ml + ${ELIOMOPT} ${ELIOMOPTFLAGS} -c ${SERVER_INC} $< +${ELIOM_SERVER_DIR}/%.cmx: %.eliom + ${ELIOMOPT} ${ELIOMOPTFLAGS} -c -noinfer ${SERVER_INC} $< + +%.cmxs: %.cmxa + $(ELIOMOPT) ${ELIOMOPTFLAGS} -shared -linkall -o $@ $< + +##### Client side compilation #### + +CLIENT_LIBS := ${addprefix -package ,${CLIENT_PACKAGE}} +CLIENT_INC := ${addprefix -package ,${CLIENT_PACKAGE}} + +CLIENT_OBJS := $(patsubst %.eliom,${ELIOM_CLIENT_DIR}/%.cmo, ${CLIENT_FILES}) +CLIENT_OBJS := $(patsubst %.ml,${ELIOM_CLIENT_DIR}/%.cmo, ${CLIENT_OBJS}) + +${JSDIR}/${APP_NAME}.js: ${CLIENT_OBJS} + ${JS_OF_ELIOM} -jsopt -pretty -jsopt -noinline -o $@ ${CLIENT_LIBS} $^ + +${ELIOM_CLIENT_DIR}/%.cmi: %.mli + ${JS_OF_ELIOM} -c ${CLIENT_INC} $< + +${ELIOM_CLIENT_DIR}/%.cmo: %.eliom + ${JS_OF_ELIOM} -c ${CLIENT_INC} $< +${ELIOM_CLIENT_DIR}/%.cmo: %.ml + ${JS_OF_ELIOM} -c ${CLIENT_INC} $< + +### O'Closure compilation ### + +${JSDIR}/$(APP_NAME)_oclosure.js: ${JSDIR}/$(APP_NAME).js + ${OCLOSURE_REQ} $^ + +############ + +## Clean up + +clean:: + -rm -f *.cm[ioax] *.cmxa *.cmxs *.o *.a *.annot + -rm -f *.type_mli + -rm -f .depend + -rm -f ${JSDIR}/${APP_NAME}.js ${JSDIR}/${APP_NAME}_oclosure.js + -rm -rf ${ELIOM_CLIENT_DIR} ${ELIOM_SERVER_DIR} + +distclean:: clean + -find \( -name \*~ -or -name \#\* -or -name .\#\* \) -delete + + +## Dependencies + +depend: .depend +.depend:: ${SERVER_FILES} ${CLIENT_FILES} + $(ELIOMDEP) -server ${SERVER_INC} ${SERVER_FILES} > .depend + $(ELIOMDEP) -client ${CLIENT_INC} ${CLIENT_FILES} >> .depend + +## Warning: Dependencies towards *.eliom are not handled by eliomdep yet. +## Add manually dependencies between cmo and cmx files here, +## for example: +## oneeliomfile.cmo: anothereliomfile.cmo +## oneeliomfile.cmx: anothereliomfile.cmx + +-include .depend + + +#### + +INSTALL_USER ?= -o www-data -g www-data +INSTALL_DIR ?= local/var/www/${APP_NAME} + +install:: + install -d -m 775 ${INSTALL_USER} ${INSTALL_DIR}/lib + install -m 664 ${INSTALL_USER} ${LIBDIR}/${APP_NAME}.cma ${LIBDIR}/${APP_NAME}.cmxs ${INSTALL_DIR}/lib/ + install -d -m 775 ${INSTALL_USER} ${INSTALL_DIR}/static +ifneq (${CLIENT_FILES},) + install -m 664 ${INSTALL_USER} ${JSDIR}/${APP_NAME}.js ${INSTALL_DIR}/static/ +ifeq ($(OCLOSURE),YES) + install -m 664 ${INSTALL_USER} ${JSDIR}/${APP_NAME}_oclosure.js ${INSTALL_DIR}/static/ +endif +endif diff --git a/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/client.ml b/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/client.ml new file mode 100644 index 00000000..019b1dcb --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/client.ml @@ -0,0 +1,80 @@ +open Eliom_content +open Common +open Eliom_lib.Lwt_ops + +let draw ctx (color, size, (x1, y1), (x2, y2)) = + ctx##strokeStyle <- (Js.string color); + ctx##lineWidth <- float size; + ctx##beginPath(); + ctx##moveTo(float x1, float y1); + ctx##lineTo(float x2, float y2); + ctx##stroke() + +(* type containing all informations we need to stop interaction + inside the page *) +type drawing_canceller = + { drawing_thread : unit Lwt.t; + (* the thread reading messages from the bus *) + drawing_event_thread : unit Lwt.t; + (* the thread handling mouse events *) + } + +let stop_drawing { drawing_thread; drawing_event_thread } = + Lwt.cancel drawing_thread; + (* cancelling this thread also closes the bus *) + Lwt.cancel drawing_event_thread + +let launch_client_canvas bus image_elt canvas_elt = + let canvas = Html5.To_dom.of_canvas canvas_elt in + let ctx = canvas##getContext (Dom_html._2d_) in + ctx##lineCap <- Js.string "round"; + + let img = Html5.To_dom.of_img image_elt in + let copy_image () = ctx##drawImage(img, 0., 0.) in + if Js.to_bool (img##complete) + then copy_image () + else img##onload <- Dom_html.handler + (fun ev -> copy_image (); Js._false); + + (* Size of the brush *) + let slider = jsnew Goog.Ui.slider(Js.null) in + slider##setMinimum(1.); + slider##setMaximum(80.); + slider##setValue(10.); + slider##setMoveToPointEnabled(Js._true); + slider##render(Js.some Dom_html.document##body); + + (* The color palette: *) + let pSmall = + jsnew Goog.Ui.hsvPalette(Js.null, Js.null, + Js.some (Js.string "goog-hsv-palette-sm")) + in + pSmall##render(Js.some Dom_html.document##body); + + let x = ref 0 and y = ref 0 in + let set_coord ev = + let x0, y0 = Dom_html.elementClientPosition canvas in + x := ev##clientX - x0; y := ev##clientY - y0 in + let compute_line ev = + let oldx = !x and oldy = !y in + set_coord ev; + let color = Js.to_string (pSmall##getColor()) in + let size = int_of_float (Js.to_float (slider##getValue())) in + (color, size, (oldx, oldy), (!x, !y)) + in + let line ev = + let v = compute_line ev in + let _ = Eliom_bus.write bus v in + draw ctx v; + Lwt.return () + in + let t = Lwt_stream.iter (draw ctx) (Eliom_bus.stream bus) in + let drawing_event_thread = + let open Lwt_js_events in + mousedowns canvas + (fun ev _ -> set_coord ev; line ev >>= fun () -> + Lwt.pick [mousemoves Dom_html.document (fun x _ -> line x); + mouseup Dom_html.document >>= line]) + in + { drawing_thread = t; + drawing_event_thread = drawing_event_thread } diff --git a/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/common.ml b/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/common.ml new file mode 100644 index 00000000..8d256e01 --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/common.ml @@ -0,0 +1,4 @@ +type messages = (string * int * (int * int) * (int * int)) deriving (Json) + +let width = 700 +let height = 400 diff --git a/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/css/common.css b/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/css/common.css new file mode 100644 index 00000000..02d7073c --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/css/common.css @@ -0,0 +1,41 @@ +/* + * Copyright 2009 The Closure Library Authors. All Rights Reserved. + * + * Use of this source code is governed by an Apache 2.0 License. + * See the COPYING file for details. + */ + +/* + * Cross-browser implementation of the "display: inline-block" CSS property. + * See http://www.w3.org/TR/CSS21/visuren.html#propdef-display for details. + * Tested on IE 6 & 7, FF 1.5 & 2.0, Safari 2 & 3, Webkit, and Opera 9. + * + * @author attila@google.com (Attila Bodis) + */ + +/* + * Default rule; only Safari, Webkit, and Opera handle it without hacks. + */ +.goog-inline-block { + position: relative; + display: -moz-inline-box; /* Ignored by FF3 and later. */ + display: inline-block; +} + +/* + * Pre-IE7 IE hack. On IE, "display: inline-block" only gives the element + * layout, but doesn't give it inline behavior. Subsequently setting display + * to inline does the trick. + */ +* html .goog-inline-block { + display: inline; +} + +/* + * IE7-only hack. On IE, "display: inline-block" only gives the element + * layout, but doesn't give it inline behavior. Subsequently setting display + * to inline does the trick. + */ +*:first-child+html .goog-inline-block { + display: inline; +} diff --git a/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/css/graffiti.css b/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/css/graffiti.css new file mode 100644 index 00000000..5768a851 --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/css/graffiti.css @@ -0,0 +1,21 @@ +body { + width: 750px; +} + +canvas { + border: solid 1px #aaaaaa; +} + +div.goog-slider-vertical, +DIV.goog-slider-vertical { + position: absolute; + top: 100px; + left: 740px; +} + +div.goog-hsv-palette-sm, +DIV.goog-hsv-palette-sm { + position: absolute; + top: 100px; + left: 780px; +} diff --git a/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/css/hsvpalette.css b/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/css/hsvpalette.css new file mode 100644 index 00000000..d3ae7f67 --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/css/hsvpalette.css @@ -0,0 +1,179 @@ +/* + * Copyright 2008 The Closure Library Authors. All Rights Reserved. + * + * Use of this source code is governed by an Apache 2.0 License. + * See the COPYING file for details. + */ + +/* + * All Rights Reserved. + * + * Styles for the HSV color palette. + * + * @author smcbride@google.com (Sean McBride) + * @author arv@google.com (Erik Arvidsson) + * @author manucornet@google.com (Manu Cornet) + */ + +.goog-hsv-palette, +.goog-hsv-palette-sm { + position: relative; + border: 1px solid #999; + border-color: #ccc #999 #999 #ccc; + width: 400px; + height: 276px; +} + +.goog-hsv-palette-sm { + width: 182px; + height: 185px; +} + +.goog-hsv-palette label span, +.goog-hsv-palette-sm label span { + display: none; +} + +.goog-hsv-palette-hs-backdrop, +.goog-hsv-palette-sm-hs-backdrop, +.goog-hsv-palette-hs-image, +.goog-hsv-palette-sm-hs-image { + position: absolute; + top: 10px; + left: 10px; + width: 256px; + height: 256px; + border: 1px solid #999; +} + +.goog-hsv-palette-sm-hs-backdrop, +.goog-hsv-palette-sm-hs-image { + top: 45px; + width: 128px; + height: 128px; +} + +.goog-hsv-palette-hs-backdrop, +.goog-hsv-palette-sm-hs-backdrop { + background-color: #000; +} + +.goog-hsv-palette-hs-image, +.goog-hsv-palette-v-image, +.goog-hsv-palette-hs-handle, +.goog-hsv-palette-v-handle { + background-image: url(../images/hsv-sprite.png); +} + +.goog-hsv-palette-noalpha .goog-hsv-palette-hs-image, +.goog-hsv-palette-noalpha .goog-hsv-palette-v-image, +.goog-hsv-palette-noalpha .goog-hsv-palette-hs-handle, +.goog-hsv-palette-noalpha .goog-hsv-palette-v-handle { + background-image: url(../images/hsv-sprite.gif); +} + +.goog-hsv-palette-sm-hs-image, +.goog-hsv-palette-sm-v-image, +.goog-hsv-palette-sm-hs-handle, +.goog-hsv-palette-sm-v-handle { + background-image: url(../images/hsv-sprite-sm.png); +} + +.goog-hsv-palette-noalpha .goog-hsv-palette-sm-hs-image, +.goog-hsv-palette-noalpha .goog-hsv-palette-sm-v-image, +.goog-hsv-palette-noalpha .goog-hsv-palette-sm-hs-handle, +.goog-hsv-palette-noalpha .goog-hsv-palette-sm-v-handle { + background-image: url(../images/hsv-sprite-sm.gif); +} + +.goog-hsv-palette-hs-image, +.goog-hsv-palette-sm-hs-image { + background-position: 0 0; +} + +.goog-hsv-palette-hs-handle, +.goog-hsv-palette-sm-hs-handle { + position: absolute; + left: 5px; + top: 5px; + width: 11px; + height: 11px; + overflow: hidden; + background-position: 0 -256px; +} + +.goog-hsv-palette-sm-hs-handle { + top: 40px; + background-position: 0 -128px; +} + +.goog-hsv-palette-v-image, +.goog-hsv-palette-sm-v-image { + position: absolute; + top: 10px; + left: 286px; + width: 19px; + height: 256px; + border: 1px solid #999; + background-color: #fff; + background-position: -256px 0; +} + +.goog-hsv-palette-sm-v-image { + top: 45px; + left: 155px; + width: 9px; + height: 128px; + background-position: -128px 0; +} + +.goog-hsv-palette-v-handle, +.goog-hsv-palette-sm-v-handle { + position: absolute; + top: 5px; + left: 279px; + width: 35px; + height: 11px; + background-position: -11px -256px; + overflow: hidden; +} + +.goog-hsv-palette-sm-v-handle { + top: 40px; + left: 148px; + width: 25px; + background-position: -11px -128px; +} + +.goog-hsv-palette-swatch, +.goog-hsv-palette-sm-swatch { + position: absolute; + top: 10px; + right: 10px; + width: 65px; + height: 65px; + border: 1px solid #999; + background-color: #fff; +} + +.goog-hsv-palette-sm-swatch { + top: 10px; + right: auto; + left: 10px; + width: 30px; + height: 22px; +} + +.goog-hsv-palette-input, +.goog-hsv-palette-sm-input { + position: absolute; + top: 85px; + right: 10px; + width: 65px; +} + +.goog-hsv-palette-sm-input { + top: 10px; + right: auto; + left: 50px; +} diff --git a/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/css/slider.css b/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/css/slider.css new file mode 100644 index 00000000..ddd07482 --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/css/slider.css @@ -0,0 +1,45 @@ +.goog-slider-vertical, +.goog-slider-horizontal { +background-color: ThreeDFace; +position: relative; +overflow: hidden; +} + +.goog-slider-vertical { +height: 300px; +width: 20px; +} + +.goog-slider-horizontal { +height: 20px; +width: 400px; +} + +.goog-slider-thumb { +position: absolute; +background-color: ThreeDShadow; +overflow: hidden; +} + +.goog-slider-vertical .goog-slider-thumb { +left: 0; +height: 20px; +width: 100%; +} + +.goog-slider-horizontal .goog-slider-thumb { +top: 0; +width: 20px; +height: 100%; +} +#s-h { +margin-bottom: 2em; +} +strong { +display: block; +margin-bottom: 3px; +} +#out1, #out2 { +color: #999; +margin-left: 1em; +} diff --git a/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/graffiti.conf.in b/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/graffiti.conf.in new file mode 100644 index 00000000..89f88db3 --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/graffiti.conf.in @@ -0,0 +1,35 @@ + + + + + %%PORT%% + + %%SRC%%/local/var/log + %%SRC%%/local/var/run + %%SRC%%/local/var/run/ocsigenserver_command + + utf-8 + + + + + + + + + + + + + + + + + + %%SRC%%/%%JSDIR%% + + + + + + diff --git a/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/graffiti.eliom b/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/graffiti.eliom new file mode 100644 index 00000000..b0de220e --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/graffiti.eliom @@ -0,0 +1,36 @@ +{shared{ + open Eliom_content.Html5.D + open Common +}} +{client{ + open Client +}} +open Server + +let start_drawing name image canvas = + let bus = get_bus name in + ignore {unit{ + let canceller = launch_client_canvas %bus %image %canvas in + Eliom_client.onunload (fun () -> stop_drawing canceller) + }} + +let counter = ref 0 + +let () = Connected.register ~service:multigraffiti_service + !% (fun name () username -> + (* Some browsers won't reload the image, so we force + them by changing the url each time. *) + incr counter; + let image = + img ~alt:name + ~src:(make_uri + ~service:imageservice (name,!counter)) () in + let canvas = + canvas ~a:[ a_width width; a_height height ] + [pcdata "your browser doesn't support canvas"; br (); image] in + start_drawing name image canvas; + make_page + [h1 [pcdata name]; + disconnect_box (); + choose_drawing_form (); + canvas;]) diff --git a/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/images/hsv-sprite-sm.png b/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/images/hsv-sprite-sm.png new file mode 100644 index 0000000000000000000000000000000000000000..470f8e0c967715af12ac91e8b43e1034283a9b6b GIT binary patch literal 19537 zcmcG!WpEu$lO=p5T`@EB6a2=Xl$St+!-E3=0EkkOqRM~k$iGK44AkGV+GWSU-wNm=ETszb zxA?-CM*O{pb(GX{0RZ69{yD(rx4wP+6%x3LX}YR7n7euyIhz55OdX8PNW`t2%{&~O zZCpr1R9MrO#UcLcVg92h;%sK*YUN;0qH1Ml2H<35=452zaxM=2^Vb>bKMI<1vOFdZ zb__=U*kSOra|G~x^>j2cu`zQcF*dWXvgaowAt50nu`=Z+(_oill5-R>v$T@*b~aP- zmRB|LwlU#0CHpD>$LGoO7i?$dYDD5`XKU}m_39m zlv5-Tad0*xVPjyXH(_FBBVprUVBuup=H#FwQ898Qkv6g?Vc{fUVPg7wV&P$C=3!(0 z8_d57nE>41n$OwPoJUzy{6BsEz2hgdbai#)VPy31@L=#@WpHq|U}Waz=4NDKVPs*U z|Eodo;$`n@zT2nTv_DmE*tY`p2%3v4fi{KN;CSj{aT#^Wlsf|Lw@$ z$OCzJFks~8B0~6!FE&m1b{T1^3t05emRUI5`1^zE>#`h2Me^dHzum6oV6E$)* z6Zp#q7d;avJu{~&GZzmV3l9s6_W!{DhtmH6mvb<+GWYtwz}Z=N*qQzl{y&ud6VAu@ z4-x-^n18YU&oliWa+3ca!c0y6&6lH_v+ci{#ngn+%+}1#%-+@IFK5jEJ7=aQJmwD0 zc1ErOR(3`fW{i&Z7JQ8VE&TtC??0mc+b#ZfOU8fq%l``f-%a`d%zE3a@ zl7?Sy9*EpFBdpA$-ui0h>gFGU03>8!(0lASBk&t`-wnsT|Jv9N`W-L80iO8J6-4|F z-R=wUTUOgQ53pW{hID%`g)mfS7bkE0>6^o z?U?Mv1AeFU8Mqw$LE2~ZIZ%N8AdUFSa=WAS@}~*?&kEc}6T1IQpMvM;@DA7q;n)tu z8`SO}z#U{?FZe5A!XL=poBj`tfSc7<2a@f?4*8GTr}qyH(02dVKS(PE9JizJuOhp5 zKOldDt@;CNdVLK)zas1UOYI`Vet>EE$Mp34>AHLMkNl9?|78OHrw7$v`s0{tpVM;? z8~o4v_N(xIE9e{aZtvlU1M8g*nt|lUN=OYvufpz&*WQcP&Q9>_*VyEbdN+gKj=Cb(;S6QGjPM4(K+B^`&h>z4`hVg^3(6R8t2C+M3(#&jf^%SfklR= znGSgrE&mKZq*XojKOz3kp8TG zaAW)=1oQPZNCqTODxCzwM+iDAkhV!{25tS;sb~%xu*|^QqlHNoPZ_b*Cb9h{T^FI~ z!35;%%ITB>5z z`48Qt#CmB*a6FF{Qk3%9^9Qt;>~Aww?#d5P7jJvQP?JLqP5OSV%MnE8Xsy4qvma<; zO^o`Hrw{>rILQ3H;-Xf`C7E;y*kfv;pgMG_=$VFQ8+!@=X&rnB(|I6{M-+ zF(oQk6@?ITKqr$_NQeD}!|H9RtavI4Z2X!mX;lDwovxr><+J-%H7Oea#K&1+WQDO4 z&J4YSg+|JH(K8Qa%@kZj?*n&UkTTC^rmuXZ*y1B) zLYKYExLW}Mk8j3-7eUEHrc6@ZZ@kQ(!NHGL&mM4Lr<{q+3?9Yn7)$N)0OPJ=x(Mmq zDn)v}ecErJ9o7Z~90Vuz+NP5uD%oO{aVcSQ$eJ99p;d&RfRQi`sQhDQW1=m&>9xa0 zW@m27GoNELJ0jTBk5U0>mB_=3ZoN@I4<4$XJ?ROMK!!B*YXKJWt`d5|^ctDNRD31> z{rl7D>O)6b6(^uG5B(~%4V_}OV&L2&|If0^{cBDhv%Ugi6ICr$=>qGFhZ*PFE|X@% zFAufdB9arQO`l~SsE299&&M5z8;3q0fCFF~)Lcn4MY0S5X}c7mE0fO=sN05x@}&<` zl9B_07d}fD7DyB!TcuZYK@Z^o+-~%}4IPq**CeUa#W1x8ZlidSO44;fctW5W_K-Ro z9l%FHdqF&7C%|VoFbQbmvG%E%jm$17y(yJ4_6BI|AyJ|z9c|hKI~iT|K_#|V@?!-+ z9^#|&qRKKUA6t;C@7qyqqj-{|+L$LuUAk-AALY!KWW`U`!yzAI|I~{sb%M6cZ~K z`SVN}&5SSnMWyI$Eg+rNk!CCi(Kc)4+0~qP&Oqc#J z5^+LZ^E|t3{Hcp}7`CM~A7DIdVJOQ6X3~nVhP9TSh?zx(*CBNfJ;m|ti zNRC_k019A^oR+(MexWA_l>kb&3tl&@Z0$VHRWDyz>*=-8ew^224Q|V=ouW9>(;0eB z5JBTt($>5{sk_x&RcC_J*_+9r_|6Q*j6Ol`LWGj14<#7}gj#^(aotl&lJmEi^t)?K zsA5nfqClE%B#)!f**|+-i-z4wp=@^AsF=i#uHroio5QNZAG8fnG1aD}tWT(Dt}=a& z3MbX8j-#dCS4`Y+wpA$8len`Zq~XmY9C}h8jbq#dZsI9b3K=(Ii$W}Se07Vz8)+Mw ze1T1FD?HfIG}(kS%Q>98<3+cZVK@r{3KPjZcHhgYd*vE68fKF@ggFPd!_}1MulO8%uIHg0otnzYOIWbW7Ns>`ZASm6)wMgx?`*yO27Gdaxz*cY0|E# zwrGoXq*f$$P`4*yoz1mS9)$K)*#s?Xd|u&NUv z^y}KmdwQ~aS;i>uuqP=DOk*^UDz^{1`Du|!RWW&FyPxj2j8YqmbF9lOVjb~=y4y&Lc&60ZZIsj%hES zJL>bAP>b2Iwyf1JsOjqf=-*P{2~f?*_}a)&>QQBagiTcB z^RWejjdcKv%AD&54a|t>Q~NKL!-9%&4i{8#zg9W*%#{T56B8gE8>|p)ZbeRId{&w9XNM3*~3lX z3mFczO~<@pO!qfg*TL??fQytK8tN#>CI$1Ss~H~KXM;;?y^AdJ(}2%Fr1PZV2uWi6 zJ`+MkOBsn`go|9VZ${B6!lk3IBio!~p{bq;=Y7LV*9HNhl-NEEu|Ma_3<&v(H8*qJ z@7-%oxs^^HynMxNh~Q`M_~M`%$JVo88>XbRx3YHXm{75wskJi7o}G11Ft$$W?^RlgyP%s9dmB=MM6h@VMK8t@o=J%;sfxddy*%5 z?Gg5Zc@~h|LSXLz_ypx%?Yh9;;)Zyw8BR#6(D{F@+7|0Q!cW1E$9{r^@WWlt;ndd? zMXqLkpwD04wMKZ-@ik1{VFHK*`82Z?!ASWy?nv$;ycIxo9_<`(LOO?g<=NoTy56TG;f) z%(m(FG=c8Y@e>dgyzw+J4b4id<#l0+S^*cC#^&K>8EcLRfg*9bF44VYQ`{xZGI1jW z(_V(`d{)aU4*4xdB5zB zh%+&m6r7DnH^gdqdBj6lsZ2<04n`l=sdNgk-re?wO&SerRuzOSq>W7Nh za!e&7NMe#arA(QR)}`Q1F{sdy+%o|Ov|JbZO2NswMqmtsm%$z+{Li-q+h={%lBf7M zkg4=a^v-WNx|Vr#{Nuf_)^@;Ks03(?t96YuTs^-FPP5h0-IsSo&!LMNItBA0>niOw zuRCt8&jN@4?7b16NDm}hErSEw!~GLH4$5FvRY=&~Wd(ovxHSpLq?fOzP|oAMSTK*- zC+S&_=_O?x!FU4N0g8`uT;?H`oU3=Ba4MHy5wQ~cYS`&;nh|7^%GXTO$BriZa)6M5 zOP-(o^u<&}+9iS&UP)lJHI8l(KOV&)(M7cBQHZUo8<={ao_sG#JM%S{$dO68)#{(H z5a*G9WE^!-ai(HY=#AXlCk={aytQv0f)+Y-_#~VdWxBfuPDj%VxpGIlt$Sk(K=yo;* z*U5$}fRg1MCgEJxhhYFRR_VUhaRyoDg8ClHKW|2o0fgVp@%g1YPjp6A&UV(O>8>U) zSrbJ1#V&q=P&L1xYQ!ZR7L+|i9;3O#8VQwB0UBrbl9(h6H3v?G%na>UIH#NJU$#h( zoM58gAKB&5icr&6Sz<^ZzfS|LQqWEvt5m3w47Kt4f$djEp(^kxHtAdKPo8OMSKi8G zsE&N=bKT&laz$C>^*`Z$xpqYcY{mMiVYc*{^4q*fegoE%V<-%iPBJntlCl={e`ze- zCADfq6@a;s?UF*(mGJDZ(YkPtE)rx}$Hxs&hN$MrnjqJnpT zItxv2>GdIx*BD1{BhaG)yM4U_k=}+O>!0p&X>Rk$PDvRrc$(bF&A!oPInfJNRfkI$ zn=8S8%jY7t+I4sY_4-Np@l7c}2hh{&zggyqBW6j5K403X69T73o7zlDu?gcwUY@&`OI?n`}x z*o7ZslK|JBv*!38fRd+XpG#%eh+i|1Yp zY{=6Ax5?^izz>kUcw`8Yt6w{;zfpsB+rK!Qk~={%&|mTzLFg4W~mfgz5YAP402RJQi)2NLvWLWWIeH`~Lu zMmC{hv`*>fQ5fiGtmUe!ExFATAPyJ*dWo_)ng>J!Ucq>BhwK^GGrtJ;tTRd073NH^ z(sGML1RaPfo25;;`y;*b&Hu@B{i;&vrmg_VB7p&#R^%g`SN~N&xkCvhl0+KsS2h*mQr+I0G^X5xwxX`19C}vh#8Xw$_ zgQ`DQJ1N%FhvrNB`8_zRZK~F=04om)Jl=#4L18~}UhwKHn|CK@URxsfjc&^EL{bHa zB5ON)4Hw9uu4|Ki`*S`DiN`o_La|Ix3yf#I&?^aDWL=D*S|_u3UjS*gG_3?<YY6Wn}Dq&6VbWgMG;4LEC0DBs{_tOeXT-997%NB6(pxb+OLAO!90F&nv z?+I(#0994&KFC;;X(U9QKP9aap&87`NFt#B4pWE;@a0@d_sOYc=UaW44ZCLe3@F6S z(xDDfVc}3_w5H^V8bLmh?@AJkLGY`{mT@D|m*wb@qtbi{nzBPaarp&oSnghwhZW5O z;fn^mP83ee^+BG!6VNili<;OPpV;oY*5%9vp%O$vOo37LUeI@7yFV&em4CfqxCfTG3Ip=% zHep~HtdK(f2`x+2{imoGo0d73qZ^Ye|Gwr9x*#K&2B)ZapyeHPFec~avp6s6n&}#> z?hndea`x$bykSM!2bkEJ{bEO}Uz$}saYM~r=$9Q0E*X3g8}|}(`Q-Kx-*_pgIhV9@VMR-HJdsuNT6?kZe9Z3+wM8qhzgWYDvP&s5 zcWg#Uir`)YZX?JRs<@NTX#>bhhqk9oqS7+nlYtC(E~*0I&?=S(`TQK4BIW>A^>#dED-VI>aH`SX6{ zXB+R`*mfoOafpuVvm1zodurF2YN?n^hv<|YM3T2j9#ol_g<#ToHjpfV&+87y zrti&kn)7)k_IPLN@&DoWkMw`1r6;x|8RuZ;zjJ#%y-LdVh4LE2wb)L0z;x+s1Z(0K zWg|xO^O!ELs{OVzJ6=)z@V!i~SE(NrgFJ`!;x6Nw>mXDF$Kait+|2)}`)6vcBV>JhPIMU$d1D>5(fRl{6F7#w9} z)V%sgs+eg%bjU#HckyZ}-~n;B{yI!U<&j3K0f|!GtL8OmsN{k%Gwb<5XP|3l<^0ro zyb5V&{&;X^J6(Qb66w!KfuE^@kEwiD#7|AP3W){?ju%Ir zwNg07@)OC?bh8srNXMz6xRElEf;4FKja-8jIX>9HTv@IFfeqD0&>+J_ypxpg%yJV5FHUXNLjM7&!$=0d!&Bud7xz%2D^>CPc7-jtbnF* zj_^>4Plk13S2dK%UKBA8TNr200<%g2N^Vvrhe&hCUO(C1s+rDbx}8Y2WaH7NG0$y} zmSBjisq2G`<5IN2?dj?VJ5&nR0gP>pGn2MO)Xr49q?lr z!L8eDC%uzJv7mwD(YyHImyB>wzOrs87it+LRNm1ZP~^C@3HW`#JTL)J(Va3*xjW7~ z_+`fcxHd3wyj;e?P=1k#OKX+^kF7qOe3(SlV9z&x*33qnaO$yLQ`yg_lun2}n0qHz z7jRah2)4W{C8w}RS1T)uT(c*&u0umO7h?|_`_aIzy*8kvEv=1^5^pFE10lYLfkEoN zPU$}YVLwTC`}DLD5+XyWKte=O5=W&4zpECi$AUPeg<-;psQjsi+SzdNlNQ=An0}^s z7(_{%3sa>!a&WM2t;x$5DdrG8!yGi*qpV$CJ89SYoQ0<2$SkbRBvP(&_FR3^oIl2! zk}yP$LX#W9b)Q(L_om3qLwJH`UR0O6VuG%12Q@qPBPcbBirJyT$1qD3UV8AA=WFlp z%mlhX)$m)!5-($zaPP-jaB;e-p8`Z5MDbp0+5~G5#UnBsrilE2IBYO$459U*cy|OT z5C{W_L9@)1vl8;}Y>hyn58T-Ks_{Z5y)RdI`Z~^t4!adfzATp3mLv=P&bmjxpX!_G zFpP**yd^yggfQ30&Gr%3BaXocGn@th&am~nDDUd6ZIASTOOe@rmt(Dd|-vN~KuHLUL9AO0RTLR+`j~svzuovWx@jVpuJ4EY4gxPg$E- zjz|$Zb>mFhW~-4JyS&6F!qpu(|8eto(M{62Fq|GEwk^KQR^gkJK~W>|-Wg$zjJ{=0 zEF=?`7#mjLM0pE}zV5bFGuMrkLwQK$NNCLosrSyVlYUNg$3L5um+9+gFw#n1x!MncgzUFRU0r>P|^(rdVs>t?+jrUS+EZU$a z!lBeHzd_!ybv_CRC zW@`bP!c&C;&H6>O^Y8N(@wyzFPZaW=KAs}MLzoIw6FPtS(}h)K0|3o=>2jhY7ykGP z{-k5$7py(DxcJMb{deRD+0osQVKN9uhnWKnX{ppR$x>0~d$Zm<1&V1`Xxkmh!Bd&8 z7n~yI2ljAsoyo^^^i)(Ko?ReOVO*nQT~iCeSxA2k@M;aCMX{dl-7$XHiN7j!iL0Q@ z>4Bmd>PKBJUfGV^DSm;wvBX00t!R{GQ&(xkjXlRgh2ovcxsyO0NpGv+=**!m zX!2sY2AB3{Buv68p8|;DZkfaR%K0%CSscn-()qG-S&~ez}g%Ag$d!DRm50Gd8jR+6!Ra zfIo#IZIBMz5bN4p++mN@)I4`- zANw{@KcNsbuL6V9s0OxBx;5O^(FF#HWmk2abbg|fNzMol+f*^@A{Wk)2;)&f=TY9B z{>{RQNZ6!yxGPs~Cm-0s?#Ox`iCc3 zUC2O`cPnmE`v71bz`jGSmHbxj-mLu<9S`lWkv9ti8lAfz6a^=6k-pEzLsOXR)=sIDZ?NlQ=+>--JPCglfBq zb{Q3Rv(0|r2LT+iGgL^&q2m4Rah~5l-)s?HuBvf+A8ryIkS{TJ@s(hO*~W`M)>g>- zp;4pz$iK{9tdC(DqO2Ui(`sK?e~&Fo%*lEsN$?Di2PQwgke2^O2C7$+lyjk**S2ec ze$!#x=fcAyU-}Lr?c4?S`H)IFfijR$kUdLH7s#p2G=W>rlu>sk`DT&TL9Pm)BRgVudJ zTHiY=RsHYIeeJz~4;k3fW1q4Z{^rp28Ulu^>8p8BpgWJjI3p9MIZ|tkrJ8B^g9J-7 zW{T1XY5f5*5qRbU=K;rrFCCrlqn|<%3I{B>3AKZ0Mx%qo_q1*?*nr%BQaSQ)P7!Ch z@5NezY*bFWknxN9R{O)243#rmnrfOpipl5U2E#P0iKitPgf?WcjZQXykjz%+87c-X ze-9Qx>>hH(iJdXcs0T8_NLjxpjgW8uC=GNL(@ay@#Z5GUCBvd*lHwD)pJ^Nysej85 zZ^G}|^+GFD{Rpq|kw%`!pX+Pd*Hh@I@JbjVxwoIsDF{O+!X*-=rvR^_<%aLhDZACh zRCH>@M}=>vAdr_U@cKT$$T}$pq0&Y^hXb7FYg(2$GHX}?!l}ck0Htjl9Y+@LxK0G0 zgQ;+_-^54@rojl}QnjZ5)qf9eADs4E@T)`8~6$j*@`1ZSc9<)~k) zN==B#WSBUjQyhJ(a3%J)4ei-(vwtqQaRtxCSpF&4?tbrdZ!k`M5$?lhU8bvFNF^eW zJn)n6h{XCixVwNC258L`n+2zI-{gR!8zn8``W}p4KN5Q3J9Rg;Od%m1r6B@|6CY)> zM9F%VkJs)}A_Xc)>0C875)1>+sV+ZiLqe=@a?XP+q2*09BJ!hnK$;?rkiE#FFqhGf zy9^XTt-i1gFCQVq%0gIyJbc`c6l)qgzE&l;;!zTj!G86aYvr zZ5%Nb>n`DMXZF|&w17OrKbN`ESs+@wG(l%VZrFfZ-Q=z6%RD-AT6gPuE*a{e~fT%}2pc7&ifDN$$5{ z-yWXN22YU40j^>-+^j3T9tIbr?+*Qxx~^Jno_LWVCa#;Q$6jblBpN)GIc$DvJ;#N1 zgI`&9t zb;;z{Fo|)BH#wriX?1a89sRo;yKDr^AJ!_NU)+5}2@0|oKmN)eBXud?H}RW~ZkWSt zRzlAJjji@Kbp9&}jd=?r*#dJGE5}IR?g^{+)muq7Y2u8=k5i*(V_;2X<~-Nu%Liv) z6D#a%_RQ=F`Xp?v6be`>S{e9WM(`Q-j-%EVZ_uuKKuH7i>fGuMKhfKWG)o0+#ou{U zHm?A7fW%_vQpB+W^^|ipVohsQI3hp;Y(tldR4`pN9!OMnDI7SYfI85CkL+0w-iM$I z+}7e%(S`9fBsIz{e*P`?Tl~4@HSuR|U$EuzgC`n(^B)ZP99TOQ zaMsbcP=Ux!BVRALQQ2L7*X;~volP|{df=p~j#Kj+%Etff!i4PRh(Kn`BHJ^e-3AW7 zXFq5d29~E_QD*l(qk#+r1@zIA_xH%jbh+O<96;Xxp9iX zN?0M4AU&?*&nw-l%@O*{4C4u%>hlKB9dKEo&Fn>o&Qz*EqyZV3XjeZ5Zb2nR=0h;< z6~WL$6$OiqTM<3RxkJtcGqFX%_?Io?_0Q%-TQg^PVOHxazF?a(UoYyXGd|h3Pt#@z z_c4vXW08;eS~Y_r1!w_6sea2=l+2^v;?^+`?u-$vzf=o<&&UYx}oNz~hIQ`qU>qU*i zV7a^tg3Ukpo%_sU@f*vTD&0sQrQrxmnZ|H#2>4eQ{BTkK+4JiX;wbkPipvAs~ z_@m)*vrB3h8Aym?8Q*2_?>sAM&2_D9!25uSo*S~_sTUto)lWXNM5mw$fOc z(ki0i^5+m*CeF6#_fjS}?G5n*RO#Iuatcx=Z-z?GIFqA=4>>8ntv_ltNd^GjJwTC) z%4)564EtGncq)b~eE&_?8$_!KCFIM=irI+y-=xC6)G7|QseMd5f*+z z3wNWe2>4lu9SYjnp$)&l|Dq2vl_g~V-I5p&AP&?;a(Kj3AtP3*r$DA%K(4pZF~eNe zf;``VVEyh-dbi@*Re>Erwas~3z}&m<2Uz)*{}8{6I1YJ>I2M|NoDi?IT;|3}*uC_C zi9hD;jp_ie@1c?#C4O8a{_^WW_!?eE6yIdZ0r_Tp)yC}w_ zo+}{dBDUh7cfwOFP7t$*)Q*;wQ&cc^e;uOjnP}asKpj<$L#DQ~ybhKI;90n9~^onl4bi)HyRfCp7P7c7v+)&x#X9|bu0_7 z3crxXfCuYh>UXN@T2FDIfo<67Bkia_*c}b{ju5Q{k-g^}@$B3u6M!2dkGb$+B_ueX zC?Qj2fL$eNK-_ds4mp%;s8R+jnt zf}l12=6;{?j=-~F{YO%AjH03&NZ!n4<9^3>&&VbY)7l0GX(-S5WBGl;r=W#hg#}-` zzK_^^@vUraq2pS$&+X5-(gA3godpBNuCbUqOxt^$g&z&!0kq(F{d(yEk>XL5eoz+C zwKORg&^5xkZ=8`;=rZBM%_dcn^Ewg8H*;2fhEd?Ix1~A}HZ8+tJE(=z5#LSa;zHJ# zO~x*GMd*cMqsqQw-z8rqc9o% zdrA;oR5=@36ghWDaWf3E5FnrL>=uh^3$7hmxnZ4{=mToQkp8V0=R4){1jS>FFVSvy zaGd@&w+un#!BG{B_0vb7RE(B3SrxagBWIwHbs(=toM>@pKwTE^CY+M!Vt5+*m^vd0 zw#Zv26{(zChs!WHSCgdAdA5hn0ktHU`eTWdJiSK1>Ld+HIHeOH%266U_g9Qs(28cr zWodMcPtKP{+FxJA{tzFhq3R(Qc1?_6TJf30Ue7|;V$7lYQrY9`2Cak?hYE&oJok(j z;CIsU!zWj<%jXWQAF*+hlbkwRVGv}CPfgmG!i<&H*x}6&UrB8o`J!P&3ujSwPX_JN zW^d<|7bxN{@}s}%-8@d+KyuY((uwU5Zh6XRGtal zKVmi4Of z1HTw_>ir6StKmswam4LcN4emxe!Ymy3P50L=AjD6bz4J*9n|^6#6OE$A5i6BWzVYz z8&1A8+3P@i9aDaxXAB+?NGN5kvK?@7QCNP zi5ic=+L5>l>uc#EeT-$kAxKR$B-a*=U%vT(&4Ssp6%4ECi5}0=rA8mx&8PZzYeHZQ zZX{0&Wbt8hiF>X^{P7~v%V_S)(#_4AOqfZ;f$kPM?u*Z^l=y_&v+m7j&xu7|-Yj8D zM+)Bl_RGr4i}Y83#NDrla&Af2_G3SNV=&G4<>o#8W6ocfpb3_Tmy-gyKi_y>KCWvg z$zoj;340{u?)h~I0fkJFFU?n;8twhv5@lp7=XT`t$YDCq4pe}|! z__7@qE85u@k8R1Qd1-?(A+b@OO0%)yJ#&#>3%QU5B*2)H zf9{;;NQ}TNVs|b8p)_gX7kAXo1w=Dc!oJPrLXX}6{cuiUi)XpWHRuD~QTwd3!=*C` zSI%&SH2OZz!I?n3OBQ;JDO0IvmkOq`C9(dl+n3JPjEno8?*ga!H<{j!0LNdp~t zYHom%_s2fa)#>82>zaRgso7 zzhw(()_5gX_do=RCM&5>;$qEPV_kZ{zDyqyt|e5eVw-4DrMX@;D&KQORJnc`Y!99# z*l4O}I34o-%!)M;#R<^^H6v_f@-Oi^Dwz!nRxNkSL>^*^g3j*}&CTs#VY12TTJNqu zT~F)pi8PH*KSHh_or7(}9N6XcRK?mw56Q(47L zUuWgoB*6-sCR$F6S0qKjAizc>h|d0!&YA#eSjZK3h2Nh!h2MRd=50 zQp6hQ4}y%Ecy$ARL&ooX_0P@Y{V@&{_J7BzIkbr%#f6^j0_D&~Ujj}S4%+$O@rmNn z{3{w-doAqteOq{kCb1L3C5+Ln3W#ldW}sfY(n3c7?`K5Y-N=As*5^}&&F-06zDb7n zk0+ORu)9Z%oo|mf^*h_=fq&Qc$%I{5ZA=gGdGDhpc`%sJcJ9yz`ao8yMXxV!5z z*tn}JI_!LbE?Ocbr$|+K>^1T7PoKVYy2NJsHt{`IqDq?aXqTMUpK@^a=rDmZqDO{C z*GTv7y;|5l?`vk&^d()5O?X5a8APV79)T+CeJwQK%66!8hciDYTv*S*v*g@Fn)26H zY7CIF zYcVFHqtAYA8Adad&C88q#cz5?d^ML-QzKWz9&Pjl+d225THy{OCZfH+DWgU2vI_w% ztYg5z#kI64)2AlxwJ^6!!B!$Cob?z%gzQ52Ezof=xpT>Uh!kRm#n2=6R1sjQ=crvm zZVtu`w1d5RZO60NtP@MMvc4(DUrE$b059ADw9y~a{u+6Z`X$@q?pWu7IA9HL(r5Rw z^1uKHYPRJ_4^K16CbP)hQ*H?esID^Fl%Uoigo87^*7rX^a!4I^ixMm`Y=CWmpYj^7 z+?In61eSo=W)bELzMf%`F&Z5<<+6bz&C!Dy=VcdI=7u=GcO>!@`i?AyNiqN3;r^EV zON*YC>coMumkU_joVrsnhr7Y+T1-aNl;}o9Mk(I8^yfwSZJu)2zUFHY`SD5Y>6($v zToV-Urr`s%{)25*k|e$DLa<`#=b_~M7t$47XzCy~q?-pwQmLbW-UrZoABDZ?*eaB_ z#B44_3rJH_Q(N?mbF@>)Lq7g37ZQ`&6?^Pbc7QKPk)Z`E`!$=2yJ--xg@&;`gFMJX z;kyiqJlh-4Z~KW0?DA}9VI$_&;q7NEVVM1ZH<0YAsKb`!h|lUUqBU&Bqm#3*CJ zs;?R;JuexRk2vvN5ITs$5B6RD=*3bmU4C8NQVov@3JU%{4gP>a%lN)|_8O0P&Be2Q zVGr{F`q2WzT+J1O!w*&BL{dBaw&;zwnngj-_cW5Yi!K{BP zc16x=u$op71Hu8ufciK(h{-Rj0rH!*e3V6z))?Muy2Z;?V<9OM3vj5-TBQ)g(8;>` zEKKHC$!*ciS$Lp!#OXl~BRq23bFq%xM}1v&iPpWD%EdE0n>%m zmxi^X$N03;CE&%hBliW{?R20W{zs<8ij8s7lGAU&Q0-~uvUf(wMV$+ zv)NA)toZgQ4pBxm#E`WdR2_&7FDUAI57d=g`w!W<53bjcH{vdwKc6W?n?JE6D<9Nu zZI`k_Mbasnp;a^~Tu$Vk2{Ca;NCY&tMW|ugPH2vX57Xh%>P5IU%I7F^i~AkFVt(@E zo_Io3aW$!Rb}I!>lfp%>MWeKjNwtC1AphJKqne^qoX+l{Y?2@*oiZ^oojrdaSR1##Or!N zs$wlday(<^f)NQwoTV#>#3LLy-{XY_xLKGJzi*EbDGt9yGutu;e3k*tf*4o#%NLVG z4g6V`KiE11yp3kMg-ffU(VEep1UA&jyF9Scyez)~MjIqvUZ*L_A{v#-O@uAKM-|kn zY|Hygc%kJYtJ8fll@YYQYEjEiJ6Wf``&k$0x25Fw8S)Cy1u9t0qAZV77uqLw`V)5xza<-cn3^4u# zEm4OC@!a(wSj#zU33Ay@4(hQP{M?;$R}5|8%>Ido)}f`;&+09(HtwXs=?7rCjXir@ zjN<2z@ZqExeR0V7%AQcv)De4Rx5&n;I%4~KX!`O4G$QFGr>NXn2ggcqzLoL`W~m=pEc$spTT%sr7ZQ7+67j?=5Ub%~cs1*gG%*Pmi~OXBb7;`jk_`{kcP z!vy=dNMrsR#uL0&B^07e{TWH^7%m1z`d6@OjjAdeulew{m9o7siJJcBhn-NnShW%t z2|pLw_o>lk(aSpWBb7;U6P_~c=pULPb_Gm>JWAHnEHb={Ji9#DXsOmkXq(cVq;=ZJ z#8-BEuTjwLHnYhMqm_M_g%;z|lq&UkKmL5Hfavv*74ZR$fcT-Fop?90vxy=nPdroK zs;8CBoS%Z6MQ|CXKPHO$7d%YTZ?=--IybmvZszGyY3Sr_nrKQ`M)_pkoAMuS4NbEQ zZ$=5-n^@y$A~_5&uQv9Gojg5GgM8;X^L+jHrH|L)g&THYsPi*s#5!U!1AWsg(h#cx zBJ5Kx^i0zlug2C%D%~oz3dw%tB9kD?E*^^{TYY`P6G;!M)c`p|?^}%apJq2pfFBNY z0!^h%V&y8`y|LYXW}ry=n!+lA?!Lv$@^$3^6Wawpw3arazBnCJ_ULOb+iJ zv_y-va%lPhIT6~%;`TezI-1e#%Xur%J6lHO_Ie3Wx({g=?~4{YoAJ^JX{GO;sF%%B zo*XYt-DRkkbJU{t#P6gPrmLdIv9^2JC61Q4j^g+pRJLS*WrwG7Pb|o#BT|*djgYV; zbJDZ7jj?Ba&~jEYGgB_iG8&>)!RZ&QO5Kr$b}i!4y?4dZhZwk@h<0Wb9(0c#1A_HoW4&pn4wG2vBvOE%sL-9q7? z+v~6St%@CK5UDl-*m2}Fhg9!ytgAPN4)H6QPl1@kU=DpqJf>&Epgbmh2hi3avsaTnQXw$6y}aU3 zwHv4i{%-6uh$z$)PeMQrn7cLNsa;OZQ!lMaKG(C(CCUYDPxI34N>tPFrhh9F4Qt@e{osnVHH)M2s*Bz1gKb>M^nY=d}};<=8MUMUqftCf?w8ur5SjLz`T4Vh^kyYyQOD$LCRPTnG!-4f9VHrD=Wd~Ur=aNb zAd*8ca@24Ok%c3DR;E>_LPbjnal%;yRQCY#sx~Q1!lMU<9|0sRnwp?Z%7Ongy{Ig~ zYbFLwU>30kID4g!I~UU6>1gpp$DYjbiVOUxpEFUL4hX1fRZ=mVv&&`s>2aU&Y&*wi zfiQQHx4-BLX@fR_UZh7`xu1)d{EmA0@U{n7!d);RjrNKF00(tRL_t&+ zEyjmAdD0|R7Pp;#I}vHqK|eSi*gGhO|2Q=y002R_+L|HG4awkI{y5Apv(1%V4wlu@fwWKr#dks5w*qf#C)(8aXH2y z;OKL-{f{_|Knsg>8QFpW#MA@!2dZ*KNC&X@+|YQ0XfDdaequs+4hMbi2CkZPJ38Py z$K)rG-YXTm8toSdwP^b*qXp-={Xuv(abcSk(fkK#{89#-qxW z_6FDjf*|-adh!eqB_P~^6~IrIUhRRSIT*b+I?O}fjXPV@w(+k}1 z5ee6EC5O5Adk*7-3QiceJD*2s6|hG9rQc-U%aNl6ZWvDA`SiEyJvt+f>$i8$H@~Pq zf0KUt-tT`YCNVIzWE+qURunmAjMD3HhW*2>nuA*Wc{JUOX6n1ONR_sLWMo4~+5Eyv zB`7>{vwAy|ZV|ocz#I6ik>=daU7iL?P!?j=w*c)$I9++jnE_DoACUvbU5~>QoU`V3 zpqyHwZa7LPyn@4AjrZmGun~}ZTc5`%IiCsH?RXWqt`QCvD7x?La9|XDc9=kq_Rt!a z;9(QXP@gXF&9<_9_)}0UL`}z~U2s(F2R-`22+&BE785pW|j-S7$&NvokCLC0J&ar_6qsCFc|n-W`Kav}^w0I$kn2tT@c# zpX~lB1AL5$nbZqJWrRNSl6Z<1^S4dU-K3mlneH3CMt#6nw6ZPfhau zV;Qja)*lJ)n7PO%%e1TpnP$yZZpYFd+T#=q?imobKu5W#|VmX+}8pU_v^Q6 zpU6DEfBhwMvmS8G(lulW%64MB(Cnl$x&WpAwM5fzuMXRHZE@srt+P4T=)5BWvuE)I zR+j{Ho?!>v*$lp4!6ys<^cRO-uiooD>-?F+YE>FD@x5Aa(gi6drsiWzBa-E^z=IH zHPmk#dz)e9G)0Jr@E*U;E&nu8^{F|zVUo`<%P~?b$SBK=m4*;edZAbXFb!_(

&ZXF3T$B`z*ftOtbUx_1T6b_Xn1a z$=b2T$4{TA>GShPYY&$SHyM3SX7kmtPhrZZzW|TLW*rv-l%QmSAM>&{l{0UtbvO5V zp2y?yJPUsRcEc2XZ5;6Uyw#77pDlTr>w7;wxqdrdae;p@B7ew7{0JKU=<(lw{&Nh- zFTMWF-up&bo;|UXvpLK9%=3KjnSW2|epvdy^ZocGWZK_;{NNo=GGvuJC%!La@e4Zn zZ#mkWwq_ck0Bmk-iB16;O!EEbf4_eGLH&OyCO;H{UqMJRzJE{h``2F`DW5ekaOV{M zmgm2|?)Y2JH-J7Kd450N|HK5}u){ZwzqfurVpM-9BtPgsydXutg1LF^_)L|*_W1ww zk@Ve;;-M){al;RizcW61aY0{*Cfeti52nB<2x@fQ^5v*UZ=i~mT6 zd7S?K)GjCbI2qR;9)BmM`1_6h-)qmmzTvAX<)P1cOJVe%a%BF!_T!(&uYR0NOMW)u zNj`Vnf0m&9N)nNZT{&9{UBHPanmTCe1enI(>fd2FN2RQyFApw3BLHVbE{7-WH%|arq0{rdR zgmRDnX>0z$kH1Msegy&X@lQedpWsjw|93kob^YW^fM3tM`KQJC2S0B7$2WMA7Ldck z`A_3X{z<0&;~giNMt&09@JXlrXLaHcZ}!jQAL;lXMfpj(gC_h>00000NkvXXu0mjf D5}s30 literal 0 HcmV?d00001 diff --git a/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/server.ml b/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/server.ml new file mode 100644 index 00000000..0836ae2c --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti/server.ml @@ -0,0 +1,205 @@ +open Eliom_content.Html5.D +open Common +open Lwt + +module My_app = + Eliom_registration.App ( + struct + let application_name = "graffiti" + end) + +let rgb_from_string color = (* color is in format "#rrggbb" *) + let get_color i = + (float_of_string ("0x"^(String.sub color (1+2*i) 2))) /. 255. + in + try get_color 0, get_color 1, get_color 2 with | _ -> 0.,0.,0. + +let launch_server_canvas () = + let bus = Eliom_bus.create Json.t in + + let draw_server, image_string = + let surface = Cairo.image_surface_create + Cairo.FORMAT_ARGB32 ~width ~height in + let ctx = Cairo.create surface in + ((fun ((color : string), size, (x1, y1), (x2, y2)) -> + + (* Set thickness of brush *) + Cairo.set_line_width ctx (float size) ; + Cairo.set_line_join ctx Cairo.LINE_JOIN_ROUND ; + Cairo.set_line_cap ctx Cairo.LINE_CAP_ROUND ; + let red, green, blue = rgb_from_string color in + Cairo.set_source_rgb ctx ~red ~green ~blue ; + + Cairo.move_to ctx (float x1) (float y1) ; + Cairo.line_to ctx (float x2) (float y2) ; + Cairo.close_path ctx ; + + (* Apply the ink *) + Cairo.stroke ctx ; + ), + (fun () -> + let b = Buffer.create 10000 in + (* Output a PNG in a string *) + Cairo_png.surface_write_to_stream surface (Buffer.add_string b); + Buffer.contents b + )) + in + let _ = Lwt_stream.iter draw_server (Eliom_bus.stream bus) in + bus,image_string + +let graffiti_info = Hashtbl.create 0 + +let imageservice = + Eliom_registration.String.register_service + ~path:["image"] + ~headers:Http_headers.dyn_headers + ~get_params:(let open Eliom_parameter in string "name" ** int "q") + (* we add an int parameter for the browser not to cache the image: + at least for chrome, there is no way to force the browser to + reload the image without leaving the application *) + (fun (name,_) () -> + try_lwt + let _ ,image_string = Hashtbl.find graffiti_info name in + Lwt.return (image_string (), "image/png") + with + | Not_found -> raise_lwt Eliom_common.Eliom_404) + +let get_bus (name:string) = + (* create a new bus and image_string function only if it did not exists *) + try + fst (Hashtbl.find graffiti_info name) + with + | Not_found -> + let bus,image_string = launch_server_canvas () in + Hashtbl.add graffiti_info name (bus,image_string); + bus + +let main_service = Eliom_service.App.service ~path:[""] + ~get_params:(Eliom_parameter.unit) () +let multigraffiti_service = Eliom_service.App.service ~path:[""] + ~get_params:(Eliom_parameter.suffix (Eliom_parameter.string "name")) () + +let choose_drawing_form () = + get_form ~service:multigraffiti_service + (fun (name) -> + [fieldset + [label ~a:[a_for name] + [pcdata "drawing name: "]; + string_input ~input_type:`Text ~name (); + br (); + string_input ~input_type:`Submit ~value:"Go" () + ]]) + +let oclosure_script = + Eliom_content.Html5.Id.create_global_elt + (js_script + ~uri:(make_uri (Eliom_service.static_dir ()) + ["graffiti_oclosure.js"]) ()) + +let make_page content = + Lwt.return + (html + (head + (title (pcdata "Graffiti")) + [ css_link + ~uri:(make_uri (Eliom_service.static_dir ()) + ["css";"common.css"]) (); + css_link + ~uri:(make_uri (Eliom_service.static_dir ()) + ["css";"hsvpalette.css"]) (); + css_link + ~uri:(make_uri (Eliom_service.static_dir ()) + ["css";"slider.css"]) (); + oclosure_script; + css_link + ~uri:(make_uri (Eliom_service.static_dir ()) + ["css";"graffiti.css"]) (); + ]) + (body content)) + +let connection_service = + Eliom_service.Http.post_coservice' ~post_params: + (let open Eliom_parameter in (string "name" ** string "password")) () +let disconnection_service = Eliom_service.Http.post_coservice' + ~post_params:Eliom_parameter.unit () +let create_account_service = + Eliom_service.Http.post_coservice ~fallback:main_service ~post_params: + (let open Eliom_parameter in (string "name" ** string "password")) () + +let username = Eliom_reference.eref ~scope:Eliom_common.default_session_scope None + +let users = ref ["user","password";"test","test"] + +let check_pwd name pwd = + try Lwt.return (List.assoc name !users = pwd) with + | Not_found -> Lwt.return false + +let () = Eliom_registration.Action.register + ~service:create_account_service + (fun () (name, pwd) -> + users := (name, pwd)::!users; + Lwt.return ()) + +let () = Eliom_registration.Action.register + ~service:connection_service + (fun () (name, password) -> + match_lwt check_pwd name password with + | true -> Eliom_reference.set username (Some name) + | false -> Lwt.return ()) + +let () = + Eliom_registration.Action.register + ~service:disconnection_service + (fun () () -> Eliom_state.discard ~scope:Eliom_common.default_session_scope ()) + +let disconnect_box () = + post_form disconnection_service + (fun _ -> [fieldset + [string_input + ~input_type:`Submit ~value:"Log out" ()]]) () + +let login_name_form service button_text = + post_form ~service + (fun (name1, name2) -> + [fieldset + [label ~a:[a_for name1] [pcdata "login: "]; + string_input ~input_type:`Text ~name:name1 (); + br (); + label ~a:[a_for name2] [pcdata "password: "]; + string_input + ~input_type:`Password + ~name:name2 (); + br (); + string_input + ~input_type:`Submit + ~value:button_text () + ]]) () + +let default_content () = + make_page + [h1 [pcdata "Welcome to Multigraffiti"]; + h2 [pcdata "log in"]; + login_name_form connection_service "Connect"; + h2 [pcdata "create account"]; + login_name_form create_account_service "Create account";] + +module Connected_translate = +struct + type page = string -> My_app.page Lwt.t + let translate page = + Eliom_reference.get username >>= + function + | None -> default_content () + | Some username -> page username +end + +module Connected = + Eliom_registration.Customize ( My_app ) ( Connected_translate ) + +let ( !% ) f = fun a b -> return (fun c -> f a b c) + +let () = Connected.register ~service:main_service + !% (fun () () username -> + make_page + [h1 [pcdata ("Welcome to Multigraffiti " ^ username)]; + choose_drawing_form ()]) diff --git a/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti_audio/graffiti.eliom b/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti_audio/graffiti.eliom new file mode 100644 index 00000000..828b3e4f --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti_audio/graffiti.eliom @@ -0,0 +1,43 @@ +{shared{ + open Eliom_content.Html5.D + open Common +}} +{client{ + open Client +}} +open Server + +let start_drawing name image canvas = + let bus = get_bus name in + ignore {unit{ + let canceller = launch_client_canvas %bus %image %canvas in + Eliom_client.onunload (fun () -> stop_drawing canceller) + }} + +let counter = ref 0 + +let player = + Eliom_content.Html5.Id.create_global_elt + (audio + ~srcs:(make_uri (Eliom_service.static_dir ()) + ["music.ogg"],[]) + ~a:[a_autoplay (`Autoplay);a_controls (`Controls)] + [pcdata "Your browser does not support audio element" ]) + +let () = Connected.register ~service:multigraffiti_service + !% ( fun name () username -> + (* Some browsers won't reload the image, so we force + them by changing the url each time. *) + incr counter; + let image = img ~alt:name ~src:(make_uri + ~service:imageservice (name,!counter)) () in + let canvas = canvas ~a:[ a_width width; a_height height ] + [pcdata "your browser doesn't support canvas"; br (); image] in + start_drawing name image canvas; + make_page + [h1 [pcdata name]; + disconnect_box (); + choose_drawing_form (); + canvas; + player]) + diff --git a/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti_feed/Makefile b/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti_feed/Makefile new file mode 100644 index 00000000..8aeb4758 --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti_feed/Makefile @@ -0,0 +1,68 @@ + +APP_NAME := graffiti +SERVER_PACKAGE := cairo, unix +CLIENT_PACKAGE := + +SERVER_FILES = common.ml server.ml feed.ml ${wildcard *.eliom} +CLIENT_FILES = common.ml client.ml ${wildcard *.eliom} + +PORT := 8080 + +OCLOSURE := YES + +### + +all: local byte opt conf + +LIBDIR := local/var/www/lib +JSDIR := local/var/www/static + +include Makefile.common + +distclean:: + -rm -rf css/closure + -rm -rf local + -rm -f graffiti.conf + +#### + +DIRS = local/var/lib/ocsidbm local/var/run local/var/log \ + local/var/www/static local/var/www/lib local/etc \ + local/var/www/static/graffiti_saved + +local: ${DIRS} local/var/www/static/css local/var/www/static/images css/closure + +local/var/www/static/css: + ln -fs $(shell pwd)/css local/var/www/static/css + +local/var/www/static/images: + ln -fs $(shell pwd)/images local/var/www/static/images + +css/closure: + ln -fs $(shell ocamlfind query oclosure)/closure/goog/css/ css/closure + +${DIRS}: + mkdir -p $@ + +conf: graffiti.conf + +graffiti.conf: graffiti.conf.in + sed -e "s|%%SRC%%|$(shell pwd)|" \ + -e "s|%%LIBDIR%%|${LIBDIR}|" \ + -e "s|%%JSDIR%%|${JSDIR}|" \ + -e "s|%%PORT%%|${PORT}|" \ + $< > $@ + +run.local: graffiti.conf + ocsigenserver -c graffiti.conf + +run.opt.local: graffiti.conf + ocsigenserver.opt -c graffiti.conf + +#### + +install:: + install -d -m 775 ${INSTALL_USER} ${INSTALL_DIR}/static/css + install -m 664 ${INSTALL_USER} css/*.css ${INSTALL_DIR}/static/css + cd $(shell ocamlfind query oclosure)/closure/goog/css/ && \ + find -type f -exec install -D -m 664 {} ${INSTALL_DIR}/static/css/closure/{} \; diff --git a/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti_feed/feed.ml b/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti_feed/feed.ml new file mode 100644 index 00000000..40df2309 --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti_feed/feed.ml @@ -0,0 +1,108 @@ +open Eliom_content +open Html5.D +open Server +open Eliom_lib +open Eliom_lib.Lwt_ops + +let static_dir = + match Eliom_config.get_config () with + | [Simplexmlparser.Element ("staticdir", [], [Simplexmlparser.PCData dir])] -> + dir + | [] -> + raise (Ocsigen_extensions.Error_in_config_file + ("staticdir must be configured")) + | _ -> + raise (Ocsigen_extensions.Error_in_config_file + ("Unexpected content inside graffiti config")) + +let image_dir name = + let dir = static_dir ^ "/graffiti_saved/" ^ (Eliom_lib.Url.encode name) in + (try_lwt Lwt_unix.mkdir dir 0o777 with + | _ -> debug "could not create the directory %s" dir; Lwt.return ()) >|= + (fun () -> dir) + +let make_filename name number = + image_dir name >|= ( fun dir -> (dir ^ "/" ^ (string_of_int number) ^ ".png") ) + +let save image name number = + lwt file_name = make_filename name number in + lwt out_chan = Lwt_io.open_file ~mode:Lwt_io.output file_name in + Lwt_io.write out_chan image + +let image_info_table = Ocsipersist.Polymorphic.open_table "image_info_table" + +let save_image username = + let now = CalendarLib.Calendar.now () in + lwt number,_,list = + try_lwt Ocsipersist.Polymorphic.find image_info_table username with + | Not_found -> Lwt.return (0,now,[]) + | e -> Lwt.fail e + in + lwt () = Ocsipersist.Polymorphic.add image_info_table + username (number+1,now,(number,now)::list) in + let (_,image_string) = Hashtbl.find graffiti_info username in + save (image_string ()) username number + +let save_image_box name = + let save_image_service = + Eliom_registration.Action.register_post_coservice' + ~post_params:Eliom_parameter.unit + (fun () () -> save_image name) + in + post_form save_image_service + (fun _ -> + [p [string_input + ~input_type:`Submit ~value:"save" ()]]) () + +let feed_service = Eliom_service.Http.service ~path:["feed"] + ~get_params:(Eliom_parameter.string "name") () + +let local_filename name number = + ["graffiti_saved"; Url.encode name ; (string_of_int number) ^ ".png"] + +let rec entries name list = function + | 0 -> [] + | len -> + match list with + | [] -> [] + | (n,saved)::q -> + let title = Atom_feed.plain ("graffiti " ^ name ^ " " ^ (string_of_int n)) in + let uri = + Xhtml.M.uri_of_string + (Eliom_uri.make_string_uri + ~service:(Eliom_service.static_dir ()) + (local_filename name n)) + in + let entry = + Atom_feed.entry ~title ~id:uri ~updated:saved + [Atom_feed.xhtmlC [ Xhtml.M.img ~src:uri ~alt:"image" ()]] in + entry::(entries name q (len - 1)) + +let feed name () = + let id = Xhtml.M.uri_of_string + (Eliom_uri.make_string_uri + ~service:feed_service name) in + let title = Atom_feed.plain ("nice drawings of " ^ name) in + try_lwt + Ocsipersist.Polymorphic.find image_info_table name >|= + (fun (number,updated,list) -> Atom_feed.feed ~id ~updated ~title (entries name list 10)) + with + | Not_found -> + let now = CalendarLib.Calendar.now () in + Lwt.return (Atom_feed.feed ~id ~updated:now ~title []) + | e -> Lwt.fail e + +let feed name () = + let id = Xhtml.M.uri_of_string + (Eliom_uri.make_string_uri ~service:feed_service name) in + let title = Atom_feed.plain ("nice drawings of " ^ name) in + Lwt.catch + (fun () -> Ocsipersist.Polymorphic.find image_info_table name >|= + (fun (number,updated,list) -> Atom_feed.feed ~id ~updated ~title (entries name list 10))) + ( function Not_found -> + let now = CalendarLib.Calendar.now () in + Lwt.return (Atom_feed.feed ~id ~updated:now ~title []) + | e -> Lwt.fail e ) + +let () = Eliom_atom.Reg.register + ~service:feed_service feed diff --git a/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti_feed/graffiti.eliom b/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti_feed/graffiti.eliom new file mode 100644 index 00000000..3c2bbc1b --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti_feed/graffiti.eliom @@ -0,0 +1,42 @@ +{shared{ + open Eliom_content.Html5.D + open Common +}} +{client{ + open Client +}} +open Server +open Feed + +let start_drawing name image canvas = + let bus = get_bus name in + ignore {unit{ + let canceller = launch_client_canvas %bus %image %canvas in + Eliom_client.onunload (fun () -> stop_drawing canceller) + }} + +let counter = ref 0 + +let () = Connected.register ~service:multigraffiti_service + !% ( fun name () username -> + (* Some browsers won't reload the image, so we force + them by changing the url each time. *) + incr counter; + let image = + img ~alt:name + ~src:(make_uri + ~service:imageservice (name,!counter)) () in + let canvas = + canvas ~a:[ a_width width; a_height height ] + [pcdata "your browser doesn't support canvas"; br (); image] in + start_drawing name image canvas; + make_page + [h1 [pcdata name]; + disconnect_box (); + choose_drawing_form (); + a feed_service [pcdata "atom feed"] name; + div ( if name = username + then [save_image_box name] + else [pcdata "no saving"] ); + canvas;]) + diff --git a/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti_macaque/Makefile b/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti_macaque/Makefile new file mode 100644 index 00000000..7030ddca --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti_macaque/Makefile @@ -0,0 +1,68 @@ + +APP_NAME := graffiti +SERVER_PACKAGE := cairo, unix, macaque.syntax +CLIENT_PACKAGE := + +SERVER_FILES = common.ml server.ml ${wildcard *.eliom} +CLIENT_FILES = common.ml client.ml ${wildcard *.eliom} + +PORT := 8080 + +OCLOSURE := YES + +### + +all: local byte opt conf + +LIBDIR := local/var/www/lib +JSDIR := local/var/www/static + +include Makefile.common + +distclean:: + -rm css/closure + -rm -r local + -rm graffiti.conf + +#### + +DIRS = local/var/lib/ocsidbm local/var/run local/var/log \ + local/var/www/static local/var/www/lib local/etc \ + local/var/www/static/graffiti_saved + +local: ${DIRS} local/var/www/static/css local/var/www/static/images css/closure + +local/var/www/static/css: + ln -fs $(shell pwd)/css local/var/www/static/css + +local/var/www/static/images: + ln -fs $(shell pwd)/images local/var/www/static/images + +css/closure: + ln -fs $(shell ocamlfind query oclosure)/closure/goog/css/ css/closure + +${DIRS}: + mkdir -p $@ + +conf: graffiti.conf + +graffiti.conf: graffiti.conf.in + sed -e "s|%%SRC%%|$(shell pwd)|" \ + -e "s|%%LIBDIR%%|${LIBDIR}|" \ + -e "s|%%JSDIR%%|${JSDIR}|" \ + -e "s|%%PORT%%|${PORT}|" \ + $< > $@ + +run.local: graffiti.conf + ocsigenserver -c graffiti.conf + +run.opt.local: graffiti.conf + ocsigenserver.opt -c graffiti.conf + +#### + +install:: + install -d -m 775 ${INSTALL_USER} ${INSTALL_DIR}/static/css + install -m 664 ${INSTALL_USER} css/*.css ${INSTALL_DIR}/static/css + cd $(shell ocamlfind query oclosure)/closure/goog/css/ && \ + find -type f -exec install -D -m 664 {} ${INSTALL_DIR}/static/css/closure/{} \; diff --git a/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti_macaque/create_table.sql b/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti_macaque/create_table.sql new file mode 100644 index 00000000..1c9bebad --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti_macaque/create_table.sql @@ -0,0 +1,5 @@ + +CREATE TABLE users ( + login text NOT NULL, + password text NOT NULL +); diff --git a/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti_macaque/graffiti.conf.in b/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti_macaque/graffiti.conf.in new file mode 100644 index 00000000..85afbc9b --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti_macaque/graffiti.conf.in @@ -0,0 +1,36 @@ + + + + + %%PORT%% + + %%SRC%%/local/var/log + %%SRC%%/local/var/run + %%SRC%%/local/var/run/ocsigenserver_command + + utf-8 + + + + + + + + + + + + + + + + + + + %%SRC%%/%%JSDIR%% + + + + + + diff --git a/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti_macaque/server.ml b/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti_macaque/server.ml new file mode 100644 index 00000000..be19c2d6 --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti_macaque/server.ml @@ -0,0 +1,236 @@ +open Eliom_content +open Html5.D +open Common +open Lwt + +module My_app = + Eliom_registration.App (struct + let application_name = "graffiti" + end) + +let rgb_from_string color = (* color is in format "#rrggbb" *) + let get_color i = + (float_of_string ("0x"^(String.sub color (1+2*i) 2))) /. 255. + in + try get_color 0, get_color 1, get_color 2 with | _ -> 0.,0.,0. + +let launch_server_canvas () = + let bus = Eliom_bus.create Json.t in + + let draw_server, image_string = + let surface = Cairo.image_surface_create + Cairo.FORMAT_ARGB32 ~width ~height in + let ctx = Cairo.create surface in + ((fun ((color : string), size, (x1, y1), (x2, y2)) -> + + (* Set thickness of brush *) + Cairo.set_line_width ctx (float size) ; + Cairo.set_line_join ctx Cairo.LINE_JOIN_ROUND ; + Cairo.set_line_cap ctx Cairo.LINE_CAP_ROUND ; + let red, green, blue = rgb_from_string color in + Cairo.set_source_rgb ctx ~red ~green ~blue ; + + Cairo.move_to ctx (float x1) (float y1) ; + Cairo.line_to ctx (float x2) (float y2) ; + Cairo.close_path ctx ; + + (* Apply the ink *) + Cairo.stroke ctx ; + ), + (fun () -> + let b = Buffer.create 10000 in + (* Output a PNG in a string *) + Cairo_png.surface_write_to_stream surface (Buffer.add_string b); + Buffer.contents b + )) + in + let _ = Lwt_stream.iter draw_server (Eliom_bus.stream bus) in + bus,image_string + +let graffiti_info = Hashtbl.create 0 + +let imageservice = + Eliom_registration.String.register_service + ~path:["image"] + ~headers:Http_headers.dyn_headers + ~get_params:(let open Eliom_parameter in string "name" ** int "q") + (* we add another parameter for the browser not to cache: at least + for chrome, there is no way to force the browser to reload the + image without leaving the application *) + (fun (name,_) () -> + try_lwt + let _ ,image_string = Hashtbl.find graffiti_info name in + Lwt.return (image_string (), "image/png") + with + | Not_found -> raise_lwt Eliom_common.Eliom_404) + +let get_bus (name:string) = + (* create a new bus and image_string function only if it did not exists *) + try + fst (Hashtbl.find graffiti_info name) + with + | Not_found -> + let bus,image_string = launch_server_canvas () in + Hashtbl.add graffiti_info name (bus,image_string); + bus + +let main_service = Eliom_service.App.service ~path:[""] + ~get_params:(Eliom_parameter.unit) () +let multigraffiti_service = Eliom_service.App.service ~path:[""] + ~get_params:(Eliom_parameter.suffix (Eliom_parameter.string "name")) () + +let choose_drawing_form () = + get_form ~service:multigraffiti_service + (fun (name) -> + [fieldset + [label ~a:[a_for name] [pcdata "drawing name: "]; + string_input ~input_type:`Text ~name (); + br (); + string_input ~input_type:`Submit ~value:"Go" () + ]]) + +let connection_service = + Eliom_service.Http.post_coservice' + ~post_params:(let open Eliom_parameter in (string "name" ** string "password")) + () +let disconnection_service = Eliom_service.Http.post_coservice' ~post_params:Eliom_parameter.unit () +let create_account_service = + Eliom_service.Http.post_coservice ~fallback:main_service ~post_params:(let open Eliom_parameter in (string "name" ** string "password")) () + +let username = Eliom_reference.eref ~scope:Eliom_common.default_session_scope None + +module Lwt_thread = struct + include Lwt + include Lwt_chan +end +module Lwt_PGOCaml = PGOCaml_generic.Make(Lwt_thread) +module Lwt_Query = Query.Make_with_Db(Lwt_thread)(Lwt_PGOCaml) + +let get_db : unit -> unit Lwt_PGOCaml.t Lwt.t = + let db_handler = ref None in + fun () -> + match !db_handler with + | Some h -> Lwt.return h + | None -> Lwt_PGOCaml.connect ~database:"testbase" () + +let table = <:table< users ( + login text NOT NULL, + password text NOT NULL +) >> + +let find name = + (get_db () >>= fun dbh -> + Lwt_Query.view dbh + <:view< {password = user_.password} | + user_ in $table$; + user_.login = $string:name$; >>) + +let insert name pwd = + get_db () >>= fun dbh -> + Lwt_Query.query dbh + <:insert< $table$ := { login = $string:name$; password = $string:pwd$; } >> + +let check_pwd name pwd = + (get_db () >>= fun dbh -> + Lwt_Query.view dbh + <:view< {password = user_.password} | + user_ in $table$; + user_.login = $string:name$; + user_.password = $string:pwd$ >>) + >|= (function [] -> false | _ -> true) + +let () = Eliom_registration.Action.register + ~service:create_account_service + (fun () (name, pwd) -> + find name >>= + (function + | [] -> insert name pwd + | _ -> Lwt.return ())) + +let () = Eliom_registration.Action.register + ~service:connection_service + (fun () (name, password) -> + check_pwd name password >>= + (function + | true -> Eliom_reference.set username (Some name) + | false -> Lwt.return ())) + +let () = + Eliom_registration.Action.register + ~service:disconnection_service + (fun () () -> Eliom_state.discard ~scope:Eliom_common.default_session_scope ()) + +let disconnect_box () = + post_form disconnection_service + (fun _ -> [fieldset + [string_input + ~input_type:`Submit ~value:"Log out" ()]]) () + +let login_name_form service button_text = + post_form ~service + (fun (name1, name2) -> + [fieldset + [label ~a:[a_for name1] [pcdata "login: "]; + string_input ~input_type:`Text ~name:name1 (); + br (); + label ~a:[a_for name2] [pcdata "password: "]; + string_input ~input_type:`Password ~name:name2 (); + br (); + string_input ~input_type:`Submit ~value:button_text () + ]]) () + +let oclosure_script = + Html5.Id.create_global_elt + (js_script + ~uri:(make_uri (Eliom_service.static_dir ()) + ["graffiti_oclosure.js"]) ()) + +let make_page content = + Lwt.return + (html + (head + (title (pcdata "Graffiti")) + [ css_link + ~uri:(make_uri (Eliom_service.static_dir ()) + ["css";"common.css"]) (); + css_link + ~uri:(make_uri (Eliom_service.static_dir ()) + ["css";"hsvpalette.css"]) (); + css_link + ~uri:(make_uri (Eliom_service.static_dir ()) + ["css";"slider.css"]) (); + oclosure_script; + css_link + ~uri:(make_uri (Eliom_service.static_dir ()) + ["css";"graffiti.css"]) (); + ]) + (body content)) + +let default_content () = + make_page + [h1 [pcdata "Welcome to Multigraffiti"]; + h2 [pcdata "log in"]; + login_name_form connection_service "Connect"; + h2 [pcdata "create account"]; + login_name_form create_account_service "Create account";] + +module Connected_translate = +struct + type page = string -> My_app.page Lwt.t + let translate page = + Eliom_reference.get username >>= + function + | None -> default_content () + | Some username -> page username +end + +module Connected = + Eliom_registration.Customize ( My_app ) ( Connected_translate ) + +let ( !% ) f = fun a b -> return (fun c -> f a b c) + +let () = Connected.register ~service:main_service + !% (fun () () username -> + make_page + [h1 [pcdata ("Welcome to Multigraffiti " ^ username)]; + choose_drawing_form ()]) diff --git a/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti_ocsipersist/server.ml b/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti_ocsipersist/server.ml new file mode 100644 index 00000000..cce9f0a6 --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter3/multigraffiti_ocsipersist/server.ml @@ -0,0 +1,208 @@ +open Eliom_content.Html5.D +open Common +open Lwt + +module My_app = + Eliom_registration.App ( + struct + let application_name = "graffiti" + end) + +let rgb_from_string color = (* color is in format "#rrggbb" *) + let get_color i = + (float_of_string ("0x"^(String.sub color (1+2*i) 2))) /. 255. + in + try get_color 0, get_color 1, get_color 2 with | _ -> 0.,0.,0. + +let launch_server_canvas () = + let bus = Eliom_bus.create Json.t in + + let draw_server, image_string = + let surface = Cairo.image_surface_create + Cairo.FORMAT_ARGB32 ~width ~height in + let ctx = Cairo.create surface in + ((fun ((color : string), size, (x1, y1), (x2, y2)) -> + + (* Set thickness of brush *) + Cairo.set_line_width ctx (float size) ; + Cairo.set_line_join ctx Cairo.LINE_JOIN_ROUND ; + Cairo.set_line_cap ctx Cairo.LINE_CAP_ROUND ; + let red, green, blue = rgb_from_string color in + Cairo.set_source_rgb ctx ~red ~green ~blue ; + + Cairo.move_to ctx (float x1) (float y1) ; + Cairo.line_to ctx (float x2) (float y2) ; + Cairo.close_path ctx ; + + (* Apply the ink *) + Cairo.stroke ctx ; + ), + (fun () -> + let b = Buffer.create 10000 in + (* Output a PNG in a string *) + Cairo_png.surface_write_to_stream surface (Buffer.add_string b); + Buffer.contents b + )) + in + let _ = Lwt_stream.iter draw_server (Eliom_bus.stream bus) in + bus,image_string + +let graffiti_info = Hashtbl.create 0 + +let imageservice = + Eliom_registration.String.register_service + ~path:["image"] + ~headers:Http_headers.dyn_headers + ~get_params:(let open Eliom_parameter in string "name" ** int "q") + (* we add an int parameter for the browser not to cache the image: + at least for chrome, there is no way to force the browser to + reload the image without leaving the application *) + (fun (name,_) () -> + try_lwt + let _ ,image_string = Hashtbl.find graffiti_info name in + Lwt.return (image_string (), "image/png") + with + | Not_found -> raise_lwt Eliom_common.Eliom_404) + +let get_bus (name:string) = + (* create a new bus and image_string function only if it did not exists *) + try + fst (Hashtbl.find graffiti_info name) + with + | Not_found -> + let bus,image_string = launch_server_canvas () in + Hashtbl.add graffiti_info name (bus,image_string); + bus + +let main_service = Eliom_service.App.service ~path:[""] + ~get_params:(Eliom_parameter.unit) () +let multigraffiti_service = Eliom_service.App.service ~path:[""] + ~get_params:(Eliom_parameter.suffix (Eliom_parameter.string "name")) () + +let choose_drawing_form () = + get_form ~service:multigraffiti_service + (fun (name) -> + [fieldset + [label ~a:[a_for name] + [pcdata "drawing name: "]; + string_input ~input_type:`Text ~name (); + br (); + string_input + ~input_type:`Submit + ~value:"Go" () + ]]) + +let oclosure_script = + Eliom_content.Html5.Id.create_global_elt + (js_script + ~uri:(make_uri (Eliom_service.static_dir ()) + ["graffiti_oclosure.js"]) ()) + +let make_page content = + Lwt.return + (html + (head + (title (pcdata "Graffiti")) + [ css_link + ~uri:(make_uri (Eliom_service.static_dir ()) + ["css";"common.css"]) (); + css_link + ~uri:(make_uri (Eliom_service.static_dir ()) + ["css";"hsvpalette.css"]) (); + css_link + ~uri:(make_uri (Eliom_service.static_dir ()) + ["css";"slider.css"]) (); + oclosure_script; + css_link + ~uri:(make_uri (Eliom_service.static_dir ()) + ["css";"graffiti.css"]) (); + ]) + (body content)) + +let connection_service = + Eliom_service.Http.post_coservice' ~post_params: + (let open Eliom_parameter in (string "name" ** string "password")) () +let disconnection_service = Eliom_service.Http.post_coservice' + ~post_params:Eliom_parameter.unit () +let create_account_service = + Eliom_service.Http.post_coservice ~fallback:main_service ~post_params: + (let open Eliom_parameter in (string "name" ** string "password")) () + +let username = Eliom_reference.eref ~scope:Eliom_common.default_session_scope None + +let user_table = Ocsipersist.Polymorphic.open_table "user_table" + +let check_pwd name pwd = + try_lwt + lwt saved_password = Ocsipersist.Polymorphic.find user_table name in + Lwt.return (pwd = saved_password) + with + Not_found -> Lwt.return false + +let () = Eliom_registration.Action.register + ~service:create_account_service + (fun () (name, pwd) -> Ocsipersist.Polymorphic.add user_table name pwd) + +let () = Eliom_registration.Action.register + ~service:connection_service + (fun () (name, password) -> + match_lwt check_pwd name password with + | true -> Eliom_reference.set username (Some name) + | false -> Lwt.return ()) + +let () = + Eliom_registration.Action.register + ~service:disconnection_service + (fun () () -> Eliom_state.discard ~scope:Eliom_common.default_session_scope ()) + +let disconnect_box () = + post_form disconnection_service + (fun _ -> [fieldset + [string_input + ~input_type:`Submit ~value:"Log out" ()]]) () + +let login_name_form service button_text = + post_form ~service + (fun (name1, name2) -> + [fieldset + [label ~a:[a_for name1] [pcdata "login: "]; + string_input ~input_type:`Text ~name:name1 (); + br (); + label ~a:[a_for name2] [pcdata "password: "]; + string_input + ~input_type:`Password + ~name:name2 (); + br (); + string_input + ~input_type:`Submit + ~value:button_text () + ]]) () + +let default_content () = + make_page + [h1 [pcdata "Welcome to Multigraffiti"]; + h2 [pcdata "log in"]; + login_name_form connection_service "Connect"; + h2 [pcdata "create account"]; + login_name_form create_account_service "Create account";] + +module Connected_translate = +struct + type page = string -> My_app.page Lwt.t + let translate page = + Eliom_reference.get username >>= + function + | None -> default_content () + | Some username -> page username +end + +module Connected = + Eliom_registration.Customize ( My_app ) ( Connected_translate ) + +let ( !% ) f = fun a b -> return (fun c -> f a b c) + +let () = Connected.register ~service:main_service + !% (fun () () username -> + make_page + [h1 [pcdata ("Welcome to Multigraffiti " ^ username)]; + choose_drawing_form ()]) diff --git a/tutos/8.0/manual/files/tutorial/chapter3/reactive_media_player/reactive_media_player.eliom b/tutos/8.0/manual/files/tutorial/chapter3/reactive_media_player/reactive_media_player.eliom new file mode 100644 index 00000000..ff7c30e7 --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/chapter3/reactive_media_player/reactive_media_player.eliom @@ -0,0 +1,107 @@ +[%%shared + open Eliom_content + open Html5 + + type action = Play | Pause | Seek of float +] + +let%client media_s, set_media_s = React.S.create Pause + +let%client progress_s, set_progress_s = React.S.create (0., 0.) + +let%client unblock_s, set_unblock_s = React.S.create true + +let progress_bar () = + let progress_value = + [%client + (let f (time, duration) = + if duration = 0. then 0. else time /. duration *. 100. + in + React.S.map f progress_s + : float React.signal) + ] in + let attrs = D.([ + a_input_min 0.; + a_input_max 100.; + a_onmousedown [%client fun _ -> set_unblock_s false]; + a_onmouseup [%client fun _ -> set_unblock_s true]; + C.attr [%client + R.a_value + (React.S.map (Printf.sprintf "%0.f") + (React.S.on unblock_s 0. ~%progress_value))] + ]) + in + let d_input = + D.Form.input ~input_type:`Range ~value:0. ~a:attrs + D.Form.float + in + let _ = [%client + (Lwt.async (fun () -> + let d_input = To_dom.of_input ~%d_input in + Lwt_js_events.inputs d_input (fun _ _ -> + set_media_s (Seek (Js.parseFloat d_input##.value)) ; + Lwt.return () + )) + : unit) + ] in + d_input + +let media_uri = + Html5.D.make_uri + ~service:(Eliom_service.static_dir ()) + ["hb.mp3"] + +let media_tag () = + let media = D.(audio ~src:media_uri [pcdata "alt"]) in + let _ = [%client + (Lwt.async (fun () -> + let media = To_dom.of_audio ~%media in + let media_map = function + | Play -> + media##play + | Pause -> + media##pause + | Seek f -> + media##.currentTime := (f /. 100. *. media##.duration) + in Lwt_react.S.keep (React.S.map media_map media_s) ; + Lwt_js_events.timeupdates media (fun _ _ -> + set_progress_s (media##.currentTime, media##.duration) ; + Lwt.return () + )) + : unit) + ] in + media + +let pause_button () = + D.(Form.button_no_value + ~button_type:`Button + ~a:[a_onclick [%client fun _ -> set_media_s Pause ]] + [pcdata "Pause"]) + +let play_button () = + D.(Form.button_no_value + ~button_type:`Button + ~a:[a_onclick [%client fun _ -> set_media_s Play ]] + [pcdata "Play"]) + +module React_Player_app = + Eliom_registration.App + (struct + let application_name = "react_player" + end) + +let media_service = + Eliom_service.App.service ~path:[] ~get_params:Eliom_parameter.unit () + +let () = + React_Player_app.register + ~service:media_service + (fun name () -> + let body = + D.(body [ + h2 [pcdata "Media"]; + media_tag (); + div [play_button (); pause_button (); progress_bar ()] + ]) + in + Lwt.return (Eliom_tools.D.html ~title:"Media" ~css:[] body)) diff --git a/tutos/8.0/manual/files/tutorial/client-server-req.svg b/tutos/8.0/manual/files/tutorial/client-server-req.svg new file mode 100644 index 00000000..1843e430 --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/client-server-req.svg @@ -0,0 +1,577 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + page generation + let%rpc f (x : int) : int = ... [%client ... ~%b ... ] Lwt.return v + ...[%client ... ~%a ... ]Lwt.return (html (...) (...)) + execution of client fragments[%client ... ~%a ...] + execution of client fragments[%client ... ~%b ...] + rpc + js +html ++ injections ~%a + value v+ injections ~%b + https://... + display page + display page + click on a link + + page generation + client + server + + + + + + + + + + diff --git a/tutos/8.0/manual/files/tutorial/client-server.png b/tutos/8.0/manual/files/tutorial/client-server.png new file mode 100644 index 0000000000000000000000000000000000000000..0090d435b68ffd6d4a8e63627659364ad47fa4a4 GIT binary patch literal 54985 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 fR + + + + + + + + + + + + + + + + + + + + + + + + let%server + + + + + + + + let%client + + + + + + + + let%shared + + + + + + + + + let%server + + + + + + + + let%shared + + + + + + + + + let%client + + + + + + + + let%shared + + + + + + + + + + + + + + + ppx + ppx + + client-server type-checking + ocamlopt + js_of_ocaml + .cmxs + .js + .eliom + + diff --git a/tutos/8.0/manual/files/tutorial/static/css/common.css b/tutos/8.0/manual/files/tutorial/static/css/common.css new file mode 100644 index 00000000..02d7073c --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/static/css/common.css @@ -0,0 +1,41 @@ +/* + * Copyright 2009 The Closure Library Authors. All Rights Reserved. + * + * Use of this source code is governed by an Apache 2.0 License. + * See the COPYING file for details. + */ + +/* + * Cross-browser implementation of the "display: inline-block" CSS property. + * See http://www.w3.org/TR/CSS21/visuren.html#propdef-display for details. + * Tested on IE 6 & 7, FF 1.5 & 2.0, Safari 2 & 3, Webkit, and Opera 9. + * + * @author attila@google.com (Attila Bodis) + */ + +/* + * Default rule; only Safari, Webkit, and Opera handle it without hacks. + */ +.goog-inline-block { + position: relative; + display: -moz-inline-box; /* Ignored by FF3 and later. */ + display: inline-block; +} + +/* + * Pre-IE7 IE hack. On IE, "display: inline-block" only gives the element + * layout, but doesn't give it inline behavior. Subsequently setting display + * to inline does the trick. + */ +* html .goog-inline-block { + display: inline; +} + +/* + * IE7-only hack. On IE, "display: inline-block" only gives the element + * layout, but doesn't give it inline behavior. Subsequently setting display + * to inline does the trick. + */ +*:first-child+html .goog-inline-block { + display: inline; +} diff --git a/tutos/8.0/manual/files/tutorial/static/css/graffiti.css b/tutos/8.0/manual/files/tutorial/static/css/graffiti.css new file mode 100644 index 00000000..8287935b --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/static/css/graffiti.css @@ -0,0 +1,68 @@ +/* Graffiti + * http://www.ocsigen.org/graffiti + * Copyright (C) 2013 Vincent Balat + * Laboratoire PPS - CNRS Université Paris Diderot + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, with linking exception; + * either version 2.1 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +body { + width: 750px; + -webkit-user-select: none; +} + +canvas { + border: solid 1px #aaaaaa; +} + +div.ojw_colorpicker { + position: absolute; + top: 8px; + left: 740px; +} + +input { + width: 400px; +} + +.ot-color-picker.colorpicker { + height: 300px; + width: 400px; +} + +.slider { + -webkit-appearance: none; + height: 20px; + background: #d3d3d3; + outline: none; + opacity: 0.7; + -webkit-transition: .2s; + transition: opacity .2s; +} + +.slider:hover { + opacity: 1; +} + +.slider::-moz-range-thumb { + background: #cbd6f1; + cursor: pointer; +} + + +.undercanvas { + z-index: -1; + position: absolute; +} diff --git a/tutos/8.0/manual/files/tutorial/static/css/hsvpalette.css b/tutos/8.0/manual/files/tutorial/static/css/hsvpalette.css new file mode 100644 index 00000000..d3ae7f67 --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/static/css/hsvpalette.css @@ -0,0 +1,179 @@ +/* + * Copyright 2008 The Closure Library Authors. All Rights Reserved. + * + * Use of this source code is governed by an Apache 2.0 License. + * See the COPYING file for details. + */ + +/* + * All Rights Reserved. + * + * Styles for the HSV color palette. + * + * @author smcbride@google.com (Sean McBride) + * @author arv@google.com (Erik Arvidsson) + * @author manucornet@google.com (Manu Cornet) + */ + +.goog-hsv-palette, +.goog-hsv-palette-sm { + position: relative; + border: 1px solid #999; + border-color: #ccc #999 #999 #ccc; + width: 400px; + height: 276px; +} + +.goog-hsv-palette-sm { + width: 182px; + height: 185px; +} + +.goog-hsv-palette label span, +.goog-hsv-palette-sm label span { + display: none; +} + +.goog-hsv-palette-hs-backdrop, +.goog-hsv-palette-sm-hs-backdrop, +.goog-hsv-palette-hs-image, +.goog-hsv-palette-sm-hs-image { + position: absolute; + top: 10px; + left: 10px; + width: 256px; + height: 256px; + border: 1px solid #999; +} + +.goog-hsv-palette-sm-hs-backdrop, +.goog-hsv-palette-sm-hs-image { + top: 45px; + width: 128px; + height: 128px; +} + +.goog-hsv-palette-hs-backdrop, +.goog-hsv-palette-sm-hs-backdrop { + background-color: #000; +} + +.goog-hsv-palette-hs-image, +.goog-hsv-palette-v-image, +.goog-hsv-palette-hs-handle, +.goog-hsv-palette-v-handle { + background-image: url(../images/hsv-sprite.png); +} + +.goog-hsv-palette-noalpha .goog-hsv-palette-hs-image, +.goog-hsv-palette-noalpha .goog-hsv-palette-v-image, +.goog-hsv-palette-noalpha .goog-hsv-palette-hs-handle, +.goog-hsv-palette-noalpha .goog-hsv-palette-v-handle { + background-image: url(../images/hsv-sprite.gif); +} + +.goog-hsv-palette-sm-hs-image, +.goog-hsv-palette-sm-v-image, +.goog-hsv-palette-sm-hs-handle, +.goog-hsv-palette-sm-v-handle { + background-image: url(../images/hsv-sprite-sm.png); +} + +.goog-hsv-palette-noalpha .goog-hsv-palette-sm-hs-image, +.goog-hsv-palette-noalpha .goog-hsv-palette-sm-v-image, +.goog-hsv-palette-noalpha .goog-hsv-palette-sm-hs-handle, +.goog-hsv-palette-noalpha .goog-hsv-palette-sm-v-handle { + background-image: url(../images/hsv-sprite-sm.gif); +} + +.goog-hsv-palette-hs-image, +.goog-hsv-palette-sm-hs-image { + background-position: 0 0; +} + +.goog-hsv-palette-hs-handle, +.goog-hsv-palette-sm-hs-handle { + position: absolute; + left: 5px; + top: 5px; + width: 11px; + height: 11px; + overflow: hidden; + background-position: 0 -256px; +} + +.goog-hsv-palette-sm-hs-handle { + top: 40px; + background-position: 0 -128px; +} + +.goog-hsv-palette-v-image, +.goog-hsv-palette-sm-v-image { + position: absolute; + top: 10px; + left: 286px; + width: 19px; + height: 256px; + border: 1px solid #999; + background-color: #fff; + background-position: -256px 0; +} + +.goog-hsv-palette-sm-v-image { + top: 45px; + left: 155px; + width: 9px; + height: 128px; + background-position: -128px 0; +} + +.goog-hsv-palette-v-handle, +.goog-hsv-palette-sm-v-handle { + position: absolute; + top: 5px; + left: 279px; + width: 35px; + height: 11px; + background-position: -11px -256px; + overflow: hidden; +} + +.goog-hsv-palette-sm-v-handle { + top: 40px; + left: 148px; + width: 25px; + background-position: -11px -128px; +} + +.goog-hsv-palette-swatch, +.goog-hsv-palette-sm-swatch { + position: absolute; + top: 10px; + right: 10px; + width: 65px; + height: 65px; + border: 1px solid #999; + background-color: #fff; +} + +.goog-hsv-palette-sm-swatch { + top: 10px; + right: auto; + left: 10px; + width: 30px; + height: 22px; +} + +.goog-hsv-palette-input, +.goog-hsv-palette-sm-input { + position: absolute; + top: 85px; + right: 10px; + width: 65px; +} + +.goog-hsv-palette-sm-input { + top: 10px; + right: auto; + left: 50px; +} diff --git a/tutos/8.0/manual/files/tutorial/static/css/slider.css b/tutos/8.0/manual/files/tutorial/static/css/slider.css new file mode 100644 index 00000000..ddd07482 --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/static/css/slider.css @@ -0,0 +1,45 @@ +.goog-slider-vertical, +.goog-slider-horizontal { +background-color: ThreeDFace; +position: relative; +overflow: hidden; +} + +.goog-slider-vertical { +height: 300px; +width: 20px; +} + +.goog-slider-horizontal { +height: 20px; +width: 400px; +} + +.goog-slider-thumb { +position: absolute; +background-color: ThreeDShadow; +overflow: hidden; +} + +.goog-slider-vertical .goog-slider-thumb { +left: 0; +height: 20px; +width: 100%; +} + +.goog-slider-horizontal .goog-slider-thumb { +top: 0; +width: 20px; +height: 100%; +} +#s-h { +margin-bottom: 2em; +} +strong { +display: block; +margin-bottom: 3px; +} +#out1, #out2 { +color: #999; +margin-left: 1em; +} diff --git a/tutos/8.0/manual/files/tutorial/static/images/hsv-sprite-sm.png b/tutos/8.0/manual/files/tutorial/static/images/hsv-sprite-sm.png new file mode 100644 index 0000000000000000000000000000000000000000..470f8e0c967715af12ac91e8b43e1034283a9b6b GIT binary patch literal 19537 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

&ZXF3T$B`z*ftOtbUx_1T6b_Xn1a z$=b2T$4{TA>GShPYY&$SHyM3SX7kmtPhrZZzW|TLW*rv-l%QmSAM>&{l{0UtbvO5V zp2y?yJPUsRcEc2XZ5;6Uyw#77pDlTr>w7;wxqdrdae;p@B7ew7{0JKU=<(lw{&Nh- zFTMWF-up&bo;|UXvpLK9%=3KjnSW2|epvdy^ZocGWZK_;{NNo=GGvuJC%!La@e4Zn zZ#mkWwq_ck0Bmk-iB16;O!EEbf4_eGLH&OyCO;H{UqMJRzJE{h``2F`DW5ekaOV{M zmgm2|?)Y2JH-J7Kd450N|HK5}u){ZwzqfurVpM-9BtPgsydXutg1LF^_)L|*_W1ww zk@Ve;;-M){al;RizcW61aY0{*Cfeti52nB<2x@fQ^5v*UZ=i~mT6 zd7S?K)GjCbI2qR;9)BmM`1_6h-)qmmzTvAX<)P1cOJVe%a%BF!_T!(&uYR0NOMW)u zNj`Vnf0m&9N)nNZT{&9{UBHPanmTCe1enI(>fd2FN2RQyFApw3BLHVbE{7-WH%|arq0{rdR zgmRDnX>0z$kH1Msegy&X@lQedpWsjw|93kob^YW^fM3tM`KQJC2S0B7$2WMA7Ldck z`A_3X{z<0&;~giNMt&09@JXlrXLaHcZ}!jQAL;lXMfpj(gC_h>00000NkvXXu0mjf D5}s30 literal 0 HcmV?d00001 diff --git a/tutos/8.0/manual/files/tutorial/tutowidgets/ex-final.png b/tutos/8.0/manual/files/tutorial/tutowidgets/ex-final.png new file mode 100644 index 0000000000000000000000000000000000000000..0d1d22035c2de0782918d64a7580d7de2dfcdca5 GIT binary patch literal 19671 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 B17rXI literal 0 HcmV?d00001 diff --git a/tutos/8.0/manual/files/tutorial/tutowidgets/ex.css b/tutos/8.0/manual/files/tutorial/tutowidgets/ex.css new file mode 100644 index 00000000..c07bc739 --- /dev/null +++ b/tutos/8.0/manual/files/tutorial/tutowidgets/ex.css @@ -0,0 +1,30 @@ +* { + font-family: sans-serif; +} +div.button { + background-color: #5577ee; + width: 200px; + height: 20px; + padding: 0; + text-align: center; + color: #222436; + font-weight: bold; + cursor: pointer; +} +div.content { + background-color: #55ee99; + width: 180px; + height: 40px; + padding: 10px; + margin-top: 0; + color: #222436; +} +div.mywidget { + display: inline-block; + margin: 0 10px 0 0; + height: 100px; + vertical-align: top; +} +.hidden { + display: none; +} diff --git a/tutos/8.0/manual/files/tutorial/tutowidgets/ex1.png b/tutos/8.0/manual/files/tutorial/tutowidgets/ex1.png new file mode 100644 index 0000000000000000000000000000000000000000..f5a581c8aa400b3ae610c879d55b8df5fd453ca9 GIT binary patch literal 12472 zcmeHuXHb*vyJti}1p%c>_Z2BhlMX7NA|N6lVCWE)9(wPf0-{tKUAnYTLJu{OF4Aj& zP^9-xD1nf@dH-`h?uVV(nLTr6nPDK|N$z%CzxISrFEmuBDOo8Y5D2yE(HA za<1eO8FWk-ZO}*At4>$f6 z-+Y~0L2~k9#>@x7g`3WgMn8Pvcw}z%_MJg|LP{Z)aN0LApqpGXGvB?QRHKQP1R z4dldbXkzmaI!sU~BN+QzMLn3pFKI4kD#%;6W+4cq{~8Jcd8#r_2D!oU|KQ0{Tz#o_fC+}lhe2;`@D7>-*dO5ZIkEbNUg;bgaG)v8=y5Odff@}}G9 z<;$O`+e>|!&Vuxx%RSacw)X}!ds5_lM~Yt`9Ua-&*hnP_$;s8HrM+tYc+GX8(|aMo zYJY8XV6yAUaWQV4fNTTrUG7=?Dhj^zo=Uj4$7O9qbhdh-J6XUF`H$j<>pfm4ht5P} zf5M(<%Bpeso8-TK`^3#a1s3Tn?5at*wH79T_&mT)q;9LRC7k&p*}HuQuQyww5_yWD zGz3QXmBGAy2j=IW`V#!+WAs+|0tm}Ft*-t%?R<^P_dPcrxGqFAM6gNO-5sTP*t70| z!4Dg)PlQzo8I=BXoI)#{Zbu)i;5lJ9%|{q=4WeOxqHIbHWPF%j-^vs+Pg zWZj!nR;i{CtVHA&d&Zs&nJJpR<@}934x$hIN8EuVO&=z=!fq9 zK&#ki6-qBJRA{o$P?RKPK4PhNN&_#rvS_Ml%v*%zuB@ zNWRA+P4|Lf{`VK|R)vLbX@$cET6w|}_p}%##;57?AZ2G~N64u1!O`3| z@TaS>fye8pz+>FhGdqE9T0&J8pX{e*^tGo`sqB|71lObgX?3o($5mQu)mwBhMYm-p zJk=C??gP%{YwpFJ5N1=a-7abT02LJ#ERcx*`t_^tM)l%XHR0R*{7(0hK{Pt+dJ1|BxewST)v%Q;@{Y6UJ#O1l5**W2ycHWA}0Cn5naDxyf72^ZPxD1FuN z-s#<+KYvI^sifP&!ri}rgSJS%=gz7SaKc48Y^$lc=Wh>+B~>Bt6l~E*y5hy0fzf*3 z1J!T5^?Utlrbz6`G}%s1Q? z9Y;A%HHJ{BM6r)%sWF4q#KcIt%>6#z#E^Q^6{p3dC%rP!W1x?(WBsD;+jmB%V^{sb zsb*^=k5$;}tDMre?hEwSdG8_+ zh=^ENvsZ}U$#xqd*|h0RiLvi`h3~fyeZ`DnjCZs= zAr~ExGf-`d75*k^H(IJh%6rK$pGrE(*^U5P>MuVf-t*vFTpY9O5Pqr8tS>`}0(yBd zOm}26erwpCh>q8|+mcR+nL`f%)~&3- zgBT^fcg(v4LA8kUNAHH^aaU_)D%(^#`}ovsF|V3ayy7Ngqm>V=H%^CdE~T_!>OG^9BI%Dz8*9-D>v`Qa=$)`4vGU9Sg? zW5M$wJYbi8s(yQe#tNavGY~7k-kryb3}LZUwi<&Pwp*g(b>3xLt)ov{T3Y%Ha}g^M zEaDRLW;B*>cSG~4>Pe@^_*x|!n>_T~)^roT_Wi53Vn?k7q$)qJEm#JXh z^D#M^sZk!rY&JV{?Fa;=CjUxTlC);ki_23FMO*O7XX{Lob{xhoyWJDGb7uyTQ&(r~ z^;RI_UGQc-*4R~D0A4%&fi1Y=G8L8D>B*vk^pR;evj~$%HC4}tTTVHV`=SMTdCS9v zNePMEzA2Imoe7z@jg5`j3-5MIXV2^h(aQI3(gzX-QYBi(9Z(BbSK1U#OYX3m!@CkC z6TM-+>yktxzr8+{#5eCA{w?hg9$;{lVFwiQ>y&sb$Jz7l{KbvhO?l#%aX`o|9U?ac zkA9t}y+qY!UZTH81-5!K;GlLGn#=!ZZL|!}NFWCIx6jPXq@M2O@a7W%v3FhR&*Kjp zf-|O^S33lVGM5qZ)P%$fAl8gPiNu@|bYJ3OBs`3ONby;@?cd(KQBQDH4$GKZTs-R+ z3kwU*=*5u|GXTo*1IvTVMkQ}T(B6%xVP;&VebQ0UM@~7POSC-r#lQ5m1IowOC!O0k zc#RykaI3LK4t)%q3ITP+x4IRxXDX|!4FZX{0)sM%7G0!i;qBcJ*)_phqOMncZiiJIa6_l61^eVF6Tj~?gD=Ns% z-ST<>0QqE=ixeLdlO-~Ya)fn-)`5#gYJrT|10%4@y4-R*ZnH(!XJf7j%tcC1-Yt^> zyp!%&&vm*L3JW;0P*iNX$mMs{zWCRcyFCDxGh}w2wo36GD26spCGLm z82LVfKk#%n)krI5YvnQVnt9{F55eSE|a#eBv@hay;Zvf%#Vvz(Rq6`(kSAm$@_1nm7@i)HtZJW^JjJx*#m>j)Hp zk9o-|5@QOp1Y)kDq9TzJR2@{$BunH0e31WJcqad!LewOy!5UBw6pNo1dQu&;x6Y7z zQ`qc$0-tfLbqG&kp!kO?EE!1qi5mC9+-F_`698=`Tj{ zsVS5;^?~<}y7a`}DvV?}C6Jwn^RVjvaV=^wZPUgY4yQA{#Zyq(g@!UH9c_4GaO30b z1}?L$k&WVHeLfRFsX3^(vxr+>Qk!{TF69t{)#iNQb+@#$%6axCtgF5KGDQ#q;Zr|Z zUS9q?PFq|1re`gnPU6Mok~YqP@<%efzotm1p09&a0YJu6>vs8fM{~*{6zEpK49n@g zXyx`kqq~1=h7>=J>tI~x{Y=lN@iQl9b#*W`i(Xj6!=v(4H`RLa*FE=@pBQaLef>aa zR0Oqoij#9N&pgOkTJcoA!oElZqS17ww6s)L@bSk4`vVN=7()#uXJpfx_Nb9!Ns|)nvWh<4;y-0QwTzRuugNB6 zVpoUQTcSAS?zv^OOgmW@*#p{)52OjD7d;q4;(yn`38pH&ZMIfEqiEiiU;;SUv?UCx9%!A*h~(rR4{zx`RnyfDN@9 zHIwzeR04v6f()E#b>JN=#}t6ljpDcu=Uv(4zmytjk^!t|IX5>B^HQ`}oZ*T8Mb(MCS$5MLSDah%O&%uWOdIdHyud>Ty z%%IE?zc#9)U@{_(BsqoLMZDCe-!r>J%_aXpTwG_@*%0M0K^w3Y)H{`xmDSbN^#!TC zzX(`F*|mNM=n%3^=svrXK>4C2YaccY^44Xp|9|?nmkh_ znub)U5JPt)lolw~aJW5-XZB>5ae6pa45aaN=9(m?P0?dxJTLY7!2UW8Pk)h`bubL^ zxY8b%oqB!!D|-+MS795MfU4bUq{7ovQBnqn0D!bBEk32}+#h?m4WGp$uhp0DnrpOt|)MsZev@pYd$oYBz$p}OgF_VjE-Tsv)2l$6L(9B+2Y2a*O zkzpC}b)U}8&3gUXB*(3~I)mvYsrH0OBc;LAlcUAd(9Pvx_HPG9q+~ujFnwqgrocqSO zfr98*^qXm~I^MuXC@e*o9vd={`t@RtlU;Cpa55^9K#xAS6Xvp7h+-w((_)whxFZ5+ z3n+BpI8-98Z-Z_#88~JXnHHf7Dzx0$syUmqf>VeIL*G@Ds!&wbQ0j9i)E(eUI!00@ z7tA!Qj&NH}&SXH=SWl1HCw?Co-#reUMn3vWn_SW14M7oCE@6si2%oKg$hs;k^m$dW zOy~1rGDFlOr6^2|LnQyJ5k5G{gaAojnQ>=&t1j_=&c8FAajA|KfjQj0{`wXas-~vq zSi4^ND2PJIm+UJ`qralpWuuR$KIG|AIGaq#p}A0j;O@DfOl`5~v(pTfPyarF3B>S< zar=H%+#|N9x2-R8CF<(y^RID-dE}*g7p|7ld#v3$+0H;rf23|ih1>2mNcEbs@&7Ys zN2I#%5@L1LjBY>7wwvSWm~VJk*fTY?K;kMaNpl0ZF!e-aXe^HGQ?s znO~C1Yq^FB%UDX?<6Kds;hO!h+$3o@zM@G`_FYOTX6~Nje(^Y1FR%HQ-_(Z>A9P9idBRA1aGbL32DSR(B-?PhVrWi^52B!8?aUE@ zRu&Tzd(%CG_gU;p!q(_eG}3$k9@~0eozsoCLxb({IB&(_j4oF&;8e;BWI)}2p$DCF z8nCtH|LAr4)B=GX)iGjFEsC;#zzamdY?aBc9iO!5*R}NTRHyNK#;YB zT&yAyr$`)na?uK>RcOt_KLW@>V-^5A(yX-;rpCr6`7k1Uxj$=uejXsA0--NDn8yg4 zDp+^f3cS4UkK;tm(DRD+(t!_4DmE$7j;6lSl$I^bsCplK|K{E*7K#0#7$)`J@K71| z8Q200u;7Vez@&WIw~jiKl!Q->wcB)RhiHoWK;Qi}=X=ScqoaV{SEn!}fUsf!<9>(s zENR*al%Rw51fG3Dr{L6l?QfiK{PukveG2MYirCDf7Q3Xv5pB6TT-YOjTo6zbz9$+=N}*eVtncJm48DP@=9 z0fUk^ND@MJS3=3KTwEu6ISP^c!;KxPk7+sJlH#jRykI8Jp8WxCJj9)nOH$mX|EJTr z=_((OTDh_F^*}AK*Yh3im6erMRaHAj z&xCJd<747lBcCdt-{wS_RS%%i6#xCvTA)7&KrYRFRRe^cLH+o49rU)OBvj{l)w+a5 zut_i2CBo|>DDJ)9kzmqumUMs+CiK95fe^jH9N5^SYo z>bKqU`^_1ZqC3xAQ?xKLFYi-bkgVOtcs0Qz(U{#kgdY8_lfH5*M$hybQ*8NZSGdOw zT!~p5hPdvS-q0EX0vG6Xp$OP zVlE>U(aYIM5^#+Wb{w=0^8SEd#rC}Nm~G256l9tWwWH#S zk+dI^z)W!&bk1%^fM5XTGTj*R?^2NZC6D!8K$zGOD+ER=Kq5huaqNFE!B$AK+LD01B5VSGyAYhR_3Z%MX+lgr>yD7BEl*Tu3kWP)#pS>Fe^Z?UM zg0~p^_Y2flFqN7i$+;TX;b2>+*7t^>iy%U40!~lfd*^4{tSspLSRtc-Esv)52#iF) zT04FpsXqXjPjB2Z770^S3_2|YPh(c7NOOD&eGK$cny{qeSwQ=@b+QYLP(^4oIy>94 zC5*8#RfS@x5{r5!@Tbj4yj!4f^kt*-X`@5+JX4T2hD6+C>+}U-6${4w#?`Cx)ayGP zBBaCFXrT5jEapMtB64Dn11`0-Re60UY0@9$OkAwx<0GKt_88@NesdQVZJk+MDQ$h3 zu|MCnWTx4EKbY2!p`eZ}Ii01ubOCtIffcDIK3feJBc}x3`65A}Li1Sy#5q97Z8m?R z=Zww)GX-4;9wX5zSj#e?)S&|prjJ+RZWiIPf+z5eaNM>L&*aYbaK!F2Td9~+mx!kz zfcV-_*LnasS<%CU9c=)tDZKt(SX><%_QW6qRd<#Nf7#fa&z?U|N9QcB>)gMs`F@-yO z+8UqL4jHH&ppGJB8^2h_1|vzs2Eg2I3CG2^MsegTXh-mt_-@X$gwJxkYIsxfV6Rv4 zKVgS09DapU?W#wQ+`$tz)U7eP3UKzu^RtC4i!sA?h{VK1Ym7b6ACZgH6hVCy7oB9- z2~^Mw8#_C{xi2bjqQrYa6OvOgU4MxSoA3l6-snqrb98-ww9JZ)v~vkp<(#?o<8vzr zR4VO8-xx#B=31OsMa>Xr(GkmXC4;T7;j%HQaCmTV4}~ELEd(%1fs|g-cDQ^dlCJ7t z1E_Woky|R4f=Hj9_c_0iP^4~*Q;~H@etv$AdJ@xmJ>as`0D=t^ni+Y=qWH-=zVHp& zuTFBd?u}Mgq##1e*tmd2^^W;)fdMdxHQROKmYr8Qx&FpP@_-wFHDINc6FDjUSgiq$97J_`NK@c~$AFy*7M5xU;b>PE zvD*_Z?l4{j95kE4Yh_2EIrDW34a+RM`Z85O7&GqR>EYpFYHA7?4Oz2-X#d8S#Bxo( zsO5{E%-Xp0i#i%E`I9)zi3NUT2#o7sXZKuHwY{Tb6^Gi47d2~*WXlQsXs-Wwm{g4e z2$Lvj`|Q~>pqlk`b#-B|O}vkZu%4x*<(UDZW|e>s=7IrKYNaP4Kn4QJ!nguHl#?1z z6G%EOEfquICdS8qfB^f;7p)gB?t)DHtnv$r8GW%J%0KB>6Nv%w8%R;5r56_#Xjmnz z`+ur}FoDXX8u}+TgAWS1XM* z+jis~a)|09ueiYS&~7sOhfb^iKz@YEpT+UO7XTRMhzPRRy=e@-tZhgU|IkY8?c814VL@UuFu(_dfs!*c z4Y)f8pph!H3^GRHOm#!HGgSdb@&Z|fT)@d;mRj8K@G!U|Fj4C{1>SFWu?O38x|A7h zSm-yKKH+2`_V#Cq%lsdpvMOhcR!@&N13>^{A#wTcrzs!E*H!?OrXb&%HVe-v8MOn> z`l>;=2e=*flouTFShee-JJy7`%xdIK$#cNVKwQwuAHKqsQ{O$C>rc0n!)-7FP#?~~ z-Z3&Vy1TnGh4V-}823_tNWo#I`quqJ?0UC&m$_fWpr6>K{T$!5x-3n{2>+#OA6&%1=n*zB`lnjlL zyeI3Bze$l*>MrLb*PZTGbf#(-jj_Jhjec_(@hFGqv*q@jK~fElRk%1$L(LaO2SKlY z#Qn@du-qpaWXbymEs%#78k9)pcdtBb6CrD;c-G~l()FVD4UgNov<8Cz($wsTflz+Y@-rU+I$$+qw~ zN^bMKW2nEC8W=J=aN2fh(|UD*4Dt~-H>+1BzZ*hA!pjxERlG(tx%j*v82+m&$9YA) zeQZUV3uP&MOGA$7DXBlzMaE;rqC z2d@|DTqPpGww_?*U!AIKzW(#NK|cSpyBQAodeHaqQv@=(voiTg_K&@kyq7)3E5%az zA&!!@h{3J=JihmNe05fLf~AL0a?&Di0yDQBUo^KiGgGsHfa{30b7QP)q&iOBu5x$S5m(WYQhKqQb zJQ>z-Q}tHd!?-q;Sn&!);-p`F`Rgf z#xV-2#i*xr*D44LO}`U1ldI!8e0&G#mH_92@P{?th*E81a(=#S8!fDkZGSjcQl>I; z>elgTRh!ip7j&Cx$Yy(CR72CH`Z!fxM6LI0MGJF1FHim;?rTMup>vFQlt8thP$+(% zcWA252VOdmY60blC7jzI`zXIZSehn+^I2J82+aOF^!=NV0<52g+&HI4*wFP|mLL3? ztDe!_A-d;f5{#o7ozJ%|ll=#xQjhKNTC^MI9!6KGi%DsAOf~GwpjWn()Z~Xu?P#;% zzGb!_WMAg9KGpJL2`dzZ^IF6lx=0-=2IiklCqLlf>aihQq*S0XHdbP<#D9G#eEnH- z@Nd0!cOjwY3caP)l1<5fuq!WK*3LiQ9)+D}YU!U=3(Pm7`fK#Dd+t`|oo6yoK}7$) zivE|-Aa%J53Ru7DVMPT^>7rY;&2ja4^S@A*Kle?uy}T*W!*sA#>?x``Txcwx3D$AP zEe7?2*-`lF4~FQ1Hg~byEB5xT=lqUAIq=56DG3-#wX@ef&oM^GX7GK&hu|IR4DU2l z(&|4rw*7#E8m-2)kns4cCj>9f(}-N8p?Ieaqo z{rAUSnmcwY7)2MVF7GJ25&|$41{GdVJ@2$#-;^j=`GdmT*5(^gjCwLem}F;${ypTj z;n;Gy^;||42Q?FVR#k2WC6)i|VMT4w86D{P76i0t<^24iUGMGZ0cn2cic-ykM<`a@ zF~D_mVzW7EvpKO`cFF2ALkL~tdH6~~vAw@fM*iw*SNb_=c6a!x@62r7N(cL7cZvAz zc+0%HeuLtfHO8JOLrJT86x{gu$`>!6ulcLCR?I?w48h$GnlL$9y}UF$x_%C%(5+mO?!rSIMFqqacvueG~Ft&0$_8>%?rt!pJcviX!;7A-}FW0 z5*g%`U_#OJqM|a)k?JJheR0~9r|#0DV*O;~qm!bFaLdSi{!V;~**stV4-z45H(M^j zB1XeAvtALNcBAcnM&LxjHlu%y#Bv929exOdKq7e5$I-AvA}-DcD?Qq%gP0hGqh@zA zmr2GZTS;uu-K=_jD}R_tIlJGG_^l(OD7-D(S_SpKNK}^4sphFBQf@n(rA@M|H{lB8 zu88c+{(wn>ryN!VDr8gi>%^u_1XGo*R+KYlPqOyihfQu6>TG%~rOFNHkYO40P#HTY zh2_1anUt^$^X%h5(M-FO7Rh8WKljK=>RNHqmhyp))sH~fq+}Ok-F)J=FRrrxHS30I zBV^CcukiYpLvK*zu&U#5E)$c zwV|6zT5FYmGinbey;_zV*^x~}3zmn-`tp@5a$n=9G;q_`KgZUhklRJs;Q|>X9-FO# zn${AWDRnX1SZ2-1;GbgCbKWM$C+Z!$+a}6ZzS$1k$)AXl%o-JMec1{<3X7~xr&-C1 z)1|%xAFMO{zF8gcyyYwHPJO^?7;)B6>RRU&qBH)IGi)2$ z)U5%l6%d&GBOQ=(jWGKs-71*8)x?;dV77~n`Z6HvNd>u!RF8J(qMfm z=&CM577SH3fDu%SM5+2lXZb@v?e|K}y+;bGP3pxm$tJVCgFqH|8nU#l#;r6Hqloi7 ztvmv@?5*T`@RgqKuM>SDf}aySJbdhl*x{Ig|5Twqog1&TPp4EVT6RM%t1%`=re&fr zT`dbh)lNVm3;P5aq*LvECeBUo*MzwqgT?A@61}{#bJY%Sw4@yLbJg^Bbx-n}IXL_O zRPWiP8V2ZIF6c(pahMt9!9S^=w7tD*vQeYcFaA^1muEbjdOq}W`9}X_iL(ni2b(zA zZE@bV&^<;c%BQtqi?V!9hJ$Khg5KcAWk)*TaQMJ$#y^*#W(vl?3kYtFGIJnn7BfhW zT1ZB=X7Vc$oW^W~Szvyy$%h1y*w-@$xG3Oyyzg}>@|9T{$kv%$te=}yT0GE*N zJv3o{OvL#7C~y%nN<}#%_lM%MBM^U@$G2@>^A623p^*5hr@4@Gb8HjbE&LJg6HFXh4VR2*av zYXkQS@;o0Lx`=e;3#)9s<6=kqnA>s&Kp+pFx-ImeR+yGu5Die-gni5L~D9*ZDb$Ep*z#e(6V zG7!jXCaC1Iyai1``(Xx%4D)TXDpA@+`{po4e- literal 0 HcmV?d00001 diff --git a/tutos/8.0/manual/files/tutorial/tutowidgets/ex2.png b/tutos/8.0/manual/files/tutorial/tutowidgets/ex2.png new file mode 100644 index 0000000000000000000000000000000000000000..931b5f8ea3cf2f5c8ee58fec19bbcf4140de9b74 GIT binary patch literal 15659 zcmeHubySq?xAq_k0uqYSAtE4B(ha_#A}uW~Al=eAsFYF)(%s!X)JuyrL l3^jBN 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 F{{wzO3bFtI literal 0 HcmV?d00001 diff --git a/tutos/8.0/manual/hash-password.wiki b/tutos/8.0/manual/hash-password.wiki new file mode 100644 index 00000000..cf16a095 --- /dev/null +++ b/tutos/8.0/manual/hash-password.wiki @@ -0,0 +1,27 @@ +=Protecting your passwords= + +For protecting the user passwords or other sensitive data, +we can use +[[http://ocaml-safepass.forge.ocamlcore.org/|ocaml-safepass]]. + +We can now write the encrypted password in our database +(using <> +in this example) as follow: +< Ocsipersist.Polymorphic.find table username) + (fun _ -> Lwt.return false) + (function + | Not_found -> + Ocsipersist.Polymorphic.add table username + (Bcrypt.hash password, email) + ~>>= fun () -> + Lwt.return true + | e -> Lwt.fail e + ) +>> diff --git a/tutos/8.0/manual/how-do-i-create-a-cryptographically-safe-identifier.wiki b/tutos/8.0/manual/how-do-i-create-a-cryptographically-safe-identifier.wiki new file mode 100644 index 00000000..c592482a --- /dev/null +++ b/tutos/8.0/manual/how-do-i-create-a-cryptographically-safe-identifier.wiki @@ -0,0 +1,3 @@ +== How do I create a cryptographically safe identifier? == + +<> diff --git a/tutos/8.0/manual/how-does-a-page-s-source-code-look.wiki b/tutos/8.0/manual/how-does-a-page-s-source-code-look.wiki new file mode 100644 index 00000000..c4015085 --- /dev/null +++ b/tutos/8.0/manual/how-does-a-page-s-source-code-look.wiki @@ -0,0 +1,81 @@ +=How does a client-server app source code look like?= + +=== Eliom client-server applications + +Eliom client-server applications are running in your browser for a <> and consist of one or several pages/URLs. +An application has its associated js file, which must have the same name ([[site:manual/how-to-compile-my-ocsigen-pages|generated automatically by the default makefile]] and added automatically by Eliom in the page). + +For example, we define an application called //example//: +<> + +=== Eliom Services + +Pages are generated by //services//. Here is how to define a service: + +<> + +The path is a list of string corresponding to the url. Here, the list is empty because it's the main page. + +If, for example, the list is ["hello";"world"], the page will be accessed using the address: +<> + +More informations about parameters: [[wiki:manual/how-to-use-get-parameters-or-parameters-in-the-url|How to use GET parameters (parameters in the URL)?]] + +Now that our service has been declared, we associate to it an OCaml function that will generate the page. We call this //service registration//. If the service belongs to the application, we use the registrations functions from module {{{Example}}} defined above. + +< + Lwt.return ...) +>> + +The third parameter is the function that will be called to generate the page. +This function takes two parameters, corresponding respectively to GET and POST parameters. Here both are {{{()}}} because the service does not take any parameter. The function returns an element of type html (using Lwt). + + +=== Page Content + +The content of Eliom application pages is made using functions. +The **html function** takes two parameters: +head and body, which are also functions that takes parameters coresponding to their content. + +<> + +Most of the elements functions take a list of other elements as a parameter. + +{{http://public.db0.fr/dev/ocsigen/html.png|ast}} + +Validity of HTML is checked at compile time, which means that a program +that may generate a page that does not respect the recommendations of the +W3C will be rejected at compile time. + +=== Download full code + +//Warning: This third party code may be outdated. Please notify the author is something is broken, or do a pull request on github.// + +* [[https://github.com/db0company/Ocsigen-Quick-Howto/blob/master/page/example.eliom|Read the full code]] +* [[https://github.com/db0company/Ocsigen-Quick-Howto|Download and try this example]] + + +=== Links + +* <> +* <> diff --git a/tutos/8.0/manual/how-to-add-a-div.wiki b/tutos/8.0/manual/how-to-add-a-div.wiki new file mode 100644 index 00000000..b97d53da --- /dev/null +++ b/tutos/8.0/manual/how-to-add-a-div.wiki @@ -0,0 +1,25 @@ +=How to add a div?= + +<> + +**Required parameter**: list containing other elements +(Details of available elements in type +<>). + +**Optional parameter** for attributes "a" ([[wiki:manual/how-to-set-and-id-classes-or-other-attributes-to-html-elements|How to set and id, classes or other attributes to HTML elements?]]). + +=== Download full code + +//Warning: This third party code may be outdated. Please notify the author is something is broken, or do a pull request on github.// + +* [[https://github.com/db0company/Ocsigen-Quick-Howto/blob/master/elements/example.eliom|Read the full code]] +* [[https://github.com/db0company/Ocsigen-Quick-Howto|Download and try this example]] + +=== Links + +* Modules <> and + <> + (HTML5 Elements) +* signature <> (Element attributes) diff --git a/tutos/8.0/manual/how-to-add-a-favicon.wiki b/tutos/8.0/manual/how-to-add-a-favicon.wiki new file mode 100644 index 00000000..f8f76df9 --- /dev/null +++ b/tutos/8.0/manual/how-to-add-a-favicon.wiki @@ -0,0 +1,16 @@ +=How to add a Favicon?= + +A favicon is a file of type "ico" which contain a picture of size 16x16px. It is the picture that you can ususally see next to the title of the page on a browser. + +{{http://public.db0.fr/dev/ocsigen/favicon.png|favicon for Ocsigen.org}} + +By default, all browsers look for a file {{{favicon.ico}}} +at the root of the website: +<> + +Just put the file at the root of the static directory set in the configuration file. + +=== Links + +* <> +* [[http://www.favicon.cc/|An example of a favicon generator]] diff --git a/tutos/8.0/manual/how-to-add-a-javascript-script.wiki b/tutos/8.0/manual/how-to-add-a-javascript-script.wiki new file mode 100644 index 00000000..18592dd7 --- /dev/null +++ b/tutos/8.0/manual/how-to-add-a-javascript-script.wiki @@ -0,0 +1,30 @@ +=How to add a Javacript script?= + +If you have client-side programs on your website, you can use Eliom's client-server features, that will compile client side parts to JS using **Ocsigen Js_of_ocaml**, and include automatically the script in the page. But in some cases you may also want to include yourselves external JS scripts. + +=== Include the script on the html header + +Javascript scripts are included in the header using the **js_script** function (defined in <>). + +<> +This function has 2 parameters: the file path and unit. + +The file path is generated using the **make_uri** function (from <> module). This function creates the relative URL string using the static directory (which is a service) configured in the configuration file and the given list. + +Insert this piece of code on the list given in parameter to the **head** function. + +Or you can use: +<> + +=== Call an external function + +Have a look at +<> +to understand how to call JS function from your OCaml program. diff --git a/tutos/8.0/manual/how-to-add-a-list.wiki b/tutos/8.0/manual/how-to-add-a-list.wiki new file mode 100644 index 00000000..82ab452d --- /dev/null +++ b/tutos/8.0/manual/how-to-add-a-list.wiki @@ -0,0 +1,70 @@ +=How to add lists in a page?= + +==== Simple list and ordered list + +===== Simple list + +<> + + +===== Ordered list + +<> + +**Required parameter**: list containing **li** elements ([[site:tyxml/api/Html_types#TYPEli_attrib|Details of li content]]). + +**Optional parameter** for attributes "a" ([[wiki:manual/how-to-set-and-id-classes-or-other-attributes-to-html-elements|How to set and id, classes or other attributes to HTML elements?]]). + +==== Definition list + +<> + +This kind of list contains definitions. + +**Required parameter**: +A list of pair of: +* A pair containing: +** The first element of type dt +** A list of elements of type dt +* Another pair containing: +** The first element of type dd +** A list of elements of type dd + +Details: +* [[site:tyxml/api/Html_types#TYPEphrasing|dd content]] +* [[site:tyxml/api/Html_types#TYPEflow5|dt content]] + +**Optional parameter** for attributes "a" ([[wiki:manual/how-to-set-and-id-classes-or-other-attributes-to-html-elements|How to set and id, classes or other attributes to HTML elements?]]). + +=== Download full code + +//Warning: This third party code may be outdated. Please notify the author is something is broken, or do a pull request on github.// + +* [[https://github.com/db0company/Ocsigen-Quick-Howto/blob/master/elements/example.eliom|Read the full code]] +* [[https://github.com/db0company/Ocsigen-Quick-Howto|Download and try this example]] + +=== Links + +* Modules <> and + <> + (HTML5 Elements) +* signature <> (Element attributes) diff --git a/tutos/8.0/manual/how-to-add-a-select-or-other-form-element.wiki b/tutos/8.0/manual/how-to-add-a-select-or-other-form-element.wiki new file mode 100644 index 00000000..1587abf9 --- /dev/null +++ b/tutos/8.0/manual/how-to-add-a-select-or-other-form-element.wiki @@ -0,0 +1,42 @@ +=How to add a select (or other form element)?= + +=== In forms towards Eliom services: + +<> + +=== Basic HTML5 elements without Eliom services +For example if you want to use them with client side event handler. + +<> + + +=== Links + +* [[wiki:manual/how-to-write-forms|How to write forms]] +* <> +* API + <> +* signature <> (Element attributes) diff --git a/tutos/8.0/manual/how-to-add-an-image.wiki b/tutos/8.0/manual/how-to-add-an-image.wiki new file mode 100644 index 00000000..8c7144c1 --- /dev/null +++ b/tutos/8.0/manual/how-to-add-an-image.wiki @@ -0,0 +1,46 @@ +=How to add an image?= + +#### Internal image + +<> + +#### External image + +<> + + +The function **img** has 3 parameters: +* **alt**: A description of the image +* **src**: the URL of the image +* unit + +For an internal image, the file path is generated using the **make_uri** function. This function creates the relative URL string using the static directory configured in the configuration file and the given list. + +For an external image, you must convert the string url into uri using the **uri_of_string** function. You can also create an <>. + +=== Download full code + +//Warning: This third party code may be outdated. Please notify the author is something is broken, or do a pull request on github.// + +* [[https://github.com/db0company/Ocsigen-Quick-Howto/blob/master/elements/example.eliom|Read the full code]] +* [[https://github.com/db0company/Ocsigen-Quick-Howto|Download and try this example]] + +=== Links + +* Modules <> and + <> + (HTML5 Elements) +* The <> element +* [[http://en.wikipedia.org/wiki/Alt_attribute|Alt attribute]] +* signature <> (Element attributes) diff --git a/tutos/8.0/manual/how-to-add-css-stylesheet.wiki b/tutos/8.0/manual/how-to-add-css-stylesheet.wiki new file mode 100644 index 00000000..0a8b9741 --- /dev/null +++ b/tutos/8.0/manual/how-to-add-css-stylesheet.wiki @@ -0,0 +1,45 @@ +=How to add a CSS stylesheet?= + +//Warning: css_link and make_uri come from Eliom_content.Html.D module. This module is opened for each piece of code// + +CSS stylesheet are included in the header using the **css_link** function. + +<> +This function has 2 parameters: the file path and unit. + +The file path is generated using the **make_uri** function. This function creates the relative URL string using the static directory configured in the configuration file and the given list. + +=== Where? + +Insert this piece of code on the list given in parameter to the **head** function: + +<> + +Or you can use: +<> + + + +=== Download full code + +//Warning: This third party code may be outdated. Please notify the author is something is broken, or do a pull request on github.// + +* [[https://github.com/db0company/Ocsigen-Quick-Howto/blob/master/css/example.eliom|Read the full code]] +* [[https://github.com/db0company/Ocsigen-Quick-Howto|Download and try this example]] + +=== Links + +* <> +* <> +* <> diff --git a/tutos/8.0/manual/how-to-attach-ocaml-values-to-dom-elements.wiki b/tutos/8.0/manual/how-to-attach-ocaml-values-to-dom-elements.wiki new file mode 100644 index 00000000..797c11d2 --- /dev/null +++ b/tutos/8.0/manual/how-to-attach-ocaml-values-to-dom-elements.wiki @@ -0,0 +1,14 @@ +=How to attach OCaml values to DOM elements?= + +It is often convenient to attach OCaml values to certain elements of +the page. There are several ways to achieve this. + +* The first possibility is to use DATA attributes (for example if the + page is generated on server side). +* Alternatively, you can add a new property to the element using the + {{{##.}}} syntax. + ** You can create a new class type with the new property + (that can be either an OCaml value or a JS value), possibly + inheriting from the type of the DOM element, and create an + (unsafe) coercion function for this type; or simply + ** Create getter and setter functions to add the new property. diff --git a/tutos/8.0/manual/how-to-attach-ocaml-values-to-the-html-nodes-sent-to-the-client.wiki b/tutos/8.0/manual/how-to-attach-ocaml-values-to-the-html-nodes-sent-to-the-client.wiki new file mode 100644 index 00000000..f8c82a92 --- /dev/null +++ b/tutos/8.0/manual/how-to-attach-ocaml-values-to-the-html-nodes-sent-to-the-client.wiki @@ -0,0 +1,3 @@ +== How to attach OCaml values to the HTML nodes sent to the client? + +Use module <>. diff --git a/tutos/8.0/manual/how-to-build-js-object.wiki b/tutos/8.0/manual/how-to-build-js-object.wiki new file mode 100644 index 00000000..8b230a93 --- /dev/null +++ b/tutos/8.0/manual/how-to-build-js-object.wiki @@ -0,0 +1,13 @@ +=How to build js object?= + +Use syntax {{{new%js}}}: + +Example: + +<> + +More details in documentation: [[site:js_of_ocaml/api/Js#2_Objectconstructors|Js object constructor]] diff --git a/tutos/8.0/manual/how-to-call-a-server-side-function-from-client-side.wiki b/tutos/8.0/manual/how-to-call-a-server-side-function-from-client-side.wiki new file mode 100644 index 00000000..62365e0f --- /dev/null +++ b/tutos/8.0/manual/how-to-call-a-server-side-function-from-client-side.wiki @@ -0,0 +1,36 @@ +=How to call a server-side function from client-side?= + +It is possible to call server-side functions in client-side. +For security reasons, these functions must first +be declared explicitely as RPCs (with the type of their +argument). + +<> +<> + +The syntax is provided by opam package {{{ocsigen-ppx-rpc}}}. + +The server-side function ({{{f}}} in the example) needs to return a +Lwt value. + +Server functions are just syntactic sugar for pathless services +returning OCaml values. + +Note that you need to install {{{ppx_deriving}}}, and load our JSON +{{{ppx_deriving}}} plugin in your project. The plugin is available as +the Ocamlfind package {{{js_of_ocaml.deriving.ppx}}}. + +If the function takes a more complex type, this type must have been +declared with {{{ppx_deriving}}}. For example, + +<> + +Our infrastructure provides server-side data validation of the data +sent, and prevents malformed data from crashing the server. diff --git a/tutos/8.0/manual/how-to-call-an-ocaml-function-from-js-code.wiki b/tutos/8.0/manual/how-to-call-an-ocaml-function-from-js-code.wiki new file mode 100644 index 00000000..8913b536 --- /dev/null +++ b/tutos/8.0/manual/how-to-call-an-ocaml-function-from-js-code.wiki @@ -0,0 +1,3 @@ +=How to call an OCaml function from JS code?= + +Have a look at function [[site:js_of_ocaml/api/Js#VALwrap_callback|Js.wrap_callback]] diff --git a/tutos/8.0/manual/how-to-compile-my-ocsigen-pages.wiki b/tutos/8.0/manual/how-to-compile-my-ocsigen-pages.wiki new file mode 100644 index 00000000..65485504 --- /dev/null +++ b/tutos/8.0/manual/how-to-compile-my-ocsigen-pages.wiki @@ -0,0 +1,41 @@ +=How to compile my Ocsigen pages?= + +=== Eliom distillery + +Eliom-distillery will help you to build your client-server application +using Eliom. +It comes with several templates ("client-server.basic", "os.pgocaml", +and more to come ...). + +{{{ +$ eliom-distillery -name -template client-server.basic [-target-directory

] +}}} + +Eliom distillery will also create a default configuration file for Ocsigen +Server. + +More information on Eliom distillery in +<>. + +More information on how client-server Eliom project are compiled on +<>. + +If you don't need client-server features, the compilation process is very +simple and without surprise. Compile with {{{ocamlc}}} or {{{ocamlopt}}} +using {{{ocamlfind}}}, with package {{{eliom.server}}}. +You will have to create your configuration file manually. +But you can still use Eliom distillery, which will make easier the inclusion +of client side features, later. + + +=== Compilation details + +* **eliomdep** helps you handle dependencies of eliom files +* **eliomc** compile server-side eliom files (and ml files too) +* **js_of_eliom** compile client-side eliom files + +Read manuals for mor information about these compilers. + +=== Links + +* <> diff --git a/tutos/8.0/manual/how-to-configure-and-launch-the-ocsigen-server.wiki b/tutos/8.0/manual/how-to-configure-and-launch-the-ocsigen-server.wiki new file mode 100644 index 00000000..84ae6fca --- /dev/null +++ b/tutos/8.0/manual/how-to-configure-and-launch-the-ocsigen-server.wiki @@ -0,0 +1,23 @@ +=How to configure and launch the Ocsigen Server?= + +=== Default configuration file + +* Eliom distillery is generating a configuration file +* If you want to create it yourself, you can have a look at the default configuration file provided with the installation of Ocsigen (usually {{{/etc/ocsigenserver/ocsigenserver.conf.sample}}}). +* Change the port by the network port number you want your website to work on. The port **80** is the port used by http by default but you need to be the administrator of your server to use it. +* Adapt paths. +* Change other parameters that suit your needs using the <>. + +=== Your own configuration file + +Have a look at the <>. + +=== Launch the server + +<> + +=== Links + +* More information about this command or the configuration file in <>. diff --git a/tutos/8.0/manual/how-to-create-form-wizard-sequence-of-pages-depending-on-data-entered-on-previous-ones.wiki b/tutos/8.0/manual/how-to-create-form-wizard-sequence-of-pages-depending-on-data-entered-on-previous-ones.wiki new file mode 100644 index 00000000..617ae882 --- /dev/null +++ b/tutos/8.0/manual/how-to-create-form-wizard-sequence-of-pages-depending-on-data-entered-on-previous-ones.wiki @@ -0,0 +1,88 @@ +=How to create a form wizard (sequence of pages depending on data entered on previous ones)?= + +The solution to implement wizard-like forms (that is a sequence of pages +depending on data entered on previous ones) is to create dynamically new +services especially for one user. If you use session data (eliom references) +it won't work if you have several tabs on the same site (or if you use the +back button). + +Just create new anonymous (attached)-coservices that depend on the data sent +by the user. In the following example (taken from Eliom's testsuite), I create +a two step wizard that will add two integers. You can try to enter a first +value, duplicate the tab, and both will continue working correctly. + +To prevent memory leaks, use a timeout for these dynamic coservices. +The scope of these service can be session or global for the site (as coservice +identifiers are cryptographically safe). + +< + [p [txt (is^" + "); + Form.input ~input_type:`Text ~name:entier Form.int; + br (); + Form.input ~input_type:`Submit ~value:"Sum" Form.string]]) + in + let is = string_of_int i in + let calc_result = + Eliom_registration.Html.attach_get + ~scope:Eliom_common.default_session_scope + ~fallback:calc + ~get_params:(Eliom_parameter.int "j") + ~timeout:120. + (fun j () -> + let js = string_of_int j in + let ijs = string_of_int (i+j) in + Lwt.return (html + (head (title (txt "")) []) + (body [p [txt (is^" + "^js^" = "^ijs)]]))) + in + let f = Form.get_form calc_result (create_form is) in + Lwt.return (html (head (title (txt "")) []) (body [f])) + + +(* -------------------------------------------------------- *) +(* Registration of main services: *) + +let () = + Eliom_registration.Html.register calc calc_handler; + Eliom_registration.Html.register calc_i calc_i_handler +>> diff --git a/tutos/8.0/manual/how-to-create-link-to-a-current-page-without-knowing-its-url.wiki b/tutos/8.0/manual/how-to-create-link-to-a-current-page-without-knowing-its-url.wiki new file mode 100644 index 00000000..69e2973d --- /dev/null +++ b/tutos/8.0/manual/how-to-create-link-to-a-current-page-without-knowing-its-url.wiki @@ -0,0 +1,11 @@ +=How to create a link to the current page (without knowing its URL)?= + +Void coservices are here for that: +<> + +More information in +<>, and API documentation of +<>. diff --git a/tutos/8.0/manual/how-to-detect-channel-disconnection.wiki b/tutos/8.0/manual/how-to-detect-channel-disconnection.wiki new file mode 100644 index 00000000..638a5ae6 --- /dev/null +++ b/tutos/8.0/manual/how-to-detect-channel-disconnection.wiki @@ -0,0 +1,55 @@ +=How to detect channel disconnection + +==Question + + Is there a way to detect that some Eliom_comet channel became + disconnected? I would like to warn the user if the server becomes + unreachable. + +==Answer + +If you are using Ocsigen-start, you probably have nothing to do. +Ocsigen-start will monitor the life of sessions and close the process +when needed. + +If you are not using Ocsigen-start, you must catch exceptions +{{{Eliom_comet.Channel_full}}}, +{{{Eliom_comet.Channel_closed}}} (and {{{Eliom_comet.Process_closed}}} +on Eliom < 5). Have a look at module {{{Os_comet}}} in +Ocsigen-start. + +//explanation pasted from Ocsigen mailing list, 2014-08-06:// + +I assume that you want to know that from client side (It is also +possible to know that on server side). +Since there are quite a lot of different kind of channels, there are +different variations of 'disconnected' for them. You receive this +information through an exception when you try to read from the +Lwt_stream. The different exceptions you have to handle depending on the +case are: + +;{{{Eliom_comet.Channel_full}}} +:For global channel. Those are never closed on server side and are not attached to a particular session. The server maintain a limited buffer of previous values to avoid memory leak. If a client reconnects to the network and too many messages have been sent to the channel, since its last update, he will receive that exception. +;{{{Eliom_comet.Process_closed}}} (Eliom < 5) +:For a channel associated to a client process. If the process is explicitely closed on the server, the server is rebooted, it timeouted, ... +;{{{Eliom_comet.Channel_closed}}} +:The channel was not maintained alive on the server (garbage collected). + +Usualy it is just simpler to not distinguish and just catch on all those +exception and consider their meaning to be 'disconnected'. + +To handle that reliably, you must be careful: an Lwt_stream raises an +exception only once. One way to ensure that you can't miss an exception +is to map your channel through Lwt_stream.map_exn and handle the +exceptions at that point. + +Depending on your case the strategies I would recommend would be either: +* If you maintain a global state between the client and the server, it +is usualy easier to rebuild it from scratch than to rebuild only the +missing parts: i.e. the braindead/failure proof solution is to reload +the complete contents +{{{(Eliom_client.exit_to ~service.Eliom_service.reload_action () ())}}}. +* If you only want to follow a stream of events and missing a few in the +middle isn't a problem, you can just provides a Caml service that sends +a channel, and when your channel disconnects, you just fetch a new one. +(You may have to use Lwt_stream.concat to do the plumbing) diff --git a/tutos/8.0/manual/how-to-detect-on-client-side-that-the-server-side-state-for-the-process-is-closed.wiki b/tutos/8.0/manual/how-to-detect-on-client-side-that-the-server-side-state-for-the-process-is-closed.wiki new file mode 100644 index 00000000..d2dde172 --- /dev/null +++ b/tutos/8.0/manual/how-to-detect-on-client-side-that-the-server-side-state-for-the-process-is-closed.wiki @@ -0,0 +1,13 @@ += How to detect on client side that the server side state for the process is closed? = + +If you are using Ocsigen-start, you probably have nothing to do. +Ocsigen-start will monitor the life of sessions and close the process +when needed. + +If you are not using Ocsigen-start, you must catch exceptions +{{{Eliom_comet.Channel_full}}}, +{{{Eliom_comet.Channel_closed}}} (and {{{Eliom_comet.Process_closed}}} +on Eliom < 5). +For example, you can use a channel with a different client-process scope +to warn client processes that the session is closed. +Have a look at module {{{Os_comet}}} in Ocsigen-start. diff --git a/tutos/8.0/manual/how-to-do-links-to-other-pages.wiki b/tutos/8.0/manual/how-to-do-links-to-other-pages.wiki new file mode 100644 index 00000000..1f220a7d --- /dev/null +++ b/tutos/8.0/manual/how-to-do-links-to-other-pages.wiki @@ -0,0 +1,28 @@ +=How to do links to other pages?= + +Examples: + +<> diff --git a/tutos/8.0/manual/how-to-implement-a-notification-system.wiki b/tutos/8.0/manual/how-to-implement-a-notification-system.wiki new file mode 100644 index 00000000..31e4ee08 --- /dev/null +++ b/tutos/8.0/manual/how-to-implement-a-notification-system.wiki @@ -0,0 +1,110 @@ +=How to implement a notification system?= + +The easiest way for the server to send notifications to the client is +to use module <> from +Ocsigen-start (OS), but it requires to use OS's user management +system. If you are not using OS, we recommend to get inspiration from +the code of this module, to implement your notification system +conveniently and without memory leak. + +== With {{{Os_notif}}} + +For each type of data on which you want to receive updates, +instanciate functor {{{Os_notif.Make_Simple}}} on server side: + +<> + +To declare that you are listening on one piece of data {{{i}}}, +call {{{My_notif.listen i}}}. + +To notify all the clients listening on data {{{i}}}, +call {{{My_notif.notify i (fun userid_o -> Lwt.return (Some notif))}}}. +{{{userid_o}}} is the id of the user who will be notified, +if he is connected ({{{None}}} otherwise). +This make possible to customize the notifications. +Return {{{None}}} if you don't want him to be notified. + +For more information, have a look at +<>. + + + +== Without {{{Os_notif}}} (manual implementation) + +If you want the user to receive notifications from the server +(for example: "you have a new message"), first create a channel, and +register it in an Eliom reference of scope {{{`Client_process}}}: +< + let (s, notify) = Lwt_stream.create () in + let c = Eliom_comet.Channel.create s in + (c, notify) + ) +>> + +On client side, listen on this channel. To do that, execute this code +(on server side) during the service that will start the client process: +< + Lwt_stream.iter_s + (fun v -> (* do something *)) + ~%channel) + : unit) + ] +in +... +>> + +And call function {{{notify}}} on the channel (from server side) +when you want to notify the client. + +To get back the {{{notify}}} functions for one user, you may want to +[[how-to-iterate-on-all-sessions-for-one-user-or-all-tabs|iterate on all client process states]]. +To do that, create a session group for each user +(see [[how-to-register-session-data|How to register session data]]). +Here we suppose that the session group name is the user_id, as a string. +Then iterate on all sessions from this group, and on all client processes +for each session. + +For example: + +< + (* We iterate on all client process states in the session: *) + Eliom_state.Ext.iter_volatile_sub_states + ~state + (fun state -> + let (_, notify) = Eliom_reference.Volatile.Ext.get state channel_ref in + notify (Some v))) + +>> + +//Warning:// If you do not call the iterators during + a request or during the initialisation phase of the Eliom module, + you must provide the extra parameter {{{?sitedata}}}, + that you can get by calling {{{Eliom_request_info.get_sitedata}}} + during the initialisation phase of the Eliom module. + +Have a look at the implementation of {{{Os_notif}}} for more details. diff --git a/tutos/8.0/manual/how-to-insert-raw-form-elements-not-belonging-to-a-form-towards-a-service.wiki b/tutos/8.0/manual/how-to-insert-raw-form-elements-not-belonging-to-a-form-towards-a-service.wiki new file mode 100644 index 00000000..83848a48 --- /dev/null +++ b/tutos/8.0/manual/how-to-insert-raw-form-elements-not-belonging-to-a-form-towards-a-service.wiki @@ -0,0 +1,20 @@ +=How to insert "raw" form elements (not belonging to a form towards a service)?= + +Eliom redefines most forms elements (inputs, textareas, checkboxes, etc.) +to make possible to check the type of the form w.r.t. the type of the service. + +If you don't want that (for example if you want to use it only from a client side program), +you can use "raw form elements" (that is, basic tyxml elements), using +module [[wiki("eliom"):api/server/Eliom_content.Html.D.Raw|{{{Eliom_content.Html.D.Raw}}}]] +(or [[wiki("eliom"):api/server/Eliom_content.Html.F.Raw|{{{Eliom_content.Html.F.Raw}}}]]). + +Example: + +<> diff --git a/tutos/8.0/manual/how-to-iterate-on-all-sessions-for-one-user-or-all-tabs.wiki b/tutos/8.0/manual/how-to-iterate-on-all-sessions-for-one-user-or-all-tabs.wiki new file mode 100644 index 00000000..be9755d0 --- /dev/null +++ b/tutos/8.0/manual/how-to-iterate-on-all-sessions-for-one-user-or-all-tabs.wiki @@ -0,0 +1,25 @@ +=How to iterate on all session belonging to the same user, or all tabs?= + +You must create a session group for each user, then iterate on all +the sessions from this group, and possibly on all client processes +for each session: + +< + (* We iterate on all client process states in the session: *) + Eliom_state.Ext.iter_volatile_sub_states + ~state + (fun state -> + let a = Eliom_reference.Volatile.Ext.get state my_ref in + ...))) +>> diff --git a/tutos/8.0/manual/how-to-know-whether-the-browser-window-has-the-focus-or-not.wiki b/tutos/8.0/manual/how-to-know-whether-the-browser-window-has-the-focus-or-not.wiki new file mode 100644 index 00000000..f8383288 --- /dev/null +++ b/tutos/8.0/manual/how-to-know-whether-the-browser-window-has-the-focus-or-not.wiki @@ -0,0 +1,16 @@ +=How to know whether the browser window has the focus or not?= + +Example: + +< focuses (Js.Unsafe.coerce (Dom_html.window)) + (fun _ _ -> has_focus := true; Lwt.return ())); + async (fun () -> blurs (Js.Unsafe.coerce (Dom_html.window)) + (fun _ _ -> has_focus := false; Lwt.return ())); + +>> diff --git a/tutos/8.0/manual/how-to-make-hello-world-in-ocsigen.wiki b/tutos/8.0/manual/how-to-make-hello-world-in-ocsigen.wiki new file mode 100644 index 00000000..1522d87e --- /dev/null +++ b/tutos/8.0/manual/how-to-make-hello-world-in-ocsigen.wiki @@ -0,0 +1,56 @@ +=How to make a "hello world" in Ocsigen?= + +Here it is! The famous "**Hello World**" for a client/server Eliom application: + +=== + +< + Lwt.return + (html + (head (title (txt "Hello World of Ocsigen")) []) + (body [h1 [txt "Hello World!"]; + p [txt "Welcome to my first Ocsigen website."]]))) + +>> + +=== + +* To //understand// this code, have a look at +[[wiki:manual/how-does-a-page-s-source-code-look|How does a page's source code look?]] +* Or directly continue by compiling this code: +[[wiki:manual/how-to-compile-my-ocsigen-pages|How to compile my Ocsigen pages?]] + +<<| +=== Download full code + +//Warning: This third party code may be outdated. Please notify the author is something is broken, or do a pull request on github.// + +* [[https://github.com/db0company/Ocsigen-Quick-Howto/blob/master/page/example.eliom|Read the full code]] +* [[https://github.com/db0company/Ocsigen-Quick-Howto|Download and try this example]] +>> + +=== Links + +* [[wiki:manual/application|Tutorial to write a client/server application]] +* [[wiki:manual/interaction|Tutorial to write a server side web site]] diff --git a/tutos/8.0/manual/how-to-make-page-a-skeleton.wiki b/tutos/8.0/manual/how-to-make-page-a-skeleton.wiki new file mode 100644 index 00000000..66904bcc --- /dev/null +++ b/tutos/8.0/manual/how-to-make-page-a-skeleton.wiki @@ -0,0 +1,46 @@ +=How to make a page skeleton?= + +=== The same header for all your pages + +When your site will grow, you will have several different services for pages which will often contain the same header informations. + +A great solutions to avoid code copy-pasting of these recurrent informations are to make a page skeleton function: + +<> + +So when you define your pages, you just call this skeleton with the content of the page as an argument: + +< skeleton [p [txt "Hello World!"]]) +>> + + +This method can also be adapted to add elements on all your pages, like a header, a footer and a menu. + +Module <> has a predefined function +for this: + +<> + +<<|The following example is more complete. + + +=== Download full code + +//Warning: This third party code may be outdated. Please notify the author is something is broken, or do a pull request on github.// + +* [[https://github.com/db0company/Ocsigen-Quick-Howto/blob/master/skeleton/example.eliom|Read the full code]] +* [[https://github.com/db0company/Ocsigen-Quick-Howto|Download and try this example]] +>> \ No newline at end of file diff --git a/tutos/8.0/manual/how-to-make-responsive-css.wiki b/tutos/8.0/manual/how-to-make-responsive-css.wiki new file mode 100644 index 00000000..6e0afe41 --- /dev/null +++ b/tutos/8.0/manual/how-to-make-responsive-css.wiki @@ -0,0 +1,13 @@ +=How to make reponsive CSS with ocsigen?= + +The best way to do that is to make one general css sheet plus three css sheets, small, medium and large screen using media queries, a feature introduced in CSS3. + +Write theses lines in your css sheets: + +<> + +You can find more informations about making responsive websites with media queries on [[http://www.w3schools.com/css/css_rwd_mediaqueries.asp|W3schools.com]] diff --git a/tutos/8.0/manual/how-to-make-the-client-side-program-get-an-html-element-from-the-server-and-insert-it-in-the-page.wiki b/tutos/8.0/manual/how-to-make-the-client-side-program-get-an-html-element-from-the-server-and-insert-it-in-the-page.wiki new file mode 100644 index 00000000..0a6bd41b --- /dev/null +++ b/tutos/8.0/manual/how-to-make-the-client-side-program-get-an-html-element-from-the-server-and-insert-it-in-the-page.wiki @@ -0,0 +1,30 @@ +=How to make the client side program get an HTML element from the server and insert it in the page?= + +A very convenient way to do that is to use RPCs : + +<> +<> + +Server functions take exactly one parameter. + +RPCs are just syntactic sugar for pathless services +returning OCaml values. + +The type of the function parameter must have been declared with the +JSON module of {{{ppx_deriving}}} (which needs to be manually +installed). This enables server-side data validation. + +example: + +<> diff --git a/tutos/8.0/manual/how-to-register-a-service-that-decides-itself-what-to-send.wiki b/tutos/8.0/manual/how-to-register-a-service-that-decides-itself-what-to-send.wiki new file mode 100644 index 00000000..88547879 --- /dev/null +++ b/tutos/8.0/manual/how-to-register-a-service-that-decides-itself-what-to-send.wiki @@ -0,0 +1,21 @@ +=How to register a service that decides itself what to send?= + +Use <>. + +In the following example, we send an Html page or a redirection: + +< + if s = "toto" + then + Eliom_registration.Html.send + (html + (head (title (txt "")) []) + (body [p [txt "Hello."]])) + else + Eliom_registration.Redirection.send other_service) +>> diff --git a/tutos/8.0/manual/how-to-register-session-data.wiki b/tutos/8.0/manual/how-to-register-session-data.wiki new file mode 100644 index 00000000..1f19ed9d --- /dev/null +++ b/tutos/8.0/manual/how-to-register-session-data.wiki @@ -0,0 +1,74 @@ +=How to register session data?= + +It is very easy to register session data using //Eliom references//. +Just create an Eliom reference of //scope// session and its value +will be different for each session (one session = one browser process). + +But most of the time, what we want is to store data for one user, +not for one browser instance. To do that, we group all the sessions +for one user together, by creating a group of sessions. +The name of the group may be for example the user id. + +To create a session group, open the session by doing something like: +<> + +If you want to store user data, +just create a global Eliom reference of scope group: +<> + +And during a request, set this reference: +<> + +The value of this reference is different for each user: +<> + +It is possible to create //persistent// Eliom references (see module +<>). + +==Other scopes== +If you want to store server side data for one browser (one session), +use scope {{{Eliom_common.default_session_scope}}}. + +If you want to store server side data for one tab of your browser (one client process), +use scope {{{Eliom_common.default_process_scope}}} (available only if you +have a client-server Eliom application). + +If you want to store server side data during one request, +use scope {{{Eliom_common.request_scope}}}. + +==Persistent references== + +Module +<> +also defines an interface for persistent references, that will survive +if you restart the server. + +==Links + +* <> +* module <> diff --git a/tutos/8.0/manual/how-to-send-a-file-to-server-without-stopping-the-client-process.wiki b/tutos/8.0/manual/how-to-send-a-file-to-server-without-stopping-the-client-process.wiki new file mode 100644 index 00000000..1413a46e --- /dev/null +++ b/tutos/8.0/manual/how-to-send-a-file-to-server-without-stopping-the-client-process.wiki @@ -0,0 +1,48 @@ +=How to send a file to the server without stopping the client process?= + +This requires Eliom ≥ 3.1. + +Due to security reasons, browsers have limitations on sending files. +But if the file is chosen by the user through an input file element, +there is a way to send it to the server. You can't use the {{{server_function}}} +or {{{let%rpc}}} syntax for this, but you can use +{{{Eliom_client.call_caml_service}}}. + +Example: +< + (* get the file ... *) + Lwt.return_unit) + +let%client upload_pic_form () = + let file = D.Raw.input ~a:[a_input_type `File] () in + let submit_elt = D.Raw.input ~a:[a_input_type `Submit; a_value "Send"] () in + (let open Lwt_js_events in + async (fun () -> + clicks (To_dom.of_input submit_elt) (fun _ _ -> + Js.Optdef.case + (To_dom.of_input file)##.files + Lwt.return + (fun files -> + Js.Opt.case + files ## (item 0) + Lwt.return + (fun file -> + Eliom_client.call_ocaml_service ~service:~%pic_service () + file))))); + [txt "Upload a picture:"; file; submit_elt] + +>> diff --git a/tutos/8.0/manual/how-to-send-file-download.wiki b/tutos/8.0/manual/how-to-send-file-download.wiki new file mode 100644 index 00000000..d7df579d --- /dev/null +++ b/tutos/8.0/manual/how-to-send-file-download.wiki @@ -0,0 +1,7 @@ +=How to send a file (download)?= + +To serve file, you can use Ocsigen Server's module staticmod. +But it is also possible to ask Eliom to send files using module +<>, +for example if you want Eliom to perform some privacy checks before sending, +or if the answer is not always a file. \ No newline at end of file diff --git a/tutos/8.0/manual/how-to-send-file-upload.wiki b/tutos/8.0/manual/how-to-send-file-upload.wiki new file mode 100644 index 00000000..f4e57fca --- /dev/null +++ b/tutos/8.0/manual/how-to-send-file-upload.wiki @@ -0,0 +1,63 @@ +=How to send a file (upload)?= + +To upload a file, use {{{Eliom_parameter.file}}} as service parameter type. + +Ocsigen server will save the file at a temporary location and keep it +there during the request. Then the file will be removed. You must +link it somewhere else on the disk yourself if you want to keep it. + +Be careful also to set the right option in Ocsigen server's configuration file. +For example: +< + + /var/www/tmp + 2MB + 100MB + + +>> + +Example with Eliom_content.Html.D module opened: +< + let newname = "/var/www/upload/thefile" in + (try + Unix.unlink newname; + with _ -> ()); + let%lwt () = + Lwt_unix.link (Eliom_request_info.get_tmp_filename file) newname + in + Lwt.return + (html + (head (title (txt "Upload")) []) + (body [h1 [txt "ok"]]))) + + +let uploadform = + Eliom_registration.Html.register ~service:upload + (fun () () -> + let f = + (Form.post_form ~service:upload2 + (fun file -> + [p [Form.file_input ~name:file (); + br (); + Form.input ~input_type:`Submit ~value:"Send" Form.string + ]]) ()) in + Lwt.return + (html + (head (title (txt "form")) []) + (body [f]))) +>> diff --git a/tutos/8.0/manual/how-to-set-and-id-classes-or-other-attributes-to-html-elements.wiki b/tutos/8.0/manual/how-to-set-and-id-classes-or-other-attributes-to-html-elements.wiki new file mode 100644 index 00000000..7bad37ac --- /dev/null +++ b/tutos/8.0/manual/how-to-set-and-id-classes-or-other-attributes-to-html-elements.wiki @@ -0,0 +1,67 @@ +=How to set and id, classes or other attributes to HTML elements?= + +Mandatory element attributes are given as OCaml named parameters to +constructions function. + +Optional element attributes are added using the optional OCaml parameter "**?a**" which is more or less available for every HTML5 elements. This parameter is taking a list of attributes compatible with the element. + +< Dom_html.window##alert(Js.string "hello") }}] + [txt "I'm a div with two classes to describe me (red and shadow), "; + txt "an id to make me unique and an action when you click me."] +>> + +=== Id +The id attribute specifies a unique id for an HTML element (the value must be unique within the HTML document). + +The id attribute is mostly used to set a style in a style sheet for a particular element, and by JavaScript (via the HTML DOM) to manipulate the element with the specific id. With Eliom client-server apps, you do usually not need to set ids manually for that purpose: just use injections ({{{%v}}}) to refer to a node {{{v}}} created on server side. + +Attribute "id" is created by function {{{a_id}}}, taking the value of the attribute as parameter: +<> + +=== Classes +The class attribute specifies one or more classnames for an element. + +The class attribute is mostly used to point to a class in a style sheet. However, it can also be used by a JavaScript (via the HTML DOM) to make changes to HTML elements with a specified class. + +An element can have several classes. Class attribute is +generated by function {{{a_class}}}, that takes a list of strings. +<> + +=== Style + +The style attribute specifies an inline style for an element. The style attribute will override any style set globally, e.g. styles specified in the header of the page. + +Using this attribute to stylish elements is not a good practice. +You should rather use +[[wiki:manual/how-to-add-css-stylesheet|an external CSS file]]. + +Its parameter is a string. +<> + +=== Title + +The title attribute specifies extra information about an element. The information is most often shown as a tooltip text when the mouse moves over the element. + +Its parameter is a string. +<> + +=== Events + +Some attributes allow you to do something when the user do an action. They are many available actions since HTML5. + +Its argument is an Eliom event handler, that is a client-side function +taking the JS event as parameter: +< Dom_html.window##alert(Js.string "hello") }}]>> + +However, we recommend to use <> rather than these elements to set event handlers. + + +=== Links + +* Type <> (attributes available for every element) +* signature <> (Element attributes) +* [[http://www.w3schools.com/html/default.asp|W3Schools HTML5 reference]] +* [[http://www.w3schools.com/html5/html5_ref_eventattributes.asp|Events attributes]] diff --git a/tutos/8.0/manual/how-to-stop-default-behaviour-of-events.wiki b/tutos/8.0/manual/how-to-stop-default-behaviour-of-events.wiki new file mode 100644 index 00000000..11541d96 --- /dev/null +++ b/tutos/8.0/manual/how-to-stop-default-behaviour-of-events.wiki @@ -0,0 +1,21 @@ +=How to stop default behaviour of events?= + +Example: + +< + Lwt_js_events.seq_loop + (Lwt_js_events.make_event event) ~use_capture:true html_elt + (fun ev _ -> Dom.preventDefault ev; Lwt.return ()))) + + +disable_event Dom_html.Event.dragstart Dom_html.document +>> + +* event is a Dom_html.Event\\ +* html_elt is the target + +More details in documentation: [[site:js_of_ocaml/api/Dom#VALpreventDefault|Dom. preventDefault]] diff --git a/tutos/8.0/manual/how-to-use-get-parameters-or-parameters-in-the-url.wiki b/tutos/8.0/manual/how-to-use-get-parameters-or-parameters-in-the-url.wiki new file mode 100644 index 00000000..609916a9 --- /dev/null +++ b/tutos/8.0/manual/how-to-use-get-parameters-or-parameters-in-the-url.wiki @@ -0,0 +1,88 @@ +=How to use GET parameters (parameters in the URL)? + +Pages are generated by services. + +Funcrions to create services using GET HTTP method take +two mandatory parameters: {{{~path}}} and {{{~get_params}}}. + +=== path + +This argument is a **list of string**, corresponding to the URL where your page service can be found. + +For example, if you want your page to be accessed via this URL: +<> +You must provide this path: +<> + +This parameter can also be an **empty list**. It means that the service page will be accessed via this URL: +<> + +=== get_params + +Eliom chooses the service automatically w.r.t. this path and parameter +given (among other criteria). +It decodes parameters automatically and checks their types. + +Description of parameters (names and types) is done using module +<>. +We recommend to open this module (at the beginning of your file, or locally). + +==== Syntax for several parameters + +* **No parameter** +<> + +* **One parameter** +<> + +* **More parameters** +<> + +==== Types of parameters + +* **Common types**: [[https://github.com/db0company/Ocsigen-Quick-Howto/blob/master/parameters/example.eliom#L121|string]], [[https://github.com/db0company/Ocsigen-Quick-Howto/blob/master/parameters/example.eliom#L122|int]], [[https://github.com/db0company/Ocsigen-Quick-Howto/blob/master/parameters/example.eliom#L123|int32]], [[https://github.com/db0company/Ocsigen-Quick-Howto/blob/master/parameters/example.eliom#L124|float]], [[https://github.com/db0company/Ocsigen-Quick-Howto/blob/master/parameters/example.eliom#L125|bool]] +* **Some other types**: [[https://github.com/db0company/Ocsigen-Quick-Howto/blob/master/parameters/example.eliom#L126|optional values]], [[https://github.com/db0company/Ocsigen-Quick-Howto/blob/master/parameters/example.eliom#L158|any parameter]], [[https://github.com/db0company/Ocsigen-Quick-Howto/blob/master/parameters/example.eliom#L187|list]], [[https://github.com/db0company/Ocsigen-Quick-Howto/blob/master/parameters/example.eliom#L211|your own type]]. + +* See more information on parameters in <> and API documentation of module <>. + +==== Get these parameters + +On service registration, parameters can be retrieved as a parameter of the function: +< ...) +>> + +* **No parameter** +< ...)>> + +* **One parameter** +< ...)>> + +* **Several parameters** + +Operator {{{**}}} is left associative: +< ...)>> + +=== Parameters in the path + +Sometimes you may want to take parameters from the path, +for example to improve readability of URLs. E.g. {{{http://blah.com/archive/2014/2/}}} or {{{http://blah.com/user/toto/}}}. + +To do that, add a parameter of type **suffix** in **get_params**: +<> + + +=== Download full code + +//Warning: This third party code may be outdated. Please notify the author is something is broken, or do a pull request on github.// + +* [[https://github.com/db0company/Ocsigen-Quick-Howto/blob/master/parameters/example.eliom|Read the full code]] +* [[https://github.com/db0company/Ocsigen-Quick-Howto|Download and try this example (parameters)]] + +=== Links + +* Manual: <> +* Manual: <> +* API: <> +* API: <> diff --git a/tutos/8.0/manual/how-to-write-a-json-service.wiki b/tutos/8.0/manual/how-to-write-a-json-service.wiki new file mode 100644 index 00000000..87768dd6 --- /dev/null +++ b/tutos/8.0/manual/how-to-write-a-json-service.wiki @@ -0,0 +1,25 @@ +=How to write a JSON service?= + +*If you want to communicate with a client side Eliom program, you do not need to serialize yourself your data to JSON. Serialization/Deserialization of any OCaml type is done automatically by Eliom. Just use OCaml services (or, simpler: server functions and call the function from your OCaml client side program). +*If you want to use your own JSON format, you need to have your own serialisation function to JSON (or for example to use some OCaml library like [[http://mjambon.com/yojson.html|yojson]] to generate JSON). In that case, you can register your service using {{{Eliom_registration.String}}} instead of {{{Eliom_registration.Html}}} (see example below). The handler function must return the JSON value as a string, and a the content-type. +*It is even possible to define yourself your own registration module, to be used instead of {{{Eliom_registration.String}}}. Thus, you can use an OCaml representation of the JSON value (and you don't call the serializer yourself). Have a look on how modules like {{{Eliom_registration.String}}} are implemented to know how to do that. + +< + Lwt.return ("{text:'something'}", "application/json")) + +>> + +**Comments:** \\ +If you want to get result from a Database, it could already be in JSON format. \\ +Anyway, you probably do not need to pretty-print JSON yourself. \\ diff --git a/tutos/8.0/manual/how-to-write-forms.wiki b/tutos/8.0/manual/how-to-write-forms.wiki new file mode 100644 index 00000000..96f4cb83 --- /dev/null +++ b/tutos/8.0/manual/how-to-write-forms.wiki @@ -0,0 +1,110 @@ +=How to write forms?= + +=== To write an HTML form towards an Eliom service + +Just as we do for links, we provide form-building functions that call +Eliom services in a safe manner. These functions are provided in the +module +<> (and +<>). +The functions +<> and +<> +accept a function (named {{{create_form}}} in our example below) +which is responsible for generating the content from +appropriately-typed parameter names. + +Here a complete example. + +< + [p [txt "Write an int: "; + Form.input + ~input_type:`Text ~name:number_name + Form.int; + txt "Write another int: "; + Form.input + ~input_type:`Text ~name:number2_name + Form.int; + txt "Write a string: "; + Form.input ~input_type:`Text ~name:string_name Form.string; + Form.input ~input_type:`Submit ~value:"Click" Form.string]]) + +let%server form_result_service = Eliom_service.create + ~path:(Eliom_service.Path ["form-result"]) + ~meth:(Eliom_service.Get ((int "number_name") ** ((int "number2_name") ** (string "string_name")))) + () + +let%server form_result_handler = + (fun (number_name, (number2_name, string_name)) () -> + Lwt.return ( + (html + (head (title (txt "")) []) + (body [ + p [ + txt "First number: "; + txt (string_of_int number_name); + ]; + p [ + txt "Second number: "; + txt (string_of_int number2_name); + ]; + p [ + txt "String: "; + txt string_name + ] + ])))) + +let%server form_service = Eliom_service.create + ~path:(Eliom_service.Path ["form"]) + ~meth:(Eliom_service.Get unit) + () + +let%server form_handler = + (fun () () -> + let form = Form.get_form ~service:form_result_service create_form in + Lwt.return + (html + (head (title (txt "Form example")) []) + (body [form]))) + +let%server () = + Eliom_registration.Html.register ~service:form_result_service form_result_handler; + Eliom_registration.Html.register ~service:form_service form_handler +>> + +As shown in the example, +<> +provides functions for generating the various widgets, e.g., +<>. +These functions need to be called with a "type" argument (e.g., +<>) +that matches the type of the corresponding parameter name. + +POST forms may also take get parameters, as last argument of function +{{{post_form}}}: + +< + p [txt "Write a string: "; + Form.input ~input_type:`Text ~name:my_string Form.string]) + 222 +>> + +=== Raw forms + +There is also a raw interface to write basic forms without Eliom, +using standard tyxml constructors. + +Use module [[wiki("eliom"):api/server/Eliom_content.Html.D.Raw|Eliom_content.Html.D.Raw]]. + +===Links +* [[wiki:manual/how-to-add-a-select-or-other-form-element|How to write a select (or other form element)?]] diff --git a/tutos/8.0/manual/how-to-write-titles-and-paragraphs.wiki b/tutos/8.0/manual/how-to-write-titles-and-paragraphs.wiki new file mode 100644 index 00000000..b056b7c0 --- /dev/null +++ b/tutos/8.0/manual/how-to-write-titles-and-paragraphs.wiki @@ -0,0 +1,34 @@ +=How to write titles and paragrahs?= + +#### Titles + +<> + +There are 6 types of titles: h1, h2, h3, h4, h5 and h6. h1 is the largest and h6 is the smallest. + +#### Pagragraph + +<> + +**Required parameter**: list containing other elements (content: <> elements). + +**Optional parameter** for attributes "a" ([[wiki:manual/how-to-set-and-id-classes-or-other-attributes-to-html-elements|How to set and id, classes or other attributes to HTML elements?]]). + +=== Download full code + +//Warning: This third party code may be outdated. Please notify the author is something is broken, or do a pull request on github.// + +* [[https://github.com/db0company/Ocsigen-Quick-Howto/blob/master/elements/example.eliom|Read the full code]] +* [[https://github.com/db0company/Ocsigen-Quick-Howto|Download and try this example]] + +=== Links + +* Modules <> and + <> + (HTML5 Elements) +* The <> element +* signature <> (Element attributes) diff --git a/tutos/8.0/manual/html.wiki b/tutos/8.0/manual/html.wiki new file mode 100644 index 00000000..758d8efd --- /dev/null +++ b/tutos/8.0/manual/html.wiki @@ -0,0 +1,157 @@ +<> + +The Tyxml library makes it possible to type-check HTML pages. +This means that your Ocsigen program will never generate pages +which do not follow the recommendations from the W3C. +For example a program that could generate a page with a paragraph +inside another paragraph will be rejected at compile time. + +== Typed HTML + +=== Tags + +Tyxml (or modules obtained by applying Tyxml functor, +like {{{Eliom_content.Html.D}}}) defines a contructor function +for each HTML tag, and for each attribute. + +Example: + +<> + +As tag {{{}}} contains a tag {{{}}} and {{{}}}, +function {{{html}}} takes two parameters: + +< [`Body] elt -> [`Html] elt +>> + +The only way to create a value of type {{{[`Head] elt}}} is to use +function {{{head}}}, +and the only way to create a value of type {{{[`Body] elt}}} is to use +function {{{body}}}. + +As a {{{}}} tag is mandatory inside {{{<head>}}}, +function {{{head}}} takes a {{{[`Title] elt}}} as first argument +(that can be created using function {{{title}}}), +then the list of other children. + +Function {{{txt}}} is used to include raw text. + +=== Error messages + +If you write an invalid page, for example: +<<code language="ocaml"| +(html + (head (title (txt "")) [txt ""]) + (body [txt "Hallo"])) +>> + +You will get an error message similar to the following, referring to +the end of line 2: + +{{{ +Error: This expression has type ([> `TXT ] as 'a) Html.elt + but an expression was expected of type + Html_types.head_content_fun Html.elt + Type 'a is not compatible with type Html_types.head_content_fun = + [ `Base + | `Command + | `Link + | `Meta + | `Noscript of [ `Link | `Meta | `Style ] + | `Script + | `Style ] + The second variant type does not allow tag(s) `TXT +}}} + +where <<a_api project="tyxml" | type Html_types.head_content_fun >> +is the type of content allowed inside {{{<head>}}} ({{{<base>}}}, +{{{<command>}}}, {{{<link>}}}, {{{<meta>}}}, etc.). Notice that +{{{`TXT}}} (i.e. raw text) is not included in this polymorphic +variant type, which means that {{{<head>}}} cannot contain raw text. + +=== Attributes + +Attributes are given to functions using optional argument {{{?a}}}. + +Example: +<<code language="ocaml"| +div ~a:[a_id "the_id"; a_class ["firstclass"; "secondclass"]] + [ txt "blah" ] +>> + +== OCaml node and DOM nodes + +=== Conversions + +Tyxml builds OCaml nodes. If you are using it server side, +they are serialized as an XML text before being sent to the browser. +On client side, if you want to get the DOM node corresponding to +an OCaml node, use functions from module {{{Eliom_content.Html.To_dom}}}, +for example {{{Eliom_content.Html.To_dom.of_element}}}, +or {{{Eliom_content.Html.To_dom.of_input}}}, +{{{Eliom_content.Html.To_dom.of_textarea}}}, etc. + +If the node has been created with {{{Eliom_content.Html.F}}} +(functional nodes), +a new DOM node will be created every time you call such a conversion +function. + +If the node has been created with {{{Eliom_content.Html.D}}}, +the conversion function will return the exact DOM node that exists +in the page (and always the same one). If this "D" node is created +server-side, Eliom will automatically add a identifier in the HTML +page to be able to find it back. + +Example: +<<code language="ocaml"| +[%%shared + open Eliom_content.Html +] + +let%server create_widget () = + let d = D.div [ ... ] in + ignore [%client + Lwt.async (fun () -> + Lwt_js_events.clicks (To_dom.of_element ~%d) (fun _ _ -> ... )) ]; + d +>> + +Here, {{{d}}} must be a "D" node, as I want to bind click events on +the actual node (that is already in the page), not create a new one. + +Remember to use "D" nodes if you want to use it in a injection +({{{~%d}}}). If you don't to bother about "D" or "F" nodes, use "D" +nodes by default (even if it will generate too much identifiers in the page). +But remember that, the DOM semantics implies that "D" nodes cannot be +inserted twice in a page. + + +=== Manip + +Module +<<a_api project="eliom" subproject="client"| module Eliom_content.Html.Manip >> +makes it possible to manipulate OCaml nodes without conversions +(add them in a page, replace a node, add as child of another node, +add a class, etc.). + +=== Reactive nodes + +Module +<<a_api project="eliom" subproject="client"| module Eliom_content.Html.R >> +makes it possible to create reactive nodes, that is, nodes that will +be updated automatically when the data on which they depend change. + +It is based on module [[http://erratique.ch/software/react/doc/React|React]], +which implements functional reactive programming for OCaml. + +== More documentation + +Have a look at <<a_manual project="tyxml" chapter="intro"|Tyxml's manual>> +and <<a_manual project="eliom" chapter="clientserver-html"|Eliom's manual>> +for more documentation about HTML manipulation in OCaml. diff --git a/tutos/8.0/manual/interaction.wiki b/tutos/8.0/manual/interaction.wiki new file mode 100644 index 00000000..103554bd --- /dev/null +++ b/tutos/8.0/manual/interaction.wiki @@ -0,0 +1,1226 @@ +=Implementing Web Interaction Using Eliom= + +//The code of this tutorial has been tested with Eliom 6.0.// \\ + +<<|outline target="documentation">> + +This chapter of the tutorial explains how to create a small web site +with several pages, users, sessions, and other elements of classical +web development. Then, in +<<a_manual project="tuto" chapter="misc" |another tutorial>>, we will incorporate the +features of this site into our Graffiti application, to +demonstrate that we can combine this kind of interaction with client-side +programs. + +We assume you have read at least the first section of the previous +chapter, which explained how to create a service and constuct valid +HTML pages. + +We will create a simple web site with one main page and a page for +each user (assuming we have several users already created). Then we +will add a login/connection form. We will also add a registration +form, in order to learn how to create //dynamically// new services, +and why it is very useful. + +The [[https://github.com/ocsigen/tutorial/tree/master/files/tutorial/chapter2|full code]] +of the program can be downloaded. + +==Services== + +===The main page=== + +Let's start again from scratch with the following site. + +<<code language="ocaml"| + +let main_service = Eliom_content.Html.D.( + Eliom_registration.Html.create + ~path:(Eliom_service.Path [""]) + ~meth:(Eliom_service.Get Eliom_parameter.unit) + (fun () () -> + Lwt.return + (html (head (title (txt "")) []) + (body [h1 [txt "Hello"]]))) +) +>> + +Note that we are using {{{Eliom_registration.Html}}}, as we are not building a +client side program for now. + +For the same reason, you may want to remove the {{{.eliom}}}-file +generated by the distillery and put the code into an +{{{.ml}}}-file. But don't forget to add it to the server files in the +{{{Makefile.options}}}: + +<<code language="makefile"| +SERVER_FILES := tuto.ml +>> + +===Adding a page for each user=== + +<<concepts| + +Services with parameters\\ +Using parts of the path as parameters + +>> + +We will now create a page for each user. To do this, we will create a +new service, taking the user name as parameter: + +<<code language="ocaml"| +let user_service = Eliom_content.Html.D.( + Eliom_registration.Html.create + ~path:(Eliom_service.Path [""]) + ~meth:(Eliom_service.Get (Eliom_parameter.string "name")) + (fun name () -> + Lwt.return + (html (head (title (txt name)) []) + (body [h1 [txt name]]))) +) +>> + +Add these lines to the same file, compile, start the server and verify +that everything is working by trying, for example: +{{{http://localhost:8080/?name=toto}}}. + +<<concept title="Paths" | + +Note that we are using the same path as the first service. Eliom will +automatically call the right service according to the parameters given +in the request. + +>> + +<<concept title="Services with parameters" | + +To define a service that accepts parameters in the URL (GET +parameters), just add a description of the parameters you want in the +{{{~meth}}} argument of the {{{Eliom_service.create}}} function. In +our example, the service is expecting a parameter called {{{name}}}, +of type {{{string}}}. + +The handler function (function implementing the service) always takes +two parameters: + +* The first one corresponds to GET parameters (in our example, a string). +* The second one corresponds to parameters that are sent in the body + of the HTTP request (POST parameters). We will see soon how to make + services with POST parameters. + +The module <<a_api project="eliom" subproject="server" | module Eliom_parameter >> +defines the possible parameter types. For example if you write: + +{{{ +~meth:(Eliom_service.Get (Eliom_parameter.int "i")) +}}} + +Eliom will try to find a parameter called {{{i}}} and to translate it +into an {{{int}}}. In that case, the handler function will accept an +{{{int}}} as the first parameter. + +If you want to accept several parameters, you can do, for example: + +{{{ +~meth:(Eliom_service.Get Eliom_parameter.(int "i" ** string "s")) +}}} + +In that case, the handler function takes a pair of type {{{(int * string)}}}. + +//Warning:// The operator {{{**}}} is an infix //binary// operator. +It will always create pairs, and not triples or other tuples. + +The module <<a_api project="eliom" subproject="server" | module Eliom_parameter >> also +defines other parameter types: for example floats, 64 bits integers, +sum types, but also more complex types, like sets or lists of values. +It is also possible to define your own parameter types. + +>> <<| END "encadre" >> + +For our program, we would prefer to take one part of the URL path as the parameter +describing the name of the user. +To achieve this we change the definition of the previous service this way: + +<<code language="ocaml"| +let user_service = + Eliom_registration.Html.create + ~path:(Eliom_service.Path ["users"]) + ~meth:(Eliom_service.Get ( + Eliom_parameter.(suffix (string "name")))) + (fun name () -> ... ) +>> + +The user pages are now available at URLs <<span +class="code"|~http:~//localhost:8080/users~///username//>>. + +<<concept title="Using parts of the path as page parameters" | + +The module <<a_api project="eliom" subproject="server" | module Eliom_parameter >> makes +it possible to use parts of the path as service (GET) parameters. + +In addition to <<a_api project="eliom" subproject="server" | val Eliom_parameter.suffix +>>, there are many other values allowing you to specify your expected +parameters: for example, you may access the full suffix as a string, +as a list of string, or you may want to mix suffix parameters with +standard GET parameters. You can also accept, as parameters, parts of +the path that are not a suffix of the path (using <<a_api +project="eliom" subproject="server" | val Eliom_parameter.const >>). See more information +on suffixes in <<a_manual +project="eliom" chapter="server-params" fragment="suffixes"|Eliom's manual>>. + +//Warning:// Even if it is not displayed in the URL, suffix parameters +have a parameter name. This allows one to make forms that point to +those kind of services. Actually each "suffix service" has an +equivalent without suffix (which is by default automatically +redirected towards the suffix version if it is a GET request). + +>> <<| END "encadre" >> + +===Links=== + +<<concepts| +Links \\ +Database libraries +>> + +We now want to add a link on each user page to go back to the main +page. + +Change the handler of {{{user_service}}} into: + +<<code language="ocaml"| +(fun name () -> Lwt.return + (html + (head (title (txt name)) []) + (body [h1 [txt name]; + p [a ~service:main_service [txt "Home"] ()]]))) +>> + +<<concept title="Creating hyperlinks" | + +The function <<a_api project="eliom" subproject="server" | val +Eliom_content.Html.D.a >> accepts the following parameters: +* the service +* the content of the link +* URL parameters to be given to the service + +Thus, you don't have to know the precise URL of the service you want +to link to, and if the URL changes, all links will remain valid. +Using this function has a wonderful consequence: //You will never have +broken links!// + +>> <<| END "encadre" >> + +====Links towards services with parameters==== + +In our example above, the last parameter is {{{()}}} because the +service does not expect any parameter. If the service expects, for +example, a pair {{{(int * string)}}}, you must provide a matching +value as last parameter. OCaml checks at compile time that the type +of the parameters in a link corresponds to the type expected by the +service. Also parameter names are generated +automatically from the service, making it impossible to erroneously +create bad links. + +To show an example of a link with parameters, we will display the list +of user pages on the main page. Here is the new version of the full +program: + +<<code language="ocaml"| + +(* Services *) +let main_service = Eliom_service.create + ~path:(Eliom_service.Path [""]) + ~meth:(Eliom_service.Get Eliom_parameter.unit) + () + +let user_service = Eliom_service.create + ~path:(Eliom_service.Path ["users"]) + ~meth:(Eliom_service.Get Eliom_parameter.(suffix (string "name"))) + () + +(* User names and passwords: *) +let users = ref [("Calvin", "123"); ("Hobbes", "456")] + +let user_links = Eliom_content.Html.D.( + let link_of_user = fun (name, _) -> + li [a ~service:user_service [txt name] name] + in + fun () -> ul (List.map link_of_user !users) +) + +(* Services Registration *) +let () = Eliom_content.Html.D.( + + Eliom_registration.Html.register + ~service:main_service + (fun () () -> + Lwt.return + (html (head (title (txt "")) []) + (body [h1 [txt "Hello"]; + user_links ()]))); + + Eliom_registration.Html.register + ~service:user_service + (fun name () -> + Lwt.return + (html (head (title (txt name)) []) + (body [h1 [txt name]; + p [a ~service:main_service [txt "Home"] ()]]))) +) +>> + +<<concept title="Mutually recursive services" | + +As our two services are mutually recursive (the first one contains +links towards the second one and vice versa), we split the +{{{create}}} function application in two steps: + +* First we create all the services using + <<a_api project="eliom" subproject="server" | val Eliom_service.create >> + or <<a_api project="eliom" subproject="server" | val Eliom_service.App.service >> + (depending on the type of services you want) +* Then we register the handlers using the {{{register}}} function from + the right module. + +The function {{{create}}} we previously used is just a shortcut for these two functions (we create the service, then we register the handler). + +>> + +<<concept title="Database libraries" | + +Ultimately we'll want to use a more sophisticated database module for +managing user information, which we will write later in this tutorial. +You can use any OCaml database binding (for example +[[http://pgocaml.forge.ocamlcore.org/|PGOcaml]] to program +database queries). We will use our own database library called +[[https://github.com/ocsigen/macaque|Macaque]], which implements typed requests using +//comprehensions//. + +//Just remember that your query functions must be cooperative with +Lwt!// For example PGOcaml is now implemented in monadic way, which +makes it 100% compatible with Lwt. Macaque (the library we use later +in this tutorial) is as well. + +If your database module is not Lwt-cooperative but is thread-safe (for +preemptive threads), you can use the <<a_api project="lwt" | val +Lwt_preemptive.detach >> function to make the blocking function be +executed by a separate preemptive thread. + +>> + +==Sessions== + +===Connection service=== + +<<concepts| + +Services with hidden (POST) parameters\\ +Fallback service + +>> + +Now we want to add a connection form. First, we create a service +for checking the name and password. Since we don't want the username +and password to be shown in the URL, we use //hidden parameters// +(or POST parameters). Thus, we need to create a new service taking +these parameters: + +<<code language="ocaml"| +let connection_service = Eliom_service.create_attached_post + ~fallback:main_service + ~post_params:Eliom_parameter.(string "name" ** string "password") + () +>> + +<<concept title="Hidden (POST) services" | + +Services using the POST HTTP method are created using the function +<<a_api project="eliom" subproject="server" | val Eliom_service.create >> +or <<a_api project="eliom" subproject="server" | val Eliom_service.create_attached_post >> +(depending on what type of service you want to create). +As you can see, there is a major +difference from the way we created our previous services. +Instead of providing a path for the {{{~path}}} argument, we gave a +//fallback// service. This //fallback// is the service that will be used +if the POST parameters are missing (for example, the user sets a bookmark +on the page and returns later without POST parameters). +This way, we will not get 404 errors if this occurs. + +If the fallback has GET parameters, your service will have both GET +and POST parameters. In that case, GET parameters will be in the URL +and POST parameters will probably come from a form. In HTML, it is not +possible to mix GET and POST parameters in the same form. + +See also [[basics|the cheat-sheet]] for an +comprehensive overview on the different types of services. + +>> + +<<concept title="POST or GET?" | + +POST parameters are sent in the body of the HTTP request (whereas GET +parameters are sent in the URL). It is important to understand that +they have very different semantics. + +Remember: + +* Use GET parameters when you want your page to be bookmarkable. +* Use POST parameters when you do not want the page to be + bookmarkable, for example, because it performs a side effect on the + server (connecting a user, add something in a database, perform a + payment, etc.). + +//Warning:// Even if POST parameters are not shown in the URL, they +are sent as plain text. If you want to transmit private data (like a password), +you must +use HTTPS (see <<a_manual project="ocsigenserver" chapter="config" | +the Ocsigen server manual >>). >> + +Now we can register a handler for the new service: + +<<code language="ocaml"| + Eliom_registration.Html.register + ~service:connection_service + (fun () (name, password) -> + let message = + if check_pwd name password + then "Hello " ^ name + else "Wrong name or password" + in + Lwt.return + (html (head (title (txt "")) []) + (body [h1 [txt message]; + user_links ()]))); +>> + +where {{{check_pwd}}} is defined by: + +<<code language="ocaml"| +let check_pwd name pwd = + try List.assoc name !users = pwd with Not_found -> false +>> + +===Connection form=== + +<<concepts| + +Forms + +>> + +For now, we will add the connection form only on the main page of the +site. + +Let's create a function for generating the form: + +<<code language="ocaml"| +let connection_box () = Eliom_content.Html.D.( + Form.post_form ~service:connection_service + (fun (name1, name2) -> + [fieldset + [label [txt "login: "]; + Form.input + ~input_type:`Text ~name:name1 + Form.string; + br (); + label [txt "password: "]; + Form.input + ~input_type:`Password ~name:name2 + Form.string; + br (); + Form.input + ~input_type:`Submit ~value:"Connect" + Form.string + ]]) () +) +>> + +Now, add a call to this function in the handler of the main service +(for example just before the user links). + +<<concept title="Forms" | + +Form creation is very similar to link creation, using the functions +<<a_api project="eliom" subproject="server" +text="val Eliom_content.Html.D.Form.get_form" +| val Eliom_content_sigs.LINKS_AND_FORMS.Form.get_form >> and +<<a_api project="eliom" subproject="server" +text="val Eliom_content.Html.D.Form.post_form" +| val Eliom_content_sigs.LINKS_AND_FORMS.Form.post_form >>. + +The first parameter is the service, and the last parameter (only for +{{{post_form}}}) is for GET parameters you want sent in the URL, if +the fallback of your POST service takes GET parameters. + +The only difference is how we write form content: instead of simply +giving the content as parameter to the {{{get_form}}} or +{{{post_form}}} functions, you supply a function that creates the form +from the names of the parameters the service is expecting. Thus, you +don't need to remember the parameter names you chose while creating +the service, and you can change them easily without having to update +every form in your application. + +In the example, note that the service is expecting a pair +{{{(string * string)}}}. The function given to {{{post_form}}} takes two +parameters corresponding to the names of each field. + +Functions building widgets, like +<<a_api project="eliom" subproject="server" +text="val Eliom_content.Html.D.Form.input" +| val Eliom_content_sigs.LINKS_AND_FORMS.Form.input >>, +expect an argument of type +<<a_api project="eliom" subproject="server" +text="type Eliom_content.Html.D.Form.param" +| type Eliom_content_sigs.LINKS_AND_FORMS.Form.param >> +(e.g., +{{{ Eliom_content.Html.D.Form.int : int Eliom_content.Html.D.Form.param}}}) +specifying the parameter type. OCaml checks that the name you use +matches the field. For example the names above need to be used with +<<a_api project="eliom" subproject="server" +text="val Eliom_content.Html.D.Form.string" +| val Eliom_content_sigs.LINKS_AND_FORMS.Form.string >>. + +>> + +===Opening a session=== + +<<concepts| + +Session data, Eliom references + +>> + +Now we want to remember that the user is successfully connected. To do +that we will set a reference when the user successfully connects, and +we will restrict the scope of this reference to the session (that is, +to the browser). + +Define your Eliom reference with a default value: +<<code language="ocaml"| +let username = + Eliom_reference.eref ~scope:Eliom_common.default_session_scope None +>> + +Here is the new {{{connection_box}}} function: + +<<code language="ocaml"| +let connection_box () = Eliom_content.Html.D.( + let%lwt u = Eliom_reference.get username in + Lwt.return + (match u with + | Some s -> p [txt "You are connected as "; txt s] + | None -> + Form.post_form ~service:connection_service + (fun (name1, name2) -> + [fieldset + [label [txt "login: "]; + Form.input + ~input_type:`Text ~name:name1 + Form.string; + br (); + label [txt "password: "]; + Form.input + ~input_type:`Password ~name:name2 + Form.string; + br (); + Form.input + ~input_type:`Submit ~value:"Connect" + Form.string + ]]) ()) +) +>> + +...~ and replace the registration of the main service and the connection service by: + +<<code language="ocaml"| + Eliom_registration.Html.register + ~service:main_service + (fun () () -> + let%lwt cf = connection_box () in + Lwt.return + (html (head (title (txt "")) []) + (body [h1 [txt "Hello"]; + cf; + user_links ()]))); + + Eliom_registration.Html.register + ~service:connection_service + (fun () (name, password) -> + let%lwt message = + if check_pwd name password then + begin + let%lwt () = Eliom_reference.set username (Some name) in + Lwt.return ("Hello "^name) + end + else + Lwt.return "Wrong name or password" + in + Lwt.return + (html (head (title (txt "")) []) + (body [h1 [txt message]; + user_links ()]))); +>> + + +<<concept title="Eliom references and extended sessions" id="eref"| + +Session data is stored in what we call //Eliom references//. +It is a type of reference whose value depend on the session the user +belongs to. + +Eliom is making the notion of session much more powerful by adding +other //scopes// for Eliom references. Instead of limiting the scope +to a session (that is: one browser), it is also possible to create +Eliom references with scope +* "client-side process" +({{{~scope:Eliom_common.default_process_scope}}}), +* or "group of sessions" (see +later) ({{{~scope:Eliom_common.default_group_scope}}}), +* or "current +request" ({{{~scope:Eliom_common.request_scope}}}) +(for example to cache the data during the request, +or for //actions// to give information to subsequent service -- see below). + +Example: Say you want to implement a game, and make possible to have several instances of the game running in several tabs of the browser. Store the score on server side, as a "client side process" Eliom reference. + +Example: Grouping all the sessions for one user in a group of session makes possible to share a shopping basket between several devices (your mobile phone and your laptop for example). + +An Eliom reference is defined with the function +{{{Eliom_reference.eref}}}, specifying the scope of this reference +and the default value. The function {{{Eliom_reference.get}}} +retrieves the value of this reference for the current scope. +The default value is used for +all sessions (or client process or group of sessions) for which it has not +been changed using {{{Eliom_reference.set}}}. + +By default, Eliom references are kept in memory and will disappear if +you shut down the server. It is possible, however, to create +//persistent Eliom references// that will survive even a server +restart. To do that, add the optional parameter {{{persistent}}} to +the {{{eref}}} function, with a string value corresponding to the name +of the table that will contain the values on disk. + +You need to rename this table every time you change the type +of your Eliom reference, otherwise the server will crash (we are using +OCaml's {{{Marshal}}} module). + +It is not possible to create Eliom references containing functions +(closures), due to limitations in OCaml's serialization mechanism. + +>> <<| END "encadre" >> + +===Display the usual page after connection=== + +<<concepts| + +Actions + +>> + +As you can see, our connection service is displaying a welcome page +which is different from the main page in connected mode. We would +rather display the same page. One solution is to call the same +handler after registering session data. + +A cleaner solution is to use an //action//, that is: a service which will +just perform a side effect. Replace the registration +of the connection service by: + +<<code language="ocaml"| + Eliom_registration.Action.register + ~service:connection_service + (fun () (name, password) -> + if check_pwd name password + then Eliom_reference.set username (Some name) + else Lwt.return ()); +>> + +Now the main page is displayed after connection. + +<<concept title="Actions" | + +An //action// is a service that performs a side effect and redisplays +the current page. The handler function returns {{{()}}}. + +>> + +===Putting a connection form on each page=== + +<<concepts| + +Non-attached coservices\\ +Redirections + +>> + +<<concept title="Non-attached coservices" | + +With many web programming frameworks, adding a connection form on each +page of a site is complicated, and is approached in one of two ways: + +* A first solution is similar to what we did for the main service, but + for all services (meaning that each page usually checks the presence + of POST parameters). This is clumsy. +* Another solution would be to create a special page on a separate + path to handle the registration, with some way to do a redirection + to the page we came from after connection. (Of course we want to + stay on the same page after sending the connection form!) This is + ugly. + +With Eliom, this is more straightforward: + +* For the connection service, we use a kind of service called + //non-attached coservice//, which means that it is not attached to + any path in particular. Calling this kind of service will not change + the //path// you see in the browser URL bar (just add parameters if + you use the GET method). +* Use an action to connect the user and redisplay the page + corresponding to the current URL. + +By default, a random identifier will be generated automatically by +Eliom for the non-attached coservice. If you want this identifier to +be fixed, you can specify it yourself while creating the service using +the {{{?name}}} optional parameter. This identifier is added +automatically by Eliom in each form (as hidden field) and link. + +>> + +We transform the connection service into a non_attached coservice, +to do so we replace the path we specified earlier for the {{{~path}}} parameter: + +<<code language="ocaml"| +let connection_service = Eliom_service.create + ~path:(Eliom_service.No_path) + ~meth:(Eliom_service.Post ( + Eliom_parameter.unit, + Eliom_parameter.(string "name" ** string "password"))) + () +>> + +Now you can add the connection box on user pages. + +<<code language="ocaml"| + Eliom_registration.Html.register + ~service:user_service + (fun name () -> + let%lwt cf = connection_box () in + Lwt.return + (html (head (title (txt name)) []) + (body [h1 [txt name]; + cf; + p [a ~service:main_service [txt "Home"] ()]]))); +>> + +<<concept title="Alternative: register a redirection" | + +Usually, after sending a POST form, it is good practice to do a +redirection. This avoids reposting the data if the user reloads the +page. + +Eliom provides the module <<a_api project="eliom" subproject="server" | +module Eliom_registration.Redirection >> to register services doing +redirections. Such services return a service without parameter. + +Example: + +<<code language="ocaml"| + +let redir_service = Eliom_service.create + ~path:(Eliom_service.Path ["redir"]) + ~meth:(Eliom_service.Get Eliom_parameter.unit) + () + +let service_to_redirect = Eliom_service.create_attached_post + ~fallback:redir_service + ~post_params:(Eliom_parameter.string "something") + () + +let () = + (** redir_service registration **) + Eliom_registration.Redirection.register + ~service:redir_service + (fun () () -> + Lwt.return + (Eliom_registration.Redirection some_service_to_redirect_to)); + + (** service_to_redirect registration **) + Eliom_registration.Any.register + ~service:service_to_redirect + (fun () something -> ..... ) +>> + +(If you want to give parameters to the service you return, use <<a_api +project="eliom" subproject="server" | val Eliom_service.preapply >> --- +more information in the <<a_manual project="eliom" chapter="server-services" +fragment="p3preapplied" | Eliom manual >>.) + +If you want to do a redirection towards the current page (as in our +case), use the special service {{{~path}}} parameter <<a_api project="eliom" subproject="server" | +val Eliom_service.No_path >>, which is some kind of POST +non-attached coservice without parameter at all. >> + +===Disconnection=== + +To create a logout/disconnection form, we create another non-attached +coservice using POST method, and register another action. We call the +function <<a_api project="eliom" subproject="server" | val +Eliom_state.discard >> with scope <<a_api project="eliom" subproject="server" +| val Eliom_common.default_session_scope >> to remove all session +data. + +<<code language="ocaml"| +let disconnection_service = Eliom_service.create + ~path:(Eliom_service.No_path) + ~meth:(Eliom_service.Post (Eliom_parameter.unit, Eliom_parameter.unit)) + () + +let disconnect_box () = Eliom_content.Html.D.( + Form.post_form disconnection_service + (fun _ -> + [fieldset [Form.input ~input_type:`Submit ~value:"Log out" Form.string]] + ) + () +) + +let () = + Eliom_registration.Action.register + ~service:disconnection_service + (fun () () -> Eliom_state.discard ~scope:Eliom_common.default_session_scope ()) +>> + +Then add this form in the connection box: + +<<code language="ocaml"| +let connection_box () = + let%lwt u = Eliom_reference.get username in + Lwt.return + (match u with + | Some s -> div [p [txt "You are connected as "; txt s; ]; + disconnect_box () ] + | None -> ... +>> + +==Registration of users== + +===Basic registration form=== + +<<concepts| + +Attached coservice + +>> + +We now add a registration form to the application. We create a +new regular service, attached to the path {{{/registration}}}, that +displays a registration form, and an action that will add the user to +the "database": + +<<code language="ocaml"| +let new_user_form_service = Eliom_service.create + ~path:(Eliom_service.Path ["registration"]) + ~meth:(Eliom_service.Get Eliom_parameter.unit) + () + +let create_account_service = Eliom_service.create_attached_post + ~fallback:main_service + ~post_params:(Eliom_parameter.(string "name" ** string "password")) + () + +let account_form () = Eliom_content.Html.D.( + Form.post_form ~service:create_account_service + (fun (name1, name2) -> + [fieldset + [label [txt "login: "]; + Form.input ~input_type:`Text ~name:name1 Form.string; + br (); + label [txt "password: "]; + Form.input ~input_type:`Password ~name:name2 Form.string; + br (); + Form.input ~input_type:`Submit ~value:"Connect" Form.string + ]]) () +) + +let _ = Eliom_content.Html.D.( + Eliom_registration.Html.register + ~service:new_user_form_service + (fun () () -> + Lwt.return + (html (head (title (txt "")) []) + (body [h1 [txt "Create an account"]; + account_form (); + ]))); + + Eliom_registration.Action.register + ~service:create_account_service + (fun () (name, pwd) -> + users := (name, pwd)::!users; + Lwt.return ()) +) +>> + +Then add the link to this service in the connection box: + +<<code language="ocaml"| +let connection_box () = Eliom_content.Html.D.( + let%lwt u = Eliom_reference.get username in + Lwt.return + (match u with + | Some s -> div [p [txt "You are connected as "; txt s; ]; + disconnect_box () ] + | None -> + div [Form.post_form ~service:connection_service + (fun (name1, name2) -> +... + ) (); + p [a new_user_form_service + [txt "Create an account"] ()]] + ) +) +>> + +<<concept title="Attached coservice" | + +Now we want to return to the main page after account creation. We are +using an //attached coservice//, that is, a service that is identified +by both the path in the URL and a special coservice number (or name). +A form to such a service will change the path and send parameters +together with the coservice identifier (added automatically in an +hidden field). + +In this particular case, We could have used a regular service, as we +do not really need the coservice identifier, but in many cases, you +may want to distinguish between several services registered at the +same path (and with same parameters). That's what attached coservices +are made for. + +>> + +It looks great, but if we refresh the page after creating an account, +we can see there is a problem. We are creating the same account over and +over again. This is because we are calling the create_account_service each time +we refresh the page, obviously we don't want that. To solve this issue we will +implement a dynamically created and registered service with limited lifespan and +number of uses. + +===Registration form with confirmation=== + +<<concepts| + +Dynamic registration of services\\ +Session services\\ +Limited services + +>> + +Now we want to add a confirmation page before actually creating the +account. We //replace// the service {{{create_account_service}}} by a +new POST attached coservice called {{{account_confirmation_service}}}: + +<<code language="ocaml"| +let account_confirmation_service = + Eliom_service.create_attached_post + ~fallback:new_user_form_service + ~post_params:(Eliom_parameter.(string "name" ** string "password")) + () +>> + +and we make the account creation form point at this new service. + +We register an HTML handler on this service, with the confirmation +page. As a side effect, this page will create the actual account +creation service: + +<<code language="ocaml"| + + Eliom_registration.Html.register + ~service:account_confirmation_service + (fun () (name, pwd) -> + let create_account_service = + Eliom_service.create_attached_get + ~fallback:main_service + ~get_params:Eliom_parameter.unit + ~timeout:60. + ~max_use:1 + () + in + let _ = Eliom_registration.Action.register + ~service:create_account_service + (fun () () -> + users := (name, pwd)::!users; + Lwt.return ()) + in + Lwt.return + (html + (head (title (txt "")) []) + (body + [h1 [txt "Confirm account creation for "; txt name]; + p [a ~service:create_account_service [txt "Yes"] (); + txt " "; + a ~service:main_service [txt "No"] ()] + ]))); +>> + +Also remove the registration of the {{{create_account_service}}} +service and modify the user creation form to make it points towards +{{{account_confirmation_service}}}. + +We created dynamically a service with a limited lifespan as specified by the +{{{?timeout}}} parameter and a limited number of uses of this service defined +by the {{{?max_use}}} parameter. Now if we refresh the page after creating the +account, it works as intended. + +<<concept title="Dynamic creation of services" | + +In this example, we are dynamically creating a new service (here a +coservice that does an action). This is done by the same +{{{register}}} function as usual. + +Dynamic creation of new services allows one to create services that +depend on previous interaction with the user. Here the +{{{create_account_service}}} service depends on {{{name}}} and +{{{pwd}}}, that were previously sent by a form. + +In this simple example, an alternative would have been to send +{{{name}}} and {{{pwd}}} again to the same service as in the "basic +registration form" example. But this solution is not possible when you +have too much data. + +//Saving {{{name}}} and {{{pwd}}} as session data is a wrong +solution!// If the user duplicates his browser window and fills out +the user creation form in both, then the confirmation link must create +the right account! + +A working alternative would have been to generate a random key, and +associate {{{name}}} and {{{pwd}}} with that key in a database table +on the server. This is the way such kind of web interaction is usually +implemented. However, Eliom's solution is much simpler. + +The ability to register new services dynamically is implemented in few +web frameworks, even though it simplifies a lot the programmating +involved with that type of web interaction. This feature is a variant +of what is called //continuation based web programming//. Think about +it when you want to //create a page that depends on previous +interaction with the user//. Dynamic registration of services will +automatically record the "history" of the interaction, and make +possible to use the "back button" or to have several tabs on the same +site. + +Examples of uses: +* displaying the results of a search +* programming a "several step form" (when a form points at another + one, etc., like our registration form with confirmation). + +On the other hand, if you want to implement a //shopping basket//, you +want it to be shared between all tabs of your web site. To do that, +you will use session data. + +//Warning:// Services are kept in memory. To avoid memory leaks, you +probably want to put a timeout on your dynamic coservices. Just add +the optional parameter {{{?timeout}}} to the service creation +function. + +>> <<| END "encadre" >> + +<<concept title="Session services" | + +Eliom also makes it possible to restrict the scope of services to a +session, a group of sessions, or even a client side process (if you +have a client side program running). It works exactly like the scope +of Eliom references. To do that, just add the optional parameter +{{{~scope}}} to the registration function. By default, the value is +{{{Eliom_common.global_scope}}} (visible for everyone). Other possible +values: {{{Eliom_common.default_session_scope}}}, {{{Eliom_common.default_group_scope}}}, +or {{{Eliom_common.default_process_scope}}}. + +It is possible to register again for a session, tab or group, services +that have already been registered with public (site) visibility. In +such cases, Eliom will try first tab services, then session services, +then group services, and finally site services. This makes possible +to register specialized versions of a service for one user, for +example when she logs in. + +>> + +==A few enhancements== + +===Displaying a "wrong password" message=== + +<<concepts| +Scope "request" +>> + +In the current version, our web site fails silently when the password +is wrong. Let's improve this behavior by displaying an error message. +To do that, we need to pass information to the service occurring after +the action. We record this information in an Eliom reference with +scope {{{Eliom_common.request_scope}}}. + +Define an Eliom reference: + +<<code language="ocaml"| +let wrong_pwd = + Eliom_reference.eref ~scope:Eliom_common.request_scope false +>> + +Modify the connection box this way: + +<<code language="ocaml"| +let connection_box () = Eliom_content.Html.D.( + let%lwt u = Eliom_reference.get username in + let%lwt wp = Eliom_reference.get wrong_pwd in + Lwt.return + (match u with + | Some s -> div [p [txt "You are connected as "; txt s; ]; + disconnect_box () ] + | None -> + let l = + [Form.post_form ~service:connection_service + (fun (name1, name2) -> + [fieldset + [label [txt "login: "]; + Form.input ~input_type:`Text ~name:name1 Form.string; + br (); + label [txt "password: "]; + Form.input ~input_type:`Password ~name:name2 Form.string; + br (); + Form.input ~input_type:`Submit ~value:"Connect" Form.string + ]]) (); + p [a new_user_form_service + [txt "Create an account"] ()]] + in + if wp + then div ((p [em [txt "Wrong user or password"]])::l) + else div l + ) +) +>> + +...~ and modify the {{{connection_service}}} handler: + +<<code language="ocaml"| + Eliom_registration.Action.register + ~service:connection_service + (fun () (name, password) -> + if check_pwd name password + then Eliom_reference.set username (Some name) + else Eliom_reference.set wrong_pwd true); +>> + +===Sending 404 errors for non-existing users=== + +<<concepts| + +Sending 404\\ +{{{Eliom_registration.Any}}} + +>> + +Our service {{{user_service}}} responds to any request parameter, even +if the user does not exist in the database. We want to check that the +user is in the database before displaying the page, and send a 404 +error if the user is not. To do that, we will replace module +{{{ Eliom_registration.Html }}} +by <<a_api project="eliom" subproject="server" | module +Eliom_registration.Any >> to register the service {{{user_service}}}: + +<<code language="ocaml"| + Eliom_registration.Any.register + ~service:user_service + (fun name () -> + if List.mem_assoc name !users then + begin + let%lwt cf = connection_box () in + Eliom_registration.Html.send + (html (head (title (txt name)) []) + (body [h1 [txt name]; + cf; + p [a ~service:main_service [txt "Home"] ()]])) + end + else + Eliom_registration.Html.send + ~code:404 + (html (head (title (txt "404")) []) + (body [h1 [txt "404"]; + p [txt "That page does not exist"]])) + ); +>> + +<<| BB + Why not {{{raise_lwt Eliom_common.Eliom_404}}}? + >> + +<<concept title="Eliom_registration.Any" | + +The module <<a_api project="eliom" subproject="server" | module +Eliom_registration.Any >> can be used to create services that are +flexible to choose the kind of output they want to send. + +Use the {{{send}}} function from the module you want to send the +output. That function also allows, for example, to specify the HTTP +response code (here, we choose to use 404) or to set HTTP headers. + +>> + +<<wip| + +In the future, we may add functions like {{{set_http_code}}} or +{{{set_http_header}}} to personalize the answer without using +{{{Eliom_registration.Any}}}. + +>> + +=== Wrapping the server handler to easily get the user data + +When you want to assume that you have informations available in +sessions, for instance when a site is mainly available to connected +users, it becomes tedious to check everywhere that a reference is not +{{{None}}}. A simple way to distinguish authenticated and anonymous +requests lies in the usage of <<a_api project="eliom" +subproject="server"|val Eliom_tools.wrap_handler>>. It allows to +provide two handler functions, one is called if a certain +information is not made available by the first argument, the other is +called when that information is available. + +<<code language="ocaml"| + +let authenticated_handler f = Eliom_content.Html.D.( + let handle_anonymous _get _post = + let connection_box = + Form.post_form ~service:connection_service + (fun (name1, name2) -> + [fieldset + [label [txt "login: "]; + Form.input ~input_type:`Text ~name:name1 Form.string; + br (); + label [txt "password: "]; + Form.input ~input_type:`Password ~name:name2 Form.string; + br (); + Form.input ~input_type:`Submit ~value:"Connect" Form.string + ]]) () + in + Lwt.return + (html + (head (title (txt "")) []) + (body [h1 [txt "Please connect"]; + connection_box;])) + in + Eliom_tools.wrap_handler + (fun () -> Eliom_reference.get username) + handle_anonymous (* Called when [username] is [None] *) + f (* Called [username] contains something *) +) + +let () = Eliom_content.Html.D.( + Eliom_registration.Html.register ~service:main_service + (authenticated_handler + (fun username _get _post -> + Lwt.return + (html + (head (title (txt "")) []) + (body [h1 [txt ("Hello " ^ username) ]])))) +) +>> + +[[wiki:manual/application|prev]] +[[wiki:manual/misc|next]] diff --git a/tutos/8.0/manual/intro.wiki b/tutos/8.0/manual/intro.wiki new file mode 100644 index 00000000..99c65e20 --- /dev/null +++ b/tutos/8.0/manual/intro.wiki @@ -0,0 +1,157 @@ + +=Introduction= + +Ocsigen is a complete framework for developing Web and mobile apps +using cutting edge techniques. It can be used to write simple server side +Web sites, client-side programs, or complex client-server Web +and mobile apps. +Its main characteristics are: + +* The use of a strongly typed language, //OCaml//, and a very advanced use +of its type system to check many properties of a program at compile time. +This allows to drastically reduce the developement time of complex apps, +and makes it easier to refactor the code to follow evolutions of its features. +As an example, the conformance of generated HTML is checked at compile time, +which makes it almost impossible to generate invalid pages. +* //Multi-tier programming//: client and server sides of the application are +written using the same language, and as a //single code//. Annotations in +the code are used indicate on which side the code is to be run. +The client side parts are automatically extracted and compiled into JavaScript +to be executed in the browser. +This gives a lot of flexibility to the programmer, allowing for example to +generate some parts of pages either on client or server code according +to your needs. It also makes communication between server and client +straightforward, as you can use server side variables in client code, +or call a server side OCaml functions from client code. +* //Web and mobile multi-platform apps//: Android and iOS apps are +generated from the exact same code as the Web app, and run in a webview. + +To see some examples of mobile or Web apps written with Ocsigen, have a look +at the [[https://www.besport.com/news|Be Sport social network]] (available in +[[https://play.google.com/store/apps/details?id=com.besport.www.mobile|Google Play Store]] and [[https://apps.apple.com/fr/app/be-sport/id1104216922|Apple app store]]), or +[[http://ocsigen-1.inria.fr/ocsigen-start/demo/|Ocsigen Start's demo app]] +(available on [[https://play.google.com/store/apps/details?id=com.osdemo.mobile|Google Play store]]). + +Ocsigen consists of several quite independant projects, all +released as open source software on [[https://github.com/ocsigen|Github]]. +The main projects are: +* [[wiki("lwt"):|Lwt]], a general purpose concurrent programming library for OCaml, +* [[wiki("tyxml"):|TyXML]] for generating typed XML, +* the [[wiki("js_of_ocaml"):|Js_of_ocaml]] compiler (from Ocaml bytecode to JavaScript), +* [[wiki("eliom"):|Eliom]], the multi-tier framework for client-server +Web and mobile apps, +* [[wiki("ocsigenserver"):|Ocsigen Server]], a full-featured Web server, +* [[wiki("ocsigen-toolkit"):|Ocsigen Toolkit]], a client-server widget library written for Eliom and Js_of_ocaml, +* [[wiki("ocsigen-start"):|Ocsigen Start]], an application template with +many code examples, to be used as a basis for your apps, or to learn. + +The [[site:install|installation is described here]]. + +Ocsigen originates from a research project by the CNRS, Université de Paris +and Inria. It innovates in many aspects, and you will have to learn several +new programming techniques to become autonomous. +Depending on your level and goals, we suggest to continue by reading +some of the following chapters: + +* Chapter [[wiki:manual/basics|Client-server application programming guide]] can be used as your training plan. +It provides a wide overview of each main concept, with links to more detailed +documentation. +* If you want to start with a server-side only Web site, read [[wiki:manual/basics-server|Server-side website programming guide]] instead. +* Then, a good starting point is this +[[wiki:manual/start|Ocsigen Start tutorial]], +if you plan to build a client-server Web (and/or mobile) app. +It will help you to build your first app very quickly, +with many code samples to study. +* If you are fluent in OCaml and want a quick introduction to +client-server Web programming with Eliom, +read tutorial +[[wiki:manual/tutowidgets|Eliom apps basics: writing client server widgets]]. +It illusrates the client-server syntax with an example, +and is a good starting point for understanding Eliom's client-server features. +* If you want a full step-by-step tutorial on how to write a client-server Web +application, read tutorial +[[wiki:manual/application|Client-server application]]. +It describes step by step how to write a client/server +[[site:graffiti/|collaborative drawing application]]. You will learn, +from the very beginning, how to: +** Create new //services// +** Output //valid HTML// +** Send //OCaml code// to be executed //on the client// +** Call //JavaScript methods// from OCaml +** Catch //mouse events// +** //Communicate// with the server, in both directions +** Create services with //non-HTML output// +* If you want to build mobile applications, +read tutorial [[wiki:manual/mobile|Mobile applications with Ocsigen]]. +It describes how to build a mobile app (e.g., for Android) +with the same codebase as for your Web application. +* If you want to write a more traditional Web site, with pages, forms, and sessions, read tutorial [[wiki:manual/interaction|Service based Web programming]]. +It is devoted to server side programming. +It shows how to +create a new Web site with several pages and user connections. +You will learn how to: +** Create a //link// towards another service +** Create //forms// +** Register //session data// or //session services// +** Create services performing //actions// (with no output) +** Dynamically register new services (//continuation based// Web programming) +* If you want to learn more details about Ocsigen +read tutorial [[wiki:manual/misc|Miscellaneous features]]. +It will mix the client-server drawing application +with the session mechanism and user management +to produce a multi-user collaborative drawing +application. In this chapter, you will learn how to: +** Integrate a typical Web interaction (links, forms,~ …) with a client side program. +** Add //sounds or videos// to your application +** Change pages //without stopping the client side program// +** Connect with external accounts (//openID//) +** Add an Atom feed +* If you want to have a full application with user management +(registration, activation emails, authentication), +have a look at [[wiki("ocsigen-start"):|Ocsigen-start]]. +Ocsigen-start is a library and a template for Eliom distillery that +contains a working Eliom application with user and right +management. +* For a more comprehensive understanding refer to the manual of each project, +and/or the API documentation. +* You will also find more tutorials in the menu on the left. + + +<<|[[http://www.dailymotion.com/video/k3m1rZBWQCWBCL693Y5|{{files/2014-epita-video.png|video}}]] +If you want a wide overview about Ocsigen, for beginners, in french +look at [[href:http://www.dailymotion.com/video/k3m1rZBWQCWBCL693Y5|this video]] +>> + +<<|div class="tutocase"| +[[https://www.irill.org/videos/OUPS-2014-07/Meetup_OCaml_Oscigen|OUPS meeting at Mozilla Paris]] +;A short talk, in english, that highlights a few features of Js~_of~_ocaml +and Eliom. +:Look at [[https://www.irill.org/videos/OUPS-2014-07/Meetup_OCaml_Oscigen|this video]] +>> + +<<|div class="tutocase"| +[[http://www.irill.org/videos/oups-december-2014/Ocsigen|OUPS meeting at IRILL]] +;A short talk, in english, that shows how to write a small client-server reactive application with Js~_of~_ocaml and Eliom. +:Look at [[http://www.irill.org/videos/oups-december-2014/Ocsigen|this video]] +and read this [[wiki:manual/tutoreact|tutorial]]. +It describes the most recent features of Eliom. +>> + + + +We recommend to ask your questions on +[[https://discuss.ocaml.org|discuss.ocaml.org]] with tag {{{ocsigen}}}. +You can also come and chat with us on +IRC in channel {{{#ocsigen}}} on {{{freenode.net}}} (e.g. by using +their [[http://webchat.freenode.net/?channels=ocsigen|webchat]])! + + +Now, we recommend to read, chapter +[[wiki:manual/basics|All Ocsigen in one page]] +for a wide and complete overview. + +<<|wip| +Manuals are permanently under evolution. +Please report any error, mistake, for example by doing pull requests +on Github, and send us your comments and suggestions! +>> diff --git a/tutos/8.0/manual/lwt.wiki b/tutos/8.0/manual/lwt.wiki new file mode 100644 index 00000000..fc48edeb --- /dev/null +++ b/tutos/8.0/manual/lwt.wiki @@ -0,0 +1,178 @@ +<<header| = Lwt in 5 minutes >> + +== Principles + +The Lwt library implements cooperative threads for OCaml. Cooperative +threads are an alternative to preemptive threads (used in many +languages and in OCaml's {{{Thread}}} module) that solve most common +issues with preemptive threads: with Lwt, there is very limited risk +of deadlocks and very limited need for locks. Lwt threads are even +usable in programs compiled to JavaScript using Js_of_ocaml. + +Lwt is based on the fact that most programs spend most of their time +waiting for inputs, e.g., keys, data coming from sockets, and mouse +events. Instead of relying on a preemptive scheduler that switches +between threads at arbitrary moments, Lwt uses these waiting times as +//cooperation points//. This means that instead of blocking (for +example on a {{{read}}}), Lwt resumes another waiting thread, if there +is one that is ready to continue. All you have to do is to use the +cooperative version of each blocking function, for example +{{{Lwt_unix.sleep}}} instead of {{{Unix.sleep}}} +and {{{Lwt_unix.read}}} instead of {{{Unix.read}}}. +If one of your computations takes a lot of time, it is also possible +to manually insert cooperation points using the function +{{{Lwt_main.yield}}}. + +== Promises + +Lwt defines a type {{{'a Lwt.t}}}, which is the type of promises. +For example, the function: + +<<code language="ocaml"| +val f : unit -> int Lwt.t +>> + +immediately returns a promise of {{{int}}}, that is, something that +will eventually become an integer once the computation is finished. + +The following code will launch the computation of {{{f ()}}} +(asynchronously). If the code reaches a cooperation point (for example +when the integer is requested via the network), it will continue the +program (print "hello") and resume at a subsequent cooperation point, +when the data is available. + +<<code language="ocaml"| +let g1 () = + let p = f () in + print_endline "hello" +>> + +== Bind: Using the value of promises + +It is possible to tell Lwt to execute a function once a promise is +completed, by using the function: + +<<code language="ocaml"| +Lwt.bind : 'a Lwt.t -> ('a -> 'b Lwt.t) -> 'b Lwt.t +>> + +For instance {{{Lwt.bind p h}}} will call the function {{{h}}} with +the return value of the promise {{{p}}} as soon as the value is known. +The expression {{{(Lwt.bind p h)}}} is also a promise (it may take +time to complete). Function {{{h}}} must return a promise. + +To create a (terminated) promise from a value, use {{{Lwt.return}}}. + +Example: +<<code language="ocaml"| +let g2 () = + let p = f () in + Lwt.bind p (fun i -> print_int i; Lwt.return ()) +>> +Function {{{g2}}} calls function {{{f}}} to create a promise. +Then it waits (in a cooperative manner) for the result, +and prints the result. The expression {{{g2 ()}}} has type {{{unit Lwt.t}}}. + + +== Syntax extension + +A PPX (and also camlp4) syntax extension is available. + +<<code language="ocaml"| +let%lwt i = f () in +... +>> + +is equivalent to + +<<code language="ocaml"| +Lwt.bind (f ()) (fun i -> ...) +>> + +== Examples + +=== A function that prints "tic" every second forever, without blocking the rest of the program + +<<code language="ocaml"| +let rec tic () = + print_endline "tic"; + let%lwt () = Lwt_unix.sleep 1.0 in + tic () +>> + +Replace {{{Lwt_unix.sleep}}} by {{{Lwt_js.sleep}}} if your program is +running in a browser. + + +=== Launching concurrent threads and waiting for their results + +Suppose you have two cooperative functions: +<<code language="ocaml"| +val f : unit -> unit Lwt.t +val g : unit -> unit Lwt.t +>> + +The following code runs {{{f ()}}} and {{{g ()}}} sequentially: +<<code language="ocaml"| +let%lwt () = f () in +let%lwt () = g () in +... +>> + +The following code launches {{{f ()}}} and {{{g ()}}} concurrently, +then waits for both to terminate before continuing: +<<code language="ocaml"| +let p1 = f () in +let p2 = g () in +let%lwt () = p1 in +let%lwt () = p2 in +... +>> + +To detach a thread, it is recommended to use +<<code language="ocaml"| +Lwt.async (fun () -> f ()) +>> +instead of +<<code language="ocaml"| +ignore (f ()) +>> +to catch exceptions properly. + +=== Serial and concurrent map on lists + +The following map function runs all computation concurrently +on all list elements: +<<code language="ocaml"| +let rec map f l = + match l with + | [] -> Lwt.return [] + | v :: r -> + let t = f v in + let rt = map f r in + let%lwt v' = t in + let%lwt l' = rt in + Lwt.return (v' :: l') +>> + +whereas the following one waits for the one to complete before +launching the next one: +<<code language="ocaml"| +let rec map_serial f l = + match l with + | [] -> return [] + | v :: r -> + let%lwt v' = f v in + let%lwt l' = map_serial f r in + Lwt.return (v' :: l') +>> + + +== More documentation + +Have a look at <<a_manual project="lwt" chapter="manual"|Lwt's manual>> +for more details about Lwt. +You will learn how to handle exceptions (using {{{Lwt.fail}}} +and {{{Lwt.catch}}} or {{{try%lwt}}}). +You will also learn for example how to create a thread that waits until it is +awaken (using {{{Lwt.wait}}} and {{{Lwt.wakeup}}}). diff --git a/tutos/8.0/manual/macaque.wiki b/tutos/8.0/manual/macaque.wiki new file mode 100644 index 00000000..e830ef6f --- /dev/null +++ b/tutos/8.0/manual/macaque.wiki @@ -0,0 +1,129 @@ +=Type safe database requests using Macaque= + +<<concepts |Type safe database requests>> + +The Macaque library allows easy manipulation of Postgresql +database fully compatible with Lwt. (For more information see +[[https://github.com/ocsigen/macaque| Macaque manual]]). + +Macaque is fuly compatible with PGOcaml, and both can be used +in the same application. PGOcaml requires database access at compile +time and makes difficult to generate queries at compile time. +Macaque uses its own syntax, whereas PGOcaml uses SQL. +Macaque supports only a small subset of Postgresql features. + +Warning: Macaque's syntax extension uses camlp4, which is not compatible with ppx. If you want to use macaque with Eliom's ppx, place your macaque code in an isolated file. Some details can be found in <<a_manual project="eliom" chapter="ppx-migration"|the ppx migration guide>>. + +This tutorial shows how to store the login and the password +f users in a Postgresql +database. For more information on how to set up and run it, see +[[http://www.postgresql.org/docs/9.0/static/index.html|Postgresql +manual]]. + +When the base is up and running, we create the base by running in a shell: +<<code language="sh"| +$ createdb testbase +>> + +Then we create the {{{users}}} table, by executing this sql script: + +<<code language="sql"| CREATE TABLE users ( + login text NOT NULL, + password text NOT NULL +); +>> + +We save it under {{{create_table.sql}}} and run + +<<code language="sh"| +$ psql -d testbase -f create_table.sql +>> + +Macaque can use any thread library that provides a monadic +interface. The default one provides simple blocking access to the +database. It isn't good for us because an access to the base by one +user will prevent the server from handling anything else until the +request is finished. We need a version of Macaque specialised for +Lwt. It is obtained by + +<<code language="ocaml"| +module Lwt_thread = struct + include Lwt + include Lwt_chan +end +module Lwt_PGOCaml = PGOCaml_generic.Make(Lwt_thread) +module Lwt_Query = Query.Make_with_Db(Lwt_thread)(Lwt_PGOCaml) +>> + +We can now open the database with our newly created {{{Lwt_PGOCaml.connect}}}. + +<<code language="ocaml"| +let get_db : unit -> unit Lwt_PGOCaml.t Lwt.t = + let db_handler = ref None in + fun () -> + match !db_handler with + | Some h -> Lwt.return h + | None -> Lwt_PGOCaml.connect ~database:"testbase" () +>> + +Then we declare the table on which we will work and the different +requests we do on it. + +<<code language="ocaml"| +let table = <:table< users ( + login text NOT NULL, + password text NOT NULL +) ~>> + +let find name = + (get_db () ~>>= fun dbh -> + Lwt_Query.view dbh + <:view< {password = user_.password} | + user_ in $table$; + user_.login = $string:name$; ~>>) + +let insert name pwd = + get_db () ~>>= fun dbh -> + Lwt_Query.query dbh + <:insert< $table$ := + { login = $string:name$; password = $string:pwd$; } ~>> + +>> + +Finally, we modify the handling code : + +<<code language="ocaml"| +let check_pwd name pwd = + (get_db () ~>>= fun dbh -> + Lwt_Query.view dbh + <:view< {password = user_.password} | + user_ in $table$; + user_.login = $string:name$; + user_.password = $string:pwd$ ~>>) + >|= (function [] -> false | _ -> true) + +let () = Eliom_registration.Action.register + ~service:create_account_service + (fun () (name, pwd) -> + find name ~>>= + (function + | [] -> insert name pwd + | _ -> Lwt.return ()) ) + +let () = Eliom_registration.Action.register + ~service:connection_service + (fun () (name, password) -> + check_pwd name password ~>>= + (function + | true -> Eliom_reference.set username (Some name) + | false -> Lwt.return ())) +>> + +We need to reference {{{macaque}}} in the {{{Makefile}}} (or in {{{Makefile.option}}} if you used {{{eliom-distillery}}}) : +{{{ +SERVER_PACKAGE := macaque.syntax +}}} +and in {{{ocsigenserver.conf}}} (only if you don't use {{{eliom-distillery}}}) : +{{{ +<extension findlib-package="macaque"/> +}}} diff --git a/tutos/8.0/manual/menu.wiki b/tutos/8.0/manual/menu.wiki new file mode 100644 index 00000000..f6c8e446 --- /dev/null +++ b/tutos/8.0/manual/menu.wiki @@ -0,0 +1,73 @@ += Programmer's guide +==[[intro|Introduction. Ocsigen: where to start?]] +==[[basics|Client-server application programming guide]] +==[[basics-server|Server-side website programming guide]] += Main tutorials +==[[site:/install|Install Ocsigen]] +==[[start|Your first app in 5 minutes]] +==[[application|Client/server application: Graffiti]] +==[[tutowidgets|Eliom apps basics: writing client-server widgets]] +==[[how-to-register-session-data|Session data: Eliom references]] +==[[tutoreact|Reactive client-server Web applications]] +==[[interaction|Service based Web programming]] +==[[misc|Mixing traditional Web interaction with client-server app]] += 5-minute tutorials +==[[lwt|Lwt]] +==[[html|HTML]] += Other tutorials: Miscellanous features +==[[mobile|Mobile applications with Ocsigen]] +==[[custom-conf|Custom configuration]] +==[[rest|RESTful JSON API]] +==[[ocsipersist|Persistent tables with Ocsipersist]] += Improving Graffiti +==[[pictures|Download pictures]] +==[[music|Playing music]] +==[[reactivemediaplayer|Reactive media player]] +=@@class="howto"@@ HOW-TO +== My first steps with Ocsigen +===[[how-to-make-hello-world-in-ocsigen|How to make "hello world" in Ocsigen]] +===[[how-to-compile-my-ocsigen-pages|How to compile my Ocsigen pages]] +===[[how-to-configure-and-launch-the-ocsigen-server|How to configure and launch the Ocsigen Server]] +===[[how-does-a-page-s-source-code-look|How does a client-server app source code look like?]] +== How to put some elements in my page ? +===[[how-to-make-page-a-skeleton|How to make a page skeleton]] +===[[how-to-use-get-parameters-or-parameters-in-the-url|How to use GET parameters (parameters in the URL)]] +===[[how-to-add-css-stylesheet|How to add CSS stylesheet]] +===[[how-to-add-a-javascript-script|How to add a Javascript script]] +<<|===[[how-to-add-a-favicon|How to add a Favicon]] >> +===[[how-to-add-a-div|How to add a div]] +===[[how-to-add-a-list|How to add lists in pages?]] +===[[how-to-add-an-image|How to add an image]] +===[[how-to-write-titles-and-paragraphs|How to write titles and paragraphs]] +===[[how-to-set-and-id-classes-or-other-attributes-to-html-elements|How to set and id, classes or other attributes to HTML elements]] +===[[how-to-add-a-select-or-other-form-element|How to add select (or other form element)]] +===[[how-to-insert-raw-form-elements-not-belonging-to-a-form-towards-a-service|How to insert "raw" form elements (not belonging to a form towards a service)]] +===[[how-to-make-responsive-css|How to make responsive CSS]] +== Services +===[[how-to-do-links-to-other-pages|How to do links to other pages]] +===[[how-to-write-forms|How to write forms]] +===[[how-to-register-a-service-that-decides-itself-what-to-send|How to register a service that decides itself what to send]] +===[[how-to-create-link-to-a-current-page-without-knowing-its-url|How to create link to a current page (without knowing its URL)]] +===[[how-to-create-form-wizard-sequence-of-pages-depending-on-data-entered-on-previous-ones|How to create form wizard (sequence of pages depending on data entered on previous ones)]] +===[[how-to-write-a-json-service|How to write a JSON service]] +===[[how-to-send-file-download|How to send a file (download)]] +===[[how-to-send-file-upload|How to send a file (upload)]] +== Js_of_ocaml +===[[how-to-attach-ocaml-values-to-dom-elements|How to attach OCaml values to DOM elements]] +===[[how-to-know-whether-the-browser-window-has-the-focus-or-not|How to know whether the browser window has the focus or not]] +===[[how-to-build-js-object|How to build js object]] +===[[how-to-stop-default-behaviour-of-events|How to stop default behaviour of events]] +===[[how-to-call-an-ocaml-function-from-js-code|How to call an OCaml function from js code]] +== Eliom client-server applications +===[[how-to-call-a-server-side-function-from-client-side|How to call a server-side function from the client side]] +===[[how-to-make-the-client-side-program-get-an-html-element-from-the-server-and-insert-it-in-the-page|How to make the client side program get an HTML element from the server and insert it in the page]] +===[[how-to-attach-ocaml-values-to-the-html-nodes-sent-to-the-client|How to attach OCaml values to the HTML nodes sent to the client]] +===[[how-to-iterate-on-all-sessions-for-one-user-or-all-tabs|How to iterate on all sessions for one user, or all tabs]] +===[[how-to-implement-a-notification-system|How to implement a notification system]] +===[[how-to-send-a-file-to-server-without-stopping-the-client-process|How to send a file to server without stopping the client process]] +===[[how-to-detect-channel-disconnection|How to detect channel disconnection]] +===[[how-to-detect-on-client-side-that-the-server-side-state-for-the-process-is-closed|How to detect on client side that the server side state for the process is closed]] +== Eliom Server side +===[[how-do-i-create-a-cryptographically-safe-identifier|How do I create a Cryptographically safe identifier]] +===[[hash-password|Protecting passwords]] +>> diff --git a/tutos/8.0/manual/misc.wiki b/tutos/8.0/manual/misc.wiki new file mode 100644 index 00000000..65d606c9 --- /dev/null +++ b/tutos/8.0/manual/misc.wiki @@ -0,0 +1,521 @@ +=Traditional web interaction in a client-server app= + +<<|outline target="documentation">> + +//The code of this tutorial has been tested with Eliom 6.0.// \\ + +==Multi-user collaborative drawing application== + +We now want to turn our collaborative drawing application into a +multi-user one. Each user will have their own drawing, where everyone +can draw. + +See the +[[https://github.com/ocsigen/graffiti/tree/master/extended/|full code of examples]]. + +===Split application into multiple files and using several canvases=== +<<concepts | Complex eliom project\\Unique elements>> + +We first build a multi-canvas drawing application. Each drawing has +its own URL. Everyone can create a new drawing by going to the +corresponding URL. + +We need to refactor some parts. In particular, we need to handle +different drawings separately. To do this, we turn all global +variables, like the bus, into local ones. + +When an application grows, it becomes useful to split it into multiple +files. For example, we will split graffiti into 4 files. + +* {{{common.ml}}}, which will be part of both client and server, + containing shared types and declarations, +* {{{client.ml}}}, client-only part of the application, +* {{{server.ml}}}, server-only part of the application, and +* {{{graffiti.eliom}}}, which is the only part where we need to + include both client-side and server-side code + +===={{{common.ml}}}==== + +It contains what was previously in {{{ [%shared ... ] }}} +<<code language="ocaml"| +type messages = + ((int * int * int) * int * (int * int) * (int * int)) + [@@deriving json] + +let width = 700 +let height = 400 +>> + +===={{{client.ml}}}==== + +It is almost the same code as what was enclosed in {{{ {client{ ... }} +}}}, with the difference that what was previously in the client value +{{{init_client}}} is now in the function {{{launch_client_canvas}}}. + +<<code language="ocaml"| +open Common +open Js_of_ocaml +open Eliom_content + +let draw ctx ((r, g, b), size, (x1, y1), (x2, y2)) = + let color = CSS.Color.string_of_t (CSS.Color.rgb r g b) in + ctx##.strokeStyle := (Js.string color); + ctx##.lineWidth := float size; + ctx##beginPath; + ctx##(moveTo (float x1) (float y1)); + ctx##(lineTo (float x2) (float y2)); + ctx##stroke + +(* type containing all informations we need to stop interaction + inside the page *) +type drawing_canceller = + { message_thread : unit Lwt.t; + (* the thread reading messages from the bus *) + drawing_thread : unit Lwt.t; + (* the arrow handling mouse events *) + } + +let stop_drawing { message_thread; drawing_thread } = + Lwt.cancel message_thread; + (* cancelling this thread also close the bus *) + Lwt.cancel drawing_thread +>> + +<<| WTF? Notice that the client does not keep data from pages it left.>> +{{{Lwt.cancel t}}} stops thread t. In this case it also closes the + bus on which t is listening. For more informations see the + <<a_manual project="lwt"| Lwt programming guide >> and + <<a_api project="eliom" subproject="client" | module Eliom_bus >>. + +<<code language="ocaml"| +let launch_client_canvas bus image_elt canvas_elt slider = + let canvas = Html.To_dom.of_canvas canvas_elt in + let ctx = canvas##(getContext (Dom_html._2d_)) in + ctx##.lineCap := Js.string "round"; + + let img = Html.To_dom.of_img image_elt in + let copy_image () = ctx##(drawImage img (0.) (0.)) in + if Js.to_bool (img##.complete) + then copy_image () + else img##.onload := Dom_html.handler + (fun ev -> copy_image (); Js._false); + + (* The color palette: *) + let colorpicker, cp_sig = Ot_color_picker.make () in + Html.(Manip.appendChild (Manip.Elt.body ()) colorpicker); + + let x = ref 0 and y = ref 0 in + let set_coord ev = + let x0, y0 = Dom_html.elementClientPosition canvas in + x := ev##.clientX - x0; y := ev##.clientY - y0 in + let compute_line ev = + let oldx = !x and oldy = !y in + set_coord ev; + let h, s, v = Eliom_shared.React.S.value cp_sig in + let r, g, b = Ot_color_picker.hsv_to_rgb h s v in + let rgb = int_of_float r, int_of_float g, int_of_float b in + let size_slider = Html.To_dom.of_input slider in + let size = int_of_string (Js.to_string size_slider##.value) in + (rgb, size, (oldx, oldy), (!x, !y)) + in + let line ev = + let v = compute_line ev in + let _ = Eliom_bus.write bus v in + draw ctx v; + Lwt.return () + in + let t = Lwt_stream.iter (draw ctx) (Eliom_bus.stream bus) in + let drawing_thread = + Js_of_ocaml_lwt.Lwt_js_events.( + mousedowns canvas (fun ev elt -> + Dom.preventDefault ev; + set_coord ev; + let%lwt () = line ev in + Lwt.pick [mousemoves Dom_html.document (fun a _ -> line a); + let%lwt ev = mouseup Dom_html.document in line ev])) + in + { message_thread = t; + drawing_thread = drawing_thread } +>> + +===={{{server.ml}}}==== + +It contains almost all the server parts of the code. +<<code language="ocaml"| +open Eliom_content +open Common +open Lwt + +module My_app = + Eliom_registration.App (struct + let application_name = "graffiti" + let global_data_path = None + end) +>> + +The main difference is that the bus is now local. +<<code language="ocaml"| +let launch_server_canvas () = + let bus = Eliom_bus.create [%json: messages] in + + let draw_server, image_string = + let rgb_ints_to_floats (r, g, b) = + float r /. 255., float g /. 255., float b /. 255. in + let surface = Cairo.Image.create Cairo.Image.ARGB32 ~w:width ~h:height in + let ctx = Cairo.create surface in + ((fun (rgb, size, (x1, y1), (x2, y2)) -> + + (* Set thickness of brush *) + let r, g, b = rgb_ints_to_floats rgb in + Cairo.set_line_width ctx (float size) ; + Cairo.set_line_join ctx Cairo.JOIN_ROUND ; + Cairo.set_line_cap ctx Cairo.ROUND ; + Cairo.set_source_rgb ctx r g b ; + + Cairo.move_to ctx (float x1) (float y1) ; + Cairo.line_to ctx (float x2) (float y2) ; + Cairo.Path.close ctx ; + + (* Apply the ink *) + Cairo.stroke ctx ; + ), + (fun () -> + let b = Buffer.create 10000 in + (* Output a PNG in a string *) + Cairo.PNG.write_to_stream surface (Buffer.add_string b); + Buffer.contents b + )) + in + let _ = Lwt_stream.iter draw_server (Eliom_bus.stream bus) in + bus,image_string + +let graffiti_info = Hashtbl.create 0 + +let imageservice = + Eliom_registration.String.create + ~path:(Eliom_service.Path ["image"]) + ~headers: + (Cohttp.Header.add_list (Cohttp.Header.init ()) + [(Ocsigen_header.Name.(to_string cache_control), "no-cache") ; + (Ocsigen_header.Name.(to_string expires), string_of_int 0)]) + ~meth: + (Eliom_service.Get + (let open Eliom_parameter in string "name" ** int "q")) + (* we add another parameter for the browser not to cache: at least + for chrome, there is no way to force the browser to reload the + image without leaving the application *) + (fun (name,_) () -> + try%lwt + let _ ,image_string = Hashtbl.find graffiti_info name in + Lwt.return (image_string (), "image/png") + with + | Not_found -> Lwt.fail Eliom_common.Eliom_404) + +let get_bus (name:string) = + (* create a new bus and image_string function only if it did not exists *) + try + fst (Hashtbl.find graffiti_info name) + with + | Not_found -> + let bus,image_string = launch_server_canvas () in + Hashtbl.add graffiti_info name (bus, image_string); + bus +>> + +The main page now contains only a form to choose to which drawing you +want to go. The drawing will be sent by the +{{{multigraffiti_service}}} service, registered in +{{{graffiti.eliom}}}. + +<<code language="ocaml"| +let main_service = + Eliom_service.create + ~path:(Eliom_service.Path [""]) + ~meth:(Eliom_service.Get (Eliom_parameter.unit)) + () + +let multigraffiti_service = + Eliom_service.create + ~path:(Eliom_service.Path [""]) + ~meth:(Eliom_service.Get (Eliom_parameter.(suffix (string "name")))) + () + +let choose_drawing_form () = + Html.D.Form.get_form ~service:multigraffiti_service + (fun (name) -> + [Html.D.p [ + Html.D.txt "drawing name: "; + Html.D.Form.input ~input_type:`Text ~name + Html.D.Form.string; + Html.D.br (); + Html.D.Form.input ~input_type:`Submit ~value:"Go" + Html.D.Form.string + ]]) + +let oclosure_script = + Html.Id.create_global_elt + (Html.D.js_script + ~uri:(Html.D.Raw.uri_of_string "./graffiti_oclosure.js") ()) + +let make_page body = + Lwt.return + (Html.D.html + (Html.D.head + (Html.D.title (Html.D.txt "Graffiti")) + [ + Html.D.css_link + ~uri:(Html.D.Raw.uri_of_string"./css/closure/common.css") (); + Html.D.css_link + ~uri:(Html.D.Raw.uri_of_string"./css/closure/hsvpalette.css") (); + Html.D.css_link + ~uri:(Html.D.Raw.uri_of_string"./css/slider.css") (); + oclosure_script; + Html.D.css_link + ~uri:(Html.D.Raw.uri_of_string"./css/graffiti.css") (); + ]) + (Html.D.body body)) + +let () = My_app.register ~service:main_service + (fun () () -> + make_page [h1 [txt "Welcome to Multigraffiti"]; + choose_drawing_form ()]) +>> + +<<concept title="Global node and scripts"| + Sometimes we need to control when a script is loaded and reloaded on + page change. Since clicking on links in an Eliom application do not + reload the entire page, already loaded libraries stay loaded. But if + we simply add a script to each page, it will be loaded each time. + We usually don't want that. + + Using <<a_api project="eliom" subproject="server"| val + Eliom_content.Html.Id.create_global_elt>> we can create an xml node + manipulated 'by reference'. If a reference to a script node is + included in a page, it will only be loaded the first time it appears + in the header. This is the case for {{{oclosure_script}}} above. +>> +===={{{graffiti.eliom}}}==== + +Here is the code that mixes client and server parts. + +We first open the corresponding modules for each parts of the +application. + +<<code language="ocaml"| +[%%shared + open Eliom_content.Html.D + open Common +] +[%%client + open Client +] +open Server +>> + +And then we define a function initializing the client application by +side effects in a client value. + +<<code language="ocaml"| +let start_drawing name image canvas slider = + let bus = get_bus name in + ignore [%client + (let canceller = + launch_client_canvas ~%bus ~%image ~%canvas ~%slider + in + Eliom_client.onunload (fun () -> stop_drawing canceller; None) + : unit) + ] +>> + +The function registered by <<a_api project="eliom" +subproject="client"| val Eliom_service.onunload >> will be called when +the page change inside the application. + +And we finally register the service sending a drawing: + +<<code language="ocaml"| +let counter = ref 0 + +let () = + My_app.register ~service:multigraffiti_service (fun name () -> + (* Some browsers won't reload the image, so we force + them by changing the url each time. *) + incr counter; + let image = + img ~alt:name + ~src:(make_uri ~service:imageservice (name,!counter)) () + in + let slider = + Form.input + ~a:[ + a_id "slider"; + a_input_min (`Number 1); + a_input_max (`Number 80) + ] + ~input_type:`Range + Form.int + in + let canvas = + canvas ~a:[a_width width; a_height height] + [txt "your browser doesn't support canvas"; br (); image] + in + start_drawing name image canvas slider; + make_page + [h1 [txt name]; + choose_drawing_form (); + canvas; + div [slider]]) +>> + +At this point, you can run your application on the server provided +that you installed the css and images directories in the main +directory of your application, build it using this +[[https://github.com/ocsigen/graffiti/tree/master/extended/Makefile|Makefile]] +along with the appropriate +[[https://github.com/ocsigen/graffiti/tree/master/extended/Makefile.options|Makefile.options]], +and configured it using +[[https://github.com/ocsigen/graffiti/tree/master/extended/graffiti.conf.in|graffiti.conf.in]], +as the basis for your configuration file. + +===Mixing client-server application with traditional web interaction=== + +We now want to restrict the site to connected users. + +From the previous chapter, we copy the code handling users to +{{{server.ml}}}: + +<<code language="ocaml"| +let connection_service = Eliom_service.create + ~path:Eliom_service.No_path + ~meth:(Eliom_service.Post ( + Eliom_parameter.unit, + Eliom_parameter.(string "name" ** string "password") + )) + () + +let disconnection_service = Eliom_service.create + ~path:Eliom_service.No_path + ~meth:(Eliom_service.Post (Eliom_parameter.unit, Eliom_parameter.unit)) + () + +let create_account_service = + Eliom_service.create + ~path:(Eliom_service.Path [""]) + ~meth:(Eliom_service.Post + (Eliom_parameter.unit, + Eliom_parameter.(string "name" ** string "password"))) + +let user_table = Ocsipersist.Polymorphic.open_table "user_table" + +let check_pwd name pwd = + try%lwt + let%lwt saved_password = Ocsipersist.Polymorphic.find user_table name in + Lwt.return (pwd = saved_password) + with Not_found -> Lwt.return false + +let () = Eliom_registration.Action.register + ~service:create_account_service + (fun () (name, pwd) -> Ocsipersist.Polymorphic.add user_table name pwd) + +let () = Eliom_registration.Action.register + ~service:connection_service + (fun () (name, password) -> + match%lwt check_pwd name password with + | true -> Eliom_state.set_volatile_data_session_group + ~scope:Eliom_common.default_session_scope name; + Lwt.return () + | false -> Lwt.return ()) + +let () = + Eliom_registration.Action.register + ~service:disconnection_service + (fun () () -> + Eliom_state.discard ~scope:Eliom_common.default_session_scope ()) + +let disconnect_box () = + Html.D.Form.post_form ~service:disconnection_service + (fun _ -> + [Html.D.p [ + Html.D.Form.input + ~input_type:`Submit ~value:"Log out" + Html.D.Form.string + ] + ]) () + +let login_name_form service button_text = + Html.D.Form.post_form ~service + (fun (name1, name2) -> + [Html.D.p [ + Html.D.txt "login: "; + Html.D.Form.input ~input_type:`Text ~name:name1 + Html.D.Form.string; + Html.D.br (); + Html.D.txt "password: "; + Html.D.Form.input ~input_type:`Password ~name:name2 + Html.D.Form.string; + Html.D.br (); + Html.D.Form.input ~input_type:`Submit ~value:button_text + Html.D.Form.string + ]]) () +>> + +We make a customized registration module such that disconnected users +(those for which the username reference is not set), are automaticaly +shown a connection box. This way the other pages can assume that the +username is always available. + +<<code language="ocaml"| +let default_content () = + make_page + [Html.D.h1 [Html.D.txt "Welcome to Multigraffiti"]; + Html.D.h2 [Html.D.txt "log in"]; + login_name_form connection_service "Connect"; + Html.D.h2 [Html.D.txt "create account"]; + login_name_form create_account_service "Create account";] + +module Connected_translate = +struct + type page = string -> My_app.page Lwt.t + let translate page = + match Eliom_state.get_volatile_data_session_group + ~scope:Eliom_common.default_session_scope () with + | None -> default_content () + | Some username -> page username +end + +module Connected = + Eliom_registration.Customize (My_app) (Connected_translate) +>> + +We replace the previous {{{main_service}}} registration : + +<<code language="ocaml"| +let () = My_app.register ~service:main_service + (fun () () -> + make_page [h1 [txt "Welcome to Multigraffiti"]; + choose_drawing_form ()]) +>> + +by : + +<<code language="ocaml"| +let ( !% ) f = fun a b -> return (fun c -> f a b c) + +let () = Connected.register + ~service:main_service + !% (fun () () username -> + make_page + [Html.D.h1 [Html.D.txt ("Welcome to Multigraffiti " ^ username)]; + choose_drawing_form ()]) +>> + +to use that, in {{{graffiti.eliom}}} we just replace add a call +to {{{disconnect_box}}} +<<code language="ocaml"| + [h1 [txt name]; + disconnect_box (); + choose_drawing_form (); + canvas;]) +>> + +[[wiki:manual/interaction|prev]] diff --git a/tutos/8.0/manual/mobile.wiki b/tutos/8.0/manual/mobile.wiki new file mode 100644 index 00000000..8fce4220 --- /dev/null +++ b/tutos/8.0/manual/mobile.wiki @@ -0,0 +1,43 @@ += Mobile applications with Ocsigen + +Since Eliom 6.0, the Ocsigen framework provides infrastructure for +building mobile applications. This enables rapid development of +Android, iOS, and Windows Mobile apps with the same APIs and +programming style as for a regular client-server Web application. In +fact, one single codebase can be used to produce all these +applications simultaneously. + +The easiest way to get started with Ocsigen-based mobile development +is to use [[wiki("ocsigen-start"):|Ocsigen-start]]. Ocsigen-start is a +library and skeleton for building "minimum viable product" Web +applications with standard functionality like users, notifications, +etc. This skeleton is immediately usable as a mobile application. You +can install {{{ocsigen-start}}} via OPAM +( {{{opam install ocsigen-start}}} ) +and instantiate its template with the command +{{{eliom-distillery -name ocsimobile -template os.pgocaml}}}. For +launching the mobile application, follow the instructions in the +template's {{{README.md}}}. + +== Programming style + +You need to follow a certain programming style for your Eliom code to +work flawlessly inside an Ocsigen-start mobile app. This style is +described in the <<a_manual project="eliom" chapter="clientserver-services"|chapter on +client services>> from the Eliom manual. The idea is that you +implement as much of your application as possible in shared sections +({{{[%%shared ...]}}} or {{{let%shared ... = ...}}}), and that you +register handlers for your Eliom services on both the client and the +server. The Ocsigen-start template already uses the above programming +style, so refer to the files generated by {{{eliom-distillery}}} for +inspiration. + +== Going further + +* [[wiki("ocsigen-toolkit"):|Ocsigen-toolkit]] provides a set of user + interface widgets that are particularly useful for mobile applications. + +* Danny Willems provides a comprehensive set of + [[https://github.com/dannywillems/ocaml-cordova-plugin-list|OCaml + bindings to Cordova plugins]]. These can readily be used for your + Eliom mobile application. diff --git a/tutos/8.0/manual/music.wiki b/tutos/8.0/manual/music.wiki new file mode 100644 index 00000000..4880b4f1 --- /dev/null +++ b/tutos/8.0/manual/music.wiki @@ -0,0 +1,33 @@ +=Listening music= +<<concepts |Persistence of the client application>> + +We will add an audio player to the page that will stay when page +changes. This emphasises the fact that browsing inside an application +does not stop the client side code: the music keeps playing when the +content of the page and the url change. + +We first create the player node at toplevel. +<<code language="ocaml"| +let player = + Eliom_content.Html.Id.create_global_elt + (audio + ~srcs:(make_uri (Eliom_service.static_dir ()) + ["music.ogg"], + []) + ~a:[a_autoplay (`Autoplay);a_controls (`Controls)] + [txt "Your browser does not support audio element" ]) +>> + +And we insert the player in the page. + +And that's all! Since the {{{player}}} node is declared unique, no new +player is created when the page changed: this is exact same node. + +<<wip | In fact browsers stop the player as soon as the dom +element is manipulated. That happens when we change the page: to +continue playing the player should not be present as an element of the +page>> + +To run this example, you will need to add an ogg file in the static directory. +If you can't find one, there is one here: +[[http://www.gnu.org/music/free-software-song.html]]. diff --git a/tutos/8.0/manual/ocsipersist.wiki b/tutos/8.0/manual/ocsipersist.wiki new file mode 100644 index 00000000..43fe6cfc --- /dev/null +++ b/tutos/8.0/manual/ocsipersist.wiki @@ -0,0 +1,49 @@ +=Lightweight database using Ocsipersist= +<<concepts |Persistent tables with Ocsipersist>> + +Ocsipersist is a module for persistent references and tables. + +For persistent references, Eliom has a higher level interface, +called //Eliom references//, and you probably want to use it instead +of using Ocsipersist directly. +For example persistent Eliom references of scope session group +can be used to store information about a user (if the session group +corresponds to the user). + +Ocsipersist can still be useful for creating persistent key-value tables, +if you do not need the full power of a SQL database. + +This tutorial shows how to implement a table for storing users and passwords. + +We first create a table: +<<code language="ocaml"| +let user_table = Ocsipersist.Polymorphic.open_table "user_table" +>> + +Then we can easily handle the user management code: + +<<code language="ocaml"| +let check_pwd name pwd = + try%lwt + lwt saved_password = Ocsipersist.Polymorphic.find user_table name in + Lwt.return (pwd = saved_password) + with + Not_found -> Lwt.return false + +let () = Eliom_registration.Action.register + ~service:create_account_service + (fun () (name, pwd) -> Ocsipersist.Polymorphic.add user_table name pwd) + +let () = Eliom_registration.Action.register + ~service:connection_service + (fun () (name, password) -> + match%lwt check_pwd name password with + | true -> Eliom_reference.set username (Some name) + | false -> Lwt.return ()) +>> + +<<concept title="Ocsipersist"| + Ocsipersist implements simple typed key/value tables. + It can use different backends (currently sqlite and dbm). + For more informations see <<a_api project="ocsigenserver"| type Ocsipersist.table >>. +>> diff --git a/tutos/8.0/manual/pictures.wiki b/tutos/8.0/manual/pictures.wiki new file mode 100644 index 00000000..6cbff690 --- /dev/null +++ b/tutos/8.0/manual/pictures.wiki @@ -0,0 +1,182 @@ +=Saving favorite pictures= +<<concepts |Atom feed>> + +We will now add a button to the Graffiti application to save the current +image. The images will be saved to the filesystem using the module +<<a_api project="lwt"| module Lwt_io>>. We will then make an Atom feed +with the saved images using [[https://github.com/Cumulus/Syndic|Syndic]]. + +To install it, do: +{{{ +opam install syndic +}}} + +We save the images in the directory containing the static contents +under the directory {{{images_saved/username}}}. The {{{username}}} +directory is created if needed. If it already exists {{{mkdir}}} fails +and we do nothing. + +We will add this code in a new file: +===={{{feed.ml}}}==== +<<code language="ocaml"| +open Eliom_content +open Lwt.Infix +open Html.F +open Server + +let static_dir = + match Eliom_config.get_config () with + | [Element ("staticdir", [], [PCData dir])] -> + dir + | [] -> + raise (Ocsigen_extensions.Error_in_config_file + ("<staticdir> option required for <graffiti>")) + | _ -> + raise (Ocsigen_extensions.Error_in_config_file + ("Unexpected content inside graffiti config")) + +let create_dir dir = + try%lwt Lwt_unix.mkdir dir 0o777 with + | Unix.Unix_error (Unix.EEXIST, "mkdir", _) -> Lwt.return_unit + | _ -> + Eliom_lib.debug "could not create the directory %s" dir; + Lwt.return_unit + +let image_dir name = + let dir = static_dir ^ "/graffiti_saved/" in + let%lwt () = create_dir dir in + let dir = dir ^ Eliom_lib.Url.encode name in + let%lwt () = create_dir dir in + Lwt.return dir + +let make_filename name number = + image_dir name >|= ( fun dir -> (dir ^ "/" ^ (string_of_int number) ^ ".png") ) + +let save image name number = + let%lwt file_name = make_filename name number in + let%lwt out_chan = Lwt_io.open_file ~mode:Lwt_io.output file_name in + Lwt_io.write out_chan image +>> + +We number images and associate to each image the time of creation. It +is stocked in an <<a_api project="eliom" subproject="server"| module Ocsipersist >> +table. + +<<code language="ocaml"| +let image_info_table = Ocsipersist.Polymorphic.open_table "image_info_table" +>> + +For each user, we stock a value of type\\ +{{{ int * CalendarLib.Calendar.t * ((int * CalendarLib.Calendar.t) list)}}}. +The first integer is the name under which will be saved the image, the first +time is the last update for that user and the list contains the names and +times of old images. We need those times to timestamp the entries of the feed. + +<<code language="ocaml"| +let save_image username = + let now = CalendarLib.Calendar.now () in + let%lwt image_info_table = image_info_table in + let%lwt number,_,list = + try%lwt Ocsipersist.Polymorphic.find image_info_table username with + | Not_found -> Lwt.return (0,now,[]) + | e -> Lwt.fail e + in + let%lwt () = Ocsipersist.Polymorphic.add image_info_table + username (number+1,now,(number,now)::list) in + let (_,image_string) = Hashtbl.find graffiti_info username in + save (image_string ()) username number + +let save_image_service = + Eliom_service.create + ~meth:(Eliom_service.Post + (Eliom_parameter.unit, Eliom_parameter.string "name")) + ~path:Eliom_service.No_path () + +let () = + Eliom_registration.Action.register + ~service:save_image_service (fun () name -> save_image name) + +let save_image_box name = + Lwt.return + (Html.D.Form.post_form ~service:save_image_service + (fun param_name -> + [p [Html.D.Form.input ~input_type:`Hidden ~name:param_name + ~value:name Html.D.Form.string; + Html.D.Form.button_no_value ~button_type:`Submit [txt "save"]]]) + ()) +>> + +We find the url of the images with <<a_api project="eliom" +subproject="server"| val Eliom_service.static_dir >>. It is a service +taking file path as parameter, serving the content of the static +directory. We use <<a_api project="eliom" subproject="server"| val +Eliom_uri.make_string_uri >> to get the url as a string. + +<<code language="ocaml"| +let feed_service = + Eliom_service.create + ~path:(Eliom_service.Path ["feed"]) + ~meth:(Eliom_service.Get (Eliom_parameter.string "name")) + () + +let local_filename name number = + ["graffiti_saved"; Eliom_lib.Url.encode name ; (string_of_int number) ^ ".png"] + +let rec entries name list = function + | 0 -> [] + | len -> + match list with + | [] -> [] + | (n,saved)::q -> + let uri = + Html.D.make_uri ~absolute:true + ~service:(Eliom_service.static_dir ()) + (local_filename name n) + |> Xml.string_of_uri + |> Uri.of_string in + let content = Syndic.Atom.Src (None, uri) in + let authors = (Syndic.Atom.author name), [] in + let title : Syndic.Atom.text_construct = + Syndic.Atom.Text ("graffiti " ^ name ^ " " ^ (string_of_int n)) in + let entry = + Syndic.Atom.entry ~content ~id:uri ~authors ~title ~updated:saved () in + entry::(entries name q (len - 1)) + +let feed_of_string_page xml = + xml + |> Syndic.Atom.to_xml + |> Syndic.XML.to_string + |> fun string -> string, "" + +let feed name () = + let id = + Xml.string_of_uri + (Html.D.make_uri ~absolute:true ~service:feed_service name) + |> Uri.of_string in + let title : Syndic.Atom.text_construct = + Syndic.Atom.Text ("nice drawings of " ^ name) in + Lwt.catch + (fun () -> + let%lwt image_info_table = image_info_table in + Ocsipersist.Polymorphic.find image_info_table name >|= + (fun (number,updated,list) -> + Syndic.Atom.feed ~id ~updated ~title (entries name list 10) + |> feed_of_string_page)) + ( function Not_found -> + let now = Option.get (Ptime.of_float_s (Unix.gettimeofday ())) in + Lwt.return (Syndic.Atom.feed ~id ~updated:now ~title [] + |> feed_of_string_page) + | e -> Lwt.fail e ) + +let () = Eliom_registration.String.register ~service:feed_service feed +>> + +And then use the new module as follow: + +<<code language="ocaml"| + [ a Feed.feed_service [txt "atom feed"] name; + div (if name = username + then [Feed.save_image_box name] + else [txt "no saving"]); + ] +>> diff --git a/tutos/8.0/manual/reactivemediaplayer.wiki b/tutos/8.0/manual/reactivemediaplayer.wiki new file mode 100644 index 00000000..245ac1d9 --- /dev/null +++ b/tutos/8.0/manual/reactivemediaplayer.wiki @@ -0,0 +1,291 @@ +=Reactive Media Player= + +You should read the [[site:/tuto/manual/music|Playing Music]] tutorial before this one. + +Since version 4, Eliom embeds the +[[http://erratique.ch/logiciel/react|React]] library in order to +provide reactive HTML elements +(<<a_api project="eliom" subproject="server"| module Eliom_content.Html.R >>). + + +<<webonly| The final Eliom code is available +[[https://github.com/ocsigen/tutorial/tree/master/files/tutorial/chapter3/reactive_media_player/reactive_media_player.eliom|for download]]. >> + +==@@id="basics"@@ Basics== + +A reactive element, or more generally a reactive value, depends on the +current value of a signal. For instance : + +<<code language="ocaml" class="shared"| +[%%shared +open Eliom_content +open Html +] +>> + +<<code language="ocaml" class="client"| +let%client s, set_s = React.S.create 0 (* signal creation *) +>> + +<<code language="ocaml" class="shared"| +let%shared example_div () = + C.node {{R.txt (React.S.map string_of_int s)}} + +let%shared incr_button = + D.(button + ~button_type:`Button + ~a:[a_onclick [%client fun _ -> set_s (succ (React.S.value s)) ]] + [txt "Increment"]) +>> + +The signal {{{s}}} carries an int value initialized at 0 and +{{{set_s}}} is the update function generating an occurence of the +signal. + +{{{example_div}}} is a {{{<div>}}} containing a string which depends +on the value of s. + +The magic part: we never have to explicitly update +{{{example_div}}}. Its behavior is declaratively described in it's own +code, and not in the code of the button. + +<<concept title="Client node on the server"| +{{{C.node}}} takes a client node and brings it to the server side. +>> + +<<concept title="Step semantics"| +**Warning** If you haven't read the React semantics, be aware of this: +a step occurence of a signal {{{s}}} happens when the update function +is called on the signal or on a other signal {{{s'}}} which {{{s}}} +depends on. But moreover, this update call must at least **modify** +the signal current value, otherwise it's not a step. + +This can be seen when there are side effects (like print) in the code +of functions mapped to the signal. If the update function does not +modify the signal value, the printing does not happen. + +The test equality function of a signal can be set in the {{{eq}}} +optional parameters of React.S functions producing a signal (like +{{{create}}}). >> + + + +==@@id="frp_medial_player"@@ Functional Reactive Media Player== + + + +This part explains how to create a simple media player, similar to the +[[site:/tuto/manual/music|Playing Music]] tutorial but with custom +controls.We will apply +[[https://en.wikipedia.org/wiki/Functional_reactive_programming|FRP (Functional Reactive Programming)]]. + + + +In order to provide a short tutorial, we only create three controls: +play, pause and seek/progress bar. So, let's write the corresponding +type: + +<<code language="ocaml" class="shared"| +[%%shared + open Eliom_content + open Html + + type action = Play | Pause | Seek of float +] +>> + +<<code language="ocaml" class="client"| +let%client media_s, set_media_s = React.S.create Pause +>> + +Each HTML element emits a signal value corresponding to its action. +It is enough to create our "play" and "pause" inputs. + +<<code language="ocaml" class="server"| +let pause_button () = + D.(Form.button_no_value + ~button_type:`Button + ~a:[a_onclick [%client fun _ -> set_media_s Pause ]] + [txt "Pause"]) + +let play_button () = + D.(Form.button_no_value + ~button_type:`Button + ~a:[a_onclick [%client fun _ -> set_media_s Play ]] + [txt "Play"]) +>> + +<<concept title="Abstract the Js events"| +A nice thing about FRP is that we can abstract JavaScript +events and only use signals. +The JS event handler is only a function raising a signal. +>> + + + +To use our buttons, we now create a media (audio or video) HTML +element on the server side. + +<<code language="ocaml" class="server"| +let media_uri = + Html.D.make_uri + ~service:(Eliom_service.static_dir ()) + ["hb.mp3"] + +let media_tag () = + let media = D.(audio ~src:media_uri [txt "alt"]) in + let _ = [%client + (Lwt.async (fun () -> + let media = To_dom.of_audio ~%media in + let media_map = function + | Play -> + media##play + | Pause -> + media##pause + | Seek f -> + media##.currentTime := (f /. 100. *. media##.duration) + in Lwt_react.S.keep (React.S.map media_map media_s) ; + Lwt_js_events.timeupdates media (fun _ _ -> + set_progress_s (media##.currentTime, media##.duration) ; + Lwt.return () + )) + : unit) + ] in + media +>> + +The function {{{media_tag}}} builds an {{{<audio>}}} element. The +code in {{{ [%client ... ] }}} is on the client part. It's an Lwt +thread that maps a function {{{media_action -> unit}}} to the signal +{{{media_s}}}. + +<<concept title="Playing video"| +The code for playing video is conceptually similar. You just replace +the {{{audio}}} tag by a {{{video}}} tag. But be careful, not all +browsers are compatible with all formats. +>> + +<<code language="ocaml" class="server"| +module React_Player_app = + Eliom_registration.App + (struct + let application_name = "react_player" + end) + +let media_service = + Eliom_service.create + ~path:(Eliom_service.Path []) + ~meth:(Eliom_service.Get Eliom_parameter.unit) + () + +let () = + React_Player_app.register + ~service:media_service + (fun name () -> + let body = + D.(body [ + h2 [txt "Media"]; + media_tag (); + div [play_button (); pause_button (); progress_bar ()] + ]) + in + Lwt.return (Eliom_tools.D.html ~title:"Media" ~css:[] body)) +>> + +Now you should have an ΗΤΜL node with an audio tag, and two buttons: +play and pause. The progress bar is slightly harder to understand, but +thanks to FRP, very easy to write. It's basically an {{{input}}} with +{{{range}}} type. In our program, the progress bar must emit the +signal {{{media_s}}} with the value {{{Seek f}}} at input handling. +Then, it must evolve during media playback, for which we need another +signal. To conclude, we must check that the display (the value) of the +progress bar is not modified when the user is seeking. + +<<code language="ocaml" class="client"| +let%client progress_s, set_progress_s = React.S.create (0., 0.) + +let%client unblock_s, set_unblock_s = React.S.create true +>> + +<<code language="ocaml" class="server"| +let progress_bar () = + let progress_value = + [%client + (let f (time, duration) = + if duration = 0. then 0. else time /. duration *. 100. + in + React.S.map f progress_s + : float React.signal) + ] in + let attrs = D.([ + a_input_min 0.; + a_input_max 100.; + a_onmousedown [%client fun _ -> set_unblock_s false]; + a_onmouseup [%client fun _ -> set_unblock_s true]; + C.attr [%client + R.a_value + (React.S.map (Printf.sprintf "%0.f") + (React.S.on unblock_s 0. ~%progress_value))] + ]) + in + let d_input = + D.Form.input ~input_type:`Range ~value:0. ~a:attrs + D.Form.float + in + let _ = [%client + (Lwt.async (fun () -> + let d_input = To_dom.of_input ~%d_input in + Lwt_js_events.inputs d_input (fun _ _ -> + set_media_s (Seek (Js.parseFloat d_input##.value)) ; + Lwt.return () + )) + : unit) + ] in + d_input +>> + +<<concept title="Reactive attributes and React.S.on" | + +The function {{{R.a_value}}} +(under <<a_api project="eliom" subproject="server"| module Eliom_content.Html >>) +is a reactive attribute value. {{{React.S.on c d s}}} is equal to +{{{s}}} when {{{c}}} is true, otherwise it is equal to {{{d}}} (in +case {{{c}}} has never been true). Which means we update the attribute +value of our input only if unblock is true. + +>> + +To end this tutorial, you can add a {{{progress_bar ()}}} call inside +the div containing play and pause. We also need a mechanism which +emits the {{{progress_s}}} signal. We modify the media tag with an +eventhandler on {{{timeupdate}}}. + +<<code language="ocaml" class="server"| +let media_tag () = + let media = D.(audio ~src:media_uri [txt "alt"]) in + let _ = [%client + (Lwt.async (fun () -> + let media = To_dom.of_audio ~%media in + let media_map = function + | Play -> + media##play + | Pause -> + media##pause + | Seek f -> + media##.currentTime := (f /. 100. *. media##.duration) + in Lwt_react.S.keep (React.S.map media_map media_s) ; + Lwt_js_events.timeupdates media (fun _ _ -> + set_progress_s (media##.currentTime, media##.duration) ; + Lwt.return () + )) + : unit) + ] in + media +>> + + + +====Exercises==== + +* Add a control to set the volume +* Add an {{{Eliom_bus}}} to control several clients diff --git a/tutos/8.0/manual/rest.wiki b/tutos/8.0/manual/rest.wiki new file mode 100644 index 00000000..76ca4401 --- /dev/null +++ b/tutos/8.0/manual/rest.wiki @@ -0,0 +1,506 @@ +=RESTful JSON API using Eliom= +<<concepts|RESTful API\\PUT and DELETE services>> + +This tutorial will show you how to create a simple, yet complete, REST API +using JSON as the serialization format. + +To illustrate our example, let's say we want to give access to a database of +locations storing a description and coordinates (latitude and longitude). + +To be RESTful, our interface will comply with the following principles: + +* URLs and GET params identify resources +* HTTP methods are used to define actions to perform (GET, POST, PUT, DELETE) +* GET action is safe (no side-effect) +* PUT and DELETE actions are idempotent +* Requests are stateless + +With this in mind, our goal will be to implement CRUD (Create, Read, Update, +Delete) functions to handle our resources. We want the following requests to be +valid: + +{{{GET http://localhost/}}} will return all available locations. + +{{{GET http://localhost/ID}}} will return location associated to {{{ID}}}. + +{{{POST http://localhost/ID}}} with content: + +<<code language="json"| +{ + "description": "Paris", + "coordinates": { + "latitude": 48.8567, + "longitude": 2.3508 + } +} +>> + +will store this location in the database. + +{{{PUT http://localhost/ID}}}, with some content, will update the location +associated to {{{ID}}}. + +{{{DELETE http://localhost/ID}}} will delete the location associated to +{{{ID}}}. + +==@@id="requirements"@@ Requirements== + +* eliom >= 4.0 +* yojson +* ppx_deriving +* ppx_deriving_yojson + +You need some knowledge about Eliom to be able to fully understand this +tutorial. It's not meant to be an Eliom introduction. + +The following browser extensions are useful to manually test your REST APIs: + +* [[https://addons.mozilla.org/en-US/firefox/addon/restclient/|RESTClient]] for +Firefox +* +[[https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm|Postman]] +for Chrome + +==@@id="types"@@ Data types== + +We start by defining our database types, that is to say the way we will +represent our locations and associated information. Each location will be +associated to a unique and arbitrary identifier, and will hold the following +information: a description and coordinates (made of a latitude and a +longitude). + +We represent coordinates with decimal degrees, and use the +{{{ppx_deriving_yojson}}} library to parse and generate JSON serialization of our +types. + +We use a dedicated {{{error}}} type returned when something is wrong with the +request itself or with the processing of the request. + +As for the database, we use a simple {{{Ocsipersist}}} table. + +<<code language="ocaml"| +type coordinates = { + latitude : float; + longitude : float; +} [@@deriving yojson] + +type location = { + description : string option; + coordinates : coordinates; +} [@@deriving yojson] + +(* List of pairs (identifier * location) *) +type locations = + (string * location) list + [@@deriving yojson] + +type error = { + error_message : string; +} [@@deriving yojson] + +let db : location Ocsipersist.table Lwt.t = + Ocsipersist.Polymorphic.open_table "locations" +>> + +<<concept title="Syntax extensions"| + +In order to successfully build this tutorial's source code, your +{{{Makefile.options}}} must contain the following settings: +<<code language="makefile"| +# OCamlfind packages for the server +SERVER_PACKAGES := ppx_deriving_yojson lwt_ppx js_of_ocaml-ppx.deriving +# OCamlfind packages for the client +CLIENT_PACKAGES := lwt_ppx ppx_deriving_yojson js_of_ocaml-ppx js_of_ocaml-ppx.deriving +>> + +This is due to the fact, that in the code snippet above we use a syntax extension +provided by the {{{ppx_deriving_yojson}}} package.// +>> + +==@@id="services"@@ Services definition== + +First, let's define common service parameters: + +* The {{{path}}} of the API: it's the same for all services. + +* The GET parameter, which is an optional identifier given as a URL suffix. We +set it as optional so we can distinguish GET requests for all resources or a +single one, and return a detailed error if the identifier is missing in POST, +PUT and DELETE requests. An alternative would be to use two services at the same +path (one with id and the other without). + +<<code language="ocaml"| +let path = Eliom_service.Path [""] + +let get_params = + Eliom_parameter.(suffix (neopt (string "id"))) +>> + +Next step is to define our API services. We define four of them with the same +path, using the four HTTP methods at our disposal: + +* GET method will be used to access the database, either all of it if no +identifier is provided, or a single resource otherwise. An error will be +returned if no resource matches the identifier. + +* POST method will be used to create a new resource (or update it if it already +exists). We set a single POST parameter: {{{Eliom_parameter.raw_post_data}}}, +in order to retrieve raw JSON and bypass POST parameters decoding. + +* PUT method will be used to update an existing resource. An error will be +returned if no resource matches the identifier. We don't need to define POST +parameter, PUT services takes {{{Eliom_parameter.raw_post_data}}} as default +content. + +* DELETE method will be used to delete an existing resource. An error will be +returned if no resource matches the identifier. + +<<code language="ocaml"| +let read_service = + Eliom_service.create + ~path + ~meth:(Eliom_service.Get get_params) + () + +let create_service = + Eliom_service.create + ~path + ~meth:(Eliom_service.Post (get_params, Eliom_parameter.raw_post_data)) + () + +let update_service = + Eliom_service.create + ~path + ~meth:(Eliom_service.Put get_params) + () + +let delete_service = + Eliom_service.create + ~path + ~meth:(Eliom_service.Delete get_params) + () +>> + +==@@id="handlers"@@ Handlers== + +Let's start the handlers definition with a few helper values and functions +used by handlers. + +Since we use the low-level {{{Eliom_registration.String.send}}} function to +send our response, we wrap it in three specialized functions: {{{send_json}}}, +{{{send_error}}} and {{{send_success}}} (this one only send the 200 OK status +code, without any content). + +Another function helps us to check the received {{{Content-type}}} is the +expected one, by matching it against a MIME type. In our example, we'll verify +that we are receiving JSON. + +The {{{read_raw_content}}} function retrieve at most {{{length}}} characters +from the {{{raw_content}}} Ocsigen stream. + +<<code language="ocaml"| +let json_mime_type = "application/json" + +let send_json ~code json = + Eliom_registration.String.send ~code (json, json_mime_type) + +let send_error ~code error_message = + let json = Yojson.Safe.to_string (error_to_yojson {error_message}) in + send_json ~code json + +let send_success () = + Eliom_registration.String.send ~code:200 ("", "") + +let check_content_type ~mime_type content_type = + match content_type with + | Some ((type_, subtype), _) + when (type_ ^ "/" ^ subtype) = mime_type -> true + | _ -> false + +let read_raw_content ?(length = 4096) raw_content = + let content_stream = Ocsigen_stream.get raw_content in + Ocsigen_stream.string_of_stream length content_stream +>> + +Then we define our handlers in order to perform the required actions and +return a response. + +POST and PUT handlers will read raw body content as JSON and use {{{Yojson}}} +to convert it to our types. + +We use HTTP status codes in responses, with these meaning: + +* 200 (OK): the request succeeded. +* 400 (Bad request): something is wrong with the request (missing parameter, +parsing error...). +* 404 (Not found): no resource matches the provided identifier. + +The GET handler either returns a single location if an identifier is provided, +or a list of all existing locations otherwise. + +<<code language="ocaml"| +let read_handler id_opt () = + let%lwt db = db in + match id_opt with + | None -> + Ocsipersist.Polymorphic.fold_step + (fun id loc acc -> Lwt.return ((id, loc) :: acc)) db [] + ~>>= fun locations -> + let json = Yojson.Safe.to_string (locations_to_yojson locations) in + send_json ~code:200 json + | Some id -> + catch + (fun () -> + Ocsipersist.Polymorphic.find db id ~>>= fun location -> + let json = + Yojson.Safe.to_string (location_to_yojson location) in + send_json ~code:200 json) + (function + | Not_found -> + (* [id] hasn't been found, return a "Not found" message *) + send_error ~code:404 ("Resource not found: " ^ id) + | _ -> send_error ~code:500 "Internal server error" ) +>> + +Next, let's create a common function for POST and PUT handlers, which have a +very similar behaviour. The only difference is that a PUT request with a +non-existing identifier will fail (thus only accepting update requests, and +rejecting creations), whereas the same request with POST method will succeed (a +new location associated to the identifier will be created). + +<<code language="ocaml"| +let edit_handler_aux ?(create = false) id_opt (content_type, raw_content_opt) = + let%lwt db = db in + if not (check_content_type ~mime_type:json_mime_type content_type) then + send_error ~code:400 "Content-type is wrong, it must be JSON" + else + match id_opt, raw_content_opt with + | None, _ -> + send_error ~code:400 "Location identifier is missing" + | _, None -> + send_error ~code:400 "Body content is missing" + | Some id, Some raw_content -> + read_raw_content raw_content ~>>= fun location_str -> + catch (fun () -> + (if create then + Lwt.return_unit + else + Ocsipersist.Polymorphic.find db id ~>>= fun _ -> Lwt.return_unit) + ~>>= fun () -> + let location = + (let open Result in + let loc_result = location_of_yojson (Yojson.Safe.from_string location_str) in + match loc_result with + Ok loc-> loc + | Error _ -> raise Deriving_Yojson.Failed ) in + Ocsipersist.Polymorphic.add db id location ~>>= fun () -> + send_success ()) + (function + | Not_found -> + send_error ~code:404 ("Location not found: " ^ id) + | Deriving_Yojson.Failed -> + send_error ~code:400 "Provided JSON is not valid" + | _ -> send_error ~code:500 "Internal server error") + +let create_handler id_opt content = + edit_handler_aux ~create:true id_opt content + +let update_handler id_opt content = + edit_handler_aux ~create:false id_opt content +>> + +We need a fourth handler to delete locations: + +<<code language="ocaml"| +let%lwt db = db in + match id_opt with + | None -> + send_error ~code:400 "An id must be provided to delete a location" + | Some id -> + Ocsipersist.Polymorphic.remove db id ~>>= fun () -> + send_success () +>> + +==@@id="registration"@@ Services registration== + +Finally we register services with the {{{Eliom_registration.Any}}} module in +order to have full control on the sent response. This way, we'll be able to +send an appropriate HTTP status code depending on what happens during the +request processing (parsing error, resource not found...), as seen above when +defining handlers. + +<<code language="ocaml"| +let () = + Eliom_registration.Any.register read_service read_handler; + Eliom_registration.Any.register create_service create_handler; + Eliom_registration.Any.register update_service update_handler; + Eliom_registration.Any.register delete_service delete_handler; + () +>> + +==@@id="source"@@ Full source== + +<<code language="ocaml"| +open Lwt + +(**** Data types ****) + +type coordinates = { + latitude : float; + longitude : float; +} [@@deriving yojson] + +type location = { + description : string option; + coordinates : coordinates; +} [@@deriving yojson] + +(* List of pairs (identifier * location) *) +type locations = + (string * location) list + [@@deriving yojson] + +type error = { + error_message : string; +} [@@deriving yojson] + +let db : location Ocsipersist.table Lwt.t = + Ocsipersist.Polymorphic.open_table "locations" + + +(**** Services ****) + +let path = Eliom_service.Path [""] + +let get_params = + Eliom_parameter.(suffix (neopt (string "id"))) + +let read_service = + Eliom_service.create + ~path + ~meth:(Eliom_service.Get get_params) + () + +let create_service = + Eliom_service.create + ~path + ~meth:(Eliom_service.Post (get_params, Eliom_parameter.raw_post_data)) + () + +let update_service = + Eliom_service.create + ~path + ~meth:(Eliom_service.Put get_params) + () + +let delete_service = + Eliom_service.create + ~path + ~meth:(Eliom_service.Delete get_params) + () + +(**** Handler helpers ****) + +let json_mime_type = "application/json" + +let send_json ~code json = + Eliom_registration.String.send ~code (json, json_mime_type) + +let send_error ~code error_message = + let json = Yojson.Safe.to_string (error_to_yojson {error_message}) in + send_json ~code json + +let send_success () = + Eliom_registration.String.send ~code:200 ("", "") + +let check_content_type ~mime_type content_type = + match content_type with + | Some ((type_, subtype), _) + when (type_ ^ "/" ^ subtype) = mime_type -> true + | _ -> false + +let read_raw_content ?(length = 4096) raw_content = + let content_stream = Ocsigen_stream.get raw_content in + Ocsigen_stream.string_of_stream length content_stream + +(**** Handlers ****) + +let read_handler id_opt () = + let%lwt db = db in + match id_opt with + | None -> + Ocsipersist.Polymorphic.fold_step + (fun id loc acc -> Lwt.return ((id, loc) :: acc)) db [] + ~>>= fun locations -> + let json = Yojson.Safe.to_string (locations_to_yojson locations) in + send_json ~code:200 json + | Some id -> + catch + (fun () -> + Ocsipersist.Polymorphic.find db id ~>>= fun location -> + let json = + Yojson.Safe.to_string (location_to_yojson location) in + send_json ~code:200 json) + (function + | Not_found -> + (* [id] hasn't been found, return a "Not found" message *) + send_error ~code:404 ("Resource not found: " ^ id) + | _ -> assert false) + +let edit_handler_aux ?(create = false) id_opt (content_type, raw_content_opt) = + let%lwt db = db in + if not (check_content_type ~mime_type:json_mime_type content_type) then + send_error ~code:400 "Content-type is wrong, it must be JSON" + else + match id_opt, raw_content_opt with + | None, _ -> + send_error ~code:400 "Location identifier is missing" + | _, None -> + send_error ~code:400 "Body content is missing" + | Some id, Some raw_content -> + read_raw_content raw_content ~>>= fun location_str -> + catch (fun () -> + (if create then + Lwt.return_unit + else + Ocsipersist.Polymorphic.find db id ~>>= fun _ -> Lwt.return_unit) + ~>>= fun () -> + let location = + (let open Result in + let loc_result = location_of_yojson (Yojson.Safe.from_string location_str) in + (function + Ok loc-> loc + | Error _ -> raise Deriving_Yojson.Failed ) loc_result) in + Ocsipersist.Polymorphic.add db id location ~>>= fun () -> + send_success ()) + (function + | Not_found -> + send_error ~code:404 ("Location not found: " ^ id) + | Deriving_Yojson.Failed -> + send_error ~code:400 "Provided JSON is not valid" + | _ -> assert false) + +let create_handler id_opt content = + edit_handler_aux ~create:true id_opt content + +let update_handler id_opt content = + edit_handler_aux ~create:false id_opt content + +let delete_handler id_opt _ = + let%lwt db = db in + match id_opt with + | None -> + send_error ~code:400 "An id must be provided to delete a location" + | Some id -> + Ocsipersist.Polymorphic.remove db id ~>>= fun () -> + send_success () + +(* Register services *) + +let () = + Eliom_registration.Any.register read_service read_handler; + Eliom_registration.Any.register create_service create_handler; + Eliom_registration.Any.register update_service update_handler; + Eliom_registration.Any.register delete_service delete_handler; + () +>> diff --git a/tutos/8.0/manual/start.wiki b/tutos/8.0/manual/start.wiki new file mode 100644 index 00000000..b625c60e --- /dev/null +++ b/tutos/8.0/manual/start.wiki @@ -0,0 +1,109 @@ +<<header| =Your first app in 5 minutes >> + +//The code of this tutorial has been tested against Eliom 6.0.// \\ + +<<|wip|This tutorial is work in progress. Please send us any corrections or comments./>> + +This tutorial describes how to get started with Ocsigen +quickly. Thanks to an application template provided by the Ocsigen +team, you will get to a working application with standard +functionality like users and notifications in only a few minutes. This +template can be used for learning purposes, or even as a starting +point for your own product. + +The template you will use comes from [[wiki("ocsigen-start"):|Ocsigen Start]]. +Ocsigen Start provides a complete mechanism for adding and managing +users, including activation links and password reset. It additionally +contains a module for displaying tips, a module for sending +notifications to your users, and other utilities typically needed in +modern Web applications. + +The template comes with a default style (developed with +SASS) that follows modern Web practices, e.g., it is responsive and +thus mobile-friendly. Of course, you are free to modify the style to +match your own brand or personality. + +The template is multi-platform. This means that it can run on a Web +browser or as a mobile app for Android, iOS, or Windows. + +<<div class="screenshots"| +[[files/screenshots/start1.png| +{{files/screenshots/start1.png|Ocsigen Start}}]] +[[files/screenshots/start2.png| +{{files/screenshots/start2.png|Ocsigen Start}}]] +>> + +<<div class="screenshots"| +[[files/screenshots/start-mobile-1.png| +{{files/screenshots/start-mobile-1.png|Ocsigen Start}}]] +[[files/screenshots/start-mobile-2.png| +{{files/screenshots/start-mobile-2.png|Ocsigen Start}}]] +[[files/screenshots/start-mobile-4.png| +{{files/screenshots/start-mobile-4.png|Ocsigen Start}}]] +>> + +== Installation + +Install the dependencies ({{{postgresql}}} and one of {{{sass}}}, {{{sassc}}}). +On Debian-based systems: +{{{ +apt install postgresql ruby-sass +}}} + +Install Ocsigen Start and all its OCaml dependencies using OPAM: +{{{ +opam install ocsigen-start +}}} + +Create your application using Eliom distillery: +{{{ +eliom-distillery -name myapp -template os.pgocaml +}}} + +Have a look at the +[[https://github.com/ocsigen/ocsigen-start/blob/master/template.distillery/README.md|README]] +file to learn how to compile it +and, possibly, to generate the mobile applications. + +== I installed it and compiled it, what next? + +It is now time to learn Ocsigen! The template is a great way to get +started, because it comes with multiple runnable examples that show +you: + +* How to do remote procedure calls (RPCs); +* How to save session data (in //Eliom references//); +* How to use the notification system; +* How to create reactive pages; +* Many examples of widgets from [[wiki("ocsigen-toolkit"):|Ocsigen Toolkit]]: +** Carousel +** Pages with several tabs +** Time and date pickers +* ... + +The corresponding files are well-commented, so you can quickly find +out how things work. + +<<div class="screenshots"| +[[files/screenshots/start3.png| +{{files/screenshots/start3.png|Ocsigen Start}}]] +[[files/screenshots/start4.png| +{{files/screenshots/start4.png|Ocsigen Start}}]] +[[files/screenshots/start5.png| +{{files/screenshots/start5.png|Ocsigen Start}}]] +[[files/screenshots/start6.png| +{{files/screenshots/start6.png|Ocsigen Start}}]] +>> + +<<div class="screenshots"| +[[files/screenshots/start-mobile-3.png| +{{files/screenshots/start-mobile-3.png|Ocsigen Start}}]] +[[files/screenshots/start-mobile-6.png| +{{files/screenshots/start-mobile-6.png|Ocsigen Start}}]] +[[files/screenshots/start-mobile-7.png| +{{files/screenshots/start-mobile-7.png|Ocsigen Start}}]] +[[files/screenshots/start-mobile-8.png| +{{files/screenshots/start-mobile-8.png|Ocsigen Start}}]] +>> + +Have fun! diff --git a/tutos/8.0/manual/tutoreact.wiki b/tutos/8.0/manual/tutoreact.wiki new file mode 100644 index 00000000..d6e479c5 --- /dev/null +++ b/tutos/8.0/manual/tutoreact.wiki @@ -0,0 +1,943 @@ += Client server reactive application with Ocsigen + +This is a short tutorial showing how to implement a simple reactive +client-server application using Js_of_ocaml, Eliom and +Ocsigen Start. + +We are going to implement an application that can display a list of messages and +that allows connected users to add new messages. + +You will learn: + +* How to use Ocsigen Start to quickly build an application with user + management. +* How to create a client-server reactive interface: the HTML is + generated indifferently server-side or client-side, and + contains reactive parts that are updated automatically when the data + change. +* How to implement a notification system for your application. Users + are notified when a new item (a message in our case) arrives. + + + +== First step: a basic application with user management + +Ocsigen Start contains a set of higher level libraries for Eliom +(user management, tips, notifications). It also contains a template +for {{{eliom-distillery}}} that creates an application with user +management. You can use this template as a starting point for your +project. + +{{{ +eliom-distillery -name tutoreact -template os.pgocaml +}}} + +This template is using PostgreSQL to store the data. You need a recent +version of Postgresql installed on your system. With that available, +you can create the local database and start the database server: + +{{{ +make db-init +make db-create +make db-schema +}}} + +Compile and run the program: +{{{ +make test.byte +}}} + +Go to {{{http://localhost:8080}}}, you should see the welcome page. You can now +register a user and log in. Because the send mail function is not configured, +the activation links will be printed on the console you started the server with. + +At any point, if you want to get back to this tutorial later, you may need to +start the database again: +{{{ +make db-start +}}} + +While doing this tutorial, if you plan to work on another Ocsigen project +requiring a database, do not forget to stop the tutorial's database beforehand: +{{{ +make db-stop +}}} + + + +== Display messages from db + +To make this example more realistic, let's suppose that we do not want to +display all the messages in the database, but only a few of them. + +In this tutorial, we will not focus on the implementation details of the +database part. Create a new file named {{{tutoreact_messages.eliom}}}. From now +on, if not explicitely specified, the code we are going to write will go there. +We are going to create a module {{{Db}}} containing these functions: + +<<code language="ocaml" class="server"| +val get_messages : unit -> int list Lwt.t +val get_message : int -> string Lwt.t +val add_message : string -> int Lwt.t +>> + +You can try to make your own implementation using for instance pgocaml. +Here's our implementation using Ocsipersist: + +<<code language="ocaml" class="server"| +[%%server +module Db = struct + let db = Ocsipersist.Polymorphic.open_table "messages" + + let last_key = + Eliom_reference.eref + ~persistent:"index" + ~scope:Eliom_common.global_scope (-1) + + let get_message id = + let%lwt db = db in + Ocsipersist.Polymorphic.find db (string_of_int id) + + let get_messages () = + let%lwt index = Eliom_reference.get last_key in + let rec aux n l = if n > index then l else aux (n+1) (n::l) in + Lwt.return (aux 0 []) + + let lock = Lwt_mutex.create () + + let add_message v = + let%lwt () = Lwt_mutex.lock lock in + let%lwt index = Eliom_reference.get last_key in + let index = index + 1 in + let%lwt () = Eliom_reference.set last_key index in + Lwt_mutex.unlock lock; + let%lwt db = db in + let%lwt () = Ocsipersist.Polymorphic.add db (string_of_int index) v in + Lwt.return index +end] +>> + +Add the following code: + +<<code language="ocaml" class="shared"| +[%%shared + open Eliom_content.Html + open Eliom_content.Html.D] +>> +<<code language="ocaml" class="server"| +let%server display userid_o = + let%lwt messages = Db.get_messages () in + let%lwt l = + Lwt_list.map_s + (fun id -> + let%lwt msg = Db.get_message id in + Lwt.return (li [txt msg])) + messages + in + Lwt.return [ul l] +>> + +Depending on your database, it is probably more efficient to +fetch all messages and their identifiers using only one request. +Here we use {{{Lwt_list.map_s}}} to do the requests sequentially. + +The content of the main page is defined in +the file {{{tutoreact_handlers.eliom}}}. +Replace the code of {{{main_service_handler}}} by: + +<<code language="ocaml" class="server"| +let%server main_service_handler userid_o () () = + let%lwt content = Tutoreact_messages.display userid_o in + Tutoreact_container.page userid_o content +>> + +The {{{main_service_handler}}} you just replaced was in a shared section. +Therefore, we also need to change two other files to take into consideration +this modification. + +In the file {{{tutoreact_handlers.eliomi}}}, move the definition of +{{{main_service_handler}}} from the shared section to the server section. + +In the file {{{tutoreact.eliom}}}, move the registration of {{{main_service}}} +from the shared section to the server section. + +Try to compile in order to see if everything is fine. + + + +== Adding new messages + +=== Add an input in the page, for connected users + +To add an input in the page for connected users, +replace the function {{{display}}} by the following version: + +<<code language="ocaml" class="server"| +let%server display_messages () = + let%lwt messages = Db.get_messages () in + let%lwt l = + Lwt_list.map_s + (fun id -> + let%lwt msg = Db.get_message id in + Lwt.return (li [txt msg])) + messages + in + Lwt.return (ul l) + +let%server display userid_o = + let%lwt messages = display_messages () in + let l = + match userid_o with + | None -> [] + | _ -> [Raw.input ~a:[a_input_type `Text; + a_style "border-style:solid"] ()] + in + Lwt.return (messages :: l) +>> + +=== Make function {{{Db.add_message}}} accessible from the client + +To be able to call a function from the client-side program, +use {{{let%rpc}}}: +<<code language="ocaml" class="shared"| +let%rpc add_message (value : string) : unit Lwt.t = + let%lwt _ = Os_current_user.get_current_userid () (* fails if not connected *) in + Db.add_message value +>> + +The parameter {{{[%json: string]}}} describes the type of +the function parameter. This exhibits the syntax provided by +[[https://github.com/whitequark/ppx_deriving|ppx_deriving]] extended +with our JSON plugin. We use this for safe server-side unmarshalling of data +sent by the client. + +=== Bind the input to call the function + +To call the function from the client program, we will define a +//client value//, a client-side expression that is accessible +server-side. The client value will be executed client-side +after the page is loaded. The syntax for client values of type +{{{t}}} is {{{[%client (... : t)]}}}. + +Replace the second branch of the {{{match}}} in the function {{{display}}} by: +<<code language="ocaml" class="server"| +let inp = Raw.input ~a:[a_input_type `Text; a_style "border-style:solid"] () in +let _ = [%client + (let open Js_of_ocaml_lwt.Lwt_js_events in + let inp = To_dom.of_input ~%inp in + async (fun () -> changes inp (fun _ _ -> + let value = Js_of_ocaml.Js.to_string inp##.value in + inp##.value := Js_of_ocaml.Js.string ""; + let%lwt _ = add_message value in + Lwt.return ())) + : unit) +] in +[inp] +>> + +* We use module {{{Lwt_js_events}}} to manage events. +* The syntax {{{~%v}}} allows using a server-side value {{{v}}} client-side. +* {{{To_dom.of_input}}} returns the JS element corresponding to the + OCaml value {{{~%inp}}}. +* {{{Lwt_js_events.async}}} is similar to {{{Lwt.async}}}. +* {{{obj##.a}}} allows the access to the field {{{a}}} + of the JavaScript object {{{obj}}} (see Js_of_ocaml PPX extension). +* {{{changes}}} takes a JS element and a function that will be + executed every time a "change" event is received on this element. + +This function gets the value of the input, resets the content of the +input, and calls our server-side function. Do not forget the +conversions between OCaml strings and JS strings since they are different! + +Compile and run the program again. Now the messages should be added in the +database whenever you use the input. However you need to refresh the page to +display them. + + + +== Structure of a client-server application + +We have seen how to send data to the server without stopping the +client-side program. Now we want to automatically update the page +when new messages are sent. Generally, the main difference between a +web application and a website is that in the case of a web +application, a client-side program runs and persists accross HTTP +calls (remote procedure calls or page changes). The client process +must be able to receive notifications from the server and update the +page accordingly, without regenerating it entirely. It is common +practice to generate the full interface client-side. But this is +not suitable for all cases. It is usually better to keep the old-style +web interaction and generate pages server-side, for example +to enable search engine indexing. In this tutorial, we will see how to +generate pages indifferently (and with the same code) from both sides. + +In this section, we will see how to implement this kind of applications +very concisely thanks to three notions: +* The client-server cache of data +* Reactive pages +* Notification system + +You will be able to test once you finish the three following sections! + +=== Client-server cache + +The module +<<a_api project="eliom" subproject="server"| module Eliom_cscache >> +implements a cache of data, an association table where you +will put the data of your application client-side. For the sake of +uniformity (as we want to use it in shared sections), the +cache is also implemented server-side, with scope +"request". This avoids retrieving the same data from the database +twice for the same request. + +We create a client-server cache by calling the function +<<a_api project="eliom" subproject="server"| val Eliom_cscache.create >> +server-side. The server-side cache {{{cache}}} created by this +function will be accessible client-side through an injection {{{~%cache}}}. + +We implement a function {{{get_data}}} to fetch the +data from the database. This function must have an implementation both +server-side and client-side: + +<<code language="ocaml" class="shared"| +let%rpc get_data (id : int) : string Lwt.t = Db.get_message id +>> +<<code language="ocaml" class="server"| +let%server cache : (int, string) Eliom_cscache.t = + Eliom_cscache.create () +>> + +=== Reactive interface + +Updating the interface when some data change is usually not +straightforward. This is usually done by putting identifiers on +elements to find them, and manually modifying page elements using +low-level JS functions. + +A very elegant solution to simplify this consists in using Functional +Reactive Programming (FRP). In reactive programming, you define +relations between different pieces of data once, and each update +automatically produces the recomputation of all the dependent data. In +Ocsigen we use the module [[http://erratique.ch/logiciel/react|React]] +combined with [[https://github.com/ocsigen/reactiveData/|ReactiveData]], +which extends {{{React}}} to deal with incremental updates in +lists. Have a look at the documentation of the above modules if you +are not familiar with FRP. + +The client-side module +<<a_api project="eliom" subproject="client"| module Eliom_content.Html.R >> +enables defining reactive page elements. + +The module <<a_api project="eliom" subproject="server"| module Eliom_shared >> +enables defining shared reactive signals server-side. +In order to do that, we use //shared values//, values defined +both server-side and client-side. The server-side module +<<a_api project="eliom" subproject="server"| module Eliom_content.Html.R >> + enables constructing HTML5 elements that get updated automatically +based on the signals of {{{Eliom_shared}}}. The modules +<<a_api project="eliom" subproject="server"| module Eliom_shared.React >> +and +<<a_api project="eliom" subproject="server"| module Eliom_shared.ReactiveData >> +implement interfaces very similar to {{{React}}} and +{{{ReactiveData}}}, but operate on shared signals. + +=== Implementation of the reactive interface + +{{{display_message}}} now needs to be implemented in a shared fashion and take +its data from the cache. In order to do that, +we call {{{Eliom_cscache.find cache get_data key}}} from either side to get the +value associated to {{{key}}}. If the value is not present in the cache, it will +be fetched using the function {{{get_data}}} and added to the cache. + +<<code language="ocaml" class="shared"| +let%shared display_message id = + let%lwt msg = Eliom_cscache.find ~%cache get_data id in + Lwt.return (li [txt msg]) +>> + +The function {{{display_messages}}} now creates a reactive list of +message identifiers, and maps page content from this reactive value +using module {{{Eliom_shared.ReactiveData}}}. Note that {{{rmessage}}} is +a tuple, the first element is the list, the second element is the update +function. + +<<code language="ocaml" class="server"| +let%server display_messages () = + let%lwt messages = Db.get_messages () in + let rmessages = Eliom_shared.ReactiveData.RList.create messages in + let%lwt content = + Eliom_shared.ReactiveData.RList.Lwt.map_p + [%shared display_message ] + (fst rmessages) + in + Lwt.return (R.ul content) +>> + +== Notifications + +We now want to be notified when a message has been added. To do that +easily, we use the module {{{Os_notif}}} from Ocsigen Start. + +We first define a notification module for the type of data we want +clients to be able to listen on (here the lists of message identifiers): + +<<code language="ocaml" class="server"| +[%%server +module Forum_notif = Os_notif.Make_Simple (struct + type key = unit + type notification = int +end) +] +>> + +{{{key}}} is the type of the identifier of the data we want to listen +on. In our case, there is a single message list (thus {{{unit}}} +suffices as the identifier since we don't need to be specific). + +{{{notification}}} is the type of the notifications to send. Here: the +identifier of the new message to be added in the list. + +We define a function to handle notifications. It adds the new +identifier in the reactive list of messages: +<<code language="ocaml" class="client"| +let%client handle_notif_message_list rmessages (_, msgid) = + Eliom_shared.ReactiveData.RList.cons msgid (snd rmessages) +>> + +We notify the server that we are listening on this piece of data by +calling {{{Forum_notif.listen}}} (server-side). Notifications are +received client-side through a {{{React}}} event +{{{Forum_notif.client_ev ()}}}. We map this event to the function +{{{handle_notif_message_list}}}, meaning that we will execute this function +when this event happens. + +<<code language="ocaml" class="server"| +let%server display_messages () = + Forum_notif.listen (); + let%lwt messages = Db.get_messages () in + let rmessages = Eliom_shared.ReactiveData.RList.create messages in + ignore [%client + (ignore + (React.E.map (handle_notif_message_list ~%rmessages) + ~%(Forum_notif.client_ev () : (unit * int) Eliom_react.Down.t)) + : unit) + ]; + let%lwt content = + Eliom_shared.ReactiveData.RList.Lwt.map_p + [%shared display_message ] + (fst rmessages) + in + Lwt.return (R.ul content) +>> + +When we add a message, we notify all the clients listening on this +piece of data: + +<<code language="ocaml" class="shared"| +let%rpc add_message (value : string) : unit Lwt.t = + let%lwt id = Db.add_message value in + Forum_notif.notify () id; + Lwt.return () +>> + +The program is now fully functional, you can now test it! You should see the +messages being added without the need to reload the page, even if messages are +added by another user! Try with several browser windows. + + + +== More information on cache and client-server reactive data + +In this section we will demonstrate additional Eliom functionality for +client-server programming by implementing some new features in our +forum: +* Multi-page forum +* Client-side spinner while loading data + +=== Multi-page forum + +We now want a forum with several pages, located at URLs +{{{http://localhost:8080/}}}//i//, where //i// represents the {{{forumid}}} +as an integer. + +==== Services + +In the file {{{tutoreact_services.eliom}}}, we define the new following service: + +<<code language="ocaml" class="server"| +let%server forum_service = + Eliom_service.create + ~path:(Eliom_service.Path [""]) + ~meth:(Eliom_service.Get + (Eliom_parameter.(suffix (int "i")))) + () +>> + +In the file {{{tutoreact_services.eliomi}}}, we define its signature, do not +forget to put it in a server section: + +<<code language="ocaml" class="server"| +[%%server.start] + +val forum_service + : ( int + , unit + , Eliom_service.get + , Eliom_service.att + , Eliom_service.non_co + , Eliom_service.non_ext + , Eliom_service.reg + , [`WithSuffix] + , [`One of int] Eliom_parameter.param_name + , unit + , Eliom_service.non_ocaml ) + Eliom_service.t +>> + +In the file {{{tutoreact_handlers.eliom}}}, we define the handler we will +associate to our new service: + +<<code language="ocaml" class="server"| +let%server forum_service_handler userid_o forumid () = + let%lwt content = Tutoreact_messages.display userid_o forumid in + Tutoreact_container.page userid_o content +>> + +In the file {{{tutoreact_handlers.eliomi}}}, we define its signature, in the +server section: + +<<code language="ocaml" class="server"| +val forum_service_handler + : Os_types.User.id option + -> int + -> unit + -> Os_page.content Lwt.t +>> + +In the file {{{tutoreact.eliom}}}, we register our handler to our new service in +the server section: + +<<code language="ocaml" class="server"| + Tutoreact_base.App.register ~service:Tutoreact_services.forum_service + (Tutoreact_page.Opt.connected_page Tutoreact_handlers.forum_service_handler) +>> + +Since we have a new parameter {{{forumid}}}, we need to take it into +consideration in many places. + +In the file {{{tutoreact_messages.eliom}}}, the functions {{{display_messages}}} +and {{{display}}} take it as a new parameter. Do not forget to also replace +the latter in the call of {{{display_messages}}} in function {{{display}}}: + +<<code language="ocaml" class="server"| +let%server display_messages forumid = + ... +>> + +<<code language="ocaml" class="server"| +let%server display userid_o forumid = + let%lwt messages = display_messages forumid in + ... +>> + +In the file {{{tutoreact_handlers.eliom}}}, update the code of +{{{main_service_handler}}}: + +<<code language="ocaml" class="server"| +let%server main_service_handler forumid userid_o () () = + let%lwt content = Tutoreact_messages.display userid_o forumid in + Tutoreact_container.page userid_o content +>> + +In the file {{{tutoreact_handlers.eliomi}}}, update its signature: + +<<code language="ocaml" class="server"| +val main_service_handler + : int + -> Os_types.User.id option + -> unit + -> unit + -> Os_page.content Lwt.t +>> + +In the file {{{tutoreact.eliom}}}, in the {{{main_service}}}, we have to specify +the forumid of the forum we want to reach when we arrive in our application. +We will take 0 for instance and give it as the parameter of +{{{main_service_handler}}}. We update the registration of {{{main_service}}}: + +<<code language="ocaml" class="server"| + Tutoreact_base.App.register + ~service:Os_services.main_service + (Tutoreact_page.Opt.connected_page + (Tutoreact_handlers.main_service_handler 0)); +>> + +==== Db + +The functions {{{Db.get_messages}}} and {{{Db.add_message}}} now take the forum +identifier: + +<<code language="ocaml" class="server"| +[%%server +module Db = struct + + let db = Ocsipersist.Polymorphic.open_table "messages" + + let dbf = Ocsipersist.Polymorphic.open_table "forums" + + let last_key = + Eliom_reference.eref + ~persistent:"index" ~scope:Eliom_common.global_scope (-1) + + let get_message id = + let%lwt db = db in + Ocsipersist.Polymorphic.find db (string_of_int id) + + let get_messages forumid = + let%lwt dbf = dbf in + try%lwt + Ocsipersist.Polymorphic.find dbf (string_of_int forumid) + with Not_found -> + Lwt.return [] + + let add_message forumid v = + let%lwt index = Eliom_reference.get last_key in + let index = index + 1 in + let%lwt () = Eliom_reference.set last_key index in + let%lwt db = db in + let%lwt () = Ocsipersist.Polymorphic.add db (string_of_int index) v in + let%lwt l = get_messages forumid in + let%lwt dbf = dbf in + let%lwt () = + Ocsipersist.Polymorphic.add dbf + (string_of_int forumid) + (index :: l) + in + Lwt.return index + +end +] +>> + +==== Message type + +Since we are now adding besides the message, the {{{forumid}}} as well in our +database, we need to specify a new type: + +<<code language="ocaml" class="shared"| +[%%shared + type add_message_type = int * string [@@deriving json] +] +>> + +We don't forget to take that into consideration in the function +{{{add_message}}}. + +<<code language="ocaml" class="server"| +let%rpc add_message ((forumid, value) : add_message_type) : unit Lwt.t = + let%lwt id = Db.add_message forumid value in + Forum_notif.notify () id; + Lwt.return () +>> + +In the function {{{display}}}, in the client section: +<<code language="ocaml" class="client"| + ... + add_message (~%forumid, value) +... +>> + +==== Cache of forum message identifiers + +We must send the notifications only to the clients listening on the +same forum. + +We will create a new client-server cache to keep the reactive list of +message identifiers for each forums: + +<<code language="ocaml" class="server"| +let%server forumcache : + (int, + int Eliom_shared.ReactiveData.RList.t * + int Eliom_shared.ReactiveData.RList.handle) Eliom_cscache.t = + Eliom_cscache.create () +>> + +We will now implement the equivalent of {{{get_data}}} for this new cache. + +**Be very careful:** + +In {{{get_data_forum}}}, we must find the reactive list of messages in +the new cache —if it exists — instead of creating a new one! +Otherwise you will have several reactive data for the same forum and +the page updates will fail! + +To do that, we provide an optional argument {{{?default}}} to the function +{{{Eliom_shared.ReactiveData.RList.create}}}, a client value +(optionally) containing the current reactive list. If it does not +exist in the cache, a new one will be created like previously: + +<<code language="ocaml" class="shared"| +let%rpc get_data_forum (forumid : int) : _ Lwt.t = + let%lwt messages = Db.get_messages forumid in + let default = [%client + ((try Some (Eliom_cscache.find_if_ready ~%forumcache ~%forumid) + with _ -> None) + : 'a option) + ] in + Lwt.return (Eliom_shared.ReactiveData.RList.create ~default messages) +>> + +{{{display_messages}}} now takes the reactive list from the cache: +<<code language="ocaml" class="server"| +let%server display_messages forumid = + Forum_notif.listen (); + let%lwt rmessages = + Eliom_cscache.find forumcache get_data_forum forumid + in + ... +>> + +==== Notifications dependent on forum ID +Since we now want to be specific about the data we want to listen to, the unit +parameter we defined can't be used anymore. Indeed, notifications now depend on +the identifier. We want to receive notifications only for the forums present in +the client-side cache of forums. Therefore, we just change the type {{{key}}} of +module {{{Forum_notif}}} to use an integer (instead of {{{unit}}}): + +<<code language="ocaml" class="server"| +[%%server +module Forum_notif = Os_notif.Make_Simple (struct + type key = int + type notification = int +end) +] +>> + +The function {{{Forum_notif.notify}}} used in the function {{{add_message}}} +now takes the {{{forumid}}} parameter. + +<<code language="ocaml" class="shared"| +let%rpc add_message ... = + ... + Forum_notif.notify forumid id; + ... +>> + +In the function {{{display_messages}}}, we need to take care of the +{{{forumid}}} parameter and the type annotation of {{{client_ev}}}: + +<<code language="ocaml" class="server"| +let%server display_messages forumid = + Forum_notif.listen (forumid : int); + ... + ~%(Forum_notif.client_ev () : (int * int) Eliom_react.Down.t)) + ... +>> + +We annotate the type of {{{forumid}}} in the call of the function {{{listen}}} +to help the typing system. + +The function {{{handle_notif_message}}} now takes the reactive +list {{{rmessage}}} from the cache, therefore we no longer need it as a +parameter: + +<<code language="ocaml" class="client"| +let%client handle_notif_message_list (forumid, msgid) = + try + let rmessages = Eliom_cscache.find_if_ready ~%forumcache forumid in + Eliom_shared.ReactiveData.RList.cons msgid (snd rmessages) + with Not_found | Eliom_cscache.Not_ready -> () +>> + +In the function {{{display_messages}}}, do not forget to remove the injection +of {{{rmessage}}} in the call of {{{handle_notif_message_list}}} in the client +section: + +<<code language="ocaml" class="client"| +... +(React.E.map handle_notif_message_list +... +>> + +=== Display a spinner while loading the messages + +Retrieving messages from server can take time. +To display a spinner while loading the messages when you send them, replace +the function {{{display_message}}} by: + +<<code language="ocaml" class="shared"| +let%shared display_message id = + let th = + let%lwt msg = Eliom_cscache.find ~%cache get_data id in + Lwt.return [div [txt msg]] + in + let%lwt v = Ot_spinner.with_spinner th in + Lwt.return (li [v]) +>> + +To simulate network latency, you can add a {{{Lwt_unix.sleep}}} in the +server-side {{{get_data}}} function. + +<<code language="ocaml" class="server"| +let%server get_data id = + let%lwt () = Lwt_unix.sleep 2.0 in + Db.get_message id +>> + + + +== The full code ({{{tutoreact_messages.eliom}}}): + +<<code language="ocaml" class="shared"| +[%%shared + open Eliom_content.Html + open Eliom_content.Html.D +] +>> + +<<code language="ocaml" class="server"| +[%%server +module Db = struct + let db = Ocsipersist.Polymorphic.open_table "messages" + let dbf = Ocsipersist.Polymorphic.open_table "forums" + + let last_key = + Eliom_reference.eref ~persistent:"index" ~scope:Eliom_common.global_scope + (-1) + + let get_message id = + let%lwt db = db in + Ocsipersist.Polymorphic.find db (string_of_int id) + + let get_messages forumid = + let%lwt dbf = dbf in + try%lwt Ocsipersist.Polymorphic.find dbf (string_of_int forumid) + with Not_found -> Lwt.return [] + + let add_message forumid v = + let%lwt index = Eliom_reference.get last_key in + let index = index + 1 in + let%lwt () = Eliom_reference.set last_key index in + let%lwt db = db in + let%lwt () = Ocsipersist.Polymorphic.add db (string_of_int index) v in + let%lwt l = get_messages forumid in + let%lwt dbf = dbf in + let%lwt () = + Ocsipersist.Polymorphic.add dbf (string_of_int forumid) (index :: l) + in + Lwt.return index + +end + +module Forum_notif = Os_notif.Make_Simple (struct + type key = int + type notification = int +end) +] +>> + +<<code language="ocaml" class="shared"| +[%%shared + type add_message_type = int * string [@@deriving json] +] +>> + +<<code language="ocaml" class="shared"| +let%rpc add_message ((forumid, value) : add_message_type) : unit Lwt.t = + let%lwt id = Db.add_message forumid value in + Forum_notif.notify forumid (id : int); + Lwt.return () +>> + +<<code language="ocaml" class="server"| +let%server cache : (int, string) Eliom_cscache.t = Eliom_cscache.create () + +let%server forumcache : + (int, + int Eliom_shared.ReactiveData.RList.t * + int Eliom_shared.ReactiveData.RList.handle) Eliom_cscache.t = + Eliom_cscache.create () +>> + +<<code language="ocaml" class="shared"| +ler%rpc get_data (id : int) : string Lwt.t = + let%lwt () = Lwt_unix.sleep 2.0 in + Db.get_message id +>> + +<<code language="ocaml" class="shared"| +let%rpc get_data_forum (forumid : int) : _ Lwt.t = + let%lwt messages = Db.get_messages forumid in + let default = [%client + (try + Some (Eliom_cscache.find_if_ready ~%forumcache ~%forumid) + with _ -> + None + : 'a option) + ] in + Lwt.return (Eliom_shared.ReactiveData.RList.create ~default messages) +>> + +<<code language="ocaml" class="shared"| +let%shared display_message id = + let th = + let%lwt msg = Eliom_cscache.find ~%cache get_data id in + Lwt.return [div [txt msg]] + in + let%lwt v = Ot_spinner.with_spinner th in + Lwt.return (li [v]) +>> + +<<code language="ocaml" class="client"| +let%client handle_notif_message_list (forumid, msgid) = + try + let rmessages = Eliom_cscache.find_if_ready ~%forumcache forumid in + Eliom_shared.ReactiveData.RList.cons msgid (snd rmessages) + with Not_found | Eliom_cscache.Not_ready -> () +>> + +<<code language="ocaml" class="server"| +let%server display_messages forumid = + Forum_notif.listen (forumid : int); + let%lwt rmessages = + Eliom_cscache.find forumcache get_data_forum forumid + in + ignore [%client + (ignore + (React.E.map handle_notif_message_list + ~%(Forum_notif.client_ev () : (int * int) Eliom_react.Down.t)) + : unit) + ]; + let%lwt content = + Eliom_shared.ReactiveData.RList.Lwt.map_p + [%shared display_message] + (fst rmessages) + in + Lwt.return (R.ul content) + +let%server display userid_o forumid = + let%lwt messages = display_messages forumid in + let l = + match userid_o with + | None -> [] + | _ -> + let inp = + Raw.input ~a:[a_input_type `Text; a_style "border-style:solid"] () + in + let _ = + [%client + (let open Js_of_ocaml_lwt.Lwt_js_events in + let inp = To_dom.of_input ~%inp in + async (fun () -> + changes inp (fun _ _ -> + let value = Js_of_ocaml.Js.to_string inp##.value in + inp##.value := Js_of_ocaml.Js.string ""; + let%lwt _ = add_message (~%forumid, value) in + Lwt.return ())) + : unit)] + in + [inp] + in + Lwt.return (messages :: l) +>> diff --git a/tutos/8.0/manual/tutowidgets.wiki b/tutos/8.0/manual/tutowidgets.wiki new file mode 100644 index 00000000..7c7efcb0 --- /dev/null +++ b/tutos/8.0/manual/tutowidgets.wiki @@ -0,0 +1,402 @@ += Mini-tutorial: client-server widgets = + +This short tutorial is an example of client-server Eliom application. +It gives an example of client-server widgets. + +It is probably a good starting point if you know OCaml well, and want +to quickly learn how to write a client-server Eliom application with a +short example and concise explanations. For more detailed explanations, see +the +<<a_manual project="tuto" chapter="application"|"graffiti" tutorial>>, +or read the manuals. + +The goal is to show that, unlike many JavaScript libraries that build +their widgets programmatically (by instantiating classes or calling +functions), Eliom enables server-side widget generation, before +sending them to the client. Pages can thus be indexed by search +engines. + +This tutorial also shows that it is possible to use the same code to +build the widget either on client or server side. + +We choose a very simple widget, that could be the base for example for +implementing a drop-down menu. It consists of several boxes with a +title and a content. Clicking on the title opens or closes the +content. Furthermore, it is possible to group some of the boxes +together to make them behave like radio buttons: when you open one of +them, the previously opened one is closed. + +@@class="screenshot"@@{{files/tutorial/tutowidgets/ex-final.png|screenshot}} + +<<outline| <<header| **Table of contents** >> >> + +== First step: define an application with a basic service == + +The following code defines a client-server Web application with only +one service, registered at URL {{{/}}} (the root of the website). + +The code also defines a client-side application ({{{let%client}}} or section +{{{ [%%client ... ] }}}) +that appends a client-side generated widget to the page. +Section {{{ [%%shared ... ] }}} is compiled on both the server and the +client-side programs. +Inside such a section, you can write {{{ let%server }}} or +{{{ let%client }}} to override {{{ [%%shared ... ] }}} +and define a server-only or client-only value (similarly for +{{{ [%%server ... ] }}} and {{{ [%%client ... ] }}}). + +<<code language="ocaml" class="server"| + +module%server Ex_app = + Eliom_registration.App (struct + let application_name = "ex" + let global_data_path = None + end) + +let%server _ = Eliom_content.Html.D.( + Ex_app.create + ~path:(Eliom_service.Path [""]) + ~meth:(Eliom_service.Get Eliom_parameter.unit) + (fun () () -> + Lwt.return + (Eliom_tools.D.html ~title:"tutowidgets" ~css:[["css"; "ex.css"]] + (body [h2 [txt "Welcome to Ocsigen!"]]))) +) +>> +<<code language="ocaml" class="client"| + +let%client mywidget s1 s2 = Eliom_content.Html.D.( + let button = div ~a:[a_class ["button"]] [txt s1] in + let content = div ~a:[a_class ["content"]] [txt s2] in + div ~a:[a_class ["mywidget"]] [button; content] +) + +let%client _ = + let%lwt _ = Js_of_ocaml_lwt.Lwt_js_events.onload () in + Js_of_ocaml.Dom.appendChild + (Js_of_ocaml.Dom_html.document##.body) + (Eliom_content.Html.To_dom.of_element (mywidget "Click me" "Hello!")); + Lwt.return () +>> + +To compile it, first create a project by calling + +{{{ + eliom-distillery -name ex -template client-server.basic +}}} + +The name of the project must match the name given to the functor +{{{Eliom_registration.App}}}. + +After you adapt the file {{{ex.eliom}}}, +you can compile by calling {{{make}}}, +and run the server by calling {{{make test.byte}}}. +Download the +[[files/tutorial/tutowidgets/ex.css|CSS file]] +and place it in directory {{{static/css}}}. +Then open a browser window and go to URL {{{http://localhost:8080}}}. + +@@class="screenshot"@@{{files/tutorial/tutowidgets/ex1.png|screenshot}} + +=== More explanations + +This section gives very quick explanations on the rest of the program. +For more detailed explanations, see the tutorial for the graffiti app +or the manual of each of the projects. + +* The client side program is sent with the first page belonging to the + application (registered through module {{{Ex_app}}}). +* The {{{##}}} is used to call a JS method from OCaml + and {{{##.}}} to access a JS object field + (See Js_of_ocaml's documentation: + <<a_api project="js_of_ocaml" subproject="js_of_ocaml-ppx" | module Ppx_js >>). +* If there are several services in your application, the client-side + program will be sent only with the first page, and will not stop if + you go to another page of the application. +* {{{Lwt}}} is the concurrent library used to program threads on both + client and server sides. The syntax {{{let%lwt a = e1 in e2}}} + allows waiting (without blocking the rest of the program) for an Lwt + thread to terminate before continuing. {{{e2}}} must ben a Lwt + thread itself. {{{Lwt.return}}} enables creating an + already-terminated Lwt thread. +* {{{Js_of_ocaml_lwt.Lwt_js_events}}} defines a convenient way to program + interface events (mouse, keyboard, ...). + +{{{Js_of_ocaml_lwt.Lwt_js_events.onload}}} is a Lwt thread that waits until the page +is loaded. There are similar functions to wait for other events, e.g., +for a click on an element of the page, or for a key press. + +== Second step: bind the button == + +To make the widget work, we must bind the click event. +Replace function {{{mywidget}}} by the following lines: + +<<code language="ocaml" class="client"| +let%client switch_visibility elt = + let elt = Eliom_content.Html.To_dom.of_element elt in + if Js_of_ocaml.Js.to_bool (elt##.classList##contains (Js_of_ocaml.Js.string "hidden")) then + elt##.classList##remove (Js_of_ocaml.Js.string "hidden") + else + elt##.classList##add (Js_of_ocaml.Js.string "hidden") + +let%client mywidget s1 s2 = Eliom_content.Html.D.( + let button = div ~a:[a_class ["button"]] [txt s1] in + let content = div ~a:[a_class ["content"]] [txt s2] in + Lwt.async (fun () -> + Js_of_ocaml_lwt.Lwt_js_events.clicks (Eliom_content.Html.To_dom.of_element button) + (fun _ _ -> switch_visibility content; Lwt.return ())); + div ~a:[a_class ["mywidget"]] [button; content] +) +>> + +* Once again, we use {{{Js_of_ocaml_lwt.Lwt_js_events}}}. Function {{{clicks}}} is + used to bind a handler to clicks on a specific element. +* Function {{{async}}} runs an {{{Lwt}}} thread asynchronously + (without waiting for its result). +* {{{Js_of_ocaml_lwt.Lwt_js_events.clicks elt f}}} calls function {{{f}}} for each + mouseclick on element {{{elt}}}. +* {{{Eliom_content.Html.To_dom.of_element}}}, {{{Js_of_ocaml.Js.string}}} and {{{Js_of_ocaml.Js.to_bool}}} are + conversion functions between OCaml values and JS values. + +== Third step: Generating the widget on server side == + +The following version of the program shows how to generate the widget +on server side, before sending it to the client. + +The code is exactly the same, with the following modifications: +* We place function {{{mywidget}}} in server section. +* The portion of code that must be run on client side (binding the + click event) is written as a //client value//, inside + {{{ [%client (... : unit) ] }}}. + This code will be executed by the client-side program when it + receives the page. Note that you must give the type (here + {{{unit}}}), as the type inference for client values is currently + very limited. The client section may refer to server side values, + using the {{{~%x}}} syntax. These values will be serialized and sent + to the client automatically with the page. +* We include the widget on the server side generated page instead of + adding it to the page from client side. + +<<code language="ocaml" class="server"| + +module%server Ex_app = + Eliom_registration.App (struct + let application_name = "ex" + let global_data_path = None + end) + +>> +<<code language="ocaml" class="client"| +let%client switch_visibility elt = + let elt = Eliom_content.Html.To_dom.of_element elt in + if Js_of_ocaml.Js.to_bool (elt##.classList##(contains (Js_of_ocaml.Js.string "hidden"))) then + elt##.classList##remove (Js_of_ocaml.Js.string "hidden") + else + elt##.classList##add (Js_of_ocaml.Js.string "hidden") + +>> +<<code language="ocaml" class="server"| +let%server mywidget s1 s2 = Eliom_content.Html.D.( + let button = div ~a:[a_class ["button"]] [txt s1] in + let content = div ~a:[a_class ["content"]] [txt s2] in + let _ = [%client + (Lwt.async (fun () -> + Js_of_ocaml_lwt.Lwt_js_events.clicks (Eliom_content.Html.To_dom.of_element ~%button) + (fun _ _ -> switch_visibility ~%content; Lwt.return ())) + : unit) + ] in + div ~a:[a_class ["mywidget"]] [button; content] +) + +let%server _ = Eliom_content.Html.D.( + Ex_app.create + ~path:(Eliom_service.Path [""]) + ~meth:(Eliom_service.Get Eliom_parameter.unit) + (fun () () -> + Lwt.return + (Eliom_tools.D.html ~title:"ex" ~css:[["css"; "ex.css"]] + (body [h2 [txt "Welcome to Ocsigen!"]; + mywidget "Click me" "Hello!"]))) +) +>> + +== Fourth step: widget usable either on client or server sides == + +If you make function {{{mywidget}}} //shared//, it will be available +both on server and client sides: + +<<code language="ocaml" class="shared"| +let%shared mywidget s1 s2 = + ... +>> + +@@class="screenshot"@@{{files/tutorial/tutowidgets/ex2.png|screenshot}} + + +== Fifth step: close last window when opening a new one == + +To implement this, we record a client-side reference to a function for +closing the currently opened window. + +<<code language="ocaml" class="server"| + +module%server Ex_app = + Eliom_registration.App (struct + let application_name = "ex" + let global_data_path = None + end) + +>> +<<code language="ocaml" class="client"| +let%client close_last = ref (fun () -> ()) + +let%client switch_visibility elt = + let elt = Eliom_content.Html.To_dom.of_element elt in + if Js_of_ocaml.Js.to_bool (elt##.classList##(contains (Js_of_ocaml.Js.string "hidden"))) then + elt##.classList##remove (Js_of_ocaml.Js.string "hidden") + else + elt##.classList##add (Js_of_ocaml.Js.string "hidden") + +>> +<<code language="ocaml" class="shared"| +let%shared mywidget s1 s2 = Eliom_content.Html.D.( + let button = div ~a:[a_class ["button"]] [txt s1] in + let content = div ~a:[a_class ["content"]] [txt s2] in + let _ = [%client + (Lwt.async (fun () -> + Js_of_ocaml_lwt.Lwt_js_events.clicks (Eliom_content.Html.To_dom.of_element ~%button) (fun _ _ -> + !close_last (); + close_last := (fun () -> switch_visibility ~%content); + switch_visibility ~%content; + Lwt.return () + )) + : unit) + ] in + div ~a:[a_class ["mywidget"]] [button; content] +) +>> +<<code language="ocaml" class="server"| +let%server _ = Eliom_content.Html.D.( + Ex_app.create + ~path:(Eliom_service.Path [""]) + ~meth:(Eliom_service.Get Eliom_parameter.unit) + (fun () () -> + let _ = + [%client + (Js_of_ocaml.Dom.appendChild + (Js_of_ocaml.Dom_html.document##.body) + (Eliom_content.Html.To_dom.of_element (mywidget "Click me" "client side")) + : unit) + ] in + Lwt.return + (Eliom_tools.D.html ~title:"ex" ~css:[["css"; "ex.css"]] + (body [ + h2 [txt "Welcome to Ocsigen!"]; + mywidget "Click me" "server side"; + mywidget "Click me" "server side"; + mywidget "Click me" "server side" + ]))) +) +>> + +== Last step: several sets of widgets == + +Now we want to enable several sets of widgets in the same page. A +single reference no longer suffices. In the following version, the +server-side program asks the client-side program to generate two +different references, by calling function {{{new_set}}}. This function +returns what we call a //client value//. On server side, it is not +evaluated, and it has an abstract type. + +<<code language="ocaml" class="server"| + +module%server Ex_app = + Eliom_registration.App (struct + let application_name = "ex" + let global_data_path = None + end) + +let%server new_set () = [%client ( ref (fun () -> ()) : (unit -> unit) ref)] + +>> +<<code language="ocaml" class="client"| +let%client switch_visibility elt = + let elt = Eliom_content.Html.To_dom.of_element elt in + if Js_of_ocaml.Js.to_bool (elt##.classList##(contains (Js_of_ocaml.Js.string "hidden"))) then + elt##.classList##remove (Js_of_ocaml.Js.string "hidden") + else + elt##.classList##add (Js_of_ocaml.Js.string "hidden") + +>> +<<code language="ocaml" class="shared"| +let%shared mywidget set s1 s2 = Eliom_content.Html.D.( + let button = div ~a:[a_class ["button"]] [txt s1] in + let content = div ~a:[a_class ["content"; "hidden"]] [txt s2] in + let _ = [%client + (Lwt.async (fun () -> + Js_of_ocaml_lwt.Lwt_js_events.clicks (Eliom_content.Html.To_dom.of_element ~%button) (fun _ _ -> + ! ~%set (); + ~%set := (fun () -> switch_visibility ~%content); + switch_visibility ~%content; + Lwt.return ())) + : unit)] + in + div ~a:[a_class ["mywidget"]] [button; content] +) + +>> +<<code language="ocaml" class="server"| +let%server _ = Eliom_content.Html.D.( + Ex_app.create + ~path:(Eliom_service.Path [""]) + ~meth:(Eliom_service.Get Eliom_parameter.unit) + (fun () () -> + let set1 = new_set () in + let set2 = new_set () in + let _ = [%client ( + Js_of_ocaml.Dom.appendChild + (Js_of_ocaml.Dom_html.document##.body) + (Eliom_content.Html.To_dom.of_element (mywidget ~%set2 "Click me" "client side")) + : unit) + ] in + Lwt.return + (Eliom_tools.D.html ~title:"ex" ~css:[["css"; "ex.css"]] + (body [ + h2 [txt "Welcome to Ocsigen!"]; + mywidget set1 "Click me" "server side"; + mywidget set1 "Click me" "server side"; + mywidget set2 "Click me" "server side" + ]))) +) +>> + +@@class="screenshot"@@{{files/tutorial/tutowidgets/ex-final.png|screenshot}} + + +== And now? == + +===Calling server functions=== +An important feature missing from this tutorial is the ability +to call server functions from the client-side program ("server functions"). +You can find a quick description of this +in <<a_manual project="tuto" chapter="how-to-call-a-server-side-function-from-client-side"|this mini HOWTO>> or +in <<a_manual project="eliom" chapter="clientserver-communication" fragment="rpc"| +Eliom's manual>>. + +===Services=== + +For many applications, you will need several services. By default, +client-side Eliom programs do not stop when you follow a link or send +a form. This enables combining rich client side features (playing +music, animations, stateful applications~ ...) with traditional Web +interaction (links, forms, bookmarks, back button~ ...). Eliom +proposes several ways to identify services, either by the URL (and +parameters), or by a session identifier (we call this kind of service +a //coservice//). Eliom also allows creating new (co-)services +dynamically, for example coservices depending on previous interaction +with a user. More information on the service identification mechanism +in <<a_manual project="eliom" chapter="server-services"|Eliom's manual>>. + +===Sessions=== +Eliom also offers a rich session mechanism, with //scopes// +(see <<a_manual project="eliom" chapter="server-state"|Eliom's manual>>).