Z2UI5_CL_CORE_APP_STARTUP
E
- abap2UI5 - app startup
+ abap2UI5 - startup app
1
X
X
diff --git a/src/01/01/z2ui5_cl_core_attri_srv.clas.abap b/src/01/02/z2ui5_cl_core_attri_srv.clas.abap
similarity index 100%
rename from src/01/01/z2ui5_cl_core_attri_srv.clas.abap
rename to src/01/02/z2ui5_cl_core_attri_srv.clas.abap
diff --git a/src/01/01/z2ui5_cl_core_attri_srv.clas.testclasses.abap b/src/01/02/z2ui5_cl_core_attri_srv.clas.testclasses.abap
similarity index 100%
rename from src/01/01/z2ui5_cl_core_attri_srv.clas.testclasses.abap
rename to src/01/02/z2ui5_cl_core_attri_srv.clas.testclasses.abap
diff --git a/src/01/01/z2ui5_cl_core_attri_srv.clas.xml b/src/01/02/z2ui5_cl_core_attri_srv.clas.xml
similarity index 100%
rename from src/01/01/z2ui5_cl_core_attri_srv.clas.xml
rename to src/01/02/z2ui5_cl_core_attri_srv.clas.xml
diff --git a/src/01/01/z2ui5_cl_core_bind_srv.clas.abap b/src/01/02/z2ui5_cl_core_bind_srv.clas.abap
similarity index 100%
rename from src/01/01/z2ui5_cl_core_bind_srv.clas.abap
rename to src/01/02/z2ui5_cl_core_bind_srv.clas.abap
diff --git a/src/01/01/z2ui5_cl_core_bind_srv.clas.testclasses.abap b/src/01/02/z2ui5_cl_core_bind_srv.clas.testclasses.abap
similarity index 100%
rename from src/01/01/z2ui5_cl_core_bind_srv.clas.testclasses.abap
rename to src/01/02/z2ui5_cl_core_bind_srv.clas.testclasses.abap
diff --git a/src/01/01/z2ui5_cl_core_bind_srv.clas.xml b/src/01/02/z2ui5_cl_core_bind_srv.clas.xml
similarity index 100%
rename from src/01/01/z2ui5_cl_core_bind_srv.clas.xml
rename to src/01/02/z2ui5_cl_core_bind_srv.clas.xml
diff --git a/src/01/01/z2ui5_cl_core_diss_srv.clas.abap b/src/01/02/z2ui5_cl_core_diss_srv.clas.abap
similarity index 100%
rename from src/01/01/z2ui5_cl_core_diss_srv.clas.abap
rename to src/01/02/z2ui5_cl_core_diss_srv.clas.abap
diff --git a/src/01/01/z2ui5_cl_core_diss_srv.clas.testclasses.abap b/src/01/02/z2ui5_cl_core_diss_srv.clas.testclasses.abap
similarity index 100%
rename from src/01/01/z2ui5_cl_core_diss_srv.clas.testclasses.abap
rename to src/01/02/z2ui5_cl_core_diss_srv.clas.testclasses.abap
diff --git a/src/01/01/z2ui5_cl_core_diss_srv.clas.xml b/src/01/02/z2ui5_cl_core_diss_srv.clas.xml
similarity index 100%
rename from src/01/01/z2ui5_cl_core_diss_srv.clas.xml
rename to src/01/02/z2ui5_cl_core_diss_srv.clas.xml
diff --git a/src/01/01/z2ui5_cl_core_event_srv.clas.abap b/src/01/02/z2ui5_cl_core_event_srv.clas.abap
similarity index 100%
rename from src/01/01/z2ui5_cl_core_event_srv.clas.abap
rename to src/01/02/z2ui5_cl_core_event_srv.clas.abap
diff --git a/src/01/01/z2ui5_cl_core_event_srv.clas.testclasses.abap b/src/01/02/z2ui5_cl_core_event_srv.clas.testclasses.abap
similarity index 100%
rename from src/01/01/z2ui5_cl_core_event_srv.clas.testclasses.abap
rename to src/01/02/z2ui5_cl_core_event_srv.clas.testclasses.abap
diff --git a/src/01/01/z2ui5_cl_core_event_srv.clas.xml b/src/01/02/z2ui5_cl_core_event_srv.clas.xml
similarity index 100%
rename from src/01/01/z2ui5_cl_core_event_srv.clas.xml
rename to src/01/02/z2ui5_cl_core_event_srv.clas.xml
diff --git a/src/01/02/z2ui5_cl_core_http_post.clas.abap b/src/01/02/z2ui5_cl_core_http_post.clas.abap
index 460f4adf..2ee5196c 100644
--- a/src/01/02/z2ui5_cl_core_http_post.clas.abap
+++ b/src/01/02/z2ui5_cl_core_http_post.clas.abap
@@ -79,7 +79,8 @@ CLASS z2ui5_cl_core_http_post IMPLEMENTATION.
ENDIF.
CATCH cx_root INTO DATA(x).
- mo_action = mo_action->factory_system_error( x ).
+ ASSERT x->get_text( ) = 1.
+* mo_action = mo_action->factory_system_error( x ).
ENDTRY.
ENDMETHOD.
@@ -157,7 +158,8 @@ CLASS z2ui5_cl_core_http_post IMPLEMENTATION.
ENDIF.
CATCH cx_root INTO DATA(x).
- mo_action = mo_action->factory_system_error( x ).
+ ASSERT x->get_text( ) = 1.
+* mo_action = mo_action->factory_system_error( x ).
ENDTRY.
ENDMETHOD.
ENDCLASS.
diff --git a/src/01/01/z2ui5_cl_core_json_srv.clas.abap b/src/01/02/z2ui5_cl_core_json_srv.clas.abap
similarity index 100%
rename from src/01/01/z2ui5_cl_core_json_srv.clas.abap
rename to src/01/02/z2ui5_cl_core_json_srv.clas.abap
diff --git a/src/01/01/z2ui5_cl_core_json_srv.clas.testclasses.abap b/src/01/02/z2ui5_cl_core_json_srv.clas.testclasses.abap
similarity index 100%
rename from src/01/01/z2ui5_cl_core_json_srv.clas.testclasses.abap
rename to src/01/02/z2ui5_cl_core_json_srv.clas.testclasses.abap
diff --git a/src/01/01/z2ui5_cl_core_json_srv.clas.xml b/src/01/02/z2ui5_cl_core_json_srv.clas.xml
similarity index 100%
rename from src/01/01/z2ui5_cl_core_json_srv.clas.xml
rename to src/01/02/z2ui5_cl_core_json_srv.clas.xml
diff --git a/src/01/01/z2ui5_cl_core_util_srv.clas.abap b/src/01/02/z2ui5_cl_core_util_srv.clas.abap
similarity index 100%
rename from src/01/01/z2ui5_cl_core_util_srv.clas.abap
rename to src/01/02/z2ui5_cl_core_util_srv.clas.abap
diff --git a/src/01/01/z2ui5_cl_core_util_srv.clas.xml b/src/01/02/z2ui5_cl_core_util_srv.clas.xml
similarity index 100%
rename from src/01/01/z2ui5_cl_core_util_srv.clas.xml
rename to src/01/02/z2ui5_cl_core_util_srv.clas.xml
diff --git a/src/01/03/package.devc.xml b/src/01/03/package.devc.xml
index 44ebc737..9bf4d969 100644
--- a/src/01/03/package.devc.xml
+++ b/src/01/03/package.devc.xml
@@ -3,7 +3,7 @@
- abap2UI5 - client
+ abap2UI5 - app (manual)
diff --git a/src/01/04/z2ui5_cl_core_app_error.clas.abap b/src/01/04/z2ui5_cl_core_app_error.clas.abap
deleted file mode 100644
index 4737d9a0..00000000
--- a/src/01/04/z2ui5_cl_core_app_error.clas.abap
+++ /dev/null
@@ -1,67 +0,0 @@
-CLASS z2ui5_cl_core_app_error DEFINITION
- PUBLIC
- FINAL
- CREATE PROTECTED .
-
- PUBLIC SECTION.
-
- INTERFACES z2ui5_if_app.
-
- DATA mx_error TYPE REF TO cx_root .
-
- CLASS-METHODS factory
- IMPORTING
- !error TYPE REF TO cx_root
- RETURNING
- VALUE(result) TYPE REF TO z2ui5_cl_core_app_error.
-
- PROTECTED SECTION.
- PRIVATE SECTION.
-ENDCLASS.
-
-
-
-CLASS z2ui5_cl_core_app_error IMPLEMENTATION.
-
-
- METHOD factory.
-
- result = NEW #( ).
- result->mx_error = error.
-
- ENDMETHOD.
-
-
- METHOD z2ui5_if_app~main.
-
- DATA(lv_url) = shift_left( val = client->get( )-s_config-origin && client->get( )-s_config-pathname sub = ` ` ).
- DATA(lv_url_app_start) = lv_url && client->get( )-s_config-search.
-
- DATA(lv_text) = ``.
- DATA(lx_error) = mx_error.
- WHILE lx_error IS BOUND.
- lv_text = lv_text && `` && lx_error->get_text( ) && `
`.
- lx_error = lx_error->previous.
- ENDWHILE.
-
- DATA(view) = z2ui5_cl_xml_view=>factory( ).
- DATA(vbox) = view->shell( )->vbox( alignitems = `Center` ).
- vbox->text( ).
- vbox->hbox(
- )->icon( src = `sap-icon://alert`
- )->text(
- )->title( `500 Internal Server Error`
- )->text(
- )->icon( src = `sap-icon://alert` ).
- vbox->formatted_text( lv_text ).
- vbox->hbox(
- )->button(
- text = `Restart`
- type = `Emphasized`
- press = client->_event_client( val = client->cs_event-location_reload t_arg = VALUE #( ( lv_url_app_start ) ) )
- ).
- client->view_display( view->stringify( ) ).
- client->popup_destroy( ).
-
- ENDMETHOD.
-ENDCLASS.
diff --git a/src/01/04/z2ui5_cl_core_app_error.clas.testclasses.abap b/src/01/04/z2ui5_cl_core_app_error.clas.testclasses.abap
deleted file mode 100644
index 62a85719..00000000
--- a/src/01/04/z2ui5_cl_core_app_error.clas.testclasses.abap
+++ /dev/null
@@ -1,20 +0,0 @@
-CLASS ltcl_app_error_test DEFINITION FINAL FOR TESTING
- DURATION SHORT
- RISK LEVEL DANGEROUS.
-
- PRIVATE SECTION.
- METHODS first_test FOR TESTING RAISING cx_static_check.
-
-ENDCLASS.
-
-
-CLASS ltcl_app_error_test IMPLEMENTATION.
-
- METHOD first_test.
-
- DATA(lx) = NEW z2ui5_cx_util_error( ).
- DATA(lo_app) = z2ui5_cl_core_app_error=>factory( lx ) ##NEEDED.
-
- ENDMETHOD.
-
-ENDCLASS.
diff --git a/src/01/04/z2ui5_cl_core_app_info.clas.abap b/src/01/04/z2ui5_cl_core_app_info.clas.abap
deleted file mode 100644
index bb1ad38e..00000000
--- a/src/01/04/z2ui5_cl_core_app_info.clas.abap
+++ /dev/null
@@ -1,145 +0,0 @@
-CLASS z2ui5_cl_core_app_info DEFINITION
- PUBLIC
- FINAL
- CREATE PUBLIC .
-
- PUBLIC SECTION.
-
- INTERFACES z2ui5_if_app.
-
- DATA client TYPE REF TO z2ui5_if_client.
- DATA mv_check_initialized TYPE abap_bool.
-
- DATA mv_ui5_version TYPE string .
-* DATA mv_device TYPE string.
-* DATA mv_device_type TYPE string.
-* DATA mv_theme TYPE string.
-* DATA mv_device_browser TYPE string.
-* DATA mv_device_theme TYPE string.
-* DATA mv_device_gav TYPE string.
-
- CLASS-METHODS factory
- RETURNING
- VALUE(result) TYPE REF TO z2ui5_cl_core_app_info.
-
- METHODS z2ui5_on_event .
- METHODS view_display_start .
- PROTECTED SECTION.
- PRIVATE SECTION.
-ENDCLASS.
-
-
-
-CLASS z2ui5_cl_core_app_info IMPLEMENTATION.
-
-
- METHOD factory.
-
- result = NEW #( ).
-
- ENDMETHOD.
-
-
- METHOD view_display_start.
-
- DATA(page2) = z2ui5_cl_xml_view=>factory_popup(
- )->dialog(
- title = `abap2UI5 - System Information`
- afterclose = client->_event( `CLOSE` ) ).
-
- DATA(content) = page2->content( ).
- content->_z2ui5( )->info_frontend(
-* device_browser = client->_bind( mv_device_browser )
-* device_systemtype = client->_bind( mv_device_type )
-* ui5_gav = client->_bind( mv_device_gav )
-* ui5_theme = client->_bind( mv_device_theme )
- ui5_version = client->_bind( mv_ui5_version ) ).
-
- DATA(simple_form2) = content->simple_form(
- editable = abap_true
- layout = `ResponsiveGridLayout`
- labelspanxl = `4`
- labelspanl = `3`
- labelspanm = `4`
- labelspans = `12`
- adjustlabelspan = abap_false
- emptyspanxl = `0`
- emptyspanl = `4`
- emptyspanm = `0`
- emptyspans = `0`
- columnsxl = `1`
- columnsl = `1`
- columnsm = `1`
- singlecontainerfullsize = abap_false
- )->content( `form` ).
-
- simple_form2->toolbar( )->title( `Frontend` ).
-
- simple_form2->label( `UI5 Version` ).
- simple_form2->text( client->_bind( mv_ui5_version ) ).
- simple_form2->label( `Launchpad active` ).
- simple_form2->checkbox( enabled = abap_false selected = client->get( )-check_launchpad_active ).
-* simple_form2->label( `Browser` ).
-* simple_form2->text( client->_bind( mv_device_browser ) ).
-* simple_form2->label( `Bootstrap` ).
-* simple_form2->text( client->_bind( mv_device_gav ) ).
-* simple_form2->label( `Theme` ).
-* simple_form2->text( client->_bind( mv_device_theme ) ).
-* simple_form2->label( `Type` ).
-* simple_form2->text( client->_bind( mv_device_type ) ).
-
- simple_form2->toolbar( )->title( `Backend` ).
-
- simple_form2->label( `ABAP for Cloud` ).
- simple_form2->checkbox( enabled = abap_false selected = z2ui5_cl_util=>context_check_abap_cloud( ) ).
-
- DATA(lv_count) = CONV string( NEW z2ui5_cl_core_draft_srv( )->count_entries( ) ).
- simple_form2->toolbar( )->title( `abap2UI5` ).
- simple_form2->label( `Version ` ).
- simple_form2->text( z2ui5_if_app=>version ).
- simple_form2->label( `Draft Entries ` ).
- simple_form2->text( lv_count ).
-
- page2->end_button( )->button(
- text = 'close'
- press = client->_event( 'CLOSE' )
- type = 'Emphasized' ).
-
- client->popup_display( page2->stringify( ) ).
-
- ENDMETHOD.
-
-
- METHOD z2ui5_if_app~main.
-
- me->client = client.
-
- IF mv_check_initialized = abap_false.
- mv_check_initialized = abap_true.
- view_display_start( ).
- RETURN.
- ENDIF.
-
- IF client->get( )-check_on_navigated = abap_true.
- view_display_start( ).
- RETURN.
- ENDIF.
-
- z2ui5_on_event( ).
-
- ENDMETHOD.
-
-
- METHOD z2ui5_on_event.
-
- CASE client->get( )-event.
-
- WHEN `CLOSE`.
- client->popup_destroy( ).
- client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ).
-
- WHEN OTHERS.
- ENDCASE.
-
- ENDMETHOD.
-ENDCLASS.
diff --git a/src/01/04/z2ui5_cl_core_app_info.clas.testclasses.abap b/src/01/04/z2ui5_cl_core_app_info.clas.testclasses.abap
deleted file mode 100644
index 7132a26d..00000000
--- a/src/01/04/z2ui5_cl_core_app_info.clas.testclasses.abap
+++ /dev/null
@@ -1,19 +0,0 @@
-CLASS ltcl_app_startup_test DEFINITION FINAL FOR TESTING
- DURATION SHORT
- RISK LEVEL DANGEROUS.
-
- PRIVATE SECTION.
- METHODS first_test FOR TESTING RAISING cx_static_check.
-
-ENDCLASS.
-
-
-CLASS ltcl_app_startup_test IMPLEMENTATION.
-
- METHOD first_test.
-
- DATA(lo_app) = z2ui5_cl_core_app_info=>factory( ) ##NEEDED.
-
- ENDMETHOD.
-
-ENDCLASS.
diff --git a/src/01/04/package.devc.xml b/src/01/99/package.devc.xml
similarity index 85%
rename from src/01/04/package.devc.xml
rename to src/01/99/package.devc.xml
index b6e8c0ff..b1ff060b 100644
--- a/src/01/04/package.devc.xml
+++ b/src/01/99/package.devc.xml
@@ -3,7 +3,7 @@
- abap2UI5 - apps
+ abap2UI5 - app (generated)
diff --git a/src/01/99/z2ui5_cl_app__component_js.clas.abap b/src/01/99/z2ui5_cl_app__component_js.clas.abap
new file mode 100644
index 00000000..7ffee0bc
--- /dev/null
+++ b/src/01/99/z2ui5_cl_app__component_js.clas.abap
@@ -0,0 +1,86 @@
+CLASS z2ui5_cl_app__Component_js DEFINITION
+ PUBLIC
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS get
+ RETURNING
+ VALUE(result) TYPE string.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+
+
+CLASS z2ui5_cl_app__Component_js IMPLEMENTATION.
+
+ METHOD get.
+
+ result = `sap.ui.define(["sap/ui/core/UIComponent", "z2ui5/model/models",` && |\n| &&
+ ` "z2ui5/cc/DebugTool","z2ui5/cc/Server", "sap/base/Log","sap/ui/VersionInfo"` && |\n| &&
+ `` && |\n| &&
+ ` ], function (UIComponent, models, DebugTool, Server, Log, VersionInfo) {` && |\n| &&
+ ` return UIComponent.extend("z2ui5.Component", {` && |\n| &&
+ ` metadata: {` && |\n| &&
+ ` manifest: "json"` && |\n| &&
+ ` },` && |\n| &&
+ ` init: async function () {` && |\n| &&
+ `` && |\n| &&
+ ` UIComponent.prototype.init.apply(this, arguments);` && |\n| &&
+ `` && |\n| &&
+ ` this.getRouter().initialize();` && |\n| &&
+ ` z2ui5.oRouter = this.getRouter();` && |\n| &&
+ ` this.setModel(models.createDeviceModel(), "device");` && |\n| &&
+ ` this._oLogger = Log.getLogger("abap2UI5");` && |\n| &&
+ `` && |\n| &&
+ ` z2ui5.oConfig = {};` && |\n| &&
+ ` z2ui5.oConfig.ComponentData = this.getComponentData();` && |\n| &&
+ `` && |\n| &&
+ ` try {` && |\n| &&
+ ` z2ui5.oLaunchpadService = await this.getService("ShellUIService");` && |\n| &&
+ ` } catch (e) {}` && |\n| &&
+ `` && |\n| &&
+ ` let oVersionInfo = await VersionInfo.load();` && |\n| &&
+ ` z2ui5.oConfig.UI5VersionInfo = {` && |\n| &&
+ ` version : oVersionInfo.version,` && |\n| &&
+ ` buildTimestamp : oVersionInfo.buildTimestamp,` && |\n| &&
+ ` gav : oVersionInfo.gav,` && |\n| &&
+ ` }` && |\n| &&
+ `` && |\n| &&
+ ` if (/iPad|iPhone/.test(navigator.platform)) {` && |\n| &&
+ ` window.addEventListener("__pagehide", this.__pagehide.bind(this));` && |\n| &&
+ ` } else {` && |\n| &&
+ ` window.addEventListener("__beforeunload", this.__beforeunload.bind(this));` && |\n| &&
+ ` }` && |\n| &&
+ `` && |\n| &&
+ ` document.addEventListener("keydown", function (zEvent) {` && |\n| &&
+ ` if (zEvent?.key === "F12") {` && |\n| &&
+ ` new z2ui5.cc.DebugTool().show();` && |\n| &&
+ ` }` && |\n| &&
+ ` });` && |\n| &&
+ ` },` && |\n| &&
+ `` && |\n| &&
+ ` __beforeunload: function () {` && |\n| &&
+ ` window.removeEventListener("__beforeunload", this.__beforeunload.bind(this));` && |\n| &&
+ ` this.destroy();` && |\n| &&
+ ` },` && |\n| &&
+ ` __pagehide: function () {` && |\n| &&
+ ` window.removeEventListener("__pagehide", this.__pagehide.bind(this));` && |\n| &&
+ ` this.destroy();` && |\n| &&
+ ` },` && |\n| &&
+ `` && |\n| &&
+ ` exit: function () {` && |\n| &&
+ ` Server.endSession();` && |\n| &&
+ ` if (UIComponent.prototype.exit)` && |\n| &&
+ ` UIComponent.prototype.exit.apply(this, arguments);` && |\n| &&
+ ` },` && |\n| &&
+ ` });` && |\n| &&
+ `});` && |\n| &&
+ `` && |\n| &&
+ ``.
+
+ ENDMETHOD.
+
+ENDCLASS.
diff --git a/src/01/04/z2ui5_cl_core_app_error.clas.xml b/src/01/99/z2ui5_cl_app__component_js.clas.xml
similarity index 74%
rename from src/01/04/z2ui5_cl_core_app_error.clas.xml
rename to src/01/99/z2ui5_cl_app__component_js.clas.xml
index 73a6904e..856e5e5d 100644
--- a/src/01/04/z2ui5_cl_core_app_error.clas.xml
+++ b/src/01/99/z2ui5_cl_app__component_js.clas.xml
@@ -3,14 +3,13 @@
- Z2UI5_CL_CORE_APP_ERROR
+ Z2UI5_CL_APP__COMPONENT_JS
E
- abap2UI5 - app error
+ Z2UI5_CL_APP__COMPONENT_JS
1
X
X
X
- X
diff --git a/src/01/99/z2ui5_cl_app__index_html.clas.abap b/src/01/99/z2ui5_cl_app__index_html.clas.abap
new file mode 100644
index 00000000..dce57650
--- /dev/null
+++ b/src/01/99/z2ui5_cl_app__index_html.clas.abap
@@ -0,0 +1,60 @@
+CLASS z2ui5_cl_app__index_html DEFINITION
+ PUBLIC
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS get
+ RETURNING
+ VALUE(result) TYPE string.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+
+
+CLASS z2ui5_cl_app__index_html IMPLEMENTATION.
+
+ METHOD get.
+
+ result = `` &&
+ `` &&
+ `` &&
+ ` ` &&
+ ` ` &&
+ ` ` &&
+ ` ` &&
+ ` ` &&
+ ` ` &&
+ `` &&
+ `` &&
+ ` ` &&
+ `` &&
+ `` &&
+ ``.
+
+ ENDMETHOD.
+
+ENDCLASS.
diff --git a/src/01/04/z2ui5_cl_core_app_hello_w.clas.xml b/src/01/99/z2ui5_cl_app__index_html.clas.xml
similarity index 79%
rename from src/01/04/z2ui5_cl_core_app_hello_w.clas.xml
rename to src/01/99/z2ui5_cl_app__index_html.clas.xml
index bd8520ef..f127789e 100644
--- a/src/01/04/z2ui5_cl_core_app_hello_w.clas.xml
+++ b/src/01/99/z2ui5_cl_app__index_html.clas.xml
@@ -3,9 +3,9 @@
- Z2UI5_CL_CORE_APP_HELLO_W
+ Z2UI5_CL_APP__INDEX_HTML
E
- abap2UI5 - app hello world
+ Z2UI5_CL_APP__INDEX_HTML
1
X
X
diff --git a/src/01/99/z2ui5_cl_app__manifest.clas.abap b/src/01/99/z2ui5_cl_app__manifest.clas.abap
new file mode 100644
index 00000000..d2a9b90e
--- /dev/null
+++ b/src/01/99/z2ui5_cl_app__manifest.clas.abap
@@ -0,0 +1,169 @@
+CLASS z2ui5_cl_app__manifest DEFINITION
+ PUBLIC
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS get
+ RETURNING
+ VALUE(result) TYPE string.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+
+
+CLASS z2ui5_cl_app__manifest IMPLEMENTATION.
+
+ METHOD get.
+
+ result = `{` &&
+ ` "_version": "1.65.0",` &&
+ ` "sap.app": {` &&
+ ` "id": "z2ui5",` &&
+ ` "type": "application",` &&
+ ` "applicationVersion": {` &&
+ ` "version": "0.0.1"` &&
+ ` },` &&
+ ` "title": "{{appTitle}}",` &&
+ ` "description": "{{appDescription}}",` &&
+ ` "resources": "resources.json",` &&
+ ` "sourceTemplate": {` &&
+ ` "id": "@sap/generator-fiori:basic",` &&
+ ` "version": "1.15.0",` &&
+ ` "toolsId": "3a966e20-9635-4c28-8861-d1b66f79f1de"` &&
+ ` },` &&
+ ` "dataSources": {` &&
+ ` "mainService": {` &&
+ ` "uri": "_LOCAL_",` &&
+ ` "type": "OData",` &&
+ ` "settings": {` &&
+ ` "annotations": [],` &&
+ ` "localUri": "localService/metadata.xml",` &&
+ ` "odataVersion": "2.0"` &&
+ ` }` &&
+ ` }` &&
+ ` },` &&
+ ` "crossNavigation": {` &&
+ ` "inbounds": {` &&
+ ` "z2ui5-display": {` &&
+ ` "semanticObject": "z2ui5",` &&
+ ` "action": "display",` &&
+ ` "title": "{{flpTitle}}",` &&
+ ` "signature": {` &&
+ ` "parameters": {},` &&
+ ` "additionalParameters": "allowed"` &&
+ ` }` &&
+ ` }` &&
+ ` }` &&
+ ` }` &&
+ ` },` &&
+ ` "sap.ui": {` &&
+ ` "technology": "UI5",` &&
+ ` "icons": {` &&
+ ` "icon": "",` &&
+ ` "favIcon": "",` &&
+ ` "phone": "",` &&
+ ` "phone@2": "",` &&
+ ` "tablet": "",` &&
+ ` "tablet@2": ""` &&
+ ` },` &&
+ ` "deviceTypes": {` &&
+ ` "desktop": true,` &&
+ ` "tablet": true,` &&
+ ` "phone": true` &&
+ ` }` &&
+ ` },` &&
+ ` "sap.ui5": {` &&
+ ` "flexEnabled": true,` &&
+ ` "dependencies": {` &&
+ ` "minUI5Version": "1.128.1",` &&
+ ` "libs": {` &&
+ ` "sap.m": {},` &&
+ ` "sap.ui.core": {}` &&
+ ` }` &&
+ ` },` &&
+ ` "contentDensities": {` &&
+ ` "compact": true,` &&
+ ` "cozy": true` &&
+ ` },` &&
+ ` "services": {` &&
+ ` "ShellUIService": {` &&
+ ` "factoryName": "sap.ushell.ui5service.ShellUIService"` &&
+ ` }` &&
+ ` },` &&
+ ` "models": {` &&
+ ` "": {` &&
+ ` "dataSource": "mainService",` &&
+ ` "preload": true,` &&
+ ` "settings": {}` &&
+ ` }` &&
+ ` },` &&
+ ` "resources": {` &&
+ ` "css": [` &&
+ ` {` &&
+ ` "uri": "css/style.css"` &&
+ ` }` &&
+ ` ]` &&
+ ` },` &&
+ ` "routing": {` &&
+ ` "config": {` &&
+ ` "routerClass": "sap.m.routing.Router",` &&
+ ` "viewType": "XML",` &&
+ ` "async": true,` &&
+ ` "viewPath": "z2ui5.view",` &&
+ ` "controlAggregation": "pages",` &&
+ ` "controlId": "app",` &&
+ ` "clearControlAggregation": false` &&
+ ` },` &&
+ ` "routes": [` &&
+ ` {` &&
+ ` "name": "RouteView1",` &&
+ ` "pattern": ":?query:",` &&
+ ` "target": [` &&
+ ` "TargetView1"` &&
+ ` ]` &&
+ ` },` &&
+ ` {` &&
+ ` "name": "RouteView2",` &&
+ ` "pattern": ":?query:",` &&
+ ` "target": [` &&
+ ` "TargetView2"` &&
+ ` ]` &&
+ ` }` &&
+ ` ],` &&
+ ` "targets": {` &&
+ ` "TargetView1": {` &&
+ ` "viewType": "XML",` &&
+ ` "transition": "flip",` &&
+ ` "clearControlAggregation": false,` &&
+ ` "viewId": "View1",` &&
+ ` "viewName": "View1"` &&
+ ` },` &&
+ ` "TargetView2": {` &&
+ ` "viewType": "XML",` &&
+ ` "transition": "flip",` &&
+ ` "clearControlAggregation": false,` &&
+ ` "viewId": "View2",` &&
+ ` "viewName": "View2"` &&
+ ` }` &&
+ ` }` &&
+ ` },` &&
+ ` "rootView": {` &&
+ ` "viewName": "z2ui5.view.App",` &&
+ ` "type": "XML",` &&
+ ` "async": true,` &&
+ ` "id": "App"` &&
+ ` }` &&
+ ` },` &&
+ ` "sap.cloud": {` &&
+ ` "public": true,` &&
+ ` "service": "z2ui5"` &&
+ ` }` &&
+ `}` &&
+ ``.
+
+ ENDMETHOD.
+
+ENDCLASS.
diff --git a/src/01/04/z2ui5_cl_core_app_info.clas.xml b/src/01/99/z2ui5_cl_app__manifest.clas.xml
similarity index 73%
rename from src/01/04/z2ui5_cl_core_app_info.clas.xml
rename to src/01/99/z2ui5_cl_app__manifest.clas.xml
index c7b53013..e64e26fd 100644
--- a/src/01/04/z2ui5_cl_core_app_info.clas.xml
+++ b/src/01/99/z2ui5_cl_app__manifest.clas.xml
@@ -3,14 +3,13 @@
- Z2UI5_CL_CORE_APP_INFO
+ Z2UI5_CL_APP__MANIFEST
E
- abap2UI5 - app system info
+ Z2UI5_CL_APP__MANIFEST_JSON
1
X
X
X
- X
diff --git a/src/01/99/z2ui5_cl_app_cc_dbgtl_js.clas.abap b/src/01/99/z2ui5_cl_app_cc_dbgtl_js.clas.abap
new file mode 100644
index 00000000..b5204b40
--- /dev/null
+++ b/src/01/99/z2ui5_cl_app_cc_dbgtl_js.clas.abap
@@ -0,0 +1,156 @@
+CLASS z2ui5_cl_app_cc_dbgtl_js DEFINITION
+ PUBLIC
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS get
+ RETURNING
+ VALUE(result) TYPE string.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+
+
+CLASS z2ui5_cl_app_cc_dbgtl_js IMPLEMENTATION.
+
+ METHOD get.
+
+ result = `sap.ui.define(["sap/ui/core/Control", "sap/ui/core/Fragment", "sap/ui/model/json/JSONModel"], (Control, Fragment, JSONModel) => {` && |\n| &&
+ ` "use strict";` && |\n| &&
+ `` && |\n| &&
+ ` return Control.extend("z2ui5.cc.DebugTool", {` && |\n| &&
+ `` && |\n| &&
+ ` prettifyXml: function (sourceXml) {` && |\n| &&
+ ` const xmlDoc = new DOMParser().parseFromString(sourceXml, 'application/xml');` && |\n| &&
+ ` const xsltDoc = new DOMParser().parseFromString(sParse, 'application/xml');` && |\n| &&
+ `` && |\n| &&
+ ` const xsltProcessor = new XSLTProcessor();` && |\n| &&
+ ` xsltProcessor.importStylesheet(xsltDoc);` && |\n| &&
+ ` const resultDoc = xsltProcessor.transformToDocument(xmlDoc);` && |\n| &&
+ ` const resultXml = new XMLSerializer().serializeToString(resultDoc);` && |\n| &&
+ ` return resultXml.replace(/>/g, ">");` && |\n| &&
+ ` },` && |\n| &&
+ `` && |\n| &&
+ ` onItemSelect: function (oEvent) {` && |\n| &&
+ ` const selItem = oEvent.getSource().getSelectedKey();` && |\n| &&
+ ` const oView = z2ui5?.oView;` && |\n| &&
+ ` const oResponse = z2ui5?.oResponse;` && |\n| &&
+ ` const displayEditor = this.displayEditor.bind(this);` && |\n| &&
+ `` && |\n| &&
+ ` switch (selItem) {` && |\n| &&
+ ` case 'CONFIG':` && |\n| &&
+ ` displayEditor(oEvent, JSON.stringify(z2ui5.oConfig, null, 3), 'json');` && |\n| &&
+ ` break;` && |\n| &&
+ ` case 'MODEL':` && |\n| &&
+ ` displayEditor(oEvent, JSON.stringify(oView?.getModel()?.getData(), null, 3), 'json');` && |\n| &&
+ ` break;` && |\n| &&
+ ` case 'VIEW':` && |\n| &&
+ ` const viewContent = oView?.mProperties?.viewContent || z2ui5.responseData.S_FRONT.PARAMS.S_VIEW.XML;` && |\n| &&
+ ` displayEditor(oEvent, this.prettifyXml(viewContent), 'xml', this.prettifyXml(oView?._xContent.outerHTML));` && |\n| &&
+ ` break;` && |\n| &&
+ ` case 'PLAIN':` && |\n| &&
+ ` displayEditor(oEvent, JSON.stringify(z2ui5.responseData, null, 3), 'json');` && |\n| &&
+ ` break;` && |\n| &&
+ ` case 'REQUEST':` && |\n| &&
+ ` displayEditor(oEvent, JSON.stringify(z2ui5.oBody, null, 3), 'json');` && |\n| &&
+ ` break;` && |\n| &&
+ ` case 'POPUP':` && |\n| &&
+ ` displayEditor(oEvent, this.prettifyXml(oResponse?.PARAMS?.S_POPUP?.XML), 'xml');` && |\n| &&
+ ` break;` && |\n| &&
+ ` case 'POPUP_MODEL':` && |\n| &&
+ ` displayEditor(oEvent, JSON.stringify(z2ui5.oViewPopup.getModel().getData(), null, 3), 'json');` && |\n| &&
+ ` break;` && |\n| &&
+ ` case 'POPOVER':` && |\n| &&
+ ` displayEditor(oEvent, oResponse?.PARAMS?.S_POPOVER?.XML, 'xml');` && |\n| &&
+ ` break;` && |\n| &&
+ ` case 'POPOVER_MODEL':` && |\n| &&
+ ` displayEditor(oEvent, JSON.stringify(z2ui5?.oViewPopover?.getModel()?.getData(), null, 3), 'json');` && |\n| &&
+ ` break;` && |\n| &&
+ ` case 'NEST1':` && |\n| &&
+ ` displayEditor(oEvent, this.prettifyXml(z2ui5?.oViewNest?.mProperties?.viewContent), 'xml', this.prettifyXml(z2ui5?.oViewNest?._xContent.outerHTML));` && |\n| &&
+ ` break;` && |\n| &&
+ ` case 'NEST1_MODEL':` && |\n| &&
+ ` displayEditor(oEvent, JSON.stringify(z2ui5?.oViewNest?.getModel()?.getData(), null, 3), 'json');` && |\n| &&
+ ` break;` && |\n| &&
+ ` case 'NEST2':` && |\n| &&
+ ` displayEditor(oEvent, this.prettifyXml(z2ui5?.oViewNest2?.mProperties?.viewContent), 'xml', this.prettifyXml(z2ui5?.oViewNest2?._xContent.outerHTML));` && |\n| &&
+ ` break;` && |\n| &&
+ ` case 'NEST2_MODEL':` && |\n| &&
+ ` displayEditor(oEvent, JSON.stringify(z2ui5?.oViewNest2?.getModel()?.getData(), null, 3), 'json');` && |\n| &&
+ ` break;` && |\n| &&
+ ` case 'SOURCE':` && |\n| &&
+ ` const parent = oEvent.getSource().getParent();` && |\n| &&
+ ` const contentControl = parent.getContent()[2].getItems()[0];` && |\n| &&
+ ` const url = ``${window.location.origin}/sap/bc/adt/oo/classes/${z2ui5.responseData.S_FRONT.APP}/source/main``;` && |\n| &&
+ ` const content = atob('PGlmcmFtZSBpZD0idGVzdCIgc3JjPSInICsgdXJsICsgJyIgaGVpZ2h0PSI4MDBweCIgd2lkdGg9IjEyMDBweCIgLz4=').replace("' + url + '", url);` && |\n| &&
+ ` contentControl.setProperty("content", content);` && |\n| &&
+ ` const modelData = oEvent.getSource().getModel().oData;` && |\n| &&
+ ` modelData.editor_visible = false;` && |\n| &&
+ ` modelData.source_visible = true;` && |\n| &&
+ ` oEvent.getSource().getModel().refresh();` && |\n| &&
+ ` break;` && |\n| &&
+ ` }` && |\n| &&
+ ` },` && |\n| &&
+ `` && |\n| &&
+ ` displayEditor: function (oEvent, content, type, xcontent = "") {` && |\n| &&
+ ` const modelData = oEvent.getSource().getModel().oData;` && |\n| &&
+ ` modelData.editor_visible = true;` && |\n| &&
+ ` modelData.source_visible = false;` && |\n| &&
+ ` modelData.isTemplating = content.includes("xmlns:template");` && |\n| &&
+ ` modelData.value = content;` && |\n| &&
+ ` modelData.previousValue = content;` && |\n| &&
+ ` modelData.xContent = xcontent;` && |\n| &&
+ ` modelData.type = type;` && |\n| &&
+ ` oEvent.getSource().getModel().refresh();` && |\n| &&
+ ` },` && |\n| &&
+ `` && |\n| &&
+ ` onTemplatingPress: function (oEvent) {` && |\n| &&
+ ` const modelData = oEvent.getSource().getModel().oData;` && |\n| &&
+ ` modelData.value = oEvent.getSource().getPressed() ? modelData.xContent : modelData.previousValue;` && |\n| &&
+ ` oEvent.getSource().getModel().refresh();` && |\n| &&
+ ` },` && |\n| &&
+ `` && |\n| &&
+ ` onClose: function () {` && |\n| &&
+ ` this.oDialog.close();` && |\n| &&
+ ` },` && |\n| &&
+ `` && |\n| &&
+ ` async show() {` && |\n| &&
+ ` if (!this.oDialog) {` && |\n| &&
+ ` this.oDialog = await Fragment.load({` && |\n| &&
+ ` name: "z2ui5.cc.DebugTool",` && |\n| &&
+ ` controller: this,` && |\n| &&
+ ` });` && |\n| &&
+ ` }` && |\n| &&
+ `` && |\n| &&
+ ` const value = JSON.stringify(z2ui5.responseData, null, 3);` && |\n| &&
+ ` const oData = {` && |\n| &&
+ ` type: 'json',` && |\n| &&
+ ` source_visible: false,` && |\n| &&
+ ` editor_visible: true,` && |\n| &&
+ ` value: value,` && |\n| &&
+ ` xContent: '',` && |\n| &&
+ ` previousValue: value,` && |\n| &&
+ ` isTemplating: false,` && |\n| &&
+ ` templatingSource: false,` && |\n| &&
+ ` activeNest1: z2ui5?.oViewNest?.mProperties?.viewContent !== undefined,` && |\n| &&
+ ` activeNest2: z2ui5?.oViewNest2?.mProperties?.viewContent !== undefined,` && |\n| &&
+ ` activePopup: z2ui5?.oResponse?.PARAMS?.S_POPUP?.XML !== undefined,` && |\n| &&
+ ` activePopover: z2ui5?.oResponse?.PARAMS?.S_POPOVER?.XML !== undefined,` && |\n| &&
+ ` };` && |\n| &&
+ ` const oModel = new JSONModel(oData);` && |\n| &&
+ `` && |\n| &&
+ ` this.oDialog.addStyleClass('dbg-ltr');` && |\n| &&
+ ` this.oDialog.setModel(oModel);` && |\n| &&
+ ` this.oDialog.open();` && |\n| &&
+ ` }` && |\n| &&
+ ` });` && |\n| &&
+ `});` && |\n| &&
+ `` && |\n| &&
+ ``.
+
+ ENDMETHOD.
+
+ENDCLASS.
diff --git a/src/01/99/z2ui5_cl_app_cc_dbgtl_js.clas.xml b/src/01/99/z2ui5_cl_app_cc_dbgtl_js.clas.xml
new file mode 100644
index 00000000..a3abf47f
--- /dev/null
+++ b/src/01/99/z2ui5_cl_app_cc_dbgtl_js.clas.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+ Z2UI5_CL_APP_CC_DBGTL_JS
+ E
+ Z2UI5_CL_APP_CC_DEBUGTOOL_JS
+ 1
+ X
+ X
+ X
+
+
+
+
diff --git a/src/01/99/z2ui5_cl_app_cc_dbgtl_xml.clas.abap b/src/01/99/z2ui5_cl_app_cc_dbgtl_xml.clas.abap
new file mode 100644
index 00000000..1ec99cbb
--- /dev/null
+++ b/src/01/99/z2ui5_cl_app_cc_dbgtl_xml.clas.abap
@@ -0,0 +1,130 @@
+CLASS z2ui5_cl_app_cc_dbgtl_xml DEFINITION
+ PUBLIC
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS get
+ RETURNING
+ VALUE(result) TYPE string.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+
+
+CLASS z2ui5_cl_app_cc_dbgtl_xml IMPLEMENTATION.
+
+ METHOD get.
+
+ result = `` &&
+ ` ` &&
+ `` &&
+ `` &&
+ ``.
+
+ ENDMETHOD.
+
+ENDCLASS.
diff --git a/src/01/99/z2ui5_cl_app_cc_dbgtl_xml.clas.xml b/src/01/99/z2ui5_cl_app_cc_dbgtl_xml.clas.xml
new file mode 100644
index 00000000..f691b018
--- /dev/null
+++ b/src/01/99/z2ui5_cl_app_cc_dbgtl_xml.clas.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+ Z2UI5_CL_APP_CC_DBGTL_XML
+ E
+ Z2UI5_CL_APP_CC_DEBUGTOOL_XML
+ 1
+ X
+ X
+ X
+
+
+
+
diff --git a/src/01/99/z2ui5_cl_app_cc_server_js.clas.abap b/src/01/99/z2ui5_cl_app_cc_server_js.clas.abap
new file mode 100644
index 00000000..12c5bd7f
--- /dev/null
+++ b/src/01/99/z2ui5_cl_app_cc_server_js.clas.abap
@@ -0,0 +1,172 @@
+CLASS z2ui5_cl_app_cc_Server_js DEFINITION
+ PUBLIC
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS get
+ RETURNING
+ VALUE(result) TYPE string.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+
+
+CLASS z2ui5_cl_app_cc_Server_js IMPLEMENTATION.
+
+ METHOD get.
+
+ result = `sap.ui.define(["sap/ui/core/BusyIndicator","sap/m/MessageBox"` && |\n| &&
+ `],` && |\n| &&
+ ` function (BusyIndicator, MessageBox) {` && |\n| &&
+ ` "use strict";` && |\n| &&
+ `` && |\n| &&
+ ` return {` && |\n| &&
+ `` && |\n| &&
+ ` endSession: function () {` && |\n| &&
+ `` && |\n| &&
+ ` if (z2ui5.contextId) {` && |\n| &&
+ ` fetch(z2ui5.oConfig.pathname, {` && |\n| &&
+ ` method: 'HEAD',` && |\n| &&
+ ` keepalive: true,` && |\n| &&
+ ` headers: {` && |\n| &&
+ ` 'sap-terminate': 'session',` && |\n| &&
+ ` 'sap-contextid': z2ui5.contextId,` && |\n| &&
+ ` 'sap-contextid-accept': 'header'` && |\n| &&
+ ` }` && |\n| &&
+ ` });` && |\n| &&
+ ` delete z2ui5.contextId;` && |\n| &&
+ ` }` && |\n| &&
+ `` && |\n| &&
+ ` },` && |\n| &&
+ ` Roundtrip() {` && |\n| &&
+ ` z2ui5.checkTimerActive = false;` && |\n| &&
+ ` z2ui5.checkNestAfter = false;` && |\n| &&
+ ` z2ui5.checkNestAfter2 = false;` && |\n| &&
+ ` let event = (args) => {` && |\n| &&
+ ` if (args != undefined) {` && |\n| &&
+ ` return args[0][0];` && |\n| &&
+ ` }` && |\n| &&
+ ` };` && |\n| &&
+ `` && |\n| &&
+ ` z2ui5.oBody ??= {};` && |\n| &&
+ ` z2ui5.oBody.S_FRONT = {` && |\n| &&
+ ` ID: z2ui5?.oBody?.ID,` && |\n| &&
+ ` CONFIG: z2ui5.oConfig,` && |\n| &&
+ ` XX: z2ui5?.oBody?.XX,` && |\n| &&
+ ` ORIGIN: window.location.origin,` && |\n| &&
+ ` PATHNAME: window.location.pathname,` && |\n| &&
+ ` SEARCH: (z2ui5.search) ? z2ui5.search : window.location.search,` && |\n| &&
+ ` VIEW: z2ui5.oBody?.VIEWNAME,` && |\n| &&
+ ` EVENT: event(z2ui5.oBody?.ARGUMENTS),` && |\n| &&
+ ` HASH: window.location.hash,` && |\n| &&
+ ` };` && |\n| &&
+ ` if (z2ui5.oBody?.ARGUMENTS != undefined) {` && |\n| &&
+ ` if (z2ui5.oBody?.ARGUMENTS.length > 0) {` && |\n| &&
+ ` z2ui5.oBody?.ARGUMENTS.shift();` && |\n| &&
+ ` }` && |\n| &&
+ ` }` && |\n| &&
+ ` z2ui5.oBody.S_FRONT.T_EVENT_ARG = z2ui5.oBody?.ARGUMENTS;` && |\n| &&
+ ` delete z2ui5.oBody.ID;` && |\n| &&
+ ` delete z2ui5.oBody?.VIEWNAME;` && |\n| &&
+ ` delete z2ui5.oBody?.S_FRONT.XX;` && |\n| &&
+ ` delete z2ui5.oBody?.ARGUMENTS;` && |\n| &&
+ ` if (!z2ui5.oBody.S_FRONT.T_EVENT_ARG) {` && |\n| &&
+ ` delete z2ui5.oBody.S_FRONT.T_EVENT_ARG;` && |\n| &&
+ ` }` && |\n| &&
+ ` if (z2ui5.oBody.S_FRONT.T_EVENT_ARG) {` && |\n| &&
+ ` if (z2ui5.oBody.S_FRONT.T_EVENT_ARG.length == 0) {` && |\n| &&
+ ` delete z2ui5.oBody.S_FRONT.T_EVENT_ARG;` && |\n| &&
+ ` }` && |\n| &&
+ ` }` && |\n| &&
+ ` if (z2ui5.oBody.S_FRONT.T_STARTUP_PARAMETERS == undefined) {` && |\n| &&
+ ` delete z2ui5.oBody.S_FRONT.T_STARTUP_PARAMETERS;` && |\n| &&
+ ` }` && |\n| &&
+ ` if (z2ui5.oBody.S_FRONT.SEARCH == '') {` && |\n| &&
+ ` delete z2ui5.oBody.S_FRONT.SEARCH;` && |\n| &&
+ ` }` && |\n| &&
+ ` if (!z2ui5.oBody.XX) {` && |\n| &&
+ ` delete z2ui5.oBody.XX;` && |\n| &&
+ ` }` && |\n| &&
+ ` this.readHttp();` && |\n| &&
+ ` },` && |\n| &&
+ `` && |\n| &&
+ ` async readHttp() {` && |\n| &&
+ ` const response = await fetch(z2ui5.oConfig.pathname, {` && |\n| &&
+ ` method: 'POST',` && |\n| &&
+ ` headers: {` && |\n| &&
+ ` 'Content-Type': 'application/json',` && |\n| &&
+ ` 'sap-contextid-accept': 'header',` && |\n| &&
+ ` 'sap-contextid': z2ui5.contextId` && |\n| &&
+ ` },` && |\n| &&
+ ` body: JSON.stringify(z2ui5.oBody)` && |\n| &&
+ ` });` && |\n| &&
+ ` z2ui5.contextId = response.headers.get("sap-contextid");` && |\n| &&
+ ` if (!response.ok) {` && |\n| &&
+ ` const responseText = await response.text();` && |\n| &&
+ ` this.responseError(responseText);` && |\n| &&
+ ` } else {` && |\n| &&
+ ` const responseData = await response.json();` && |\n| &&
+ ` z2ui5.responseData = responseData;` && |\n| &&
+ ` this.responseSuccess({` && |\n| &&
+ ` ID: responseData.S_FRONT.ID,` && |\n| &&
+ ` PARAMS: responseData.S_FRONT.PARAMS,` && |\n| &&
+ ` OVIEWMODEL: responseData.MODEL,` && |\n| &&
+ ` });` && |\n| &&
+ ` }` && |\n| &&
+ ` },` && |\n| &&
+ ` async responseSuccess(response) {` && |\n| &&
+ ` try {` && |\n| &&
+ ` z2ui5.oResponse = response;` && |\n| &&
+ ` if (z2ui5.oResponse.PARAMS?.S_VIEW?.CHECK_DESTROY) {` && |\n| &&
+ ` z2ui5.oController.ViewDestroy();` && |\n| &&
+ ` }` && |\n| &&
+ ` ; if (z2ui5.oResponse.PARAMS?.S_FOLLOW_UP_ACTION?.CUSTOM_JS) {` && |\n| &&
+ ` setTimeout(() => {` && |\n| &&
+ ` let mParams = z2ui5.oResponse?.PARAMS.S_FOLLOW_UP_ACTION.CUSTOM_JS.split("'");` && |\n| &&
+ ` let mParamsEF = mParams.filter((val, index) => index % 2)` && |\n| &&
+ ` if (mParamsEF.length) {` && |\n| &&
+ ` z2ui5.oController.eF.apply(undefined, mParamsEF);` && |\n| &&
+ ` } else {` && |\n| &&
+ ` Function("return " + mParams[0])();` && |\n| &&
+ ` }` && |\n| &&
+ ` }, 100);` && |\n| &&
+ ` };` && |\n| &&
+ ` z2ui5.oController.showMessage('S_MSG_TOAST', z2ui5.oResponse.PARAMS);` && |\n| &&
+ ` z2ui5.oController.showMessage('S_MSG_BOX', z2ui5.oResponse.PARAMS);` && |\n| &&
+ ` if (z2ui5.oResponse.PARAMS?.S_VIEW?.XML) {` && |\n| &&
+ ` if (z2ui5.oResponse.PARAMS?.S_VIEW?.XML !== '') {` && |\n| &&
+ ` z2ui5.oController.ViewDestroy();` && |\n| &&
+ ` await z2ui5.oController.displayView(z2ui5.oResponse.PARAMS.S_VIEW.XML, z2ui5.oResponse.OVIEWMODEL);` && |\n| &&
+ ` return;` && |\n| &&
+ ` }` && |\n| &&
+ ` }` && |\n| &&
+ ` z2ui5.oController.updateModelIfRequired('S_VIEW', z2ui5.oView);` && |\n| &&
+ ` z2ui5.oController.updateModelIfRequired('S_VIEW_NEST', z2ui5.oViewNest);` && |\n| &&
+ ` z2ui5.oController.updateModelIfRequired('S_VIEW_NEST2', z2ui5.oViewNest2);` && |\n| &&
+ ` z2ui5.oController.updateModelIfRequired('S_POPUP', z2ui5.oViewPopup);` && |\n| &&
+ ` z2ui5.oController.updateModelIfRequired('S_POPOVER', z2ui5.oViewPopover);` && |\n| &&
+ ` z2ui5.oController.onAfterRendering();` && |\n| &&
+ ` } catch (e) {` && |\n| &&
+ ` BusyIndicator.hide();` && |\n| &&
+ ` if (e.message.includes("openui5")) {` && |\n| &&
+ ` if (e.message.includes("script load error")) {` && |\n| &&
+ ` z2ui5.oController.checkSDKcompatibility(e)` && |\n| &&
+ ` }` && |\n| &&
+ ` } else {` && |\n| &&
+ ` MessageBox.error(e.toLocaleString());` && |\n| &&
+ ` }` && |\n| &&
+ ` }` && |\n| &&
+ ` },` && |\n| &&
+ ` responseError(response) {` && |\n| &&
+ ` document.write(response);` && |\n| &&
+ ` },` && |\n| &&
+ ` };` && |\n| &&
+ ` });` && |\n| &&
+ ``.
+
+ ENDMETHOD.
+
+ENDCLASS.
diff --git a/src/01/99/z2ui5_cl_app_cc_server_js.clas.xml b/src/01/99/z2ui5_cl_app_cc_server_js.clas.xml
new file mode 100644
index 00000000..302c40cb
--- /dev/null
+++ b/src/01/99/z2ui5_cl_app_cc_server_js.clas.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+ Z2UI5_CL_APP_CC_SERVER_JS
+ E
+ Z2UI5_CL_APP_CC_SERVER_JS
+ 1
+ X
+ X
+ X
+
+
+
+
diff --git a/src/01/99/z2ui5_cl_app_cont_app_js.clas.abap b/src/01/99/z2ui5_cl_app_cont_app_js.clas.abap
new file mode 100644
index 00000000..4be6425a
--- /dev/null
+++ b/src/01/99/z2ui5_cl_app_cont_app_js.clas.abap
@@ -0,0 +1,805 @@
+CLASS z2ui5_cl_app_cont_App_js DEFINITION
+ PUBLIC
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS get
+ RETURNING
+ VALUE(result) TYPE string.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+
+
+CLASS z2ui5_cl_app_cont_App_js IMPLEMENTATION.
+
+ METHOD get.
+
+ result = `sap.ui.define(["sap/ui/core/mvc/Controller",` && |\n| &&
+ ` "z2ui5/controller/View1.controller",` && |\n| &&
+ `], function (BaseController, Controller) {` && |\n| &&
+ ` return BaseController.extend("z2ui5.controller.App", {` && |\n| &&
+ `` && |\n| &&
+ ` onInit: async function () {` && |\n| &&
+ `` && |\n| &&
+ ` z2ui5.oConfig.pathname = this.getView().getModel().sServiceUrl;` && |\n| &&
+ ` if (z2ui5.oConfig.pathname == '_LOCAL_') {` && |\n| &&
+ ` z2ui5.oConfig.pathname = window.location.href;` && |\n| &&
+ ` };` && |\n| &&
+ `` && |\n| &&
+ ` z2ui5.oController = new Controller();` && |\n| &&
+ ` z2ui5.oController.setApp(this.getView().byId("app"));` && |\n| &&
+ `` && |\n| &&
+ ` z2ui5.oControllerNest = new Controller();` && |\n| &&
+ ` z2ui5.oControllerNest2 = new Controller();` && |\n| &&
+ ` z2ui5.oControllerPopup = new Controller();` && |\n| &&
+ ` z2ui5.oControllerPopover = new Controller();` && |\n| &&
+ `` && |\n| &&
+ ` z2ui5.onBeforeRoundtrip = [];` && |\n| &&
+ ` z2ui5.onAfterRendering = [];` && |\n| &&
+ ` z2ui5.onBeforeEventFrontend = [];` && |\n| &&
+ ` z2ui5.onAfterRoundtrip = [];` && |\n| &&
+ `` && |\n| &&
+ ` z2ui5.checkNestAfter = false;` && |\n| &&
+ `` && |\n| &&
+ ` }` && |\n| &&
+ ` });` && |\n| &&
+ `});` && |\n| &&
+ `` && |\n| &&
+ `` && |\n| &&
+ `sap.ui.define("z2ui5/Timer", ["sap/ui/core/Control"], (Control) => {` && |\n| &&
+ ` "use strict";` && |\n| &&
+ `` && |\n| &&
+ ` return Control.extend("z2ui5.Timer", {` && |\n| &&
+ ` metadata: {` && |\n| &&
+ ` properties: {` && |\n| &&
+ ` delayMS: {` && |\n| &&
+ ` type: "string",` && |\n| &&
+ ` defaultValue: ""` && |\n| &&
+ ` },` && |\n| &&
+ ` checkActive: {` && |\n| &&
+ ` type: "boolean",` && |\n| &&
+ ` defaultValue: true` && |\n| &&
+ ` },` && |\n| &&
+ ` checkRepeat: {` && |\n| &&
+ ` type: "boolean",` && |\n| &&
+ ` defaultValue: false` && |\n| &&
+ ` },` && |\n| &&
+ ` },` && |\n| &&
+ ` events: {` && |\n| &&
+ ` "finished": {` && |\n| &&
+ ` allowPreventDefault: true,` && |\n| &&
+ ` parameters: {},` && |\n| &&
+ ` }` && |\n| &&
+ ` }` && |\n| &&
+ ` },` && |\n| &&
+ ` onAfterRendering() { },` && |\n| &&
+ ` delayedCall(oControl) {` && |\n| &&
+ `` && |\n| &&
+ ` if (oControl.getProperty("checkActive") == false) {` && |\n| &&
+ ` return;` && |\n| &&
+ ` }` && |\n| &&
+ ` setTimeout((oControl) => {` && |\n| &&
+ ` oControl.setProperty("checkActive", false)` && |\n| &&
+ ` oControl.fireFinished();` && |\n| &&
+ ` if (oControl.getProperty("checkRepeat")) {` && |\n| &&
+ ` oControl.delayedCall(oControl);` && |\n| &&
+ ` }` && |\n| &&
+ ` }` && |\n| &&
+ ` , parseInt(oControl.getProperty("delayMS")), oControl);` && |\n| &&
+ ` },` && |\n| &&
+ ` renderer(oRm, oControl) {` && |\n| &&
+ ` oControl.delayedCall(oControl);` && |\n| &&
+ ` }` && |\n| &&
+ ` });` && |\n| &&
+ `}` && |\n| &&
+ `);` && |\n| &&
+ `` && |\n| &&
+ `sap.ui.define("z2ui5/Focus", ["sap/ui/core/Control",], (Control) => {` && |\n| &&
+ ` "use strict";` && |\n| &&
+ ` return Control.extend("z2ui5.Focus", {` && |\n| &&
+ ` metadata: {` && |\n| &&
+ ` properties: {` && |\n| &&
+ ` setUpdate: {` && |\n| &&
+ ` type: "boolean",` && |\n| &&
+ ` defaultValue: true` && |\n| &&
+ ` },` && |\n| &&
+ ` focusId: {` && |\n| &&
+ ` type: "string"` && |\n| &&
+ ` },` && |\n| &&
+ ` selectionStart: {` && |\n| &&
+ ` type: "string",` && |\n| &&
+ ` defaultValue: "0"` && |\n| &&
+ ` },` && |\n| &&
+ ` selectionEnd: {` && |\n| &&
+ ` type: "string",` && |\n| &&
+ ` defaultValue: "0"` && |\n| &&
+ ` },` && |\n| &&
+ ` }` && |\n| &&
+ ` },` && |\n| &&
+ ` init() { },` && |\n| &&
+ ` setFocusId(val) {` && |\n| &&
+ ` try {` && |\n| &&
+ ` this.setProperty("focusId", val);` && |\n| &&
+ ` var oElement = z2ui5.oView.byId(val);` && |\n| &&
+ ` var oFocus = oElement.getFocusInfo();` && |\n| &&
+ ` oElement.applyFocusInfo(oFocus);` && |\n| &&
+ ` } catch (e) { }` && |\n| &&
+ ` },` && |\n| &&
+ ` renderer(oRm, oControl) {` && |\n| &&
+ ` if (!oControl.getProperty("setUpdate")) {` && |\n| &&
+ ` return;` && |\n| &&
+ ` }` && |\n| &&
+ ` oControl.setProperty("setUpdate", false);` && |\n| &&
+ ` setTimeout((oControl) => {` && |\n| &&
+ ` var oElement = z2ui5.oView.byId(oControl.getProperty("focusId"));` && |\n| &&
+ ` var oFocus = oElement.getFocusInfo();` && |\n| &&
+ ` oFocus.selectionStart = parseInt(oControl.getProperty("selectionStart"));` && |\n| &&
+ ` oFocus.selectionEnd = parseInt(oControl.getProperty("selectionEnd"));` && |\n| &&
+ ` oElement.applyFocusInfo(oFocus);` && |\n| &&
+ ` }` && |\n| &&
+ ` , 100, oControl);` && |\n| &&
+ ` }` && |\n| &&
+ ` });` && |\n| &&
+ `}` && |\n| &&
+ `);` && |\n| &&
+ `` && |\n| &&
+ `sap.ui.define("z2ui5/Title", ["sap/ui/core/Control"], (Control) => {` && |\n| &&
+ ` "use strict";` && |\n| &&
+ ` return Control.extend("z2ui5.Title", {` && |\n| &&
+ ` metadata: {` && |\n| &&
+ ` properties: {` && |\n| &&
+ ` title: {` && |\n| &&
+ ` type: "string"` && |\n| &&
+ ` },` && |\n| &&
+ ` }` && |\n| &&
+ ` },` && |\n| &&
+ ` setTitle(val) {` && |\n| &&
+ ` this.setProperty("title", val);` && |\n| &&
+ ` document.title = val;` && |\n| &&
+ ` },` && |\n| &&
+ ` renderer(oRm, oControl) { }` && |\n| &&
+ ` });` && |\n| &&
+ `}` && |\n| &&
+ `);` && |\n| &&
+ `sap.ui.define("z2ui5/LPTitle", ["sap/ui/core/Control"], (Control) => {` && |\n| &&
+ ` "use strict";` && |\n| &&
+ ` return Control.extend("z2ui5.LPTitle", {` && |\n| &&
+ ` metadata: {` && |\n| &&
+ ` properties: {` && |\n| &&
+ ` title: {` && |\n| &&
+ ` type: "string"` && |\n| &&
+ ` },` && |\n| &&
+ ` }` && |\n| &&
+ ` },` && |\n| &&
+ ` setTitle(val) {` && |\n| &&
+ ` try {` && |\n| &&
+ ` this.setProperty("title", val);` && |\n| &&
+ ` z2ui5.oLaunchpadService.setTitle(val);` && |\n| &&
+ ` } catch (e) {` && |\n| &&
+ ` console.error("Launchpad Service to set Title not found");` && |\n| &&
+ ` }` && |\n| &&
+ ` },` && |\n| &&
+ ` renderer(oRm, oControl) { }` && |\n| &&
+ ` });` && |\n| &&
+ `}` && |\n| &&
+ `);` && |\n| &&
+ `sap.ui.define("z2ui5/History", ["sap/ui/core/Control"], (Control) => {` && |\n| &&
+ ` "use strict";` && |\n| &&
+ ` return Control.extend("z2ui5.History", {` && |\n| &&
+ ` metadata: {` && |\n| &&
+ ` properties: {` && |\n| &&
+ ` search: {` && |\n| &&
+ ` type: "string"` && |\n| &&
+ ` },` && |\n| &&
+ ` }` && |\n| &&
+ ` },` && |\n| &&
+ ` setSearch(val) {` && |\n| &&
+ ` this.setProperty("search", val);` && |\n| &&
+ ` history.replaceState(null, null, window.location.pathname + val);` && |\n| &&
+ ` },` && |\n| &&
+ ` renderer(oRm, oControl) { }` && |\n| &&
+ ` });` && |\n| &&
+ `}` && |\n| &&
+ `);` && |\n| &&
+ `sap.ui.define("z2ui5/Scrolling", ["sap/ui/core/Control"], (Control) => {` && |\n| &&
+ ` "use strict";` && |\n| &&
+ `` && |\n| &&
+ ` return Control.extend("z2ui5.Scrolling", {` && |\n| &&
+ ` metadata: {` && |\n| &&
+ ` properties: {` && |\n| &&
+ ` setUpdate: {` && |\n| &&
+ ` type: "boolean",` && |\n| &&
+ ` defaultValue: true` && |\n| &&
+ ` },` && |\n| &&
+ ` items: {` && |\n| &&
+ ` type: "Array"` && |\n| &&
+ ` }` && |\n| &&
+ ` }` && |\n| &&
+ ` },` && |\n| &&
+ `` && |\n| &&
+ ` setBackend() {` && |\n| &&
+ ` const items = this.getProperty("items");` && |\n| &&
+ `` && |\n| &&
+ ` if (items) {` && |\n| &&
+ ` items.forEach(item => {` && |\n| &&
+ ` try {` && |\n| &&
+ ` const scrollDelegate = z2ui5.oView.byId(item.ID).getScrollDelegate();` && |\n| &&
+ ` item.SCROLLTO = scrollDelegate ? scrollDelegate.getScrollTop() : 0;` && |\n| &&
+ ` } catch {` && |\n| &&
+ ` try {` && |\n| &&
+ ` const element = document.getElementById(``${z2ui5.oView.byId(item.ID).getId()}-inner``);` && |\n| &&
+ ` item.SCROLLTO = element ? element.scrollTop : 0;` && |\n| &&
+ ` } catch {}` && |\n| &&
+ ` }` && |\n| &&
+ ` });` && |\n| &&
+ ` }` && |\n| &&
+ ` },` && |\n| &&
+ `` && |\n| &&
+ ` init() {` && |\n| &&
+ ` z2ui5.onBeforeRoundtrip.push(this.setBackend.bind(this));` && |\n| &&
+ ` },` && |\n| &&
+ `` && |\n| &&
+ ` renderer(oRm, oControl) {` && |\n| &&
+ ` if (!oControl.getProperty("setUpdate")) return;` && |\n| &&
+ `` && |\n| &&
+ ` oControl.setProperty("setUpdate", false);` && |\n| &&
+ ` const items = oControl.getProperty("items");` && |\n| &&
+ ` if (!items) return;` && |\n| &&
+ `` && |\n| &&
+ ` setTimeout(() => {` && |\n| &&
+ ` items.forEach(item => {` && |\n| &&
+ ` try {` && |\n| &&
+ ` z2ui5.oView.byId(item.ID).scrollTo(item.SCROLLTO);` && |\n| &&
+ ` } catch {` && |\n| &&
+ ` try {` && |\n| &&
+ ` const element = document.getElementById(``${z2ui5.oView.byId(item.ID).getId()}-inner``);` && |\n| &&
+ ` if (element) element.scrollTop = item.SCROLLTO;` && |\n| &&
+ ` } catch {` && |\n| &&
+ ` setTimeout(() => {` && |\n| &&
+ ` z2ui5.oView.byId(item.ID).scrollTo(item.SCROLLTO);` && |\n| &&
+ ` }, 1);` && |\n| &&
+ ` }` && |\n| &&
+ ` }` && |\n| &&
+ ` });` && |\n| &&
+ ` }, 100);` && |\n| &&
+ ` }` && |\n| &&
+ ` });` && |\n| &&
+ `});` && |\n| &&
+ `` && |\n| &&
+ `` && |\n| &&
+ `` && |\n| &&
+ `sap.ui.define("z2ui5/Info", ["sap/ui/core/Control", "sap/ui/VersionInfo", "sap/ui/Device"], (Control, VersionInfo, Device) => {` && |\n| &&
+ ` "use strict";` && |\n| &&
+ `` && |\n| &&
+ ` return Control.extend("z2ui5.Info", {` && |\n| &&
+ ` metadata: {` && |\n| &&
+ ` properties: {` && |\n| &&
+ ` ui5_version: {` && |\n| &&
+ ` type: "string"` && |\n| &&
+ ` },` && |\n| &&
+ ` device_phone: {` && |\n| &&
+ ` type: "string"` && |\n| &&
+ ` },` && |\n| &&
+ ` device_desktop: {` && |\n| &&
+ ` type: "string"` && |\n| &&
+ ` },` && |\n| &&
+ ` device_tablet: {` && |\n| &&
+ ` type: "string"` && |\n| &&
+ ` },` && |\n| &&
+ ` device_combi: {` && |\n| &&
+ ` type: "string"` && |\n| &&
+ ` },` && |\n| &&
+ ` device_height: {` && |\n| &&
+ ` type: "string"` && |\n| &&
+ ` },` && |\n| &&
+ ` device_width: {` && |\n| &&
+ ` type: "string"` && |\n| &&
+ ` },` && |\n| &&
+ ` ui5_theme: {` && |\n| &&
+ ` type: "string"` && |\n| &&
+ ` },` && |\n| &&
+ ` device_os: {` && |\n| &&
+ ` type: "string"` && |\n| &&
+ ` },` && |\n| &&
+ ` device_systemtype: {` && |\n| &&
+ ` type: "string"` && |\n| &&
+ ` },` && |\n| &&
+ ` device_browser: {` && |\n| &&
+ ` type: "string"` && |\n| &&
+ ` },` && |\n| &&
+ ` },` && |\n| &&
+ ` events: {` && |\n| &&
+ ` "finished": {` && |\n| &&
+ ` allowPreventDefault: true,` && |\n| &&
+ ` parameters: {},` && |\n| &&
+ ` }` && |\n| &&
+ ` }` && |\n| &&
+ ` },` && |\n| &&
+ `` && |\n| &&
+ ` init() { },` && |\n| &&
+ `` && |\n| &&
+ ` onAfterRendering() {` && |\n| &&
+ ` },` && |\n| &&
+ `` && |\n| &&
+ ` async renderer(oRm, oControl) {` && |\n| &&
+ `` && |\n| &&
+ ` debugger;` && |\n| &&
+ ` let oDevice = z2ui5.oView.getModel("device").oData;` && |\n| &&
+ ` oControl.setProperty("device_phone", oDevice.system.phone);` && |\n| &&
+ ` oControl.setProperty("device_desktop", oDevice.system.desktop);` && |\n| &&
+ ` oControl.setProperty("device_tablet", oDevice.system.tablet);` && |\n| &&
+ ` oControl.setProperty("device_combi", oDevice.system.combi);` && |\n| &&
+ ` oControl.setProperty("device_height", oDevice.resize.height);` && |\n| &&
+ ` oControl.setProperty("device_width", oDevice.resize.width);` && |\n| &&
+ ` oControl.setProperty("device_os", oDevice.os.name);` && |\n| &&
+ ` oControl.setProperty("device_browser", oDevice.browser.name);` && |\n| &&
+ ` oControl.fireFinished();` && |\n| &&
+ `` && |\n| &&
+ ` }` && |\n| &&
+ ` });` && |\n| &&
+ `}` && |\n| &&
+ `);` && |\n| &&
+ `` && |\n| &&
+ `sap.ui.define("z2ui5/Geolocation", ["sap/ui/core/Control"], (Control) => {` && |\n| &&
+ ` "use strict";` && |\n| &&
+ `` && |\n| &&
+ ` return Control.extend("z2ui5.Geolocation", {` && |\n| &&
+ ` metadata: {` && |\n| &&
+ ` properties: {` && |\n| &&
+ ` longitude: {` && |\n| &&
+ ` type: "string",` && |\n| &&
+ ` defaultValue: ""` && |\n| &&
+ ` },` && |\n| &&
+ ` latitude: {` && |\n| &&
+ ` type: "string",` && |\n| &&
+ ` defaultValue: ""` && |\n| &&
+ ` },` && |\n| &&
+ ` altitude: {` && |\n| &&
+ ` type: "string",` && |\n| &&
+ ` defaultValue: ""` && |\n| &&
+ ` },` && |\n| &&
+ ` accuracy: {` && |\n| &&
+ ` type: "string",` && |\n| &&
+ ` defaultValue: ""` && |\n| &&
+ ` },` && |\n| &&
+ ` altitudeAccuracy: {` && |\n| &&
+ ` type: "string",` && |\n| &&
+ ` defaultValue: ""` && |\n| &&
+ ` },` && |\n| &&
+ ` speed: {` && |\n| &&
+ ` type: "string",` && |\n| &&
+ ` defaultValue: false` && |\n| &&
+ ` },` && |\n| &&
+ ` heading: {` && |\n| &&
+ ` type: "string",` && |\n| &&
+ ` defaultValue: false` && |\n| &&
+ ` },` && |\n| &&
+ ` enableHighAccuracy: {` && |\n| &&
+ ` type: "boolean",` && |\n| &&
+ ` defaultValue: false` && |\n| &&
+ ` },` && |\n| &&
+ ` timeout: {` && |\n| &&
+ ` type: "string",` && |\n| &&
+ ` defaultValue: "5000"` && |\n| &&
+ ` }` && |\n| &&
+ ` },` && |\n| &&
+ ` events: {` && |\n| &&
+ ` "finished": {` && |\n| &&
+ ` allowPreventDefault: true,` && |\n| &&
+ ` parameters: {},` && |\n| &&
+ ` }` && |\n| &&
+ ` }` && |\n| &&
+ ` },` && |\n| &&
+ `` && |\n| &&
+ ` callbackPosition(position) {` && |\n| &&
+ `` && |\n| &&
+ ` var test = position.coords.longitude` && |\n| &&
+ ` this.setProperty("longitude", position.coords.longitude, true);` && |\n| &&
+ ` this.setProperty("latitude", position.coords.latitude, true);` && |\n| &&
+ ` this.setProperty("altitude", position.coords.altitude, true);` && |\n| &&
+ ` this.setProperty("accuracy", position.coords.accuracy, true);` && |\n| &&
+ ` this.setProperty("altitudeAccuracy", position.coords.altitudeAccuracy, true);` && |\n| &&
+ ` this.setProperty("speed", position.coords.speed, true);` && |\n| &&
+ ` this.setProperty("heading", position.coords.heading, true);` && |\n| &&
+ ` this.fireFinished();` && |\n| &&
+ ` //this.getParent().getParent().getModel().refresh();` && |\n| &&
+ `` && |\n| &&
+ ` },` && |\n| &&
+ `` && |\n| &&
+ ` async init() {` && |\n| &&
+ `` && |\n| &&
+ ` navigator.geolocation.getCurrentPosition(this.callbackPosition.bind(this));` && |\n| &&
+ ` //navigator.geolocation.watchPosition(this.callbackPosition.bind(this));` && |\n| &&
+ `` && |\n| &&
+ ` },` && |\n| &&
+ `` && |\n| &&
+ ` exit() {//clearWatch` && |\n| &&
+ ` },` && |\n| &&
+ `` && |\n| &&
+ ` onAfterRendering() {` && |\n| &&
+ ` },` && |\n| &&
+ `` && |\n| &&
+ ` renderer(oRm, oControl) {` && |\n| &&
+ ` }` && |\n| &&
+ ` });` && |\n| &&
+ `}` && |\n| &&
+ `);` && |\n| &&
+ `` && |\n| &&
+ `sap.ui.define("z2ui5/FileUploader", ["sap/ui/core/Control", "sap/m/Button", "sap/ui/unified/FileUploader", "sap/m/HBox"], function (Control, Button, FileUploader, HBox) {` && |\n| &&
+ ` "use strict";` && |\n| &&
+ `` && |\n| &&
+ ` return Control.extend("z2ui5.FileUploader", {` && |\n| &&
+ `` && |\n| &&
+ ` metadata: {` && |\n| &&
+ ` properties: {` && |\n| &&
+ ` value: {` && |\n| &&
+ ` type: "string",` && |\n| &&
+ ` defaultValue: ""` && |\n| &&
+ ` },` && |\n| &&
+ ` path: {` && |\n| &&
+ ` type: "string",` && |\n| &&
+ ` defaultValue: ""` && |\n| &&
+ ` },` && |\n| &&
+ ` tooltip: {` && |\n| &&
+ ` type: "string",` && |\n| &&
+ ` defaultValue: ""` && |\n| &&
+ ` },` && |\n| &&
+ ` fileType: {` && |\n| &&
+ ` type: "string",` && |\n| &&
+ ` defaultValue: ""` && |\n| &&
+ ` },` && |\n| &&
+ ` placeholder: {` && |\n| &&
+ ` type: "string",` && |\n| &&
+ ` defaultValue: ""` && |\n| &&
+ ` },` && |\n| &&
+ ` buttonText: {` && |\n| &&
+ ` type: "string",` && |\n| &&
+ ` defaultValue: ""` && |\n| &&
+ ` },` && |\n| &&
+ ` style: {` && |\n| &&
+ ` type: "string",` && |\n| &&
+ ` defaultValue: ""` && |\n| &&
+ ` },` && |\n| &&
+ ` uploadButtonText: {` && |\n| &&
+ ` type: "string",` && |\n| &&
+ ` defaultValue: "Upload"` && |\n| &&
+ ` },` && |\n| &&
+ ` enabled: {` && |\n| &&
+ ` type: "boolean",` && |\n| &&
+ ` defaultValue: true` && |\n| &&
+ ` },` && |\n| &&
+ ` icon: {` && |\n| &&
+ ` type: "string",` && |\n| &&
+ ` defaultValue: "sap-icon://browse-folder"` && |\n| &&
+ ` },` && |\n| &&
+ ` iconOnly: {` && |\n| &&
+ ` type: "boolean",` && |\n| &&
+ ` defaultValue: false` && |\n| &&
+ ` },` && |\n| &&
+ ` buttonOnly: {` && |\n| &&
+ ` type: "boolean",` && |\n| &&
+ ` defaultValue: false` && |\n| &&
+ ` },` && |\n| &&
+ ` multiple: {` && |\n| &&
+ ` type: "boolean",` && |\n| &&
+ ` defaultValue: false` && |\n| &&
+ ` },` && |\n| &&
+ ` visible: {` && |\n| &&
+ ` type: "boolean",` && |\n| &&
+ ` defaultValue: true` && |\n| &&
+ ` },` && |\n| &&
+ ` checkDirectUpload: {` && |\n| &&
+ ` type: "boolean",` && |\n| &&
+ ` defaultValue: false` && |\n| &&
+ ` }` && |\n| &&
+ ` },` && |\n| &&
+ `` && |\n| &&
+ ` aggregations: {},` && |\n| &&
+ ` events: {` && |\n| &&
+ ` "upload": {` && |\n| &&
+ ` allowPreventDefault: true,` && |\n| &&
+ ` parameters: {}` && |\n| &&
+ ` }` && |\n| &&
+ ` },` && |\n| &&
+ ` renderer: null` && |\n| &&
+ ` },` && |\n| &&
+ `` && |\n| &&
+ ` renderer: function (oRm, oControl) {` && |\n| &&
+ `` && |\n| &&
+ ` if (!oControl.getProperty("checkDirectUpload")) {` && |\n| &&
+ ` oControl.oUploadButton = new Button({` && |\n| &&
+ ` text: oControl.getProperty("uploadButtonText"),` && |\n| &&
+ ` enabled: oControl.getProperty("path") !== "",` && |\n| &&
+ ` press: function (oEvent) {` && |\n| &&
+ `` && |\n| &&
+ ` this.setProperty("path", this.oFileUploader.getProperty("value"));` && |\n| &&
+ `` && |\n| &&
+ |\n|.
+ result = result &&
+ ` var file = z2ui5.oUpload.oFileUpload.files[0];` && |\n| &&
+ ` var reader = new FileReader();` && |\n| &&
+ `` && |\n| &&
+ ` reader.onload = function (evt) {` && |\n| &&
+ ` var vContent = evt.currentTarget.result;` && |\n| &&
+ ` this.setProperty("value", vContent);` && |\n| &&
+ ` this.fireUpload();` && |\n| &&
+ ` //this.getView().byId('picture' ).getDomRef().src = vContent;` && |\n| &&
+ ` }` && |\n| &&
+ ` .bind(this)` && |\n| &&
+ `` && |\n| &&
+ ` reader.readAsDataURL(file);` && |\n| &&
+ ` }` && |\n| &&
+ ` .bind(oControl)` && |\n| &&
+ ` });` && |\n| &&
+ ` }` && |\n| &&
+ `` && |\n| &&
+ ` oControl.oFileUploader = new FileUploader({` && |\n| &&
+ ` icon: oControl.getProperty("icon"),` && |\n| &&
+ ` iconOnly: oControl.getProperty("iconOnly"),` && |\n| &&
+ ` buttonOnly: oControl.getProperty("buttonOnly"),` && |\n| &&
+ ` buttonText: oControl.getProperty("buttonText"),` && |\n| &&
+ ` style: oControl.getProperty("style"),` && |\n| &&
+ ` fileType: oControl.getProperty("fileType"),` && |\n| &&
+ ` visible: oControl.getProperty("visible"),` && |\n| &&
+ ` uploadOnChange: true,` && |\n| &&
+ ` enabled: oControl.getProperty("enabled"),` && |\n| &&
+ ` value: oControl.getProperty("path"),` && |\n| &&
+ ` placeholder: oControl.getProperty("placeholder"),` && |\n| &&
+ ` change: function (oEvent) {` && |\n| &&
+ ` if (oControl.getProperty("checkDirectUpload")) {` && |\n| &&
+ ` return;` && |\n| &&
+ ` }` && |\n| &&
+ `` && |\n| &&
+ ` var value = oEvent.getSource().getProperty("value");` && |\n| &&
+ ` this.setProperty("path", value);` && |\n| &&
+ ` if (value) {` && |\n| &&
+ ` this.oUploadButton.setEnabled();` && |\n| &&
+ ` } else {` && |\n| &&
+ ` this.oUploadButton.setEnabled(false);` && |\n| &&
+ ` }` && |\n| &&
+ ` this.oUploadButton.rerender();` && |\n| &&
+ ` z2ui5.oUpload = oEvent.oSource;` && |\n| &&
+ ` }` && |\n| &&
+ ` .bind(oControl),` && |\n| &&
+ ` uploadComplete: function (oEvent) {` && |\n| &&
+ ` if (!oControl.getProperty("checkDirectUpload")) {` && |\n| &&
+ ` return;` && |\n| &&
+ ` }` && |\n| &&
+ `` && |\n| &&
+ ` var value = oEvent.getSource().getProperty("value");` && |\n| &&
+ ` this.setProperty("path", value);` && |\n| &&
+ `` && |\n| &&
+ ` var file = oEvent.oSource.oFileUpload.files[0];` && |\n| &&
+ ` var reader = new FileReader();` && |\n| &&
+ `` && |\n| &&
+ ` reader.onload = function (evt) {` && |\n| &&
+ ` var vContent = evt.currentTarget.result;` && |\n| &&
+ ` this.setProperty("value", vContent);` && |\n| &&
+ ` this.fireUpload();` && |\n| &&
+ ` }` && |\n| &&
+ ` .bind(this)` && |\n| &&
+ `` && |\n| &&
+ ` reader.readAsDataURL(file);` && |\n| &&
+ ` }` && |\n| &&
+ ` .bind(oControl)` && |\n| &&
+ ` });` && |\n| &&
+ `` && |\n| &&
+ ` var hbox = new HBox();` && |\n| &&
+ ` hbox.addItem(oControl.oFileUploader);` && |\n| &&
+ ` hbox.addItem(oControl.oUploadButton);` && |\n| &&
+ ` oRm.renderControl(hbox);` && |\n| &&
+ ` }` && |\n| &&
+ ` });` && |\n| &&
+ `});` && |\n| &&
+ `` && |\n| &&
+ `sap.ui.define("z2ui5/MultiInputExt", ["sap/ui/core/Control", "sap/m/Token", "sap/ui/core/Core", "sap/ui/core/Element"], (Control, Token, Core, Element) => {` && |\n| &&
+ ` "use strict";` && |\n| &&
+ `` && |\n| &&
+ ` return Control.extend("z2ui5.MultiInputExt", {` && |\n| &&
+ ` metadata: {` && |\n| &&
+ ` properties: {` && |\n| &&
+ ` MultiInputId: {` && |\n| &&
+ ` type: "String"` && |\n| &&
+ ` },` && |\n| &&
+ ` MultiInputName: {` && |\n| &&
+ ` type: "String"` && |\n| &&
+ ` },` && |\n| &&
+ ` addedTokens: {` && |\n| &&
+ ` type: "Array"` && |\n| &&
+ ` },` && |\n| &&
+ ` checkInit: {` && |\n| &&
+ ` type: "Boolean",` && |\n| &&
+ ` defaultValue: false` && |\n| &&
+ ` },` && |\n| &&
+ ` removedTokens: {` && |\n| &&
+ ` type: "Array"` && |\n| &&
+ ` }` && |\n| &&
+ ` },` && |\n| &&
+ ` events: {` && |\n| &&
+ ` "change": {` && |\n| &&
+ ` allowPreventDefault: true,` && |\n| &&
+ ` parameters: {}` && |\n| &&
+ ` }` && |\n| &&
+ ` },` && |\n| &&
+ ` },` && |\n| &&
+ `` && |\n| &&
+ ` init() {` && |\n| &&
+ ` z2ui5.onAfterRendering.push(this.setControl.bind(this));` && |\n| &&
+ ` },` && |\n| &&
+ `` && |\n| &&
+ ` onTokenUpdate(oEvent) {` && |\n| &&
+ ` this.setProperty("addedTokens", []);` && |\n| &&
+ ` this.setProperty("removedTokens", []);` && |\n| &&
+ `` && |\n| &&
+ ` if (oEvent.mParameters.type == "removed") {` && |\n| &&
+ ` let removedTokens = [];` && |\n| &&
+ ` oEvent.mParameters.removedTokens.forEach((item) => {` && |\n| &&
+ ` removedTokens.push({` && |\n| &&
+ ` KEY: item.getKey(),` && |\n| &&
+ ` TEXT: item.getText()` && |\n| &&
+ ` });` && |\n| &&
+ ` }` && |\n| &&
+ ` );` && |\n| &&
+ ` this.setProperty("removedTokens", removedTokens);` && |\n| &&
+ ` } else {` && |\n| &&
+ ` let addedTokens = [];` && |\n| &&
+ ` oEvent.mParameters.addedTokens.forEach((item) => {` && |\n| &&
+ ` addedTokens.push({` && |\n| &&
+ ` KEY: item.getKey(),` && |\n| &&
+ ` TEXT: item.getText()` && |\n| &&
+ ` });` && |\n| &&
+ ` }` && |\n| &&
+ ` );` && |\n| &&
+ ` this.setProperty("addedTokens", addedTokens);` && |\n| &&
+ ` }` && |\n| &&
+ ` this.fireChange();` && |\n| &&
+ ` },` && |\n| &&
+ ` renderer(oRm, oControl) {` && |\n| &&
+ ` z2ui5.onAfterRendering.push(this.setControl.bind(oControl));` && |\n| &&
+ ` },` && |\n| &&
+ ` setControl() {` && |\n| &&
+ ` let table = z2ui5.oView.byId(this.getProperty("MultiInputId"));` && |\n| &&
+ ` if (!table) {` && |\n| &&
+ ` try {` && |\n| &&
+ ` table = Core.byId(Element.getElementsByName(this.getProperty("MultiInputName"))[0].id.replace('-inner', ''));` && |\n| &&
+ ` } catch (e) {` && |\n| &&
+ ` return;` && |\n| &&
+ ` }` && |\n| &&
+ ` }` && |\n| &&
+ ` if (!table) {` && |\n| &&
+ ` return;` && |\n| &&
+ ` }` && |\n| &&
+ ` if (this.getProperty("checkInit") == true) {` && |\n| &&
+ ` return;` && |\n| &&
+ ` }` && |\n| &&
+ ` this.setProperty("checkInit", true);` && |\n| &&
+ ` table.attachTokenUpdate(this.onTokenUpdate.bind(this));` && |\n| &&
+ ` var fnValidator = function (args) {` && |\n| &&
+ ` var text = args.text;` && |\n| &&
+ ` return new Token({` && |\n| &&
+ ` key: text,` && |\n| &&
+ ` text: text` && |\n| &&
+ ` });` && |\n| &&
+ ` };` && |\n| &&
+ ` table.addValidator(fnValidator);` && |\n| &&
+ ` },` && |\n| &&
+ ` renderer(oRM, oControl) { }` && |\n| &&
+ ` });` && |\n| &&
+ `}` && |\n| &&
+ `);` && |\n| &&
+ `` && |\n| &&
+ `sap.ui.define("z2ui5/UITableExt", ["sap/ui/core/Control"], (Control) => {` && |\n| &&
+ ` "use strict";` && |\n| &&
+ `` && |\n| &&
+ ` return Control.extend("z2ui5.UITableExt", {` && |\n| &&
+ ` metadata: {` && |\n| &&
+ ` properties: {` && |\n| &&
+ ` tableId: {` && |\n| &&
+ ` type: "String"` && |\n| &&
+ ` }` && |\n| &&
+ ` }` && |\n| &&
+ ` },` && |\n| &&
+ `` && |\n| &&
+ ` init() {` && |\n| &&
+ ` z2ui5.onBeforeRoundtrip.push(this.readFilter.bind(this));` && |\n| &&
+ ` z2ui5.onAfterRoundtrip.push(this.setFilter.bind(this));` && |\n| &&
+ ` },` && |\n| &&
+ `` && |\n| &&
+ ` readFilter() {` && |\n| &&
+ ` try {` && |\n| &&
+ ` let id = this.getProperty("tableId");` && |\n| &&
+ ` let oTable = z2ui5.oView.byId(id);` && |\n| &&
+ ` this.aFilters = oTable.getBinding().aFilters;` && |\n| &&
+ ` } catch (e) { }` && |\n| &&
+ ` ;` && |\n| &&
+ ` },` && |\n| &&
+ `` && |\n| &&
+ ` setFilter() {` && |\n| &&
+ ` try {` && |\n| &&
+ ` setTimeout((aFilters) => {` && |\n| &&
+ ` let id = this.getProperty("tableId");` && |\n| &&
+ ` let oTable = z2ui5.oView.byId(id);` && |\n| &&
+ ` oTable.getBinding().filter(aFilters);` && |\n| &&
+ ` }` && |\n| &&
+ ` , 100, this.aFilters);` && |\n| &&
+ ` } catch (e) { }` && |\n| &&
+ ` ;` && |\n| &&
+ ` },` && |\n| &&
+ `` && |\n| &&
+ ` renderer(oRM, oControl) { }` && |\n| &&
+ ` });` && |\n| &&
+ `}` && |\n| &&
+ `);` && |\n| &&
+ `` && |\n| &&
+ `sap.ui.define("z2ui5/Util", [], () => {` && |\n| &&
+ ` "use strict";` && |\n| &&
+ ` return {` && |\n| &&
+ ` DateCreateObject: (s) => new Date(s),` && |\n| &&
+ ` DateAbapTimestampToDate: (sTimestamp) => new sap.gantt.misc.Format.abapTimestampToDate(sTimestamp),` && |\n| &&
+ ` DateAbapDateToDateObject: (d) => new Date(d.slice(0, 4), parseInt(d.slice(4, 6)) - 1, d.slice(6, 8)),` && |\n| &&
+ ` DateAbapDateTimeToDateObject: (d, t = '000000') => new Date(d.slice(0, 4), parseInt(d.slice(4, 6)) - 1, d.slice(6, 8), t.slice(0, 2), t.slice(2, 4), t.slice(4, 6)),` && |\n| &&
+ ` };` && |\n| &&
+ `}` && |\n| &&
+ `);` && |\n| &&
+ `sap.ui.require(["z2ui5/Util"], (Util) => {` && |\n| &&
+ ` z2ui5.Util = Util;` && |\n| &&
+ `}` && |\n| &&
+ `);` && |\n| &&
+ `` && |\n| &&
+ `sap.ui.define("z2ui5/Favicon", ["sap/ui/core/Control"], (Control) => {` && |\n| &&
+ ` "use strict";` && |\n| &&
+ ` return Control.extend("z2ui5.Favicon", {` && |\n| &&
+ ` metadata: {` && |\n| &&
+ ` properties: {` && |\n| &&
+ ` favicon: {` && |\n| &&
+ ` type: "string"` && |\n| &&
+ ` },` && |\n| &&
+ ` }` && |\n| &&
+ ` },` && |\n| &&
+ ` setFavicon(val) {` && |\n| &&
+ ` this.setProperty("favicon", val);` && |\n| &&
+ ` let headTitle = document.querySelector('head');` && |\n| &&
+ ` let setFavicon = document.createElement('link');` && |\n| &&
+ ` setFavicon.setAttribute('rel', 'shortcut icon');` && |\n| &&
+ ` setFavicon.setAttribute('href', val);` && |\n| &&
+ ` headTitle.appendChild(setFavicon);` && |\n| &&
+ ` },` && |\n| &&
+ ` renderer(oRm, oControl) { }` && |\n| &&
+ ` });` && |\n| &&
+ `}` && |\n| &&
+ `);` && |\n| &&
+ `` && |\n| &&
+ `sap.ui.define("z2ui5/Dirty", ["sap/ui/core/Control", "sap/ushell/Container"], (Control, Container) => {` && |\n| &&
+ ` "use strict";` && |\n| &&
+ ` return Control.extend("z2ui5.Dirty", {` && |\n| &&
+ ` metadata: {` && |\n| &&
+ ` properties: {` && |\n| &&
+ ` isDirty: {` && |\n| &&
+ ` type: "string"` && |\n| &&
+ ` },` && |\n| &&
+ ` }` && |\n| &&
+ ` },` && |\n| &&
+ ` setIsDirty(val) {` && |\n| &&
+ ` if (Container) {` && |\n| &&
+ ` Container.setDirtyFlag(val);` && |\n| &&
+ ` } else {` && |\n| &&
+ ` window.onbeforeunload = function (e) {` && |\n| &&
+ ` if (val) {` && |\n| &&
+ ` e.preventDefault();` && |\n| &&
+ ` }` && |\n| &&
+ ` }` && |\n| &&
+ ` }` && |\n| &&
+ ` },` && |\n| &&
+ ` renderer(oRm, oControl) { }` && |\n| &&
+ ` });` && |\n| &&
+ `}` && |\n| &&
+ `);` && |\n| &&
+ ``.
+
+ ENDMETHOD.
+
+ENDCLASS.
diff --git a/src/01/99/z2ui5_cl_app_cont_app_js.clas.xml b/src/01/99/z2ui5_cl_app_cont_app_js.clas.xml
new file mode 100644
index 00000000..346b45bb
--- /dev/null
+++ b/src/01/99/z2ui5_cl_app_cont_app_js.clas.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+ Z2UI5_CL_APP_CONT_APP_JS
+ E
+ Z2UI5_CL_APP_CONT_APP_JS
+ 1
+ X
+ X
+ X
+
+
+
+
diff --git a/src/01/99/z2ui5_cl_app_cont_view1_js.clas.abap b/src/01/99/z2ui5_cl_app_cont_view1_js.clas.abap
new file mode 100644
index 00000000..5be005fa
--- /dev/null
+++ b/src/01/99/z2ui5_cl_app_cont_view1_js.clas.abap
@@ -0,0 +1,493 @@
+CLASS z2ui5_cl_app_cont_View1_js DEFINITION
+ PUBLIC
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS get
+ RETURNING
+ VALUE(result) TYPE string.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+
+
+CLASS z2ui5_cl_app_cont_View1_js IMPLEMENTATION.
+
+ METHOD get.
+
+ result = `sap.ui.define(["sap/ui/core/mvc/Controller", "sap/ui/core/mvc/XMLView", "sap/ui/model/json/JSONModel",` && |\n| &&
+ ` "sap/ui/core/BusyIndicator", "sap/m/MessageBox", "sap/m/MessageToast", "sap/ui/core/Fragment", "sap/m/BusyDialog",` && |\n| &&
+ ` "sap/ui/VersionInfo", "z2ui5/cc/Server",` && |\n| &&
+ ` ],` && |\n| &&
+ ` function(Controller, XMLView, JSONModel, BusyIndicator, MessageBox, MessageToast, Fragment, mBusyDialog, VersionInfo,` && |\n| &&
+ ` Server ) {` && |\n| &&
+ ` "use strict";` && |\n| &&
+ ` return Controller.extend("z2ui5.controller.View1", {` && |\n| &&
+ `` && |\n| &&
+ ` onInit (){` && |\n| &&
+ `` && |\n| &&
+ ` z2ui5.oRouter.attachRouteMatched(function(oEvent) {` && |\n| &&
+ ` z2ui5.checkInit = true;` && |\n| &&
+ ` Server.Roundtrip();` && |\n| &&
+ ` }, this);` && |\n| &&
+ `` && |\n| &&
+ ` },` && |\n| &&
+ ` async onAfterRendering() {` && |\n| &&
+ `` && |\n| &&
+ ` if (!z2ui5.oResponse){` && |\n| &&
+ ` return;` && |\n| &&
+ ` }` && |\n| &&
+ `` && |\n| &&
+ ` try {` && |\n| &&
+ ` if (!z2ui5.oResponse.PARAMS) {` && |\n| &&
+ ` BusyIndicator.hide();` && |\n| &&
+ ` z2ui5.isBusy = false;` && |\n| &&
+ ` return;` && |\n| &&
+ ` }` && |\n| &&
+ ` const {S_POPUP, S_VIEW_NEST, S_VIEW_NEST2, S_POPOVER} = z2ui5.oResponse.PARAMS;` && |\n| &&
+ ` if (S_POPUP?.CHECK_DESTROY) {` && |\n| &&
+ ` z2ui5.oController.PopupDestroy();` && |\n| &&
+ ` }` && |\n| &&
+ ` if (S_POPOVER?.CHECK_DESTROY) {` && |\n| &&
+ ` z2ui5.oController.PopoverDestroy();` && |\n| &&
+ ` }` && |\n| &&
+ ` if (S_POPUP?.XML) {` && |\n| &&
+ ` z2ui5.oController.PopupDestroy();` && |\n| &&
+ ` await this.displayFragment(S_POPUP.XML, 'oViewPopup');` && |\n| &&
+ ` }` && |\n| &&
+ ` if (!z2ui5.checkNestAfter) {` && |\n| &&
+ ` if (S_VIEW_NEST?.XML) {` && |\n| &&
+ ` z2ui5.oController.NestViewDestroy();` && |\n| &&
+ ` await this.displayNestedView(S_VIEW_NEST.XML, 'oViewNest', 'S_VIEW_NEST');` && |\n| &&
+ ` z2ui5.checkNestAfter = true;` && |\n| &&
+ ` }` && |\n| &&
+ ` }` && |\n| &&
+ ` if (!z2ui5.checkNestAfter2) {` && |\n| &&
+ ` if (S_VIEW_NEST2?.XML) {` && |\n| &&
+ ` z2ui5.oController.NestViewDestroy2();` && |\n| &&
+ ` await this.displayNestedView2(S_VIEW_NEST2.XML, 'oViewNest2', 'S_VIEW_NEST2');` && |\n| &&
+ ` z2ui5.checkNestAfter2 = true;` && |\n| &&
+ ` }` && |\n| &&
+ ` }` && |\n| &&
+ ` if (S_POPOVER?.XML) {` && |\n| &&
+ ` await this.displayPopover(S_POPOVER.XML, 'oViewPopover', S_POPOVER.OPEN_BY_ID);` && |\n| &&
+ ` }` && |\n| &&
+ ` BusyIndicator.hide();` && |\n| &&
+ ` z2ui5.isBusy = false;` && |\n| &&
+ ` z2ui5.onAfterRendering.forEach(item => {` && |\n| &&
+ ` if (item !== undefined) {` && |\n| &&
+ ` item();` && |\n| &&
+ ` }` && |\n| &&
+ ` }` && |\n| &&
+ ` )` && |\n| &&
+ ` } catch (e) {` && |\n| &&
+ ` BusyIndicator.hide();` && |\n| &&
+ ` z2ui5.isBusy = false;` && |\n| &&
+ ` MessageBox.error(e.toLocaleString(), {` && |\n| &&
+ ` title: "Unexpected Error Occured - App Terminated",` && |\n| &&
+ ` actions: [],` && |\n| &&
+ ` onClose: () => {` && |\n| &&
+ ` new mBusyDialog({` && |\n| &&
+ ` text: "Please Restart the App"` && |\n| &&
+ ` }).open();` && |\n| &&
+ ` }` && |\n| &&
+ ` })` && |\n| &&
+ ` }` && |\n| &&
+ ` },` && |\n| &&
+ ` async displayFragment(xml, viewProp) {` && |\n| &&
+ ` let oview_model = new JSONModel(z2ui5.oResponse.OVIEWMODEL);` && |\n| &&
+ ` const oFragment = await Fragment.load({` && |\n| &&
+ ` definition: xml,` && |\n| &&
+ ` controller: z2ui5.oControllerPopup,` && |\n| &&
+ ` id: "popupId"` && |\n| &&
+ ` });` && |\n| &&
+ ` oFragment.setModel(oview_model);` && |\n| &&
+ ` z2ui5[viewProp] = oFragment;` && |\n| &&
+ ` z2ui5[viewProp].Fragment = Fragment;` && |\n| &&
+ ` oFragment.open();` && |\n| &&
+ ` },` && |\n| &&
+ ` async displayPopover(xml, viewProp, openById) {` && |\n| &&
+ ` sap.ui.require(["sap/ui/core/Element"], async function(Element) {` && |\n| &&
+ ` const oFragment = await Fragment.load({` && |\n| &&
+ ` definition: xml,` && |\n| &&
+ ` controller: z2ui5.oControllerPopover,` && |\n| &&
+ ` id: "popoverId"` && |\n| &&
+ ` });` && |\n| &&
+ ` let oview_model = new JSONModel(z2ui5.oResponse.OVIEWMODEL);` && |\n| &&
+ ` oFragment.setModel(oview_model);` && |\n| &&
+ ` z2ui5[viewProp] = oFragment;` && |\n| &&
+ ` z2ui5[viewProp].Fragment = Fragment;` && |\n| &&
+ ` let oControl = {};` && |\n| &&
+ ` if (z2ui5.oView?.byId(openById)) {` && |\n| &&
+ ` oControl = z2ui5.oView.byId(openById);` && |\n| &&
+ ` } else if (z2ui5.oViewPopup?.Fragment.byId('popupId', openById)) {` && |\n| &&
+ ` oControl = z2ui5.oViewPopup.Fragment.byId('popupId', openById);` && |\n| &&
+ ` } else if (z2ui5.oViewNest?.byId(openById)) {` && |\n| &&
+ ` oControl = z2ui5.oViewNest.byId(openById);` && |\n| &&
+ ` } else if (z2ui5.oViewNest2?.byId(openById)) {` && |\n| &&
+ ` oControl = z2ui5.oViewNest2.byId(openById);` && |\n| &&
+ ` } else {` && |\n| &&
+ ` if (sapUiCore.byId(openById)) {` && |\n| &&
+ ` // oControl = sapUiCore.byId(openById);` && |\n| &&
+ ` oControl = Element.getElementById(openById);` && |\n| &&
+ ` } else {` && |\n| &&
+ ` oControl = null;` && |\n| &&
+ ` }` && |\n| &&
+ ` ;` && |\n| &&
+ ` }` && |\n| &&
+ ` oFragment.openBy(oControl);` && |\n| &&
+ ` });` && |\n| &&
+ ` },` && |\n| &&
+ ` async displayNestedView(xml, viewProp, viewNestId) {` && |\n| &&
+ ` let oview_model = new JSONModel(z2ui5.oResponse.OVIEWMODEL);` && |\n| &&
+ ` const oView = await XMLView.create({` && |\n| &&
+ ` definition: xml,` && |\n| &&
+ ` controller: z2ui5.oControllerNest,` && |\n| &&
+ ` preprocessors: {` && |\n| &&
+ ` xml: {` && |\n| &&
+ ` models: {` && |\n| &&
+ ` template: oview_model` && |\n| &&
+ ` }` && |\n| &&
+ ` }` && |\n| &&
+ ` }` && |\n| &&
+ ` });` && |\n| &&
+ ` oView.setModel(oview_model);` && |\n| &&
+ ` let oParent = z2ui5.oView.byId(z2ui5.oResponse.PARAMS[viewNestId].ID);` && |\n| &&
+ ` if (oParent) {` && |\n| &&
+ ` try {` && |\n| &&
+ ` oParent[z2ui5.oResponse.PARAMS[viewNestId].METHOD_DESTROY]();` && |\n| &&
+ ` } catch {}` && |\n| &&
+ ` oParent[z2ui5.oResponse.PARAMS[viewNestId].METHOD_INSERT](oView);` && |\n| &&
+ ` }` && |\n| &&
+ ` z2ui5[viewProp] = oView;` && |\n| &&
+ ` },` && |\n| &&
+ ` async displayNestedView2(xml, viewProp, viewNestId) {` && |\n| &&
+ ` let oview_model = new JSONModel(z2ui5.oResponse.OVIEWMODEL);` && |\n| &&
+ ` const oView = await XMLView.create({` && |\n| &&
+ ` definition: xml,` && |\n| &&
+ ` controller: z2ui5.oControllerNest2,` && |\n| &&
+ ` preprocessors: {` && |\n| &&
+ ` xml: {` && |\n| &&
+ ` models: {` && |\n| &&
+ ` template: oview_model` && |\n| &&
+ ` }` && |\n| &&
+ ` }` && |\n| &&
+ ` }` && |\n| &&
+ ` });` && |\n| &&
+ ` oView.setModel(oview_model);` && |\n| &&
+ ` let oParent = z2ui5.oView.byId(z2ui5.oResponse.PARAMS[viewNestId].ID);` && |\n| &&
+ ` if (oParent) {` && |\n| &&
+ ` try {` && |\n| &&
+ ` oParent[z2ui5.oResponse.PARAMS[viewNestId].METHOD_DESTROY]();` && |\n| &&
+ ` } catch {}` && |\n| &&
+ ` oParent[z2ui5.oResponse.PARAMS[viewNestId].METHOD_INSERT](oView);` && |\n| &&
+ ` }` && |\n| &&
+ ` z2ui5[viewProp] = oView;` && |\n| &&
+ ` },` && |\n| &&
+ ` PopupDestroy() {` && |\n| &&
+ ` if (!z2ui5.oViewPopup) {` && |\n| &&
+ ` return;` && |\n| &&
+ ` }` && |\n| &&
+ ` if (z2ui5.oViewPopup.close) {` && |\n| &&
+ ` try {` && |\n| &&
+ ` z2ui5.oViewPopup.close();` && |\n| &&
+ ` } catch {}` && |\n| &&
+ ` }` && |\n| &&
+ ` z2ui5.oViewPopup.destroy();` && |\n| &&
+ ` },` && |\n| &&
+ ` PopoverDestroy() {` && |\n| &&
+ ` if (!z2ui5.oViewPopover) {` && |\n| &&
+ ` return;` && |\n| &&
+ ` }` && |\n| &&
+ ` if (z2ui5.oViewPopover.close) {` && |\n| &&
+ ` try {` && |\n| &&
+ ` z2ui5.oViewPopover.close();` && |\n| &&
+ ` } catch {}` && |\n| &&
+ ` }` && |\n| &&
+ ` z2ui5.oViewPopover.destroy();` && |\n| &&
+ ` },` && |\n| &&
+ ` NestViewDestroy() {` && |\n| &&
+ ` if (!z2ui5.oViewNest) {` && |\n| &&
+ ` return;` && |\n| &&
+ ` }` && |\n| &&
+ ` z2ui5.oViewNest.destroy();` && |\n| &&
+ ` },` && |\n| &&
+ ` NestViewDestroy2() {` && |\n| &&
+ ` if (!z2ui5.oViewNest2) {` && |\n| &&
+ ` return;` && |\n| &&
+ ` }` && |\n| &&
+ ` z2ui5.oViewNest2.destroy();` && |\n| &&
+ ` },` && |\n| &&
+ ` ViewDestroy() {` && |\n| &&
+ ` if (!z2ui5.oView) {` && |\n| &&
+ ` return;` && |\n| &&
+ ` }` && |\n| &&
+ ` z2ui5.oView.destroy();` && |\n| &&
+ ` },` && |\n| &&
+ ` eF(...args) {` && |\n| &&
+ `` && |\n| &&
+ ` z2ui5.onBeforeEventFrontend.forEach(item => {` && |\n| &&
+ ` if (item !== undefined) {` && |\n| &&
+ ` item(args);` && |\n| &&
+ ` }` && |\n| &&
+ ` }` && |\n| &&
+ ` )` && |\n| &&
+ ` let oCrossAppNavigator;` && |\n| &&
+ ` switch (args[0]) {` && |\n| &&
+ ` case 'SET_SIZE_LIMIT':` && |\n| &&
+ ` switch (args[2]) {` && |\n| &&
+ ` case 'MAIN':` && |\n| &&
+ ` z2ui5.oView.getModel().setSizeLimit(parseInt(args[1]));` && |\n| &&
+ ` z2ui5.oView.getModel().refresh(true);` && |\n| &&
+ ` break;` && |\n| &&
+ ` case 'NEST':` && |\n| &&
+ ` z2ui5.oViewNest.getModel().setSizeLimit(parseInt(args[1]));` && |\n| &&
+ ` z2ui5.oViewNest.getModel().refresh(true);` && |\n| &&
+ ` break;` && |\n| &&
+ ` case 'NEST2':` && |\n| &&
+ ` z2ui5.oViewNest2.getModel().setSizeLimit(parseInt(args[1]));` && |\n| &&
+ ` z2ui5.oViewNest2.getModel().refresh(true);` && |\n| &&
+ ` break;` && |\n| &&
+ ` case 'POPUP':` && |\n| &&
+ ` z2ui5.oPopup.getModel().setSizeLimit(parseInt(args[1]));` && |\n| &&
+ ` z2ui5.oPopup.getModel().refresh(true);` && |\n| &&
+ ` break;` && |\n| &&
+ ` case 'POPOVER':` && |\n| &&
+ ` z2ui5.oPopover.getModel().setSizeLimit(parseInt(args[1]));` && |\n| &&
+ ` z2ui5.oPopover.getModel().refresh(true);` && |\n| &&
+ ` break;` && |\n| &&
+ ` }` && |\n| &&
+ ` break;` && |\n| &&
+ ` case 'DOWNLOAD_B64_FILE':` && |\n| &&
+ ` var a = document.createElement("a");` && |\n| &&
+ ` a.href = args[1];` && |\n| &&
+ ` a.download = args[2];` && |\n| &&
+ ` a.click();` && |\n| &&
+ ` break;` && |\n| &&
+ ` case 'CROSS_APP_NAV_TO_PREV_APP':` && |\n| &&
+ ` // oCrossAppNavigator = Container.getService("CrossApplicationNavigation");` && |\n| &&
+ ` oCrossAppNavigator = sap.ushell.Container.getService("CrossApplicationNavigation");` && |\n| &&
+ ` oCrossAppNavigator.backToPreviousApp();` && |\n| &&
+ ` break;` && |\n| &&
+ ` case 'CROSS_APP_NAV_TO_EXT':` && |\n| &&
+ ` // oCrossAppNavigator = Container.getService("CrossApplicationNavigation");` && |\n| &&
+ ` oCrossAppNavigator = sap.ushell.Container.getService("CrossApplicationNavigation");` && |\n| &&
+ ` const hash = (oCrossAppNavigator.hrefForExternal({` && |\n| &&
+ ` target: args[1],` && |\n| &&
+ ` params: args[2]` && |\n| &&
+ ` })) || "";` && |\n| &&
+ ` if (args[3] === 'EXT') {` && |\n| &&
+ ` let url = window.location.href.split('#')[0] + hash;` && |\n| &&
+ ` //todo` && |\n| &&
+ ` //URLHelper.redirect(url, true);` && |\n| &&
+ ` } else {` && |\n| &&
+ ` oCrossAppNavigator.toExternal({` && |\n| &&
+ ` target: {` && |\n| &&
+ ` shellHash: hash` && |\n| &&
+ ` }` && |\n| &&
+ ` });` && |\n| &&
+ ` }` && |\n| &&
+ ` break;` && |\n| &&
+ ` case 'LOCATION_RELOAD':` && |\n| &&
+ ` window.location = args[1];` && |\n| &&
+ ` break;` && |\n| &&
+ ` case 'OPEN_NEW_TAB':` && |\n| &&
+ ` window.open(args[1], '_blank');` && |\n| &&
+ ` break;` && |\n| &&
+ ` case 'POPUP_CLOSE':` && |\n| &&
+ ` z2ui5.oController.PopupDestroy();` && |\n| &&
+ ` break;` && |\n| &&
+ ` case 'POPOVER_CLOSE':` && |\n| &&
+ ` z2ui5.oController.PopoverDestroy();` && |\n| &&
+ ` break;` && |\n| &&
+ ` case 'NAV_CONTAINER_TO':` && |\n| &&
+ ` var navCon = z2ui5.oView.byId(args[1]);` && |\n| &&
+ ` var navConTo = z2ui5.oView.byId(args[2]);` && |\n| &&
+ ` navCon.to(navConTo);` && |\n| &&
+ ` break;` && |\n| &&
+ ` case 'NEST_NAV_CONTAINER_TO':` && |\n| &&
+ ` navCon = z2ui5.oViewNest.byId(args[1]);` && |\n| &&
+ ` navConTo = z2ui5.oViewNest.byId(args[2]);` && |\n| &&
+ ` navCon.to(navConTo);` && |\n| &&
+ ` break;` && |\n| &&
+ ` case 'NEST2_NAV_CONTAINER_TO':` && |\n| &&
+ ` navCon = z2ui5.oViewNest2.byId(args[1]);` && |\n| &&
+ ` navConTo = z2ui5.oViewNest2.byId(args[2]);` && |\n| &&
+ ` navCon.to(navConTo);` && |\n| &&
+ ` break;` && |\n| &&
+ ` case 'POPUP_NAV_CONTAINER_TO':` && |\n| &&
+ ` navCon = Fragment.byId("popupId", args[1]);` && |\n| &&
+ ` navConTo = Fragment.byId("popupId", args[2]);` && |\n| &&
+ ` navCon.to(navConTo);` && |\n| &&
+ ` break;` && |\n| &&
+ ` }` && |\n| &&
+ ` },` && |\n| &&
+ ` eB(...args) {` && |\n| &&
+ `` && |\n| &&
+ ` // var oRouter = sap.ui.core.UIComponent.getRouterFor(this);` && |\n| &&
+ ` //debugger;` && |\n| &&
+ ` // z2ui5.oRouter.navTo("RouteView2");` && |\n| &&
+ ` // return;` && |\n| &&
+ `` && |\n| &&
+ ` if (!window.navigator.onLine) {` && |\n| &&
+ ` MessageBox.alert('No internet connection! Please reconnect to the server and try again.');` && |\n| &&
+ ` return;` && |\n| &&
+ ` }` && |\n| &&
+ ` if (z2ui5.isBusy == true) {` && |\n| &&
+ ` if (!args[0][2]) {` && |\n| &&
+ ` let oBusyDialog = new mBusyDialog();` && |\n| &&
+ ` oBusyDialog.open();` && |\n| &&
+ ` setTimeout( (oBusyDialog) => {` && |\n| &&
+ ` oBusyDialog.close()` && |\n| &&
+ ` }` && |\n| &&
+ ` , 100, oBusyDialog);` && |\n| &&
+ ` return;` && |\n| &&
+ ` }` && |\n| &&
+ ` }` && |\n| &&
+ ` z2ui5.isBusy = true;` && |\n| &&
+ ` BusyIndicator.show();` && |\n| &&
+ ` z2ui5.oBody = {};` && |\n| &&
+ ` if (args[0][3]) {` && |\n| &&
+ ` z2ui5.oBody.XX = z2ui5.oView.getModel().getData().XX;` && |\n| &&
+ ` z2ui5.oBody.VIEWNAME = 'MAIN';` && |\n| &&
+ ` } else if (z2ui5.oController == this) {` && |\n| &&
+ ` z2ui5.oBody.XX = z2ui5.oView.getModel().getData().XX;` && |\n| &&
+ ` z2ui5.oBody.VIEWNAME = 'MAIN';` && |\n| &&
+ ` } else if (z2ui5.oControllerPopup == this) {` && |\n| &&
+ ` if (z2ui5.oViewPopup) {` && |\n| &&
+ ` z2ui5.oBody.XX = z2ui5.oViewPopup.getModel().getData().XX;` && |\n| &&
+ ` }` && |\n| &&
+ ` z2ui5.oBody.VIEWNAME = 'MAIN';` && |\n| &&
+ ` } else if (z2ui5.oControllerPopover == this) {` && |\n| &&
+ ` z2ui5.oBody.XX = z2ui5.oViewPopover.getModel().getData().XX;` && |\n| &&
+ ` z2ui5.oBody.VIEWNAME = 'MAIN';` && |\n| &&
+ ` } else if (z2ui5.oControllerNest == this) {` && |\n| &&
+ ` z2ui5.oBody.XX = z2ui5.oViewNest.getModel().getData().XX;` && |\n| &&
+ ` z2ui5.oBody.VIEWNAME = 'NEST';` && |\n| &&
+ ` } else if (z2ui5.oControllerNest2 == this) {` && |\n| &&
+ ` z2ui5.oBody.XX = z2ui5.oViewNest2.getModel().getData().XX;` && |\n| &&
+ ` z2ui5.oBody.VIEWNAME = 'NEST2';` && |\n| &&
+ ` }` && |\n| &&
+ ` z2ui5.onBeforeRoundtrip.forEach(item => {` && |\n| &&
+ ` if (item !== undefined) {` && |\n| &&
+ ` item();` && |\n| &&
+ ` }` && |\n| &&
+ ` }` && |\n| &&
+ ` )` && |\n| &&
+ ` if (args[0][1]) {` && |\n| &&
+ ` z2ui5.oController.ViewDestroy();` && |\n| &&
+ ` }` && |\n| &&
+ ` z2ui5.oBody.ID = z2ui5.oResponse.ID;` && |\n| &&
+ ` z2ui5.oBody.ARGUMENTS = args;` && |\n| &&
+ ` z2ui5.oBody.ARGUMENTS.forEach( (item, i) => {` && |\n| &&
+ ` if (i == 0) {` && |\n| &&
+ ` return;` && |\n| &&
+ ` }` && |\n| &&
+ ` if (typeof item === 'object') {` && |\n| &&
+ ` z2ui5.oBody.ARGUMENTS[i] = JSON.stringify(item);` && |\n| &&
+ ` }` && |\n| &&
+ ` }` && |\n| &&
+ ` );` && |\n| &&
+ ` z2ui5.oResponseOld = z2ui5.oResponse;` && |\n| &&
+ ` Server.Roundtrip();` && |\n| &&
+ `` && |\n| &&
+ ` },` && |\n| &&
+ `` && |\n| &&
+ ` updateModelIfRequired(paramKey, oView) {` && |\n| &&
+ ` if (z2ui5.oResponse.PARAMS == undefined) {` && |\n| &&
+ ` return;` && |\n| &&
+ ` }` && |\n| &&
+ ` if (z2ui5.oResponse.PARAMS[paramKey]?.CHECK_UPDATE_MODEL) {` && |\n| &&
+ ` let model = new JSONModel(z2ui5.oResponse.OVIEWMODEL);` && |\n| &&
+ ` if (oView) {` && |\n| &&
+ ` oView.setModel(model);` && |\n| &&
+ ` }` && |\n| &&
+ ` }` && |\n| &&
+ ` },` && |\n| &&
+ ` async checkSDKcompatibility(err) {` && |\n| &&
+ ` let oCurrentVersionInfo = await VersionInfo.load();` && |\n| &&
+ ` var ui5_sdk = oCurrentVersionInfo.gav.includes('com.sap.ui5') ? true : false;` && |\n| &&
+ ` if (!ui5_sdk) {` && |\n| &&
+ ` if (err) {` && |\n| &&
+ ` MessageBox.error("openui5 SDK is loaded, module: " + err._modules + " is not availabe in openui5");` && |\n| &&
+ ` return;` && |\n| &&
+ ` }` && |\n| &&
+ ` ;` && |\n| &&
+ ` }` && |\n| &&
+ ` ;MessageBox.error(err.toLocaleString());` && |\n| &&
+ ` },` && |\n| &&
+ ` showMessage(msgType, params) {` && |\n| &&
+ ` if (params == undefined) {` && |\n| &&
+ ` return;` && |\n| &&
+ ` }` && |\n| &&
+ ` if (params[msgType]?.TEXT !== undefined) {` && |\n| &&
+ ` if (msgType === 'S_MSG_TOAST') {` && |\n| &&
+ ` MessageToast.show(params[msgType].TEXT, {` && |\n| &&
+ ` duration: params[msgType].DURATION ? parseInt(params[msgType].DURATION) : 3000,` && |\n| &&
+ ` width: params[msgType].WIDTH ? params[msgType].WIDTH : '15em',` && |\n| &&
+ ` onClose: params[msgType].ONCLOSE ? params[msgType].ONCLOSE : null,` && |\n| &&
+ ` autoClose: params[msgType].AUTOCLOSE ? true : false,` && |\n| &&
+ ` animationTimingFunction: params[msgType].ANIMATIONTIMINGFUNCTION ? params[msgType].ANIMATIONTIMINGFUNCTION : 'ease',` && |\n| &&
+ ` animationDuration: params[msgType].ANIMATIONDURATION ? parseInt(params[msgType].ANIMATIONDURATION) : 1000,` && |\n| &&
+ ` closeonBrowserNavigation: params[msgType].CLOSEONBROWSERNAVIGATION ? true : false` && |\n| &&
+ ` });` && |\n| &&
+ ` if (params[msgType].CLASS) {` && |\n| &&
+ ` let mtoast = {};` && |\n| &&
+ ` mtoast = document.getElementsByClassName("sapMMessageToast")[0];` && |\n| &&
+ ` if (mtoast) {` && |\n| &&
+ ` mtoast.classList.add(params[msgType].CLASS);` && |\n| &&
+ ` }` && |\n| &&
+ ` }` && |\n| &&
+ ` ;` && |\n| &&
+ ` } else if (msgType === 'S_MSG_BOX') {` && |\n| &&
+ ` if (params[msgType].TYPE) {` && |\n| &&
+ ` MessageBox[params[msgType].TYPE](params[msgType].TEXT);` && |\n| &&
+ ` } else {` && |\n| &&
+ ` MessageBox.show(params[msgType].TEXT, {` && |\n| &&
+ ` styleClass: params[msgType].STYLECLASS ? params[msgType].STYLECLASS : '',` && |\n| &&
+ ` title: params[msgType].TITLE ? params[msgType].TITLE : '',` && |\n| &&
+ ` onClose: params[msgType].ONCLOSE ? Function("sAction", "return " + params[msgType].ONCLOSE) : null,` && |\n| &&
+ ` actions: params[msgType].ACTIONS ? params[msgType].ACTIONS : 'OK',` && |\n| &&
+ ` emphasizedAction: params[msgType].EMPHASIZEDACTION ? params[msgType].EMPHASIZEDACTION : 'OK',` && |\n| &&
+ ` initialFocus: params[msgType].INITIALFOCUS ? params[msgType].INITIALFOCUS : null,` && |\n| &&
+ ` textDirection: params[msgType].TEXTDIRECTION ? params[msgType].TEXTDIRECTION : 'Inherit',` && |\n| &&
+ ` icon: params[msgType].ICON ? params[msgType].ICON : 'NONE',` && |\n| &&
+ ` details: params[msgType].DETAILS ? params[msgType].DETAILS : '',` && |\n| &&
+ ` closeOnNavigation: params[msgType].CLOSEONNAVIGATION ? true : false` && |\n| &&
+ ` })` && |\n| &&
+ ` }` && |\n| &&
+ ` }` && |\n| &&
+ ` }` && |\n| &&
+ ` },` && |\n| &&
+ ` setApp(oApp) {` && |\n| &&
+ ` this._oApp = oApp;` && |\n| &&
+ ` },` && |\n| &&
+ ` async displayView(xml, viewModel) {` && |\n| &&
+ ` let oview_model = new JSONModel(viewModel);` && |\n| &&
+ ` z2ui5.oView = await XMLView.create({` && |\n| &&
+ ` definition: xml,` && |\n| &&
+ ` models: oview_model,` && |\n| &&
+ ` controller: z2ui5.oController,` && |\n| &&
+ ` id: 'mainView',` && |\n| &&
+ ` preprocessors: {` && |\n| &&
+ ` xml: {` && |\n| &&
+ ` models: {` && |\n| &&
+ ` template: oview_model` && |\n| &&
+ ` }` && |\n| &&
+ ` }` && |\n| &&
+ ` }` && |\n| &&
+ ` });` && |\n| &&
+ ` z2ui5.oView.setModel(z2ui5.oDeviceModel, "device");` && |\n| &&
+ ` this._oApp.removeAllPages();` && |\n| &&
+ ` this._oApp.insertPage(z2ui5.oView);` && |\n| &&
+ ` },` && |\n| &&
+ ` })` && |\n| &&
+ `});` && |\n| &&
+ ``.
+
+ ENDMETHOD.
+
+ENDCLASS.
diff --git a/src/01/99/z2ui5_cl_app_cont_view1_js.clas.xml b/src/01/99/z2ui5_cl_app_cont_view1_js.clas.xml
new file mode 100644
index 00000000..7a2c1e21
--- /dev/null
+++ b/src/01/99/z2ui5_cl_app_cont_view1_js.clas.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+ Z2UI5_CL_APP_CONT_VIEW1_JS
+ E
+ Z2UI5_CL_APP_CONT_VIEW1_JS
+ 1
+ X
+ X
+ X
+
+
+
+
diff --git a/src/01/99/z2ui5_cl_app_css_style_css.clas.abap b/src/01/99/z2ui5_cl_app_css_style_css.clas.abap
new file mode 100644
index 00000000..51e0b079
--- /dev/null
+++ b/src/01/99/z2ui5_cl_app_css_style_css.clas.abap
@@ -0,0 +1,26 @@
+CLASS z2ui5_cl_app_css_style_css DEFINITION
+ PUBLIC
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS get
+ RETURNING
+ VALUE(result) TYPE string.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+
+
+CLASS z2ui5_cl_app_css_style_css IMPLEMENTATION.
+
+ METHOD get.
+
+ result = `/* Enter your custom styles here */` && |\n| &&
+ ``.
+
+ ENDMETHOD.
+
+ENDCLASS.
diff --git a/src/01/99/z2ui5_cl_app_css_style_css.clas.xml b/src/01/99/z2ui5_cl_app_css_style_css.clas.xml
new file mode 100644
index 00000000..e70be4f1
--- /dev/null
+++ b/src/01/99/z2ui5_cl_app_css_style_css.clas.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+ Z2UI5_CL_APP_CSS_STYLE_CSS
+ E
+ Z2UI5_CL_APP_CSS_STYLE_CSS
+ 1
+ X
+ X
+ X
+
+
+
+
diff --git a/src/01/99/z2ui5_cl_app_mode_mdls_js.clas.abap b/src/01/99/z2ui5_cl_app_mode_mdls_js.clas.abap
new file mode 100644
index 00000000..6412bbcf
--- /dev/null
+++ b/src/01/99/z2ui5_cl_app_mode_mdls_js.clas.abap
@@ -0,0 +1,44 @@
+CLASS z2ui5_cl_app_mode_mdls_js DEFINITION
+ PUBLIC
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS get
+ RETURNING
+ VALUE(result) TYPE string.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+
+
+CLASS z2ui5_cl_app_mode_mdls_js IMPLEMENTATION.
+
+ METHOD get.
+
+ result = `sap.ui.define([` && |\n| &&
+ ` "sap/ui/model/json/JSONModel",` && |\n| &&
+ ` "sap/ui/Device"` && |\n| &&
+ `],` && |\n| &&
+ `function (JSONModel, Device) {` && |\n| &&
+ ` "use strict";` && |\n| &&
+ `` && |\n| &&
+ ` return {` && |\n| &&
+ ` /**` && |\n| &&
+ ` * Provides runtime info for the device the UI5 app is running on as JSONModel` && |\n| &&
+ ` */` && |\n| &&
+ ` createDeviceModel: function () {` && |\n| &&
+ ` var oModel = new JSONModel(Device);` && |\n| &&
+ ` oModel.setDefaultBindingMode("OneWay");` && |\n| &&
+ ` return oModel;` && |\n| &&
+ ` }` && |\n| &&
+ ` };` && |\n| &&
+ `` && |\n| &&
+ `});` && |\n| &&
+ ``.
+
+ ENDMETHOD.
+
+ENDCLASS.
diff --git a/src/01/99/z2ui5_cl_app_mode_mdls_js.clas.xml b/src/01/99/z2ui5_cl_app_mode_mdls_js.clas.xml
new file mode 100644
index 00000000..1aa51a9f
--- /dev/null
+++ b/src/01/99/z2ui5_cl_app_mode_mdls_js.clas.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+ Z2UI5_CL_APP_MODE_MDLS_JS
+ E
+ Z2UI5_CL_APP_MODE_MODELS_JS
+ 1
+ X
+ X
+ X
+
+
+
+
diff --git a/src/01/99/z2ui5_cl_app_view1_xml.clas.abap b/src/01/99/z2ui5_cl_app_view1_xml.clas.abap
new file mode 100644
index 00000000..6852f34c
--- /dev/null
+++ b/src/01/99/z2ui5_cl_app_view1_xml.clas.abap
@@ -0,0 +1,30 @@
+CLASS z2ui5_cl_app_view1_xml DEFINITION
+ PUBLIC
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS get
+ RETURNING
+ VALUE(result) TYPE string.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+
+
+CLASS z2ui5_cl_app_view1_xml IMPLEMENTATION.
+
+ METHOD get.
+
+ result = `` &&
+ `` &&
+ `` &&
+ ``.
+
+ ENDMETHOD.
+
+ENDCLASS.
diff --git a/src/01/99/z2ui5_cl_app_view1_xml.clas.xml b/src/01/99/z2ui5_cl_app_view1_xml.clas.xml
new file mode 100644
index 00000000..d722d3ea
--- /dev/null
+++ b/src/01/99/z2ui5_cl_app_view1_xml.clas.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+ Z2UI5_CL_APP_VIEW1_XML
+ E
+ Z2UI5_CL_APP_VIEW_VIEW1_XML
+ 1
+ X
+ X
+ X
+
+
+
+
diff --git a/src/01/99/z2ui5_cl_app_view_app_xml.clas.abap b/src/01/99/z2ui5_cl_app_view_app_xml.clas.abap
new file mode 100644
index 00000000..349778ea
--- /dev/null
+++ b/src/01/99/z2ui5_cl_app_view_app_xml.clas.abap
@@ -0,0 +1,33 @@
+CLASS z2ui5_cl_app_view_App_xml DEFINITION
+ PUBLIC
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS get
+ RETURNING
+ VALUE(result) TYPE string.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+
+
+CLASS z2ui5_cl_app_view_App_xml IMPLEMENTATION.
+
+ METHOD get.
+
+ result = `` &&
+ ` ` &&
+ ` ` &&
+ `` &&
+ `` &&
+ ``.
+
+ ENDMETHOD.
+
+ENDCLASS.
diff --git a/src/01/99/z2ui5_cl_app_view_app_xml.clas.xml b/src/01/99/z2ui5_cl_app_view_app_xml.clas.xml
new file mode 100644
index 00000000..5e7e3571
--- /dev/null
+++ b/src/01/99/z2ui5_cl_app_view_app_xml.clas.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+ Z2UI5_CL_APP_VIEW_APP_XML
+ E
+ Z2UI5_CL_APP_VIEW_APP_XML
+ 1
+ X
+ X
+ X
+
+
+
+
diff --git a/src/01/04/z2ui5_cl_core_app_hello_w.clas.abap b/src/02/z2ui5_cl_hello_world.clas.abap
similarity index 91%
rename from src/01/04/z2ui5_cl_core_app_hello_w.clas.abap
rename to src/02/z2ui5_cl_hello_world.clas.abap
index 730c7899..c5a49e6e 100644
--- a/src/01/04/z2ui5_cl_core_app_hello_w.clas.abap
+++ b/src/02/z2ui5_cl_hello_world.clas.abap
@@ -1,4 +1,4 @@
-CLASS z2ui5_cl_core_app_hello_w DEFINITION
+CLASS z2ui5_cl_hello_world DEFINITION
PUBLIC
CREATE PUBLIC .
@@ -14,7 +14,7 @@ ENDCLASS.
-CLASS z2ui5_cl_core_app_hello_w IMPLEMENTATION.
+CLASS z2ui5_cl_hello_world IMPLEMENTATION.
METHOD z2ui5_if_app~main.
diff --git a/src/02/z2ui5_cl_hello_world.clas.xml b/src/02/z2ui5_cl_hello_world.clas.xml
new file mode 100644
index 00000000..433224d8
--- /dev/null
+++ b/src/02/z2ui5_cl_hello_world.clas.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+ Z2UI5_CL_HELLO_WORLD
+ E
+ abap2UI5 - hello world app
+ 1
+ X
+ X
+ X
+
+
+
+
diff --git a/src/02/z2ui5_cl_http_handler.clas.abap b/src/02/z2ui5_cl_http_handler.clas.abap
index eb8cd78b..ab65bb66 100644
--- a/src/02/z2ui5_cl_http_handler.clas.abap
+++ b/src/02/z2ui5_cl_http_handler.clas.abap
@@ -59,6 +59,11 @@ CLASS z2ui5_cl_http_handler DEFINITION
IMPORTING
attributes TYPE z2ui5_if_types=>ty_s_http_handler_attributes.
+ METHODS get_index_html
+ RETURNING
+ VALUE(result) TYPE string
+ ##CALLED.
+
PRIVATE SECTION.
@@ -140,6 +145,7 @@ CLASS z2ui5_cl_http_handler IMPLEMENTATION.
set_config( is_custom_config ).
ms_res-body = z2ui5_cl_ui5_index_html=>get( ms_config ).
+* ms_res-body = get_index_html( ).
NEW z2ui5_cl_core_draft_srv( )->cleanup( ).
@@ -205,4 +211,60 @@ CLASS z2ui5_cl_http_handler IMPLEMENTATION.
ENDMETHOD.
+
+ METHOD get_index_html.
+
+ IF ms_config-styles_css IS INITIAL.
+ DATA(lv_style_css) = z2ui5_cl_ui5_style_css=>get( ).
+ ELSE.
+ lv_style_css = ms_config-styles_css.
+ ENDIF.
+
+ result = `` && |\n| &&
+ `` && |\n| &&
+ `` && |\n| &&
+ ms_config-content_security_policy && |\n| &&
+ ` ` && |\n| &&
+ ` ` && |\n| &&
+ ` ` && |\n| &&
+ | { ms_config-title } \n| &&
+ | \n| &&
+ `` && |\n| &&
+ `` && |\n| &&
+ `` && |\n| &&
+ ` ` && |\n| &&
+ ` `.
+
+ ENDMETHOD.
+
ENDCLASS.