mirror of
https://github.com/abap2UI5/abap2UI5.git
synced 2025-04-29 02:58:20 +08:00
parent
f5e742d918
commit
1eb3056de5
|
@ -57,8 +57,9 @@ CLASS z2ui5_cl_app_demo_00 IMPLEMENTATION.
|
|||
).
|
||||
|
||||
grid->simple_form( title = 'HowTo - General II' layout = 'ResponsiveGridLayout' )->content( 'form'
|
||||
)->button( text = 'Formatted Text' press = client->_event( 'Z2UI5_CL_APP_DEMO_15' )
|
||||
)->button( text = 'Scrolling & Cursor' press = client->_event( 'z2ui5_cl_app_demo_22' )
|
||||
)->button( text = 'Formatted Text' press = client->_event( 'Z2UI5_CL_APP_DEMO_15' )
|
||||
)->button( text = 'Scrolling & Cursor' press = client->_event( 'z2ui5_cl_app_demo_22' )
|
||||
)->button( text = 'Timer' press = client->_event( 'z2ui5_cl_app_demo_28' )
|
||||
).
|
||||
|
||||
grid->simple_form( title = 'HowTo - Selection-Screen' layout = 'ResponsiveGridLayout' )->content( 'form'
|
||||
|
|
|
@ -104,6 +104,7 @@ CLASS Z2UI5_CL_APP_DEMO_26 IMPLEMENTATION.
|
|||
navbuttonpress = client->_event( 'BACK' )
|
||||
shownavbutton = abap_true
|
||||
)->header_content(
|
||||
)->link( text = 'Demo' target = '_blank' href = `https://twitter.com/OblomovDev/status/1643899059839672321`
|
||||
)->link(
|
||||
text = 'Source_Code' target = '_blank'
|
||||
href = z2ui5_cl_xml_view_helper=>hlp_get_source_code_url( app = me get = client->get( ) )
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<VSEOCLASS>
|
||||
<CLSNAME>Z2UI5_CL_APP_DEMO_26</CLSNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>open by</DESCRIPT>
|
||||
<DESCRIPT>popups - popover</DESCRIPT>
|
||||
<STATE>1</STATE>
|
||||
<CLSCCINCL>X</CLSCCINCL>
|
||||
<FIXPT>X</FIXPT>
|
||||
|
|
|
@ -4,8 +4,17 @@ CLASS z2ui5_cl_app_demo_28 DEFINITION PUBLIC.
|
|||
|
||||
INTERFACES z2ui5_if_app.
|
||||
|
||||
DATA mt_draft TYPE REF TO data.
|
||||
DATA mv_test TYPE REF TO data.
|
||||
TYPES:
|
||||
BEGIN OF ty_row,
|
||||
title TYPE string,
|
||||
value TYPE string,
|
||||
descr TYPE string,
|
||||
icon TYPE string,
|
||||
info TYPE string,
|
||||
checkbox TYPE abap_bool,
|
||||
END OF ty_row.
|
||||
DATA t_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY.
|
||||
DATA mv_Counter TYPE i.
|
||||
|
||||
PROTECTED SECTION.
|
||||
|
||||
|
@ -19,7 +28,6 @@ CLASS z2ui5_cl_app_demo_28 DEFINITION PUBLIC.
|
|||
next TYPE z2ui5_if_client=>ty_s_next,
|
||||
END OF app.
|
||||
|
||||
|
||||
METHODS z2ui5_on_init.
|
||||
METHODS z2ui5_on_event.
|
||||
METHODS z2ui5_on_render.
|
||||
|
@ -60,37 +68,14 @@ CLASS z2ui5_cl_app_demo_28 IMPLEMENTATION.
|
|||
|
||||
CASE app-get-event.
|
||||
|
||||
WHEN 'BUTTON_POST'.
|
||||
* client->popup_message_toast( |{ product } { quantity } - send to the server| ).
|
||||
app-view_popup = 'POPUP_CONFIRM'.
|
||||
|
||||
WHEN 'BUTTON_CONFIRM'.
|
||||
client->popup_message_toast( |confirm| ).
|
||||
app-view_popup = ''.
|
||||
|
||||
WHEN 'TIMER_FINISHED'.
|
||||
mv_counter = mv_counter + 1.
|
||||
INSERT VALUE #( title = 'entry' && mv_counter info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' )
|
||||
INTO TABLE t_tab.
|
||||
|
||||
FIELD-SYMBOLS <mt_draft> TYPE STANDARD TABLE.
|
||||
|
||||
" OF z2ui5_t_draft.
|
||||
ASSIGN mt_draft->* TO <mt_draft>.
|
||||
|
||||
SELECT FROM z2ui5_t_draft
|
||||
FIELDS *
|
||||
ORDER BY uuid
|
||||
INTO TABLE @DATA(lt_data)
|
||||
UP TO 2 ROWS
|
||||
.
|
||||
APPEND LINES OF lt_data TO <mt_draft>.
|
||||
"!"mt_draft->* = CORRESPONDING #( lt_data ).
|
||||
"!
|
||||
app-next-s_timer-interval_ms = '2000'.
|
||||
app-next-s_timer-event_finished = 'TIMER_FINISHED'.
|
||||
|
||||
WHEN 'BUTTON_CANCEL'.
|
||||
client->popup_message_toast( |cancel| ).
|
||||
app-view_popup = ''.
|
||||
|
||||
WHEN 'BACK'.
|
||||
client->nav_app_leave( client->get_app( app-get-id_prev_app_stack ) ).
|
||||
|
||||
|
@ -101,35 +86,10 @@ CLASS z2ui5_cl_app_demo_28 IMPLEMENTATION.
|
|||
|
||||
METHOD z2ui5_on_init.
|
||||
|
||||
* product = 'tomato'.
|
||||
* quantity = '500'.
|
||||
app-view_main = 'VIEW_MAIN'.
|
||||
* input41 = 'faasdfdfsaVIp'.
|
||||
*
|
||||
* input21 = '40'.
|
||||
* input22 = '40'.
|
||||
mv_counter = 1.
|
||||
|
||||
|
||||
|
||||
CREATE DATA mv_test TYPE string.
|
||||
FIELD-SYMBOLS <field> type string.
|
||||
assign mv_test->* to <field>.
|
||||
<field> = 'test'.
|
||||
|
||||
CREATE DATA mt_draft TYPE STANDARD TABLE OF z2ui5_t_draft.
|
||||
|
||||
SELECT FROM z2ui5_t_draft
|
||||
FIELDS *
|
||||
ORDER BY uuid
|
||||
INTO TABLE @DATA(lt_data)
|
||||
UP TO 10 ROWS
|
||||
.
|
||||
|
||||
types ty_t_draft type STANDARD TABLE OF z2ui5_t_draft.
|
||||
FIELD-SYMBOLS <tab> TYPE ty_t_draft.
|
||||
|
||||
assign mt_draft->* to <tab>.
|
||||
<tab> = lt_data.
|
||||
t_tab = VALUE #(
|
||||
( title = 'entry' && mv_counter info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) ).
|
||||
|
||||
app-next-s_timer-interval_ms = '2000'.
|
||||
app-next-s_timer-event_finished = 'TIMER_FINISHED'.
|
||||
|
@ -140,48 +100,40 @@ CLASS z2ui5_cl_app_demo_28 IMPLEMENTATION.
|
|||
METHOD z2ui5_on_render.
|
||||
|
||||
DATA(lo_view) = z2ui5_cl_xml_view_helper=>factory( )->shell( )->page(
|
||||
title = 'abap2UI5 - First Example'
|
||||
title = 'abap2UI5 - CL_GUI_TIMER - Monitor'
|
||||
navbuttonpress = client->_event( 'BACK' )
|
||||
shownavbutton = abap_true
|
||||
)->header_content(
|
||||
)->link( text = 'Demo' target = '_blank' href = `https://twitter.com/OblomovDev/status/1645816100813152256`
|
||||
)->link(
|
||||
text = 'Source_Code' target = '_blank'
|
||||
href = z2ui5_cl_xml_view_helper=>hlp_get_source_code_url( app = me get = client->get( ) )
|
||||
)->get_parent(
|
||||
)->simple_form( title = 'Form Title' editable = abap_true
|
||||
)->content( 'form'
|
||||
)->title( 'Input'
|
||||
)->label( 'quantity' ).
|
||||
)->simple_form( title = 'Chart auto refresh (2 sec)' editable = abap_true
|
||||
).
|
||||
|
||||
DATA(point) = lo_View->flex_box(
|
||||
width = '22rem'
|
||||
height = '13rem'
|
||||
alignitems = 'Center'
|
||||
class = 'sapUiSmallMargin'
|
||||
)->items( )->interact_line_chart(
|
||||
selectionchanged = client->_event( 'LINE_CHANGED' )
|
||||
precedingpoint = '15'
|
||||
succeddingpoint = '89'
|
||||
)->points( ).
|
||||
LOOP AT t_tab REFERENCE INTO DATA(lr_line).
|
||||
point->interact_line_chart_point( label = lr_line->title value = CONV string( sy-tabix ) ).
|
||||
ENDLOOP.
|
||||
|
||||
FIELD-SYMBOLS <field> type string.
|
||||
ASSIGN mv_test->* to <field>.
|
||||
|
||||
lo_view->input( client->_bind( val = <field> check_gen_data = abap_true ) ).
|
||||
|
||||
lo_view->button(
|
||||
text = 'post'
|
||||
press = client->_event( 'BUTTON_POST' )
|
||||
).
|
||||
|
||||
FIELD-SYMBOLS <tab> type STANDARD TABLE.
|
||||
assign mt_draft->* to <tab>.
|
||||
DATA(tab) = lo_view->get_parent( )->get_parent( )->simple_form( title = 'Table' editable = abap_true
|
||||
)->content( 'form' )->table(
|
||||
items = client->_bind( val = <tab> check_gen_data = abap_true )
|
||||
).
|
||||
|
||||
tab->columns(
|
||||
)->column(
|
||||
)->text( 'UUID' )->get_parent(
|
||||
)->column(
|
||||
)->text( 'UUID_PREV' ).
|
||||
|
||||
tab->items( )->column_list_item(
|
||||
)->cells(
|
||||
)->input( '{UUID}'
|
||||
)->input( '{UUID_PREV}'
|
||||
).
|
||||
lo_view->get_parent( )->list(
|
||||
headertext = 'Data auto refresh (2 sec)'
|
||||
items = client->_bind_one( t_tab )
|
||||
)->standard_list_item(
|
||||
title = '{TITLE}'
|
||||
description = '{DESCR}'
|
||||
icon = '{ICON}'
|
||||
info = '{INFO}' ).
|
||||
|
||||
app-next-xml_main = lo_view->get_root( )->xml_get( ).
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<VSEOCLASS>
|
||||
<CLSNAME>Z2UI5_CL_APP_DEMO_28</CLSNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>demo - table maintenance 2</DESCRIPT>
|
||||
<DESCRIPT>demo - cl_gui_timer</DESCRIPT>
|
||||
<STATE>1</STATE>
|
||||
<CLSCCINCL>X</CLSCCINCL>
|
||||
<FIXPT>X</FIXPT>
|
||||
|
|
|
@ -83,6 +83,7 @@ CLASS z2ui5_cl_app_demo_31 IMPLEMENTATION.
|
|||
` <Label text="Loading time" />` && |\n| &&
|
||||
` <Input id="loadingMinSeconds" width="8rem" type="Number" description="seconds" value="` && client->_bind( mv_value ) && `"/>` && |\n| &&
|
||||
` <Button text="BACK" type="Emphasized" press="` && client->_event( 'BACK') && `"/>` && |\n| &&
|
||||
` <Link target="_blank" text="Demo" href="https://twitter.com/OblomovDev/status/1645104539387691008"/>` && |\n| &&
|
||||
` <Link target="_blank" text="Source_Code" href="` && z2ui5_cl_xml_view_helper=>hlp_get_source_code_url( app = me get = client->get( ) ) && `"/>` && |\n| &&
|
||||
` </form:SimpleForm> ` && |\n| &&
|
||||
` <GenericTile class="sapUiTinyMarginBegin sapUiTinyMarginTop tileLayout" header="Country-Specific Profit Margin" press="` && client->_event( 'POPUP' ) && `"` && |\n| &&
|
||||
|
|
190
src/00/z2ui5_cl_app_demo_35.clas.abap
Normal file
190
src/00/z2ui5_cl_app_demo_35.clas.abap
Normal file
|
@ -0,0 +1,190 @@
|
|||
CLASS z2ui5_cl_app_demo_35 DEFINITION PUBLIC.
|
||||
|
||||
PUBLIC SECTION.
|
||||
|
||||
INTERFACES z2ui5_if_app.
|
||||
|
||||
DATA mt_draft TYPE REF TO data.
|
||||
DATA mv_test TYPE REF TO data.
|
||||
|
||||
PROTECTED SECTION.
|
||||
|
||||
DATA client TYPE REF TO z2ui5_if_client.
|
||||
DATA:
|
||||
BEGIN OF app,
|
||||
check_initialized TYPE abap_bool,
|
||||
view_main TYPE string,
|
||||
view_popup TYPE string,
|
||||
get TYPE z2ui5_if_client=>ty_s_get,
|
||||
next TYPE z2ui5_if_client=>ty_s_next,
|
||||
END OF app.
|
||||
|
||||
|
||||
METHODS z2ui5_on_init.
|
||||
METHODS z2ui5_on_event.
|
||||
METHODS z2ui5_on_render.
|
||||
|
||||
PRIVATE SECTION.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
||||
CLASS z2ui5_cl_app_demo_35 IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD z2ui5_if_app~controller.
|
||||
|
||||
me->client = client.
|
||||
app-get = client->get( ).
|
||||
app-view_popup = ``.
|
||||
|
||||
IF app-check_initialized = abap_false.
|
||||
app-check_initialized = abap_true.
|
||||
z2ui5_on_init( ).
|
||||
ENDIF.
|
||||
|
||||
IF app-get-event IS NOT INITIAL.
|
||||
z2ui5_on_event( ).
|
||||
ENDIF.
|
||||
|
||||
z2ui5_on_render( ).
|
||||
|
||||
client->set_next( app-next ).
|
||||
CLEAR app-get.
|
||||
CLEAR app-next.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD z2ui5_on_event.
|
||||
|
||||
CASE app-get-event.
|
||||
|
||||
WHEN 'BUTTON_POST'.
|
||||
* client->popup_message_toast( |{ product } { quantity } - send to the server| ).
|
||||
app-view_popup = 'POPUP_CONFIRM'.
|
||||
|
||||
WHEN 'BUTTON_CONFIRM'.
|
||||
client->popup_message_toast( |confirm| ).
|
||||
app-view_popup = ''.
|
||||
|
||||
WHEN 'TIMER_FINISHED'.
|
||||
|
||||
FIELD-SYMBOLS <mt_draft> TYPE STANDARD TABLE.
|
||||
|
||||
" OF z2ui5_t_draft.
|
||||
ASSIGN mt_draft->* TO <mt_draft>.
|
||||
|
||||
SELECT FROM z2ui5_t_draft
|
||||
FIELDS *
|
||||
ORDER BY uuid
|
||||
INTO TABLE @DATA(lt_data)
|
||||
UP TO 2 ROWS
|
||||
.
|
||||
APPEND LINES OF lt_data TO <mt_draft>.
|
||||
"!"mt_draft->* = CORRESPONDING #( lt_data ).
|
||||
"!
|
||||
app-next-s_timer-interval_ms = '2000'.
|
||||
app-next-s_timer-event_finished = 'TIMER_FINISHED'.
|
||||
|
||||
WHEN 'BUTTON_CANCEL'.
|
||||
client->popup_message_toast( |cancel| ).
|
||||
app-view_popup = ''.
|
||||
|
||||
WHEN 'BACK'.
|
||||
client->nav_app_leave( client->get_app( app-get-id_prev_app_stack ) ).
|
||||
|
||||
ENDCASE.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD z2ui5_on_init.
|
||||
|
||||
* product = 'tomato'.
|
||||
* quantity = '500'.
|
||||
app-view_main = 'VIEW_MAIN'.
|
||||
* input41 = 'faasdfdfsaVIp'.
|
||||
*
|
||||
* input21 = '40'.
|
||||
* input22 = '40'.
|
||||
|
||||
|
||||
|
||||
CREATE DATA mv_test TYPE string.
|
||||
FIELD-SYMBOLS <field> type string.
|
||||
assign mv_test->* to <field>.
|
||||
<field> = 'test'.
|
||||
|
||||
CREATE DATA mt_draft TYPE STANDARD TABLE OF z2ui5_t_draft.
|
||||
|
||||
SELECT FROM z2ui5_t_draft
|
||||
FIELDS *
|
||||
ORDER BY uuid
|
||||
INTO TABLE @DATA(lt_data)
|
||||
UP TO 10 ROWS
|
||||
.
|
||||
|
||||
types ty_t_draft type STANDARD TABLE OF z2ui5_t_draft.
|
||||
FIELD-SYMBOLS <tab> TYPE ty_t_draft.
|
||||
|
||||
assign mt_draft->* to <tab>.
|
||||
<tab> = lt_data.
|
||||
|
||||
app-next-s_timer-interval_ms = '2000'.
|
||||
app-next-s_timer-event_finished = 'TIMER_FINISHED'.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD z2ui5_on_render.
|
||||
|
||||
DATA(lo_view) = z2ui5_cl_xml_view_helper=>factory( )->shell( )->page(
|
||||
title = 'abap2UI5 - First Example'
|
||||
navbuttonpress = client->_event( 'BACK' )
|
||||
shownavbutton = abap_true
|
||||
)->header_content(
|
||||
)->link(
|
||||
text = 'Source_Code' target = '_blank'
|
||||
href = z2ui5_cl_xml_view_helper=>hlp_get_source_code_url( app = me get = client->get( ) )
|
||||
)->get_parent(
|
||||
)->simple_form( title = 'Form Title' editable = abap_true
|
||||
)->content( 'form'
|
||||
)->title( 'Input'
|
||||
)->label( 'quantity' ).
|
||||
|
||||
|
||||
FIELD-SYMBOLS <field> type string.
|
||||
ASSIGN mv_test->* to <field>.
|
||||
|
||||
lo_view->input( client->_bind( val = <field> check_gen_data = abap_true ) ).
|
||||
|
||||
lo_view->button(
|
||||
text = 'post'
|
||||
press = client->_event( 'BUTTON_POST' )
|
||||
).
|
||||
|
||||
FIELD-SYMBOLS <tab> type STANDARD TABLE.
|
||||
assign mt_draft->* to <tab>.
|
||||
DATA(tab) = lo_view->get_parent( )->get_parent( )->simple_form( title = 'Table' editable = abap_true
|
||||
)->content( 'form' )->table(
|
||||
items = client->_bind( val = <tab> check_gen_data = abap_true )
|
||||
).
|
||||
|
||||
tab->columns(
|
||||
)->column(
|
||||
)->text( 'UUID' )->get_parent(
|
||||
)->column(
|
||||
)->text( 'UUID_PREV' ).
|
||||
|
||||
tab->items( )->column_list_item(
|
||||
)->cells(
|
||||
)->input( '{UUID}'
|
||||
)->input( '{UUID_PREV}'
|
||||
).
|
||||
|
||||
app-next-xml_main = lo_view->get_root( )->xml_get( ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
16
src/00/z2ui5_cl_app_demo_35.clas.xml
Normal file
16
src/00/z2ui5_cl_app_demo_35.clas.xml
Normal file
|
@ -0,0 +1,16 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<VSEOCLASS>
|
||||
<CLSNAME>Z2UI5_CL_APP_DEMO_35</CLSNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>demo - table maintenance 2</DESCRIPT>
|
||||
<STATE>1</STATE>
|
||||
<CLSCCINCL>X</CLSCCINCL>
|
||||
<FIXPT>X</FIXPT>
|
||||
<UNICODE>X</UNICODE>
|
||||
</VSEOCLASS>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
|
@ -14,10 +14,8 @@ CLASS z2ui5_cl_http_handler DEFINITION
|
|||
|
||||
CLASS-METHODS main_index_html
|
||||
IMPORTING
|
||||
library_path TYPE clike DEFAULT `https://sdk.openui5.org/resources/sap-ui-core.js`
|
||||
theme TYPE clike DEFAULT `sap_horizon`
|
||||
title TYPE clike DEFAULT `abap2UI5`
|
||||
rtl TYPE abap_bool OPTIONAL
|
||||
title TYPE clike DEFAULT `abap2UI5`
|
||||
t_config TYPE z2ui5_if_client=>ty_t_name_value OPTIONAL
|
||||
check_logging TYPE abap_bool DEFAULT abap_false
|
||||
RETURNING
|
||||
VALUE(r_result) TYPE string ##NEEDED.
|
||||
|
@ -71,6 +69,19 @@ CLASS z2ui5_cl_http_handler IMPLEMENTATION.
|
|||
|
||||
METHOD main_index_html.
|
||||
|
||||
DATA(lt_Config) = t_config.
|
||||
IF lt_config IS INITIAL.
|
||||
lt_config = VALUE #(
|
||||
( name = `data-sap-ui-theme` value = `sap_horizon` )
|
||||
( name = `src` value = `https://sdk.openui5.org/resources/sap-ui-core.js` )
|
||||
( name = `data-sap-ui-theme` value = `sap_horizon` )
|
||||
( name = `data-sap-ui-libs` value = `sap.m` )
|
||||
( name = `data-sap-ui-bindingSyntax` value = `complex` )
|
||||
( name = `data-sap-ui-frameOptions` value = `trusted` )
|
||||
( name = `data-sap-ui-compatVersion` value = `edge` )
|
||||
).
|
||||
ENDIF.
|
||||
|
||||
DATA(lv_url) = _=>get_header_val( '~path' ).
|
||||
DATA(lv_app) = _=>get_param_val( 'app' ).
|
||||
z2ui5_lcl_db=>cleanup( ).
|
||||
|
@ -86,16 +97,14 @@ CLASS z2ui5_cl_http_handler IMPLEMENTATION.
|
|||
` height: 100%;` && |\n| &&
|
||||
` }` && |\n| &&
|
||||
` </style> ` &&
|
||||
` <script src="` && library_path && `" ` &&
|
||||
` id="sap-ui-bootstrap" data-sap-ui-theme="` && theme && `" `.
|
||||
` <script id="sap-ui-bootstrap"`.
|
||||
|
||||
IF rtl IS SUPPLIED.
|
||||
r_result = r_result && `data-sap-ui-rtl="` && _=>get_json_boolean( rtl ) && `" `.
|
||||
ENDIF.
|
||||
LOOP AT lt_config REFERENCE INTO DATA(lr_config).
|
||||
r_result = r_result && | { lr_config->name }="{ lr_config->value }"|.
|
||||
ENDLOOP.
|
||||
|
||||
r_result = r_result && ` data-sap-ui-libs="sap.m" data-sap-ui-bindingSyntax="complex" data-sap-ui-frameOptions="trusted" data-sap-ui-compatVersion="edge"` && |\n| &&
|
||||
` >` && |\n| &&
|
||||
` </script></head>` && |\n| &&
|
||||
r_result = r_result &&
|
||||
` ></script></head>` && |\n| &&
|
||||
`<body class="sapUiBody sapUiSizeCompact" >` && |\n| &&
|
||||
` <div id="content" data-handle-validation="true" ></div>` && |\n| &&
|
||||
`</body>` && |\n| &&
|
||||
|
|
Loading…
Reference in New Issue
Block a user