custom control handling (#669)

This commit is contained in:
oblomov 2023-11-23 15:21:42 +01:00 committed by GitHub
parent 774bcde019
commit abb818141d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 92 additions and 28 deletions

View File

@ -5,18 +5,20 @@ CLASS z2ui5_cl_cc_focus DEFINITION
PUBLIC SECTION.
INTERFACES z2ui5_if_cc.
METHODS constructor
IMPORTING
view TYPE REF TO z2ui5_cl_xml_view.
view TYPE REF TO z2ui5_cl_xml_view optional.
METHODS control
IMPORTING
focusId TYPE clike OPTIONAL
selectionStart TYPE clike OPTIONAL
selectionEnd TYPE clike OPTIONAL
setUpdate TYPE clike OPTIONAL
focusid TYPE clike OPTIONAL
selectionstart TYPE clike OPTIONAL
selectionend TYPE clike OPTIONAL
setupdate TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_xml_view.
VALUE(result) TYPE REF TO z2ui5_cl_xml_view.
METHODS load_cc
RETURNING
@ -34,7 +36,8 @@ ENDCLASS.
CLASS z2ui5_cl_cc_focus IMPLEMENTATION.
CLASS Z2UI5_CL_CC_FOCUS IMPLEMENTATION.
METHOD constructor.
@ -42,25 +45,21 @@ CLASS z2ui5_cl_cc_focus IMPLEMENTATION.
ENDMETHOD.
METHOD control.
result = mo_view.
mo_view->_generic( name = `Focus`
ns = `z2ui5`
t_prop = VALUE #(
( n = `setUpdate` v = setUpdate )
( n = `selectionStart` v = selectionStart )
( n = `selectionEnd` v = selectionEnd )
( n = `focusId` v = focusId )
( n = `setUpdate` v = setupdate )
( n = `selectionStart` v = selectionstart )
( n = `selectionEnd` v = selectionend )
( n = `focusId` v = focusid )
) ).
ENDMETHOD.
METHOD load_cc.
result = mo_view->_generic( ns = `html` name = `script` )->_cc_plain_xml( get_js( ) )->get_parent( ).
ENDMETHOD.
METHOD get_js.
@ -104,4 +103,15 @@ CLASS z2ui5_cl_cc_focus IMPLEMENTATION.
ENDMETHOD.
METHOD load_cc.
result = mo_view->_generic( ns = `html` name = `script` )->_cc_plain_xml( get_js( ) )->get_parent( ).
ENDMETHOD.
METHOD z2ui5_if_cc~get_js.
result = get_js( ).
ENDMETHOD.
ENDCLASS.

View File

@ -4,17 +4,18 @@ CLASS z2ui5_cl_cc_timer DEFINITION
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES z2ui5_if_cc.
METHODS constructor
IMPORTING
view TYPE REF TO z2ui5_cl_xml_view.
view TYPE REF TO z2ui5_cl_xml_view optional.
METHODS control
IMPORTING
finished TYPE clike OPTIONAL
delayms TYPE clike OPTIONAL
checkrepeat TYPE clike OPTIONAL
PREFERRED PARAMETER finished
PREFERRED PARAMETER finished
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_xml_view.
@ -22,7 +23,7 @@ CLASS z2ui5_cl_cc_timer DEFINITION
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_xml_view.
class-METHODS get_js
CLASS-METHODS get_js
RETURNING
VALUE(result) TYPE string.
@ -104,4 +105,8 @@ CLASS z2ui5_cl_cc_timer IMPLEMENTATION.
ENDMETHOD.
METHOD z2ui5_if_cc~get_js.
get_js( ).
ENDMETHOD.
ENDCLASS.

View File

