Commit 491c5383c8cfaa9817acf8479d66affd2fb3ff02

Authored by David RENÉ
1 parent 3ea7aa40

move all making_a_web_site type declaration into a separate file.

better management of the web plugin
extend logger dump from 1024 to 2048 bytes
net_services_protocols/logger_service.anubis
... ... @@ -267,7 +267,9 @@ define Message
267 267 String log_string,
268 268 Int level
269 269 )=
270   - with string = if length(log_string) > 1024 then (if sub_string(log_string, 0, 1024) is success(s) then s else "?") + "..."
  270 + with len = length(log_string),
  271 + //println("len log string "+len);
  272 + with string = if length(log_string) > 2048 then (if sub_string(log_string, 0, 2048) is success(s) then s else "?") + "... original log string length "+len
271 273 else log_string,
272 274 with log_msg = message(_CXM_LOGGER_LOG),
273 275 forget(add_string(log_msg, "LogName", logger_name));
... ...
web/CXM_making_a_web_site.anubis
... ... @@ -58,7 +58,8 @@ read system/string.anubis
58 58 read system/logger.anubis
59 59 transmit CXM_common.anubis
60 60 transmit CXM_multihost_http_server.anubis
61   -read web/mime.anubis
  61 +read web/mime.anubis
  62 +read calexium_lib/web/plugin/plugin.anubis
62 63 read CXM_cookies.anubis
63 64 read CXM_json.anubis
64 65 transmit CXM_web_dump.anubis
... ... @@ -67,6 +68,7 @@ transmit CXM_web_session.anubis
67 68 transmit CXM_web_action.anubis
68 69  
69 70 transmit calexium_lib/web/types/web_action_name.anubis
  71 +transmit calexium_lib/web/types/making_a_web_site.anubis
70 72  
71 73 //TODO move anywhere
72 74  
... ... @@ -303,22 +305,7 @@ public define String
303 305 sub-boxes as there are actions. For this reason, we define the following type for
304 306 representing actions (where '$State' is the type representing session informations):
305 307  
306   -public type Web_Action($State):
307   - http_action (String name, // name of action
308   - ($State) -> Bool allow, // true if action allowed
309   - (HTTP_Info http_info,
310   - List(Web_arg) web_args, // actually only 'operands' web arguments
311   - $State state) -> $State do_it),
312   - https_action (String name, // name of action
313   - ($State) -> Bool allow, // true if action allowed
314   - (HTTP_Info http_info,
315   - List(Web_arg) web_args, // actually only 'operands' web arguments
316   - $State state) -> $State do_it),
317   - http_https_action (String name,
318   - ($State) -> Bool allow,
319   - (HTTP_Info http_info,
320   - List(Web_arg) web_args,
321   - $State state) -> $State do_it).
  308 +
322 309  
323 310 'http_action's are executed only under HTTP, and 'https_action's are executed only
324 311 under HTTPS. 'http_https_action's may be executed under both types of connections.
... ... @@ -352,7 +339,7 @@ public type Web_Action($State):
352 339 where the type 'HTTP_Answer' (defined below in this file) abstractly represents HTML
353 340 pages.
354 341  
355   -public type HTTP_Answer:...
  342 +//public type HTTP_Answer:...
356 343  
357 344 It should be clear that states and pages are deeply linked together. Indeed, we really
358 345 understand the page shown to the client as a representation of the current state of the
... ... @@ -360,54 +347,11 @@ public type HTTP_Answer:...
360 347 taken from the data bases.
361 348  
362 349  
363   -public type HTML_Partial_Content:...
  350 +//public type HTML_Partial_Content:...
364 351  
365 352  
366 353  
367   -public type WEB_Controller_Result:
368   - http_answer(
369   - WEB_Session session, //modified session
370   - HTTP_Answer http_answer //http answer
371   - ),
372   - http_answer(
373   - HTTP_Answer http_answer //http answer
374   - ),
375   - redirect( //internal redirection, session is modified to call the right controller and action
376   - WEB_Session session
377   - ),
378   - redirect( //internal redirection, session is modified to call the right controller and action
379   - WEB_Session session,
380   - String controller,
381   - String action_name
382   - ),
383   - redirect_to_previous,
384   - redirect_to_previous(
385   - Var(List(WEB_Session_Field)) fields
386   - ),
387   - ajax(
388   - Maybe(WEB_Session) mb_session, //modified session if success else failure
389   - HTTP_Answer http_answer //http answer
390   - ),
391   - ajax(
392   - Maybe(WEB_Session) mb_session, //modified session if success else failure
393   - HTML_Partial_Content content,
394   - String additional_script
395   - ),
396   - ajax(
397   - Maybe(WEB_Session) mb_session, //modified session if success else failure
398   - Printable_tree content,
399   - String additional_script
400   - ),
401   - send_file(
402   - String full_path, //full path with file name of the file to send
403   - Content_Disposition content_disposition //in which form the file must consider by the client (inline: try to display to user, attachment: save as file)
404   - ),
405   - renderer_content(
406   - Maybe(WEB_Session) mb_session, //modified session if success else failure
407   - String title,
408   - HTML_Partial_Content content,
409   - )
410   -.
  354 +
411 355  
412 356 public define WEB_Controller_Result
413 357 ajax
... ... @@ -492,50 +436,26 @@ public define WEB_Controller_Result
492 436  
493 437 public define WEB_Controller_Result
494 438 renderer_content(
495   - String title,
496 439 HTML_Partial_Content content,
497 440 )=
498   - renderer_content(failure, title, content)
  441 + renderer_content(failure, content)
499 442 .
500 443  
501 444 public define WEB_Controller_Result
502 445 renderer_content(
503 446 WEB_Session session, //modified session if success else failure
504   - String title,
505 447 HTML_Partial_Content content,
506 448 )=
507   - renderer_content(success(session), title, content)
  449 + renderer_content(success(session), content)
508 450 .
509 451  
510   -
511   -public type WEB_Action_Allowed_Protocol:
512   - http,
513   - https,
514   - http_https.
515   -
516   -public type WEB_Action:
517   - web_action(
518   - WEB_Action_Name name, // name of action
519   - WEB_Action_Allowed_Protocol allowed_proto,
520   - (WEB_Session) -> Bool allow, // true if action allowed
521   - (WEB_Session) -> WEB_Controller_Result do_it
522   - )
523   -.
524   -
525   -public type WEB_Controller:
526   - web_controller(
527   - String name, //controller name
528   - Var(List(WEB_Action)) controller_actions, //list of all actions of that controller
529   - (WEB_Session)-> WEB_Controller_Result error //Error renderer
530   - )
  452 + public define WEB_Controller_Result
  453 + redraw(
  454 + HTML_Partial_Content content,
  455 + )=
  456 + redraw(failure, content)
531 457 .
532 458  
533   -public type WEB_Page_Renderer:
534   - web_page_renderer(
535   - String name, //renderer name
536   - (WEB_Session _session, String title, HTML_Partial_Content _content) -> HTTP_Answer page_layout //call back for rendering page
537   - )
538   -.
539 459  
540 460  
541 461 define List(HTTP_header)
... ... @@ -951,52 +871,16 @@ public define Start_Web_Sites_Result
951 871 For easy reference, we gather below the definitions of all the types used by the HTML
952 872 interface, and we comment them immediately.
953 873  
954   -public type HTML_Off_Form:...
  874 + //public type HTML_Off_Form:...
955 875  
956   -public type HTML_Size:
957   - absolute(Int), // in pixels
958   - percentage(Int).
  876 +
