-
Notifications
You must be signed in to change notification settings - Fork 28
Expand file tree
/
Copy pathsteps.json
More file actions
348 lines (348 loc) · 21.6 KB
/
Copy pathsteps.json
File metadata and controls
348 lines (348 loc) · 21.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
{
"tutorial": "walkthrough",
"namespace": "ui5.tutorial.walkthrough",
"steps": [
{
"n": 1,
"id": "01",
"title": "Hello World!",
"previewUrl": "https://ui5.github.io/tutorials/walkthrough/build/01/index.html",
"zipTs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-01.zip",
"zipJs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-01-js.zip",
"description": "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 CLI, so we can benefit from it from the beginning."
},
{
"n": 2,
"id": "02",
"title": "Bootstrap",
"previewUrl": "https://ui5.github.io/tutorials/walkthrough/build/02/index-cdn.html",
"zipTs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-02.zip",
"zipJs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-02-js.zip",
"description": "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."
},
{
"n": 3,
"id": "03",
"title": "Controls",
"previewUrl": "https://ui5.github.io/tutorials/walkthrough/build/03/index-cdn.html",
"zipTs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-03.zip",
"zipJs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-03-js.zip",
"description": "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 create an OpenUI5 control instance and place into the HTML body."
},
{
"n": 4,
"id": "04",
"title": "XML Views",
"previewUrl": "https://ui5.github.io/tutorials/walkthrough/build/04/index-cdn.html",
"zipTs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-04.zip",
"zipJs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-04-js.zip",
"description": "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."
},
{
"n": 5,
"id": "05",
"title": "Controllers",
"previewUrl": "https://ui5.github.io/tutorials/walkthrough/build/05/index-cdn.html",
"zipTs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-05.zip",
"zipJs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-05-js.zip",
"description": "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."
},
{
"n": 6,
"id": "06",
"title": "Modules",
"previewUrl": "https://ui5.github.io/tutorials/walkthrough/build/06/index-cdn.html",
"zipTs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-06.zip",
"zipJs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-06-js.zip",
"description": "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."
},
{
"n": 7,
"id": "07",
"title": "JSON Model",
"previewUrl": "https://ui5.github.io/tutorials/walkthrough/build/07/index-cdn.html",
"zipTs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-07.zip",
"zipJs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-07-js.zip",
"description": "Now that we have set up the view and controller, it’s about time to think about the M in MVC."
},
{
"n": 8,
"id": "08",
"title": "Translatable Texts",
"previewUrl": "https://ui5.github.io/tutorials/walkthrough/build/08/index-cdn.html",
"zipTs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-08.zip",
"zipJs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-08-js.zip",
"description": "In this step we move the texts of our UI to a separate resource file."
},
{
"n": 9,
"id": "09",
"title": "Component Configuration",
"previewUrl": "https://ui5.github.io/tutorials/walkthrough/build/09/index-cdn.html",
"zipTs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-09.zip",
"zipJs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-09-js.zip",
"description": "After we have introduced all three parts of the Model-View-Controller \\(MVC\\) concept, we now come to another important structural aspect of OpenUI5."
},
{
"n": 10,
"id": "10",
"title": "Descriptor for Applications",
"previewUrl": "https://ui5.github.io/tutorials/walkthrough/build/10/index-cdn.html",
"zipTs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-10.zip",
"zipJs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-10-js.zip",
"description": "All application-specific configuration settings will now be put into the manifest. This clearly separates the application coding from the configuration settings and makes our app even more flexible."
},
{
"n": 11,
"id": "11",
"title": "Pages and Panels",
"previewUrl": "https://ui5.github.io/tutorials/walkthrough/build/11/index-cdn.html",
"zipTs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-11.zip",
"zipJs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-11-js.zip",
"description": "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."
},
{
"n": 12,
"id": "12",
"title": "Shell Control as Container",
"previewUrl": "https://ui5.github.io/tutorials/walkthrough/build/12/index-cdn.html",
"zipTs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-12.zip",
"zipJs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-12-js.zip",
"description": "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."
},
{
"n": 13,
"id": "13",
"title": "Margins and Paddings",
"previewUrl": "https://ui5.github.io/tutorials/walkthrough/build/13/index-cdn.html",
"zipTs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-13.zip",
"zipJs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-13-js.zip",
"description": "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."
},
{
"n": 14,
"id": "14",
"title": "Custom CSS and Theme Colors",
"previewUrl": "https://ui5.github.io/tutorials/walkthrough/build/14/index-cdn.html",
"zipTs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-14.zip",
"zipJs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-14-js.zip",
"description": "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."
},
{
"n": 15,
"id": "15",
"title": "Nested Views",
"previewUrl": "https://ui5.github.io/tutorials/walkthrough/build/15/index-cdn.html",
"zipTs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-15.zip",
"zipJs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-15-js.zip",
"description": "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."
},
{
"n": 16,
"id": "16",
"title": "Dialogs and Fragments",
"previewUrl": "https://ui5.github.io/tutorials/walkthrough/build/16/index-cdn.html",
"zipTs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-16.zip",
"zipJs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-16-js.zip",
"description": "In this step, we will take a closer look at another element which can be used to assemble views: the fragment."
},
{
"n": 17,
"id": "17",
"title": "Fragment Callbacks",
"previewUrl": "https://ui5.github.io/tutorials/walkthrough/build/17/index-cdn.html",
"zipTs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-17.zip",
"zipJs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-17-js.zip",
"description": "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."
},
{
"n": 18,
"id": "18",
"title": "Icons",
"previewUrl": "https://ui5.github.io/tutorials/walkthrough/build/18/index-cdn.html",
"zipTs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-18.zip",
"zipJs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-18-js.zip",
"description": "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."
},
{
"n": 19,
"id": "19",
"title": "Aggregation Binding",
"previewUrl": "https://ui5.github.io/tutorials/walkthrough/build/19/index-cdn.html",
"zipTs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-19.zip",
"zipJs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-19-js.zip",
"description": "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."
},
{
"n": 20,
"id": "20",
"title": "Data Types",
"previewUrl": "https://ui5.github.io/tutorials/walkthrough/build/20/index-cdn.html",
"zipTs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-20.zip",
"zipJs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-20-js.zip",
"description": "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."
},
{
"n": 21,
"id": "21",
"title": "Expression Binding",
"previewUrl": "https://ui5.github.io/tutorials/walkthrough/build/21/index-cdn.html",
"zipTs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-21.zip",
"zipJs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-21-js.zip",
"description": "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."
},
{
"n": 22,
"id": "22",
"title": "Custom Formatters",
"previewUrl": "https://ui5.github.io/tutorials/walkthrough/build/22/index-cdn.html",
"zipTs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-22.zip",
"zipJs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-22-js.zip",
"description": "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."
},
{
"n": 23,
"id": "23",
"title": "Filtering",
"previewUrl": "https://ui5.github.io/tutorials/walkthrough/build/23/index-cdn.html",
"zipTs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-23.zip",
"zipJs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-23-js.zip",
"description": "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."
},
{
"n": 24,
"id": "24",
"title": "Sorting and Grouping",
"previewUrl": "https://ui5.github.io/tutorials/walkthrough/build/24/index-cdn.html",
"zipTs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-24.zip",
"zipJs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-24-js.zip",
"description": "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."
},
{
"n": 25,
"id": "25",
"title": "Remote OData Service",
"previewUrl": null,
"zipTs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-25.zip",
"zipJs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-25-js.zip",
"description": "So far we have worked with local JSON data, but now we will access a real OData service to visualize remote data."
},
{
"n": 26,
"id": "26",
"title": "Mock Server Configuration",
"previewUrl": "https://ui5.github.io/tutorials/walkthrough/build/26/test/mockServer-cdn.html",
"zipTs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-26.zip",
"zipJs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-26-js.zip",
"description": "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."
},
{
"n": 27,
"id": "27",
"title": "Unit Test with QUnit",
"previewUrl": "https://ui5.github.io/tutorials/walkthrough/build/27/test/Test.cdn.qunit.html?testsuite=test-resources/ui5/tutorial/walkthrough/testsuite.cdn.qunit&test=unit/unitTests",
"zipTs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-27.zip",
"zipJs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-27-js.zip",
"description": "Now that we have a test folder in the app, we can start to increase our test coverage."
},
{
"n": 28,
"id": "28",
"title": "Integration Test with OPA",
"previewUrl": "https://ui5.github.io/tutorials/walkthrough/build/28/test/Test.cdn.qunit.html?testsuite=test-resources/ui5/tutorial/walkthrough/testsuite.cdn.qunit&test=integration/opaTests",
"zipTs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-28.zip",
"zipJs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-28-js.zip",
"description": "If we want to test interaction patterns or more visual features of our app, we can also write an integration test."
},
{
"n": 29,
"id": "29",
"title": "Debugging Tools",
"previewUrl": null,
"zipTs": null,
"zipJs": null,
"description": "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."
},
{
"n": 30,
"id": "30",
"title": "Routing and Navigation",
"previewUrl": "https://ui5.github.io/tutorials/walkthrough/build/30/test/mockServer-cdn.html",
"zipTs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-30.zip",
"zipJs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-30-js.zip",
"description": "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."
},
{
"n": 31,
"id": "31",
"title": "Routing with Parameters",
"previewUrl": "https://ui5.github.io/tutorials/walkthrough/build/31/test/mockServer-cdn.html",
"zipTs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-31.zip",
"zipJs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-31-js.zip",
"description": "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."
},
{
"n": 32,
"id": "32",
"title": "Routing Back and History",
"previewUrl": "https://ui5.github.io/tutorials/walkthrough/build/32/test/mockServer-cdn.html",
"zipTs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-32.zip",
"zipJs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-32-js.zip",
"description": "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."
},
{
"n": 33,
"id": "33",
"title": "Custom Controls",
"previewUrl": "https://ui5.github.io/tutorials/walkthrough/build/33/test/mockServer-cdn.html",
"zipTs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-33.zip",
"zipJs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-33-js.zip",
"description": "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."
},
{
"n": 34,
"id": "34",
"title": "Responsiveness",
"previewUrl": "https://ui5.github.io/tutorials/walkthrough/build/34/test/mockServer-cdn.html",
"zipTs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-34.zip",
"zipJs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-34-js.zip",
"description": "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."
},
{
"n": 35,
"id": "35",
"title": "Device Adaptation",
"previewUrl": "https://ui5.github.io/tutorials/walkthrough/build/35/test/mockServer-cdn.html",
"zipTs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-35.zip",
"zipJs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-35-js.zip",
"description": "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."
},
{
"n": 36,
"id": "36",
"title": "Content Density",
"previewUrl": "https://ui5.github.io/tutorials/walkthrough/build/36/test/mockServer-cdn.html",
"zipTs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-36.zip",
"zipJs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-36-js.zip",
"description": "In this step of our Walkthrough tutorial, we adjust the content density based on the user’s device. Content density refers to the spacing and sizing of the UI controls and elements within your application. 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."
},
{
"n": 37,
"id": "37",
"title": "Accessibility",
"previewUrl": "https://ui5.github.io/tutorials/walkthrough/build/37/test/mockServer-cdn.html",
"zipTs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-37.zip",
"zipJs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-37-js.zip",
"description": "In this step we're going to improve the accessibility of our app."
},
{
"n": 38,
"id": "38",
"title": "Build Your Application",
"previewUrl": null,
"zipTs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-38.zip",
"zipJs": "https://ui5.github.io/tutorials/walkthrough/walkthrough-step-38-js.zip",
"description": "In this step we're going to build our application and consume the speed of a built OpenUI5 application."
}
]
}