From 25b3d110719d4feb56cc6f0e690817b986084a30 Mon Sep 17 00:00:00 2001 From: petermuessig Date: Tue, 30 Jan 2024 16:57:02 +0000 Subject: [PATCH] deploy: 04493898201f1219a24496f98f2d1b4b1eafeb1a --- index.md | 131 +++++ step-01/Component-preload.js | 5 + step-01/Component-preload.js.map | 1 + step-01/README.md | 167 ++++++ step-01/index.html | 10 + step-01/manifest.json | 11 + step-02/Component-preload.js | 8 + step-02/Component-preload.js.map | 1 + step-02/README.md | 248 +++++++++ step-02/index-cdn.html | 21 + step-02/index-dbg.js | 4 + step-02/index-dbg.js.map | 1 + step-02/index.html | 21 + step-02/index.js | 2 + step-02/index.js.map | 1 + step-02/index.ts | 1 + step-02/manifest.json | 11 + step-03/Component-preload.js | 8 + step-03/Component-preload.js.map | 1 + step-03/README.md | 122 +++++ step-03/index-cdn.html | 20 + step-03/index-dbg.js | 10 + step-03/index-dbg.js.map | 1 + step-03/index.html | 20 + step-03/index.js | 2 + step-03/index.js.map | 1 + step-03/index.ts | 5 + step-03/manifest.json | 11 + step-04/Component-preload.js | 9 + step-04/Component-preload.js.map | 1 + step-04/README.md | 101 ++++ step-04/index-cdn.html | 20 + step-04/index-dbg.js | 13 + step-04/index-dbg.js.map | 1 + step-04/index.html | 20 + step-04/index.js | 2 + step-04/index.js.map | 1 + step-04/index.ts | 8 + step-04/manifest.json | 11 + step-04/view/App.view.xml | 5 + step-05/Component-preload.js | 12 + step-05/Component-preload.js.map | 1 + step-05/README.md | 96 ++++ step-05/controller/App-dbg.controller.js | 18 + step-05/controller/App-dbg.controller.js.map | 1 + step-05/controller/App.controller.js | 2 + step-05/controller/App.controller.js.map | 1 + step-05/controller/App.controller.ts | 11 + step-05/index-cdn.html | 20 + step-05/index-dbg.js | 13 + step-05/index-dbg.js.map | 1 + step-05/index.html | 20 + step-05/index.js | 2 + step-05/index.js.map | 1 + step-05/index.ts | 8 + step-05/manifest.json | 11 + step-05/view/App.view.xml | 7 + step-06/Component-preload.js | 12 + step-06/Component-preload.js.map | 1 + step-06/README.md | 52 ++ step-06/controller/App-dbg.controller.js | 17 + step-06/controller/App-dbg.controller.js.map | 1 + step-06/controller/App.controller.js | 2 + step-06/controller/App.controller.js.map | 1 + step-06/controller/App.controller.ts | 11 + step-06/index-cdn.html | 20 + step-06/index-dbg.js | 13 + step-06/index-dbg.js.map | 1 + step-06/index.html | 20 + step-06/index.js | 2 + step-06/index.js.map | 1 + step-06/index.ts | 8 + step-06/manifest.json | 11 + step-06/view/App.view.xml | 7 + step-07/Component-preload.js | 12 + step-07/Component-preload.js.map | 1 + step-07/README.md | 112 +++++ step-07/controller/App-dbg.controller.js | 28 ++ step-07/controller/App-dbg.controller.js.map | 1 + step-07/controller/App.controller.js | 2 + step-07/controller/App.controller.js.map | 1 + step-07/controller/App.controller.ts | 24 + step-07/index-cdn.html | 20 + step-07/index-dbg.js | 13 + step-07/index-dbg.js.map | 1 + step-07/index.html | 20 + step-07/index.js | 2 + step-07/index.js.map | 1 + step-07/index.ts | 8 + step-07/manifest.json | 11 + step-07/view/App.view.xml | 12 + step-08/Component-preload.js | 13 + step-08/Component-preload.js.map | 1 + step-08/README.md | 155 ++++++ step-08/controller/App-dbg.controller.js | 39 ++ step-08/controller/App-dbg.controller.js.map | 1 + step-08/controller/App.controller.js | 2 + step-08/controller/App.controller.js.map | 1 + step-08/controller/App.controller.ts | 37 ++ step-08/i18n/i18n.properties | 2 + step-08/index-cdn.html | 20 + step-08/index-dbg.js | 13 + step-08/index-dbg.js.map | 1 + step-08/index.html | 20 + step-08/index.js | 2 + step-08/index.js.map | 1 + step-08/index.ts | 8 + step-08/manifest.json | 11 + step-08/view/App.view.xml | 12 + step-09/Component-dbg.js | 41 ++ step-09/Component-dbg.js.map | 1 + step-09/Component-preload.js | 16 + step-09/Component-preload.js.map | 1 + step-09/Component.js | 2 + step-09/Component.js.map | 1 + step-09/Component.ts | 38 ++ step-09/README.md | 173 +++++++ step-09/controller/App-dbg.controller.js | 23 + step-09/controller/App-dbg.controller.js.map | 1 + step-09/controller/App.controller.js | 2 + step-09/controller/App.controller.js.map | 1 + step-09/controller/App.controller.ts | 20 + step-09/i18n/i18n.properties | 2 + step-09/index-cdn.html | 20 + step-09/index-dbg.js | 16 + step-09/index-dbg.js.map | 1 + step-09/index.html | 20 + step-09/index.js | 2 + step-09/index.js.map | 1 + step-09/index.ts | 11 + step-09/manifest.json | 11 + step-09/view/App.view.xml | 12 + step-10/Component-dbg.js | 31 ++ step-10/Component-dbg.js.map | 1 + step-10/Component-preload.js | 13 + step-10/Component-preload.js.map | 1 + step-10/Component.js | 2 + step-10/Component.js.map | 1 + step-10/Component.ts | 25 + step-10/README.md | 249 +++++++++ step-10/controller/App-dbg.controller.js | 22 + step-10/controller/App-dbg.controller.js.map | 1 + step-10/controller/App.controller.js | 2 + step-10/controller/App.controller.js.map | 1 + step-10/controller/App.controller.ts | 19 + step-10/i18n/i18n.properties | 7 + step-10/index-cdn.html | 21 + step-10/index.html | 21 + step-10/manifest.json | 53 ++ step-10/view/App.view.xml | 12 + step-11/Component-dbg.js | 31 ++ step-11/Component-dbg.js.map | 1 + step-11/Component-preload.js | 13 + step-11/Component-preload.js.map | 1 + step-11/Component.js | 2 + step-11/Component.js.map | 1 + step-11/Component.ts | 25 + step-11/README.md | 93 ++++ step-11/controller/App-dbg.controller.js | 22 + step-11/controller/App-dbg.controller.js.map | 1 + step-11/controller/App.controller.js | 2 + step-11/controller/App.controller.js.map | 1 + step-11/controller/App.controller.ts | 19 + step-11/i18n/i18n.properties | 9 + step-11/index-cdn.html | 21 + step-11/index.html | 21 + step-11/manifest.json | 53 ++ step-11/view/App.view.xml | 27 + step-12/Component-dbg.js | 31 ++ step-12/Component-dbg.js.map | 1 + step-12/Component-preload.js | 13 + step-12/Component-preload.js.map | 1 + step-12/Component.js | 2 + step-12/Component.js.map | 1 + step-12/Component.ts | 25 + step-12/README.md | 69 +++ step-12/controller/App-dbg.controller.js | 22 + step-12/controller/App-dbg.controller.js.map | 1 + step-12/controller/App.controller.js | 2 + step-12/controller/App.controller.js.map | 1 + step-12/controller/App.controller.ts | 19 + step-12/i18n/i18n.properties | 9 + step-12/index-cdn.html | 21 + step-12/index.html | 21 + step-12/manifest.json | 53 ++ step-12/view/App.view.xml | 29 ++ step-13/Component-dbg.js | 31 ++ step-13/Component-dbg.js.map | 1 + step-13/Component-preload.js | 13 + step-13/Component-preload.js.map | 1 + step-13/Component.js | 2 + step-13/Component.js.map | 1 + step-13/Component.ts | 25 + step-13/README.md | 86 ++++ step-13/controller/App-dbg.controller.js | 22 + step-13/controller/App-dbg.controller.js.map | 1 + step-13/controller/App.controller.js | 2 + step-13/controller/App.controller.js.map | 1 + step-13/controller/App.controller.ts | 19 + step-13/i18n/i18n.properties | 9 + step-13/index-cdn.html | 21 + step-13/index.html | 21 + step-13/manifest.json | 53 ++ step-13/view/App.view.xml | 34 ++ step-14/Component-dbg.js | 31 ++ step-14/Component-dbg.js.map | 1 + step-14/Component-preload.js | 13 + step-14/Component-preload.js.map | 1 + step-14/Component.js | 2 + step-14/Component.js.map | 1 + step-14/Component.ts | 25 + step-14/README.md | 148 ++++++ step-14/controller/App-dbg.controller.js | 22 + step-14/controller/App-dbg.controller.js.map | 1 + step-14/controller/App.controller.js | 2 + step-14/controller/App.controller.js.map | 1 + step-14/controller/App.controller.ts | 19 + step-14/css/style.css | 13 + step-14/i18n/i18n.properties | 9 + step-14/index-cdn.html | 21 + step-14/index.html | 21 + step-14/manifest.json | 60 +++ step-14/view/App.view.xml | 34 ++ step-15/Component-dbg.js | 31 ++ step-15/Component-dbg.js.map | 1 + step-15/Component-preload.js | 17 + step-15/Component-preload.js.map | 1 + step-15/Component.js | 2 + step-15/Component.js.map | 1 + step-15/Component.ts | 25 + step-15/README.md | 131 +++++ step-15/controller/App-dbg.controller.js | 13 + step-15/controller/App-dbg.controller.js.map | 1 + step-15/controller/App.controller.js | 2 + step-15/controller/App.controller.js.map | 1 + step-15/controller/App.controller.ts | 7 + .../controller/HelloPanel-dbg.controller.js | 22 + .../HelloPanel-dbg.controller.js.map | 1 + step-15/controller/HelloPanel.controller.js | 2 + .../controller/HelloPanel.controller.js.map | 1 + step-15/controller/HelloPanel.controller.ts | 20 + step-15/css/style.css | 13 + step-15/i18n/i18n.properties | 9 + step-15/index-cdn.html | 21 + step-15/index.html | 21 + step-15/manifest.json | 60 +++ step-15/view/App.view.xml | 18 + step-15/view/HelloPanel.view.xml | 23 + step-16/Component-dbg.js | 31 ++ step-16/Component-dbg.js.map | 1 + step-16/Component-preload.js | 18 + step-16/Component-preload.js.map | 1 + step-16/Component.js | 2 + step-16/Component.js.map | 1 + step-16/Component.ts | 25 + step-16/README.md | 163 ++++++ step-16/controller/App-dbg.controller.js | 13 + step-16/controller/App-dbg.controller.js.map | 1 + step-16/controller/App.controller.js | 2 + step-16/controller/App.controller.js.map | 1 + step-16/controller/App.controller.ts | 8 + .../controller/HelloPanel-dbg.controller.js | 33 ++ .../HelloPanel-dbg.controller.js.map | 1 + step-16/controller/HelloPanel.controller.js | 2 + .../controller/HelloPanel.controller.js.map | 1 + step-16/controller/HelloPanel.controller.ts | 33 ++ step-16/css/style.css | 13 + step-16/i18n/i18n.properties | 10 + step-16/index-cdn.html | 21 + step-16/index.html | 22 + step-16/manifest.json | 60 +++ step-16/view/App.view.xml | 18 + step-16/view/HelloDialog.fragment.xml | 7 + step-16/view/HelloPanel.view.xml | 28 ++ step-17/Component-dbg.js | 31 ++ step-17/Component-dbg.js.map | 1 + step-17/Component-preload.js | 18 + step-17/Component-preload.js.map | 1 + step-17/Component.js | 2 + step-17/Component.js.map | 1 + step-17/Component.ts | 25 + step-17/README.md | 106 ++++ step-17/controller/App-dbg.controller.js | 13 + step-17/controller/App-dbg.controller.js.map | 1 + step-17/controller/App.controller.js | 2 + step-17/controller/App.controller.js.map | 1 + step-17/controller/App.controller.ts | 8 + .../controller/HelloPanel-dbg.controller.js | 38 ++ .../HelloPanel-dbg.controller.js.map | 1 + step-17/controller/HelloPanel.controller.js | 2 + .../controller/HelloPanel.controller.js.map | 1 + step-17/controller/HelloPanel.controller.ts | 38 ++ step-17/css/style.css | 13 + step-17/i18n/i18n.properties | 11 + step-17/index-cdn.html | 21 + step-17/index.html | 21 + step-17/manifest.json | 60 +++ step-17/view/App.view.xml | 18 + step-17/view/HelloDialog.fragment.xml | 13 + step-17/view/HelloPanel.view.xml | 28 ++ step-18/Component-dbg.js | 31 ++ step-18/Component-dbg.js.map | 1 + step-18/Component-preload.js | 18 + step-18/Component-preload.js.map | 1 + step-18/Component.js | 2 + step-18/Component.js.map | 1 + step-18/Component.ts | 25 + step-18/README.md | 108 ++++ step-18/controller/App-dbg.controller.js | 13 + step-18/controller/App-dbg.controller.js.map | 1 + step-18/controller/App.controller.js | 2 + step-18/controller/App.controller.js.map | 1 + step-18/controller/App.controller.ts | 8 + .../controller/HelloPanel-dbg.controller.js | 38 ++ .../HelloPanel-dbg.controller.js.map | 1 + step-18/controller/HelloPanel.controller.js | 2 + .../controller/HelloPanel.controller.js.map | 1 + step-18/controller/HelloPanel.controller.ts | 38 ++ step-18/css/style.css | 13 + step-18/i18n/i18n.properties | 11 + step-18/index-cdn.html | 21 + step-18/index.html | 21 + step-18/manifest.json | 60 +++ step-18/view/App.view.xml | 18 + step-18/view/HelloDialog.fragment.xml | 19 + step-18/view/HelloPanel.view.xml | 29 ++ step-19/Component-dbg.js | 31 ++ step-19/Component-dbg.js.map | 1 + step-19/Component-preload.js | 19 + step-19/Component-preload.js.map | 1 + step-19/Component.js | 2 + step-19/Component.js.map | 1 + step-19/Component.ts | 25 + step-19/README.md | 214 ++++++++ step-19/controller/App-dbg.controller.js | 13 + step-19/controller/App-dbg.controller.js.map | 1 + step-19/controller/App.controller.js | 2 + step-19/controller/App.controller.js.map | 1 + step-19/controller/App.controller.ts | 8 + .../controller/HelloPanel-dbg.controller.js | 38 ++ .../HelloPanel-dbg.controller.js.map | 1 + step-19/controller/HelloPanel.controller.js | 2 + .../controller/HelloPanel.controller.js.map | 1 + step-19/controller/HelloPanel.controller.ts | 38 ++ step-19/css/style.css | 13 + step-19/i18n/i18n.properties | 14 + step-19/index-cdn.html | 21 + step-19/index.html | 21 + step-19/manifest.json | 64 +++ step-19/model/localInvoices.json | 44 ++ step-19/view/App.view.xml | 19 + step-19/view/HelloDialog.fragment.xml | 19 + step-19/view/HelloPanel.view.xml | 29 ++ step-19/view/InvoiceList.view.xml | 14 + step-20/Component-dbg.js | 31 ++ step-20/Component-dbg.js.map | 1 + step-20/Component-preload.js | 22 + step-20/Component-preload.js.map | 1 + step-20/Component.js | 2 + step-20/Component.js.map | 1 + step-20/Component.ts | 25 + step-20/README.md | 106 ++++ step-20/controller/App-dbg.controller.js | 13 + step-20/controller/App-dbg.controller.js.map | 1 + step-20/controller/App.controller.js | 2 + step-20/controller/App.controller.js.map | 1 + step-20/controller/App.controller.ts | 8 + .../controller/HelloPanel-dbg.controller.js | 38 ++ .../HelloPanel-dbg.controller.js.map | 1 + step-20/controller/HelloPanel.controller.js | 2 + .../controller/HelloPanel.controller.js.map | 1 + step-20/controller/HelloPanel.controller.ts | 38 ++ .../controller/InvoiceList-dbg.controller.js | 20 + .../InvoiceList-dbg.controller.js.map | 1 + step-20/controller/InvoiceList.controller.js | 2 + .../controller/InvoiceList.controller.js.map | 1 + step-20/controller/InvoiceList.controller.ts | 15 + step-20/css/style.css | 13 + step-20/i18n/i18n.properties | 14 + step-20/index-cdn.html | 21 + step-20/index.html | 21 + step-20/manifest.json | 64 +++ step-20/model/localInvoices.json | 44 ++ step-20/view/App.view.xml | 19 + step-20/view/HelloDialog.fragment.xml | 19 + step-20/view/HelloPanel.view.xml | 29 ++ step-20/view/InvoiceList.view.xml | 26 + step-21/Component-dbg.js | 31 ++ step-21/Component-dbg.js.map | 1 + step-21/Component-preload.js | 22 + step-21/Component-preload.js.map | 1 + step-21/Component.js | 2 + step-21/Component.js.map | 1 + step-21/Component.ts | 25 + step-21/README.md | 74 +++ step-21/controller/App-dbg.controller.js | 13 + step-21/controller/App-dbg.controller.js.map | 1 + step-21/controller/App.controller.js | 2 + step-21/controller/App.controller.js.map | 1 + step-21/controller/App.controller.ts | 8 + .../controller/HelloPanel-dbg.controller.js | 38 ++ .../HelloPanel-dbg.controller.js.map | 1 + step-21/controller/HelloPanel.controller.js | 2 + .../controller/HelloPanel.controller.js.map | 1 + step-21/controller/HelloPanel.controller.ts | 38 ++ .../controller/InvoiceList-dbg.controller.js | 20 + .../InvoiceList-dbg.controller.js.map | 1 + step-21/controller/InvoiceList.controller.js | 2 + .../controller/InvoiceList.controller.js.map | 1 + step-21/controller/InvoiceList.controller.ts | 14 + step-21/css/style.css | 13 + step-21/i18n/i18n.properties | 14 + step-21/index-cdn.html | 21 + step-21/index.html | 21 + step-21/manifest.json | 64 +++ step-21/model/localInvoices.json | 44 ++ step-21/view/App.view.xml | 18 + step-21/view/HelloDialog.fragment.xml | 19 + step-21/view/HelloPanel.view.xml | 29 ++ step-21/view/InvoiceList.view.xml | 27 + step-22/Component-dbg.js | 31 ++ step-22/Component-dbg.js.map | 1 + step-22/Component-preload.js | 25 + step-22/Component-preload.js.map | 1 + step-22/Component.js | 2 + step-22/Component.js.map | 1 + step-22/Component.ts | 25 + step-22/README.md | 157 ++++++ step-22/controller/App-dbg.controller.js | 13 + step-22/controller/App-dbg.controller.js.map | 1 + step-22/controller/App.controller.js | 2 + step-22/controller/App.controller.js.map | 1 + step-22/controller/App.controller.ts | 8 + .../controller/HelloPanel-dbg.controller.js | 38 ++ .../HelloPanel-dbg.controller.js.map | 1 + step-22/controller/HelloPanel.controller.js | 2 + .../controller/HelloPanel.controller.js.map | 1 + step-22/controller/HelloPanel.controller.ts | 38 ++ .../controller/InvoiceList-dbg.controller.js | 28 ++ .../InvoiceList-dbg.controller.js.map | 1 + step-22/controller/InvoiceList.controller.js | 2 + .../controller/InvoiceList.controller.js.map | 1 + step-22/controller/InvoiceList.controller.ts | 17 + step-22/css/style.css | 13 + step-22/i18n/i18n.properties | 17 + step-22/index-cdn.html | 21 + step-22/index.html | 21 + step-22/manifest.json | 64 +++ step-22/model/formatter-dbg.js | 23 + step-22/model/formatter-dbg.js.map | 1 + step-22/model/formatter.js | 2 + step-22/model/formatter.js.map | 1 + step-22/model/formatter.ts | 19 + step-22/model/localInvoices.json | 44 ++ step-22/view/App.view.xml | 19 + step-22/view/HelloDialog.fragment.xml | 19 + step-22/view/HelloPanel.view.xml | 29 ++ step-22/view/InvoiceList.view.xml | 34 ++ step-23/Component-dbg.js | 31 ++ step-23/Component-dbg.js.map | 1 + step-23/Component-preload.js | 25 + step-23/Component-preload.js.map | 1 + step-23/Component.js | 2 + step-23/Component.js.map | 1 + step-23/Component.ts | 25 + step-23/README.md | 114 +++++ step-23/controller/App-dbg.controller.js | 13 + step-23/controller/App-dbg.controller.js.map | 1 + step-23/controller/App.controller.js | 2 + step-23/controller/App.controller.js.map | 1 + step-23/controller/App.controller.ts | 8 + .../controller/HelloPanel-dbg.controller.js | 38 ++ .../HelloPanel-dbg.controller.js.map | 1 + step-23/controller/HelloPanel.controller.js | 2 + .../controller/HelloPanel.controller.js.map | 1 + step-23/controller/HelloPanel.controller.ts | 38 ++ .../controller/InvoiceList-dbg.controller.js | 41 ++ .../InvoiceList-dbg.controller.js.map | 1 + step-23/controller/InvoiceList.controller.js | 2 + .../controller/InvoiceList.controller.js.map | 1 + step-23/controller/InvoiceList.controller.ts | 35 ++ step-23/css/style.css | 13 + step-23/i18n/i18n.properties | 17 + step-23/index-cdn.html | 21 + step-23/index.html | 21 + step-23/manifest.json | 64 +++ step-23/model/formatter-dbg.js | 23 + step-23/model/formatter-dbg.js.map | 1 + step-23/model/formatter.js | 2 + step-23/model/formatter.js.map | 1 + step-23/model/formatter.ts | 19 + step-23/model/localInvoices.json | 44 ++ step-23/view/App.view.xml | 19 + step-23/view/HelloDialog.fragment.xml | 19 + step-23/view/HelloPanel.view.xml | 29 ++ step-23/view/InvoiceList.view.xml | 41 ++ step-24/Component-dbg.js | 31 ++ step-24/Component-dbg.js.map | 1 + step-24/Component-preload.js | 25 + step-24/Component-preload.js.map | 1 + step-24/Component.js | 2 + step-24/Component.js.map | 1 + step-24/Component.ts | 25 + step-24/README.md | 88 ++++ step-24/controller/App-dbg.controller.js | 13 + step-24/controller/App-dbg.controller.js.map | 1 + step-24/controller/App.controller.js | 2 + step-24/controller/App.controller.js.map | 1 + step-24/controller/App.controller.ts | 8 + .../controller/HelloPanel-dbg.controller.js | 38 ++ .../HelloPanel-dbg.controller.js.map | 1 + step-24/controller/HelloPanel.controller.js | 2 + .../controller/HelloPanel.controller.js.map | 1 + step-24/controller/HelloPanel.controller.ts | 38 ++ .../controller/InvoiceList-dbg.controller.js | 41 ++ .../InvoiceList-dbg.controller.js.map | 1 + step-24/controller/InvoiceList.controller.js | 2 + .../controller/InvoiceList.controller.js.map | 1 + step-24/controller/InvoiceList.controller.ts | 35 ++ step-24/css/style.css | 13 + step-24/i18n/i18n.properties | 17 + step-24/index-cdn.html | 21 + step-24/index.html | 21 + step-24/manifest.json | 64 +++ step-24/model/formatter-dbg.js | 23 + step-24/model/formatter-dbg.js.map | 1 + step-24/model/formatter.js | 2 + step-24/model/formatter.js.map | 1 + step-24/model/formatter.ts | 19 + step-24/model/localInvoices.json | 44 ++ step-24/view/App.view.xml | 19 + step-24/view/HelloDialog.fragment.xml | 19 + step-24/view/HelloPanel.view.xml | 29 ++ step-24/view/InvoiceList.view.xml | 47 ++ step-25/Component-dbg.js | 31 ++ step-25/Component-dbg.js.map | 1 + step-25/Component-preload.js | 25 + step-25/Component-preload.js.map | 1 + step-25/Component.js | 2 + step-25/Component.js.map | 1 + step-25/Component.ts | 25 + step-25/README.md | 151 ++++++ step-25/controller/App-dbg.controller.js | 13 + step-25/controller/App-dbg.controller.js.map | 1 + step-25/controller/App.controller.js | 2 + step-25/controller/App.controller.js.map | 1 + step-25/controller/App.controller.ts | 8 + .../controller/HelloPanel-dbg.controller.js | 38 ++ .../HelloPanel-dbg.controller.js.map | 1 + step-25/controller/HelloPanel.controller.js | 2 + .../controller/HelloPanel.controller.js.map | 1 + step-25/controller/HelloPanel.controller.ts | 38 ++ .../controller/InvoiceList-dbg.controller.js | 41 ++ .../InvoiceList-dbg.controller.js.map | 1 + step-25/controller/InvoiceList.controller.js | 2 + .../controller/InvoiceList.controller.js.map | 1 + step-25/controller/InvoiceList.controller.ts | 35 ++ step-25/css/style.css | 13 + step-25/i18n/i18n.properties | 17 + step-25/index-cdn.html | 21 + step-25/index.html | 21 + step-25/manifest.json | 72 +++ step-25/model/formatter-dbg.js | 23 + step-25/model/formatter-dbg.js.map | 1 + step-25/model/formatter.js | 2 + step-25/model/formatter.js.map | 1 + step-25/model/formatter.ts | 19 + step-25/view/App.view.xml | 19 + step-25/view/HelloDialog.fragment.xml | 19 + step-25/view/HelloPanel.view.xml | 29 ++ step-25/view/InvoiceList.view.xml | 47 ++ step-26/Component-dbg.js | 31 ++ step-26/Component-dbg.js.map | 1 + step-26/Component-preload.js | 28 ++ step-26/Component-preload.js.map | 1 + step-26/Component.js | 2 + step-26/Component.js.map | 1 + step-26/Component.ts | 25 + step-26/README.md | 279 +++++++++++ step-26/controller/App-dbg.controller.js | 13 + step-26/controller/App-dbg.controller.js.map | 1 + step-26/controller/App.controller.js | 2 + step-26/controller/App.controller.js.map | 1 + step-26/controller/App.controller.ts | 8 + .../controller/HelloPanel-dbg.controller.js | 38 ++ .../HelloPanel-dbg.controller.js.map | 1 + step-26/controller/HelloPanel.controller.js | 2 + .../controller/HelloPanel.controller.js.map | 1 + step-26/controller/HelloPanel.controller.ts | 38 ++ .../controller/InvoiceList-dbg.controller.js | 41 ++ .../InvoiceList-dbg.controller.js.map | 1 + step-26/controller/InvoiceList.controller.js | 2 + .../controller/InvoiceList.controller.js.map | 1 + step-26/controller/InvoiceList.controller.ts | 35 ++ step-26/css/style.css | 13 + step-26/i18n/i18n.properties | 17 + step-26/index-cdn.html | 21 + step-26/index.html | 21 + step-26/localService/metadata.xml | 29 ++ step-26/localService/mockdata/Invoices.json | 42 ++ step-26/localService/mockserver-dbg.js | 30 ++ step-26/localService/mockserver-dbg.js.map | 1 + step-26/localService/mockserver.js | 2 + step-26/localService/mockserver.js.map | 1 + step-26/localService/mockserver.ts | 26 + step-26/manifest.json | 72 +++ step-26/model/formatter-dbg.js | 23 + step-26/model/formatter-dbg.js.map | 1 + step-26/model/formatter.js | 2 + step-26/model/formatter.js.map | 1 + step-26/model/formatter.ts | 19 + step-26/test/initMockServer-dbg.js | 32 ++ step-26/test/initMockServer-dbg.js.map | 1 + step-26/test/initMockServer.js | 2 + step-26/test/initMockServer.js.map | 1 + step-26/test/initMockServer.ts | 7 + step-26/test/mockServer-cdn.html | 22 + step-26/test/mockServer.html | 22 + step-26/view/App.view.xml | 19 + step-26/view/HelloDialog.fragment.xml | 19 + step-26/view/HelloPanel.view.xml | 29 ++ step-26/view/InvoiceList.view.xml | 47 ++ step-27/Component-dbg.js | 31 ++ step-27/Component-dbg.js.map | 1 + step-27/Component-preload.js | 28 ++ step-27/Component-preload.js.map | 1 + step-27/Component.js | 2 + step-27/Component.js.map | 1 + step-27/Component.ts | 25 + step-27/README.md | 166 ++++++ step-27/controller/App-dbg.controller.js | 13 + step-27/controller/App-dbg.controller.js.map | 1 + step-27/controller/App.controller.js | 2 + step-27/controller/App.controller.js.map | 1 + step-27/controller/App.controller.ts | 8 + .../controller/HelloPanel-dbg.controller.js | 38 ++ .../HelloPanel-dbg.controller.js.map | 1 + step-27/controller/HelloPanel.controller.js | 2 + .../controller/HelloPanel.controller.js.map | 1 + step-27/controller/HelloPanel.controller.ts | 38 ++ .../controller/InvoiceList-dbg.controller.js | 41 ++ .../InvoiceList-dbg.controller.js.map | 1 + step-27/controller/InvoiceList.controller.js | 2 + .../controller/InvoiceList.controller.js.map | 1 + step-27/controller/InvoiceList.controller.ts | 35 ++ step-27/css/style.css | 13 + step-27/i18n/i18n.properties | 17 + step-27/index-cdn.html | 21 + step-27/index.html | 21 + step-27/localService/metadata.xml | 29 ++ step-27/localService/mockdata/Invoices.json | 42 ++ step-27/localService/mockserver-dbg.js | 30 ++ step-27/localService/mockserver-dbg.js.map | 1 + step-27/localService/mockserver.js | 2 + step-27/localService/mockserver.js.map | 1 + step-27/localService/mockserver.ts | 26 + step-27/manifest.json | 72 +++ step-27/model/formatter-dbg.js | 23 + step-27/model/formatter-dbg.js.map | 1 + step-27/model/formatter.js | 2 + step-27/model/formatter.js.map | 1 + step-27/model/formatter.ts | 19 + step-27/test/initMockServer-dbg.js | 32 ++ step-27/test/initMockServer-dbg.js.map | 1 + step-27/test/initMockServer.js | 2 + step-27/test/initMockServer.js.map | 1 + step-27/test/initMockServer.ts | 7 + step-27/test/mockServer-cdn.html | 22 + step-27/test/mockServer.html | 22 + step-27/test/unit/model/formatter-dbg.js | 37 ++ step-27/test/unit/model/formatter-dbg.js.map | 1 + step-27/test/unit/model/formatter.js | 2 + step-27/test/unit/model/formatter.js.map | 1 + step-27/test/unit/model/formatter.ts | 34 ++ step-27/test/unit/unitTests-cdn.qunit.html | 27 + step-27/test/unit/unitTests.qunit-dbg.js | 30 ++ step-27/test/unit/unitTests.qunit-dbg.js.map | 1 + step-27/test/unit/unitTests.qunit.html | 27 + step-27/test/unit/unitTests.qunit.js | 2 + step-27/test/unit/unitTests.qunit.js.map | 1 + step-27/test/unit/unitTests.qunit.ts | 8 + step-27/view/App.view.xml | 19 + step-27/view/HelloDialog.fragment.xml | 19 + step-27/view/HelloPanel.view.xml | 29 ++ step-27/view/InvoiceList.view.xml | 47 ++ step-28/Component-dbg.js | 31 ++ step-28/Component-dbg.js.map | 1 + step-28/Component-preload.js | 28 ++ step-28/Component-preload.js.map | 1 + step-28/Component.js | 2 + step-28/Component.js.map | 1 + step-28/Component.ts | 25 + step-28/README.md | 217 ++++++++ step-28/controller/App-dbg.controller.js | 13 + step-28/controller/App-dbg.controller.js.map | 1 + step-28/controller/App.controller.js | 2 + step-28/controller/App.controller.js.map | 1 + step-28/controller/App.controller.ts | 8 + .../controller/HelloPanel-dbg.controller.js | 38 ++ .../HelloPanel-dbg.controller.js.map | 1 + step-28/controller/HelloPanel.controller.js | 2 + .../controller/HelloPanel.controller.js.map | 1 + step-28/controller/HelloPanel.controller.ts | 38 ++ .../controller/InvoiceList-dbg.controller.js | 41 ++ .../InvoiceList-dbg.controller.js.map | 1 + step-28/controller/InvoiceList.controller.js | 2 + .../controller/InvoiceList.controller.js.map | 1 + step-28/controller/InvoiceList.controller.ts | 35 ++ step-28/css/style.css | 13 + step-28/i18n/i18n.properties | 17 + step-28/index-cdn.html | 21 + step-28/index.html | 21 + step-28/localService/metadata.xml | 29 ++ step-28/localService/mockdata/Invoices.json | 42 ++ step-28/localService/mockserver-dbg.js | 30 ++ step-28/localService/mockserver-dbg.js.map | 1 + step-28/localService/mockserver.js | 2 + step-28/localService/mockserver.js.map | 1 + step-28/localService/mockserver.ts | 26 + step-28/manifest.json | 72 +++ step-28/model/formatter-dbg.js | 23 + step-28/model/formatter-dbg.js.map | 1 + step-28/model/formatter.js | 2 + step-28/model/formatter.js.map | 1 + step-28/model/formatter.ts | 19 + step-28/test/initMockServer-dbg.js | 32 ++ step-28/test/initMockServer-dbg.js.map | 1 + step-28/test/initMockServer.js | 2 + step-28/test/initMockServer.js.map | 1 + step-28/test/initMockServer.ts | 7 + .../test/integration/NavigationJourney-dbg.js | 30 ++ .../integration/NavigationJourney-dbg.js.map | 1 + step-28/test/integration/NavigationJourney.js | 2 + .../test/integration/NavigationJourney.js.map | 1 + step-28/test/integration/NavigationJourney.ts | 25 + .../test/integration/opaTests-cdn.qunit.html | 29 ++ .../test/integration/opaTests.qunit-dbg.js | 30 ++ .../integration/opaTests.qunit-dbg.js.map | 1 + step-28/test/integration/opaTests.qunit.html | 29 ++ step-28/test/integration/opaTests.qunit.js | 2 + .../test/integration/opaTests.qunit.js.map | 1 + step-28/test/integration/opaTests.qunit.ts | 9 + .../integration/pages/HelloPanelPage-dbg.js | 33 ++ .../pages/HelloPanelPage-dbg.js.map | 1 + .../test/integration/pages/HelloPanelPage.js | 2 + .../integration/pages/HelloPanelPage.js.map | 1 + .../test/integration/pages/HelloPanelPage.ts | 28 ++ step-28/test/mockServer-cdn.html | 22 + step-28/test/mockServer.html | 22 + step-28/test/unit/model/formatter-dbg.js | 37 ++ step-28/test/unit/model/formatter-dbg.js.map | 1 + step-28/test/unit/model/formatter.js | 2 + step-28/test/unit/model/formatter.js.map | 1 + step-28/test/unit/model/formatter.ts | 34 ++ step-28/test/unit/unitTests-cdn.qunit.html | 27 + step-28/test/unit/unitTests.qunit-dbg.js | 30 ++ step-28/test/unit/unitTests.qunit-dbg.js.map | 1 + step-28/test/unit/unitTests.qunit.html | 27 + step-28/test/unit/unitTests.qunit.js | 2 + step-28/test/unit/unitTests.qunit.js.map | 1 + step-28/test/unit/unitTests.qunit.ts | 8 + step-28/view/App.view.xml | 19 + step-28/view/HelloDialog.fragment.xml | 19 + step-28/view/HelloPanel.view.xml | 29 ++ step-28/view/InvoiceList.view.xml | 47 ++ step-29/Component-dbg.js | 31 ++ step-29/Component-dbg.js.map | 1 + step-29/Component-preload.js | 28 ++ step-29/Component-preload.js.map | 1 + step-29/Component.js | 2 + step-29/Component.js.map | 1 + step-29/Component.ts | 25 + step-29/README.md | 126 +++++ step-29/controller/App-dbg.controller.js | 13 + step-29/controller/App-dbg.controller.js.map | 1 + step-29/controller/App.controller.js | 2 + step-29/controller/App.controller.js.map | 1 + step-29/controller/App.controller.ts | 8 + .../controller/HelloPanel-dbg.controller.js | 38 ++ .../HelloPanel-dbg.controller.js.map | 1 + step-29/controller/HelloPanel.controller.js | 2 + .../controller/HelloPanel.controller.js.map | 1 + step-29/controller/HelloPanel.controller.ts | 38 ++ .../controller/InvoiceList-dbg.controller.js | 41 ++ .../InvoiceList-dbg.controller.js.map | 1 + step-29/controller/InvoiceList.controller.js | 2 + .../controller/InvoiceList.controller.js.map | 1 + step-29/controller/InvoiceList.controller.ts | 35 ++ step-29/css/style.css | 13 + step-29/i18n/i18n.properties | 17 + step-29/index-cdn.html | 21 + step-29/index.html | 21 + step-29/localService/metadata.xml | 29 ++ step-29/localService/mockdata/Invoices.json | 42 ++ step-29/localService/mockserver-dbg.js | 30 ++ step-29/localService/mockserver-dbg.js.map | 1 + step-29/localService/mockserver.js | 2 + step-29/localService/mockserver.js.map | 1 + step-29/localService/mockserver.ts | 26 + step-29/manifest.json | 72 +++ step-29/model/formatter-dbg.js | 23 + step-29/model/formatter-dbg.js.map | 1 + step-29/model/formatter.js | 2 + step-29/model/formatter.js.map | 1 + step-29/model/formatter.ts | 19 + step-29/test/initMockServer-dbg.js | 32 ++ step-29/test/initMockServer-dbg.js.map | 1 + step-29/test/initMockServer.js | 2 + step-29/test/initMockServer.js.map | 1 + step-29/test/initMockServer.ts | 7 + .../test/integration/NavigationJourney-dbg.js | 30 ++ .../integration/NavigationJourney-dbg.js.map | 1 + step-29/test/integration/NavigationJourney.js | 2 + .../test/integration/NavigationJourney.js.map | 1 + step-29/test/integration/NavigationJourney.ts | 25 + .../test/integration/opaTests-cdn.qunit.html | 29 ++ .../test/integration/opaTests.qunit-dbg.js | 30 ++ .../integration/opaTests.qunit-dbg.js.map | 1 + step-29/test/integration/opaTests.qunit.html | 29 ++ step-29/test/integration/opaTests.qunit.js | 2 + .../test/integration/opaTests.qunit.js.map | 1 + step-29/test/integration/opaTests.qunit.ts | 9 + .../integration/pages/HelloPanelPage-dbg.js | 33 ++ .../pages/HelloPanelPage-dbg.js.map | 1 + .../test/integration/pages/HelloPanelPage.js | 2 + .../integration/pages/HelloPanelPage.js.map | 1 + .../test/integration/pages/HelloPanelPage.ts | 28 ++ step-29/test/mockServer-cdn.html | 22 + step-29/test/mockServer.html | 22 + step-29/test/unit/model/formatter-dbg.js | 37 ++ step-29/test/unit/model/formatter-dbg.js.map | 1 + step-29/test/unit/model/formatter.js | 2 + step-29/test/unit/model/formatter.js.map | 1 + step-29/test/unit/model/formatter.ts | 34 ++ step-29/test/unit/unitTests-cdn.qunit.html | 27 + step-29/test/unit/unitTests.qunit-dbg.js | 30 ++ step-29/test/unit/unitTests.qunit-dbg.js.map | 1 + step-29/test/unit/unitTests.qunit.html | 27 + step-29/test/unit/unitTests.qunit.js | 2 + step-29/test/unit/unitTests.qunit.js.map | 1 + step-29/test/unit/unitTests.qunit.ts | 8 + step-29/view/App.view.xml | 19 + step-29/view/HelloDialog.fragment.xml | 19 + step-29/view/HelloPanel.view.xml | 29 ++ step-29/view/InvoiceList.view.xml | 47 ++ step-30/Component-dbg.js | 34 ++ step-30/Component-dbg.js.map | 1 + step-30/Component-preload.js | 30 ++ step-30/Component-preload.js.map | 1 + step-30/Component.js | 2 + step-30/Component.js.map | 1 + step-30/Component.ts | 28 ++ step-30/README.md | 320 ++++++++++++ step-30/controller/App-dbg.controller.js | 13 + step-30/controller/App-dbg.controller.js.map | 1 + step-30/controller/App.controller.js | 2 + step-30/controller/App.controller.js.map | 1 + step-30/controller/App.controller.ts | 8 + .../controller/HelloPanel-dbg.controller.js | 38 ++ .../HelloPanel-dbg.controller.js.map | 1 + step-30/controller/HelloPanel.controller.js | 2 + .../controller/HelloPanel.controller.js.map | 1 + step-30/controller/HelloPanel.controller.ts | 38 ++ .../controller/InvoiceList-dbg.controller.js | 45 ++ .../InvoiceList-dbg.controller.js.map | 1 + step-30/controller/InvoiceList.controller.js | 2 + .../controller/InvoiceList.controller.js.map | 1 + step-30/controller/InvoiceList.controller.ts | 41 ++ step-30/css/style.css | 13 + step-30/i18n/i18n.properties | 20 + step-30/index-cdn.html | 21 + step-30/index.html | 21 + step-30/localService/metadata.xml | 29 ++ step-30/localService/mockdata/Invoices.json | 42 ++ step-30/localService/mockserver-dbg.js | 30 ++ step-30/localService/mockserver-dbg.js.map | 1 + step-30/localService/mockserver.js | 2 + step-30/localService/mockserver.js.map | 1 + step-30/localService/mockserver.ts | 26 + step-30/manifest.json | 104 ++++ step-30/model/formatter-dbg.js | 23 + step-30/model/formatter-dbg.js.map | 1 + step-30/model/formatter.js | 2 + step-30/model/formatter.js.map | 1 + step-30/model/formatter.ts | 19 + step-30/test/initMockServer-dbg.js | 32 ++ step-30/test/initMockServer-dbg.js.map | 1 + step-30/test/initMockServer.js | 2 + step-30/test/initMockServer.js.map | 1 + step-30/test/initMockServer.ts | 7 + .../test/integration/NavigationJourney-dbg.js | 30 ++ .../integration/NavigationJourney-dbg.js.map | 1 + step-30/test/integration/NavigationJourney.js | 2 + .../test/integration/NavigationJourney.js.map | 1 + step-30/test/integration/NavigationJourney.ts | 25 + .../test/integration/opaTests-cdn.qunit.html | 29 ++ .../test/integration/opaTests.qunit-dbg.js | 30 ++ .../integration/opaTests.qunit-dbg.js.map | 1 + step-30/test/integration/opaTests.qunit.html | 29 ++ step-30/test/integration/opaTests.qunit.js | 2 + .../test/integration/opaTests.qunit.js.map | 1 + step-30/test/integration/opaTests.qunit.ts | 9 + .../integration/pages/HelloPanelPage-dbg.js | 33 ++ .../pages/HelloPanelPage-dbg.js.map | 1 + .../test/integration/pages/HelloPanelPage.js | 2 + .../integration/pages/HelloPanelPage.js.map | 1 + .../test/integration/pages/HelloPanelPage.ts | 28 ++ step-30/test/mockServer-cdn.html | 22 + step-30/test/mockServer.html | 22 + step-30/test/unit/model/formatter-dbg.js | 37 ++ step-30/test/unit/model/formatter-dbg.js.map | 1 + step-30/test/unit/model/formatter.js | 2 + step-30/test/unit/model/formatter.js.map | 1 + step-30/test/unit/model/formatter.ts | 34 ++ step-30/test/unit/unitTests-cdn.qunit.html | 27 + step-30/test/unit/unitTests.qunit-dbg.js | 30 ++ step-30/test/unit/unitTests.qunit-dbg.js.map | 1 + step-30/test/unit/unitTests.qunit.html | 27 + step-30/test/unit/unitTests.qunit.js | 2 + step-30/test/unit/unitTests.qunit.js.map | 1 + step-30/test/unit/unitTests.qunit.ts | 8 + step-30/view/App.view.xml | 11 + step-30/view/Detail.view.xml | 9 + step-30/view/HelloDialog.fragment.xml | 19 + step-30/view/HelloPanel.view.xml | 29 ++ step-30/view/InvoiceList.view.xml | 49 ++ step-30/view/Overview.view.xml | 12 + step-31/Component-dbg.js | 34 ++ step-31/Component-dbg.js.map | 1 + step-31/Component-preload.js | 33 ++ step-31/Component-preload.js.map | 1 + step-31/Component.js | 2 + step-31/Component.js.map | 1 + step-31/Component.ts | 28 ++ step-31/README.md | 205 ++++++++ step-31/controller/App-dbg.controller.js | 13 + step-31/controller/App-dbg.controller.js.map | 1 + step-31/controller/App.controller.js | 2 + step-31/controller/App.controller.js.map | 1 + step-31/controller/App.controller.ts | 8 + step-31/controller/Detail-dbg.controller.js | 24 + .../controller/Detail-dbg.controller.js.map | 1 + step-31/controller/Detail.controller.js | 2 + step-31/controller/Detail.controller.js.map | 1 + step-31/controller/Detail.controller.ts | 21 + .../controller/HelloPanel-dbg.controller.js | 38 ++ .../HelloPanel-dbg.controller.js.map | 1 + step-31/controller/HelloPanel.controller.js | 2 + .../controller/HelloPanel.controller.js.map | 1 + step-31/controller/HelloPanel.controller.ts | 38 ++ .../controller/InvoiceList-dbg.controller.js | 48 ++ .../InvoiceList-dbg.controller.js.map | 1 + step-31/controller/InvoiceList.controller.js | 2 + .../controller/InvoiceList.controller.js.map | 1 + step-31/controller/InvoiceList.controller.ts | 46 ++ step-31/css/style.css | 13 + step-31/i18n/i18n.properties | 20 + step-31/index-cdn.html | 21 + step-31/index.html | 21 + step-31/localService/metadata.xml | 29 ++ step-31/localService/mockdata/Invoices.json | 42 ++ step-31/localService/mockserver-dbg.js | 30 ++ step-31/localService/mockserver-dbg.js.map | 1 + step-31/localService/mockserver.js | 2 + step-31/localService/mockserver.js.map | 1 + step-31/localService/mockserver.ts | 26 + step-31/manifest.json | 104 ++++ step-31/model/formatter-dbg.js | 23 + step-31/model/formatter-dbg.js.map | 1 + step-31/model/formatter.js | 2 + step-31/model/formatter.js.map | 1 + step-31/model/formatter.ts | 19 + step-31/test/initMockServer-dbg.js | 32 ++ step-31/test/initMockServer-dbg.js.map | 1 + step-31/test/initMockServer.js | 2 + step-31/test/initMockServer.js.map | 1 + step-31/test/initMockServer.ts | 7 + .../test/integration/NavigationJourney-dbg.js | 30 ++ .../integration/NavigationJourney-dbg.js.map | 1 + step-31/test/integration/NavigationJourney.js | 2 + .../test/integration/NavigationJourney.js.map | 1 + step-31/test/integration/NavigationJourney.ts | 25 + .../test/integration/opaTests-cdn.qunit.html | 29 ++ .../test/integration/opaTests.qunit-dbg.js | 30 ++ .../integration/opaTests.qunit-dbg.js.map | 1 + step-31/test/integration/opaTests.qunit.html | 29 ++ step-31/test/integration/opaTests.qunit.js | 2 + .../test/integration/opaTests.qunit.js.map | 1 + step-31/test/integration/opaTests.qunit.ts | 9 + .../integration/pages/HelloPanelPage-dbg.js | 33 ++ .../pages/HelloPanelPage-dbg.js.map | 1 + .../test/integration/pages/HelloPanelPage.js | 2 + .../integration/pages/HelloPanelPage.js.map | 1 + .../test/integration/pages/HelloPanelPage.ts | 28 ++ step-31/test/mockServer-cdn.html | 22 + step-31/test/mockServer.html | 22 + step-31/test/unit/model/formatter-dbg.js | 37 ++ step-31/test/unit/model/formatter-dbg.js.map | 1 + step-31/test/unit/model/formatter.js | 2 + step-31/test/unit/model/formatter.js.map | 1 + step-31/test/unit/model/formatter.ts | 34 ++ step-31/test/unit/unitTests-cdn.qunit.html | 27 + step-31/test/unit/unitTests.qunit-dbg.js | 30 ++ step-31/test/unit/unitTests.qunit-dbg.js.map | 1 + step-31/test/unit/unitTests.qunit.html | 27 + step-31/test/unit/unitTests.qunit.js | 2 + step-31/test/unit/unitTests.qunit.js.map | 1 + step-31/test/unit/unitTests.qunit.ts | 8 + step-31/view/App.view.xml | 11 + step-31/view/Detail.view.xml | 11 + step-31/view/HelloDialog.fragment.xml | 19 + step-31/view/HelloPanel.view.xml | 29 ++ step-31/view/InvoiceList.view.xml | 49 ++ step-31/view/Overview.view.xml | 12 + step-32/Component-dbg.js | 34 ++ step-32/Component-dbg.js.map | 1 + step-32/Component-preload.js | 33 ++ step-32/Component-preload.js.map | 1 + step-32/Component.js | 2 + step-32/Component.js.map | 1 + step-32/Component.ts | 28 ++ step-32/README.md | 113 +++++ step-32/controller/App-dbg.controller.js | 13 + step-32/controller/App-dbg.controller.js.map | 1 + step-32/controller/App.controller.js | 2 + step-32/controller/App.controller.js.map | 1 + step-32/controller/App.controller.ts | 8 + step-32/controller/Detail-dbg.controller.js | 34 ++ .../controller/Detail-dbg.controller.js.map | 1 + step-32/controller/Detail.controller.js | 2 + step-32/controller/Detail.controller.js.map | 1 + step-32/controller/Detail.controller.ts | 34 ++ .../controller/HelloPanel-dbg.controller.js | 38 ++ .../HelloPanel-dbg.controller.js.map | 1 + step-32/controller/HelloPanel.controller.js | 2 + .../controller/HelloPanel.controller.js.map | 1 + step-32/controller/HelloPanel.controller.ts | 38 ++ .../controller/InvoiceList-dbg.controller.js | 48 ++ .../InvoiceList-dbg.controller.js.map | 1 + step-32/controller/InvoiceList.controller.js | 2 + .../controller/InvoiceList.controller.js.map | 1 + step-32/controller/InvoiceList.controller.ts | 46 ++ step-32/css/style.css | 13 + step-32/i18n/i18n.properties | 20 + step-32/index-cdn.html | 21 + step-32/index.html | 21 + step-32/localService/metadata.xml | 29 ++ step-32/localService/mockdata/Invoices.json | 42 ++ step-32/localService/mockserver-dbg.js | 30 ++ step-32/localService/mockserver-dbg.js.map | 1 + step-32/localService/mockserver.js | 2 + step-32/localService/mockserver.js.map | 1 + step-32/localService/mockserver.ts | 26 + step-32/manifest.json | 104 ++++ step-32/model/formatter-dbg.js | 23 + step-32/model/formatter-dbg.js.map | 1 + step-32/model/formatter.js | 2 + step-32/model/formatter.js.map | 1 + step-32/model/formatter.ts | 19 + step-32/test/initMockServer-dbg.js | 32 ++ step-32/test/initMockServer-dbg.js.map | 1 + step-32/test/initMockServer.js | 2 + step-32/test/initMockServer.js.map | 1 + step-32/test/initMockServer.ts | 7 + .../test/integration/NavigationJourney-dbg.js | 30 ++ .../integration/NavigationJourney-dbg.js.map | 1 + step-32/test/integration/NavigationJourney.js | 2 + .../test/integration/NavigationJourney.js.map | 1 + step-32/test/integration/NavigationJourney.ts | 25 + .../test/integration/opaTests-cdn.qunit.html | 29 ++ .../test/integration/opaTests.qunit-dbg.js | 30 ++ .../integration/opaTests.qunit-dbg.js.map | 1 + step-32/test/integration/opaTests.qunit.html | 29 ++ step-32/test/integration/opaTests.qunit.js | 2 + .../test/integration/opaTests.qunit.js.map | 1 + step-32/test/integration/opaTests.qunit.ts | 9 + .../integration/pages/HelloPanelPage-dbg.js | 33 ++ .../pages/HelloPanelPage-dbg.js.map | 1 + .../test/integration/pages/HelloPanelPage.js | 2 + .../integration/pages/HelloPanelPage.js.map | 1 + .../test/integration/pages/HelloPanelPage.ts | 28 ++ step-32/test/mockServer-cdn.html | 22 + step-32/test/mockServer.html | 22 + step-32/test/unit/model/formatter-dbg.js | 37 ++ step-32/test/unit/model/formatter-dbg.js.map | 1 + step-32/test/unit/model/formatter.js | 2 + step-32/test/unit/model/formatter.js.map | 1 + step-32/test/unit/model/formatter.ts | 34 ++ step-32/test/unit/unitTests-cdn.qunit.html | 27 + step-32/test/unit/unitTests.qunit-dbg.js | 30 ++ step-32/test/unit/unitTests.qunit-dbg.js.map | 1 + step-32/test/unit/unitTests.qunit.html | 27 + step-32/test/unit/unitTests.qunit.js | 2 + step-32/test/unit/unitTests.qunit.js.map | 1 + step-32/test/unit/unitTests.qunit.ts | 8 + step-32/view/App.view.xml | 11 + step-32/view/Detail.view.xml | 13 + step-32/view/HelloDialog.fragment.xml | 19 + step-32/view/HelloPanel.view.xml | 29 ++ step-32/view/InvoiceList.view.xml | 49 ++ step-32/view/Overview.view.xml | 12 + step-33/Component-dbg.js | 34 ++ step-33/Component-dbg.js.map | 1 + step-33/Component-preload.js | 36 ++ step-33/Component-preload.js.map | 1 + step-33/Component.js | 2 + step-33/Component.js.map | 1 + step-33/Component.ts | 28 ++ step-33/README.md | 474 ++++++++++++++++++ step-33/control/ProductRating-dbg.js | 108 ++++ step-33/control/ProductRating-dbg.js.map | 1 + step-33/control/ProductRating.js | 2 + step-33/control/ProductRating.js.map | 1 + step-33/control/ProductRating.ts | 121 +++++ step-33/controller/App-dbg.controller.js | 13 + step-33/controller/App-dbg.controller.js.map | 1 + step-33/controller/App.controller.js | 2 + step-33/controller/App.controller.js.map | 1 + step-33/controller/App.controller.ts | 8 + step-33/controller/Detail-dbg.controller.js | 40 ++ .../controller/Detail-dbg.controller.js.map | 1 + step-33/controller/Detail.controller.js | 2 + step-33/controller/Detail.controller.js.map | 1 + step-33/controller/Detail.controller.ts | 47 ++ .../controller/HelloPanel-dbg.controller.js | 38 ++ .../HelloPanel-dbg.controller.js.map | 1 + step-33/controller/HelloPanel.controller.js | 2 + .../controller/HelloPanel.controller.js.map | 1 + step-33/controller/HelloPanel.controller.ts | 38 ++ .../controller/InvoiceList-dbg.controller.js | 48 ++ .../InvoiceList-dbg.controller.js.map | 1 + step-33/controller/InvoiceList.controller.js | 2 + .../controller/InvoiceList.controller.js.map | 1 + step-33/controller/InvoiceList.controller.ts | 46 ++ step-33/css/style.css | 20 + step-33/i18n/i18n.properties | 27 + step-33/index-cdn.html | 21 + step-33/index.html | 21 + step-33/localService/metadata.xml | 29 ++ step-33/localService/mockdata/Invoices.json | 42 ++ step-33/localService/mockserver-dbg.js | 30 ++ step-33/localService/mockserver-dbg.js.map | 1 + step-33/localService/mockserver.js | 2 + step-33/localService/mockserver.js.map | 1 + step-33/localService/mockserver.ts | 26 + step-33/manifest.json | 104 ++++ step-33/model/formatter-dbg.js | 23 + step-33/model/formatter-dbg.js.map | 1 + step-33/model/formatter.js | 2 + step-33/model/formatter.js.map | 1 + step-33/model/formatter.ts | 19 + step-33/test/initMockServer-dbg.js | 32 ++ step-33/test/initMockServer-dbg.js.map | 1 + step-33/test/initMockServer.js | 2 + step-33/test/initMockServer.js.map | 1 + step-33/test/initMockServer.ts | 7 + .../test/integration/NavigationJourney-dbg.js | 30 ++ .../integration/NavigationJourney-dbg.js.map | 1 + step-33/test/integration/NavigationJourney.js | 2 + .../test/integration/NavigationJourney.js.map | 1 + step-33/test/integration/NavigationJourney.ts | 25 + .../test/integration/opaTests-cdn.qunit.html | 29 ++ .../test/integration/opaTests.qunit-dbg.js | 30 ++ .../integration/opaTests.qunit-dbg.js.map | 1 + step-33/test/integration/opaTests.qunit.html | 29 ++ step-33/test/integration/opaTests.qunit.js | 2 + .../test/integration/opaTests.qunit.js.map | 1 + step-33/test/integration/opaTests.qunit.ts | 9 + .../integration/pages/HelloPanelPage-dbg.js | 33 ++ .../pages/HelloPanelPage-dbg.js.map | 1 + .../test/integration/pages/HelloPanelPage.js | 2 + .../integration/pages/HelloPanelPage.js.map | 1 + .../test/integration/pages/HelloPanelPage.ts | 28 ++ step-33/test/mockServer-cdn.html | 22 + step-33/test/mockServer.html | 22 + step-33/test/unit/model/formatter-dbg.js | 37 ++ step-33/test/unit/model/formatter-dbg.js.map | 1 + step-33/test/unit/model/formatter.js | 2 + step-33/test/unit/model/formatter.js.map | 1 + step-33/test/unit/model/formatter.ts | 34 ++ step-33/test/unit/unitTests-cdn.qunit.html | 27 + step-33/test/unit/unitTests.qunit-dbg.js | 30 ++ step-33/test/unit/unitTests.qunit-dbg.js.map | 1 + step-33/test/unit/unitTests.qunit.html | 27 + step-33/test/unit/unitTests.qunit.js | 2 + step-33/test/unit/unitTests.qunit.js.map | 1 + step-33/test/unit/unitTests.qunit.ts | 8 + step-33/view/App.view.xml | 11 + step-33/view/Detail.view.xml | 19 + step-33/view/HelloDialog.fragment.xml | 19 + step-33/view/HelloPanel.view.xml | 29 ++ step-33/view/InvoiceList.view.xml | 49 ++ step-33/view/Overview.view.xml | 12 + step-34/Component-dbg.js | 34 ++ step-34/Component-dbg.js.map | 1 + step-34/Component-preload.js | 36 ++ step-34/Component-preload.js.map | 1 + step-34/Component.js | 2 + step-34/Component.js.map | 1 + step-34/Component.ts | 28 ++ step-34/README.md | 199 ++++++++ step-34/control/ProductRating-dbg.js | 108 ++++ step-34/control/ProductRating-dbg.js.map | 1 + step-34/control/ProductRating.js | 2 + step-34/control/ProductRating.js.map | 1 + step-34/control/ProductRating.ts | 121 +++++ step-34/controller/App-dbg.controller.js | 13 + step-34/controller/App-dbg.controller.js.map | 1 + step-34/controller/App.controller.js | 2 + step-34/controller/App.controller.js.map | 1 + step-34/controller/App.controller.ts | 8 + step-34/controller/Detail-dbg.controller.js | 40 ++ .../controller/Detail-dbg.controller.js.map | 1 + step-34/controller/Detail.controller.js | 2 + step-34/controller/Detail.controller.js.map | 1 + step-34/controller/Detail.controller.ts | 47 ++ .../controller/HelloPanel-dbg.controller.js | 38 ++ .../HelloPanel-dbg.controller.js.map | 1 + step-34/controller/HelloPanel.controller.js | 2 + .../controller/HelloPanel.controller.js.map | 1 + step-34/controller/HelloPanel.controller.ts | 38 ++ .../controller/InvoiceList-dbg.controller.js | 48 ++ .../InvoiceList-dbg.controller.js.map | 1 + step-34/controller/InvoiceList.controller.js | 2 + .../controller/InvoiceList.controller.js.map | 1 + step-34/controller/InvoiceList.controller.ts | 46 ++ step-34/css/style.css | 19 + step-34/i18n/i18n.properties | 32 ++ step-34/index-cdn.html | 21 + step-34/index.html | 21 + step-34/localService/metadata.xml | 29 ++ step-34/localService/mockdata/Invoices.json | 42 ++ step-34/localService/mockserver-dbg.js | 30 ++ step-34/localService/mockserver-dbg.js.map | 1 + step-34/localService/mockserver.js | 2 + step-34/localService/mockserver.js.map | 1 + step-34/localService/mockserver.ts | 26 + step-34/manifest.json | 104 ++++ step-34/model/formatter-dbg.js | 23 + step-34/model/formatter-dbg.js.map | 1 + step-34/model/formatter.js | 2 + step-34/model/formatter.js.map | 1 + step-34/model/formatter.ts | 19 + step-34/test/initMockServer-dbg.js | 32 ++ step-34/test/initMockServer-dbg.js.map | 1 + step-34/test/initMockServer.js | 2 + step-34/test/initMockServer.js.map | 1 + step-34/test/initMockServer.ts | 7 + .../test/integration/NavigationJourney-dbg.js | 30 ++ .../integration/NavigationJourney-dbg.js.map | 1 + step-34/test/integration/NavigationJourney.js | 2 + .../test/integration/NavigationJourney.js.map | 1 + step-34/test/integration/NavigationJourney.ts | 25 + .../test/integration/opaTests-cdn.qunit.html | 29 ++ .../test/integration/opaTests.qunit-dbg.js | 30 ++ .../integration/opaTests.qunit-dbg.js.map | 1 + step-34/test/integration/opaTests.qunit.html | 29 ++ step-34/test/integration/opaTests.qunit.js | 2 + .../test/integration/opaTests.qunit.js.map | 1 + step-34/test/integration/opaTests.qunit.ts | 9 + .../integration/pages/HelloPanelPage-dbg.js | 33 ++ .../pages/HelloPanelPage-dbg.js.map | 1 + .../test/integration/pages/HelloPanelPage.js | 2 + .../integration/pages/HelloPanelPage.js.map | 1 + .../test/integration/pages/HelloPanelPage.ts | 28 ++ step-34/test/mockServer-cdn.html | 22 + step-34/test/mockServer.html | 22 + step-34/test/unit/model/formatter-dbg.js | 37 ++ step-34/test/unit/model/formatter-dbg.js.map | 1 + step-34/test/unit/model/formatter.js | 2 + step-34/test/unit/model/formatter.js.map | 1 + step-34/test/unit/model/formatter.ts | 34 ++ step-34/test/unit/unitTests-cdn.qunit.html | 27 + step-34/test/unit/unitTests.qunit-dbg.js | 30 ++ step-34/test/unit/unitTests.qunit-dbg.js.map | 1 + step-34/test/unit/unitTests.qunit.html | 27 + step-34/test/unit/unitTests.qunit.js | 2 + step-34/test/unit/unitTests.qunit.js.map | 1 + step-34/test/unit/unitTests.qunit.ts | 8 + step-34/view/App.view.xml | 11 + step-34/view/Detail.view.xml | 19 + step-34/view/HelloDialog.fragment.xml | 19 + step-34/view/HelloPanel.view.xml | 29 ++ step-34/view/InvoiceList.view.xml | 82 +++ step-34/view/Overview.view.xml | 12 + step-35/Component-dbg.js | 39 ++ step-35/Component-dbg.js.map | 1 + step-35/Component-preload.js | 36 ++ step-35/Component-preload.js.map | 1 + step-35/Component.js | 2 + step-35/Component.js.map | 1 + step-35/Component.ts | 34 ++ step-35/README.md | 239 +++++++++ step-35/control/ProductRating-dbg.js | 108 ++++ step-35/control/ProductRating-dbg.js.map | 1 + step-35/control/ProductRating.js | 2 + step-35/control/ProductRating.js.map | 1 + step-35/control/ProductRating.ts | 121 +++++ step-35/controller/App-dbg.controller.js | 13 + step-35/controller/App-dbg.controller.js.map | 1 + step-35/controller/App.controller.js | 2 + step-35/controller/App.controller.js.map | 1 + step-35/controller/App.controller.ts | 8 + step-35/controller/Detail-dbg.controller.js | 44 ++ .../controller/Detail-dbg.controller.js.map | 1 + step-35/controller/Detail.controller.js | 2 + step-35/controller/Detail.controller.js.map | 1 + step-35/controller/Detail.controller.ts | 53 ++ .../controller/HelloPanel-dbg.controller.js | 38 ++ .../HelloPanel-dbg.controller.js.map | 1 + step-35/controller/HelloPanel.controller.js | 2 + .../controller/HelloPanel.controller.js.map | 1 + step-35/controller/HelloPanel.controller.ts | 38 ++ .../controller/InvoiceList-dbg.controller.js | 48 ++ .../InvoiceList-dbg.controller.js.map | 1 + step-35/controller/InvoiceList.controller.js | 2 + .../controller/InvoiceList.controller.js.map | 1 + step-35/controller/InvoiceList.controller.ts | 46 ++ step-35/css/style.css | 19 + step-35/i18n/i18n.properties | 34 ++ step-35/index-cdn.html | 21 + step-35/index.html | 21 + step-35/localService/metadata.xml | 29 ++ step-35/localService/mockdata/Invoices.json | 42 ++ step-35/localService/mockserver-dbg.js | 30 ++ step-35/localService/mockserver-dbg.js.map | 1 + step-35/localService/mockserver.js | 2 + step-35/localService/mockserver.js.map | 1 + step-35/localService/mockserver.ts | 26 + step-35/manifest.json | 104 ++++ step-35/model/formatter-dbg.js | 23 + step-35/model/formatter-dbg.js.map | 1 + step-35/model/formatter.js | 2 + step-35/model/formatter.js.map | 1 + step-35/model/formatter.ts | 19 + step-35/test/initMockServer-dbg.js | 32 ++ step-35/test/initMockServer-dbg.js.map | 1 + step-35/test/initMockServer.js | 2 + step-35/test/initMockServer.js.map | 1 + step-35/test/initMockServer.ts | 7 + .../test/integration/NavigationJourney-dbg.js | 30 ++ .../integration/NavigationJourney-dbg.js.map | 1 + step-35/test/integration/NavigationJourney.js | 2 + .../test/integration/NavigationJourney.js.map | 1 + step-35/test/integration/NavigationJourney.ts | 25 + .../test/integration/opaTests-cdn.qunit.html | 29 ++ .../test/integration/opaTests.qunit-dbg.js | 30 ++ .../integration/opaTests.qunit-dbg.js.map | 1 + step-35/test/integration/opaTests.qunit.html | 29 ++ step-35/test/integration/opaTests.qunit.js | 2 + .../test/integration/opaTests.qunit.js.map | 1 + step-35/test/integration/opaTests.qunit.ts | 9 + .../integration/pages/HelloPanelPage-dbg.js | 33 ++ .../pages/HelloPanelPage-dbg.js.map | 1 + .../test/integration/pages/HelloPanelPage.js | 2 + .../integration/pages/HelloPanelPage.js.map | 1 + .../test/integration/pages/HelloPanelPage.ts | 28 ++ step-35/test/mockServer-cdn.html | 22 + step-35/test/mockServer.html | 22 + step-35/test/unit/model/formatter-dbg.js | 37 ++ step-35/test/unit/model/formatter-dbg.js.map | 1 + step-35/test/unit/model/formatter.js | 2 + step-35/test/unit/model/formatter.js.map | 1 + step-35/test/unit/model/formatter.ts | 34 ++ step-35/test/unit/unitTests-cdn.qunit.html | 27 + step-35/test/unit/unitTests.qunit-dbg.js | 30 ++ step-35/test/unit/unitTests.qunit-dbg.js.map | 1 + step-35/test/unit/unitTests.qunit.html | 27 + step-35/test/unit/unitTests.qunit.js | 2 + step-35/test/unit/unitTests.qunit.js.map | 1 + step-35/test/unit/unitTests.qunit.ts | 8 + step-35/view/App.view.xml | 11 + step-35/view/Detail.view.xml | 44 ++ step-35/view/HelloDialog.fragment.xml | 19 + step-35/view/HelloPanel.view.xml | 31 ++ step-35/view/InvoiceList.view.xml | 82 +++ step-35/view/Overview.view.xml | 12 + step-36/Component-dbg.js | 42 ++ step-36/Component-dbg.js.map | 1 + step-36/Component-preload.js | 36 ++ step-36/Component-preload.js.map | 1 + step-36/Component.js | 2 + step-36/Component.js.map | 1 + step-36/Component.ts | 38 ++ step-36/README.md | 108 ++++ step-36/control/ProductRating-dbg.js | 108 ++++ step-36/control/ProductRating-dbg.js.map | 1 + step-36/control/ProductRating.js | 2 + step-36/control/ProductRating.js.map | 1 + step-36/control/ProductRating.ts | 121 +++++ step-36/controller/App-dbg.controller.js | 17 + step-36/controller/App-dbg.controller.js.map | 1 + step-36/controller/App.controller.js | 2 + step-36/controller/App.controller.js.map | 1 + step-36/controller/App.controller.ts | 11 + step-36/controller/Detail-dbg.controller.js | 44 ++ .../controller/Detail-dbg.controller.js.map | 1 + step-36/controller/Detail.controller.js | 2 + step-36/controller/Detail.controller.js.map | 1 + step-36/controller/Detail.controller.ts | 53 ++ .../controller/HelloPanel-dbg.controller.js | 38 ++ .../HelloPanel-dbg.controller.js.map | 1 + step-36/controller/HelloPanel.controller.js | 2 + .../controller/HelloPanel.controller.js.map | 1 + step-36/controller/HelloPanel.controller.ts | 38 ++ .../controller/InvoiceList-dbg.controller.js | 48 ++ .../InvoiceList-dbg.controller.js.map | 1 + step-36/controller/InvoiceList.controller.js | 2 + .../controller/InvoiceList.controller.js.map | 1 + step-36/controller/InvoiceList.controller.ts | 46 ++ step-36/css/style.css | 19 + step-36/i18n/i18n.properties | 34 ++ step-36/index-cdn.html | 21 + step-36/index.html | 21 + step-36/localService/metadata.xml | 29 ++ step-36/localService/mockdata/Invoices.json | 42 ++ step-36/localService/mockserver-dbg.js | 30 ++ step-36/localService/mockserver-dbg.js.map | 1 + step-36/localService/mockserver.js | 2 + step-36/localService/mockserver.js.map | 1 + step-36/localService/mockserver.ts | 26 + step-36/manifest.json | 108 ++++ step-36/model/formatter-dbg.js | 23 + step-36/model/formatter-dbg.js.map | 1 + step-36/model/formatter.js | 2 + step-36/model/formatter.js.map | 1 + step-36/model/formatter.ts | 19 + step-36/test/initMockServer-dbg.js | 32 ++ step-36/test/initMockServer-dbg.js.map | 1 + step-36/test/initMockServer.js | 2 + step-36/test/initMockServer.js.map | 1 + step-36/test/initMockServer.ts | 7 + .../test/integration/NavigationJourney-dbg.js | 30 ++ .../integration/NavigationJourney-dbg.js.map | 1 + step-36/test/integration/NavigationJourney.js | 2 + .../test/integration/NavigationJourney.js.map | 1 + step-36/test/integration/NavigationJourney.ts | 25 + .../test/integration/opaTests-cdn.qunit.html | 29 ++ .../test/integration/opaTests.qunit-dbg.js | 30 ++ .../integration/opaTests.qunit-dbg.js.map | 1 + step-36/test/integration/opaTests.qunit.html | 29 ++ step-36/test/integration/opaTests.qunit.js | 2 + .../test/integration/opaTests.qunit.js.map | 1 + step-36/test/integration/opaTests.qunit.ts | 9 + .../integration/pages/HelloPanelPage-dbg.js | 33 ++ .../pages/HelloPanelPage-dbg.js.map | 1 + .../test/integration/pages/HelloPanelPage.js | 2 + .../integration/pages/HelloPanelPage.js.map | 1 + .../test/integration/pages/HelloPanelPage.ts | 28 ++ step-36/test/mockServer-cdn.html | 22 + step-36/test/mockServer.html | 22 + step-36/test/unit/model/formatter-dbg.js | 37 ++ step-36/test/unit/model/formatter-dbg.js.map | 1 + step-36/test/unit/model/formatter.js | 2 + step-36/test/unit/model/formatter.js.map | 1 + step-36/test/unit/model/formatter.ts | 34 ++ step-36/test/unit/unitTests-cdn.qunit.html | 27 + step-36/test/unit/unitTests.qunit-dbg.js | 30 ++ step-36/test/unit/unitTests.qunit-dbg.js.map | 1 + step-36/test/unit/unitTests.qunit.html | 27 + step-36/test/unit/unitTests.qunit.js | 2 + step-36/test/unit/unitTests.qunit.js.map | 1 + step-36/test/unit/unitTests.qunit.ts | 8 + step-36/view/App.view.xml | 11 + step-36/view/Detail.view.xml | 50 ++ step-36/view/HelloDialog.fragment.xml | 19 + step-36/view/HelloPanel.view.xml | 31 ++ step-36/view/InvoiceList.view.xml | 82 +++ step-36/view/Overview.view.xml | 12 + step-37/Component-dbg.js | 42 ++ step-37/Component-dbg.js.map | 1 + step-37/Component-preload.js | 36 ++ step-37/Component-preload.js.map | 1 + step-37/Component.js | 2 + step-37/Component.js.map | 1 + step-37/Component.ts | 38 ++ step-37/README.md | 193 +++++++ step-37/control/ProductRating-dbg.js | 108 ++++ step-37/control/ProductRating-dbg.js.map | 1 + step-37/control/ProductRating.js | 2 + step-37/control/ProductRating.js.map | 1 + step-37/control/ProductRating.ts | 121 +++++ step-37/controller/App-dbg.controller.js | 17 + step-37/controller/App-dbg.controller.js.map | 1 + step-37/controller/App.controller.js | 2 + step-37/controller/App.controller.js.map | 1 + step-37/controller/App.controller.ts | 11 + step-37/controller/Detail-dbg.controller.js | 44 ++ .../controller/Detail-dbg.controller.js.map | 1 + step-37/controller/Detail.controller.js | 2 + step-37/controller/Detail.controller.js.map | 1 + step-37/controller/Detail.controller.ts | 53 ++ .../controller/HelloPanel-dbg.controller.js | 38 ++ .../HelloPanel-dbg.controller.js.map | 1 + step-37/controller/HelloPanel.controller.js | 2 + .../controller/HelloPanel.controller.js.map | 1 + step-37/controller/HelloPanel.controller.ts | 38 ++ .../controller/InvoiceList-dbg.controller.js | 48 ++ .../InvoiceList-dbg.controller.js.map | 1 + step-37/controller/InvoiceList.controller.js | 2 + .../controller/InvoiceList.controller.js.map | 1 + step-37/controller/InvoiceList.controller.ts | 46 ++ step-37/css/style.css | 19 + step-37/i18n/i18n.properties | 39 ++ step-37/index-cdn.html | 21 + step-37/index.html | 21 + step-37/localService/metadata.xml | 29 ++ step-37/localService/mockdata/Invoices.json | 42 ++ step-37/localService/mockserver-dbg.js | 30 ++ step-37/localService/mockserver-dbg.js.map | 1 + step-37/localService/mockserver.js | 2 + step-37/localService/mockserver.js.map | 1 + step-37/localService/mockserver.ts | 26 + step-37/manifest.json | 108 ++++ step-37/model/formatter-dbg.js | 23 + step-37/model/formatter-dbg.js.map | 1 + step-37/model/formatter.js | 2 + step-37/model/formatter.js.map | 1 + step-37/model/formatter.ts | 19 + step-37/test/initMockServer-dbg.js | 32 ++ step-37/test/initMockServer-dbg.js.map | 1 + step-37/test/initMockServer.js | 2 + step-37/test/initMockServer.js.map | 1 + step-37/test/initMockServer.ts | 7 + .../test/integration/NavigationJourney-dbg.js | 30 ++ .../integration/NavigationJourney-dbg.js.map | 1 + step-37/test/integration/NavigationJourney.js | 2 + .../test/integration/NavigationJourney.js.map | 1 + step-37/test/integration/NavigationJourney.ts | 25 + .../test/integration/opaTests-cdn.qunit.html | 29 ++ .../test/integration/opaTests.qunit-dbg.js | 30 ++ .../integration/opaTests.qunit-dbg.js.map | 1 + step-37/test/integration/opaTests.qunit.html | 29 ++ step-37/test/integration/opaTests.qunit.js | 2 + .../test/integration/opaTests.qunit.js.map | 1 + step-37/test/integration/opaTests.qunit.ts | 9 + .../integration/pages/HelloPanelPage-dbg.js | 33 ++ .../pages/HelloPanelPage-dbg.js.map | 1 + .../test/integration/pages/HelloPanelPage.js | 2 + .../integration/pages/HelloPanelPage.js.map | 1 + .../test/integration/pages/HelloPanelPage.ts | 28 ++ step-37/test/mockServer-cdn.html | 22 + step-37/test/mockServer.html | 22 + step-37/test/unit/model/formatter-dbg.js | 37 ++ step-37/test/unit/model/formatter-dbg.js.map | 1 + step-37/test/unit/model/formatter.js | 2 + step-37/test/unit/model/formatter.js.map | 1 + step-37/test/unit/model/formatter.ts | 34 ++ step-37/test/unit/unitTests-cdn.qunit.html | 27 + step-37/test/unit/unitTests.qunit-dbg.js | 30 ++ step-37/test/unit/unitTests.qunit-dbg.js.map | 1 + step-37/test/unit/unitTests.qunit.html | 27 + step-37/test/unit/unitTests.qunit.js | 2 + step-37/test/unit/unitTests.qunit.js.map | 1 + step-37/test/unit/unitTests.qunit.ts | 8 + step-37/view/App.view.xml | 11 + step-37/view/Detail.view.xml | 44 ++ step-37/view/HelloDialog.fragment.xml | 19 + step-37/view/HelloPanel.view.xml | 32 ++ step-37/view/InvoiceList.view.xml | 86 ++++ step-37/view/Overview.view.xml | 21 + step-38/Component-dbg.js | 42 ++ step-38/Component-dbg.js.map | 1 + step-38/Component-preload.js | 39 ++ step-38/Component-preload.js.map | 1 + step-38/Component.js | 2 + step-38/Component.js.map | 1 + step-38/Component.ts | 38 ++ step-38/README.md | 104 ++++ step-38/control/ProductRating-dbg.js | 108 ++++ step-38/control/ProductRating-dbg.js.map | 1 + step-38/control/ProductRating.js | 2 + step-38/control/ProductRating.js.map | 1 + step-38/control/ProductRating.ts | 121 +++++ step-38/controller/App-dbg.controller.js | 17 + step-38/controller/App-dbg.controller.js.map | 1 + step-38/controller/App.controller.js | 2 + step-38/controller/App.controller.js.map | 1 + step-38/controller/App.controller.ts | 11 + step-38/controller/Detail-dbg.controller.js | 44 ++ .../controller/Detail-dbg.controller.js.map | 1 + step-38/controller/Detail.controller.js | 2 + step-38/controller/Detail.controller.js.map | 1 + step-38/controller/Detail.controller.ts | 53 ++ .../controller/HelloPanel-dbg.controller.js | 38 ++ .../HelloPanel-dbg.controller.js.map | 1 + step-38/controller/HelloPanel.controller.js | 2 + .../controller/HelloPanel.controller.js.map | 1 + step-38/controller/HelloPanel.controller.ts | 38 ++ .../controller/InvoiceList-dbg.controller.js | 48 ++ .../InvoiceList-dbg.controller.js.map | 1 + step-38/controller/InvoiceList.controller.js | 2 + .../controller/InvoiceList.controller.js.map | 1 + step-38/controller/InvoiceList.controller.ts | 46 ++ step-38/css/style.css | 19 + step-38/i18n/i18n.properties | 39 ++ step-38/index-cdn.html | 21 + step-38/index-dbg.js | 14 + step-38/index-dbg.js.map | 1 + step-38/index.html | 21 + step-38/index.js | 2 + step-38/index.js.map | 1 + step-38/index.ts | 9 + step-38/localService/metadata.xml | 29 ++ step-38/localService/mockdata/Invoices.json | 42 ++ step-38/localService/mockserver-dbg.js | 30 ++ step-38/localService/mockserver-dbg.js.map | 1 + step-38/localService/mockserver.js | 2 + step-38/localService/mockserver.js.map | 1 + step-38/localService/mockserver.ts | 26 + step-38/manifest.json | 108 ++++ step-38/model/formatter-dbg.js | 23 + step-38/model/formatter-dbg.js.map | 1 + step-38/model/formatter.js | 2 + step-38/model/formatter.js.map | 1 + step-38/model/formatter.ts | 19 + step-38/test/initMockServer-dbg.js | 32 ++ step-38/test/initMockServer-dbg.js.map | 1 + step-38/test/initMockServer.js | 2 + step-38/test/initMockServer.js.map | 1 + step-38/test/initMockServer.ts | 7 + .../test/integration/NavigationJourney-dbg.js | 30 ++ .../integration/NavigationJourney-dbg.js.map | 1 + step-38/test/integration/NavigationJourney.js | 2 + .../test/integration/NavigationJourney.js.map | 1 + step-38/test/integration/NavigationJourney.ts | 25 + .../test/integration/opaTests-cdn.qunit.html | 29 ++ .../test/integration/opaTests.qunit-dbg.js | 30 ++ .../integration/opaTests.qunit-dbg.js.map | 1 + step-38/test/integration/opaTests.qunit.html | 29 ++ step-38/test/integration/opaTests.qunit.js | 2 + .../test/integration/opaTests.qunit.js.map | 1 + step-38/test/integration/opaTests.qunit.ts | 9 + .../integration/pages/HelloPanelPage-dbg.js | 33 ++ .../pages/HelloPanelPage-dbg.js.map | 1 + .../test/integration/pages/HelloPanelPage.js | 2 + .../integration/pages/HelloPanelPage.js.map | 1 + .../test/integration/pages/HelloPanelPage.ts | 28 ++ step-38/test/mockServer-cdn.html | 22 + step-38/test/mockServer.html | 22 + step-38/test/unit/model/formatter-dbg.js | 37 ++ step-38/test/unit/model/formatter-dbg.js.map | 1 + step-38/test/unit/model/formatter.js | 2 + step-38/test/unit/model/formatter.js.map | 1 + step-38/test/unit/model/formatter.ts | 34 ++ step-38/test/unit/unitTests-cdn.qunit.html | 27 + step-38/test/unit/unitTests.qunit-dbg.js | 30 ++ step-38/test/unit/unitTests.qunit-dbg.js.map | 1 + step-38/test/unit/unitTests.qunit.html | 27 + step-38/test/unit/unitTests.qunit.js | 2 + step-38/test/unit/unitTests.qunit.js.map | 1 + step-38/test/unit/unitTests.qunit.ts | 8 + step-38/view/App.view.xml | 11 + step-38/view/Detail.view.xml | 44 ++ step-38/view/HelloDialog.fragment.xml | 19 + step-38/view/HelloPanel.view.xml | 32 ++ step-38/view/InvoiceList.view.xml | 93 ++++ step-38/view/Overview.view.xml | 21 + ui5-typescript-walkthrough-step-01.zip | Bin 0 -> 4603 bytes ui5-typescript-walkthrough-step-02.zip | Bin 0 -> 7507 bytes ui5-typescript-walkthrough-step-03.zip | Bin 0 -> 4661 bytes ui5-typescript-walkthrough-step-04.zip | Bin 0 -> 5477 bytes ui5-typescript-walkthrough-step-05.zip | Bin 0 -> 5409 bytes ui5-typescript-walkthrough-step-06.zip | Bin 0 -> 4310 bytes ui5-typescript-walkthrough-step-07.zip | Bin 0 -> 6409 bytes ui5-typescript-walkthrough-step-08.zip | Bin 0 -> 7882 bytes ui5-typescript-walkthrough-step-09.zip | Bin 0 -> 7889 bytes ui5-typescript-walkthrough-step-10.zip | Bin 0 -> 10376 bytes ui5-typescript-walkthrough-step-11.zip | Bin 0 -> 6501 bytes ui5-typescript-walkthrough-step-12.zip | Bin 0 -> 6111 bytes ui5-typescript-walkthrough-step-13.zip | Bin 0 -> 6716 bytes ui5-typescript-walkthrough-step-14.zip | Bin 0 -> 8470 bytes ui5-typescript-walkthrough-step-15.zip | Bin 0 -> 7768 bytes ui5-typescript-walkthrough-step-16.zip | Bin 0 -> 9852 bytes ui5-typescript-walkthrough-step-17.zip | Bin 0 -> 8547 bytes ui5-typescript-walkthrough-step-18.zip | Bin 0 -> 8383 bytes ui5-typescript-walkthrough-step-19.zip | Bin 0 -> 10667 bytes ui5-typescript-walkthrough-step-20.zip | Bin 0 -> 10421 bytes ui5-typescript-walkthrough-step-21.zip | Bin 0 -> 9790 bytes ui5-typescript-walkthrough-step-22.zip | Bin 0 -> 11262 bytes ui5-typescript-walkthrough-step-23.zip | Bin 0 -> 11096 bytes ui5-typescript-walkthrough-step-24.zip | Bin 0 -> 10443 bytes ui5-typescript-walkthrough-step-25.zip | Bin 0 -> 11655 bytes ui5-typescript-walkthrough-step-26.zip | Bin 0 -> 16789 bytes ui5-typescript-walkthrough-step-27.zip | Bin 0 -> 17170 bytes ui5-typescript-walkthrough-step-28.zip | Bin 0 -> 21034 bytes ui5-typescript-walkthrough-step-29.zip | Bin 0 -> 20042 bytes ui5-typescript-walkthrough-step-30.zip | Bin 0 -> 22831 bytes ui5-typescript-walkthrough-step-31.zip | Bin 0 -> 22273 bytes ui5-typescript-walkthrough-step-32.zip | Bin 0 -> 20848 bytes ui5-typescript-walkthrough-step-33.zip | Bin 0 -> 30562 bytes ui5-typescript-walkthrough-step-34.zip | Bin 0 -> 24488 bytes ui5-typescript-walkthrough-step-35.zip | Bin 0 -> 25763 bytes ui5-typescript-walkthrough-step-36.zip | Bin 0 -> 24075 bytes ui5-typescript-walkthrough-step-37.zip | Bin 0 -> 24878 bytes ui5-typescript-walkthrough-step-38.zip | Bin 0 -> 24569 bytes 1696 files changed, 32068 insertions(+) create mode 100644 index.md create mode 100644 step-01/Component-preload.js create mode 100644 step-01/Component-preload.js.map create mode 100644 step-01/README.md create mode 100644 step-01/index.html create mode 100644 step-01/manifest.json create mode 100644 step-02/Component-preload.js create mode 100644 step-02/Component-preload.js.map create mode 100644 step-02/README.md create mode 100644 step-02/index-cdn.html create mode 100644 step-02/index-dbg.js create mode 100644 step-02/index-dbg.js.map create mode 100644 step-02/index.html create mode 100644 step-02/index.js create mode 100644 step-02/index.js.map create mode 100644 step-02/index.ts create mode 100644 step-02/manifest.json create mode 100644 step-03/Component-preload.js create mode 100644 step-03/Component-preload.js.map create mode 100644 step-03/README.md create mode 100644 step-03/index-cdn.html create mode 100644 step-03/index-dbg.js create mode 100644 step-03/index-dbg.js.map create mode 100644 step-03/index.html create mode 100644 step-03/index.js create mode 100644 step-03/index.js.map create mode 100644 step-03/index.ts create mode 100644 step-03/manifest.json create mode 100644 step-04/Component-preload.js create mode 100644 step-04/Component-preload.js.map create mode 100644 step-04/README.md create mode 100644 step-04/index-cdn.html create mode 100644 step-04/index-dbg.js create mode 100644 step-04/index-dbg.js.map create mode 100644 step-04/index.html create mode 100644 step-04/index.js create mode 100644 step-04/index.js.map create mode 100644 step-04/index.ts create mode 100644 step-04/manifest.json create mode 100644 step-04/view/App.view.xml create mode 100644 step-05/Component-preload.js create mode 100644 step-05/Component-preload.js.map create mode 100644 step-05/README.md create mode 100644 step-05/controller/App-dbg.controller.js create mode 100644 step-05/controller/App-dbg.controller.js.map create mode 100644 step-05/controller/App.controller.js create mode 100644 step-05/controller/App.controller.js.map create mode 100644 step-05/controller/App.controller.ts create mode 100644 step-05/index-cdn.html create mode 100644 step-05/index-dbg.js create mode 100644 step-05/index-dbg.js.map create mode 100644 step-05/index.html create mode 100644 step-05/index.js create mode 100644 step-05/index.js.map create mode 100644 step-05/index.ts create mode 100644 step-05/manifest.json create mode 100644 step-05/view/App.view.xml create mode 100644 step-06/Component-preload.js create mode 100644 step-06/Component-preload.js.map create mode 100644 step-06/README.md create mode 100644 step-06/controller/App-dbg.controller.js create mode 100644 step-06/controller/App-dbg.controller.js.map create mode 100644 step-06/controller/App.controller.js create mode 100644 step-06/controller/App.controller.js.map create mode 100644 step-06/controller/App.controller.ts create mode 100644 step-06/index-cdn.html create mode 100644 step-06/index-dbg.js create mode 100644 step-06/index-dbg.js.map create mode 100644 step-06/index.html create mode 100644 step-06/index.js create mode 100644 step-06/index.js.map create mode 100644 step-06/index.ts create mode 100644 step-06/manifest.json create mode 100644 step-06/view/App.view.xml create mode 100644 step-07/Component-preload.js create mode 100644 step-07/Component-preload.js.map create mode 100644 step-07/README.md create mode 100644 step-07/controller/App-dbg.controller.js create mode 100644 step-07/controller/App-dbg.controller.js.map create mode 100644 step-07/controller/App.controller.js create mode 100644 step-07/controller/App.controller.js.map create mode 100644 step-07/controller/App.controller.ts create mode 100644 step-07/index-cdn.html create mode 100644 step-07/index-dbg.js create mode 100644 step-07/index-dbg.js.map create mode 100644 step-07/index.html create mode 100644 step-07/index.js create mode 100644 step-07/index.js.map create mode 100644 step-07/index.ts create mode 100644 step-07/manifest.json create mode 100644 step-07/view/App.view.xml create mode 100644 step-08/Component-preload.js create mode 100644 step-08/Component-preload.js.map create mode 100644 step-08/README.md create mode 100644 step-08/controller/App-dbg.controller.js create mode 100644 step-08/controller/App-dbg.controller.js.map create mode 100644 step-08/controller/App.controller.js create mode 100644 step-08/controller/App.controller.js.map create mode 100644 step-08/controller/App.controller.ts create mode 100644 step-08/i18n/i18n.properties create mode 100644 step-08/index-cdn.html create mode 100644 step-08/index-dbg.js create mode 100644 step-08/index-dbg.js.map create mode 100644 step-08/index.html create mode 100644 step-08/index.js create mode 100644 step-08/index.js.map create mode 100644 step-08/index.ts create mode 100644 step-08/manifest.json create mode 100644 step-08/view/App.view.xml create mode 100644 step-09/Component-dbg.js create mode 100644 step-09/Component-dbg.js.map create mode 100644 step-09/Component-preload.js create mode 100644 step-09/Component-preload.js.map create mode 100644 step-09/Component.js create mode 100644 step-09/Component.js.map create mode 100644 step-09/Component.ts create mode 100644 step-09/README.md create mode 100644 step-09/controller/App-dbg.controller.js create mode 100644 step-09/controller/App-dbg.controller.js.map create mode 100644 step-09/controller/App.controller.js create mode 100644 step-09/controller/App.controller.js.map create mode 100644 step-09/controller/App.controller.ts create mode 100644 step-09/i18n/i18n.properties create mode 100644 step-09/index-cdn.html create mode 100644 step-09/index-dbg.js create mode 100644 step-09/index-dbg.js.map create mode 100644 step-09/index.html create mode 100644 step-09/index.js create mode 100644 step-09/index.js.map create mode 100644 step-09/index.ts create mode 100644 step-09/manifest.json create mode 100644 step-09/view/App.view.xml create mode 100644 step-10/Component-dbg.js create mode 100644 step-10/Component-dbg.js.map create mode 100644 step-10/Component-preload.js create mode 100644 step-10/Component-preload.js.map create mode 100644 step-10/Component.js create mode 100644 step-10/Component.js.map create mode 100644 step-10/Component.ts create mode 100644 step-10/README.md create mode 100644 step-10/controller/App-dbg.controller.js create mode 100644 step-10/controller/App-dbg.controller.js.map create mode 100644 step-10/controller/App.controller.js create mode 100644 step-10/controller/App.controller.js.map create mode 100644 step-10/controller/App.controller.ts create mode 100644 step-10/i18n/i18n.properties create mode 100644 step-10/index-cdn.html create mode 100644 step-10/index.html create mode 100644 step-10/manifest.json create mode 100644 step-10/view/App.view.xml create mode 100644 step-11/Component-dbg.js create mode 100644 step-11/Component-dbg.js.map create mode 100644 step-11/Component-preload.js create mode 100644 step-11/Component-preload.js.map create mode 100644 step-11/Component.js create mode 100644 step-11/Component.js.map create mode 100644 step-11/Component.ts create mode 100644 step-11/README.md create mode 100644 step-11/controller/App-dbg.controller.js create mode 100644 step-11/controller/App-dbg.controller.js.map create mode 100644 step-11/controller/App.controller.js create mode 100644 step-11/controller/App.controller.js.map create mode 100644 step-11/controller/App.controller.ts create mode 100644 step-11/i18n/i18n.properties create mode 100644 step-11/index-cdn.html create mode 100644 step-11/index.html create mode 100644 step-11/manifest.json create mode 100644 step-11/view/App.view.xml create mode 100644 step-12/Component-dbg.js create mode 100644 step-12/Component-dbg.js.map create mode 100644 step-12/Component-preload.js create mode 100644 step-12/Component-preload.js.map create mode 100644 step-12/Component.js create mode 100644 step-12/Component.js.map create mode 100644 step-12/Component.ts create mode 100644 step-12/README.md create mode 100644 step-12/controller/App-dbg.controller.js create mode 100644 step-12/controller/App-dbg.controller.js.map create mode 100644 step-12/controller/App.controller.js create mode 100644 step-12/controller/App.controller.js.map create mode 100644 step-12/controller/App.controller.ts create mode 100644 step-12/i18n/i18n.properties create mode 100644 step-12/index-cdn.html create mode 100644 step-12/index.html create mode 100644 step-12/manifest.json create mode 100644 step-12/view/App.view.xml create mode 100644 step-13/Component-dbg.js create mode 100644 step-13/Component-dbg.js.map create mode 100644 step-13/Component-preload.js create mode 100644 step-13/Component-preload.js.map create mode 100644 step-13/Component.js create mode 100644 step-13/Component.js.map create mode 100644 step-13/Component.ts create mode 100644 step-13/README.md create mode 100644 step-13/controller/App-dbg.controller.js create mode 100644 step-13/controller/App-dbg.controller.js.map create mode 100644 step-13/controller/App.controller.js create mode 100644 step-13/controller/App.controller.js.map create mode 100644 step-13/controller/App.controller.ts create mode 100644 step-13/i18n/i18n.properties create mode 100644 step-13/index-cdn.html create mode 100644 step-13/index.html create mode 100644 step-13/manifest.json create mode 100644 step-13/view/App.view.xml create mode 100644 step-14/Component-dbg.js create mode 100644 step-14/Component-dbg.js.map create mode 100644 step-14/Component-preload.js create mode 100644 step-14/Component-preload.js.map create mode 100644 step-14/Component.js create mode 100644 step-14/Component.js.map create mode 100644 step-14/Component.ts create mode 100644 step-14/README.md create mode 100644 step-14/controller/App-dbg.controller.js create mode 100644 step-14/controller/App-dbg.controller.js.map create mode 100644 step-14/controller/App.controller.js create mode 100644 step-14/controller/App.controller.js.map create mode 100644 step-14/controller/App.controller.ts create mode 100644 step-14/css/style.css create mode 100644 step-14/i18n/i18n.properties create mode 100644 step-14/index-cdn.html create mode 100644 step-14/index.html create mode 100644 step-14/manifest.json create mode 100644 step-14/view/App.view.xml create mode 100644 step-15/Component-dbg.js create mode 100644 step-15/Component-dbg.js.map create mode 100644 step-15/Component-preload.js create mode 100644 step-15/Component-preload.js.map create mode 100644 step-15/Component.js create mode 100644 step-15/Component.js.map create mode 100644 step-15/Component.ts create mode 100644 step-15/README.md create mode 100644 step-15/controller/App-dbg.controller.js create mode 100644 step-15/controller/App-dbg.controller.js.map create mode 100644 step-15/controller/App.controller.js create mode 100644 step-15/controller/App.controller.js.map create mode 100644 step-15/controller/App.controller.ts create mode 100644 step-15/controller/HelloPanel-dbg.controller.js create mode 100644 step-15/controller/HelloPanel-dbg.controller.js.map create mode 100644 step-15/controller/HelloPanel.controller.js create mode 100644 step-15/controller/HelloPanel.controller.js.map create mode 100644 step-15/controller/HelloPanel.controller.ts create mode 100644 step-15/css/style.css create mode 100644 step-15/i18n/i18n.properties create mode 100644 step-15/index-cdn.html create mode 100644 step-15/index.html create mode 100644 step-15/manifest.json create mode 100644 step-15/view/App.view.xml create mode 100644 step-15/view/HelloPanel.view.xml create mode 100644 step-16/Component-dbg.js create mode 100644 step-16/Component-dbg.js.map create mode 100644 step-16/Component-preload.js create mode 100644 step-16/Component-preload.js.map create mode 100644 step-16/Component.js create mode 100644 step-16/Component.js.map create mode 100644 step-16/Component.ts create mode 100644 step-16/README.md create mode 100644 step-16/controller/App-dbg.controller.js create mode 100644 step-16/controller/App-dbg.controller.js.map create mode 100644 step-16/controller/App.controller.js create mode 100644 step-16/controller/App.controller.js.map create mode 100644 step-16/controller/App.controller.ts create mode 100644 step-16/controller/HelloPanel-dbg.controller.js create mode 100644 step-16/controller/HelloPanel-dbg.controller.js.map create mode 100644 step-16/controller/HelloPanel.controller.js create mode 100644 step-16/controller/HelloPanel.controller.js.map create mode 100644 step-16/controller/HelloPanel.controller.ts create mode 100644 step-16/css/style.css create mode 100644 step-16/i18n/i18n.properties create mode 100644 step-16/index-cdn.html create mode 100644 step-16/index.html create mode 100644 step-16/manifest.json create mode 100644 step-16/view/App.view.xml create mode 100644 step-16/view/HelloDialog.fragment.xml create mode 100644 step-16/view/HelloPanel.view.xml create mode 100644 step-17/Component-dbg.js create mode 100644 step-17/Component-dbg.js.map create mode 100644 step-17/Component-preload.js create mode 100644 step-17/Component-preload.js.map create mode 100644 step-17/Component.js create mode 100644 step-17/Component.js.map create mode 100644 step-17/Component.ts create mode 100644 step-17/README.md create mode 100644 step-17/controller/App-dbg.controller.js create mode 100644 step-17/controller/App-dbg.controller.js.map create mode 100644 step-17/controller/App.controller.js create mode 100644 step-17/controller/App.controller.js.map create mode 100644 step-17/controller/App.controller.ts create mode 100644 step-17/controller/HelloPanel-dbg.controller.js create mode 100644 step-17/controller/HelloPanel-dbg.controller.js.map create mode 100644 step-17/controller/HelloPanel.controller.js create mode 100644 step-17/controller/HelloPanel.controller.js.map create mode 100644 step-17/controller/HelloPanel.controller.ts create mode 100644 step-17/css/style.css create mode 100644 step-17/i18n/i18n.properties create mode 100644 step-17/index-cdn.html create mode 100644 step-17/index.html create mode 100644 step-17/manifest.json create mode 100644 step-17/view/App.view.xml create mode 100644 step-17/view/HelloDialog.fragment.xml create mode 100644 step-17/view/HelloPanel.view.xml create mode 100644 step-18/Component-dbg.js create mode 100644 step-18/Component-dbg.js.map create mode 100644 step-18/Component-preload.js create mode 100644 step-18/Component-preload.js.map create mode 100644 step-18/Component.js create mode 100644 step-18/Component.js.map create mode 100644 step-18/Component.ts create mode 100644 step-18/README.md create mode 100644 step-18/controller/App-dbg.controller.js create mode 100644 step-18/controller/App-dbg.controller.js.map create mode 100644 step-18/controller/App.controller.js create mode 100644 step-18/controller/App.controller.js.map create mode 100644 step-18/controller/App.controller.ts create mode 100644 step-18/controller/HelloPanel-dbg.controller.js create mode 100644 step-18/controller/HelloPanel-dbg.controller.js.map create mode 100644 step-18/controller/HelloPanel.controller.js create mode 100644 step-18/controller/HelloPanel.controller.js.map create mode 100644 step-18/controller/HelloPanel.controller.ts create mode 100644 step-18/css/style.css create mode 100644 step-18/i18n/i18n.properties create mode 100644 step-18/index-cdn.html create mode 100644 step-18/index.html create mode 100644 step-18/manifest.json create mode 100644 step-18/view/App.view.xml create mode 100644 step-18/view/HelloDialog.fragment.xml create mode 100644 step-18/view/HelloPanel.view.xml create mode 100644 step-19/Component-dbg.js create mode 100644 step-19/Component-dbg.js.map create mode 100644 step-19/Component-preload.js create mode 100644 step-19/Component-preload.js.map create mode 100644 step-19/Component.js create mode 100644 step-19/Component.js.map create mode 100644 step-19/Component.ts create mode 100644 step-19/README.md create mode 100644 step-19/controller/App-dbg.controller.js create mode 100644 step-19/controller/App-dbg.controller.js.map create mode 100644 step-19/controller/App.controller.js create mode 100644 step-19/controller/App.controller.js.map create mode 100644 step-19/controller/App.controller.ts create mode 100644 step-19/controller/HelloPanel-dbg.controller.js create mode 100644 step-19/controller/HelloPanel-dbg.controller.js.map create mode 100644 step-19/controller/HelloPanel.controller.js create mode 100644 step-19/controller/HelloPanel.controller.js.map create mode 100644 step-19/controller/HelloPanel.controller.ts create mode 100644 step-19/css/style.css create mode 100644 step-19/i18n/i18n.properties create mode 100644 step-19/index-cdn.html create mode 100644 step-19/index.html create mode 100644 step-19/manifest.json create mode 100644 step-19/model/localInvoices.json create mode 100644 step-19/view/App.view.xml create mode 100644 step-19/view/HelloDialog.fragment.xml create mode 100644 step-19/view/HelloPanel.view.xml create mode 100644 step-19/view/InvoiceList.view.xml create mode 100644 step-20/Component-dbg.js create mode 100644 step-20/Component-dbg.js.map create mode 100644 step-20/Component-preload.js create mode 100644 step-20/Component-preload.js.map create mode 100644 step-20/Component.js create mode 100644 step-20/Component.js.map create mode 100644 step-20/Component.ts create mode 100644 step-20/README.md create mode 100644 step-20/controller/App-dbg.controller.js create mode 100644 step-20/controller/App-dbg.controller.js.map create mode 100644 step-20/controller/App.controller.js create mode 100644 step-20/controller/App.controller.js.map create mode 100644 step-20/controller/App.controller.ts create mode 100644 step-20/controller/HelloPanel-dbg.controller.js create mode 100644 step-20/controller/HelloPanel-dbg.controller.js.map create mode 100644 step-20/controller/HelloPanel.controller.js create mode 100644 step-20/controller/HelloPanel.controller.js.map create mode 100644 step-20/controller/HelloPanel.controller.ts create mode 100644 step-20/controller/InvoiceList-dbg.controller.js create mode 100644 step-20/controller/InvoiceList-dbg.controller.js.map create mode 100644 step-20/controller/InvoiceList.controller.js create mode 100644 step-20/controller/InvoiceList.controller.js.map create mode 100644 step-20/controller/InvoiceList.controller.ts create mode 100644 step-20/css/style.css create mode 100644 step-20/i18n/i18n.properties create mode 100644 step-20/index-cdn.html create mode 100644 step-20/index.html create mode 100644 step-20/manifest.json create mode 100644 step-20/model/localInvoices.json create mode 100644 step-20/view/App.view.xml create mode 100644 step-20/view/HelloDialog.fragment.xml create mode 100644 step-20/view/HelloPanel.view.xml create mode 100644 step-20/view/InvoiceList.view.xml create mode 100644 step-21/Component-dbg.js create mode 100644 step-21/Component-dbg.js.map create mode 100644 step-21/Component-preload.js create mode 100644 step-21/Component-preload.js.map create mode 100644 step-21/Component.js create mode 100644 step-21/Component.js.map create mode 100644 step-21/Component.ts create mode 100644 step-21/README.md create mode 100644 step-21/controller/App-dbg.controller.js create mode 100644 step-21/controller/App-dbg.controller.js.map create mode 100644 step-21/controller/App.controller.js create mode 100644 step-21/controller/App.controller.js.map create mode 100644 step-21/controller/App.controller.ts create mode 100644 step-21/controller/HelloPanel-dbg.controller.js create mode 100644 step-21/controller/HelloPanel-dbg.controller.js.map create mode 100644 step-21/controller/HelloPanel.controller.js create mode 100644 step-21/controller/HelloPanel.controller.js.map create mode 100644 step-21/controller/HelloPanel.controller.ts create mode 100644 step-21/controller/InvoiceList-dbg.controller.js create mode 100644 step-21/controller/InvoiceList-dbg.controller.js.map create mode 100644 step-21/controller/InvoiceList.controller.js create mode 100644 step-21/controller/InvoiceList.controller.js.map create mode 100644 step-21/controller/InvoiceList.controller.ts create mode 100644 step-21/css/style.css create mode 100644 step-21/i18n/i18n.properties create mode 100644 step-21/index-cdn.html create mode 100644 step-21/index.html create mode 100644 step-21/manifest.json create mode 100644 step-21/model/localInvoices.json create mode 100644 step-21/view/App.view.xml create mode 100644 step-21/view/HelloDialog.fragment.xml create mode 100644 step-21/view/HelloPanel.view.xml create mode 100644 step-21/view/InvoiceList.view.xml create mode 100644 step-22/Component-dbg.js create mode 100644 step-22/Component-dbg.js.map create mode 100644 step-22/Component-preload.js create mode 100644 step-22/Component-preload.js.map create mode 100644 step-22/Component.js create mode 100644 step-22/Component.js.map create mode 100644 step-22/Component.ts create mode 100644 step-22/README.md create mode 100644 step-22/controller/App-dbg.controller.js create mode 100644 step-22/controller/App-dbg.controller.js.map create mode 100644 step-22/controller/App.controller.js create mode 100644 step-22/controller/App.controller.js.map create mode 100644 step-22/controller/App.controller.ts create mode 100644 step-22/controller/HelloPanel-dbg.controller.js create mode 100644 step-22/controller/HelloPanel-dbg.controller.js.map create mode 100644 step-22/controller/HelloPanel.controller.js create mode 100644 step-22/controller/HelloPanel.controller.js.map create mode 100644 step-22/controller/HelloPanel.controller.ts create mode 100644 step-22/controller/InvoiceList-dbg.controller.js create mode 100644 step-22/controller/InvoiceList-dbg.controller.js.map create mode 100644 step-22/controller/InvoiceList.controller.js create mode 100644 step-22/controller/InvoiceList.controller.js.map create mode 100644 step-22/controller/InvoiceList.controller.ts create mode 100644 step-22/css/style.css create mode 100644 step-22/i18n/i18n.properties create mode 100644 step-22/index-cdn.html create mode 100644 step-22/index.html create mode 100644 step-22/manifest.json create mode 100644 step-22/model/formatter-dbg.js create mode 100644 step-22/model/formatter-dbg.js.map create mode 100644 step-22/model/formatter.js create mode 100644 step-22/model/formatter.js.map create mode 100644 step-22/model/formatter.ts create mode 100644 step-22/model/localInvoices.json create mode 100644 step-22/view/App.view.xml create mode 100644 step-22/view/HelloDialog.fragment.xml create mode 100644 step-22/view/HelloPanel.view.xml create mode 100644 step-22/view/InvoiceList.view.xml create mode 100644 step-23/Component-dbg.js create mode 100644 step-23/Component-dbg.js.map create mode 100644 step-23/Component-preload.js create mode 100644 step-23/Component-preload.js.map create mode 100644 step-23/Component.js create mode 100644 step-23/Component.js.map create mode 100644 step-23/Component.ts create mode 100644 step-23/README.md create mode 100644 step-23/controller/App-dbg.controller.js create mode 100644 step-23/controller/App-dbg.controller.js.map create mode 100644 step-23/controller/App.controller.js create mode 100644 step-23/controller/App.controller.js.map create mode 100644 step-23/controller/App.controller.ts create mode 100644 step-23/controller/HelloPanel-dbg.controller.js create mode 100644 step-23/controller/HelloPanel-dbg.controller.js.map create mode 100644 step-23/controller/HelloPanel.controller.js create mode 100644 step-23/controller/HelloPanel.controller.js.map create mode 100644 step-23/controller/HelloPanel.controller.ts create mode 100644 step-23/controller/InvoiceList-dbg.controller.js create mode 100644 step-23/controller/InvoiceList-dbg.controller.js.map create mode 100644 step-23/controller/InvoiceList.controller.js create mode 100644 step-23/controller/InvoiceList.controller.js.map create mode 100644 step-23/controller/InvoiceList.controller.ts create mode 100644 step-23/css/style.css create mode 100644 step-23/i18n/i18n.properties create mode 100644 step-23/index-cdn.html create mode 100644 step-23/index.html create mode 100644 step-23/manifest.json create mode 100644 step-23/model/formatter-dbg.js create mode 100644 step-23/model/formatter-dbg.js.map create mode 100644 step-23/model/formatter.js create mode 100644 step-23/model/formatter.js.map create mode 100644 step-23/model/formatter.ts create mode 100644 step-23/model/localInvoices.json create mode 100644 step-23/view/App.view.xml create mode 100644 step-23/view/HelloDialog.fragment.xml create mode 100644 step-23/view/HelloPanel.view.xml create mode 100644 step-23/view/InvoiceList.view.xml create mode 100644 step-24/Component-dbg.js create mode 100644 step-24/Component-dbg.js.map create mode 100644 step-24/Component-preload.js create mode 100644 step-24/Component-preload.js.map create mode 100644 step-24/Component.js create mode 100644 step-24/Component.js.map create mode 100644 step-24/Component.ts create mode 100644 step-24/README.md create mode 100644 step-24/controller/App-dbg.controller.js create mode 100644 step-24/controller/App-dbg.controller.js.map create mode 100644 step-24/controller/App.controller.js create mode 100644 step-24/controller/App.controller.js.map create mode 100644 step-24/controller/App.controller.ts create mode 100644 step-24/controller/HelloPanel-dbg.controller.js create mode 100644 step-24/controller/HelloPanel-dbg.controller.js.map create mode 100644 step-24/controller/HelloPanel.controller.js create mode 100644 step-24/controller/HelloPanel.controller.js.map create mode 100644 step-24/controller/HelloPanel.controller.ts create mode 100644 step-24/controller/InvoiceList-dbg.controller.js create mode 100644 step-24/controller/InvoiceList-dbg.controller.js.map create mode 100644 step-24/controller/InvoiceList.controller.js create mode 100644 step-24/controller/InvoiceList.controller.js.map create mode 100644 step-24/controller/InvoiceList.controller.ts create mode 100644 step-24/css/style.css create mode 100644 step-24/i18n/i18n.properties create mode 100644 step-24/index-cdn.html create mode 100644 step-24/index.html create mode 100644 step-24/manifest.json create mode 100644 step-24/model/formatter-dbg.js create mode 100644 step-24/model/formatter-dbg.js.map create mode 100644 step-24/model/formatter.js create mode 100644 step-24/model/formatter.js.map create mode 100644 step-24/model/formatter.ts create mode 100644 step-24/model/localInvoices.json create mode 100644 step-24/view/App.view.xml create mode 100644 step-24/view/HelloDialog.fragment.xml create mode 100644 step-24/view/HelloPanel.view.xml create mode 100644 step-24/view/InvoiceList.view.xml create mode 100644 step-25/Component-dbg.js create mode 100644 step-25/Component-dbg.js.map create mode 100644 step-25/Component-preload.js create mode 100644 step-25/Component-preload.js.map create mode 100644 step-25/Component.js create mode 100644 step-25/Component.js.map create mode 100644 step-25/Component.ts create mode 100644 step-25/README.md create mode 100644 step-25/controller/App-dbg.controller.js create mode 100644 step-25/controller/App-dbg.controller.js.map create mode 100644 step-25/controller/App.controller.js create mode 100644 step-25/controller/App.controller.js.map create mode 100644 step-25/controller/App.controller.ts create mode 100644 step-25/controller/HelloPanel-dbg.controller.js create mode 100644 step-25/controller/HelloPanel-dbg.controller.js.map create mode 100644 step-25/controller/HelloPanel.controller.js create mode 100644 step-25/controller/HelloPanel.controller.js.map create mode 100644 step-25/controller/HelloPanel.controller.ts create mode 100644 step-25/controller/InvoiceList-dbg.controller.js create mode 100644 step-25/controller/InvoiceList-dbg.controller.js.map create mode 100644 step-25/controller/InvoiceList.controller.js create mode 100644 step-25/controller/InvoiceList.controller.js.map create mode 100644 step-25/controller/InvoiceList.controller.ts create mode 100644 step-25/css/style.css create mode 100644 step-25/i18n/i18n.properties create mode 100644 step-25/index-cdn.html create mode 100644 step-25/index.html create mode 100644 step-25/manifest.json create mode 100644 step-25/model/formatter-dbg.js create mode 100644 step-25/model/formatter-dbg.js.map create mode 100644 step-25/model/formatter.js create mode 100644 step-25/model/formatter.js.map create mode 100644 step-25/model/formatter.ts create mode 100644 step-25/view/App.view.xml create mode 100644 step-25/view/HelloDialog.fragment.xml create mode 100644 step-25/view/HelloPanel.view.xml create mode 100644 step-25/view/InvoiceList.view.xml create mode 100644 step-26/Component-dbg.js create mode 100644 step-26/Component-dbg.js.map create mode 100644 step-26/Component-preload.js create mode 100644 step-26/Component-preload.js.map create mode 100644 step-26/Component.js create mode 100644 step-26/Component.js.map create mode 100644 step-26/Component.ts create mode 100644 step-26/README.md create mode 100644 step-26/controller/App-dbg.controller.js create mode 100644 step-26/controller/App-dbg.controller.js.map create mode 100644 step-26/controller/App.controller.js create mode 100644 step-26/controller/App.controller.js.map create mode 100644 step-26/controller/App.controller.ts create mode 100644 step-26/controller/HelloPanel-dbg.controller.js create mode 100644 step-26/controller/HelloPanel-dbg.controller.js.map create mode 100644 step-26/controller/HelloPanel.controller.js create mode 100644 step-26/controller/HelloPanel.controller.js.map create mode 100644 step-26/controller/HelloPanel.controller.ts create mode 100644 step-26/controller/InvoiceList-dbg.controller.js create mode 100644 step-26/controller/InvoiceList-dbg.controller.js.map create mode 100644 step-26/controller/InvoiceList.controller.js create mode 100644 step-26/controller/InvoiceList.controller.js.map create mode 100644 step-26/controller/InvoiceList.controller.ts create mode 100644 step-26/css/style.css create mode 100644 step-26/i18n/i18n.properties create mode 100644 step-26/index-cdn.html create mode 100644 step-26/index.html create mode 100644 step-26/localService/metadata.xml create mode 100644 step-26/localService/mockdata/Invoices.json create mode 100644 step-26/localService/mockserver-dbg.js create mode 100644 step-26/localService/mockserver-dbg.js.map create mode 100644 step-26/localService/mockserver.js create mode 100644 step-26/localService/mockserver.js.map create mode 100644 step-26/localService/mockserver.ts create mode 100644 step-26/manifest.json create mode 100644 step-26/model/formatter-dbg.js create mode 100644 step-26/model/formatter-dbg.js.map create mode 100644 step-26/model/formatter.js create mode 100644 step-26/model/formatter.js.map create mode 100644 step-26/model/formatter.ts create mode 100644 step-26/test/initMockServer-dbg.js create mode 100644 step-26/test/initMockServer-dbg.js.map create mode 100644 step-26/test/initMockServer.js create mode 100644 step-26/test/initMockServer.js.map create mode 100644 step-26/test/initMockServer.ts create mode 100644 step-26/test/mockServer-cdn.html create mode 100644 step-26/test/mockServer.html create mode 100644 step-26/view/App.view.xml create mode 100644 step-26/view/HelloDialog.fragment.xml create mode 100644 step-26/view/HelloPanel.view.xml create mode 100644 step-26/view/InvoiceList.view.xml create mode 100644 step-27/Component-dbg.js create mode 100644 step-27/Component-dbg.js.map create mode 100644 step-27/Component-preload.js create mode 100644 step-27/Component-preload.js.map create mode 100644 step-27/Component.js create mode 100644 step-27/Component.js.map create mode 100644 step-27/Component.ts create mode 100644 step-27/README.md create mode 100644 step-27/controller/App-dbg.controller.js create mode 100644 step-27/controller/App-dbg.controller.js.map create mode 100644 step-27/controller/App.controller.js create mode 100644 step-27/controller/App.controller.js.map create mode 100644 step-27/controller/App.controller.ts create mode 100644 step-27/controller/HelloPanel-dbg.controller.js create mode 100644 step-27/controller/HelloPanel-dbg.controller.js.map create mode 100644 step-27/controller/HelloPanel.controller.js create mode 100644 step-27/controller/HelloPanel.controller.js.map create mode 100644 step-27/controller/HelloPanel.controller.ts create mode 100644 step-27/controller/InvoiceList-dbg.controller.js create mode 100644 step-27/controller/InvoiceList-dbg.controller.js.map create mode 100644 step-27/controller/InvoiceList.controller.js create mode 100644 step-27/controller/InvoiceList.controller.js.map create mode 100644 step-27/controller/InvoiceList.controller.ts create mode 100644 step-27/css/style.css create mode 100644 step-27/i18n/i18n.properties create mode 100644 step-27/index-cdn.html create mode 100644 step-27/index.html create mode 100644 step-27/localService/metadata.xml create mode 100644 step-27/localService/mockdata/Invoices.json create mode 100644 step-27/localService/mockserver-dbg.js create mode 100644 step-27/localService/mockserver-dbg.js.map create mode 100644 step-27/localService/mockserver.js create mode 100644 step-27/localService/mockserver.js.map create mode 100644 step-27/localService/mockserver.ts create mode 100644 step-27/manifest.json create mode 100644 step-27/model/formatter-dbg.js create mode 100644 step-27/model/formatter-dbg.js.map create mode 100644 step-27/model/formatter.js create mode 100644 step-27/model/formatter.js.map create mode 100644 step-27/model/formatter.ts create mode 100644 step-27/test/initMockServer-dbg.js create mode 100644 step-27/test/initMockServer-dbg.js.map create mode 100644 step-27/test/initMockServer.js create mode 100644 step-27/test/initMockServer.js.map create mode 100644 step-27/test/initMockServer.ts create mode 100644 step-27/test/mockServer-cdn.html create mode 100644 step-27/test/mockServer.html create mode 100644 step-27/test/unit/model/formatter-dbg.js create mode 100644 step-27/test/unit/model/formatter-dbg.js.map create mode 100644 step-27/test/unit/model/formatter.js create mode 100644 step-27/test/unit/model/formatter.js.map create mode 100644 step-27/test/unit/model/formatter.ts create mode 100644 step-27/test/unit/unitTests-cdn.qunit.html create mode 100644 step-27/test/unit/unitTests.qunit-dbg.js create mode 100644 step-27/test/unit/unitTests.qunit-dbg.js.map create mode 100644 step-27/test/unit/unitTests.qunit.html create mode 100644 step-27/test/unit/unitTests.qunit.js create mode 100644 step-27/test/unit/unitTests.qunit.js.map create mode 100644 step-27/test/unit/unitTests.qunit.ts create mode 100644 step-27/view/App.view.xml create mode 100644 step-27/view/HelloDialog.fragment.xml create mode 100644 step-27/view/HelloPanel.view.xml create mode 100644 step-27/view/InvoiceList.view.xml create mode 100644 step-28/Component-dbg.js create mode 100644 step-28/Component-dbg.js.map create mode 100644 step-28/Component-preload.js create mode 100644 step-28/Component-preload.js.map create mode 100644 step-28/Component.js create mode 100644 step-28/Component.js.map create mode 100644 step-28/Component.ts create mode 100644 step-28/README.md create mode 100644 step-28/controller/App-dbg.controller.js create mode 100644 step-28/controller/App-dbg.controller.js.map create mode 100644 step-28/controller/App.controller.js create mode 100644 step-28/controller/App.controller.js.map create mode 100644 step-28/controller/App.controller.ts create mode 100644 step-28/controller/HelloPanel-dbg.controller.js create mode 100644 step-28/controller/HelloPanel-dbg.controller.js.map create mode 100644 step-28/controller/HelloPanel.controller.js create mode 100644 step-28/controller/HelloPanel.controller.js.map create mode 100644 step-28/controller/HelloPanel.controller.ts create mode 100644 step-28/controller/InvoiceList-dbg.controller.js create mode 100644 step-28/controller/InvoiceList-dbg.controller.js.map create mode 100644 step-28/controller/InvoiceList.controller.js create mode 100644 step-28/controller/InvoiceList.controller.js.map create mode 100644 step-28/controller/InvoiceList.controller.ts create mode 100644 step-28/css/style.css create mode 100644 step-28/i18n/i18n.properties create mode 100644 step-28/index-cdn.html create mode 100644 step-28/index.html create mode 100644 step-28/localService/metadata.xml create mode 100644 step-28/localService/mockdata/Invoices.json create mode 100644 step-28/localService/mockserver-dbg.js create mode 100644 step-28/localService/mockserver-dbg.js.map create mode 100644 step-28/localService/mockserver.js create mode 100644 step-28/localService/mockserver.js.map create mode 100644 step-28/localService/mockserver.ts create mode 100644 step-28/manifest.json create mode 100644 step-28/model/formatter-dbg.js create mode 100644 step-28/model/formatter-dbg.js.map create mode 100644 step-28/model/formatter.js create mode 100644 step-28/model/formatter.js.map create mode 100644 step-28/model/formatter.ts create mode 100644 step-28/test/initMockServer-dbg.js create mode 100644 step-28/test/initMockServer-dbg.js.map create mode 100644 step-28/test/initMockServer.js create mode 100644 step-28/test/initMockServer.js.map create mode 100644 step-28/test/initMockServer.ts create mode 100644 step-28/test/integration/NavigationJourney-dbg.js create mode 100644 step-28/test/integration/NavigationJourney-dbg.js.map create mode 100644 step-28/test/integration/NavigationJourney.js create mode 100644 step-28/test/integration/NavigationJourney.js.map create mode 100644 step-28/test/integration/NavigationJourney.ts create mode 100644 step-28/test/integration/opaTests-cdn.qunit.html create mode 100644 step-28/test/integration/opaTests.qunit-dbg.js create mode 100644 step-28/test/integration/opaTests.qunit-dbg.js.map create mode 100644 step-28/test/integration/opaTests.qunit.html create mode 100644 step-28/test/integration/opaTests.qunit.js create mode 100644 step-28/test/integration/opaTests.qunit.js.map create mode 100644 step-28/test/integration/opaTests.qunit.ts create mode 100644 step-28/test/integration/pages/HelloPanelPage-dbg.js create mode 100644 step-28/test/integration/pages/HelloPanelPage-dbg.js.map create mode 100644 step-28/test/integration/pages/HelloPanelPage.js create mode 100644 step-28/test/integration/pages/HelloPanelPage.js.map create mode 100644 step-28/test/integration/pages/HelloPanelPage.ts create mode 100644 step-28/test/mockServer-cdn.html create mode 100644 step-28/test/mockServer.html create mode 100644 step-28/test/unit/model/formatter-dbg.js create mode 100644 step-28/test/unit/model/formatter-dbg.js.map create mode 100644 step-28/test/unit/model/formatter.js create mode 100644 step-28/test/unit/model/formatter.js.map create mode 100644 step-28/test/unit/model/formatter.ts create mode 100644 step-28/test/unit/unitTests-cdn.qunit.html create mode 100644 step-28/test/unit/unitTests.qunit-dbg.js create mode 100644 step-28/test/unit/unitTests.qunit-dbg.js.map create mode 100644 step-28/test/unit/unitTests.qunit.html create mode 100644 step-28/test/unit/unitTests.qunit.js create mode 100644 step-28/test/unit/unitTests.qunit.js.map create mode 100644 step-28/test/unit/unitTests.qunit.ts create mode 100644 step-28/view/App.view.xml create mode 100644 step-28/view/HelloDialog.fragment.xml create mode 100644 step-28/view/HelloPanel.view.xml create mode 100644 step-28/view/InvoiceList.view.xml create mode 100644 step-29/Component-dbg.js create mode 100644 step-29/Component-dbg.js.map create mode 100644 step-29/Component-preload.js create mode 100644 step-29/Component-preload.js.map create mode 100644 step-29/Component.js create mode 100644 step-29/Component.js.map create mode 100644 step-29/Component.ts create mode 100644 step-29/README.md create mode 100644 step-29/controller/App-dbg.controller.js create mode 100644 step-29/controller/App-dbg.controller.js.map create mode 100644 step-29/controller/App.controller.js create mode 100644 step-29/controller/App.controller.js.map create mode 100644 step-29/controller/App.controller.ts create mode 100644 step-29/controller/HelloPanel-dbg.controller.js create mode 100644 step-29/controller/HelloPanel-dbg.controller.js.map create mode 100644 step-29/controller/HelloPanel.controller.js create mode 100644 step-29/controller/HelloPanel.controller.js.map create mode 100644 step-29/controller/HelloPanel.controller.ts create mode 100644 step-29/controller/InvoiceList-dbg.controller.js create mode 100644 step-29/controller/InvoiceList-dbg.controller.js.map create mode 100644 step-29/controller/InvoiceList.controller.js create mode 100644 step-29/controller/InvoiceList.controller.js.map create mode 100644 step-29/controller/InvoiceList.controller.ts create mode 100644 step-29/css/style.css create mode 100644 step-29/i18n/i18n.properties create mode 100644 step-29/index-cdn.html create mode 100644 step-29/index.html create mode 100644 step-29/localService/metadata.xml create mode 100644 step-29/localService/mockdata/Invoices.json create mode 100644 step-29/localService/mockserver-dbg.js create mode 100644 step-29/localService/mockserver-dbg.js.map create mode 100644 step-29/localService/mockserver.js create mode 100644 step-29/localService/mockserver.js.map create mode 100644 step-29/localService/mockserver.ts create mode 100644 step-29/manifest.json create mode 100644 step-29/model/formatter-dbg.js create mode 100644 step-29/model/formatter-dbg.js.map create mode 100644 step-29/model/formatter.js create mode 100644 step-29/model/formatter.js.map create mode 100644 step-29/model/formatter.ts create mode 100644 step-29/test/initMockServer-dbg.js create mode 100644 step-29/test/initMockServer-dbg.js.map create mode 100644 step-29/test/initMockServer.js create mode 100644 step-29/test/initMockServer.js.map create mode 100644 step-29/test/initMockServer.ts create mode 100644 step-29/test/integration/NavigationJourney-dbg.js create mode 100644 step-29/test/integration/NavigationJourney-dbg.js.map create mode 100644 step-29/test/integration/NavigationJourney.js create mode 100644 step-29/test/integration/NavigationJourney.js.map create mode 100644 step-29/test/integration/NavigationJourney.ts create mode 100644 step-29/test/integration/opaTests-cdn.qunit.html create mode 100644 step-29/test/integration/opaTests.qunit-dbg.js create mode 100644 step-29/test/integration/opaTests.qunit-dbg.js.map create mode 100644 step-29/test/integration/opaTests.qunit.html create mode 100644 step-29/test/integration/opaTests.qunit.js create mode 100644 step-29/test/integration/opaTests.qunit.js.map create mode 100644 step-29/test/integration/opaTests.qunit.ts create mode 100644 step-29/test/integration/pages/HelloPanelPage-dbg.js create mode 100644 step-29/test/integration/pages/HelloPanelPage-dbg.js.map create mode 100644 step-29/test/integration/pages/HelloPanelPage.js create mode 100644 step-29/test/integration/pages/HelloPanelPage.js.map create mode 100644 step-29/test/integration/pages/HelloPanelPage.ts create mode 100644 step-29/test/mockServer-cdn.html create mode 100644 step-29/test/mockServer.html create mode 100644 step-29/test/unit/model/formatter-dbg.js create mode 100644 step-29/test/unit/model/formatter-dbg.js.map create mode 100644 step-29/test/unit/model/formatter.js create mode 100644 step-29/test/unit/model/formatter.js.map create mode 100644 step-29/test/unit/model/formatter.ts create mode 100644 step-29/test/unit/unitTests-cdn.qunit.html create mode 100644 step-29/test/unit/unitTests.qunit-dbg.js create mode 100644 step-29/test/unit/unitTests.qunit-dbg.js.map create mode 100644 step-29/test/unit/unitTests.qunit.html create mode 100644 step-29/test/unit/unitTests.qunit.js create mode 100644 step-29/test/unit/unitTests.qunit.js.map create mode 100644 step-29/test/unit/unitTests.qunit.ts create mode 100644 step-29/view/App.view.xml create mode 100644 step-29/view/HelloDialog.fragment.xml create mode 100644 step-29/view/HelloPanel.view.xml create mode 100644 step-29/view/InvoiceList.view.xml create mode 100644 step-30/Component-dbg.js create mode 100644 step-30/Component-dbg.js.map create mode 100644 step-30/Component-preload.js create mode 100644 step-30/Component-preload.js.map create mode 100644 step-30/Component.js create mode 100644 step-30/Component.js.map create mode 100644 step-30/Component.ts create mode 100644 step-30/README.md create mode 100644 step-30/controller/App-dbg.controller.js create mode 100644 step-30/controller/App-dbg.controller.js.map create mode 100644 step-30/controller/App.controller.js create mode 100644 step-30/controller/App.controller.js.map create mode 100644 step-30/controller/App.controller.ts create mode 100644 step-30/controller/HelloPanel-dbg.controller.js create mode 100644 step-30/controller/HelloPanel-dbg.controller.js.map create mode 100644 step-30/controller/HelloPanel.controller.js create mode 100644 step-30/controller/HelloPanel.controller.js.map create mode 100644 step-30/controller/HelloPanel.controller.ts create mode 100644 step-30/controller/InvoiceList-dbg.controller.js create mode 100644 step-30/controller/InvoiceList-dbg.controller.js.map create mode 100644 step-30/controller/InvoiceList.controller.js create mode 100644 step-30/controller/InvoiceList.controller.js.map create mode 100644 step-30/controller/InvoiceList.controller.ts create mode 100644 step-30/css/style.css create mode 100644 step-30/i18n/i18n.properties create mode 100644 step-30/index-cdn.html create mode 100644 step-30/index.html create mode 100644 step-30/localService/metadata.xml create mode 100644 step-30/localService/mockdata/Invoices.json create mode 100644 step-30/localService/mockserver-dbg.js create mode 100644 step-30/localService/mockserver-dbg.js.map create mode 100644 step-30/localService/mockserver.js create mode 100644 step-30/localService/mockserver.js.map create mode 100644 step-30/localService/mockserver.ts create mode 100644 step-30/manifest.json create mode 100644 step-30/model/formatter-dbg.js create mode 100644 step-30/model/formatter-dbg.js.map create mode 100644 step-30/model/formatter.js create mode 100644 step-30/model/formatter.js.map create mode 100644 step-30/model/formatter.ts create mode 100644 step-30/test/initMockServer-dbg.js create mode 100644 step-30/test/initMockServer-dbg.js.map create mode 100644 step-30/test/initMockServer.js create mode 100644 step-30/test/initMockServer.js.map create mode 100644 step-30/test/initMockServer.ts create mode 100644 step-30/test/integration/NavigationJourney-dbg.js create mode 100644 step-30/test/integration/NavigationJourney-dbg.js.map create mode 100644 step-30/test/integration/NavigationJourney.js create mode 100644 step-30/test/integration/NavigationJourney.js.map create mode 100644 step-30/test/integration/NavigationJourney.ts create mode 100644 step-30/test/integration/opaTests-cdn.qunit.html create mode 100644 step-30/test/integration/opaTests.qunit-dbg.js create mode 100644 step-30/test/integration/opaTests.qunit-dbg.js.map create mode 100644 step-30/test/integration/opaTests.qunit.html create mode 100644 step-30/test/integration/opaTests.qunit.js create mode 100644 step-30/test/integration/opaTests.qunit.js.map create mode 100644 step-30/test/integration/opaTests.qunit.ts create mode 100644 step-30/test/integration/pages/HelloPanelPage-dbg.js create mode 100644 step-30/test/integration/pages/HelloPanelPage-dbg.js.map create mode 100644 step-30/test/integration/pages/HelloPanelPage.js create mode 100644 step-30/test/integration/pages/HelloPanelPage.js.map create mode 100644 step-30/test/integration/pages/HelloPanelPage.ts create mode 100644 step-30/test/mockServer-cdn.html create mode 100644 step-30/test/mockServer.html create mode 100644 step-30/test/unit/model/formatter-dbg.js create mode 100644 step-30/test/unit/model/formatter-dbg.js.map create mode 100644 step-30/test/unit/model/formatter.js create mode 100644 step-30/test/unit/model/formatter.js.map create mode 100644 step-30/test/unit/model/formatter.ts create mode 100644 step-30/test/unit/unitTests-cdn.qunit.html create mode 100644 step-30/test/unit/unitTests.qunit-dbg.js create mode 100644 step-30/test/unit/unitTests.qunit-dbg.js.map create mode 100644 step-30/test/unit/unitTests.qunit.html create mode 100644 step-30/test/unit/unitTests.qunit.js create mode 100644 step-30/test/unit/unitTests.qunit.js.map create mode 100644 step-30/test/unit/unitTests.qunit.ts create mode 100644 step-30/view/App.view.xml create mode 100644 step-30/view/Detail.view.xml create mode 100644 step-30/view/HelloDialog.fragment.xml create mode 100644 step-30/view/HelloPanel.view.xml create mode 100644 step-30/view/InvoiceList.view.xml create mode 100644 step-30/view/Overview.view.xml create mode 100644 step-31/Component-dbg.js create mode 100644 step-31/Component-dbg.js.map create mode 100644 step-31/Component-preload.js create mode 100644 step-31/Component-preload.js.map create mode 100644 step-31/Component.js create mode 100644 step-31/Component.js.map create mode 100644 step-31/Component.ts create mode 100644 step-31/README.md create mode 100644 step-31/controller/App-dbg.controller.js create mode 100644 step-31/controller/App-dbg.controller.js.map create mode 100644 step-31/controller/App.controller.js create mode 100644 step-31/controller/App.controller.js.map create mode 100644 step-31/controller/App.controller.ts create mode 100644 step-31/controller/Detail-dbg.controller.js create mode 100644 step-31/controller/Detail-dbg.controller.js.map create mode 100644 step-31/controller/Detail.controller.js create mode 100644 step-31/controller/Detail.controller.js.map create mode 100644 step-31/controller/Detail.controller.ts create mode 100644 step-31/controller/HelloPanel-dbg.controller.js create mode 100644 step-31/controller/HelloPanel-dbg.controller.js.map create mode 100644 step-31/controller/HelloPanel.controller.js create mode 100644 step-31/controller/HelloPanel.controller.js.map create mode 100644 step-31/controller/HelloPanel.controller.ts create mode 100644 step-31/controller/InvoiceList-dbg.controller.js create mode 100644 step-31/controller/InvoiceList-dbg.controller.js.map create mode 100644 step-31/controller/InvoiceList.controller.js create mode 100644 step-31/controller/InvoiceList.controller.js.map create mode 100644 step-31/controller/InvoiceList.controller.ts create mode 100644 step-31/css/style.css create mode 100644 step-31/i18n/i18n.properties create mode 100644 step-31/index-cdn.html create mode 100644 step-31/index.html create mode 100644 step-31/localService/metadata.xml create mode 100644 step-31/localService/mockdata/Invoices.json create mode 100644 step-31/localService/mockserver-dbg.js create mode 100644 step-31/localService/mockserver-dbg.js.map create mode 100644 step-31/localService/mockserver.js create mode 100644 step-31/localService/mockserver.js.map create mode 100644 step-31/localService/mockserver.ts create mode 100644 step-31/manifest.json create mode 100644 step-31/model/formatter-dbg.js create mode 100644 step-31/model/formatter-dbg.js.map create mode 100644 step-31/model/formatter.js create mode 100644 step-31/model/formatter.js.map create mode 100644 step-31/model/formatter.ts create mode 100644 step-31/test/initMockServer-dbg.js create mode 100644 step-31/test/initMockServer-dbg.js.map create mode 100644 step-31/test/initMockServer.js create mode 100644 step-31/test/initMockServer.js.map create mode 100644 step-31/test/initMockServer.ts create mode 100644 step-31/test/integration/NavigationJourney-dbg.js create mode 100644 step-31/test/integration/NavigationJourney-dbg.js.map create mode 100644 step-31/test/integration/NavigationJourney.js create mode 100644 step-31/test/integration/NavigationJourney.js.map create mode 100644 step-31/test/integration/NavigationJourney.ts create mode 100644 step-31/test/integration/opaTests-cdn.qunit.html create mode 100644 step-31/test/integration/opaTests.qunit-dbg.js create mode 100644 step-31/test/integration/opaTests.qunit-dbg.js.map create mode 100644 step-31/test/integration/opaTests.qunit.html create mode 100644 step-31/test/integration/opaTests.qunit.js create mode 100644 step-31/test/integration/opaTests.qunit.js.map create mode 100644 step-31/test/integration/opaTests.qunit.ts create mode 100644 step-31/test/integration/pages/HelloPanelPage-dbg.js create mode 100644 step-31/test/integration/pages/HelloPanelPage-dbg.js.map create mode 100644 step-31/test/integration/pages/HelloPanelPage.js create mode 100644 step-31/test/integration/pages/HelloPanelPage.js.map create mode 100644 step-31/test/integration/pages/HelloPanelPage.ts create mode 100644 step-31/test/mockServer-cdn.html create mode 100644 step-31/test/mockServer.html create mode 100644 step-31/test/unit/model/formatter-dbg.js create mode 100644 step-31/test/unit/model/formatter-dbg.js.map create mode 100644 step-31/test/unit/model/formatter.js create mode 100644 step-31/test/unit/model/formatter.js.map create mode 100644 step-31/test/unit/model/formatter.ts create mode 100644 step-31/test/unit/unitTests-cdn.qunit.html create mode 100644 step-31/test/unit/unitTests.qunit-dbg.js create mode 100644 step-31/test/unit/unitTests.qunit-dbg.js.map create mode 100644 step-31/test/unit/unitTests.qunit.html create mode 100644 step-31/test/unit/unitTests.qunit.js create mode 100644 step-31/test/unit/unitTests.qunit.js.map create mode 100644 step-31/test/unit/unitTests.qunit.ts create mode 100644 step-31/view/App.view.xml create mode 100644 step-31/view/Detail.view.xml create mode 100644 step-31/view/HelloDialog.fragment.xml create mode 100644 step-31/view/HelloPanel.view.xml create mode 100644 step-31/view/InvoiceList.view.xml create mode 100644 step-31/view/Overview.view.xml create mode 100644 step-32/Component-dbg.js create mode 100644 step-32/Component-dbg.js.map create mode 100644 step-32/Component-preload.js create mode 100644 step-32/Component-preload.js.map create mode 100644 step-32/Component.js create mode 100644 step-32/Component.js.map create mode 100644 step-32/Component.ts create mode 100644 step-32/README.md create mode 100644 step-32/controller/App-dbg.controller.js create mode 100644 step-32/controller/App-dbg.controller.js.map create mode 100644 step-32/controller/App.controller.js create mode 100644 step-32/controller/App.controller.js.map create mode 100644 step-32/controller/App.controller.ts create mode 100644 step-32/controller/Detail-dbg.controller.js create mode 100644 step-32/controller/Detail-dbg.controller.js.map create mode 100644 step-32/controller/Detail.controller.js create mode 100644 step-32/controller/Detail.controller.js.map create mode 100644 step-32/controller/Detail.controller.ts create mode 100644 step-32/controller/HelloPanel-dbg.controller.js create mode 100644 step-32/controller/HelloPanel-dbg.controller.js.map create mode 100644 step-32/controller/HelloPanel.controller.js create mode 100644 step-32/controller/HelloPanel.controller.js.map create mode 100644 step-32/controller/HelloPanel.controller.ts create mode 100644 step-32/controller/InvoiceList-dbg.controller.js create mode 100644 step-32/controller/InvoiceList-dbg.controller.js.map create mode 100644 step-32/controller/InvoiceList.controller.js create mode 100644 step-32/controller/InvoiceList.controller.js.map create mode 100644 step-32/controller/InvoiceList.controller.ts create mode 100644 step-32/css/style.css create mode 100644 step-32/i18n/i18n.properties create mode 100644 step-32/index-cdn.html create mode 100644 step-32/index.html create mode 100644 step-32/localService/metadata.xml create mode 100644 step-32/localService/mockdata/Invoices.json create mode 100644 step-32/localService/mockserver-dbg.js create mode 100644 step-32/localService/mockserver-dbg.js.map create mode 100644 step-32/localService/mockserver.js create mode 100644 step-32/localService/mockserver.js.map create mode 100644 step-32/localService/mockserver.ts create mode 100644 step-32/manifest.json create mode 100644 step-32/model/formatter-dbg.js create mode 100644 step-32/model/formatter-dbg.js.map create mode 100644 step-32/model/formatter.js create mode 100644 step-32/model/formatter.js.map create mode 100644 step-32/model/formatter.ts create mode 100644 step-32/test/initMockServer-dbg.js create mode 100644 step-32/test/initMockServer-dbg.js.map create mode 100644 step-32/test/initMockServer.js create mode 100644 step-32/test/initMockServer.js.map create mode 100644 step-32/test/initMockServer.ts create mode 100644 step-32/test/integration/NavigationJourney-dbg.js create mode 100644 step-32/test/integration/NavigationJourney-dbg.js.map create mode 100644 step-32/test/integration/NavigationJourney.js create mode 100644 step-32/test/integration/NavigationJourney.js.map create mode 100644 step-32/test/integration/NavigationJourney.ts create mode 100644 step-32/test/integration/opaTests-cdn.qunit.html create mode 100644 step-32/test/integration/opaTests.qunit-dbg.js create mode 100644 step-32/test/integration/opaTests.qunit-dbg.js.map create mode 100644 step-32/test/integration/opaTests.qunit.html create mode 100644 step-32/test/integration/opaTests.qunit.js create mode 100644 step-32/test/integration/opaTests.qunit.js.map create mode 100644 step-32/test/integration/opaTests.qunit.ts create mode 100644 step-32/test/integration/pages/HelloPanelPage-dbg.js create mode 100644 step-32/test/integration/pages/HelloPanelPage-dbg.js.map create mode 100644 step-32/test/integration/pages/HelloPanelPage.js create mode 100644 step-32/test/integration/pages/HelloPanelPage.js.map create mode 100644 step-32/test/integration/pages/HelloPanelPage.ts create mode 100644 step-32/test/mockServer-cdn.html create mode 100644 step-32/test/mockServer.html create mode 100644 step-32/test/unit/model/formatter-dbg.js create mode 100644 step-32/test/unit/model/formatter-dbg.js.map create mode 100644 step-32/test/unit/model/formatter.js create mode 100644 step-32/test/unit/model/formatter.js.map create mode 100644 step-32/test/unit/model/formatter.ts create mode 100644 step-32/test/unit/unitTests-cdn.qunit.html create mode 100644 step-32/test/unit/unitTests.qunit-dbg.js create mode 100644 step-32/test/unit/unitTests.qunit-dbg.js.map create mode 100644 step-32/test/unit/unitTests.qunit.html create mode 100644 step-32/test/unit/unitTests.qunit.js create mode 100644 step-32/test/unit/unitTests.qunit.js.map create mode 100644 step-32/test/unit/unitTests.qunit.ts create mode 100644 step-32/view/App.view.xml create mode 100644 step-32/view/Detail.view.xml create mode 100644 step-32/view/HelloDialog.fragment.xml create mode 100644 step-32/view/HelloPanel.view.xml create mode 100644 step-32/view/InvoiceList.view.xml create mode 100644 step-32/view/Overview.view.xml create mode 100644 step-33/Component-dbg.js create mode 100644 step-33/Component-dbg.js.map create mode 100644 step-33/Component-preload.js create mode 100644 step-33/Component-preload.js.map create mode 100644 step-33/Component.js create mode 100644 step-33/Component.js.map create mode 100644 step-33/Component.ts create mode 100644 step-33/README.md create mode 100644 step-33/control/ProductRating-dbg.js create mode 100644 step-33/control/ProductRating-dbg.js.map create mode 100644 step-33/control/ProductRating.js create mode 100644 step-33/control/ProductRating.js.map create mode 100644 step-33/control/ProductRating.ts create mode 100644 step-33/controller/App-dbg.controller.js create mode 100644 step-33/controller/App-dbg.controller.js.map create mode 100644 step-33/controller/App.controller.js create mode 100644 step-33/controller/App.controller.js.map create mode 100644 step-33/controller/App.controller.ts create mode 100644 step-33/controller/Detail-dbg.controller.js create mode 100644 step-33/controller/Detail-dbg.controller.js.map create mode 100644 step-33/controller/Detail.controller.js create mode 100644 step-33/controller/Detail.controller.js.map create mode 100644 step-33/controller/Detail.controller.ts create mode 100644 step-33/controller/HelloPanel-dbg.controller.js create mode 100644 step-33/controller/HelloPanel-dbg.controller.js.map create mode 100644 step-33/controller/HelloPanel.controller.js create mode 100644 step-33/controller/HelloPanel.controller.js.map create mode 100644 step-33/controller/HelloPanel.controller.ts create mode 100644 step-33/controller/InvoiceList-dbg.controller.js create mode 100644 step-33/controller/InvoiceList-dbg.controller.js.map create mode 100644 step-33/controller/InvoiceList.controller.js create mode 100644 step-33/controller/InvoiceList.controller.js.map create mode 100644 step-33/controller/InvoiceList.controller.ts create mode 100644 step-33/css/style.css create mode 100644 step-33/i18n/i18n.properties create mode 100644 step-33/index-cdn.html create mode 100644 step-33/index.html create mode 100644 step-33/localService/metadata.xml create mode 100644 step-33/localService/mockdata/Invoices.json create mode 100644 step-33/localService/mockserver-dbg.js create mode 100644 step-33/localService/mockserver-dbg.js.map create mode 100644 step-33/localService/mockserver.js create mode 100644 step-33/localService/mockserver.js.map create mode 100644 step-33/localService/mockserver.ts create mode 100644 step-33/manifest.json create mode 100644 step-33/model/formatter-dbg.js create mode 100644 step-33/model/formatter-dbg.js.map create mode 100644 step-33/model/formatter.js create mode 100644 step-33/model/formatter.js.map create mode 100644 step-33/model/formatter.ts create mode 100644 step-33/test/initMockServer-dbg.js create mode 100644 step-33/test/initMockServer-dbg.js.map create mode 100644 step-33/test/initMockServer.js create mode 100644 step-33/test/initMockServer.js.map create mode 100644 step-33/test/initMockServer.ts create mode 100644 step-33/test/integration/NavigationJourney-dbg.js create mode 100644 step-33/test/integration/NavigationJourney-dbg.js.map create mode 100644 step-33/test/integration/NavigationJourney.js create mode 100644 step-33/test/integration/NavigationJourney.js.map create mode 100644 step-33/test/integration/NavigationJourney.ts create mode 100644 step-33/test/integration/opaTests-cdn.qunit.html create mode 100644 step-33/test/integration/opaTests.qunit-dbg.js create mode 100644 step-33/test/integration/opaTests.qunit-dbg.js.map create mode 100644 step-33/test/integration/opaTests.qunit.html create mode 100644 step-33/test/integration/opaTests.qunit.js create mode 100644 step-33/test/integration/opaTests.qunit.js.map create mode 100644 step-33/test/integration/opaTests.qunit.ts create mode 100644 step-33/test/integration/pages/HelloPanelPage-dbg.js create mode 100644 step-33/test/integration/pages/HelloPanelPage-dbg.js.map create mode 100644 step-33/test/integration/pages/HelloPanelPage.js create mode 100644 step-33/test/integration/pages/HelloPanelPage.js.map create mode 100644 step-33/test/integration/pages/HelloPanelPage.ts create mode 100644 step-33/test/mockServer-cdn.html create mode 100644 step-33/test/mockServer.html create mode 100644 step-33/test/unit/model/formatter-dbg.js create mode 100644 step-33/test/unit/model/formatter-dbg.js.map create mode 100644 step-33/test/unit/model/formatter.js create mode 100644 step-33/test/unit/model/formatter.js.map create mode 100644 step-33/test/unit/model/formatter.ts create mode 100644 step-33/test/unit/unitTests-cdn.qunit.html create mode 100644 step-33/test/unit/unitTests.qunit-dbg.js create mode 100644 step-33/test/unit/unitTests.qunit-dbg.js.map create mode 100644 step-33/test/unit/unitTests.qunit.html create mode 100644 step-33/test/unit/unitTests.qunit.js create mode 100644 step-33/test/unit/unitTests.qunit.js.map create mode 100644 step-33/test/unit/unitTests.qunit.ts create mode 100644 step-33/view/App.view.xml create mode 100644 step-33/view/Detail.view.xml create mode 100644 step-33/view/HelloDialog.fragment.xml create mode 100644 step-33/view/HelloPanel.view.xml create mode 100644 step-33/view/InvoiceList.view.xml create mode 100644 step-33/view/Overview.view.xml create mode 100644 step-34/Component-dbg.js create mode 100644 step-34/Component-dbg.js.map create mode 100644 step-34/Component-preload.js create mode 100644 step-34/Component-preload.js.map create mode 100644 step-34/Component.js create mode 100644 step-34/Component.js.map create mode 100644 step-34/Component.ts create mode 100644 step-34/README.md create mode 100644 step-34/control/ProductRating-dbg.js create mode 100644 step-34/control/ProductRating-dbg.js.map create mode 100644 step-34/control/ProductRating.js create mode 100644 step-34/control/ProductRating.js.map create mode 100644 step-34/control/ProductRating.ts create mode 100644 step-34/controller/App-dbg.controller.js create mode 100644 step-34/controller/App-dbg.controller.js.map create mode 100644 step-34/controller/App.controller.js create mode 100644 step-34/controller/App.controller.js.map create mode 100644 step-34/controller/App.controller.ts create mode 100644 step-34/controller/Detail-dbg.controller.js create mode 100644 step-34/controller/Detail-dbg.controller.js.map create mode 100644 step-34/controller/Detail.controller.js create mode 100644 step-34/controller/Detail.controller.js.map create mode 100644 step-34/controller/Detail.controller.ts create mode 100644 step-34/controller/HelloPanel-dbg.controller.js create mode 100644 step-34/controller/HelloPanel-dbg.controller.js.map create mode 100644 step-34/controller/HelloPanel.controller.js create mode 100644 step-34/controller/HelloPanel.controller.js.map create mode 100644 step-34/controller/HelloPanel.controller.ts create mode 100644 step-34/controller/InvoiceList-dbg.controller.js create mode 100644 step-34/controller/InvoiceList-dbg.controller.js.map create mode 100644 step-34/controller/InvoiceList.controller.js create mode 100644 step-34/controller/InvoiceList.controller.js.map create mode 100644 step-34/controller/InvoiceList.controller.ts create mode 100644 step-34/css/style.css create mode 100644 step-34/i18n/i18n.properties create mode 100644 step-34/index-cdn.html create mode 100644 step-34/index.html create mode 100644 step-34/localService/metadata.xml create mode 100644 step-34/localService/mockdata/Invoices.json create mode 100644 step-34/localService/mockserver-dbg.js create mode 100644 step-34/localService/mockserver-dbg.js.map create mode 100644 step-34/localService/mockserver.js create mode 100644 step-34/localService/mockserver.js.map create mode 100644 step-34/localService/mockserver.ts create mode 100644 step-34/manifest.json create mode 100644 step-34/model/formatter-dbg.js create mode 100644 step-34/model/formatter-dbg.js.map create mode 100644 step-34/model/formatter.js create mode 100644 step-34/model/formatter.js.map create mode 100644 step-34/model/formatter.ts create mode 100644 step-34/test/initMockServer-dbg.js create mode 100644 step-34/test/initMockServer-dbg.js.map create mode 100644 step-34/test/initMockServer.js create mode 100644 step-34/test/initMockServer.js.map create mode 100644 step-34/test/initMockServer.ts create mode 100644 step-34/test/integration/NavigationJourney-dbg.js create mode 100644 step-34/test/integration/NavigationJourney-dbg.js.map create mode 100644 step-34/test/integration/NavigationJourney.js create mode 100644 step-34/test/integration/NavigationJourney.js.map create mode 100644 step-34/test/integration/NavigationJourney.ts create mode 100644 step-34/test/integration/opaTests-cdn.qunit.html create mode 100644 step-34/test/integration/opaTests.qunit-dbg.js create mode 100644 step-34/test/integration/opaTests.qunit-dbg.js.map create mode 100644 step-34/test/integration/opaTests.qunit.html create mode 100644 step-34/test/integration/opaTests.qunit.js create mode 100644 step-34/test/integration/opaTests.qunit.js.map create mode 100644 step-34/test/integration/opaTests.qunit.ts create mode 100644 step-34/test/integration/pages/HelloPanelPage-dbg.js create mode 100644 step-34/test/integration/pages/HelloPanelPage-dbg.js.map create mode 100644 step-34/test/integration/pages/HelloPanelPage.js create mode 100644 step-34/test/integration/pages/HelloPanelPage.js.map create mode 100644 step-34/test/integration/pages/HelloPanelPage.ts create mode 100644 step-34/test/mockServer-cdn.html create mode 100644 step-34/test/mockServer.html create mode 100644 step-34/test/unit/model/formatter-dbg.js create mode 100644 step-34/test/unit/model/formatter-dbg.js.map create mode 100644 step-34/test/unit/model/formatter.js create mode 100644 step-34/test/unit/model/formatter.js.map create mode 100644 step-34/test/unit/model/formatter.ts create mode 100644 step-34/test/unit/unitTests-cdn.qunit.html create mode 100644 step-34/test/unit/unitTests.qunit-dbg.js create mode 100644 step-34/test/unit/unitTests.qunit-dbg.js.map create mode 100644 step-34/test/unit/unitTests.qunit.html create mode 100644 step-34/test/unit/unitTests.qunit.js create mode 100644 step-34/test/unit/unitTests.qunit.js.map create mode 100644 step-34/test/unit/unitTests.qunit.ts create mode 100644 step-34/view/App.view.xml create mode 100644 step-34/view/Detail.view.xml create mode 100644 step-34/view/HelloDialog.fragment.xml create mode 100644 step-34/view/HelloPanel.view.xml create mode 100644 step-34/view/InvoiceList.view.xml create mode 100644 step-34/view/Overview.view.xml create mode 100644 step-35/Component-dbg.js create mode 100644 step-35/Component-dbg.js.map create mode 100644 step-35/Component-preload.js create mode 100644 step-35/Component-preload.js.map create mode 100644 step-35/Component.js create mode 100644 step-35/Component.js.map create mode 100644 step-35/Component.ts create mode 100644 step-35/README.md create mode 100644 step-35/control/ProductRating-dbg.js create mode 100644 step-35/control/ProductRating-dbg.js.map create mode 100644 step-35/control/ProductRating.js create mode 100644 step-35/control/ProductRating.js.map create mode 100644 step-35/control/ProductRating.ts create mode 100644 step-35/controller/App-dbg.controller.js create mode 100644 step-35/controller/App-dbg.controller.js.map create mode 100644 step-35/controller/App.controller.js create mode 100644 step-35/controller/App.controller.js.map create mode 100644 step-35/controller/App.controller.ts create mode 100644 step-35/controller/Detail-dbg.controller.js create mode 100644 step-35/controller/Detail-dbg.controller.js.map create mode 100644 step-35/controller/Detail.controller.js create mode 100644 step-35/controller/Detail.controller.js.map create mode 100644 step-35/controller/Detail.controller.ts create mode 100644 step-35/controller/HelloPanel-dbg.controller.js create mode 100644 step-35/controller/HelloPanel-dbg.controller.js.map create mode 100644 step-35/controller/HelloPanel.controller.js create mode 100644 step-35/controller/HelloPanel.controller.js.map create mode 100644 step-35/controller/HelloPanel.controller.ts create mode 100644 step-35/controller/InvoiceList-dbg.controller.js create mode 100644 step-35/controller/InvoiceList-dbg.controller.js.map create mode 100644 step-35/controller/InvoiceList.controller.js create mode 100644 step-35/controller/InvoiceList.controller.js.map create mode 100644 step-35/controller/InvoiceList.controller.ts create mode 100644 step-35/css/style.css create mode 100644 step-35/i18n/i18n.properties create mode 100644 step-35/index-cdn.html create mode 100644 step-35/index.html create mode 100644 step-35/localService/metadata.xml create mode 100644 step-35/localService/mockdata/Invoices.json create mode 100644 step-35/localService/mockserver-dbg.js create mode 100644 step-35/localService/mockserver-dbg.js.map create mode 100644 step-35/localService/mockserver.js create mode 100644 step-35/localService/mockserver.js.map create mode 100644 step-35/localService/mockserver.ts create mode 100644 step-35/manifest.json create mode 100644 step-35/model/formatter-dbg.js create mode 100644 step-35/model/formatter-dbg.js.map create mode 100644 step-35/model/formatter.js create mode 100644 step-35/model/formatter.js.map create mode 100644 step-35/model/formatter.ts create mode 100644 step-35/test/initMockServer-dbg.js create mode 100644 step-35/test/initMockServer-dbg.js.map create mode 100644 step-35/test/initMockServer.js create mode 100644 step-35/test/initMockServer.js.map create mode 100644 step-35/test/initMockServer.ts create mode 100644 step-35/test/integration/NavigationJourney-dbg.js create mode 100644 step-35/test/integration/NavigationJourney-dbg.js.map create mode 100644 step-35/test/integration/NavigationJourney.js create mode 100644 step-35/test/integration/NavigationJourney.js.map create mode 100644 step-35/test/integration/NavigationJourney.ts create mode 100644 step-35/test/integration/opaTests-cdn.qunit.html create mode 100644 step-35/test/integration/opaTests.qunit-dbg.js create mode 100644 step-35/test/integration/opaTests.qunit-dbg.js.map create mode 100644 step-35/test/integration/opaTests.qunit.html create mode 100644 step-35/test/integration/opaTests.qunit.js create mode 100644 step-35/test/integration/opaTests.qunit.js.map create mode 100644 step-35/test/integration/opaTests.qunit.ts create mode 100644 step-35/test/integration/pages/HelloPanelPage-dbg.js create mode 100644 step-35/test/integration/pages/HelloPanelPage-dbg.js.map create mode 100644 step-35/test/integration/pages/HelloPanelPage.js create mode 100644 step-35/test/integration/pages/HelloPanelPage.js.map create mode 100644 step-35/test/integration/pages/HelloPanelPage.ts create mode 100644 step-35/test/mockServer-cdn.html create mode 100644 step-35/test/mockServer.html create mode 100644 step-35/test/unit/model/formatter-dbg.js create mode 100644 step-35/test/unit/model/formatter-dbg.js.map create mode 100644 step-35/test/unit/model/formatter.js create mode 100644 step-35/test/unit/model/formatter.js.map create mode 100644 step-35/test/unit/model/formatter.ts create mode 100644 step-35/test/unit/unitTests-cdn.qunit.html create mode 100644 step-35/test/unit/unitTests.qunit-dbg.js create mode 100644 step-35/test/unit/unitTests.qunit-dbg.js.map create mode 100644 step-35/test/unit/unitTests.qunit.html create mode 100644 step-35/test/unit/unitTests.qunit.js create mode 100644 step-35/test/unit/unitTests.qunit.js.map create mode 100644 step-35/test/unit/unitTests.qunit.ts create mode 100644 step-35/view/App.view.xml create mode 100644 step-35/view/Detail.view.xml create mode 100644 step-35/view/HelloDialog.fragment.xml create mode 100644 step-35/view/HelloPanel.view.xml create mode 100644 step-35/view/InvoiceList.view.xml create mode 100644 step-35/view/Overview.view.xml create mode 100644 step-36/Component-dbg.js create mode 100644 step-36/Component-dbg.js.map create mode 100644 step-36/Component-preload.js create mode 100644 step-36/Component-preload.js.map create mode 100644 step-36/Component.js create mode 100644 step-36/Component.js.map create mode 100644 step-36/Component.ts create mode 100644 step-36/README.md create mode 100644 step-36/control/ProductRating-dbg.js create mode 100644 step-36/control/ProductRating-dbg.js.map create mode 100644 step-36/control/ProductRating.js create mode 100644 step-36/control/ProductRating.js.map create mode 100644 step-36/control/ProductRating.ts create mode 100644 step-36/controller/App-dbg.controller.js create mode 100644 step-36/controller/App-dbg.controller.js.map create mode 100644 step-36/controller/App.controller.js create mode 100644 step-36/controller/App.controller.js.map create mode 100644 step-36/controller/App.controller.ts create mode 100644 step-36/controller/Detail-dbg.controller.js create mode 100644 step-36/controller/Detail-dbg.controller.js.map create mode 100644 step-36/controller/Detail.controller.js create mode 100644 step-36/controller/Detail.controller.js.map create mode 100644 step-36/controller/Detail.controller.ts create mode 100644 step-36/controller/HelloPanel-dbg.controller.js create mode 100644 step-36/controller/HelloPanel-dbg.controller.js.map create mode 100644 step-36/controller/HelloPanel.controller.js create mode 100644 step-36/controller/HelloPanel.controller.js.map create mode 100644 step-36/controller/HelloPanel.controller.ts create mode 100644 step-36/controller/InvoiceList-dbg.controller.js create mode 100644 step-36/controller/InvoiceList-dbg.controller.js.map create mode 100644 step-36/controller/InvoiceList.controller.js create mode 100644 step-36/controller/InvoiceList.controller.js.map create mode 100644 step-36/controller/InvoiceList.controller.ts create mode 100644 step-36/css/style.css create mode 100644 step-36/i18n/i18n.properties create mode 100644 step-36/index-cdn.html create mode 100644 step-36/index.html create mode 100644 step-36/localService/metadata.xml create mode 100644 step-36/localService/mockdata/Invoices.json create mode 100644 step-36/localService/mockserver-dbg.js create mode 100644 step-36/localService/mockserver-dbg.js.map create mode 100644 step-36/localService/mockserver.js create mode 100644 step-36/localService/mockserver.js.map create mode 100644 step-36/localService/mockserver.ts create mode 100644 step-36/manifest.json create mode 100644 step-36/model/formatter-dbg.js create mode 100644 step-36/model/formatter-dbg.js.map create mode 100644 step-36/model/formatter.js create mode 100644 step-36/model/formatter.js.map create mode 100644 step-36/model/formatter.ts create mode 100644 step-36/test/initMockServer-dbg.js create mode 100644 step-36/test/initMockServer-dbg.js.map create mode 100644 step-36/test/initMockServer.js create mode 100644 step-36/test/initMockServer.js.map create mode 100644 step-36/test/initMockServer.ts create mode 100644 step-36/test/integration/NavigationJourney-dbg.js create mode 100644 step-36/test/integration/NavigationJourney-dbg.js.map create mode 100644 step-36/test/integration/NavigationJourney.js create mode 100644 step-36/test/integration/NavigationJourney.js.map create mode 100644 step-36/test/integration/NavigationJourney.ts create mode 100644 step-36/test/integration/opaTests-cdn.qunit.html create mode 100644 step-36/test/integration/opaTests.qunit-dbg.js create mode 100644 step-36/test/integration/opaTests.qunit-dbg.js.map create mode 100644 step-36/test/integration/opaTests.qunit.html create mode 100644 step-36/test/integration/opaTests.qunit.js create mode 100644 step-36/test/integration/opaTests.qunit.js.map create mode 100644 step-36/test/integration/opaTests.qunit.ts create mode 100644 step-36/test/integration/pages/HelloPanelPage-dbg.js create mode 100644 step-36/test/integration/pages/HelloPanelPage-dbg.js.map create mode 100644 step-36/test/integration/pages/HelloPanelPage.js create mode 100644 step-36/test/integration/pages/HelloPanelPage.js.map create mode 100644 step-36/test/integration/pages/HelloPanelPage.ts create mode 100644 step-36/test/mockServer-cdn.html create mode 100644 step-36/test/mockServer.html create mode 100644 step-36/test/unit/model/formatter-dbg.js create mode 100644 step-36/test/unit/model/formatter-dbg.js.map create mode 100644 step-36/test/unit/model/formatter.js create mode 100644 step-36/test/unit/model/formatter.js.map create mode 100644 step-36/test/unit/model/formatter.ts create mode 100644 step-36/test/unit/unitTests-cdn.qunit.html create mode 100644 step-36/test/unit/unitTests.qunit-dbg.js create mode 100644 step-36/test/unit/unitTests.qunit-dbg.js.map create mode 100644 step-36/test/unit/unitTests.qunit.html create mode 100644 step-36/test/unit/unitTests.qunit.js create mode 100644 step-36/test/unit/unitTests.qunit.js.map create mode 100644 step-36/test/unit/unitTests.qunit.ts create mode 100644 step-36/view/App.view.xml create mode 100644 step-36/view/Detail.view.xml create mode 100644 step-36/view/HelloDialog.fragment.xml create mode 100644 step-36/view/HelloPanel.view.xml create mode 100644 step-36/view/InvoiceList.view.xml create mode 100644 step-36/view/Overview.view.xml create mode 100644 step-37/Component-dbg.js create mode 100644 step-37/Component-dbg.js.map create mode 100644 step-37/Component-preload.js create mode 100644 step-37/Component-preload.js.map create mode 100644 step-37/Component.js create mode 100644 step-37/Component.js.map create mode 100644 step-37/Component.ts create mode 100644 step-37/README.md create mode 100644 step-37/control/ProductRating-dbg.js create mode 100644 step-37/control/ProductRating-dbg.js.map create mode 100644 step-37/control/ProductRating.js create mode 100644 step-37/control/ProductRating.js.map create mode 100644 step-37/control/ProductRating.ts create mode 100644 step-37/controller/App-dbg.controller.js create mode 100644 step-37/controller/App-dbg.controller.js.map create mode 100644 step-37/controller/App.controller.js create mode 100644 step-37/controller/App.controller.js.map create mode 100644 step-37/controller/App.controller.ts create mode 100644 step-37/controller/Detail-dbg.controller.js create mode 100644 step-37/controller/Detail-dbg.controller.js.map create mode 100644 step-37/controller/Detail.controller.js create mode 100644 step-37/controller/Detail.controller.js.map create mode 100644 step-37/controller/Detail.controller.ts create mode 100644 step-37/controller/HelloPanel-dbg.controller.js create mode 100644 step-37/controller/HelloPanel-dbg.controller.js.map create mode 100644 step-37/controller/HelloPanel.controller.js create mode 100644 step-37/controller/HelloPanel.controller.js.map create mode 100644 step-37/controller/HelloPanel.controller.ts create mode 100644 step-37/controller/InvoiceList-dbg.controller.js create mode 100644 step-37/controller/InvoiceList-dbg.controller.js.map create mode 100644 step-37/controller/InvoiceList.controller.js create mode 100644 step-37/controller/InvoiceList.controller.js.map create mode 100644 step-37/controller/InvoiceList.controller.ts create mode 100644 step-37/css/style.css create mode 100644 step-37/i18n/i18n.properties create mode 100644 step-37/index-cdn.html create mode 100644 step-37/index.html create mode 100644 step-37/localService/metadata.xml create mode 100644 step-37/localService/mockdata/Invoices.json create mode 100644 step-37/localService/mockserver-dbg.js create mode 100644 step-37/localService/mockserver-dbg.js.map create mode 100644 step-37/localService/mockserver.js create mode 100644 step-37/localService/mockserver.js.map create mode 100644 step-37/localService/mockserver.ts create mode 100644 step-37/manifest.json create mode 100644 step-37/model/formatter-dbg.js create mode 100644 step-37/model/formatter-dbg.js.map create mode 100644 step-37/model/formatter.js create mode 100644 step-37/model/formatter.js.map create mode 100644 step-37/model/formatter.ts create mode 100644 step-37/test/initMockServer-dbg.js create mode 100644 step-37/test/initMockServer-dbg.js.map create mode 100644 step-37/test/initMockServer.js create mode 100644 step-37/test/initMockServer.js.map create mode 100644 step-37/test/initMockServer.ts create mode 100644 step-37/test/integration/NavigationJourney-dbg.js create mode 100644 step-37/test/integration/NavigationJourney-dbg.js.map create mode 100644 step-37/test/integration/NavigationJourney.js create mode 100644 step-37/test/integration/NavigationJourney.js.map create mode 100644 step-37/test/integration/NavigationJourney.ts create mode 100644 step-37/test/integration/opaTests-cdn.qunit.html create mode 100644 step-37/test/integration/opaTests.qunit-dbg.js create mode 100644 step-37/test/integration/opaTests.qunit-dbg.js.map create mode 100644 step-37/test/integration/opaTests.qunit.html create mode 100644 step-37/test/integration/opaTests.qunit.js create mode 100644 step-37/test/integration/opaTests.qunit.js.map create mode 100644 step-37/test/integration/opaTests.qunit.ts create mode 100644 step-37/test/integration/pages/HelloPanelPage-dbg.js create mode 100644 step-37/test/integration/pages/HelloPanelPage-dbg.js.map create mode 100644 step-37/test/integration/pages/HelloPanelPage.js create mode 100644 step-37/test/integration/pages/HelloPanelPage.js.map create mode 100644 step-37/test/integration/pages/HelloPanelPage.ts create mode 100644 step-37/test/mockServer-cdn.html create mode 100644 step-37/test/mockServer.html create mode 100644 step-37/test/unit/model/formatter-dbg.js create mode 100644 step-37/test/unit/model/formatter-dbg.js.map create mode 100644 step-37/test/unit/model/formatter.js create mode 100644 step-37/test/unit/model/formatter.js.map create mode 100644 step-37/test/unit/model/formatter.ts create mode 100644 step-37/test/unit/unitTests-cdn.qunit.html create mode 100644 step-37/test/unit/unitTests.qunit-dbg.js create mode 100644 step-37/test/unit/unitTests.qunit-dbg.js.map create mode 100644 step-37/test/unit/unitTests.qunit.html create mode 100644 step-37/test/unit/unitTests.qunit.js create mode 100644 step-37/test/unit/unitTests.qunit.js.map create mode 100644 step-37/test/unit/unitTests.qunit.ts create mode 100644 step-37/view/App.view.xml create mode 100644 step-37/view/Detail.view.xml create mode 100644 step-37/view/HelloDialog.fragment.xml create mode 100644 step-37/view/HelloPanel.view.xml create mode 100644 step-37/view/InvoiceList.view.xml create mode 100644 step-37/view/Overview.view.xml create mode 100644 step-38/Component-dbg.js create mode 100644 step-38/Component-dbg.js.map create mode 100644 step-38/Component-preload.js create mode 100644 step-38/Component-preload.js.map create mode 100644 step-38/Component.js create mode 100644 step-38/Component.js.map create mode 100644 step-38/Component.ts create mode 100644 step-38/README.md create mode 100644 step-38/control/ProductRating-dbg.js create mode 100644 step-38/control/ProductRating-dbg.js.map create mode 100644 step-38/control/ProductRating.js create mode 100644 step-38/control/ProductRating.js.map create mode 100644 step-38/control/ProductRating.ts create mode 100644 step-38/controller/App-dbg.controller.js create mode 100644 step-38/controller/App-dbg.controller.js.map create mode 100644 step-38/controller/App.controller.js create mode 100644 step-38/controller/App.controller.js.map create mode 100644 step-38/controller/App.controller.ts create mode 100644 step-38/controller/Detail-dbg.controller.js create mode 100644 step-38/controller/Detail-dbg.controller.js.map create mode 100644 step-38/controller/Detail.controller.js create mode 100644 step-38/controller/Detail.controller.js.map create mode 100644 step-38/controller/Detail.controller.ts create mode 100644 step-38/controller/HelloPanel-dbg.controller.js create mode 100644 step-38/controller/HelloPanel-dbg.controller.js.map create mode 100644 step-38/controller/HelloPanel.controller.js create mode 100644 step-38/controller/HelloPanel.controller.js.map create mode 100644 step-38/controller/HelloPanel.controller.ts create mode 100644 step-38/controller/InvoiceList-dbg.controller.js create mode 100644 step-38/controller/InvoiceList-dbg.controller.js.map create mode 100644 step-38/controller/InvoiceList.controller.js create mode 100644 step-38/controller/InvoiceList.controller.js.map create mode 100644 step-38/controller/InvoiceList.controller.ts create mode 100644 step-38/css/style.css create mode 100644 step-38/i18n/i18n.properties create mode 100644 step-38/index-cdn.html create mode 100644 step-38/index-dbg.js create mode 100644 step-38/index-dbg.js.map create mode 100644 step-38/index.html create mode 100644 step-38/index.js create mode 100644 step-38/index.js.map create mode 100644 step-38/index.ts create mode 100644 step-38/localService/metadata.xml create mode 100644 step-38/localService/mockdata/Invoices.json create mode 100644 step-38/localService/mockserver-dbg.js create mode 100644 step-38/localService/mockserver-dbg.js.map create mode 100644 step-38/localService/mockserver.js create mode 100644 step-38/localService/mockserver.js.map create mode 100644 step-38/localService/mockserver.ts create mode 100644 step-38/manifest.json create mode 100644 step-38/model/formatter-dbg.js create mode 100644 step-38/model/formatter-dbg.js.map create mode 100644 step-38/model/formatter.js create mode 100644 step-38/model/formatter.js.map create mode 100644 step-38/model/formatter.ts create mode 100644 step-38/test/initMockServer-dbg.js create mode 100644 step-38/test/initMockServer-dbg.js.map create mode 100644 step-38/test/initMockServer.js create mode 100644 step-38/test/initMockServer.js.map create mode 100644 step-38/test/initMockServer.ts create mode 100644 step-38/test/integration/NavigationJourney-dbg.js create mode 100644 step-38/test/integration/NavigationJourney-dbg.js.map create mode 100644 step-38/test/integration/NavigationJourney.js create mode 100644 step-38/test/integration/NavigationJourney.js.map create mode 100644 step-38/test/integration/NavigationJourney.ts create mode 100644 step-38/test/integration/opaTests-cdn.qunit.html create mode 100644 step-38/test/integration/opaTests.qunit-dbg.js create mode 100644 step-38/test/integration/opaTests.qunit-dbg.js.map create mode 100644 step-38/test/integration/opaTests.qunit.html create mode 100644 step-38/test/integration/opaTests.qunit.js create mode 100644 step-38/test/integration/opaTests.qunit.js.map create mode 100644 step-38/test/integration/opaTests.qunit.ts create mode 100644 step-38/test/integration/pages/HelloPanelPage-dbg.js create mode 100644 step-38/test/integration/pages/HelloPanelPage-dbg.js.map create mode 100644 step-38/test/integration/pages/HelloPanelPage.js create mode 100644 step-38/test/integration/pages/HelloPanelPage.js.map create mode 100644 step-38/test/integration/pages/HelloPanelPage.ts create mode 100644 step-38/test/mockServer-cdn.html create mode 100644 step-38/test/mockServer.html create mode 100644 step-38/test/unit/model/formatter-dbg.js create mode 100644 step-38/test/unit/model/formatter-dbg.js.map create mode 100644 step-38/test/unit/model/formatter.js create mode 100644 step-38/test/unit/model/formatter.js.map create mode 100644 step-38/test/unit/model/formatter.ts create mode 100644 step-38/test/unit/unitTests-cdn.qunit.html create mode 100644 step-38/test/unit/unitTests.qunit-dbg.js create mode 100644 step-38/test/unit/unitTests.qunit-dbg.js.map create mode 100644 step-38/test/unit/unitTests.qunit.html create mode 100644 step-38/test/unit/unitTests.qunit.js create mode 100644 step-38/test/unit/unitTests.qunit.js.map create mode 100644 step-38/test/unit/unitTests.qunit.ts create mode 100644 step-38/view/App.view.xml create mode 100644 step-38/view/Detail.view.xml create mode 100644 step-38/view/HelloDialog.fragment.xml create mode 100644 step-38/view/HelloPanel.view.xml create mode 100644 step-38/view/InvoiceList.view.xml create mode 100644 step-38/view/Overview.view.xml create mode 100644 ui5-typescript-walkthrough-step-01.zip create mode 100644 ui5-typescript-walkthrough-step-02.zip create mode 100644 ui5-typescript-walkthrough-step-03.zip create mode 100644 ui5-typescript-walkthrough-step-04.zip create mode 100644 ui5-typescript-walkthrough-step-05.zip create mode 100644 ui5-typescript-walkthrough-step-06.zip create mode 100644 ui5-typescript-walkthrough-step-07.zip create mode 100644 ui5-typescript-walkthrough-step-08.zip create mode 100644 ui5-typescript-walkthrough-step-09.zip create mode 100644 ui5-typescript-walkthrough-step-10.zip create mode 100644 ui5-typescript-walkthrough-step-11.zip create mode 100644 ui5-typescript-walkthrough-step-12.zip create mode 100644 ui5-typescript-walkthrough-step-13.zip create mode 100644 ui5-typescript-walkthrough-step-14.zip create mode 100644 ui5-typescript-walkthrough-step-15.zip create mode 100644 ui5-typescript-walkthrough-step-16.zip create mode 100644 ui5-typescript-walkthrough-step-17.zip create mode 100644 ui5-typescript-walkthrough-step-18.zip create mode 100644 ui5-typescript-walkthrough-step-19.zip create mode 100644 ui5-typescript-walkthrough-step-20.zip create mode 100644 ui5-typescript-walkthrough-step-21.zip create mode 100644 ui5-typescript-walkthrough-step-22.zip create mode 100644 ui5-typescript-walkthrough-step-23.zip create mode 100644 ui5-typescript-walkthrough-step-24.zip create mode 100644 ui5-typescript-walkthrough-step-25.zip create mode 100644 ui5-typescript-walkthrough-step-26.zip create mode 100644 ui5-typescript-walkthrough-step-27.zip create mode 100644 ui5-typescript-walkthrough-step-28.zip create mode 100644 ui5-typescript-walkthrough-step-29.zip create mode 100644 ui5-typescript-walkthrough-step-30.zip create mode 100644 ui5-typescript-walkthrough-step-31.zip create mode 100644 ui5-typescript-walkthrough-step-32.zip create mode 100644 ui5-typescript-walkthrough-step-33.zip create mode 100644 ui5-typescript-walkthrough-step-34.zip create mode 100644 ui5-typescript-walkthrough-step-35.zip create mode 100644 ui5-typescript-walkthrough-step-36.zip create mode 100644 ui5-typescript-walkthrough-step-37.zip create mode 100644 ui5-typescript-walkthrough-step-38.zip diff --git a/index.md b/index.md new file mode 100644 index 0000000..fc52a18 --- /dev/null +++ b/index.md @@ -0,0 +1,131 @@ + + +[![REUSE status](https://api.reuse.software/badge/github.com/SAP-samples/ui5-typescript-walkthrough)](https://api.reuse.software/info/github.com/SAP-samples/ui5-typescript-walkthrough) + +# OpenUI5 TypeScript Walkthrough + +In this tutorial we'll introduce you to all major development paradigms of OpenUI5. We'll demonstrate the use of TypeScript with OpenUI5 and highlight the specific characteristics of this approach. + +## Description + +We first introduce you to the basic development paradigms like *Model-View-Controller* and establish a best-practice structure of our application. We'll do this along the classic example of “Hello World” and start a new app from scratch. Next, we'll introduce the fundamental data binding concepts of OpenUI5 and extend our app to show a list of invoices. We'll continue to add more functionality by adding navigation, extending controls, and making our app responsive. We'll also have look at the testing features and the built-in support tools of OpenUI5. + +### Preview + +![Preview of the OpenUI5 application that is going to be built in this tutorial. Contains a Hello World upper part with buttons and a text input. The lower part shows list of invoices with details, grouped by vendor names.](https://sdk.openui5.org/docs/topics/loiofb12cea5ac9b45bb9007aac5a1a8689f_LowRes.png) + +> :bulb: **Tip:**
+> You don't have to do all tutorial steps sequentially, you can also jump directly to any step you want. Just download the code from the previous step and make sure that the application runs as intended. +> +> You can view the samples for all steps here in this repository. +> +> For more information, read the [Getting Started](#getting-started) section below. + +### Steps + +The tutorial consists of the following steps. To start, just open the first link - you`ll be guided from there. + +- **[Step 1: Hello World!](step-01/README.md "As you know OpenUI5 is all about HTML5. Let’s get started with building a first “Hello World” with only HTML.")** ([preview output](https://sap-samples.github.io/ui5-typescript-walkthrough/step-01/index.html) | [download all files](https://sap-samples.github.io/ui5-typescript-walkthrough/ui5-typescript-walkthrough-step-01.zip)) +- **[Step 2: Bootstrap](step-02/README.md "Before we can do something with OpenUI5, we need to load and initialize it. This process of loading and initializing OpenUI5 is called bootstrapping. Once this bootstrapping is finished, we simply display an alert.")** ([preview output](https://sap-samples.github.io/ui5-typescript-walkthrough/step-02/index-cdn.html) | [download all files](https://sap-samples.github.io/ui5-typescript-walkthrough/ui5-typescript-walkthrough-step-02.zip)) +- **[Step 3: Controls](step-03/README.md "Now it is time to build our first little UI by replacing the \“Hello World\” text in the HTML body by the OpenUI5 control sap/m/Text. In the beginning, we will use the JavaScript control interface to set up the UI, the control instance is then placed into the HTML body. ")** ([preview output](https://sap-samples.github.io/ui5-typescript-walkthrough/step-03/index-cdn.html) | [download all files](https://sap-samples.github.io/ui5-typescript-walkthrough/ui5-typescript-walkthrough-step-03.zip)) +- **[Step 4: XML Views](step-04/README.md "Putting all our UI into the index.ts file will very soon result in a messy setup, and there is quite a bit of work ahead of us. So let’s do a first modularization by putting the sap/m/Text control into a dedicated view.")** ([preview output](https://sap-samples.github.io/ui5-typescript-walkthrough/step-04/index-cdn.html) | [download all files](https://sap-samples.github.io/ui5-typescript-walkthrough/ui5-typescript-walkthrough-step-04.zip)) +- **[Step 5: Controllers](step-05/README.md "In this step, we replace the text with a button and show the /“Hello World/” message when the button is pressed. The handling of the button's press event is implemented in the controller of the view.")** ([preview output](https://sap-samples.github.io/ui5-typescript-walkthrough/step-05/index-cdn.html) | [download all files](https://sap-samples.github.io/ui5-typescript-walkthrough/ui5-typescript-walkthrough-step-05.zip)) +- **[Step 6: Modules](step-06/README.md "In OpenUI5, resources are often referred to as modules. In this step, we replace the alert from the last exercise with a proper Message Toast from the sap.m library.")** ([preview output](https://sap-samples.github.io/ui5-typescript-walkthrough/step-06/index-cdn.html) | [download all files](https://sap-samples.github.io/ui5-typescript-walkthrough/ui5-typescript-walkthrough-step-06.zip)) +- **[Step 7: JSON Model](step-07/README.md "Now that we have set up the view and controller, it’s about time to think about the M in MVC.")** ([preview output](https://sap-samples.github.io/ui5-typescript-walkthrough/step-07/index-cdn.html) | [download all files](https://sap-samples.github.io/ui5-typescript-walkthrough/ui5-typescript-walkthrough-step-07.zip)) +- **[Step 8: Translatable Texts](step-08/README.md "In this step we move the texts of our UI to a separate resource file.")** ([preview output](https://sap-samples.github.io/ui5-typescript-walkthrough/step-08/index-cdn.html) | [download all files](https://sap-samples.github.io/ui5-typescript-walkthrough/ui5-typescript-walkthrough-step-08.zip)) +- **[Step 9: Component Configuration](step-09/README.md "After we have introduced all three parts of the Model-View-Controller /(MVC/) concept, we now come to another important structural aspect of OpenUI5. ")** ([preview output](https://sap-samples.github.io/ui5-typescript-walkthrough/step-09/index-cdn.html) | [download all files](https://sap-samples.github.io/ui5-typescript-walkthrough/ui5-typescript-walkthrough-step-09.zip)) +- **[Step 10: Descriptor for Applications](step-10/README.md "All application-specific configuration settings will now further be put in a separate descriptor file called manifest.json. This clearly separates the application coding from the configuration settings and makes our app even more flexible. For example, all SAP Fiori applications are realized as components and come with a descriptor file in order to be hosted in the SAP Fiori launchpad.")** ([preview output](https://sap-samples.github.io/ui5-typescript-walkthrough/step-10/index-cdn.html) | [download all files](https://sap-samples.github.io/ui5-typescript-walkthrough/ui5-typescript-walkthrough-step-10.zip)) +- **[Step 11: Pages and Panels](step-11/README.md "After all the work on the app structure it’s time to improve the look of our app. We will use two controls from the sap.m library to add a bit more "bling" to our UI. You will also learn about control aggregations in this step.")** ([preview output](https://sap-samples.github.io/ui5-typescript-walkthrough/step-11/index-cdn.html) | [download all files](https://sap-samples.github.io/ui5-typescript-walkthrough/ui5-typescript-walkthrough-step-11.zip)) +- **[Step 12: Shell Control as Container](step-12/README.md "Now we use a shell control as container for our app and use it as our new root element. The shell takes care of visual adaptation of the application to the device’s screen size by introducing a so-called letterbox on desktop screens.")** ([preview output](https://sap-samples.github.io/ui5-typescript-walkthrough/step-12/index-cdn.html) | [download all files](https://sap-samples.github.io/ui5-typescript-walkthrough/ui5-typescript-walkthrough-step-12.zip)) +- **[Step 13: Margins and Paddings](step-13/README.md "Our app content is still glued to the corners of the letterbox. To fine-tune our layout, we can add margins and paddings to the controls that we added in the previous step. ")** ([preview output](https://sap-samples.github.io/ui5-typescript-walkthrough/step-13/index-cdn.html) | [download all files](https://sap-samples.github.io/ui5-typescript-walkthrough/ui5-typescript-walkthrough-step-13.zip)) +- **[Step 14: Custom CSS and Theme Colors](step-14/README.md "Sometimes we need to define some more fine-granular layouts and this is when we can use the flexibility of CSS by adding custom style classes to controls and style them as we like. ")** ([preview output](https://sap-samples.github.io/ui5-typescript-walkthrough/step-14/index-cdn.html) | [download all files](https://sap-samples.github.io/ui5-typescript-walkthrough/ui5-typescript-walkthrough-step-14.zip)) +- **[Step 15: Nested Views](step-15/README.md "Our panel content is getting more and more complex and now it is time to move the panel content to a separate view. With that approach, the application structure is much easier to understand, and the individual parts of the app can be reused.")** ([preview output](https://sap-samples.github.io/ui5-typescript-walkthrough/step-15/index-cdn.html) | [download all files](https://sap-samples.github.io/ui5-typescript-walkthrough/ui5-typescript-walkthrough-step-15.zip)) +- **[Step 16: Dialogs and Fragments](1/step-16/README.md "In this step, we will take a closer look at another element which can be used to assemble views: the fragment. ")** ([preview output](https://sap-samples.github.io/ui5-typescript-walkthrough/step-16/index-cdn.html) | [download all files](https://sap-samples.github.io/ui5-typescript-walkthrough/ui5-typescript-walkthrough-step-16.zip)) +- **[Step 17: Fragment Callbacks](step-17/README.md "Now that we have integrated the dialog, it's time to add some user interaction. The user will definitely want to close the dialog again at some point, so we add a button to close the dialog and assign an event handler.")** ([preview output](https://sap-samples.github.io/ui5-typescript-walkthrough/step-17/index-cdn.html) | [download all files](https://sap-samples.github.io/ui5-typescript-walkthrough/ui5-typescript-walkthrough-step-17.zip)) +- **[Step 18: Icons](step-18/README.md "Our dialog is still pretty much empty. Since OpenUI5 is shipped with a large icon font that contains more than 500 icons, we will add an icon to greet our users when the dialog is opened.")** ([preview output](https://sap-samples.github.io/ui5-typescript-walkthrough/step-18/index-cdn.html) | [download all files](https://sap-samples.github.io/ui5-typescript-walkthrough/ui5-typescript-walkthrough-step-18.zip)) +- **[Step 19: Aggregation Binding](step-19/README.md "Now that we have established a good structure for our app, it's time to add some more functionality. We start exploring more features of data binding by adding some invoice data in JSON format that we display in a list below the panel.")** ([preview output](https://sap-samples.github.io/ui5-typescript-walkthrough/step-19/index-cdn.html) | [download all files](https://sap-samples.github.io/ui5-typescript-walkthrough/ui5-typescript-walkthrough-step-19.zip)) +- **[Step 20: Data Types](step-20/README.md "The list of invoices is already looking nice, but what is an invoice without a price assigned? Typically prices are stored in a technical format and with a /'./' delimiter in the data model. For example, our invoice for pineapples has the calculated price 87.2 without a currency. We are going to use the OpenUI5 data types to format the price properly, with a locale-dependent decimal separator and two digits after the separator.")** ([preview output](https://sap-samples.github.io/ui5-typescript-walkthrough/step-20/index-cdn.html) | [download all files](https://sap-samples.github.io/ui5-typescript-walkthrough/ui5-typescript-walkthrough-step-20.zip)) +- **[Step 21: Expression Binding](step-21/README.md "Sometimes the predefined types of OpenUI5 are not flexible enough and you want to do a simple calculation or formatting in the view - that is where expressions are really helpful. We use them to format our price according to the current number in the data model.")** ([preview output](https://sap-samples.github.io/ui5-typescript-walkthrough/step-21/index-cdn.html) | [download all files](https://sap-samples.github.io/ui5-typescript-walkthrough/ui5-typescript-walkthrough-step-21.zip)) +- **[Step 22: Custom Formatters](step-22/README.md "If we want to do a more complex logic for formatting properties of our data model, we can also write a custom formatting function. We will now add a localized status with a custom formatter, because the status in our data model is in a rather technical format.")** ([preview output](https://sap-samples.github.io/ui5-typescript-walkthrough/step-22/index-cdn.html) | [download all files](https://sap-samples.github.io/ui5-typescript-walkthrough/ui5-typescript-walkthrough-step-22.zip)) +- **[Step 23: Filtering](step-23/README.md "In this step, we add a search field for our product list and define a filter that represents the search term. When searching, the list is automatically updated to show only the items that match the search term.")** ([preview output](https://sap-samples.github.io/ui5-typescript-walkthrough/step-23/index-cdn.html) | [download all files](https://sap-samples.github.io/ui5-typescript-walkthrough/ui5-typescript-walkthrough-step-23.zip)) +- **[Step 24: Sorting and Grouping](step-24/README.md "To make our list of invoices even more user-friendly, we sort it alphabetically instead of just showing the order from the data model. Additionally, we introduce groups and add the company that ships the products so that the data is easier to consume.")** ([preview output](https://sap-samples.github.io/ui5-typescript-walkthrough/step-24/index-cdn.html) | [download all files](https://sap-samples.github.io/ui5-typescript-walkthrough/ui5-typescript-walkthrough-step-24.zip)) +- **[Step 25: Remote OData Service](step-25/README.md "So far we have worked with local JSON data, but now we will access a real OData service to visualize remote data.")** (preview output *unfeasible* | [download all files](https://sap-samples.github.io/ui5-typescript-walkthrough/ui5-typescript-walkthrough-step-25.zip)) +- **[Step 26: Mock Server Configuration](step-26/README.md "We just ran our app against a real service, but for developing and testing our app we do not want to rely on the availability of the “real” service or put additional load on the system where the data service is located.")** ([preview output](https://sap-samples.github.io/ui5-typescript-walkthrough/step-26/test/mockServer-cdn.html) | [download all files](https://sap-samples.github.io/ui5-typescript-walkthrough/ui5-typescript-walkthrough-step-26.zip)) +- **[Step 27: Unit Test with QUnit](step-27/README.md "Now that we have a test folder in the app, we can start to increase our test coverage. ")** ([preview output](https://sap-samples.github.io/ui5-typescript-walkthrough/step-27/test/unit/unitTests-cdn.qunit.html) | [download all files](https://sap-samples.github.io/ui5-typescript-walkthrough/ui5-typescript-walkthrough-step-27.zip)) +- **[Step 28: Integration Test with OPA](step-28/README.md "If we want to test interaction patterns or more visual features of our app, we can also write an integration test. ")** ([preview output](https://sap-samples.github.io/ui5-typescript-walkthrough/step-28/test/integration/opaTests-cdn.qunit.html) | [download all files](https://sap-samples.github.io/ui5-typescript-walkthrough/ui5-typescript-walkthrough-step-28.zip)) +- **[Step 29: Debugging Tools](step-29/README.md "Even though we have added a basic test coverage in the previous steps, it seems like we accidentally broke our app, because it does not display prices to our invoices anymore. We need to debug the issue and fix it before someone finds out.")** (*code remains unchanged from the previous step*) +- **[Step 30: Routing and Navigation](step-30/README.md "So far, we have put all app content on one single page. As we add more and more features, we want to split the content and put it on separate pages.")** ([preview output](https://sap-samples.github.io/ui5-typescript-walkthrough/step-30/test/mockServer-cdn.html) | [download all files](https://sap-samples.github.io/ui5-typescript-walkthrough/ui5-typescript-walkthrough-step-30.zip)) +- **[Step 31: Routing with Parameters](step-31/README.md "We can now navigate between the overview and the detail page, but the actual item that we selected in the overview is not displayed on the detail page yet. A typical use case for our app is to show additional information for the selected item on the detail page. ")** ([preview output](https://sap-samples.github.io/ui5-typescript-walkthrough/step-31/test/mockServer-cdn.html) | [download all files](https://sap-samples.github.io/ui5-typescript-walkthrough/ui5-typescript-walkthrough-step-31.zip)) +- **[Step 32: Routing Back and History](step-32/README.md "Now we can navigate to our detail page and display an invoice, but we cannot go back to the overview page yet. We'll add a back button to the detail page and implement a function that shows our overview page again.")** ([preview output](https://sap-samples.github.io/ui5-typescript-walkthrough/step-32/test/mockServer-cdn.html) | [download all files](https://sap-samples.github.io/ui5-typescript-walkthrough/ui5-typescript-walkthrough-step-32.zip)) +- **[Step 33: Custom Controls](step-33/README.md "In this step, we are going to extend the functionality of OpenUI5 with a custom control. We want to rate the product shown on the detail page, so we create a composition of multiple standard controls using the OpenUI5 extension mechanism and add some glue code to make them work nicely together. This way, we can reuse the control across the app and keep all related functionality in one module.")** ([preview output](https://sap-samples.github.io/ui5-typescript-walkthrough/step-33/test/mockServer-cdn.html) | [download all files](https://sap-samples.github.io/ui5-typescript-walkthrough/ui5-typescript-walkthrough-step-33.zip)) +- **[Step 34: Responsiveness](step-34/README.md "In this step, we improve the responsiveness of our app. OpenUI5 applications can be run on phone, tablet, and desktop devices and we can configure the application to make best use of the screen estate for each scenario. Fortunately, OpenUI5 controls like the sap.m.Table already deliver a lot of features that we can use.")** ([preview output](https://sap-samples.github.io/ui5-typescript-walkthrough/step-34/test/mockServer-cdn.html) | [download all files](https://sap-samples.github.io/ui5-typescript-walkthrough/ui5-typescript-walkthrough-step-34.zip)) +- **[Step 35: Device Adaptation](step-35/README.md "We now configure the visibility and properties of controls based on the device that we run the application on. By making use of the sap.ui.Device API and defining a device model we will make the app look great on many devices.")** ([preview output](https://sap-samples.github.io/ui5-typescript-walkthrough/step-35/test/mockServer-cdn.html) | [download all files](https://sap-samples.github.io/ui5-typescript-walkthrough/ui5-typescript-walkthrough-step-35.zip)) +- **[Step 36: Content Density](step-36/README.md "In this step of our Walkthrough tutorial, we adjust the content density based on the user’s device. OpenUI5 contains different content densities allowing you to display larger controls for touch-enabled devices and a smaller, more compact design for devices that are operated by mouse. In our app, we will detect the device and adjust the density accordingly.")** ([preview output](https://sap-samples.github.io/ui5-typescript-walkthrough/step-36/test/mockServer-cdn.html) | [download all files](https://sap-samples.github.io/ui5-typescript-walkthrough/ui5-typescript-walkthrough-step-36.zip)) +- **[Step 37: Accessibility](step-37/README.md "In this step we're going to improve the accessibility of our app.")** ([preview output](https://sap-samples.github.io/ui5-typescript-walkthrough/step-37/test/mockServer-cdn.html) | [download all files](https://sap-samples.github.io/ui5-typescript-walkthrough/ui5-typescript-walkthrough-step-37.zip)) +- **[Step 38: Build Your Application](step-38/README.md "In this step we're going to build our application and consume the speed of a built OpenUI5 application.")** ([download all files](https://sap-samples.github.io/ui5-typescript-walkthrough/ui5-typescript-walkthrough-step-38.zip)) + +## Requirements + +The project uses npm workspaces and requires a [Node.js](https://nodejs.org/) version >= `16` to be installed. + +### Getting Started + +The project is setup as monorepo. All steps are located inside the `steps` folder and labelled with their step number. The monorepo uses `npm` workspaces to manage all steps together. But you can also run `npm` inside each individual step. + +To setup the monorepo you first need to install all depenedencies: + +```sh +npm install +``` + +To run any step, just execute one of the scripts from `package.json` via npm, e.g.: + +```sh +# Option 1: use workspace command to start the step +npm start -w ui5.walkthrough.step01 + +# Option 2: change to the folder of the step and start it +cd step-01 +npm start +``` + +## Download and Installation + + + +## Known Issues + +No known issues. + +## How to obtain support + +[Create an issue](https://github.com/SAP-samples/ui5-typescript-walkthrough/issues) in this repository if you find a bug or have questions about the content. + +For additional support, [ask a question in OpenUI5 Community on Slack](https://ui5-slack-invite.cfapps.eu10.hana.ondemand.com/). + +## Contributing + +If you wish to contribute code, offer fixes or improvements, please send a pull request. Due to legal reasons, contributors will be asked to accept a DCO when they create the first pull request to this project. This happens in an automated fashion during the submission process. SAP uses [the standard DCO text of the Linux Foundation](https://developercertificate.org/). + +## License + +Copyright (c) 2023 SAP SE or an SAP affiliate company. All rights reserved. This project is licensed under the Apache Software License, version 2.0 except as noted otherwise in the [LICENSE](LICENSE) file. diff --git a/step-01/Component-preload.js b/step-01/Component-preload.js new file mode 100644 index 0000000..88291f8 --- /dev/null +++ b/step-01/Component-preload.js @@ -0,0 +1,5 @@ +//@ui5-bundle ui5/walkthrough/Component-preload.js +sap.ui.require.preload({ + "ui5/walkthrough/manifest.json":'{"_version":"1.60.0","sap.app":{"id":"ui5.walkthrough","type":"application","title":"OpenUI5 TypeScript Walkthrough","applicationVersion":{"version":"1.0.0"}}}' +}); +//# sourceMappingURL=Component-preload.js.map diff --git a/step-01/Component-preload.js.map b/step-01/Component-preload.js.map new file mode 100644 index 0000000..e7dc71c --- /dev/null +++ b/step-01/Component-preload.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Component-preload.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"names":[],"sources":["Component-preload.js?bundle-code-0"],"mappings":"AAAA;AACA","sourcesContent":["sap.ui.require.preload({\n"],"sourceRoot":""}}]} \ No newline at end of file diff --git a/step-01/README.md b/step-01/README.md new file mode 100644 index 0000000..3a82cfc --- /dev/null +++ b/step-01/README.md @@ -0,0 +1,167 @@ +## Step 1: Hello World! + +As you know OpenUI5 is all about HTML5. Let's get started with building a first "Hello World" with only HTML. In addition we'll initialize the UI5 Tooling, so we can benefit from it from the beginning. + +  +*** + +### Preview + + +![](https://sdk.openui5.org/docs/topics/loio1dd456361379431aab7e5bcdaaeff00f_LowRes.png "The browser shows the text \"Hello World\"") + +*The browser shows the text \"Hello World\"* + +*** + +### Coding + + +We create a folder on our local machine which will contain all the sources of the app we're going to build. We'll refer to this folder as the “app root directory". + +*** + +### webapp/index.html \(New\) + +In the app root directory, we create a new folder named `webapp`. This folder exists to store all the sources that become available in the browser later. We refer to this folder as the "webapp folder". + +In our webapp folder, we createt a new HTML file named `index.html` and copy the following content to it: + +```html + + + + + UI5 TypeScript Walkthrough + + +
Hello World
+ + +``` + +> :round_pushpin: **Note:**
+> An HTML document consists basically of two sections: head and body. The head part will be used by the browser to process the document. +> +> Using meta tags, we can influence the behavior of the browser. In this case, we tell the browser to use `UTF-8` as the document character set. +> +> We also give our app a title that will be displayed in the browser. Our hard-coded title can be overruled by the app, for example to show a title in the language of the user. The body part describes the layout of the page. In our case, we simply display “Hello World” by using a `div` tag. + +*** + +### webapp/manifest.json \(New\) + +The manifest file, also known as the "descriptor" or "app descriptor," serves as a crucial configuration file for applications, components, and libraries. Stored in the `webapp` folder, this file is read by OpenUI5 to instantiate a component. Although we haven't created a component yet (which is part of [Step 9: COmponent Configuration](../step-09/README.md)), we need to create the app descriptor already now, because UI5 Tooling , whichwe intend to use for development, also requires an app descriptor. + +Hence, we create a new file called `manifest.json` in the webapp folder and define its essential attributes: + +- The `_version` attribute is a mandatory field in the app descriptor that indicates the format version of the descriptor. This attribute is crucial for identifying application settings when the descriptor is read by various tools. As new features or changes are introduced in future versions of the descriptor, the version number helps ensure compatibility and proper interpretation of the descriptor's contents. Consequently, with each new version of OpenUI5 a corresponding version of the app descriptor is released. For this tutorial, we have determined that our app requires a minimum OpenUI5 version of 1.120. Therefore, we specify the descriptor format version as 1.60.0, aligning it with the appropriate OpenUI5 version. + + > :bulb: **Tip:**
+ > To find the appropriate `_version` for each OpenUI5 release, see [Descriptor for Applications, Components, and Libraries \(manifest.json\)](httsp://sdk.openui5.org/topic/be0cf40f61184b358b5faedaec98b2da.html). + +- The **`sap.app`** namespace is used to define properties that are specific to the application itself. It includes the following obligatory application-specific attributes: + + - `id`: This property specifies a unique identifier for the application and states the namespace of the application. + It's used to identify the application within the SAP Fiori launchpad or any other deployment environment. + The id has to be provided in dot notation and must not exceed 70 characters. + + - `title`: This property defines the title of the application, which can be displayed in the SAP Fiori launchpad or other application management tools. + + > :round_pushpin: **Note:**
+ > It's recommended to make the title language-dependent, although for now we will use a static title. We'll discuss how to implement language-dependent titles in [Step 10: Descriptor for Applications](../step-10/README.md). + + - `applicationVersion`: This property is used to specify the version of the application. It's typically used for tracking and managing changes to the application over time. The application version must be provided using semantic versioning principles. + + - `type`: This property defines the type of the project, such as `application` or `component`. It helps in determining the application's behavior and how it should be loaded. While the type is actually not a mandatory attribute, it provides a useful project description; hence, it makes sense to conigure it as well. We describe an `application`. + +```json +{ + "_version": "1.60.0", + "sap.app": { + "id": "ui5.walkthrough", + "type": "application", + "title": "OpenUI5 TypeScript Walkthrough", + "applicationVersion": { + "version": "1.0.0" + } + } +} +``` + +> :round_pushpin: **Note:**
+> In this tutorial step, we focus on addingg the absolute minimum configuration to the app descriptor file. In certain development environments you might encounter validation errors due to missing settings. However, for the purposes of this tutorial you can safely ignore these errors. In [Step 10: Descriptor for Applications](../step-10/README.md) we'll examine the purpose of the file in detail and configure some further options. + +*** + +### UI5 Tooling + +The following steps are tailored for using this project with [UI5 Tooling](https://sap.github.io/ui5-tooling/stable/pages/CLI/#local-vs-global-installation). + +*** + +### package.json \(New\) + +We create a new file called `package.json` in the app root directory. It allows us to execute commands and consume packages from the [npm registry](https://www.npmjs.com/) via the npm command line interface. + +Enter the following content: + +```json +{ + "name": "ui5.walkthrough", + "version": "1.0.0", + "description": "OpenUI5 TypeScript Walkthrough", + "private": true, + "scripts": { + "start": "ui5 serve -o index.html" + } +} + +``` + +Next, we install the UI5 CLI and add it as development dependency to our project. For this, we open a terminal in the app root folder and execute the following command: + +```sh +npm install --save-dev @ui5/cli +``` + +Finally, we initialize the UI5 Tooling configuration for our project by executing the following command on the app root folder: + +```sh +ui5 init +``` + +This will generate a `ui5.yaml` file in the app root directory, which is essential for using UI5 Tooling with our project. +  + +To start the web server, ecexcute the following command: + +```sh +npm start +``` + +This will open a new browser window hosting your newly created `index.html`. + +  +*** + +### Conventions + +- The `index.html` file is located in the `webapp` folder if it is used productively. + +  +*** + +**Next:** [Step 2: Bootstrap](../step-02/README.md "Before we can do something with UI5, we need to laod and initialize it. This process of loading and initializing UI5 is called bootstrapping. Once this bootstrapping is finished, we simply display an alert.") + +*** + +**Related Information** + +[Descriptor for Applications, Components, and Libraries \(manifest.json\)](https://sdk.openui5.org/topic/be0cf40f61184b358b5faedaec98b2da.html "The descriptor for applications, components, and libraries (in short: app descriptor) is inspired by the WebApplication Manifest concept introduced by the W3C. The descriptor provides a central, machine-readable, and easy-to-access location for storing metadata associated with an application, an application component, or a library.") + +[Development Environment](https://sdk.openui5.org/topic/7bb04e05f9484e1b95b38a2e48ecef4f.html "This part of the documentation introduces you to some common and recommended use cases for the installation, configuration, and setup of OpenUI5 development environments.") + +[App Development](https://sdk.openui5.org/topic/b1fbe1a22f8d4a5bbb601591e27b68d1 "There are several ways to develop OpenUI5 applications. Select the one that meets the requirements of your projects and your expectations best.") + +[UI5 Tooling: Getting Started](https://sap.github.io/ui5-tooling/stable/pages/GettingStarted/) diff --git a/step-01/index.html b/step-01/index.html new file mode 100644 index 0000000..7a02764 --- /dev/null +++ b/step-01/index.html @@ -0,0 +1,10 @@ + + + + + UI5 TypeScript Walkthrough + + +
Hello World
+ + \ No newline at end of file diff --git a/step-01/manifest.json b/step-01/manifest.json new file mode 100644 index 0000000..90f0f71 --- /dev/null +++ b/step-01/manifest.json @@ -0,0 +1,11 @@ +{ + "_version": "1.60.0", + "sap.app": { + "id": "ui5.walkthrough", + "type": "application", + "title": "OpenUI5 TypeScript Walkthrough", + "applicationVersion": { + "version": "1.0.0" + } + } +} diff --git a/step-02/Component-preload.js b/step-02/Component-preload.js new file mode 100644 index 0000000..b139c9c --- /dev/null +++ b/step-02/Component-preload.js @@ -0,0 +1,8 @@ +//@ui5-bundle ui5/walkthrough/Component-preload.js +sap.ui.require.preload({ + "ui5/walkthrough/index.js":function(){ +"use strict";alert("UI5 is ready"); +}, + "ui5/walkthrough/manifest.json":'{"_version":"1.60.0","sap.app":{"id":"ui5.walkthrough","type":"application","title":"OpenUI5 TypeScript Walkthrough","applicationVersion":{"version":"1.0.0"}}}' +}); +//# sourceMappingURL=Component-preload.js.map diff --git a/step-02/Component-preload.js.map b/step-02/Component-preload.js.map new file mode 100644 index 0000000..745bd47 --- /dev/null +++ b/step-02/Component-preload.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Component-preload.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"names":[],"sources":["Component-preload.js?bundle-code-0"],"mappings":"AAAA;AACA","sourcesContent":["sap.ui.require.preload({\n"],"sourceRoot":""}},{"offset":{"line":3,"column":0},"map":{"version":3,"file":"index.js","names":["alert"],"sources":["index.ts"],"sourcesContent":["alert(\"UI5 is ready\");\n"],"mappings":"AAAA,aAAAA,MAAM","sourceRoot":""}}]} \ No newline at end of file diff --git a/step-02/README.md b/step-02/README.md new file mode 100644 index 0000000..950dd37 --- /dev/null +++ b/step-02/README.md @@ -0,0 +1,248 @@ +## Step 2: Bootstrap + +Before we can do something with OpenUI5, we need to load and initialize it. This process of loading and initializing OpenUI5 is called **bootstrapping**. Once this bootstrapping is finished, we simply display an alert. + +  +*** + +### Preview + + +![](https://sdk.openui5.org/docs/topics/loio0f6b6b9dc46a474da9287c382c8d3456_LowRes.png "An alert \"UI5 is ready\" is displayed") + +*An alert "UI5 is ready" is displayed* +*** + +### Tooling + +First, let's set up our UI5 Tooling to use the OpenUI5 framework for our project. We also need to add the necessary OpenUI5 libraries as dependencies to the project's UI5 Tooling configuration. + +We open a terminal in the root folder of our app and execute the following command: + +```sh +ui5 use OpenUI5 +``` + +This command tells the UI5 Tooling to use the OpenUI5 framework to build and run the application. Next, we configure some runtime dependencies by executing the following command: + +```sh +ui5 add sap.ui.core themelib_sap_horizon +``` + +The `ui5 add` command adds specific libraries as dependency to the projects UI5 Tooling configuration. In this case, we'e adding the `sap.ui.core` library, which provides core functionality of the OpenUI5 framework. This library is essential for bootstrapping OpenUI5. Additionally, we're adding the `themelib_sap_horizon` library which provides the visual styles for the Horizon theme. We'll use this theme with our application. + +*** + +### package.json + +To work with TypeScript, we must install it in our project. To do this, we execute the following command in the terminal: + +```sh +npm install typescript --save-dev +``` + +By running this command, npm will download the TypeScript package from the npm registry and install it in our project's "node_modules" directory. It will also add an entry for TypeScript in the "devDependencies" section of our package.json file, so that other developers working on the project can easily install the same version of TypeScript. + +*** + +### tsconfig.json \(New\) + +As a next step, we need to create the file `tsconfig.json` in the app root directory to indicate that this folder is the root of a TypeScript project. This file specifies various compiler options and project settings that affect how TypeScript code is compiled into JavaScript. + +We specify the compiler options as follow: + +```json +{ + "compilerOptions": { + "target": "es2022", + "module": "es2022", + "moduleResolution": "node", + "skipLibCheck": true, + "allowJs": true, + "strict": true, + "strictPropertyInitialization": false, + "rootDir": "webapp", + "baseUrl": "./", + "paths": { + "ui5/walkthrough/*": ["webapp/*"] + } + }, + "include": ["webapp/**/*"] + } +``` + +Let's go through the compiler options specified in the file: + +- `"target": "es2022"`: The `target` parameter sets the JavaScript language level that the TypeScript code should be compiled down to. We set it to ES2022, which means the generated JavaScript code will be compatible with ECMAScript 2022. + +- `"module": "es2022"`: The `module` parameter specifies the module code generation for the compiled JavaScript. We configured it to ES2022, which means the generated JavaScript will use ECMAScript modules. + +- `"moduleResolution": "node"`: The `moduleResolution` parameter specifies how module dependencies should be resolved. We set it to "node", which means the compiler will use Node.js-style module resolution. + +- `"skipLibCheck": true`: When the `skipLibCheck` parameter is set to `true`, it tells the compiler to skip type checking of declaration files (`.d.ts` files) that are part of external libraries. This can improve compilation speed. + +- `"allowJs": true`: The `allwJs` parameter allows JavaScript files to be included in the TypeScript project. This option enables TypeScript to compile JavaScript code along with TypeScript code. + +- `"strict": true`: When set to "true" the `strict` parameter enables a wide range of type checking behavior that results in more type-safe programs. It includes settings like `noImplicitAny`, `noImplicitThis`, `alwaysStrict` and others. + +- `"strictPropertyInitialization": false`: The `strictPropertyInitialization` parameter is a specific type of strict check that ensures that each instance property of a class gets initialized in the constructor body, or by a property initializer. By setting this to false, it disables strict checking of uninitialized class properties. This means that class properties can be left uninitialized or assigned the value `undefined` without causing a compiler error. + +- `"rootDir": "webapp"`: The `rootDir` paraemter specifies the root directory of the TypeScript source files. The compiler will consider this directory as the starting point for resolving file paths. We set it to our `webapp` folder. + +- `"baseUrl": "./"`: The `baseUrl` parameter is used to resolve non-relative module names. We specified that non-relative module names are resolved relative to the location of the `tsconfig.json` file. + +- `"paths": { "ui5/walkthrough/*": ["webapp/*"] }`: The `path` paramter specifies path mappings for module resolution. It allows you to define custom module paths that map to specific directories or files. In this case, it maps the module path `ui5/walkthrough/*` + +*** + +### Coding + +### webapp/index.ts \(New\) + +Now let's move on to the UI work. We create a new `index.ts` script in the webapp folder. In this script, we add a native `alert()` method with the message "UI5 is ready". + +```ts +alert("UI5 is ready"); +``` + +*** + +### webapp/index.html + +Next, we'll integrate the script we just created into the `index.html` page to signal when the OpenUI5 framework has finished loading. This process involves first incorporating the OpenUI5 framework into our HTML page by adding a script tag specifically for loading OpenUI5. + +We initialize the core modules with the following configuration options: + +- The `id` attribute of the ` + + +
Hello World
+ + +``` + +> :round_pushpin: **Note:** +> The namespace is a unique identifier for your application file. It helps prevent naming conflicts with other modules or libraries. + +*** + +### Tooling + +### package.json + +Let's enhance our tooling setup once again by installing some custom middleware for the ui5-server. This will help us handle our development project more efficiently. + +We open a terminal and navigate to the root folder of our app. Then, we execute the following command: + +```sh +npm install ui5-middleware-livereload ui5-middleware-serveframework ui5-tooling-transpile --save-dev +``` + +When you run the command, npm will download the specified packages from the npm registry and store them in a folder called `node_modules` within your project directory. The `--save-dev` flag instructs npm to save these packages as development dependencies in the `devDependencies` section of the `package.json` file. Development dependencies are packages that are only needed during development and not in production. By separating them from production dependencies, we can keep our project clean and ensure that only the required packages are included when deploying the application. + +Let's break down what each package does: + +- `ui5-middleware-livereload` is a middleware plugin for the UI5 Tooling that enables live reloading of your application in the browser. Live-reloading means that whenever you make changes to your code, the browser automatically refreshes and displays the updated version without requiring manual refreshes (e.g. upon *Save*). + +- `ui5-middleware-serveframework` is another middleware plugin for the UI5 Tooling that provides a web server to serve your OpenUI5 project during development. It allows you to easily serve the necessary OpenUI5 libraries and resources required by your application from your development environment. + +- `ui5-tooling-transpile` is a plugin for the UI5 Tooling that transpiles modern JavaScript (ES6+) and TypeScript into a compatible version for OpenUI5. OpenUI5 is based on older versions of JavaScript, so this plugin allows you to take advantage of the latest language features and syntax while ensuring that your code remains compatible with OpenUI5. + +*** + +### ui5.yaml + +Next, we have to configure the tooling extension we installed from npm to our UI5 Tooling setup, so we can use them in our project. To hook a custom task into a certain build phase of a project, it needs to reference another task that will get executed before or after it. The same applies for a custom middleware: + +- For the `ui5-tooling-transpile-task` we specify that this should happen after the`replaceVersion` task. + +- All our custom middleware extensions will be called after the `compression` middleware. + +> :warning: **Important:**
+> Middleware configurations are applied in the order in which they are defined. + +```yaml +framework: + name: OpenUI5 + version: "1.120.1" + libraries: + - name: sap.ui.core + - name: themelib_sap_horizon +builder: + customTasks: + - name: ui5-tooling-transpile-task + afterTask: replaceVersion +server: + customMiddleware: + - name: ui5-tooling-transpile-middleware + afterMiddleware: compression + - name: ui5-middleware-serveframework + afterMiddleware: compression + - name: ui5-middleware-livereload + afterMiddleware: compression +``` +Now you can benefit from live reload on changes, built framework resources at development time, and make use of TypeScript in OpenUI5. + +> :round_pushpin: **Note:**
+> During its initial run, the `ui5-middleware-serveframework` middleware will build the framework, which can take a while. In all following steps, the build will not happen again and the framework is served from the built resources. + +  +*** + +**Next:** [Step 3: Controls](../step-03/README.md "Now it's time to build our first little UI by replacing the Hello World text in the HTML body by the OpenUI5 control sap.m.Text. In the beginning, we will use the TypeScript control API to set up the UI, the control instance is then placed into the HTML body‚") + +**Previous:** [Step 1: Hello World!](../step-01/README.md "As you know OpenUI5 is all about HTML5. Let's get started with building a first Hello World with only HTML. In addition we will initialize the UI5 Tooling, so we can benefit from it from the beginning.") + +*** + +**Related Information** + +[UI5 Tooling: Consuming OpenUI5 Libaries](https://sap.github.io/ui5-tooling/v3/pages/OpenUI5/) + +[SAP Fiori with Horizon](https://experience.sap.com/fiori-design-web/sap-fiori/#sap-fiori-with-horizon) + +[What is a tsconfig.json](https://www.typescriptlang.org/docs/handbook/tsconfig-json.html) + +[Bootstrapping: Loading and Initializing](https://sdk.openui5.org/topic/a04b0d10fb494d1cb722b9e341b584ba.html "To use OpenUI5 features in your HTML page, you have to load and initialize the OpenUI5 library.") + +[Content Security Policy](https://sdk.openui5.org/topic/fe1a6dba940e479fb7c3bc753f92b28c.html "Content Security Policy (CSP) adds an additional layer of security that can detect and mitigate certain types of attacks, such as cross-site scripting and data injection.") + +[NPM Package: `ui5-middleware-livereload`](https://www.npmjs.com/package/ui5-middleware-livereload) + +[NPM Package: `ui5-middleware-serveframework`](https://www.npmjs.com/package/ui5-middleware-serveframework) + +[NPM Package: `ui5-tooling-transpile`](https://www.npmjs.com/package/ui5-tooling-transpile) + +[UI5 Tooling: Custom Tasks](https://sap.github.io/ui5-tooling/v3/pages/extensibility/CustomTasks/) + +[UI5 Tooling: Custom Server Middleware](https://sap.github.io/ui5-tooling/v3/pages/extensibility/CustomServerMiddleware/) \ No newline at end of file diff --git a/step-02/index-cdn.html b/step-02/index-cdn.html new file mode 100644 index 0000000..d92d4f3 --- /dev/null +++ b/step-02/index-cdn.html @@ -0,0 +1,21 @@ + + + + + UI5 TypeScript Walkthrough + + + +
Hello World
+ + diff --git a/step-02/index-dbg.js b/step-02/index-dbg.js new file mode 100644 index 0000000..d7fabd7 --- /dev/null +++ b/step-02/index-dbg.js @@ -0,0 +1,4 @@ +"use strict"; + +alert("UI5 is ready"); +//# sourceMappingURL=index-dbg.js.map diff --git a/step-02/index-dbg.js.map b/step-02/index-dbg.js.map new file mode 100644 index 0000000..bc4d328 --- /dev/null +++ b/step-02/index-dbg.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index-dbg.js","names":["alert"],"sources":["index.ts"],"sourcesContent":["alert(\"UI5 is ready\");\n"],"mappings":";;AAAAA,KAAK,CAAC,cAAc,CAAC"} \ No newline at end of file diff --git a/step-02/index.html b/step-02/index.html new file mode 100644 index 0000000..b3e4009 --- /dev/null +++ b/step-02/index.html @@ -0,0 +1,21 @@ + + + + + UI5 TypeScript Walkthrough + + + +
Hello World
+ + diff --git a/step-02/index.js b/step-02/index.js new file mode 100644 index 0000000..544cbde --- /dev/null +++ b/step-02/index.js @@ -0,0 +1,2 @@ +"use strict";alert("UI5 is ready"); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/step-02/index.js.map b/step-02/index.js.map new file mode 100644 index 0000000..1782e21 --- /dev/null +++ b/step-02/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","names":["alert"],"sources":["index.ts"],"sourcesContent":["alert(\"UI5 is ready\");\n"],"mappings":"aAAAA,MAAM"} \ No newline at end of file diff --git a/step-02/index.ts b/step-02/index.ts new file mode 100644 index 0000000..a049a91 --- /dev/null +++ b/step-02/index.ts @@ -0,0 +1 @@ +alert("UI5 is ready"); diff --git a/step-02/manifest.json b/step-02/manifest.json new file mode 100644 index 0000000..90f0f71 --- /dev/null +++ b/step-02/manifest.json @@ -0,0 +1,11 @@ +{ + "_version": "1.60.0", + "sap.app": { + "id": "ui5.walkthrough", + "type": "application", + "title": "OpenUI5 TypeScript Walkthrough", + "applicationVersion": { + "version": "1.0.0" + } + } +} diff --git a/step-03/Component-preload.js b/step-03/Component-preload.js new file mode 100644 index 0000000..4a0f0b5 --- /dev/null +++ b/step-03/Component-preload.js @@ -0,0 +1,8 @@ +//@ui5-bundle ui5/walkthrough/Component-preload.js +sap.ui.require.preload({ + "ui5/walkthrough/index.js":function(){ +"use strict";sap.ui.define(["sap/m/Text"],function(t){"use strict";new t({text:"Hello World"}).placeAt("content")}); +}, + "ui5/walkthrough/manifest.json":'{"_version":"1.60.0","sap.app":{"id":"ui5.walkthrough","type":"application","title":"OpenUI5 TypeScript Walkthrough","applicationVersion":{"version":"1.0.0"}}}' +}); +//# sourceMappingURL=Component-preload.js.map diff --git a/step-03/Component-preload.js.map b/step-03/Component-preload.js.map new file mode 100644 index 0000000..2db5931 --- /dev/null +++ b/step-03/Component-preload.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Component-preload.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"names":[],"sources":["Component-preload.js?bundle-code-0"],"mappings":"AAAA;AACA","sourcesContent":["sap.ui.require.preload({\n"],"sourceRoot":""}},{"offset":{"line":3,"column":0},"map":{"version":3,"file":"index.js","names":["Text","text","placeAt"],"sources":["index.ts"],"sourcesContent":["import Text from \"sap/m/Text\";\n\nnew Text({\n text: \"Hello World\"\n}).placeAt(\"content\");\n"],"mappings":"AAAA,mEAEA,IAAIA,EAAK,CACLC,KAAM,gBACPC,QAAQ,UAAW","sourceRoot":""}}]} \ No newline at end of file diff --git a/step-03/README.md b/step-03/README.md new file mode 100644 index 0000000..ba3e858 --- /dev/null +++ b/step-03/README.md @@ -0,0 +1,122 @@ +## Step 3: Controls + +Now it is time to build our first little UI by replacing the “Hello World” text in the HTML body by the OpenUI5 control `sap/m/Text`. In the beginning, we will use the TypeScript control API to set up the UI, the control instance is then placed into the HTML body. + + +  +*** + +### Preview + +![](https://sdk.openui5.org/docs/topics/loio30a42d381b9e4388bf7fdc0b941e5381_LowRes.png "The \"Hello World\" text is now displayed by a OpenUI5 control") + +*The "Hello World" text is now displayed by an OpenUI5 control* + + +*** + +### Tooling + +### package.json + +To get the type definitions for OpenUI5, we need to install them to our project. We open a terminal in the root folder of our app and exectue the following command: + +```sh +npm install @types/openui5 --save-dev +``` + +*** + +### Coding + +### webapp/index.ts + +Now we make some changes to our `index.ts` file: We remove the alert method and instantiate an OpenUI5 text control instead. We create an instance of the text control by passing its options as a TypeScript object to the constructor. In our case, we want the text control to display the message "Hello World", so we'll set the `text` property accordingly. + +To place the text control to our HTML document, we chain the constructor call of the control with the `placeAt` method. This method is used to position OpenUI5 controls. In our case, we add the text control to the DOM element with the ID `content`. + +```ts +import Text from "sap/m/Text"; + +new Text({ + text: "Hello World" +}).placeAt("content"); +``` + +Controls are used to define appearance and behavior of parts of the screen. + +All controls of OpenUI5 have a fixed set of properties, aggregations, and associations for configuration. You can find their descriptions in the Demo Kit. In addition, each control comes with a set of public functions that you can look up in the API reference. + +> :warning: **Important:**
+> Only instances of `sap.ui.core.Control` or their subclasses can be rendered stand-alone and have a `placeAt` function. Each control extends `sap.ui.core.Element` that can only be rendered inside controls. Check the API reference to learn more about the inheritance hierarchy of controls. The API documentation of each control refers to the directly known subclasses. + +*** + +### webapp/index.html + +We replace the `
` tag in our `webapp/index.html` file with a `` tag and assign it the ID `content`. The body tag of the HTML document thus becomes the target node for the text control we defined in the `index.ts` script. + +We also add the `sapUiBody` class, which provides additional theme-dependent styles. + +```html + + + + + UI5 TypeScript Walkthrough + + + + + +``` + +In the example above, the callback of the `onInit` event is where we now instantiate an OpenUI5 text control. + +*** + + +### UI5 Tooling + +As we now use the `sap.m` library with our app, we need to add the dependency to this library to our UI5 Tooling setup. + +We open a terminal in the root folder of our app and exectue the following command: + +```sh +ui5 add sap.m` +``` + +  +*** + +**Next:** [Step 4: XML Views](../step-04/README.md "Putting all our UI into the index.html file will very soon result in a messy setup and there is quite a bit of work ahead of us. So let’s do a first modularization by putting the sap/m/Text control into a dedicated view.") + +**Previous:** [Step 2: Bootstrap](../step-02/README.md "Before we can do something with OpenUI5, we need to load and initialize it. This process of loading and initializing OpenUI5 is called bootstrapping. Once this bootstrapping is finished, we simply display an alert.") + +*** + +**Related Information** + +[TypeScript definitions for OpenUI5](https://www.npmjs.com/package/@types/openui5) + +[Working with Controls](https://sdk.openui5.org/topic/91f0a22d6f4d1014b6dd926db0e91070.html "Controls are used to define the appearance and behavior of screen areas.") + +[API Reference: `sap.m.Text`](https://sdk.openui5.orgapi/sap.m.Text) + +[Samples: `sap.m.Text` ](https://sdk.openui5.orgentity/sap.m.Text) + +[API Reference: `sap.ui.core.Control`](https://sdk.openui5.orgapi/sap.ui.core.Control) + +[API Reference: `sap.ui.core.Element`](https://sdk.openui5.orgapi/sap.ui.core.Element) + +[API Reference: `sap.ui.base.ManagedObject`](https://sdk.openui5.orgapi/sap.ui.base.ManagedObject) \ No newline at end of file diff --git a/step-03/index-cdn.html b/step-03/index-cdn.html new file mode 100644 index 0000000..00afa8d --- /dev/null +++ b/step-03/index-cdn.html @@ -0,0 +1,20 @@ + + + + + UI5 TypeScript Walkthrough + + + + + diff --git a/step-03/index-dbg.js b/step-03/index-dbg.js new file mode 100644 index 0000000..6176bcb --- /dev/null +++ b/step-03/index-dbg.js @@ -0,0 +1,10 @@ +"use strict"; + +sap.ui.define(["sap/m/Text"], function (Text) { + "use strict"; + + new Text({ + text: "Hello World" + }).placeAt("content"); +}); +//# sourceMappingURL=index-dbg.js.map diff --git a/step-03/index-dbg.js.map b/step-03/index-dbg.js.map new file mode 100644 index 0000000..69a9fb7 --- /dev/null +++ b/step-03/index-dbg.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index-dbg.js","names":["Text","text","placeAt"],"sources":["index.ts"],"sourcesContent":["import Text from \"sap/m/Text\";\n\nnew Text({\n text: \"Hello World\"\n}).placeAt(\"content\");\n"],"mappings":";;;;;EAEA,IAAIA,IAAI,CAAC;IACLC,IAAI,EAAE;EACV,CAAC,CAAC,CAACC,OAAO,CAAC,SAAS,CAAC;AAAC"} \ No newline at end of file diff --git a/step-03/index.html b/step-03/index.html new file mode 100644 index 0000000..495059d --- /dev/null +++ b/step-03/index.html @@ -0,0 +1,20 @@ + + + + + UI5 TypeScript Walkthrough + + + + + diff --git a/step-03/index.js b/step-03/index.js new file mode 100644 index 0000000..b21cfe7 --- /dev/null +++ b/step-03/index.js @@ -0,0 +1,2 @@ +"use strict";sap.ui.define(["sap/m/Text"],function(t){"use strict";new t({text:"Hello World"}).placeAt("content")}); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/step-03/index.js.map b/step-03/index.js.map new file mode 100644 index 0000000..ef4b109 --- /dev/null +++ b/step-03/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","names":["Text","text","placeAt"],"sources":["index.ts"],"sourcesContent":["import Text from \"sap/m/Text\";\n\nnew Text({\n text: \"Hello World\"\n}).placeAt(\"content\");\n"],"mappings":"mEAEA,IAAIA,EAAK,CACLC,KAAM,gBACPC,QAAQ,UAAW"} \ No newline at end of file diff --git a/step-03/index.ts b/step-03/index.ts new file mode 100644 index 0000000..4106ac8 --- /dev/null +++ b/step-03/index.ts @@ -0,0 +1,5 @@ +import Text from "sap/m/Text"; + +new Text({ + text: "Hello World" +}).placeAt("content"); diff --git a/step-03/manifest.json b/step-03/manifest.json new file mode 100644 index 0000000..90f0f71 --- /dev/null +++ b/step-03/manifest.json @@ -0,0 +1,11 @@ +{ + "_version": "1.60.0", + "sap.app": { + "id": "ui5.walkthrough", + "type": "application", + "title": "OpenUI5 TypeScript Walkthrough", + "applicationVersion": { + "version": "1.0.0" + } + } +} diff --git a/step-04/Component-preload.js b/step-04/Component-preload.js new file mode 100644 index 0000000..f0d6b6a --- /dev/null +++ b/step-04/Component-preload.js @@ -0,0 +1,9 @@ +//@ui5-bundle ui5/walkthrough/Component-preload.js +sap.ui.require.preload({ + "ui5/walkthrough/index.js":function(){ +"use strict";sap.ui.define(["sap/ui/core/mvc/XMLView"],function(e){"use strict";e.create({viewName:"ui5.walkthrough.view.App",id:"app"}).then(function(e){e.placeAt("content")})}); +}, + "ui5/walkthrough/manifest.json":'{"_version":"1.60.0","sap.app":{"id":"ui5.walkthrough","type":"application","title":"OpenUI5 TypeScript Walkthrough","applicationVersion":{"version":"1.0.0"}}}', + "ui5/walkthrough/view/App.view.xml":'' +}); +//# sourceMappingURL=Component-preload.js.map diff --git a/step-04/Component-preload.js.map b/step-04/Component-preload.js.map new file mode 100644 index 0000000..cc49e4e --- /dev/null +++ b/step-04/Component-preload.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Component-preload.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"names":[],"sources":["Component-preload.js?bundle-code-0"],"mappings":"AAAA;AACA","sourcesContent":["sap.ui.require.preload({\n"],"sourceRoot":""}},{"offset":{"line":3,"column":0},"map":{"version":3,"file":"index.js","names":["XMLView","create","viewName","id","then","view","placeAt"],"sources":["index.ts"],"sourcesContent":["import XMLView from \"sap/ui/core/mvc/XMLView\";\n\nXMLView.create({\n viewName: \"ui5.walkthrough.view.App\",\n id: \"app\"\n}).then(function (view) {\n view.placeAt(\"content\");\n});"],"mappings":"AAAA,gFAEAA,EAAQC,OAAO,CACXC,SAAU,2BACVC,GAAI,QACLC,KAAK,SAAUC,GACdA,EAAKC,QAAQ,UACjB,EAAG","sourceRoot":""}}]} \ No newline at end of file diff --git a/step-04/README.md b/step-04/README.md new file mode 100644 index 0000000..eae1c15 --- /dev/null +++ b/step-04/README.md @@ -0,0 +1,101 @@ +## Step 4: XML Views + +Putting all our UI into the `index.ts` file will very soon result in a messy setup and there is quite a bit of work ahead of us. So let’s do a first modularization by putting the `sap/m/Text` control into a dedicated `view`. + +When working with OpenUI5, we recommend the use of XML views, as this produces the most readable code and will force us to separate the view declaration from the controller logic. Yet the look of our UI will not change. + +  +*** +### Preview + + +![](https://sdk.openui5.org/docs/topics/loio05f6775a39d3409ea673f4acc3812142_LowRes.png "The \"Hello World\" text is now displayed by a OpenUI5 control \(No visual changes to last step\)") + +*The "The \"Hello World\" text is now displayed by an OpenUI5 control \(No visual changes to last step\)* +*** + +### Coding + +### webapp/view/App.view.xml \(New\) + +We create a new folder called `view` inside the `webapp` folder. This folder will hold all our XML view files. Inside the `view` folder, we create a new file called `App.view.xml`. In OpenUI5, the root node of an XML view is the `` tag. To use this tag, we need to declare the XML namespace `mvc`, which corresponds to the `sap.ui.core.mvc` namespace. This namespace provides classes for creating and working with views and other Model-View-Controller \(MVC\) assets. Additionally, we declare the default XML namespace to the `sap.m` namespace. This namespace contains the majority of OpenUI5's UI assets, including the `Text` control that we want to use with our view. + +Inside the `` tag, we add the `` tag from the default XML namespace. This `` tag represents the text control that will be displayed on the view. We set the `text` attribute of the `` tag to "Hello World". This will display the text "Hello World" on the view. + +```xml + + + +``` + +We have created an XML view that displays a text control with the text "Hello World". + +> :bulb: **Tip:**
+> XML tags are mapped to UI controls, and attributes are mapped to the properties of the control. In this case, the `` tag represents the `Text` control in the sap.m library, and the `text` attribute sets the `text` property of the control. + +> :round_pushpin: **Note:**
+> The namespace identifies all resources of the project and has to be unique. If you develop your own application code or library, you cannot use the namespace prefix `sap`, because this namespace is reserved for SAP resources. Instead, simply define your own unique namespace \(for example, `myCompany.myApp`\). + +*** + +### webapp/index.ts + +As a next step, we are going to replace the `sap/m/Text` control in our `index.ts` file with the app view that we've just created. To do this, we utilize the `XMLView.create` function, which is a part of the `sap/ui/core/mvc/View` module. This function needs a `viewName` property, which indicates the resource that needs to be loaded. The `viewName` is a combination of the namespace defined in the bootstrap and the path to the app view, but without the ".view.xml" extension. In addition, we set the `id` property to "app". Providing a stable ID is beneficial as it offers an easy and consistent way to identify and refer to specific views and elements in your code, thus helping to keep your code organized. + +```ts +import XMLView from "sap/ui/core/mvc/XMLView"; + +XMLView.create({ + viewName: "ui5.walkthrough.view.App", + id: "app" +}).then(function (view) { + view.placeAt("content"); +}); + +``` +We have now embed our app view to the body of the HTML document. + +> :bulb: **Tip:**
+>Although setting an ID is not mandatory, it greatly improves the maintainability and flexibility of your code. With a stable ID, you can easily locate and update specific parts of your application. + +  +*** + +### Conventions + +- View names are capitalized + +- All views are stored in the `view` folder + +- Names of XML views always end with `*.view.xml` + +- XML namespaces are declared in the root element of teh view + +- As a general rule, the default XML namespace is `sap.m` + +- Other XML namespaces use the last part of the SAP namespace as alias \(for example, `mvc` for `sap.ui.core.mvc`\) + + +  +*** + +**Next:** [Step 5: Controllers](../step-05/README.md "In this step, we replace the text with a button and show the Hello World message when the button is pressed. The handling of the button's press event is implemented in the controller of the view.") + +**Previous:** [Step 3: Controls](../step-03/README.md "Now it's time to build our first little UI by replacing the Hello World text in the HTML body by the OpenUI5 control sap.m.Text. In the beginning, we will use the TypeScript control AOI to set up the UI, the control instance is then placed into the HTML body.") + +*** + +**Related Information** + +[Model View Controller \(MVC\)](https://sdk.openui5.org/topic/91f233476f4d1014b6dd926db0e91070.html "The Model View Controller (MVC) concept is used in OpenUI5 to separate the representation of information from the user interaction. This separation facilitates development and the changing of parts independently.") + +[XML Namespaces - The xmlns Atribute](https://www.w3schools.com/XML/xml_namespaces.asp) +[Views](https://sdk.openui5.org/topic/91f27e3e6f4d1014b6dd926db0e91070.html "The view in the Model-View-Controller (MVC) concept is responsible for defining and rendering the UI. OpenUI5 supports predefined view types.") + +[API Reference: sap.ui.core.mvc.View](https://sdk.openui5.org/api/sap.ui.core.mvc.View) + +[XML View](https://sdk.openui5.org/topic/91f292806f4d1014b6dd926db0e91070.html "The XML view type is defined in an XML file. The file name either ends with .view.xml or as an XML string. The file name and the folder structure together specify the name of the view that equals the OpenUI5 module name.") + +[API Reference: sap.ui.core.mvc.XMLView](https://sdk.openui5.org/api/sap.ui.core.mvc.xmlView) \ No newline at end of file diff --git a/step-04/index-cdn.html b/step-04/index-cdn.html new file mode 100644 index 0000000..00afa8d --- /dev/null +++ b/step-04/index-cdn.html @@ -0,0 +1,20 @@ + + + + + UI5 TypeScript Walkthrough + + + + + diff --git a/step-04/index-dbg.js b/step-04/index-dbg.js new file mode 100644 index 0000000..a510cb9 --- /dev/null +++ b/step-04/index-dbg.js @@ -0,0 +1,13 @@ +"use strict"; + +sap.ui.define(["sap/ui/core/mvc/XMLView"], function (XMLView) { + "use strict"; + + XMLView.create({ + viewName: "ui5.walkthrough.view.App", + id: "app" + }).then(function (view) { + view.placeAt("content"); + }); +}); +//# sourceMappingURL=index-dbg.js.map diff --git a/step-04/index-dbg.js.map b/step-04/index-dbg.js.map new file mode 100644 index 0000000..3bf8774 --- /dev/null +++ b/step-04/index-dbg.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index-dbg.js","names":["XMLView","create","viewName","id","then","view","placeAt"],"sources":["index.ts"],"sourcesContent":["import XMLView from \"sap/ui/core/mvc/XMLView\";\n\nXMLView.create({\n viewName: \"ui5.walkthrough.view.App\",\n id: \"app\"\n}).then(function (view) {\n view.placeAt(\"content\");\n});"],"mappings":";;;;;EAEAA,OAAO,CAACC,MAAM,CAAC;IACXC,QAAQ,EAAE,0BAA0B;IACpCC,EAAE,EAAE;EACR,CAAC,CAAC,CAACC,IAAI,CAAC,UAAUC,IAAI,EAAE;IACpBA,IAAI,CAACC,OAAO,CAAC,SAAS,CAAC;EAC3B,CAAC,CAAC;AAAC"} \ No newline at end of file diff --git a/step-04/index.html b/step-04/index.html new file mode 100644 index 0000000..495059d --- /dev/null +++ b/step-04/index.html @@ -0,0 +1,20 @@ + + + + + UI5 TypeScript Walkthrough + + + + + diff --git a/step-04/index.js b/step-04/index.js new file mode 100644 index 0000000..e0cfe4a --- /dev/null +++ b/step-04/index.js @@ -0,0 +1,2 @@ +"use strict";sap.ui.define(["sap/ui/core/mvc/XMLView"],function(e){"use strict";e.create({viewName:"ui5.walkthrough.view.App",id:"app"}).then(function(e){e.placeAt("content")})}); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/step-04/index.js.map b/step-04/index.js.map new file mode 100644 index 0000000..29e85dc --- /dev/null +++ b/step-04/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","names":["XMLView","create","viewName","id","then","view","placeAt"],"sources":["index.ts"],"sourcesContent":["import XMLView from \"sap/ui/core/mvc/XMLView\";\n\nXMLView.create({\n viewName: \"ui5.walkthrough.view.App\",\n id: \"app\"\n}).then(function (view) {\n view.placeAt(\"content\");\n});"],"mappings":"gFAEAA,EAAQC,OAAO,CACXC,SAAU,2BACVC,GAAI,QACLC,KAAK,SAAUC,GACdA,EAAKC,QAAQ,UACjB,EAAG"} \ No newline at end of file diff --git a/step-04/index.ts b/step-04/index.ts new file mode 100644 index 0000000..1d9ef89 --- /dev/null +++ b/step-04/index.ts @@ -0,0 +1,8 @@ +import XMLView from "sap/ui/core/mvc/XMLView"; + +XMLView.create({ + viewName: "ui5.walkthrough.view.App", + id: "app" +}).then(function (view) { + view.placeAt("content"); +}); \ No newline at end of file diff --git a/step-04/manifest.json b/step-04/manifest.json new file mode 100644 index 0000000..90f0f71 --- /dev/null +++ b/step-04/manifest.json @@ -0,0 +1,11 @@ +{ + "_version": "1.60.0", + "sap.app": { + "id": "ui5.walkthrough", + "type": "application", + "title": "OpenUI5 TypeScript Walkthrough", + "applicationVersion": { + "version": "1.0.0" + } + } +} diff --git a/step-04/view/App.view.xml b/step-04/view/App.view.xml new file mode 100644 index 0000000..4cb117c --- /dev/null +++ b/step-04/view/App.view.xml @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/step-05/Component-preload.js b/step-05/Component-preload.js new file mode 100644 index 0000000..2eb243f --- /dev/null +++ b/step-05/Component-preload.js @@ -0,0 +1,12 @@ +//@ui5-bundle ui5/walkthrough/Component-preload.js +sap.ui.require.preload({ + "ui5/walkthrough/controller/App.controller.js":function(){ +"use strict";sap.ui.define(["sap/ui/core/mvc/Controller"],function(o){"use strict";const e=o.extend("ui5.walkthrough.controller.App",{onShowHello:function o(){alert("Hello World")}});return e}); +}, + "ui5/walkthrough/index.js":function(){ +"use strict";sap.ui.define(["sap/ui/core/mvc/XMLView"],function(e){"use strict";e.create({viewName:"ui5.walkthrough.view.App",id:"app"}).then(function(e){e.placeAt("content")})}); +}, + "ui5/walkthrough/manifest.json":'{"_version":"1.60.0","sap.app":{"id":"ui5.walkthrough","type":"application","title":"OpenUI5 TypeScript Walkthrough","applicationVersion":{"version":"1.0.0"}}}', + "ui5/walkthrough/view/App.view.xml":'' +}); +//# sourceMappingURL=Component-preload.js.map diff --git a/step-05/Component-preload.js.map b/step-05/Component-preload.js.map new file mode 100644 index 0000000..444429b --- /dev/null +++ b/step-05/Component-preload.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Component-preload.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"names":[],"sources":["Component-preload.js?bundle-code-0"],"mappings":"AAAA;AACA","sourcesContent":["sap.ui.require.preload({\n"],"sourceRoot":""}},{"offset":{"line":3,"column":0},"map":{"version":3,"file":"App.controller.js","names":["AppController","Controller","extend","onShowHello","_onShowHello","alert"],"sources":["App.controller.ts"],"sourcesContent":["import Controller from \"sap/ui/core/mvc/Controller\";\n\n/**\n * @name ui5.walkthrough.controller.App\n */\nexport default class AppController extends Controller {\n onShowHello(): void {\n // show a native JavaScript alert\n alert(\"Hello World\");\n }\n};\n"],"mappings":"AAAA,mFAEA,MAGqBA,EAAsBC,EAAUC,OAAA,kCACjDC,YAAW,SAAAC,IAEPC,MAAM,cACT,IACH,OALmBL,CAAa","sourceRoot":"controller"}},{"offset":{"line":6,"column":0},"map":{"version":3,"file":"index.js","names":["XMLView","create","viewName","id","then","view","placeAt"],"sources":["index.ts"],"sourcesContent":["import XMLView from \"sap/ui/core/mvc/XMLView\";\n\nXMLView.create({\n viewName: \"ui5.walkthrough.view.App\",\n id: \"app\"\n}).then(function (view) {\n view.placeAt(\"content\");\n});"],"mappings":"AAAA,gFAEAA,EAAQC,OAAO,CACXC,SAAU,2BACVC,GAAI,QACLC,KAAK,SAAUC,GACdA,EAAKC,QAAQ,UACjB,EAAG","sourceRoot":""}}]} \ No newline at end of file diff --git a/step-05/README.md b/step-05/README.md new file mode 100644 index 0000000..4c58272 --- /dev/null +++ b/step-05/README.md @@ -0,0 +1,96 @@ +## Step 5: Controllers + +In this step, we replace the text with a button and show the “Hello World” message when the button is pressed. The handling of the button's `press` event is implemented in the controller of the view. + +  +*** + +### Preview + + +![](https://sdk.openui5.org/docs/topics/loiocedfdf89b30643ddbfcab1fe50bfa892_LowRes.png "A Say Hello button is added") + +*A Say Hello button is added* +*** + +### Coding + +### webapp/controller/App.controller.ts \(New\) + +First of all, we need a conroller for our app view that defines how the view should react to user inputs, such as a button press event. + +We create a new folder called `controller` inside the `webapp` folder. This folder will hold all our controller files. Inside the `controller` folder, we create a new file called `App.view.xml`. We define the app controller in its own file by extending the OpenUI5-provided `sap/ui/core/mvc/Controller`. In the beginning, it holds only a single function called `onShowHello` that shows an alert with the static text "Hello World". + + +```ts +import Controller from "sap/ui/core/mvc/Controller"; + +/** + * @name ui5.walkthrough.controller.App + */ +export default class AppController extends Controller { + onShowHello(): void { + // show a native JavaScript alert + alert("Hello World"); + } +}; + +``` + +> :round_pushpin: **Note:**
+> The comment `@name ui5.walkthrough.controller.App` is a JSDoc comment that names this controller. It can be used by documentation generators and IDEs to provide more information about this class. + +*** + +### webapp/view/App.view.xml + +To connect our controller with the view, we need to specify the name of our newly created controller in the `controllerName` attribute of the root node. This allows us to access the event handlers and other functionalities defined in the controller. The name should be a module path, which is the location of the controller file. + +In addition, we replace the `` tag with a `