959 877  
960 878  
961 879  
962 880  
963   - This indicate the way of reading text.
964   -public type Reading_Way:
965   - ltr, //the text is readable from "Left To Right" like english
966   - rtl. //the text is readable from "Right To Left" like arabic
967   -
968   -
969   -// Following types are define to prohib any arguments order error
970 881  
971   -/**
972   - * String value for 'id' attribut
973   - */
974   -public type HTML_Id:
975   - html_Id(String id).
976   -
977   -/**
978   - * String value for 'class' attribut
979   - */
980   -public type HtmlClass:
981   - htmlClass(String class).
982   -
983   -/**
984   - * Name used in arguments list when form is submitted.
985   - */
986   -public type WebArgName:
987   - wan(String name).
988 882  
989   -/**
990   - * Value passed to arguments list when form is submitted (for RadioButton and CheckBox).
991   - */
992   -public type WebArgValue:
993   - wav(String value).
994 883  
995   -/**
996   - * Initial value of an input field.
997   - */
998   -public type InitialValue:
999   - init(String value).
1000 884  
1001 885 public define Printable_tree [HTML_Id x . Printable_tree y] = str_pt(x.id, y).
1002 886 public define Printable_tree [HtmlClass x . Printable_tree y] = str_pt(x.class, y).
... ... @@ -1004,182 +888,16 @@ public define Printable_tree [WebArgName x . Printable_tree y] = str_pt(x.name
1004 888 public define Printable_tree [WebArgValue x . Printable_tree y] = str_pt(x.value, y).
1005 889 public define Printable_tree [InitialValue x . Printable_tree y] = str_pt(x.value, y).
1006 890  
1007   -public type HTML_tooltip:
1008   - html_tooltip
1009   - (
1010   - String title,
1011   - String keyword,
1012   - Int width,
1013   - ),
1014   - html_tooltip_ext
1015   - (
1016   - String title,
1017   - String extend_type,
1018   - String class_suffix,
1019   - List((String, String)) ext_args
1020   - ),
1021   - html_tooltip_ext //same without class suffix. This means we use awesome font
1022   - (
1023   - String title,
1024   - String extend_type,
1025   - List((String, String)) ext_args
1026   - ),
1027   - html_tooltip
1028   - (
1029   - String title,
1030   - WEB_Action_Name wan,
1031   - List((String, String)) ext_args
1032   - ).
1033 891  
1034 892  
1035   -public type HtmlEvents:
1036   - // Window Event Attributes
1037   - onafterprint, //HTML5 Script to be run after the document is printed
1038   - onbeforeprint, //HTML5 Script to be run before the document is printed
1039   - onbeforeunload, //HTML5 Script to be run when the document is about to be unloaded
1040   - onerror, //HTML5 Script to be run when an error occurs
1041   - onhashchange, //HTML5 Script to be run when there has been changes to the anchor part of the a URL
1042   - onload, // Fires after the page is finished loading
1043   - onmessage, //HTML5 Script to be run when the message is triggered
1044   - onoffline, //HTML5 Script to be run when the browser starts to work offline
1045   - ononline, //HTML5 Script to be run when the browser starts to work online
1046   - onpagehide, //HTML5 Script to be run when a user navigates away from a page
1047   - onpageshow, //HTML5 Script to be run when a user navigates to a page
1048   - onpopstate, //HTML5 Script to be run when the window's history changes
1049   - onresize, //HTML5 Fires when the browser window is resized
1050   - onstorage, //HTML5 Script to be run when a Web Storage area is updated
1051   - onunload, // Fires once a page has unloaded (or the browser window has been closed)
1052   - // Form element events
1053   - onblur, // Fires the moment that the element loses focus
1054   - onchange, // Fires the moment when the value of the element is changed
1055   - oncontextmenu, //HTML5 Script to be run when a context menu is triggered
1056   - onfocus, // Fires the moment when the element gets focus
1057   - oninput, //HTML5 Script to be run when an element gets user input
1058   - oninvalid, //HTML5 Script to be run when an element is invalid
1059   - onreset, // Fires when the Reset button in a form is clicked
1060   - onsearch, // Fires when the user writes something in a search field (for <input="search">)
1061   - onselect, // Fires after some text has been selected in an element
1062   - onsubmit, // Fires when a form is submitted
1063   - // Keyboard events (Not valid in base, bdo, br, frame, frameset, head, html, iframe, meta, param, script, style, and title elements.)
1064   - onkeydown, // Fires when a user is pressing a key
1065   - onkeypress, // Fires when a user presses a key
1066   - onkeyup, // Fires when a user releases a key
1067   - // Mouse events (Not valid in base, bdo, br, frame, frameset, head, html, iframe, meta, param, script, style, and title elements.)
1068   - onclick, // Fires on a mouse click on the element
1069   - ondblclick, // Fires on a mouse double-click on the element
1070   - onmousedown, // Fires when a mouse button is pressed down on an element
1071   - onmousemove, // Fires when the mouse pointer is moving while it is over an element
1072   - onmouseout, // Fires when the mouse pointer moves out of an element
1073   - onmouseover, // Fires when the mouse pointer moves over an element
1074   - onmouseup, // Fires when a mouse button is released over an element
1075   - onwheel, //HTML5 Fires when the mouse wheel rolls up or down over an element
1076   - //Drag Events
1077   - ondrag, //HMTL5 Script to be run when an element is dragged
1078   - ondragend, //HTML5 Script to be run at the end of a drag operation
1079   - ondragenter, //HTML5 Script to be run when an element has been dragged to a valid drop target
1080   - ondragleave, //HTML5 Script to be run when an element leaves a valid drop target
1081   - ondragover, //HTML5 Script to be run when an element is being dragged over a valid drop target
1082   - ondragstart, //HTML5 Script to be run at the start of a drag operation
1083   - ondrop, //HTML5 Script to be run when dragged element is being dropped
1084   - onscroll, //HTML5 Script to be run when an element's scrollbar is being scrolled
1085   - //Clipboard Events
1086   - oncopy, //HTML5 Fires when the user copies the content of an element
1087   - oncut, //HTML5 Fires when the user cuts the content of an element
1088   - onpaste, //HTML5 Fires when the user pastes some content in an element
1089   - //Media Events
1090   - onabort, //HTML5 Script to be run on abort
1091   - oncanplay, //HTML5 Script to be run when a file is ready to start playing (when it has buffered enough to begin)
1092   - oncanplaythrough, //HTML5 Script to be run when a file can be played all the way to the end without pausing for buffering
1093   - oncuechange, //HTML5 Script to be run when the cue changes in a <track> element
1094   - ondurationchange, //HTML5 Script to be run when the length of the media changes
1095   - onemptied, //HTML5 Script to be run when something bad happens and the file is suddenly unavailable (like unexpectedly disconnects)
1096   - onended, //HTML5 Script to be run when the media has reach the end (a useful event for messages like "thanks for listening")
1097   - onerror, //HTML5 Script to be run when an error occurs when the file is being loaded
1098   - onloadeddata, //HTML5 Script to be run when media data is loaded
1099   - onloadedmetadata, //HTML5 Script to be run when meta data (like dimensions and duration) are loaded
1100   - onloadstart, //HTML5 Script to be run just as the file begins to load before anything is actually loaded
1101   - onpause, //HTML5 Script to be run when the media is paused either by the user or programmatically
1102   - onplay, //HTML5 Script to be run when the media is ready to start playing
1103   - onplaying, //HTML5 Script to be run when the media actually has started playing
1104   - onprogress, //HTML5 Script to be run when the browser is in the process of getting the media data
1105   - onratechange, //HTML5 Script to be run each time the playback rate changes (like when a user switches to a slow motion or fast forward mode)
1106   - onseeked, //HTML5 Script to be run when the seeking attribute is set to false indicating that seeking has ended
1107   - onseeking, //HTML5 Script to be run when the seeking attribute is set to true indicating that seeking is active
1108   - onstalled, //HTML5 Script to be run when the browser is unable to fetch the media data for whatever reason
1109   - onsuspend, //HTML5 Script to be run when fetching the media data is stopped before it is completely loaded for whatever reason
1110   - ontimeupdate, //HTML5 Script to be run when the playing position has changed (like when the user fast forwards to a different point in the media)
1111   - onvolumechange, //HTML5 Script to be run each time the volume is changed which (includes setting the volume to "mute")
1112   - onwaiting, //HTML5 Script to be run when the media has paused but is expected to resume (like when the media pauses to buffer more data)
1113   - //Misc Events
1114   - onshow, //HTML5 Fires when a <menu> element is shown as a context menu
1115   - ontoggle. //HTML5 Fires when the user opens or closes the <details> element
1116   -
1117   -public type CoreAttrs:
1118   - empty,
1119   - id (String), //A unique identifier for the element.
1120   - //There must not be multiple elements in a document that have the same id value.
1121   - class (String), //A name of a classification, or list of names of classifications, to which the element belongs
1122   - style (String), //Specifies zero or more CSS declarations that apply to the element [CSS].
1123   - title (String), //Advisory information associated with the element.
1124   - lang (String), //Specifies the primary language for the contents of the element and for any of the element’s attributes that contain text.
1125   - dir (Reading_Way), //Specifies the element’s text directionality.
1126   - accesskey (Word8), //A key label or list of key labels with which to associate the element; each key label represents
1127   - //a keyboard shortcut which UAs can use to activate the element or give focus to the element.
1128   - tabindex (Int), //Specifies whether the element represents an element that is is focusable (that is, an element which is part of the
1129   - //sequence of focusable elements in the document), and the relative order of the element in the sequence of focusable
1130   - //elements in the document.
1131   - //Anubis specific
1132   - attr (String, String), //intended to provide unknown attritute
1133   - event (HtmlEvents, String),
1134   - tooltip (HTML_tooltip),
1135   -
1136   - //HTML5
1137   - data (String name, String value),
1138   - contenteditable(Bool), //Specifies whether the contents of the element are editable
1139   - contextmenu(String), //Identifies a menu with which to associate the element as a context menu.
1140   - draggable(Bool), //Specifies whether the element is draggable.
1141   - hidden(Bool), //Specifies that the element represents an element that is not yet, or is no longer, relevant.
1142   - spellcheck(Bool) //Specifies whether the element represents an element whose contents are subject to spell checking and grammar checking.
1143   -.
  893 +
1144 894  
1145 895 public define CoreAttrs attr(String name, Bool value) = attr(name, if value then "true" else "false").
1146 896  
1147   -public type InputAttrs:
1148   - id (String),
1149   - class (String),
1150   - style (String),
1151   - title (String),
1152   - lang (String),
1153   - dir (Reading_Way),
1154   - accesskey (Word8),
1155   - tabindex (Int),
1156   - attr (String, String),
1157   - event (HtmlEvents, String),
1158   - //HTML5
1159   - data (String name, String value).
1160 897  
1161 898 public define InputAttrs attr(String name, Bool value) = attr(name, if value then "true" else "false").
1162 899  
1163   -public type Text_Option:
1164   - core_attrs(List(CoreAttrs)),
1165   - size(Int), // size of character font to use
1166   - font(String), // name of character font to use (such as "helvetica",...)
1167   - color(RGB), // color to be used for characters
1168   - italic,
1169   - oblique,
1170   - small_capitals,
1171   - bold,
1172   - underlined,
1173   - left_justified,
1174   - right_justified,
1175   - justified, // justified on both sides
1176   - line_through,
1177   - nowrap,
1178   - class(String), //CSS class
1179   - id(String),
1180   - style(String),
1181   - title(String),
1182   - attr(String, String).
  900 +
1183 901  
1184 902 public define Text_Option
1185 903 tooltip(String s) = title(s).
... ... @@ -1286,20 +1004,7 @@ public define String
1286 1004 onshow then "onshow", //HTML5 Fires when a <menu> element is shown as a context menu
1287 1005 ontoggle then "ontoggle"
1288 1006 }.
1289   -
1290   -public type Table_Option:
1291   - core_attrs(List(CoreAttrs)),
1292   - background_color(RGB), // applied to all cells in the table
1293   - background_image(String url),
1294   - border(Int width_of_outer_edge, // if not present, all values are 0
1295   - Int width_of_top_of_relief,
1296   - Int width_of_inner_edge,
1297   - RGB border_color),
1298   - width(Int), // sets a minimal width for the table
1299   - percentage_width(Int),
1300   - attr(String name, String value),
1301   - class(String class_name).
1302   -
  1007 +
1303 1008  
1304 1009 public define Table_Option nude = border(0,0,0,rgb(0,0,0)).
1305 1010  
... ... @@ -1307,44 +1012,17 @@ public define Table_Option nude = border(0,0,0,rgb(0,0,0)).
1307 1012 A list of 'Table_Option' must be given with each table.
1308 1013  
1309 1014  
1310   -public type BackgroundOption:
1311   - repeat, // repeat the background in both directions
1312   - repeat_horizontal, // repeat the background only horizontally
1313   - repeat_vertical, // repeat the background only verticall
1314   - no_repeat, // don't repeat the background
1315   - center.
  1015 +
1316 1016  
1317 1017  
1318   -public type Cell_Option:
1319   - core_attrs(List(CoreAttrs)),
1320   - left, // put the content of the cell on the left
1321   - h_center, // center the content of the cell horizontally
1322   - right, // put the content of the cell on the right
1323   - top, // put the content of the cell upwards
1324   - v_center, // center the content of tye cell vertically,
1325   - bottom, // put the content of the cell downwards
1326   - base_line, // align the content vertically according to base lines
1327   - background_color(RGB),
1328   - background_image(String url, BackgroundOption),
1329   - width(Int), // sets a minimal width for the cell
1330   - percentage_width(Int),
1331   - height(Int), // sets a minimal height for the cell
1332   - columns(Int), // lets the cell span over several columns
1333   - rows(Int), // lets the cell span over several rows
1334   - nowrap, // do not allow text wrapping within the cell
1335   - style(String), // in case nothing above is suitable
1336   - class(String class_name).
1337 1018  
1338 1019 A list of 'Cell_Option' must be given with each cell and each row in a table. Options
1339 1020 given with a row apply to all the cells in the row, but are superseded by options given
1340 1021 with cells, which apply only to the cell they are given with.
1341 1022  
1342 1023  
1343   -public type HTML_Cell($T):
1344   - cell(List(Cell_Option) options, $T content).
1345 1024  
1346   -public type HTML_Header_Cell($T):
1347   - header_cell(List(Cell_Option) options, $T content).
  1025 +
1348 1026  
1349 1027 The parameter $T is later instantiated either to 'HTML_In_Form' or to 'HTML_Off_Form',
1350 1028 depending on where you put your table (within a form or not within a form). For your
... ... @@ -1375,16 +1053,7 @@ public define HTML_Header_Cell($T)
1375 1053 header_cell([],content).
1376 1054  
1377 1055  
1378   -public type HTML_Row($T):
1379   - row(List(Cell_Option) options, List(HTML_Cell($T)) cells).
1380   -
1381   -public type HTML_Header_Row($T):
1382   - empty,
1383   - header_row(List(Cell_Option) options, List(HTML_Header_Cell($T)) cells).
1384 1056  
1385   -public type HTML_Footer_Row($T):
1386   - empty,
1387   - footer_row(List(Cell_Option) options, List(HTML_Cell($T)) cells).
1388 1057  
1389 1058 Same remark as for 'HTML_Cell($T)'. We define several convenience functions:
1390 1059  
... ... @@ -1432,31 +1101,7 @@ public define HTML_Header_Row($T)
1432 1101 ) =
1433 1102 header_row([],[cell]).
1434 1103  
1435   -public type Actioner_Connection:
1436   - same, // use same type of connection as current page
1437   - http, // use non secured connection
1438   - https. // use secured connection
1439   -
1440   -public type Other_Window_Option:
1441   - resizable, // the new window may be resized by the client
1442   - scrollbars, // the new window has scrollbars
1443   - width(Int), // the new window has the specified width
1444   - height(Int). // the new window has the specified height
1445   -
1446   -public type Actioner_Target:
1447   - same,
1448   - same (String label),
1449   - other(String window_name, List(Other_Window_Option)).
1450   -
1451   -public type Actioner_Aspect:
1452   - link (List(Text_Option), String text, Maybe(String) name),// hypertext link
1453   - img_link (List(CoreAttrs),String img_url, String alt_text),
1454   - push_button (List(CoreAttrs),String text),
1455   - button (String url_off, String url_on), // rollover button
1456   - button (String url_off, String url_on, Int w, Int h), // idem with size
1457   - submit (List(CoreAttrs),String text),
1458   - immediate_selector (List(CoreAttrs),WebArgName name, Int size, List((List(CoreAttrs),WebArgValue,String)) choices, Maybe(InitialValue) selected, String onchange_fn),
1459   - html (List(CoreAttrs), HTML_Off_Form).
  1104 +
