diff --git a/ora/web_util_pkg.pkb b/ora/web_util_pkg.pkb index 1da3068..9e08d27 100755 --- a/ora/web_util_pkg.pkb +++ b/ora/web_util_pkg.pkb @@ -40,7 +40,8 @@ begin end get_email_domain; -function get_escaped_str_with_breaks (p_string in varchar2) return varchar2 +function get_escaped_str_with_breaks (p_string in varchar2, + p_escape_text_if_markup in boolean := true) return varchar2 as l_returnvalue string_util_pkg.t_max_pl_varchar2; begin @@ -54,16 +55,68 @@ begin Who Date Description ------ ---------- -------------------------------- MBR 22.02.2012 Created + MBR 21.05.2015 Option to skip escaping if text already contains markup */ - l_returnvalue := replace (htf.escape_sc(p_string), string_util_pkg.g_line_feed, '
'); + if (not p_escape_text_if_markup) and (text_contains_markup (p_string)) then + l_returnvalue := p_string; + else + l_returnvalue := replace (htf.escape_sc(p_string), string_util_pkg.g_line_feed, '
'); + end if; return l_returnvalue; end get_escaped_str_with_breaks; +function get_escaped_str_with_paragraph (p_string in varchar2, + p_escape_text_if_markup in boolean := true, + p_encode_asterisks in boolean := false, + p_linkify_text in boolean := false) return varchar2 +as + l_returnvalue string_util_pkg.t_max_pl_varchar2; +begin + + /* + + Purpose: get escaped string with HTML paragraphs + + Remarks: + + Who Date Description + ------ ---------- -------------------------------- + MBR 27.10.2013 Created + MBR 14.12.2014 Option to encode asterisks with HTML entity + MBR 21.05.2015 Option to skip escaping if text already contains markup + MBR 29.05.2016 Option to linkify text + MBR 13.06.2016 Linkify: Fix for links at the end of line/paragraph + + */ + + if (not p_escape_text_if_markup) and (text_contains_markup (p_string)) then + l_returnvalue := p_string; + else + l_returnvalue := replace (p_string, string_util_pkg.g_carriage_return, ''); + l_returnvalue := replace (htf.escape_sc (l_returnvalue), string_util_pkg.g_line_feed, '

'); + l_returnvalue := '

' || l_returnvalue || '

'; + -- remove empty paragraphs + l_returnvalue := replace (l_returnvalue, '

', ''); + end if; + + if p_encode_asterisks then + l_returnvalue := replace (l_returnvalue, '*', chr(38) || 'bull;'); + end if; + + if p_linkify_text then + l_returnvalue := linkify_text (replace(l_returnvalue, '

', '

'), p_attributes => 'target="_blank"'); + end if; + + return l_returnvalue; + +end get_escaped_str_with_paragraph; + + function get_local_file_url (p_file_path in varchar2) return varchar2 as l_returnvalue string_util_pkg.t_max_pl_varchar2; @@ -96,6 +149,107 @@ begin end get_local_file_url; +function get_absolute_url (p_url in varchar2, + p_base_url in varchar2) return varchar2 +as + l_returnvalue string_util_pkg.t_max_pl_varchar2; +begin + + /* + + Purpose: get absolute URL + + Remarks: + + Who Date Description + ------ ---------- -------------------------------- + MBR 17.11.2013 Created + + */ + + if instr(p_url, '://') > 0 then + -- the URL already contains a protocol + l_returnvalue := p_url; + elsif substr(p_url, 1, 1) = '/' then + l_returnvalue := p_base_url || p_url; + else + l_returnvalue := p_base_url || '/' || p_url; + end if; + + return l_returnvalue; + +end get_absolute_url; + + +function text_contains_markup (p_text in varchar2) return boolean +as + l_returnvalue boolean; +begin + + /* + + Purpose: returns true if text contains (HTML) markup + + Remarks: + + Who Date Description + ------ ---------- -------------------------------- + MBR 26.02.2015 Created + + */ + + if p_text is null then + l_returnvalue := false; + else + l_returnvalue := instr(p_text, '<') > 0; + end if; + + return l_returnvalue; + +end text_contains_markup; + + +function linkify_text (p_text in varchar2, + p_attributes in varchar2 := null) return varchar2 +is + l_begin_http number := 1; + l_http_idx number := 1; + l_http_length number := 0; + l_returnvalue string_util_pkg.t_max_pl_varchar2; +begin + + /* + + Purpose: change links in regular text into clickable links + + Remarks: based on "wwv_flow_hot_http_links" in Apex 4.1, enhanced to handle both http and https + + Who Date Description + ------ ---------- -------------------------------- + MBR 30.05.2013 Created + + */ + + loop + + l_begin_http := regexp_instr(p_text || ' ', 'http://|https://', l_http_idx, 1, 0, 'i'); + + exit when l_begin_http = 0; + + l_returnvalue := l_returnvalue || substr(p_text || ' ', l_http_idx, l_begin_http - l_http_idx); + l_http_length := instr(replace(p_text,chr(10),' ') || ' ', ' ', l_begin_http) - l_begin_http; + l_returnvalue := l_returnvalue || '' || substr(p_text || ' ', l_begin_http, l_http_length) || ''; + l_http_idx := l_begin_http + l_http_length; + + end loop; + + l_returnvalue := l_returnvalue || substr(p_text || ' ', l_http_idx); + + return l_returnvalue; + +end linkify_text; + + end web_util_pkg; / diff --git a/ora/web_util_pkg.pks b/ora/web_util_pkg.pks index ca4a55c..9a36e8f 100755 --- a/ora/web_util_pkg.pks +++ b/ora/web_util_pkg.pks @@ -18,11 +18,29 @@ as function get_email_domain (p_email in varchar2) return varchar2; -- get escaped string with HTML line breaks - function get_escaped_str_with_breaks (p_string in varchar2) return varchar2; + function get_escaped_str_with_breaks (p_string in varchar2, + p_escape_text_if_markup in boolean := true) return varchar2; + + -- get escaped string with HTML paragraphs + function get_escaped_str_with_paragraph (p_string in varchar2, + p_escape_text_if_markup in boolean := true, + p_encode_asterisks in boolean := false, + p_linkify_text in boolean := false) return varchar2; -- get local file URL function get_local_file_url (p_file_path in varchar2) return varchar2; + -- get absolute URL + function get_absolute_url (p_url in varchar2, + p_base_url in varchar2) return varchar2; + + -- returns true if text contains (HTML) markup + function text_contains_markup (p_text in varchar2) return boolean; + + -- linkify text + function linkify_text (p_text in varchar2, + p_attributes in varchar2 := null) return varchar2; + end web_util_pkg; /