@@ -48,7 +48,7 @@ class ContentExplorer(private val client: IModelClient, private val repoManager:
48
48
application.routing {
49
49
get(" /content/" ) {
50
50
call.respondHtmlTemplate(PageWithMenuBar (" content/" , " .." )) {
51
- headContent {contentOverviewHead( )}
51
+ headContent {title( " Content Explorer " )}
52
52
bodyContent {contentOverviewBody()}
53
53
}
54
54
}
@@ -61,7 +61,11 @@ class ContentExplorer(private val client: IModelClient, private val repoManager:
61
61
val tree = CLVersion .loadFromHash(versionHash, client.storeCache).getTree()
62
62
val rootNode = PNodeAdapter (ITree .ROOT_ID , TreePointer (tree))
63
63
call.respondHtmlTemplate(PageWithMenuBar (" content/" , " ../.." )) {
64
- headContent {contentPageHead()}
64
+ headContent {
65
+ title(" Content Explorer" )
66
+ link(" ../../public/content-explorer.css" , rel = " stylesheet" )
67
+ script(" text/javascript" , src = " ../../public/content-explorer.js" ) {}
68
+ }
65
69
bodyContent {contentPageBody(rootNode)}
66
70
}
67
71
}
@@ -84,19 +88,6 @@ class ContentExplorer(private val client: IModelClient, private val repoManager:
84
88
}
85
89
}
86
90
87
- private fun HEAD.contentOverviewHead () {
88
- title(" Content Explorer" )
89
- style {
90
- unsafe {
91
- + """
92
- body {
93
- font-family: sans-serif;
94
- }
95
- """ .trimIndent()
96
- }
97
- }
98
- }
99
-
100
91
private fun FlowContent.contentOverviewBody () {
101
92
h1 { + " Model Server Content" }
102
93
h2 { + " Select a Version" }
@@ -114,181 +105,18 @@ class ContentExplorer(private val client: IModelClient, private val repoManager:
114
105
}
115
106
}
116
107
117
- private fun HEAD.contentPageHead () {
118
- title(" Content Explorer" )
119
- style {
120
- + """
121
- body {
122
- font-family: sans-serif;
123
- }
124
- table {
125
- border-collapse: collapse;
126
- font-family: sans-serif;
127
- font-size: 0.9em;
128
- border-radius:6px;
129
- }
130
- thead tr {
131
- background-color: #009879;
132
- color: #ffffff;
133
- text-align: left;
134
- }
135
- th {
136
- padding: 8px 10px;
137
- }
138
- td {
139
- padding: 5px 10px;
140
- }
141
- tbody tr {
142
- border-bottom: 1px solid #dddddd;
143
- border-left: 1px solid #dddddd;
144
- border-right: 1px solid #dddddd;
145
- }
146
- tbody tr:nth-of-type(even) {
147
- background-color: #f3f3f3;
148
- }
149
- tbody tr:last-of-type
150
- border-bottom: 2px solid #009879;
151
- }
152
- tbody tr.active-row {
153
- font-weight: bold;
154
- color: #009879;
155
- }
156
- .expander {
157
- cursor: pointer;
158
- margin-top: 12px;
159
- font-size: 20px;
160
- float: left;
161
- }
162
- .expander-expanded {
163
- transition: .1s linear;
164
- transform: rotate(90deg);
165
- transform-origin: center center;
166
- }
167
- .nested {
168
- display: none;
169
- margin-left: 9px;
170
- border-left: 1px solid #999999;
171
- }
172
- .active {
173
- display: block;
174
- }
175
- .nodeTree {
176
- list-style-type: none;
177
- }
178
- .treeRoot {
179
- list-style-type: none;
180
- margin-top: 5px;
181
- float: left;
182
- }
183
- .referenceRoles {
184
- margin-top: 5px;
185
- }
186
- .nodeItem {
187
- padding-top: 10px;
188
- }
189
- .nameField {
190
- margin-left: 30px;
191
- padding: 5px;
192
- border: 1px solid;
193
- border-radius: 10px;
194
- width: fit-content;
195
- cursor: pointer;
196
- }
197
- .nameField:hover {
198
- background-color: #e6e6e6;
199
- }
200
- .selectedNameField {
201
- background-color: #c9c9c9;
202
- }
203
- #treeWrapper {
204
- position: absolute;
205
- }
206
- #nodeInspector {
207
- position: fixed;
208
- top: 10%;
209
- left: 65%;
210
- width: 35%;
211
- overflow-scroll;
212
- z-index: 1;
213
- display: none;
214
- background-color: #ffffff;
215
- }
216
- """ .trimIndent()
217
- }
218
- script(" text/javascript" ) {
219
- unsafe {
220
- + """
221
- async function createInspectorDetails(nodeId) {
222
- let response = await window.fetch(window.location.pathname + nodeId + '/');
223
- let nodeInspector = document.getElementById('nodeInspector');
224
- nodeInspector.innerHTML = await response.text();
225
- nodeInspector.style.display = 'block';
226
- }
227
- document.addEventListener('DOMContentLoaded', () => {
228
- var expander = document.getElementsByClassName('expander');
229
- var nameField = document.getElementsByClassName('nameField');
230
- var expandAllBtn = document.getElementById('expandAllBtn');
231
- var collapseAllBtn = document.getElementById('collapseAllBtn');
232
-
233
- for (let i = 0; i < nameField.length; i++) {
234
- nameField[i].addEventListener('click', function() {
235
- let isSelected = this.classList.contains('selectedNameField');
236
- if (isSelected) {
237
- document.getElementById('nodeInspector').style.display = 'none';
238
- } else {
239
- createInspectorDetails(this.dataset.nodeid);
240
- }
241
- let selected = document.getElementsByClassName('selectedNameField');
242
- for (let j = 0; j < selected.length; j++) {
243
- selected[j].classList.remove('selectedNameField');
244
- }
245
- if (!isSelected) {
246
- this.classList.add('selectedNameField');
247
- }
248
- });
249
- }
250
-
251
- for (let i = 0; i < expander.length; i++) {
252
- expander[i].addEventListener('click', function() {
253
- this.parentElement.querySelector(".nested").classList.toggle('active');
254
- this.classList.toggle('expander-expanded');
255
- });
256
- }
257
-
258
- expandAllBtn.addEventListener('click', function () {
259
- var nested = document.getElementsByClassName("nested")
260
- for (let i=0; i < nested.length; i++) {
261
- nested[i].classList.add('active');
262
- }
263
- for (let i = 0; i < expander.length; i++) {
264
- expander[i].classList.add('expander-expanded')
265
- }
266
- });
267
-
268
- collapseAllBtn.addEventListener('click', function () {
269
- var nested = document.getElementsByClassName('nested')
270
- for (let i=0; i < nested.length; i++) {
271
- nested[i].classList.remove('active');
272
- }
273
- for (let i = 0; i < expander.length; i++) {
274
- expander[i].classList.remove('expander-expanded')
275
- }
276
- });
277
- });
278
- """ .trimIndent()
279
- }
280
- }
281
- }
282
-
283
108
private fun FlowContent.contentPageBody (rootNode : PNodeAdapter ) {
284
109
h1 {+ " Model Server Content" }
285
- button {
286
- id = " expandAllBtn"
287
- + " Expand all"
288
- }
289
- button {
290
- id = " collapseAllBtn"
291
- + " Collapse all"
110
+ div {
111
+ style = " display: flex;"
112
+ button(classes= " btn" ) {
113
+ id = " expandAllBtn"
114
+ + " Expand all"
115
+ }
116
+ button(classes= " btn" ) {
117
+ id = " collapseAllBtn"
118
+ + " Collapse all"
119
+ }
292
120
}
293
121
div {
294
122
id = " treeWrapper"
@@ -370,8 +198,11 @@ class ContentExplorer(private val client: IModelClient, private val repoManager:
370
198
}
371
199
for (referenceRole in node.getReferenceRoles()) {
372
200
tr {
373
- td { + " $referenceRole " }
374
- td { + " Not yet implemented" }
201
+ td { + referenceRole }
202
+ td {
203
+ // TODO MODELIX-387
204
+ // +"${node.getReferenceTarget(referenceRole)}"
205
+ }
375
206
}
376
207
}
377
208
}
0 commit comments