1460 1105  
1461 1106 public define Actioner_Aspect
1462 1107 immediate_selector
... ... @@ -1482,10 +1127,6 @@ public define Actioner_Aspect
1482 1127 .
1483 1128  
1484 1129  
1485   -public type Actioner_Local_Action:
1486   - close_window.
1487   -
1488   -
1489 1130 public define Actioner_Aspect
1490 1131 link
1491 1132 (
... ... @@ -1527,25 +1168,8 @@ public define Actioner_Aspect
1527 1168 Actioners are explained in details below.
1528 1169  
1529 1170  
1530   -public type TextAreaOption:
1531   - input_attrs(List(InputAttrs)),
1532   - disabled,
1533   - read_only,
1534   - wrap_lines.
1535 1171  
1536   -public type CSS_Style:
1537   - text_options(List(Text_Option)).
1538 1172  
1539   -public type CSS_File_Media:
1540   - screen, //Intended for non-paged computer screens.
1541   - tty, //Intended for media using a fixed-pitch character grid, such as teletypes, terminals, or portable devices with limited display capabilities.
1542   - tv, //Intended for television-type devices (low resolution, color, limited scrollability).
1543   - projection, //Intended for projectors.
1544   - handheld, //Intended for handheld devices (small screen, monochrome, bitmapped graphics, limited bandwidth).
1545   - print, //Intended for paged, opaque material and for documents viewed on screen in print preview mode.
1546   - braille, //Intended for braille tactile feedback devices.
1547   - aural, //Intended for speech synthesizers.
1548   - all. //Suitable for all devices.
1549 1173  
1550 1174 public define String
1551 1175 to_String
... ... @@ -1567,8 +1191,7 @@ public define String
1567 1191  
1568 1192  
1569 1193 .
1570   -public type CSS_File:
1571   - css_file(String file_name, CSS_File_Media).
  1194 +
1572 1195  
1573 1196 public define CSS_File
1574 1197 css_file
... ... @@ -1577,16 +1200,7 @@ public define CSS_File
1577 1200 )=
1578 1201 css_file(file_name, all).
1579 1202  
1580   -public type JS_Attribute:
1581   - attr (String, String).
1582   -
1583   -public type JS_File:
1584   - js_file(String file_name,
1585   - List(JS_Attribute) attributes).
1586 1203  
1587   -public type Script:
1588   - script( String script_type,
1589   - String content).
1590 1204  
1591 1205 public define JS_File
1592 1206 js_file
... ... @@ -1595,19 +1209,10 @@ public define JS_File
1595 1209 ) =
1596 1210 js_file(file_name, []).
1597 1211  
1598   -public type HTML_Meta:...
  1212 +//public type HTML_Meta:...
1599 1213  
1600 1214  
1601 1215  
1602   -public type HTML_Head_Tag:
1603   - meta(HTML_Meta),
1604   - title(String),
1605   - js(JS_File),
1606   - js_inline(Script),
1607   - css(CSS_File),
1608   - css_inline(String css_styles) /* Note: <style> and </style> tags are not necessaries */
1609   - .
1610   -
1611 1216 public define HTML_Head_Tag
1612 1217 js_script
1613 1218 (
... ... @@ -1634,14 +1239,7 @@ public define HTML_tooltip
1634 1239 )=
1635 1240 html_tooltip(title, keyword, 0).
1636 1241  
1637   -public type HTML_Help_Position:
1638   - left,
1639   - right.
1640   -
1641   -public type HTML_Help:
1642   - no_help, //no help text available
1643   - tooltip(HTML_tooltip,
1644   - HTML_Help_Position).
  1242 +
1645 1243  
1646 1244 public define HTML_Help
1647 1245 tooltip
... ... @@ -1651,25 +1249,15 @@ public define HTML_Help
1651 1249 tooltip(h_tooltip, left)
1652 1250 .
1653 1251  
1654   -public type HTML_Label:
1655   - no_label,
1656   - label(
1657   - String text, //label to show
1658   - HTML_Help help //HTML help (tooltip with ajax call or not)
1659   -
1660   - ).
  1252 +
  1253 +
1661 1254 /* It contains
1662 1255 * - a List of HTML_Head_Tag representing necessaries head tags for the content. ex: jquery js files, js script, css specific styles, ...
1663 1256 * - a HTML_Off_Form representing the HTML code for the part of the page we want to display
1664 1257 */
1665   -public type HTML_In_Form:...
  1258 +//public type HTML_In_Form:...
  1259 +
1666 1260  
1667   -public type HTML_Partial_Content:
1668   - partial_content
1669   - (
1670   - List(HTML_Head_Tag),
1671   - HTML_Off_Form
1672   - ).
1673 1261  
1674 1262 public define List(HTML_Head_Tag)
1675 1263 to_HTML_Head_Tag
... ... @@ -1685,60 +1273,6 @@ public define List(HTML_Head_Tag)
1685 1273 )=
1686 1274 map((JS_File js_f) |-> js(js_f), js_file_list).
1687 1275  
1688   -public type HTML_In_Form:
1689   - empty,
1690   - literal_pt (Printable_tree),
1691   - literal (String),
1692   - sequence (List(HTML_In_Form) items),
1693   - text (List(CoreAttrs), String the_text),
1694   - preformated (List(Text_Option), String),
1695   - paragraph (List(Text_Option), List(HTML_In_Form) content),
1696   - image (List(CoreAttrs), String url, String alternate),
1697   - image (List(CoreAttrs), String url, String alternate, Int width, Int height),
1698   - table (List(Table_Option), HTML_Header_Row(HTML_In_Form), List(HTML_Row(HTML_In_Form)), HTML_Footer_Row(HTML_In_Form)),
1699   - center (HTML_In_Form),
1700   - mail_to (String email, HTML_In_Form element),
1701   - scroller (Int width, Int height,
1702   - Int content_width, Int content_height,
1703   - HTML_In_Form content),
1704   - actioner (Actioner_Connection, Actioner_Target, Actioner_Aspect,
1705   - WEB_Action_Name action_name, List((String,String)) extra_ops,
1706   - List(Actioner_Local_Action)),
1707   - foreign_link_new (Actioner_Target, Actioner_Aspect, String url),
1708   - foreign_link (List(Text_Option), String url),
1709   - foreign_link (List(Text_Option), String url, String name),
1710   - private_download (String abs_path, String name, String extra_ext,
1711   - Maybe((String,List((String,String)))) action),
1712   - text_input (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, InitialValue init, Int width),
1713   - text_input_ro (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, InitialValue init, Int width),
1714   - password_input (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, InitialValue init, Int width),
1715   - text_area (List(TextAreaOption), HTML_Label label, HTML_Id id, WebArgName name, InitialValue init, Int width, Int height),
1716   - file_upload (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, Int width),
1717   - selector (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, Int size, List(String) choices),
1718   - selector (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, Int size, List(String) choices, InitialValue selected),
1719   - // List((String,String)) = List((code,name)) where :
1720   - // code is the web-arg value
1721   - // name appears in selector
1722   - selector_c (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, Int size, List((List(CoreAttrs),WebArgValue,String)) choices),
1723   - selector_c (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, Int size, List((List(CoreAttrs),WebArgValue,String)) choices, InitialValue selected),
1724   - radio_button (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, WebArgValue value, Bool checked),
1725   - radio_button_r (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, WebArgValue value, Bool checked),
1726   - check_box (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, Bool checked),
1727   - check_box_r (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, Bool checked),
1728   - div (List(CoreAttrs), List(HTML_In_Form) content),
1729   - div_empty (List(CoreAttrs)),
1730   - hidden (HTML_Id id, WebArgName name, WebArgValue value),
1731   - partial (HTML_Partial_Content),
1732   - br,
1733   - progress (List(CoreAttrs), Int value, Int max),
1734   - ol (List(CoreAttrs), List(HTML_In_Form) content),
1735   - ul (List(CoreAttrs), List(HTML_In_Form) content),
1736   - li (List(CoreAttrs), List(HTML_In_Form) content),
1737   - button (List(CoreAttrs), List(HTML_In_Form) content),
1738   - i (List(CoreAttrs), String text),
1739   - span (List(CoreAttrs), String text),
1740   - hr (List(CoreAttrs))
1741   -.
1742 1276  
1743 1277  
1744 1278 'HTML_In_Form' defines all the elements you may put within a form. We define a
... ... @@ -1999,66 +1533,10 @@ url,
1999 1533 week
2000 1534 .
2001 1535  
2002   -public type A_href:
2003   - href(String href),
2004   - href(WEB_Action_Name action, List((String,String)) extra_ops)
2005   -.
2006 1536  
2007   -public type A_target:
2008   - _blank,
2009   - _self,
2010   - _parent,
2011   - _top,
2012   - framename(String name)
2013   -.
  1537 +//public type HTML_Body:...
  1538 +
2014 1539  
2015   -public type HTML_Body:...
2016   -
2017   -public type HTML_Off_Form:
2018   - a (List(CoreAttrs), A_href, A_target, List(HTML_Off_Form) content),
2019   - empty,
2020   - literal_pt (Printable_tree),
2021   - literal (String),
2022   - sequence (List(HTML_Off_Form) items),
2023   - text (List(CoreAttrs), String the_text),
2024   - preformated (List(Text_Option), String),
2025   - table (List(Table_Option), HTML_Header_Row(HTML_Off_Form), List(HTML_Row(HTML_Off_Form)), HTML_Footer_Row(HTML_Off_Form)),
2026   - center (HTML_Off_Form),
2027   - mail_to (String email, HTML_Off_Form element),
2028   - scroller (Int width, Int height,
2029   - Int content_width, Int content_height,
2030   - HTML_Off_Form content),
2031   - fixed_size (HTML_Size width, HTML_Size height, HTML_Off_Form content),
2032   - fixed_size_2 (HTML_Size width, HTML_Size height, String name_of_HTML_file),
2033   - actioner (Actioner_Connection, Actioner_Target, Actioner_Aspect,
2034   - WEB_Action_Name action_name, List((String,String)) extra_ops,
2035   - List(Actioner_Local_Action)),
2036   - actioner (Actioner_Connection, Actioner_Target, Actioner_Aspect,
2037   - WEB_Action_Name action_name, List((String,String)) extra_ops,
2038   - List(Actioner_Local_Action), String form_name),
2039   - foreign_link_new (Actioner_Target, Actioner_Aspect, String url),
2040   - foreign_link (List(Text_Option), String url),
2041   - foreign_link (List(Text_Option), String url, String name),
2042   - private_download (String abs_path, String name, String extra_ext,
2043   - Maybe((String,List((String,String)))) action),
2044   - label (String name),
2045   - form (HTML_Id form_id, List(CoreAttrs), List(HTML_In_Form) content),
2046   - form (HTML_Id form_id, List(CoreAttrs),
2047   - WEB_Action_Name action, List((String,String)) extra_ops,
2048   - List(HTML_In_Form) content),
2049   - in_form (HTML_Id form_id, HTML_In_Form content),
2050   - div (List(CoreAttrs), List(HTML_Partial_Content) p_content),
2051   - iframe (List(CoreAttrs),
2052   - List(CSS_Style) /*styles*/,
2053   - List(CSS_File) /*css_files*/,
2054   - List(JS_File) /*js_files*/,
2055   - HTML_Body /*body*/),
2056   - partial (HTML_Partial_Content),
2057   - progress (List(CoreAttrs), Int value, Int max),
2058   - i (List(CoreAttrs), String text),
2059   - html_tag (String tag_name, List(CoreAttrs), List(HTML_Off_Form) content),
2060   - html_void_tag (String tag_name, List(CoreAttrs))
2061   -.
2062 1540  
2063 1541 'HTML_Off_Form' defines all the elements you may put outside any form.
2064 1542  
... ... @@ -2688,17 +2166,7 @@ define Printable_tree
2688 2166  
2689 2167  
2690 2168  
2691   -public type HTML_Meta:
2692   - keywords (List(String)),
2693   - refresh (Actioner_Connection connection,
2694   - Actioner_Target target,
2695   - WEB_Action_Name action,
2696   - Int delay), // in seconds
2697   - refresh (String url, Int delay), // in seconds
2698   - meta (String name, String content),
2699   - http_equiv (String name, String content),
2700   - generic_meta (List((String,String))),
2701   - literal (String).
  2169 +
