From 595bd840f4ebd4ff849223a0f0865870da63d5cf Mon Sep 17 00:00:00 2001 From: totoro Date: Tue, 20 Mar 2018 14:44:37 +0100 Subject: [PATCH] add encode_HTML_entities function which get an HTML text and encode it into escaped HTML. This allows to transmit HTML to HTML element i.e. input text area with text in HTML format must be encoded to avoid error. --- web/CXM_making_a_web_site.anubis | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 76 insertions(+), 20 deletions(-) diff --git a/web/CXM_making_a_web_site.anubis b/web/CXM_making_a_web_site.anubis index d4e7dcb..7bade8d 100644 --- a/web/CXM_making_a_web_site.anubis +++ b/web/CXM_making_a_web_site.anubis @@ -67,6 +67,63 @@ transmit CXM_web_action.anubis transmit calexium_lib/web/types/web_action_name.anubis +//TODO move anywhere + + +define List(Word8) +/** Test for HTML entity which must be encoded + * and return the encoded entity if needed + */ + get_entity + ( + Word8 _char, + List(Word8) tail + )= + //test for the ampersand + if _char = '&' then + //test if it's already an encoded string like & < etc. In that case we do nothing + if insensitive_equal(['&','a','m','p',';'], tail, 0) then [_char] + else if insensitive_equal(['&','l','t',';'], tail, 0) then [_char] + else if insensitive_equal(['&','g','t',';'], tail, 0) then [_char] + else if insensitive_equal(['&','q','u','o','t',';'], tail, 0) then [_char] + else + [';','p','m','a','&'] + //test for '<' etc. + else if _char = '<' then [';','t','l','&'] + else if _char = '>' then [';','t','g','&'] + else if _char = '\"' then [';','t','o','u','q','&'] + else [_char] +. + +define String + _HTML_encode_entities + ( + List(Word8) source, + List(Word8) current + )= + if source is + { + [] then implode(reverse(current)), + [c . t] then + _HTML_encode_entities(t, get_entity(c, t) + current) + } +. + +public define String + encode_HTML_entities + ( + String source + )= + _HTML_encode_entities(explode(source), []) +. + +//public define String +// encode_HTML_entities +// ( +// String source +// )= +//. + //read CXM_html_tooltip.anubis * (1) Structure of a web site. @@ -4293,7 +4350,7 @@ public define Printable_tree [ ] then [ ], [h . t] then if h is (attrs,val,item) - then ["\n" . format_choices(t)] + then ["\n" . format_choices(t)] }. public define Printable_tree @@ -4308,8 +4365,8 @@ public define Printable_tree [h . t] then if h is (attrs,val,item) then if val.value = selected.value - then ["\n" . format_choices(t)] - else ["\n" . format_choices(t,selected)] + then ["\n" . format_choices(t)] + else ["\n" . format_choices(t,selected)] }. @@ -4938,9 +4995,9 @@ define Printable_tree url(_) then "" }, if action_name = "" then - [""] + [""] else - [s,""] + [s,""] } ], button(url_off,url_on) then @@ -5779,18 +5836,17 @@ define Printable_tree format(cinfo,ic_v,any_foreign_link(options,url,name),format_element,is_https, action_count, head_tags), private_download(url,name,extra,action) then format(cinfo,ic_v,any_private_download(url,name,extra,action),format_element,is_https, action_count, head_tags), - text_input(options, label_text, id, name, i, w) then - + text_input(options, label_text, id, name, init, w) then [ format_label(label_text, id), - ""], - text_input_ro(options, label_text, id, name,i,w) then + ""], + text_input_ro(options, label_text, id, name, init, w) then [ format_label(label_text, id), - ""], - password_input(options, label_text, id, name,i,w) then + ""], + password_input(options, label_text, id, name, init, w) then [ format_label(label_text, id), - ""], - text_area(options,label_text, id, n,i,w,h) then - [ format_label(label_text, id), ""], + ""], + text_area(options,label_text, id, n, init, w, h) then + [ format_label(label_text, id), ""], file_upload(options, label, id, n, w) then [ format_label(label, id), ""], @@ -5807,11 +5863,11 @@ define Printable_tree [ format_label(label, id), ""], - radio_button(options, label, id, n, v, c) then + radio_button(options, label, id, n, value, c) then [ format_label(label, id), - ""], - radio_button_r(options, label, id, n, v, c) then - [ "", + ""], + radio_button_r(options, label, id, n, value, c) then + [ "", format_label(label, id)], check_box(options, label, id, n, c) then [ format_label(label, id), @@ -5823,9 +5879,9 @@ define Printable_tree format(cinfo,ic_v,any_div(options, e),format_element,is_https, action_count, head_tags), div_empty(options) then format(cinfo,ic_v,any_div_empty(options),format_element,is_https, action_count, head_tags), - hidden(_id, name, value) then + hidden(_id, name, init) then since _id is html_Id(id), - [""], + [""], partial(p_content) then if p_content is partial_content(tags, html_elements) then head_tags <- *head_tags + tags; -- libgit2 0.21.4