-
Notifications
You must be signed in to change notification settings - Fork 54
/
CHANGES
1026 lines (889 loc) · 43.3 KB
/
CHANGES
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
===== 11.1 =====
* Compatibility with WASM
===== 11.0 =====
* Building Eliom app as executables, with Ocsigen Server as a library, without config file
===== 10.4.1 =====
* Update to OCaml 5.2 (thanks to Kate Deplaix)
===== 10.4.0 (2024-03-22) =====
* Basic client-server distillery template: sqlite is now the default backend
* Basic template now has license unlicense
* Basic template fixes
* Compatibility with Tyxml >= 4.6.0 (by Vincent Laporte)
===== 10.3.1 (2024-02-21) =====
* Fixing Problem with browser navigation https://github.com/ocsigen/eliom/issues/781
===== 10.3.0 (2024-02-18) =====
* Adding raw events handlers in Eliom_content.Html.F.Raw for server-side only programming
===== 10.2.0 (2023-12-08) =====
* Adding Dune-based basic template client-server.basic
===== 10.1.0 (2023-09-25) =====
* Fix compilation with OCaml 5.1
===== 10.0 (2022-03-08) =====
* Make Eliom_state.Ext.discard_state more robust
===== 9.0 (2021-10-16) =====
* compatibility with ocsigenserver.5.0.0 (outsourced Ocsipersist)
===== 8.8 (2021-10-05) =====
* rework Eliom_client
* more debugging info
* restore functions to access uploaded file info
===== 8.6 (2021-07-26) =====
* improvements of history handling and DOM caching
===== 8.5 (2020-10-28) ====
* Compatibility with ocsigenserver 4.0
===== 6.9 (2019-11-12) =====
* fix scrolling bug: scrolling to top happens before page change
* Server functions: log function argument on uncaught exceptions
* Compile Eliom libraries with the linkall option
===== 6.8 (2019-09-11) =====
* Use directly Pcre instead of relying on Netstring_pcre
* Improved async exception handler
* Remove camlp4 syntax
* Adapt to OCaml 4.08
* PPX extension: use migrate-parse-tree
===== 6.7 (2018-02-08) =====
* Eliom_client.Page_status: function while_active; ?stop parameter
* DOM caching: treat history as linear and keep only reachable pages in cache
===== 6.6 (2018-01-17) =====
* Add missing function Eliom_request_info.get_remote_port
* Eliom_client.Page_status.oninactive
* Some documentation on DOM caching
* Eliom_wrap: fix compilation on 32-bit architectures
===== 6.5 (2018-12-18) =====
* Compatibility with tyxml.4.3.x and js_of_caml.3.3.x
===== 6.4 (2018-12-17) =====
* Compatibility with Lwt 4.x
* New configuration option to set html content type
* Comet: deactivate when window does not have the focus; deactivate polling when idle
* eliom_request_info.in_request_handler
* Client-side non-localized parameters
* Provide a way to serve global data separately from the initial page
===== 6.3 (2018-02-08) =====
* Compatibility with OCaml 4.06, js_of_ocaml 3.0 and Lwt 3.0
* DOM caching (preview)
* Various small fixes and improvements
===== 6.2 (2017-02-07) =====
* Implement Eliom_client.onchangepage
* Fix URL-related bugs arising in mobile apps
===== 6.1 (2016-12-20) =====
* Remove redundant dependency on calendar
* Permit client routing to "./"
* -y parameter for eliom-distillery (do not ask)
* Eliom_client: do not execute onload after OCaml services
* Permit suffix params in Eliom_service.create_attached_post
===== 6.0 (2016-12-08) =====
* Improve Eliom_service and Eliom_registration APIs using GADTs
* Implement client-side services, useful for mobile apps. This includes
** client-side service registration (Eliom_registration)
** client-side service routing (Eliom_client.change_page_uri)
* Transition to PPX internally
* Compatibility with
** OCaml 4.03.0 and 4.04.0
** Js_of_ocaml 2.8.2 and newer
** TyXML 4.0 and newer
* Various bugfixes and improvements
===== 5.0 (2016-01-28) =====
* Add Eliom_shared and server-side Eliom_content.{Html5,Svg}.R modules
* Add PPX syntax extension
* Clean-up form APIs, now available under Eliom_content.Html5.{D,F}.Form
* Patches to significantly reduce the size of request data
* Compatibility with TyXML 3.6, Js_of_ocaml 2.7, and reactiveData 0.2
* Various bugfixes and enhancements
===== 4.2 (2015-07-21) =====
* Add Manip.children, to get the html children of an element.
* Simplify Html5 and Svg signatures using tyxml's signature functors.
* Various logging improvements, in particular in Eliom_client.
* Fix eliomdep's exit code when calling option "-sort".
* Fix #168: call_ocaml_service always sends boolean true.
* Makes server function return types covariant.
* Restore compatibility with ocsigenserver 2.6 and lwt 2.4.7.
* Various bugfixes and wiki updates.
===== 4.1 (2014-10-01) =====
* Compatibility with js_of_ocaml-2.5 and tyxml-3.3.0
* Improvements:
** Simplify typing of services
** Use GADT to encode service parameters (Eliom_parameter)
Eliom need OCaml 4.00 at least.
** bugfixes for service parameters
** Various bugfixes and enhancement
===== 4.0 (2014-05) =====
* Main new features:
** Reactive DOM elements (thanks to a contribution by besport.com)
** PUT and DELETE services for RESTful Eliom Applications
(Contribution by Domoco)
** EXPERIMENTAL: Mobile apps with Eliom. By making it possible to start
the application from client-side.
** Documentation improvements
* Improvements:
** Improvements in typing of services (Contribution by Jacques-Pascal Deplaix)
** Filtering data from Eliom buses
** "caml" in value or type names now replaced by "OCaml" everywhere
** New module {{{Eliom_registration.File_ct}}} to make easier to send files with
their content type
** Now possible to define services in shared sections
** Adding function {{{Eliom_client.change_url}}} to change the URL without doing a request
** Adding function {{{Eliom_service.attach_coservice'}}} to attach a non-attached coservice to an URL
** Improving comet configurations: now possible to stay idle instead of being completely inactive
** Now using defaultprotocol option (from ocsigenserver) to compute URLs
** The default expiration date for cookies on client side is now 10 years
** Now possible to send files in {{{Eliom_client.call_ocaml_service}}}
** Various additions and bugfixes in {{{Manip}}}, {{{Eliom_request_info}}},
{{{Eliom_content.html5}}} (events) (contributions by besport.com)
** eliom-destillery renamed into eliom-distillery
** Templates for eliom-distillery
** New programs: eliomdoc and eliompp
** Ocamlbuild package
** Various bugfixes
And many other things (see git commits)
===== 3.0.0 (2012-12-10) =====
* Language
** Generalized client values in server code
** Injections into client sections
* Tools
** Added eliom-destillery for generating project scaffolds
** Support Eliom interface files (.eliomi) in eliomc, eliomdep
** eliomdep: Generate dependencies between eliom-modules
** eliomc: infer only with option -infer, drop option -noinfer
** eliomc: Basic support for -i on eliom-files
** eliom{c,dep,opt},js_of_eliom: -dump to output the intermediate code
** eliomc,js_of_eliom: always open Eliom_pervasives in eliom files
* API
** Eliom_pervasives.server_function to easily access the from the client
** Get current state of a scope
** Module to access values of Eliom references in external states (Eliom_state.Ext)
** Scope names are now named scope hierarchies
** Iterate the scope hierarchy (group > session > client > request)
** Adding Eliom_parameter.(type_checker, neopt)
** Add functions to insert html5 in atom feeds
** Eliom_tools.{F,D}.html to ease creation of head-tag
** Eliom_tools.wrap_handler as an easy alernative to Eliom_registration.Customize
** Test for initial request of a client on the server
* Changed server behaviour
** Eliom_state.discard_everything now also discards request state
** Don't send nodes as data when they are part of the document
* Changed client behaviour
** Show progress cursor during navigation with change_page
** Improved error messages
** Fail on the client when a [server_function] or call_caml_service fails on the server
* Bugfixes
** Allow % for injections directly after parentheses
* Support dropped for
** Xhtml
** OCamlDuce
** Eliom_compatibility_2_1
* A myriade of bugfixes
===== 2.2.2 (2012-06-11) =====
* Fix (re-disable) generation of API doc for ocamlduce modules
===== 2.2.1 (2012-06-07) =====
Addendum to the great renaming
* Eliom_cookies -> Eliom_cookie
* Eliom_comet.Channels -> Eliom_comet.Channel
===== 2.2 (2012-06-02) =====
The great renaming: Make Eliom's API more coherent
* Dropped Eliom_pervasives, split into
** Eliom_lib (extension of stdlib)
** Eliom_content (content creation)
* Moved all Html5,Xhtml content function to Eliom_content.{Html5,Xhtml}
** {HTML5,SVG,XHTML}.M -> Eliom_content.{Html5,Svg,Xhtml}.F
** {HTML5,SVG,XHTML}.DOM -> Eliom_content.{Html5,Svg,Xhtml}.D
** Eliom_output.{Html5,Xhtml}: form functions to Eliom_content.{Html5,Xhtml}
** Eliom_client.Html5 -> Eliom_content.Html5.To_dom
** Eliom_dom -> Eliom_content.Html5.Manip
** HTML5.of_element -> Eliom_content.Html5.Of_dom.of_element
* Removed default implementations in Eliom_content.{Html5,Svg,Xhtml} (was inclusion of DOM)
* Rename Eliom_output to Eliom_registration
* Rename Eliom_registration.Eliom_appl to Eliom_registration.App
* Conform naming conventions for modules (singular, lower-case)
** XML -> Xml
** SVG -> Svg
** XML_types -> Xml_types
** XHTML_types -> Xhtml_types
** HTML5_types -> Html5_types
** Eliom_services -> Eliom_service
** Eliom_parameters -> Eliom_parameter
** Eliom_references -> Eliom_reference
** Eliom_extensions -> Eliom_extension
* Approximating compatibility module for Eliom 2.1: Eliom_compatibility_2_1
===== 2.1.1 (2012-03-20) =====
* Server: Add Eliom references of scope site
* Server: Add an non-Lwt interface to volatile Eliom references
* Client: Add an option to restrict usage of XHR.
* Bugfixes:
** Client: More robust and portable history handling
** Client: More robust CSS preloading (change_page)
** Client: Better compatibility with Opera
===== 2.1.0 (2012-02-24) =====
* Page loading rewritten.
** We do not traverse the HTML tree anymore for retrieving links
and putting events handlers, it use querySelectorAll instead.
(with a fallback for older browsers)
*** We do not send a sparse tree along the page anymore.
*** It is faster and more resilient to ugly browser plugins
** Add css loading optimisations: It fetch the css included
using @include with XHR before changing page and construct only
one concatenated css. It avoids page blinking when the css change
and is faster (browsers tend to render the page once per css).
** Unwrapping hand rewritten in js.
** And a lot of other optimisations.
* Rework of unique nodes:
** Introduce new lightweight 'unique' node of scope request,
a.k.a. DOM nodes: use it through HTML5.DOM.{div,...} or its alias
HTML5.{div,...}.
** To create unique node of scope application, the function
'HTML5.M.unique ?copy' has been renamed 'HTML5.create_global_elt
?id'
** Abstract id for application node are created with
"HTML.new_global_elt_id"
** Node representation now differs between the client and the
server. They are unwrapped on the client to simplify the XML
representation: "unique" node that have already a "Javascript DOM
representation" only contains a reference to the DOM
representation.
* Server API Changes:
** Add Eliom_state.get_*_session_group_size to know the number of
session in a session group
** Parameters of type any can't be suffixes (semantic problem)
** Add Eliom_comet.wait_timeout to notify when a client isn't active
** Allow services to setup "Cache-policy: max-age" with Text, CssText and
Files modules.
** Eliom_state.discard and discard_data now accept scope request.
* Client API Changes:
** add an Eliom_dom module provinding imperative function on unique HTML5.elt.
(for instance {{{appendChild: ?before:'a elt -> 'b elt -> 'c elt -> unit}}}).
** HTML5.M.a_on{click,...} functions directly expect a
function as parameter (XML.event_handler_of_function isn't
required anymore).
** Eliom_comet: configuration option for time until timeout after the focus is lost
** Handling wrapping of int32 type.
** Onload event handlers on HTML elements are executed when they are converted to
DOM (using Eliom_client.of_ functions). This allows them to be added to nodes not
sent in the page.
** Calls to {{{Eliom_services.onload}}} are taken into account for services sending
caml values. The handlers are executed when the call to
{{{Eliom_client.caml_call_service}}} terminates.
* Eliom syntax:
** Event handlers can now access the current event using the _ev variable
inside {{ ... }} typed according to the attribute.
** Allow modules to be used inside client expr {{ ... }} and client_expr
{{ ... }} to be used inside modules
** Add -ppopt option to eliomc
* And a lot of bugfixes.
===== 2.0.2 (2001-11-30) =====
* Compatibility with js_of_ocaml-1.0.8 and tyxml-2.0.1
* API Changes:
** Eliom_output.Redirection: use 302 as default and introduce
abstract nome for all the 30x HTTP code
** Eliom_output.Customize: remove unrequired Functor parameters.
* Delayed URl computation: this allows relative links to be created
outside of service handler.
* Client: do not ignore "onload" events attached on Dom elements
other than window.
* Bugfixes:
** Client: do not execute change_page_uri when the middle button or
any modifier key is pressed.
** Client: update correctly the location when changing page with
forms.
** Server: displaying better dynlink error messages.
** Syntax extension: avoid infinite loop while parsing first-order
module expression
** Eliom_parameters: fixing wrong parameter names for list of list
** Eliom_parameters: fixing bug causing stack overflow when lists
parameter names were wrong
** Fixing bug with non-localized parameters and service not keeping
non-attached params
** Eliom_comet: stateless channels can be registered multiple times
(close #220)
===== 2.0.1 (2011-09-28) =====
* Bugfixes in eliom appl.:
** Preload css when changing page to avoid a disgraceful "flash" effect
** Use <base href=""> to preserve links in unique node when changing page
** Fragment in URL aren't ignored anymore
** Proper exception handling in eliomc, js_of_eliom, ...
** Display a correct URL after submitting a <form>
===== 2.0 (2011-09-20) =====
* Bugfixes:
** Correct handling of HTTP redirections hidden by XHR
** Fix links from http to https on client application
===== 2.0-rc2 (2011-09-06) =====
* Feature:
** api history: when the api history is available, application URLs are more
readable (no more {{{#!}}})
* Bugfixes:
** fix browser compatibility: it should work with Firefox (>= 3.0), Chrome
(all recent version we tested), Safari 5, Opera (tested 11.51), Internet
explorer (9, ie 8 almost work)
** in forms declared outside of the sp's scope, hrefs were incorrect:
url calculation is now done for each request
** the function {{{Eliom_client.caml_call_service}}} was broken with some kind
of services
** application cookies are now always sent
** fix incorrect sharing of type variables in the syntax extension (thanks to
William Le Ferrand)
** 404 and 403 errors are not dropped by applications anymore (This fix is
partial: when the page content is application content, this still does not
work when an exception handler returns something else)
** Fix problems with url generation for non-attached coservices inside an
application
** tail recursive marshalling and demarshalling: no more limit on the depth of
data sent along the page
** Fix problems with redirection and action with `NoReload exiting the application
** Handle correctly 204 code in application (do nothing with change page, fail
with caml_call_service)
** Fix escape character '>': problem with strings containing "]]>"
===== 2.0-rc1 (2011-07-15) =====
* Eliom_client.change_page type now correctly forbid to call it on
non-eliom application services
* Stateless implementation of comet channels
* Scope and state names parameters of functions are now fused in one
parameter (called scope)
* Change the type of 'send' functions: forbid use of incompatible output
with Eliom_output.Any together.
* Change the format of page loaded by an application: all pages are sent
in HTML5 format. (first answers were in HTML5 subsequent were marshalled
caml tree)
* XML representation is now shared by client and server: conversion to
Dom nodes is made by Eliom_client.Html5.of_ functions
* Remove the need for an application container: application pages are
now classical HTML5 pages.
* Add Eliom_pervasives.{HTML5/XML/SVG}.unique function to declare XML node
handled "by reference"
* Fix ocamldoc generation with Eliom_output
* Eliom_appl are now stateless if no data is stored in session
* Allow dynamic wrapping with values to be sent to client with
caml services and comet channel
* Add Eliom_react.S: server to client React signals
* Add lazy site values: lazy evaluated one time per site
* Option to compile without preemptive threads
* And lots of simplifications and bug fixes
===== 1.91 (2011-04-08) =====
* Split the ocsigen package in three : tyxml, ocsigenserver and eliom
* Rename into eliom
* It's now possible to set a //priority// on services
registered on the same path, to choose in which order Eliom will try them.
* New implementation of internal application forms with formData
when available
* New build system for eliom application
* No type restriction in value sent from the server to the client
===== 1.90 =====
* New module {{{Eliom_client}}}
for client/server Eliom programs using js_of_ocaml.
* Eliom client: calling a service from client side code.
* Eliom: Services taking Caml values as parameters.
* Eliom: services sending Caml values.
* Eliom: new implementation of forms and links to be compatible with
client side programs.
* Eliom: sp parameter has been removed (now using Lwt's thread storage)
* Eliom: {{{Eliom_predefmod}}} renamed {{{Eliom_output}}}
* Eliom: New module {{{Eliom_output.Customize}}} to create your
own register functions from another registration module
* Eliom: Module {{{Eliom_sessions}}} replaced by {{{Eliom_state}}},
{{{Eliom_request_info}}} and {{{Eliom_config}}}.
* Eliom: new implementation of user cookies.
* Eliom: Client process cookies.
Like usual browser cookies but for one client side process.
* Eliom: Client process server side state data.
Like session data but for one client side process.
* Eliom: Client process session services.
* Eliom: Session group data.
Like session data but for all sessions in a session group.
* Eliom: Session group services.
* Eliom: session replaced by a more general concept of "server side state".
States have a scope: client process, session or group of sessions.
* Eliom: session tables and request cache now deprecated,
replaced by //Eliom references//
* Eliom client: Possible to call another service without stopping the
client side program, with bookmark support and back button support.
* New extension Comet to allow server -> client communication.
* Eliom: client/server communication channels.
* Eliom: client/server reactive programming using React.
* Eliom client: syntax extension for separating client and server code.
* Eliom: New module Eliom_output.Eliom_appl for registering pages
that belong to the same Eliom application.
* Eliom client: syntax extension and wrapping/unwrapping mechanism to
access server side values in client side code.
* Eliom client: Relinking the DOM on client side after loading a (portion of)
page. This allows nodes created on server side to be directly used in client
side code.
* Eliom client: XHR redirections for Eliom applications.
* Eliom: safe unmarshaling of caml values sent by client side programs
* Xhtml: Xhtml5 support
* Atom module and Pubsubhubbub
* OpenID support
* SVG module
* Documentation: New tutorial
* Documentation: New Eliom manual
* //and many other things ...//
===== 1.3.4 =====
* Eliom: Now supporting list of lists in service parameters
===== 1.3.3 (2010-06-13) =====
* Eliom: Fix some typos in Eliom's tutorial stylesheet
* Server: Fix usage of {{{accept_n}}} to avoid file descriptor leakage
* XHTML: Adding missing elements and attributes in XHTML.M
* Cleaning Ocsigen_cache
* Eliom: Fixing actions with uploads
===== 1.3.2 (2010-04-30) =====
* Add dummy findlib packages ocsigen.xhtml*, that depend on
ocsigen_xhtml*, for compatibility with previous versions. These
packages might be removed in a future (major) release.
* Port to Lwt 2.1.0
===== 1.3.1 (2010-04-23) =====
* Split out ocsigen_xhtml findlib package
* Configuration file: when no protocol is specified in {{{<port>}}}, listen
on IPv6 (if possible) and IPv4 (always)
===== 1.3.0 (2010-01-22) =====
* Server: Each request now has a polymorphic data table
(called //request cache//), where you can
store the data you want to keep during the whole page generation.
* Eliom: actions now return {{{()}}}.
Use the request cache to send information to fallbacks.
* Eliom: CSRF-safe coservices
* Eliom: the number of sessions without group by IP address is now limited
* Eliom: efficient implementation of limitation of sessions by groups
(or now IP) for large limits
* Eliom: the number of anonymous coservices by session is now limited
* Eliom: the number of anonymous coservices without session
by IP address is now limited
* Eliom: now possible to unregister services
* Eliom: New (very) experimental module {{{Eliom_obrowser}}}
to use Eliom with Obrowser
* Eliom: Now possible to have constant parts in suffixes to allow
URLS like {{{/param1/something/param2}}}
* Eliom: services with optional suffixes
* Eliom: form towards a service with suffix: it is now possible to choose
whether you want the redirection towards the suffix form or not
* Eliom: lists and sets in suffixes
* Eliom: Now possible to create services sending custom HTTP header values
or customizing the content-type
* Eliom: New notion: "Non localized parameters". Can be sent to any service.
* Eliom: changing the order of parameters for user type form widgets
* Eliom: changing the order of parameters for user type form widgets
* Eliom: Eliom_tools.menu and hierarchical_menu now compare the URL strings
(was: compare the service)
* Eliom: textarea now take a string (was pcdata)
* Eliom: The type of the iterator for lists in parameters has changed
* Eliom: New options in configuration file to set session timeouts
* Server: now possible to give the config file name to reload server command
* Server: now possible to do a "graceful shutdown" of the server
using the "shutdown" server command
* Server: now possible to add custom commands for the command pipe
* Server: EXPERIMENTAL now possible to observe HTTP headers before sending
the result
* Xhtmlpp: the parsing now fails if a quotation for an Xhtml element
contains superfluous elements. (This can cause the parsing of previously
incorrect code to fail)
* Staticmod/Eliom: attempting to access a file whose name contains a NULL
character will result in a 403.
* Server: HTTP headers containing newlines are now properly escaped.
* Server: correct missing xmlns in Xhtml DTD
* Server: now send last-modified and etag headers when returning a 403
* Server: Now accepting several requests at a time
(as explained in "Accept()able strategies" by Tim Brecht & all)
* Rewritemod: more rewriting possibilities (still very basic)
* Eliom menus are now more robust when finding which item is active
* Fixed handling of incorrectly-sized multipart requests. Thanks to
Mauricio Fernandez for noticing the bug
* Upload directory and maximum file size can now be configured on a
per-site basis
* Renamed the field of Ocsigen_http_frame.t
* Javascript events support in Xhtml.M ; Thanks to john @ 5070.info
for the patch
===== 1.2.2 (2009-10-17) =====
* Add react and lwt.unix to the list of built-in findlib packages
===== 1.2.1 (2009-09-26) =====
* Lwt 2.0 compatibility:
** Adapt to Lwt.t/Lwt.u splitting
** fix Makefile to deal with lwt.unix findlib package
* Fix ocsipersist-dbm Makefile
* Fix for pcre-ocaml 6.0.0
* Fix typo regarding --stubdir in configure script
===== 1.2.0 (2009-03-25) =====
* Native code version now compiled by default
* Now possible to link extensions and Eliom modules statically, for
example to use a native code server on platforms where native
dynlink is not supported
* Server: Partial requests implemented (Range HTTP header)
* Build C stubs into a shared library so that bytecode executables
may be not linked in custom mode; new {{{--stubdir}}} option in
{{{configure}}} script
* Eliom: non-attached services now called "named non-attached
coservices" and created using {{{Eliom_services.new_coservice'}}}
with the optional {{{name}}} parameter
* Eliom: now possible to create named attached coservices using the
optional {{{name}}} parameter
* Eliom: now possible to write libraries for Eliom sites, loaded
inside {{{<host>}}}, but not generating any page
* Eliom and server: EXPERIMENTAL now possible to make extensions
that can use Eliom's data
* XHTML.M's pretty printer: now possible to set the DOCTYPE manually
* Eliom: now possible to set manually the DOCTYPE when registering
an XHTML.M service
* Redirectmod and Revproxy: now possible to do more complex
rewriting
* Accesscontrol: add support for {{{<port>}}} and {{{<ssl>}}}
conditions
* Config file: {{{aliases}}} attribute now called {{{hostfilter}}}
* Revproxy and Redirectmod: now possible to filter on server, port
and protocol
* New extension extendconfiguration to allow dynamic changes in the
configuration (mimetypes, charsets, followsymnlink, directory
listing, ...)
* Server: new module {{{LocalFiles}}} factoring the common parts
for sending static files (with Eliom and staticmod for example),
while checking that the files can safely be sent.
* Now possible to use XHTML pretty printers without Ocsigen, using
the {{{xhtmlpretty.cma}}} library
* Add {{{Ocsigen_lib.register_exn_printer}}}, better error messages
* Now possible to use the same configuration file in native code and
in bytecode (.cmo/.cma filenames are internally translated to
.cmxs)
* Signature of Ocsigen_extensions.register_extension is now more
complete and more lightweight
* Userconf: the options set in the local .userconf file are kept
in the enclosing {{{<site>}}} tag
* Server: possibility to ignore or to supply an alternative
command-line
* Ocsigen_http_client: timeout when the distant server does not
exists
* OCaml versions < 3.10 are not supported anymore
* Extensions are now much more strict w.r.t. the syntax of
configuration files
* Staticmod: accessing a directory for which indexing is disallowed
returns an error 404 (instead of a 403 previously)
===== 1.1.0 (2008-07-15) =====
* Lwt removed (now distributed separately)
* {{{XHTML.M}}} pretty printer: fixing pretty printing of empty tags
(for browser compatibility)
* Eliom_duce: New pretty printer for XHTML fixing pretty printing of
empty tags
* Eliom: secure sessions, secure services, (absolute) https
links/forms, and using secure cookies
* Eliom: Adding special "void action", without any parameters
* Eliom: {{{Eliom_predefmod.Redirections}}} now called
{{{Eliom_predefmod.String_redirection}}}, and adding new module
{{{Eliom_predefmod.Redirection}}} that use GET services without
parameters as data type.
* Eliom and XHTML.M: Small changes of types in interfaces
* Eliom: New session ID generator
* Eliom: Adding types {{{int32}}} and {{{int64}}} for parameters and
forms
* Eliom: Adding functions {{{lwt_get_form}}} and {{{lwt_post_form}}}
for creating forms using cooperative functions
* Eliom and Staticmod: now possible to give GET parameters to static
pages
* Eliom: Bugfix in Makefiles for native code version
* Eliom forms: Adding missing types in interfaces
* Eliom_tools: current page is now optional in menus
* Userconf and Eliom: there was a bug when loading both Eliom and
Userconf together
* Reverse Proxy: Now sending content length when available
* Web server: The default content-type is now
{{{application/octet-stream}}}
* Creating and installing a cma file for all Ocsigen libraries not
installed elsewhere
* Ocsipersist-dbm: fixing bug when removing data
* Deflatemod: fixing memory leak
* And small bugfixes in XHTML.M, Eliom, ...
===== 1.0.0 (2008-04-01) =====
* Config file: findlib integration
* Eliom and Ocsigen: changing namespace convention for modules
* Access control: simplification of config file syntax
* Eliom: Allowing (module dependent) parameters for registration
functions
* New xhtml output without pretty printing
* Web server: Bugfix in HTTP/1.0 with keep-alive
* Reverse proxy: Bugfix GET parameters were wrong
* Reverse proxy: Bugfix memory consumption when the connection was
closed by client
===== 0.99.5 (2008-01-11) =====
* Revproxy: pipelining of requests
* Access control: simplification, generalization of filters and
syntax changes in config file
* Eliom: EXPERIMENTAL session groups
* Eliom: non-attached services
* Eliomduce: new functor {{{SubXhtml}}} for creating registration
modules
* Eliomduce: new module Eliomducetools with same features as
Eliomtools, but for Eliomduce
* Web server: now possible to split the configuration file into
several files using the {{{<extconf/>}}} option.
* Web server: now possible to have {{{<site>}}} option inside
another {{{<site>}}} in configuration files, and the the first one
is optional
* Web server: EXPERIMENTAL user configuration files, with restricted
possibilities (for security reasons)
* Web server: IPv6 support
* Deflatemod: now possible to filter on file extensions
* Eliom: new option to keep GET non-attached parameters or not when
doing a POST form towards a non-attached coservice.
* Eliom: bugfix path of session cookies
* Eliom: bugfix POST non-attached coservices called from a page with
non-attached GET parameters were not found.
* Lwt: now catching exceptions raised after timeouts
* Cgimod: bufixes in path handling
* Web server: bugfix - some files were not closed
===== 0.99.4 (2007-11-21) =====
* Ocsigen: Changes in the extension mechanism. The extensions are
not tried in the order in which they are loaded any more, but in
the order in which the options are specified for each site in the
configuration file.
* New experimental extension: access control
* A few small enhancements
** Eliom: internal cookie management rewritten (+ bugfix)
** Eliom: Small changes in function names
** Eliom: now retry all extensions after actions (not only Eliom)
** Eliom: cleaning {{{Eliommod}}} interface
** Ocsigen server: Internal changes in server (removing "send"
functions, debug messages lazier)
** Lwt: Adding a few functions in {{{Lwt_chan}}} interface
** Staticmod: Allowing default error pages for HTTP errors to be
customized
** Ocsipersist (dbm and sqlite): better handling of database
errors
** XHTML: New pretty printer for xhtml using streams (up to 15%
speedup on requests)
** XHTML: Allowing any value for {{{<link>}}} rel attribute (for
example {{{shortcut icon}}}).
===== 0.99.3 (2007-11-07) =====
* Ocsigen: New module Deflatemod to compress data before sending to
the browser.
* Ocsigen: EXPERIMENTAL - New module Revproxy (reverse proxy).
* Eliom: New session mechanism, with the ability to name the
sessions and thus have several sessions for the same site.
* Eliom: Now possible to have one site with session inside a
subdirectory of another one.
* Lwt: New module {{{Lwt_timeout}}} to implement timeouts, new
module {{{Lwt_chan}}}, new module {{{Lwt_mutex}}}, new function
{{{Lwt_unix.abort}}} to make all threads waiting on a file
descriptor abort with an exception.
* Ocsigen: New implementation of lots of Web server
internals. Better management of Ocsigen's streams, file
descriptors, exceptions, timeouts ...
* A lot of enhancements and bug fixes:
** Eliom: Single {{{<select>}}} now always return one parameter
({{{`Opt}}} replaced by {{{`One}}}, and the first item is
selected by default to prevent selecting nothing with some
browsers).
** Eliom: More secure cookies.
** Eliom: new version of the tutorial.
** Eliom split in several modules.
** Eliom: Nurpawiki example now called Miniwiki.
** Eliom: {{{any_...}}} form widgets now called {{{raw_...}}}
** Eliom: {{{~url}}} parameter (for {{{new_service}}}, etc.) now
called {{{~path}}}.
** Eliom: Bugfix escaping characters in URL was wrong
** Eliom: Adding a new parameter {{{~prefix}}} to
{{{new_external_service}}} for the scheme and server name. Not
encoded.
** Eliom: Eliomboxes now called Eliomtools, with new widget
"hierarchical menu" for sites with sections and subsections.
** Eliom: Adding {{{Eliompredefmod.Streamlist}}}.
** Ocsigen: EXPERIMENTAL - now possible to do HTTP requests.
** Ocsigen: New module Redirectmod to define HTTP redirections in
the config file.
** Ocsigen: Make possible to create new kind of extensions to
filter the output (for ex compression)
** Ocsigen: Bugfix - HEAD requests were broken in 0.99.2
** Ocsigen: Bugfix - HTTP errors were sometimes sending a body in
respond to a HEAD request.
** Ocsigen: Now sending 403 when upload is forbidden
** Ocsigen: HTTP headers {{{If-Match}}}, {{{If-None-Match}}},
{{{If-Unmodified-Since}}} implemented
** Cgimod: Bugfix - HEAD requests were sending an error 500.
** Cgimod: Bugfix - Some file descriptors were not closed.
** Cgimod: Implementing a timeout on CGI scripts.
===== 0.99.2 (2007-08-21) =====
* Eliom: New implementation of forms. All missing cases implemented,
and more possibilities, such as untyped forms.
* Ocsipersist: New implementation of Ocsipersist using SQLite
instead of DBM. (You can still use the old one).
* Cgimod: EXPERIMENTAL - New extension for using CGI scripts with
Ocsigen (including PHP through CGI).
* Staticmod: Allow several static directories for one site.
* Staticmod: Allow listing the content of directories.
* Ocsigen: HTTP Header "Transfer-Encoding: chunked" implemented for
sending or receiving data without knowing the Content-Length
* Ocsigen: Bugfix in preemptive.ml when lots of simultaneous
connections
* Ocsigen: Improvements in the extension mechanism
* Ocsigen: New file extensiontemplate.ml: an example explaining how
to write your own extensions
* Ocsigen: Bugfix - fixing limitation of simultaneous connections
* Eliom: Bugfix - type of {{{all_suffix_string}}} was wrong in
{{{eliom.mli}}}.
* Eliom: GET Services do not answer any more to POST requests
without parameters.
===== 0.99.1 (2007-05-15) =====
* Eliom: Now possible to set an exception handler for the whole site
to personalize error pages (404, 500, etc.)
* Eliom: Now possible to register main services after initialization
* Eliom: Unifying {{{register}}} and {{{register_public}}}. Use the
optional {{{~sp}}} parameter to register during session.
* Eliom: Idem for all functions {{{..._during_init}}} and
{{{..._during_session}}}
* Eliom: Functions to remove data from tables
* Ocsigen: Debug mode: the exception is printed on the error page
* Ocsigen: Bugfix in {{{Preemptive.detach}}} when used with
{{{Lwt_unix.run}}}
* Ocsigen: Bugfix - launching ocsidbm for MacOS
* Eliom: Bugfix - GC of sessions and session data
* Eliom: Bugfix - GET actions were not working properly
===== 0.99.0 (2007-05-05) =====
* EXPERIMENTAL: Native code support. It is now possible to use
Ocsigen in native code. BUT: to use that, you need a modified
version of OCaml, that allows dynlinking of native code modules
(natdynlink branch in OCaml's CVS, by Alain Frisch).
* OCaml 3.10 support (syntax extension with new Camlp4)
* The functor Ocsigen.Make (add new types of pages for Ocsigenmod)
is now divided into two functors, one for "register" functions,
and one for forms and links (if needed).
* New module for dynamic page creation called Eliom. Ocsigenmod is
now deprecated but is still in the distribution. Eliom is based on
Ocsigenmod.
* Eliom: replacing auxiliary services by coservices. Coservices may
have GET or (and) POST state parameter.
* Eliom: adding notion of non-attached coservices. They can take GET
or POST parameters.
* Eliom: Creation of a new module {{{Actions}}}. It is possible to
register actions on main services, coservices (attached or not).
* Eliom: Removing the old actions (use new actions towards
non-attached coservices instead)
* Eliom: New module {{{Unit}}} for actions without reload
* Eliom: New module {{{Redirections}}} to register redirection
pages.
* Eliom: New module {{{Files}}} to register services that send
files.
* Eliom: New module {{{Any}}} to register services that choose what
they send.
* Eliom: New module {{{Blocks to register services that send a box
of type body content.
* Eliom: Module {{{Text}}} replaced by {{{HtmlText}}}, and adding
{{{CssText}}} and {{{Text}}} (for any content type).
* Eliom: Bugfix - Typing errors of parameters are now caught only
if the names of parameters fit exactly.
* Eliom: {{{register_service}}} now called {{{register}}}.
* Eliom: EXPERIMENTAL Fallbacks can now get a "Session expired" from
previous pages and actions may send information to the page
generated (using exception).
* Eliom: Now possible to pre-apply services (to make links or to be
used as fallbacks for coservices)
* Eliom: services can now set their own cookies
* Eliom: Disposable coservices (coservices that you can use only n
times)
* Eliom: Nurpawiki: example of Wiki written by Janne Hellsten
* Eliom: New handling of URLs with suffixes
* Ocsigen: New module Ocsipersist for persistent data, using its own
DBM server (ocsidbm)
* Eliom: Persistent sessions using Ocsipersist
* Eliom: Timeouts for sessions
* Eliom: Timeouts for coservices
* Ocsigen: It is now possible to give parameters to extensions in
configuration file.
* Ocsigen: Simplifying parsing of configuration file (could be
improved).
* Ocsigen: EXPERIMENTAL It is now possible to reload the modules
without stopping the server.
* Staticmod: Rewriting of URLs using regular expressions.
===== 0.6.0 (2007-03-14) =====
* {{{configure}}} script
* {{{<select>}}} in forms, by Stéphane Dalmas
* EXPERIMENTAL: The Web server is now extensible. It means that you
can add modules (like Apache modules) for generating pages,
filters of requests, extensions of config files. For now there are
two modules, one for static pages, and one for dynamic pages. The
only changes for users is that they need to dynlink staticmod.cmo
and ocsigenmod.cma from the configuration file. The syntax of
config file for modules and staticdir also changed.
* It is now possible to specify the encoding of characters for each
sub-site.
* Now usable with Ocamlnet 2.2 or 1.1.2.
* EXPERIMENTAL: If OCamlDuce is installed on your system, you can
now use it to do the type-checking of your pages (see the
documentation). Warning: This is broken with OCamlDuce 3.09.2
patch level 2. You need at least OCamlDuce 3.09.3 patch level 1.
* Removing Ocsimore from the default distribution. That version of
Ocsimore is not supported anymore. Ocsimore has been rewritten
from scratch by Piero Furiesi.
===== 0.5.1 (2006-12-14) =====
* Bugfix Konqueror: Multipart forms with now work correctly with
Konqueror
* Bugfix Internet Explorer: getting around a bug of Internet
Explorer while displaying page
* Bugfix NetBSD: Makefile
* Bugfix Debian for HPPA, Mips, Alpha: Makefile
* Bugfix: preemptive.cmi was missing in the installation directory
* Adding manpage (S. Mimram)
* Adding logrotate configuration
* Daemon mode: adding setsid and redirect stdout/stderr to
/dev/null. Closing stdin.
===== 0.5.0 (2006-11-23) =====
* HTTP 1.1 improved (HEAD, ETag, keep-alive implemented,
If-Modified-Since, ...)
* HTTPS support
* Pipelining of requests
* Server can listen on several ports
* Multiple servers: you can now define several servers in the config
file.
* Virtual hosts: filtering on hostnames/ports (with wildcards)
* Asynchronous file upload with multipart support
* Large file transfer improved.
* MIME types are now parsed from a file
* Changes in the syntax of config file
* Accessors for server parameters. Use ({{{get_user_agent sp}}})
instead of {{{sp.user_agent}}}.
* Page generation is now using {{{Lwt}}} cooperative threads, to
make it possible the generation of several pages at the same
time. Practically, add {{{Lwt.return}}} before the page you want
to send, and use cooperative input/output functions.
* Typing errors of parameters are now catchable.
* {{{static_dir}}} is now a function
* Most of global references have been removed. You now need to give
sp as parameter to {{{register_for_session}}}, {{{static_dir}}},
{{{close_session}}}, etc.
* Links and forms now take {{{server_params}}} instead of
{{{current_url}}} ({{{sp}}} is shorter than {{{sp.current_url}}})
* EXPERIMENTAL: Use of preemptive threads for non cooperative
libraries ({{{detach}}} function).
* EXPERIMENTAL: The {{{Ocsigen}}} module now contains a functor
{{{Make}}} to allows the use of several ways of generating
XHTML. The default way (using {{{XHTML.M}}} or the syntax
extension) can be used by doing {{{open Ocsigen.Xhtml}}}. There is
also an untyped xhtml generation module called {{{Ocsigen.Text}}}.
* EXPERIMENTAL: extension of forms.
* Reorganisation of the code
* Bugfixes in makefiles
* Bugfix: escaping of strings in xhtml with syntax extension (thanks
to David Mentre)
===== 0.4.0 (2006-06-06) =====
* Full reimplementation of the core using Generalized Algebraic Data
Types,
* {{{_int}}}, {{{_string}}}, etc. are now called {{{int}}},
{{{string}}}, etc.
* The type {{{_http_params}}} is now called {{{server_params}}},
* Services functions now all take 3 parameters, one for server
parameters, one for GET parameters, and one for POST
parameters. Note that {{{**}}} is used to create **pairs** and not
tuples.
* The {{{a}}} and {{{post_form}}} functions now take a fix number of
parameters, corresponding to GET parameters.
* //URLs// are now called //services//,
* //state URLs// are now called //auxiliary services//,
* {{{register_post_url}}} does not exist anymore. use
{{{register_service}}} instead (idem for all other
{{{register_post_*}}} functions).
* Changes for prefix URLs
* Small changes for actions
* EXPERIMENTAL: sums, bool and list types for services and forms