2702 2170  
2703 2171 Meta tags are put in the 'head' of the HTML page.
2704 2172  
... ... @@ -2715,49 +2183,9 @@ public define HTML_Meta
2715 2183  
2716 2184  
2717 2185  
2718   -public type Body_Option:
2719   - core_attrs(List(CoreAttrs)),
2720   - background_color (RGB),
2721   - background_image (String url),
2722   - background_image (String url, List(BackgroundOption)).
2723   -
2724   -public type HTML_Body:
2725   - body(List(Body_Option) options, HTML_Off_Form content).
2726   -
2727   -
2728   -public type HTTP_Answer:
2729   - html_page (HTTP_Status /*http_status*/,
2730   - List(HTML_Head_Tag) /*html <head> tags*/,
2731   - HTML_Body /*body*/),
2732   - html_page (HTTP_Status /*http_status*/,
2733   - String /*title*/,
2734   - List(HTML_Meta) /*meta_tags*/,
2735   - List(CSS_Style) /*styles*/,
2736   - List(CSS_File) /*css_files*/,
2737   - List(JS_File) /*js_files*/,
2738   - List(Script) /*script*/,
2739   - HTML_Body /*body*/),
2740   - plain_text (HTTP_Status /*http_status*/,
2741   - String /*text*/),
2742   - custom_text (HTTP_Status /*http_status*/,
2743   - MIME /*mime_type*/,
2744   - String /*content*/),
2745   - custom_binary(HTTP_Status /*http_status*/,
2746   - MIME /*mime_type*/,
2747   - ByteArray /*content*/,
2748   - List(HTTP_header)/*other headers*/),
2749   - custom_tree (HTTP_Status /*http_status*/,
2750   - MIME /*mime_type*/,
2751   - Printable_tree /*content*/),
2752   - json (HTTP_Status, /*http_status*/
2753   - JsonValue), /*json value*/
2754   - send_file ( String file_path, //file to send to client. //TODO add call back for before, during, after send
2755   - Content_Disposition c_disposition),
2756   - http_raw (Printable_tree),
2757   - html_content (HTTP_Status /*http_status*/,
2758   - HTML_Off_Form),
2759   - html_partial_content (HTTP_Status /*http_status*/,
2760   - HTML_Partial_Content).
  2186 +
  2187 +
  2188 +
2761 2189  
2762 2190  
2763 2191 public define HTTP_Answer
... ... @@ -3737,13 +3165,22 @@ define HTTP_Answer
3737 3165 )
3738 3166 .
3739 3167  
  3168 +public type WEB_Page_Renderer:
  3169 + web_page_renderer(
  3170 + String app, //application
  3171 + String name, //renderer name
  3172 + (WEB_Session _session, List(WEB_Plugin), HTML_Partial_Content _content) -> HTTP_Answer page_layout //call back for rendering page
  3173 + )
  3174 +.
  3175 +
3740 3176 define WEB_Page_Renderer
3741 3177 default_page_renderer =
3742   - web_page_renderer("AWS_DEFAULT_PAGE",
  3178 + web_page_renderer("AWS", "AWS_DEFAULT_PAGE",
3743 3179 ( WEB_Session _session,
3744   - String _title,
  3180 + List(WEB_Plugin) _plugins,
3745 3181 HTML_Partial_Content _content
3746 3182 ) |->
  3183 + with _title = get_page_title(_session),
3747 3184 html_page
3748 3185 (
3749 3186 http_ok,
... ... @@ -3856,9 +3293,10 @@ define WEB_Page_Renderer
3856 3293 default_page_renderer,
3857 3294 [h . t] then
3858 3295 if h.name = renderer_name then
3859   - //println("Controller ["+controller_name+"] found");
  3296 + println("renderer_name ["+renderer_name+"] found");
3860 3297 h
3861 3298 else
  3299 + println("renderer_name "+renderer_name+" not matching");
3862 3300 get_page_renderer(renderer_name, t, logger)
3863 3301 }
3864 3302 .
... ... @@ -3872,7 +3310,7 @@ define WEB_Page_Renderer
3872 3310 (LogLevel, String) -> One logger //logger
3873 3311 )=
3874 3312 //get the renderer page name to use from the session "AWS_PAGE_RENDERER"
3875   - if get_String(_session.fields, "AWS_PAGE_RENDERER") is
  3313 + if get_String(_session.fields, "AWS_CURRENT_PAGE_RENDERER") is
3876 3314 {
3877 3315 failure then logger(logWarning, "No renderer defined, use the default"); default_page_renderer,
3878 3316 success(renderer_name) then
... ... @@ -3892,6 +3330,7 @@ define (Maybe(WEB_Session), HTTP_Answer)
3892 3330 apply_controller_action
3893 3331 (
3894 3332 WEB_Controller controller,
  3333 + List(WEB_Plugin) plugins,
3895 3334 List(WEB_Controller) controllers,
3896 3335 WEB_Page_Renderer _current_page_renderer,
3897 3336 List(WEB_Page_Renderer) page_renderers,
... ... @@ -3919,7 +3358,7 @@ define (Maybe(WEB_Session), HTTP_Answer)
3919 3358 if get_controller(get_String(*new_session.web_request.lwa, "aws_controller", "root"), controllers, logger) is
3920 3359 {
3921 3360 failure then (failure, error_page(http_not_found, "Initial Session Controller not found", new_session)),
3922   - success(new_controller) then apply_controller_action(new_controller, controllers, _current_page_renderer, page_renderers, cinfo, new_session, failure, initial_session, logger),
  3361 + success(new_controller) then apply_controller_action(new_controller, plugins, controllers, _current_page_renderer, page_renderers, cinfo, new_session, failure, initial_session, logger),
3923 3362 },
3924 3363 success(action_name) then
3925 3364 logger(logInfo, "ACTION_NAME ["+action_name+"]");
... ... @@ -3931,7 +3370,7 @@ define (Maybe(WEB_Session), HTTP_Answer)
3931 3370 if get_controller(get_String(*new_session.web_request.lwa, "aws_controller", "root"), controllers, logger) is
3932 3371 {
3933 3372 failure then (failure, error_page(http_not_found, "Redirect Controller not found", new_session)),
3934   - success(new_controller) then apply_controller_action(new_controller, controllers, _current_page_renderer, page_renderers, cinfo, new_session, failure, initial_session, logger),
  3373 + success(new_controller) then apply_controller_action(new_controller, plugins, controllers, _current_page_renderer, page_renderers, cinfo, new_session, failure, initial_session, logger),
3935 3374 },
3936 3375  
3937 3376 redirect(new_session, r_controller_name, r_action_name) then
... ... @@ -3939,7 +3378,7 @@ define (Maybe(WEB_Session), HTTP_Answer)
3939 3378 {
3940 3379 failure then (failure, error_page(http_not_found, "Redirect Controller "+r_controller_name+" not found", new_session)),
3941 3380 success(new_controller) then
3942   - apply_controller_action(new_controller, controllers, _current_page_renderer, page_renderers, cinfo, new_session, success(r_action_name), initial_session, logger),
  3381 + apply_controller_action(new_controller, plugins, controllers, _current_page_renderer, page_renderers, cinfo, new_session, success(r_action_name), initial_session, logger),
3943 3382 },
3944 3383  
3945 3384 redirect_to_previous then
... ... @@ -3948,7 +3387,7 @@ define (Maybe(WEB_Session), HTTP_Answer)
3948 3387 failure then (failure, error_page(http_not_found, "Redirect to previous Controller not found", _session)),
3949 3388 success(new_controller) then
3950 3389 since _session is web_session(id, lang, entries, _, previous),
3951   - apply_controller_action(new_controller, controllers, _current_page_renderer, page_renderers, cinfo, web_session(id, lang, entries, previous, previous), failure, initial_session, logger),
  3390 + apply_controller_action(new_controller, plugins, controllers, _current_page_renderer, page_renderers, cinfo, web_session(id, lang, entries, previous, previous), failure, initial_session, logger),
3952 3391 },
3953 3392 redirect_to_previous(entries) then
3954 3393 if get_controller(get_String(*_session.previous_web_request.lwa, "aws_controller", "root"), controllers, logger) is
... ... @@ -3956,7 +3395,7 @@ define (Maybe(WEB_Session), HTTP_Answer)
3956 3395 failure then (failure, error_page(http_not_found, "Redirect to previous Controller not found", _session)),
3957 3396 success(new_controller) then
3958 3397 since _session is web_session(id, lang, _, _, previous),
3959   - apply_controller_action(new_controller, controllers, _current_page_renderer, page_renderers, cinfo, web_session(id, lang, entries, previous, previous), failure, initial_session, logger),
  3398 + apply_controller_action(new_controller, plugins, controllers, _current_page_renderer, page_renderers, cinfo, web_session(id, lang, entries, previous, previous), failure, initial_session, logger),
3960 3399 },
3961 3400 //ajax(answer) then (failure, answer),
3962 3401 //ajax with modified session that must be saved
... ... @@ -3967,10 +3406,10 @@ define (Maybe(WEB_Session), HTTP_Answer)
3967 3406 //ajax(content, additional_script) then (failure, json(http_ok, to_html_ajax_content(content, additional_script))),
3968 3407 ajax(session, content, additional_script) then (session, json(http_ok, to_html_ajax_content(content, additional_script))),
3969 3408 send_file(file_path, c_disposition) then (failure, send_file(file_path, c_disposition)),
3970   - renderer_content(session, title, content) then
  3409 + renderer_content(session, content) then
3971 3410 with the_session = if session is {failure then _session, success(__session) then __session},
3972 3411 with page_renderer = get_page_renderer(the_session, _current_page_renderer, page_renderers, logger),
3973   - (session, page_renderer.page_layout(the_session, title, content))
  3412 + (session, page_renderer.page_layout(the_session, plugins, content))
3974 3413 }
3975 3414 }
3976 3415 .
... ... @@ -3993,7 +3432,8 @@ public define Web_Site
3993 3432 Var(List(Web_arg)),
3994 3433 Bool is_https) -> WEB_Session expired_session,
3995 3434 Var(List(WEB_Controller)) web_controllers,
3996   - Var(List(WEB_Page_Renderer)) web_page_renderers,
  3435 + Var(List(WEB_Page_Renderer)) web_page_renderers,
  3436 + Var(List(WEB_Plugin)) web_plugins,
3997 3437 Maybe(WEB_Session) -> List(HTTP_header) additional_headers,
3998 3438 List(HTTP_header) constant_additional_headers,
3999 3439 Int timeout,
... ... @@ -4024,6 +3464,7 @@ public define Web_Site
4024 3464 // TODO 'make_separate_web_args_function' must retrieve state_cookies before parsing web_args if using_state_cookies is true
4025 3465 with save_session = make_save_session_function(timeout, state_directory, logger),
4026 3466 with current_page_renderer = var((WEB_Page_Renderer)default_page_renderer),
  3467 + // with left_menu_list = get_left_menu_from_plugins(*web_plugins),