@ -5,9 +5,11 @@ CLASS z2ui5_cl_cc_title DEFINITION
PUBLIC SECTION.
INTERFACES z2ui5_if_cc.
METHODS constructor
IMPORTING
view TYPE REF TO z2ui5_cl_xml_view.
view TYPE REF TO z2ui5_cl_xml_view optional.
METHODS control
IMPORTING
@ -31,7 +33,8 @@ ENDCLASS.
CLASS z2ui5_cl_cc_title IMPLEMENTATION.
CLASS Z2UI5_CL_CC_TITLE IMPLEMENTATION.
METHOD constructor.
@ -39,6 +42,7 @@ CLASS z2ui5_cl_cc_title IMPLEMENTATION.
ENDMETHOD.
METHOD control.
result = mo_view.
@ -48,11 +52,6 @@ CLASS z2ui5_cl_cc_title IMPLEMENTATION.
ENDMETHOD.
METHOD load_cc.
result = mo_view->_generic( ns = `html` name = `script` )->_cc_plain_xml( get_js( ) )->get_parent( ).
ENDMETHOD.
METHOD get_js.
@ -88,4 +87,15 @@ CLASS z2ui5_cl_cc_title IMPLEMENTATION.
ENDMETHOD.
METHOD load_cc.
result = mo_view->_generic( ns = `html` name = `script` )->_cc_plain_xml( get_js( ) )->get_parent( ).
ENDMETHOD.
METHOD z2ui5_if_cc~get_js.
result = get_js( ).
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,10 @@
INTERFACE z2ui5_if_cc
PUBLIC .
TYPES ty_t_cc TYPE STANDARD TABLE OF REF TO z2ui5_if_cc WITH DEFAULT KEY.
METHODS get_js
RETURNING
VALUE(result) TYPE string.
ENDINTERFACE.

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_INTF" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOINTERF>
<CLSNAME>Z2UI5_IF_CC</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>Custom Control</DESCRIPT>
<EXPOSURE>2</EXPOSURE>
<STATE>1</STATE>
<UNICODE>X</UNICODE>
</VSEOINTERF>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -17,6 +17,7 @@ CLASS z2ui5_cl_fw_http_handler DEFINITION
check_logging TYPE abap_bool OPTIONAL
custom_js TYPE string OPTIONAL
custom_js_oneventfrontend TYPE string OPTIONAL
t_load_cc TYPE z2ui5_if_cc=>ty_t_cc OPTIONAL
PREFERRED PARAMETER t_config
RETURNING
VALUE(r_result) TYPE string.
@ -29,13 +30,12 @@ ENDCLASS.
CLASS Z2UI5_CL_FW_HTTP_HANDLER IMPLEMENTATION.
CLASS z2ui5_cl_fw_http_handler IMPLEMENTATION.
METHOD http_get.
DATA(lt_config) = t_config.
IF lt_config IS INITIAL.
lt_config = VALUE #(
( n = `data-sap-ui-theme` v = `sap_horizon` )
@ -46,6 +46,18 @@ CLASS Z2UI5_CL_FW_HTTP_HANDLER IMPLEMENTATION.
( n = `data-sap-ui-compatVersion` v = `edge` ) ).
ENDIF.
DATA(lt_load_cc) = t_load_cc.
IF t_load_cc IS INITIAL.
INSERT NEW z2ui5_cl_cc_timer( ) INTO TABLE lt_load_cc.
INSERT NEW z2ui5_cl_cc_focus( ) INTO TABLE lt_load_cc.
INSERT NEW z2ui5_cl_cc_title( ) INTO TABLE lt_load_cc.
ENDIF.
DATA(lv_cc) = ``.
LOOP AT lt_load_cc INTO DATA(li_cc).
lv_cc = lv_cc && li_cc->get_js( ) && |\n|.
ENDLOOP.
IF content_security_policy IS NOT SUPPLIED.
DATA(lv_sec_policy) = `<meta http-equiv="Content-Security-Policy" content="default-src 'self' 'unsafe-inline' 'unsafe-eval' data: ` &&
`ui5.sap.com *.ui5.sap.com sapui5.hana.ondemand.com *.sapui5.hana.ondemand.com sdk.openui5.org *.sdk.openui5.org cdn.jsdelivr.net *.cdn.jsdelivr.net cdnjs.cloudflare.com *.cdnjs.cloudflare.com"/>`.
@ -552,6 +564,8 @@ CLASS Z2UI5_CL_FW_HTTP_HANDLER IMPLEMENTATION.
`sap.z2ui5.Helper.DateAbapDateTimeToDateObject = ((d,t = '000000') => new Date(d.slice(0,4), (d[4]+d[5])-1, d[6]+d[7],t.slice(0,2),t.slice(2,4),t.slice(4,6)));` && |\n| &&
custom_js && |\n| &&
z2ui5_cl_cc_timer=>get_js( ) && |\n| &&
* VALUE string( FOR z2ui5_cl_cc_timer=>get_js( ) && |\n| &&
lv_cc && |\n| &&
` });` && |\n| &&
`</script>` && |\n| &&
`<abc/></body></html>`.