4027 3468 // retrieve_session = make_retrieve_session_function(state_directory, website_name),
4028 3469 //separate_web_args = make_separate_web_args_function(state_directory, retrieve_state),
4029 3470 //apply_action = make_apply_action_function(actions),
... ... @@ -4069,7 +3510,7 @@ public define Web_Site
4069 3510 (failure, error_page(http_not_found, "Controller not found", current_session)),
4070 3511  
4071 3512 success(new_controller) then
4072   - apply_controller_action(new_controller, *web_controllers, *current_page_renderer, *web_page_renderers, cinfo, current_session, failure, initial_session, logger),
  3513 + apply_controller_action(new_controller, *web_plugins, *web_controllers, *current_page_renderer, *web_page_renderers, cinfo, current_session, failure, initial_session, logger),
4073 3514 }
4074 3515 is (mb_new_session, http_answer),
4075 3516  
... ...
web/CXM_web_session.anubis
... ... @@ -12,6 +12,16 @@ read calexium_lib/database/db_types.anubis
12 12 read CXM_common.anubis
13 13 read CXM_web_dump.anubis
14 14  
  15 + reserved fields keywords
  16 +
  17 + "AWS" String
  18 + "AWS_CURRENT_PAGE_TITLE" String current web page title
  19 + "AWS_CURRENT_APP" String current web application
  20 + "AWS_CURRENT_SPACE" String current web space in application
  21 + "AWS_PAGE_RENDERER" String current
  22 +
  23 + //"AWS_CURRENT_LEFT_MENU" Left_Menu current left menu on the page
  24 + //"AWS_CURRENT_MENU" Menu current menu, on the top of the page
15 25  
16 26 public type WEB_Session_Field_Datum:
17 27 string(String), //fully implented
... ... @@ -1075,6 +1085,32 @@ public define One
1075 1085 remove_any(fields, word4_t, _field_name)
1076 1086 .
1077 1087  
  1088 +
  1089 + /************************************************/
  1090 + "AWS_CURRENT_PAGE_TITLE" String current web page title
  1091 + "AWS_CURRENT_APP" String current web application
  1092 + "AWS_CURRENT_SPACE" String current web space in application
  1093 + "AWS_CURRENT_CONTENT" String current in the web space
  1094 + "AWS_CURRENT_PAGE_RENDERER" String current page renderer
  1095 +
  1096 +public define One set_web_app(WEB_Session s, String n) = replace_String(s.fields, "AWS_CURRENT_APP", n).
  1097 +public define String get_web_app(WEB_Session s) = get_String (s.fields, "AWS_CURRENT_APP", "").
  1098 +
  1099 +public define One set_web_space(WEB_Session s, String n)= replace_String(s.fields, "AWS_CURRENT_SPACE", n).
  1100 +public define String get_web_space(WEB_Session s) = get_String (s.fields, "AWS_CURRENT_SPACE", "").
  1101 +
  1102 +public define One set_web_content(WEB_Session s, String n)= replace_String(s.fields, "AWS_CURRENT_CONTENT", n).
  1103 +public define String get_web_content(WEB_Session s) = get_String (s.fields, "AWS_CURRENT_CONTENT", "").
  1104 +
  1105 +public define One set_page_title(WEB_Session s, String n)= replace_String(s.fields, "AWS_CURRENT_PAGE_TITLE", n).
  1106 +public define String get_page_title(WEB_Session s) = get_String (s.fields, "AWS_CURRENT_PAGE_TITLE", "").
  1107 +
  1108 +public define One set_renderer(WEB_Session s, String n) = replace_String(s.fields, "AWS_CURRENT_PAGE_RENDERER", n).
  1109 +public define String get_renderer(WEB_Session s) = get_String (s.fields, "AWS_CURRENT_PAGE_RENDERER", "").
  1110 +
  1111 +
  1112 + /************************************************/
  1113 +
1078 1114 public define String
1079 1115 dump_WEB_Session_Field
1080 1116 (
... ...
web/load_content.anubis
... ... @@ -7,7 +7,8 @@
7 7 */
8 8  
9 9 read system/convert.anubis
10   -read calexium_lib/web/CXM_making_a_web_site.anubis
  10 + read calexium_lib/web/CXM_making_a_web_site.anubis
  11 +read calexium_lib/web/CXM_web_action.anubis
11 12  
12 13 public define String
13 14 load_content
... ...
web/plugin/plugin.anubis 0 → 100644
  1 +/*
  2 + * Created by PyramIDE.
  3 + * User: フランスのトトロ aka (David RENÉ)
  4 + * Date: 30/07/2017
  5 + * Time: 01:33
  6 + * © David RENÉ
  7 + */
  8 +
  9 +read system/logger.anubis
  10 +read app/app_constants.anubis
  11 +read calexium_lib/web/widgets/left_menu.anubis
  12 +transmit calexium_lib/web/types/making_a_web_site.anubis
  13 + read calexium_lib/web/widgets/menu.anubis
  14 +read hayamiki_lib/model/database.anubis
  15 +read hayamiki_lib/view/view_table_manager_types.anubis
  16 +
  17 +public type WEB_Plugin:
  18 + web_plugin(
  19 + String app_name, //application name
  20 + String space_name, //space name
  21 + //version
  22 + (SQLite3DataBase db, HK_Database hk_db, VTM _vtm, (LogLevel, String) -> One logger) -> WEB_Controller get_controller,
  23 + (WEB_Session, String type) -> Maybe(HTML_Partial_Content) get_typed_content
  24 +// (One dummy) -> Plugin_Left_Menu get_plugin_left_menu
  25 +// (One dummy) ->
  26 +// (One dummy) -> Message get_API,
  27 +// (Message message) -> Message call_API
  28 +// (One dummy) -> Menu get_menu,
  29 +
  30 + )
  31 +.
  32 +
  33 +
  34 +public define Maybe(WEB_Plugin)
  35 + load_plugin
  36 + (
  37 + String file_name
  38 + )
  39 + =
  40 + if (LoadAdm(WEB_Plugin))load_adm(file_name) is
  41 + {
  42 + file_not_found then print("File '"+file_name+"' not found.\n\n");failure,
  43 + read_error then print("Error reading file '"+file_name+"'.\n\n");failure,
  44 + timeout then print("Timeout when loading '"+file_name+"'.\n\n");failure,
  45 + file_damaged then print("File '"+file_name+"' is damaged.\n\n");failure,
  46 + bad_version(expected,found) then print("Secondary module '"+file_name+"' doesn't have the same\n"+
  47 + " version ("+found+") as primary module ("+expected+").\n\n");failure,
  48 + wrong_type(expected,found) then print("Secondary module '"+file_name+"' has type:\n"+
  49 + found+" while primary module expected:\n"+
  50 + expected+"\n\n");failure,
  51 + ok(ptah_plugin) then println("ptah plugin: APP ["+ptah_plugin.app_name+"] SPACE ["+ptah_plugin.space_name+"] loaded ");success(ptah_plugin)
  52 + }.
  53 +
  54 +public define List(WEB_Plugin)
  55 + all_plugins
  56 + (
  57 + String directory, //directory where search the plugin file below
  58 + String plugin_file_mask //mask for loading plugin like "my_app_plugin_*.adm"
  59 + )
  60 + =
  61 + with files = directory_list(modules_directory, plugin_file_mask),
  62 + map_select((String file_name) |-> load_plugin(modules_directory+file_name), files)
  63 + //merge_sort(all_list, migration_less)
  64 +.
  65 +
  66 +public define Maybe(WEB_Plugin)
  67 + get_WEB_Plugin
  68 + (
  69 + List(WEB_Plugin) plugins,
  70 + String _app,
  71 + String _space
  72 + )=
  73 + if plugins is
  74 + {
  75 + [] then failure,
  76 + [h . t] then
  77 + if h.app_name = _app & h.space_name = _space then
  78 + success(h)
  79 + else
  80 + get_WEB_Plugin(t, _app, _space)
  81 + }
  82 +.
  83 +
  84 +
  85 +
  86 +
  87 + public define World_Left_Menu
  88 + get_left_menu_from_plugins
  89 + (
  90 + List(WEB_Plugin) plugins,
  91 + World_Left_Menu current_world
  92 + )=
  93 + if plugins is
  94 + {
  95 + [] then current_world,
  96 + [h . t] then get_left_menu_from_plugins(t, add_to_World_Left_Menu(current_world, h.get_plugin_left_menu(unique)))
  97 + }
  98 +.
  99 +
  100 + public define World_Left_Menu
  101 + get_left_menu_from_plugins
  102 + (
  103 + List(WEB_Plugin) plugins
  104 + )=
  105 + get_left_menu_from_plugins(plugins, world_menu([]))
  106 +.
... ...
web/types/making_a_web_site.anubis 0 → 100644
  1 +/*
  2 + * Created by PyramIDE.
  3 + * User: フランスのトトロ aka (David RENÉ)
  4 + * Date: 29/05/2019
  5 + * Time: 18:41
  6 + * © David RENÉ
  7 + */
  8 +transmit calexium_lib/web/types/web_action_name.anubis
  9 +transmit calexium_lib/web/CXM_common.anubis
  10 +transmit calexium_lib/web/CXM_web_session.anubis
  11 +transmit calexium_lib/web/CXM_multihost_http_server.anubis
  12 +transmit calexium_lib/web/CXM_json.anubis
  13 +transmit calexium_lib/web/widgets/left_menu.anubis
  14 +read web/mime.anubis
  15 +read tools/printable_tree.anubis
  16 +
  17 +public type WEB_Action_Allowed_Protocol:
  18 + http,
  19 + https,
  20 + http_https
  21 +.
  22 +
  23 +public type Web_Action($State):
  24 + http_action (String name, // name of action
  25 + ($State) -> Bool allow, // true if action allowed
  26 + (HTTP_Info http_info,
  27 + List(Web_arg) web_args, // actually only 'operands' web arguments
  28 + $State state) -> $State do_it),
  29 + https_action (String name, // name of action
  30 + ($State) -> Bool allow, // true if action allowed
  31 + (HTTP_Info http_info,
  32 + List(Web_arg) web_args, // actually only 'operands' web arguments
  33 + $State state) -> $State do_it),
  34 + http_https_action (String name,
  35 + ($State) -> Bool allow,
  36 + (HTTP_Info http_info,
  37 + List(Web_arg) web_args,
  38 + $State state) -> $State do_it)
  39 +.
  40 +
  41 + This indicate the way of reading text.
  42 +public type Reading_Way:
  43 + ltr, //the text is readable from "Left To Right" like english
  44 + rtl //the text is readable from "Right To Left" like arabic
  45 +.
  46 +
  47 +public type CSS_File_Media:
  48 + screen, //Intended for non-paged computer screens.
  49 + tty, //Intended for media using a fixed-pitch character grid, such as teletypes, terminals, or portable devices with limited display capabilities.
  50 + tv, //Intended for television-type devices (low resolution, color, limited scrollability).
  51 + projection, //Intended for projectors.
  52 + handheld, //Intended for handheld devices (small screen, monochrome, bitmapped graphics, limited bandwidth).
  53 + print, //Intended for paged, opaque material and for documents viewed on screen in print preview mode.
  54 + braille, //Intended for braille tactile feedback devices.
  55 + aural, //Intended for speech synthesizers.
  56 + all. //Suitable for all devices.
  57 +
  58 +public type HtmlEvents:
  59 + // Window Event Attributes
  60 + onafterprint, //HTML5 Script to be run after the document is printed
  61 + onbeforeprint, //HTML5 Script to be run before the document is printed
  62 + onbeforeunload, //HTML5 Script to be run when the document is about to be unloaded
  63 + onerror, //HTML5 Script to be run when an error occurs
  64 + onhashchange, //HTML5 Script to be run when there has been changes to the anchor part of the a URL
  65 + onload, // Fires after the page is finished loading
  66 + onmessage, //HTML5 Script to be run when the message is triggered
  67 + onoffline, //HTML5 Script to be run when the browser starts to work offline
  68 + ononline, //HTML5 Script to be run when the browser starts to work online
  69 + onpagehide, //HTML5 Script to be run when a user navigates away from a page
  70 + onpageshow, //HTML5 Script to be run when a user navigates to a page
  71 + onpopstate, //HTML5 Script to be run when the window's history changes
  72 + onresize, //HTML5 Fires when the browser window is resized
  73 + onstorage, //HTML5 Script to be run when a Web Storage area is updated
  74 + onunload, // Fires once a page has unloaded (or the browser window has been closed)
  75 + // Form element events
  76 + onblur, // Fires the moment that the element loses focus
  77 + onchange, // Fires the moment when the value of the element is changed
  78 + oncontextmenu, //HTML5 Script to be run when a context menu is triggered
  79 + onfocus, // Fires the moment when the element gets focus
  80 + oninput, //HTML5 Script to be run when an element gets user input
  81 + oninvalid, //HTML5 Script to be run when an element is invalid
  82 + onreset, // Fires when the Reset button in a form is clicked
  83 + onsearch, // Fires when the user writes something in a search field (for <input="search">)
  84 + onselect, // Fires after some text has been selected in an element
  85 + onsubmit, // Fires when a form is submitted
  86 + // Keyboard events (Not valid in base, bdo, br, frame, frameset, head, html, iframe, meta, param, script, style, and title elements.)
  87 + onkeydown, // Fires when a user is pressing a key
  88 + onkeypress, // Fires when a user presses a key
  89 + onkeyup, // Fires when a user releases a key
  90 + // Mouse events (Not valid in base, bdo, br, frame, frameset, head, html, iframe, meta, param, script, style, and title elements.)
  91 + onclick, // Fires on a mouse click on the element
  92 + ondblclick, // Fires on a mouse double-click on the element
  93 + onmousedown, // Fires when a mouse button is pressed down on an element
  94 + onmousemove, // Fires when the mouse pointer is moving while it is over an element
  95 + onmouseout, // Fires when the mouse pointer moves out of an element
  96 + onmouseover, // Fires when the mouse pointer moves over an element
  97 + onmouseup, // Fires when a mouse button is released over an element
  98 + onwheel, //HTML5 Fires when the mouse wheel rolls up or down over an element
  99 + //Drag Events
  100 + ondrag, //HMTL5 Script to be run when an element is dragged
  101 + ondragend, //HTML5 Script to be run at the end of a drag operation
  102 + ondragenter, //HTML5 Script to be run when an element has been dragged to a valid drop target
  103 + ondragleave, //HTML5 Script to be run when an element leaves a valid drop target
  104 + ondragover, //HTML5 Script to be run when an element is being dragged over a valid drop target
  105 + ondragstart, //HTML5 Script to be run at the start of a drag operation
  106 + ondrop, //HTML5 Script to be run when dragged element is being dropped
  107 + onscroll, //HTML5 Script to be run when an element's scrollbar is being scrolled
  108 + //Clipboard Events
  109 + oncopy, //HTML5 Fires when the user copies the content of an element
  110 + oncut, //HTML5 Fires when the user cuts the content of an element
  111 + onpaste, //HTML5 Fires when the user pastes some content in an element
  112 + //Media Events
  113 + onabort, //HTML5 Script to be run on abort
  114 + oncanplay, //HTML5 Script to be run when a file is ready to start playing (when it has buffered enough to begin)
  115 + oncanplaythrough, //HTML5 Script to be run when a file can be played all the way to the end without pausing for buffering
  116 + oncuechange, //HTML5 Script to be run when the cue changes in a <track> element
  117 + ondurationchange, //HTML5 Script to be run when the length of the media changes
  118 + onemptied, //HTML5 Script to be run when something bad happens and the file is suddenly unavailable (like unexpectedly disconnects)
  119 + onended, //HTML5 Script to be run when the media has reach the end (a useful event for messages like "thanks for listening")
  120 + onerror, //HTML5 Script to be run when an error occurs when the file is being loaded
  121 + onloadeddata, //HTML5 Script to be run when media data is loaded
  122 + onloadedmetadata, //HTML5 Script to be run when meta data (like dimensions and duration) are loaded
  123 + onloadstart, //HTML5 Script to be run just as the file begins to load before anything is actually loaded
  124 + onpause, //HTML5 Script to be run when the media is paused either by the user or programmatically
  125 + onplay, //HTML5 Script to be run when the media is ready to start playing
  126 + onplaying, //HTML5 Script to be run when the media actually has started playing
  127 + onprogress, //HTML5 Script to be run when the browser is in the process of getting the media data
  128 + onratechange, //HTML5 Script to be run each time the playback rate changes (like when a user switches to a slow motion or fast forward mode)
  129 + onseeked, //HTML5 Script to be run when the seeking attribute is set to false indicating that seeking has ended
  130 + onseeking, //HTML5 Script to be run when the seeking attribute is set to true indicating that seeking is active
  131 + onstalled, //HTML5 Script to be run when the browser is unable to fetch the media data for whatever reason
  132 + onsuspend, //HTML5 Script to be run when fetching the media data is stopped before it is completely loaded for whatever reason
  133 + ontimeupdate, //HTML5 Script to be run when the playing position has changed (like when the user fast forwards to a different point in the media)
  134 + onvolumechange, //HTML5 Script to be run each time the volume is changed which (includes setting the volume to "mute")
  135 + onwaiting, //HTML5 Script to be run when the media has paused but is expected to resume (like when the media pauses to buffer more data)
  136 + //Misc Events
  137 + onshow, //HTML5 Fires when a <menu> element is shown as a context menu
  138 + ontoggle. //HTML5 Fires when the user opens or closes the <details> element
  139 +
  140 +
  141 +public type CSS_File:
  142 + css_file(String file_name, CSS_File_Media).
  143 +
  144 +public type JS_Attribute:
  145 + attr (String, String).
  146 +
  147 +public type JS_File:
  148 + js_file(String file_name,
  149 + List(JS_Attribute) attributes).
  150 +
  151 +public type Script:
  152 + script( String script_type,
  153 + String content).
  154 +
  155 +public type CoreAttrs:...
  156 +public type HTML_Partial_Content:...
  157 +public type HTML_Body:...
  158 +public type HTML_Off_Form:...
  159 +public type HTML_tooltip:...
  160 +public type HTTP_Answer:...
  161 +
  162 +
  163 +public type Text_Option:
  164 + core_attrs(List(CoreAttrs)),
  165 + size(Int), // size of character font to use
  166 + font(String), // name of character font to use (such as "helvetica",...)
  167 + color(RGB), // color to be used for characters
  168 + italic,
  169 + oblique,
  170 + small_capitals,
  171 + bold,
  172 + underlined,
  173 + left_justified,
  174 + right_justified,
  175 + justified, // justified on both sides
  176 + line_through,
  177 + nowrap,
  178 + class(String), //CSS class
  179 + id(String),
  180 + style(String),
  181 + title(String),
  182 + attr(String, String).
  183 +
  184 +public type CSS_Style:
  185 + text_options(List(Text_Option)).
  186 +
  187 +// Following types are define to prohib any arguments order error
  188 +
  189 +/**
  190 + * String value for 'id' attribut
  191 + */
  192 +public type HTML_Id:
  193 + html_Id(String id).
  194 +
  195 +/**
  196 + * String value for 'class' attribut
  197 + */
  198 +public type HtmlClass:
  199 + htmlClass(String class).
  200 +
  201 +/**
  202 + * Name used in arguments list when form is submitted.
  203 + */
  204 +public type WebArgName:
  205 + wan(String name).
  206 +
  207 +/**
  208 + * Value passed to arguments list when form is submitted (for RadioButton and CheckBox).
  209 + */
  210 +public type WebArgValue:
  211 + wav(String value).
  212 +
  213 +/**
  214 + * Initial value of an input field.
  215 + */
  216 +public type InitialValue:
  217 + init(String value).
  218 +
  219 +public type HTML_Help_Position:
  220 + left,
  221 + right
  222 +.
  223 +
  224 +public type HTML_Help:
  225 + no_help, //no help text available
  226 + tooltip(HTML_tooltip,
  227 + HTML_Help_Position)
  228 +.
  229 +
  230 +public type HTML_Label:
  231 + no_label,
  232 + label(
  233 + String text, //label to show
  234 + HTML_Help help //HTML help (tooltip with ajax call or not)
  235 + )
  236 +.
  237 +
  238 +public type InputAttrs:
  239 + id (String),
  240 + class (String),
  241 + style (String),
  242 + title (String),
  243 + lang (String),
  244 + dir (Reading_Way),
  245 + accesskey (Word8),
  246 + tabindex (Int),
  247 + attr (String, String),
  248 + event (HtmlEvents, String),
  249 + //HTML5
  250 + data (String name, String value).
  251 +
  252 +public type TextAreaOption:
  253 + input_attrs(List(InputAttrs)),
  254 + disabled,
  255 + read_only,
  256 + wrap_lines
  257 +.
  258 +
  259 +public type Actioner_Local_Action:
  260 + close_window.
  261 +
  262 +public type Actioner_Connection:
  263 + same, // use same type of connection as current page
  264 + http, // use non secured connection
  265 + https. // use secured connection
  266 +
  267 +public type Other_Window_Option:
  268 + resizable, // the new window may be resized by the client
  269 + scrollbars, // the new window has scrollbars
  270 + width(Int), // the new window has the specified width
  271 + height(Int). // the new window has the specified height
  272 +
  273 +public type Actioner_Target:
  274 + same,
  275 + same (String label),
  276 + other(String window_name, List(Other_Window_Option)).
  277 +
  278 +public type Actioner_Aspect:
  279 + link (List(Text_Option), String text, Maybe(String) name),// hypertext link
  280 + img_link (List(CoreAttrs),String img_url, String alt_text),
  281 + push_button (List(CoreAttrs),String text),
  282 + button (String url_off, String url_on), // rollover button
  283 + button (String url_off, String url_on, Int w, Int h), // idem with size
  284 + submit (List(CoreAttrs),String text),
  285 + immediate_selector (List(CoreAttrs),WebArgName name, Int size, List((List(CoreAttrs),WebArgValue,String)) choices, Maybe(InitialValue) selected, String onchange_fn),
  286 + html (List(CoreAttrs), HTML_Off_Form).
  287 +
  288 +public type BackgroundOption:
  289 + repeat, // repeat the background in both directions
  290 + repeat_horizontal, // repeat the background only horizontally
  291 + repeat_vertical, // repeat the background only verticall
  292 + no_repeat, // don't repeat the background
  293 + center.
  294 +
  295 +public type Cell_Option:
  296 + core_attrs(List(CoreAttrs)),
  297 + left, // put the content of the cell on the left
  298 + h_center, // center the content of the cell horizontally
  299 + right, // put the content of the cell on the right
  300 + top, // put the content of the cell upwards
  301 + v_center, // center the content of tye cell vertically,
  302 + bottom, // put the content of the cell downwards
  303 + base_line, // align the content vertically according to base lines
  304 + background_color(RGB),
  305 + background_image(String url, BackgroundOption),
  306 + width(Int), // sets a minimal width for the cell
  307 + percentage_width(Int),
  308 + height(Int), // sets a minimal height for the cell
  309 + columns(Int), // lets the cell span over several columns
  310 + rows(Int), // lets the cell span over several rows
  311 + nowrap, // do not allow text wrapping within the cell
  312 + style(String), // in case nothing above is suitable
  313 + class(String class_name).
  314 +
  315 +public type HTML_Cell($T):
  316 + cell(List(Cell_Option) options, $T content).
  317 +
  318 +public type HTML_Footer_Row($T):
  319 + empty,
  320 + footer_row(List(Cell_Option) options, List(HTML_Cell($T)) cells).
  321 +
  322 +public type HTML_Row($T):
  323 + row(List(Cell_Option) options, List(HTML_Cell($T)) cells).
  324 +
  325 +public type HTML_Header_Cell($T):
  326 + header_cell(List(Cell_Option) options, $T content).
  327 +
  328 +public type HTML_Header_Row($T):
  329 + empty,
  330 + header_row(List(Cell_Option) options, List(HTML_Header_Cell($T)) cells).
  331 +
  332 +
  333 +public type Table_Option:
  334 + core_attrs(List(CoreAttrs)),
  335 + background_color(RGB), // applied to all cells in the table
  336 + background_image(String url),
  337 + border(Int width_of_outer_edge, // if not present, all values are 0
  338 + Int width_of_top_of_relief,
  339 + Int width_of_inner_edge,
  340 + RGB border_color),
  341 + width(Int), // sets a minimal width for the table
  342 + percentage_width(Int),
  343 + attr(String name, String value),
  344 + class(String class_name).
  345 +
  346 +
  347 +public type HTML_In_Form:
  348 + empty,
  349 + literal_pt (Printable_tree),
  350 + literal (String),
  351 + sequence (List(HTML_In_Form) items),
  352 + text (List(CoreAttrs), String the_text),
  353 + preformated (List(Text_Option), String),
  354 + paragraph (List(Text_Option), List(HTML_In_Form) content),
  355 + image (List(CoreAttrs), String url, String alternate),
  356 + image (List(CoreAttrs), String url, String alternate, Int width, Int height),
  357 + table (List(Table_Option), HTML_Header_Row(HTML_In_Form), List(HTML_Row(HTML_In_Form)), HTML_Footer_Row(HTML_In_Form)),
  358 + center (HTML_In_Form),
  359 + mail_to (String email, HTML_In_Form element),
  360 + scroller (Int width, Int height,
  361 + Int content_width, Int content_height,
  362 + HTML_In_Form content),
  363 + actioner (Actioner_Connection, Actioner_Target, Actioner_Aspect,
  364 + WEB_Action_Name action_name, List((String,String)) extra_ops,
  365 + List(Actioner_Local_Action)),
  366 + foreign_link_new (Actioner_Target, Actioner_Aspect, String url),
  367 + foreign_link (List(Text_Option), String url),
  368 + foreign_link (List(Text_Option), String url, String name),
  369 + private_download (String abs_path, String name, String extra_ext,
  370 + Maybe((String,List((String,String)))) action),
  371 + text_input (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, InitialValue init, Int width),
  372 + text_input_ro (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, InitialValue init, Int width),
  373 + password_input (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, InitialValue init, Int width),
  374 + text_area (List(TextAreaOption), HTML_Label label, HTML_Id id, WebArgName name, InitialValue init, Int width, Int height),
  375 + file_upload (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, Int width),
  376 + selector (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, Int size, List(String) choices),
  377 + selector (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, Int size, List(String) choices, InitialValue selected),
  378 + // List((String,String)) = List((code,name)) where :
  379 + // code is the web-arg value
  380 + // name appears in selector
  381 + selector_c (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, Int size, List((List(CoreAttrs),WebArgValue,String)) choices),
  382 + selector_c (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, Int size, List((List(CoreAttrs),WebArgValue,String)) choices, InitialValue selected),
  383 + radio_button (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, WebArgValue value, Bool checked),
  384 + radio_button_r (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, WebArgValue value, Bool checked),
  385 + check_box (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, Bool checked),
  386 + check_box_r (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, Bool checked),
  387 + div (List(CoreAttrs), List(HTML_In_Form) content),
  388 + div_empty (List(CoreAttrs)),
  389 + hidden (HTML_Id id, WebArgName name, WebArgValue value),
  390 + partial (HTML_Partial_Content),
  391 + br,
  392 + progress (List(CoreAttrs), Int value, Int max),
  393 + ol (List(CoreAttrs), List(HTML_In_Form) content),
  394 + ul (List(CoreAttrs), List(HTML_In_Form) content),
  395 + li (List(CoreAttrs), List(HTML_In_Form) content),
  396 + button (List(CoreAttrs), List(HTML_In_Form) content),
  397 + i (List(CoreAttrs), String text),
  398 + span (List(CoreAttrs), String text),
  399 + hr (List(CoreAttrs))
  400 +.
  401 +
  402 +public type HTML_Size:
  403 + absolute(Int), // in pixels
  404 + percentage(Int).
  405 +
  406 +public type A_href:
  407 + href(String href),
  408 + href(WEB_Action_Name action, List((String,String)) extra_ops)
  409 +.
  410 +
  411 +public type A_target:
  412 + _blank,
  413 + _self,
  414 + _parent,
  415 + _top,
  416 + framename(String name)
  417 +.
  418 +
  419 +
  420 +public type HTML_Off_Form:
  421 + a (List(CoreAttrs), A_href, A_target, List(HTML_Off_Form) content),
  422 + empty,
  423 + literal_pt (Printable_tree),
  424 + literal (String),
  425 + sequence (List(HTML_Off_Form) items),
  426 + text (List(CoreAttrs), String the_text),
  427 + preformated (List(Text_Option), String),
  428 + table (List(Table_Option), HTML_Header_Row(HTML_Off_Form), List(HTML_Row(HTML_Off_Form)), HTML_Footer_Row(HTML_Off_Form)),
  429 + center (HTML_Off_Form),
  430 + mail_to (String email, HTML_Off_Form element),
  431 + scroller (Int width, Int height,
  432 + Int content_width, Int content_height,
  433 + HTML_Off_Form content),
  434 + fixed_size (HTML_Size width, HTML_Size height, HTML_Off_Form content),
  435 + fixed_size_2 (HTML_Size width, HTML_Size height, String name_of_HTML_file),
  436 + actioner (Actioner_Connection, Actioner_Target, Actioner_Aspect,
  437 + WEB_Action_Name action_name, List((String,String)) extra_ops,
  438 + List(Actioner_Local_Action)),
  439 + actioner (Actioner_Connection, Actioner_Target, Actioner_Aspect,
  440 + WEB_Action_Name action_name, List((String,String)) extra_ops,
  441 + List(Actioner_Local_Action), String form_name),
  442 + foreign_link_new (Actioner_Target, Actioner_Aspect, String url),
  443 + foreign_link (List(Text_Option), String url),
  444 + foreign_link (List(Text_Option), String url, String name),
  445 + private_download (String abs_path, String name, String extra_ext,
  446 + Maybe((String,List((String,String)))) action),
  447 + label (String name),
  448 + form (HTML_Id form_id, List(CoreAttrs), List(HTML_In_Form) content),
  449 + form (HTML_Id form_id, List(CoreAttrs),
  450 + WEB_Action_Name action, List((String,String)) extra_ops,
  451 + List(HTML_In_Form) content),
  452 + in_form (HTML_Id form_id, HTML_In_Form content),
  453 + div (List(CoreAttrs), List(HTML_Partial_Content) p_content),
  454 + iframe (List(CoreAttrs),
  455 + List(CSS_Style) /*styles*/,
  456 + List(CSS_File) /*css_files*/,
  457 + List(JS_File) /*js_files*/,
  458 + HTML_Body /*body*/),
  459 + partial (HTML_Partial_Content),
  460 + progress (List(CoreAttrs), Int value, Int max),
  461 + i (List(CoreAttrs), String text),
  462 + html_tag (String tag_name, List(CoreAttrs), List(HTML_Off_Form) content),
  463 + html_void_tag (String tag_name, List(CoreAttrs))
  464 +.
  465 +
  466 +public type HTML_Meta:
  467 + keywords (List(String)),
  468 + refresh (Actioner_Connection connection,
  469 + Actioner_Target target,
  470 + WEB_Action_Name action,
  471 + Int delay), // in seconds
  472 + refresh (String url, Int delay), // in seconds
  473 + meta (String name, String content),
  474 + http_equiv (String name, String content),
  475 + generic_meta (List((String,String))),
  476 + literal (String).
  477 +
  478 +public type HTML_Head_Tag:
  479 + meta(HTML_Meta),
  480 + title(String),
  481 + js(JS_File),
  482 + js_inline(Script),
  483 + css(CSS_File),
  484 + css_inline(String css_styles) /* Note: <style> and </style> tags are not necessaries */
  485 + .
  486 +
  487 +
  488 +
  489 +public type HTML_Partial_Content:
  490 + partial_content
  491 + (
  492 + List(HTML_Head_Tag),
  493 + HTML_Off_Form
  494 + )
  495 +.
  496 +
  497 +public type Body_Option:
  498 + core_attrs(List(CoreAttrs)),
  499 + background_color (RGB),
  500 + background_image (String url),
  501 + background_image (String url, List(BackgroundOption)).
  502 +
  503 +public type HTML_Body:
  504 + body(List(Body_Option) options, HTML_Off_Form content).
  505 +
  506 +public type WEB_Controller_Result:
  507 + http_answer(
  508 + WEB_Session session, //modified session
  509 + HTTP_Answer http_answer //http answer
  510 + ),
  511 + http_answer(
  512 + HTTP_Answer http_answer //http answer
  513 + ),
  514 + redirect( //internal redirection, session is modified to call the right controller and action
  515 + WEB_Session session
  516 + ),
  517 + redirect( //internal redirection, session is modified to call the right controller and action
  518 + WEB_Session session,
  519 + String controller,
  520 + String action_name
  521 + ),
  522 + redirect_to_previous,
  523 + redirect_to_previous(
  524 + Var(List(WEB_Session_Field)) fields
  525 + ),
  526 + ajax(
  527 + Maybe(WEB_Session) mb_session, //modified session if success else failure
  528 + HTTP_Answer http_answer //http answer
  529 + ),
  530 + ajax(
  531 + Maybe(WEB_Session) mb_session, //modified session if success else failure
  532 + HTML_Partial_Content content,
  533 + String additional_script
  534 + ),
  535 + ajax(
  536 + Maybe(WEB_Session) mb_session, //modified session if success else failure
  537 + Printable_tree content,
  538 + String additional_script
  539 + ),
  540 + send_file(
  541 + String full_path, //full path with file name of the file to send
  542 + Content_Disposition content_disposition //in which form the file must consider by the client (inline: try to display to user, attachment: save as file)
  543 + ),
  544 + renderer_content(
  545 + Maybe(WEB_Session) mb_session, //modified session if success else failure
  546 + //String title,
  547 + //Left_Menu left_menu,
  548 + HTML_Partial_Content content
  549 + )
  550 + //redraw with the current renderer, the given content
  551 +// redraw(
  552 +// Maybe(WEB_Session) mb_session, //modified session if success else failure
  553 +// HTML_Partial_Content content
  554 +// )
  555 +.
  556 +
  557 +public type WEB_Action:
  558 + web_action(
  559 + WEB_Action_Name name, // name of action
  560 + WEB_Action_Allowed_Protocol allowed_proto,
  561 + (WEB_Session) -> Bool allow, // true if action allowed
  562 + (WEB_Session) -> WEB_Controller_Result do_it
  563 + )
  564 +.
  565 +
  566 +
  567 +public type HTML_tooltip:
  568 + html_tooltip
  569 + (
  570 + String title,
  571 + String keyword,
  572 + Int width,
  573 + ),
  574 + html_tooltip_ext
  575 + (
  576 + String title,
  577 + String extend_type,
  578 + String class_suffix,
  579 + List((String, String)) ext_args
  580 + ),
  581 + html_tooltip_ext //same without class suffix. This means we use awesome font
  582 + (
  583 + String title,
  584 + String extend_type,
  585 + List((String, String)) ext_args
  586 + ),
  587 + html_tooltip
  588 + (
  589 + String title,
  590 + WEB_Action_Name wan,
  591 + List((String, String)) ext_args
  592 + ).
  593 +
  594 +
  595 +public type CoreAttrs:
  596 + empty,
  597 + id (String), //A unique identifier for the element.
  598 + //There must not be multiple elements in a document that have the same id value.
  599 + class (String), //A name of a classification, or list of names of classifications, to which the element belongs
  600 + style (String), //Specifies zero or more CSS declarations that apply to the element [CSS].
  601 + title (String), //Advisory information associated with the element.
  602 + lang (String), //Specifies the primary language for the contents of the element and for any of the element’s attributes that contain text.
  603 + dir (Reading_Way), //Specifies the element’s text directionality.
  604 + accesskey (Word8), //A key label or list of key labels with which to associate the element; each key label represents
  605 + //a keyboard shortcut which UAs can use to activate the element or give focus to the element.
  606 + tabindex (Int), //Specifies whether the element represents an element that is is focusable (that is, an element which is part of the
  607 + //sequence of focusable elements in the document), and the relative order of the element in the sequence of focusable
  608 + //elements in the document.
  609 + //Anubis specific
  610 + attr (String, String), //intended to provide unknown attritute
  611 + event (HtmlEvents, String),
  612 + tooltip (HTML_tooltip),
  613 +
  614 + //HTML5
  615 + data (String name, String value),
  616 + contenteditable(Bool), //Specifies whether the contents of the element are editable
  617 + contextmenu(String), //Identifies a menu with which to associate the element as a context menu.
  618 + draggable(Bool), //Specifies whether the element is draggable.
  619 + hidden(Bool), //Specifies that the element represents an element that is not yet, or is no longer, relevant.
  620 + spellcheck(Bool) //Specifies whether the element represents an element whose contents are subject to spell checking and grammar checking.
  621 +.
  622 +
  623 +public type HTTP_Answer:
  624 + html_page (HTTP_Status /*http_status*/,
  625 + List(HTML_Head_Tag) /*html <head> tags*/,
  626 + HTML_Body /*body*/),
  627 + html_page (HTTP_Status /*http_status*/,
  628 + String /*title*/,
  629 + List(HTML_Meta) /*meta_tags*/,
  630 + List(CSS_Style) /*styles*/,
  631 + List(CSS_File) /*css_files*/,
  632 + List(JS_File) /*js_files*/,
  633 + List(Script) /*script*/,
  634 + HTML_Body /*body*/),
  635 + plain_text (HTTP_Status /*http_status*/,
  636 + String /*text*/),
  637 + custom_text (HTTP_Status /*http_status*/,
  638 + MIME /*mime_type*/,
  639 + String /*content*/),
  640 + custom_binary(HTTP_Status /*http_status*/,
  641 + MIME /*mime_type*/,
  642 + ByteArray /*content*/,
  643 + List(HTTP_header)/*other headers*/),
  644 + custom_tree (HTTP_Status /*http_status*/,
  645 + MIME /*mime_type*/,
  646 + Printable_tree /*content*/),
  647 + json (HTTP_Status, /*http_status*/
  648 + JsonValue), /*json value*/
  649 + send_file ( String file_path, //file to send to client. //TODO add call back for before, during, after send
  650 + Content_Disposition c_disposition),
  651 + http_raw (Printable_tree),
  652 + html_content (HTTP_Status /*http_status*/,
  653 + HTML_Off_Form),
  654 + html_partial_content (HTTP_Status /*http_status*/,
  655 + HTML_Partial_Content)
  656 +.
  657 +
  658 +public type WEB_Controller:
  659 + web_controller(
  660 + String name, //controller name
  661 + Var(List(WEB_Action)) controller_actions, //list of all actions of that controller
  662 + (WEB_Session)-> WEB_Controller_Result error //Error renderer
  663 + )
  664 +.
  665 +
... ...
web/widgets/left_menu.anubis
... ... @@ -7,7 +7,8 @@
7 7 */
8 8  
9 9 transmit tools/basis.anubis
10   -read calexium_lib/web/CXM_making_a_web_site.anubis
  10 + read calexium_lib/web/CXM_web_action.anubis
  11 +read calexium_lib/web/CXM_web_action.anubis
11 12 read system/string.anubis
12 13  
13 14 public type Left_Menu_Entry:
... ... @@ -36,11 +37,103 @@ public type Left_Menu:
36 37  
37 38 public type Plugin_Left_Menu:
38 39 plugin_left_menu(
39   - String name, //plug in name
  40 + String app, //application name
  41 + String space, //space name
40 42 Left_Menu left_menu
41 43 )
42 44 .
43 45  
  46 +public type Space_Left_Menu:
  47 + space_menu(
  48 + String name,
  49 + Left_Menu menu
  50 + )
  51 +.
  52 +
  53 +public type App_Left_Menu:
  54 + app_menu(
  55 + String name,
  56 + List(Space_Left_Menu) space_menu_list
  57 + )
  58 +.
  59 +
  60 +public type World_Left_Menu:
  61 + world_menu(
  62 + List(App_Left_Menu) app_menu_list
  63 + )
  64 +.
  65 +
  66 +public define List(Space_Left_Menu)
  67 + add_to_space
  68 + (
  69 + List(Space_Left_Menu) space_list,
  70 + List(Space_Left_Menu) so_far,
  71 + String space_name,
  72 + Left_Menu left_menu
  73 + )=
  74 + if space_list is
  75 + {
  76 + [] then [space_menu(space_name, left_menu)],
  77 + [h . t] then
  78 + if h.name = space_name then // if we found the same name we replace it into the list
  79 + [space_menu(space_name, left_menu) . so_far]+t
  80 + else
  81 + add_to_space(t, [h . so_far], space_name, left_menu)
  82 + }
  83 +.
  84 +
  85 +public define World_Left_Menu
  86 + add_to_app
  87 + (
  88 + List(App_Left_Menu) app_list,
  89 + List(App_Left_Menu) so_far,
  90 + String app_name,
  91 + String space_name,
  92 + Left_Menu left_menu
  93 + )=
  94 + if app_list is
  95 + {
  96 + [] then world_menu([app_menu(app_name, [space_menu(space_name, left_menu)]) . so_far]),
  97 + [h . t] then
  98 + if h.name = app_name then
  99 + world_menu([app_menu(app_name, add_to_space(h.space_menu_list, [], space_name, left_menu)) . so_far]+t)
  100 + else
  101 + add_to_app(t, [h . so_far], app_name, space_name, left_menu)
  102 + }
  103 +.
  104 +
  105 +public define World_Left_Menu
  106 + add_to_World_Left_Menu
  107 + (
  108 + World_Left_Menu w_left_menu,
  109 + Plugin_Left_Menu p_left_menu
  110 + )=
  111 + since p_left_menu is plugin_left_menu(app, space, l_menu),
  112 +
  113 + add_to_app(w_left_menu.app_menu_list, [], app, space, l_menu)
  114 +.
  115 +
  116 +public define World_Left_Menu
  117 + add_to_World_Left_Menu
  118 + (
  119 + World_Left_Menu current_world,
  120 + List(Plugin_Left_Menu) p_left_menu
  121 + )=
  122 + if p_left_menu is
  123 + {
  124 + [] then current_world,
  125 + [h . t] then add_to_World_Left_Menu(add_to_World_Left_Menu(current_world, h), t)
  126 + }
  127 +.
  128 +
  129 +public define World_Left_Menu
  130 + add_to_World_Left_Menu
  131 + (
  132 + List(Plugin_Left_Menu) p_left_menu
  133 + )=
  134 + add_to_World_Left_Menu(world_menu([]), p_left_menu)
  135 +.
  136 +
44 137 public define Left_Menu_Entry
45 138 left_menu_entry
46 139 (
... ... @@ -122,48 +215,3 @@ public define Left_Menu_Entry
122 215 )=
123 216 title(title_id, [], text).
124 217  
125   -define List(HTML_Off_Form)
126   - make_left_menu
127   - (
128   - (String) -> String _T, //translator function
129   - List(Left_Menu_Entry) entries,
130   - String selected,
131   - List(HTML_Off_Form) so_far
132   - )=
133   - if entries is
134   - {
135   - [] then reverse(so_far), //reverse to be in the right direction
136   - [h . t] then
137   - with entry =
138   - if h is
139   - {
140   - left_menu_entry(_menu_id, _classes, _action, _text, _extra, _target_id) then
141   - if _target_id is
142   - {
143   - failure then p([class("item "+_menu_id+"_icon"+if _menu_id=selected then " selected" else ""+ " "+join(" ", _classes))],actioner(same,same, link(_T(_text)),_action,_extra)),
144   - success(target_id) then
145   - p([class("item "+_menu_id+"_icon"+if _menu_id=selected then " selected" else ""+ " "+join(" ", _classes)),
146   - event(onclick, "CalexiumToolBox.ajax_load_content('"+target_id+"', "+format_web_action_name_to_js(_action, _extra)+")")],text(_T(_text))),
147   - }
148   -
149   - title(_title_id, _classes, _text) then
150   - p([class("menu_title"), class(if _title_id=selected then " selected" else ""+ " "+join(" ", _classes))], text([],_T(_text)))
151   -// p([class("menu_title"), class("item "+_title_id+"_icon"+if _title_id=selected then " selected" else ""+ " "+join(" ", _classes))], text([],_T(_text)))
152   - },
153   - make_left_menu(_T, t, selected, [ entry . so_far])
154   - }.
155   -
156   -public define HTML_Partial_Content
157   - make_left_menu
158   - (
159   - (String) -> String _T, //translator function
160   - Left_Menu l_menu
161   - )=
162   - if l_menu is
163   - {
164   - no_left_menu then partial_content(empty),
165   - left_menu(entries, selected) then
166   - partial_content([css(css_file("/css/left_menu.css"))],
167   - sequence(make_left_menu(_T, entries, selected, [])))
168   - }.
169   -
... ...
web/widgets/left_menu_html.anubis 0 → 100644
  1 +/*
  2 + * Created by PyramIDE.
  3 + * User: フランスのトトロ aka (David RENÉ)
  4 + * Date: 29/05/2019
  5 + * Time: 17:26
  6 + * © David RENÉ
  7 + */
  8 +
  9 +transmit calexium_lib/web/widgets/left_menu.anubis
  10 +read calexium_lib/web/CXM_making_a_web_site.anubis
  11 +read calexium_lib/web/CXM_web_action.anubis
  12 +read calexium_lib/web/load_content.anubis
  13 +
  14 +define List(HTML_Off_Form)
  15 + make_left_menu
  16 + (
  17 + (String) -> String _T, //translator function
  18 + List(Left_Menu_Entry) entries,
  19 + String selected,
  20 + List(HTML_Off_Form) so_far
  21 + )=
  22 + if entries is
  23 + {
  24 + [] then reverse(so_far), //reverse to be in the right direction
  25 + [h . t] then
  26 + with entry =
  27 + if h is
  28 + {
  29 + left_menu_entry(_menu_id, _classes, _action, _text, _extra, _target_id) then
  30 + if _target_id is
  31 + {
  32 + failure then p([class("item "+_menu_id+"_icon"+if _menu_id=selected then " selected" else ""+ " "+join(" ", _classes))],actioner(same,same, link(_T(_text)),_action,_extra)),
  33 + success(target_id) then
  34 + p([class("item "+_menu_id+"_icon"+if _menu_id=selected then " selected" else ""+ " "+join(" ", _classes)),
  35 +// event(onclick, "CalexiumToolBox.ajax_load_content('"+target_id+"', "+format_web_action_name_to_js(_action, _extra)+")")],text(_T(_text))),
  36 + event(onclick, load_content(target_id, _action, _extra))],text(_T(_text))),
  37 + }
  38 +
  39 + title(_title_id, _classes, _text) then
  40 + p([class("menu_title"), class(if _title_id=selected then " selected" else ""+ " "+join(" ", _classes))], text([],_T(_text)))
  41 +// p([class("menu_title"), class("item "+_title_id+"_icon"+if _title_id=selected then " selected" else ""+ " "+join(" ", _classes))], text([],_T(_text)))
  42 + },
  43 + make_left_menu(_T, t, selected, [ entry . so_far])
  44 + }.
  45 +
  46 +public define HTML_Partial_Content
  47 + make_left_menu
  48 + (
  49 + (String) -> String _T, //translator function
  50 + Left_Menu l_menu
  51 + )=
  52 + if l_menu is
  53 + {
  54 + no_left_menu then partial_empty,
  55 + left_menu(entries, selected) then
  56 + partial_content([css(css_file("/css/left_menu.css"))],
  57 + sequence(make_left_menu(_T, entries, selected, [])))
  58 + }.
  59 +
... ...