Changes for page ExternalApps
Last modified by bougault on 2019/09/12 12:46
Summary
-
Page properties (2 modified, 0 added, 0 removed)
Details
- Page properties
-
- Author
-
... ... @@ -1,1 +1,1 @@ 1 -XWiki. hbpadmin1 +XWiki.bougault - Content
-
... ... @@ -1,462 +1,281 @@ 1 -{{include reference="Collaboratory.Apps.Apps.Code.AppsMacros"/}} 1 +{{velocity}} 2 +#set ($discard = $doc.use('InstalledApp.Code.InstalledAppClass')) 3 +#set($query = 'select doc from Document doc, doc.object(ExternalApps.Code.ExternalAppsClass) as app') 4 +#set($applications = $services.query.xwql($query).addFilter('hidden').execute()) 5 +#if ($xcontext.action == 'edit') 6 +#set ($discard = $xwiki.ssx.use('Collaboratory.Apps.IFrameApp.Code.IFrameAppCss')) 7 +#set ($discardjs = $xwiki.jsx.use('Collaboratory.Apps.IFrameApp.Code.IFrameAppJs')) 2 2 3 -(% class="applications" %) 4 -((( 5 -(% class="application" %) 6 -((( 7 -(% class="application-content" %) 8 -((( 9 -(% class="app-logo" %) 10 -((( 11 - 12 -))) 9 +#macro( applications $applications) 10 +<div class="applications"> 11 + #foreach($application in $applications) 12 + #set($selectField = $application.toString().concat('-selected')) 13 + #set($detailsField = $application.toString().concat('-details')) 14 + <div class="application"> 15 + ## TODO: if not in edit mode, do not define the input + fieldname 16 + <input type="radio" data-type="select" name="InstalledApp.Code.InstalledAppClass_0_app" id="$selectField" value="$application" /> 17 + <input type="checkbox" data-type="details" name="detailedView" id="$detailsField" /> 18 + <label for="$detailsField" class="details-overlay"></label> 19 + #application( $application $selectField $detailsField) 20 + </div> 21 + #end 22 +</div> 23 +#end 13 13 14 -(% class="tags" %) 15 -((( 16 -Brain Simulation Platform 17 -))) 25 +#macro( application $application $selectField $detailsField) 26 + #set($app = $xwiki.getDocument($application)) 27 + #set($title = $app.getDisplayTitle()) 28 + <div class="application-content"> 29 + #if($app.getAttachment('logo.png').isImage()) 30 + <img src="$app.getAttachmentURL('logo.png')" width="75" height="75" alt="$app.getValue('title').replace('"', '\"')"> 31 + #else 32 + <img 33 + src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mN89x8AAuEB74Y0o2cAAAAASUVORK5CYII=" 34 + width="75" 35 + height="75" 36 + alt="" 37 + > 38 + #end 39 + <div class="tags"><span>$app.getValue('category')</span></div> 40 + <h3 class="title">$title</h3> 41 + <p class="description">$!app.getValue('description')</p> 42 + <div class="application-buttons"> 43 + <label for="$detailsField" class="btn label-more"></label> 44 + <label for="$selectField" class="btn btn-primary choose-app">Choose this App</label> 45 + </div> 46 + <div class="details"> 47 + <h4>Maintainers</h4> 48 + [list of maintainers] 49 + <h4>Documentation</h4> 50 + App documentation link 51 + <h4>URL</h4> 52 + $app.getValue('url') 53 + </div> 54 + </div> 55 +#end 18 18 19 -(% class="title" %) 20 -=== Model Catalog === 21 - 22 -(% class="description" %) 23 -A catalog of models developed and/or used in HBP 24 - 25 -(% class="application-buttons" %) 57 +{{html wiki="true"}} 58 +(% class="xform" %) 26 26 ((( 27 - 60 + ; <label#if ($xcontext.action == 'edit') for="ExternalApps.Code.ExternalAppsClass_0_title"#end>$escapetool.xml($doc.displayPrettyName('title', false, false))</label>## 61 + (% class="xHint" %)$services.localization.render('Required. This is how the item will be displayed in the navigation') 62 + : $doc.display('title') 28 28 ))) 64 +{{/html}} 29 29 30 -(% class="details" %) 31 -((( 32 -==== Maintainers ==== 66 +{{html clean="false"}} 33 33 34 -* [[$user.getValue('first_name') $user.getValue('last_name')>>path:/bin/view/ExternalApps/]] 68 +##{{html clean="false"}} 69 +##set ($displayDocExtra = false) 70 +<style> 71 +#document-title { 72 + visibility: hidden; 73 +} 35 35 36 -==== Documentation ==== 75 +.applications { 76 + display: grid; 77 + grid-gap: 20px; 78 +} 37 37 38 -[[$app.getValue('documentation')>>path:$app.getValue('documentation')]] 80 +@media screen and (min-width: 640px) { 81 + .applications { 82 + grid-template-columns: 1fr 1fr; 83 + } 84 +} 85 +/* 86 +@media screen and (min-width: 900px) { 87 + .applications { 88 + grid-template-columns: 1fr 1fr 1fr; 89 + } 90 +} 91 +*/ 39 39 40 -==== URL ==== 93 +@media screen and (min-width: 1200px) { 94 + .applications { 95 + grid-template-columns: 1fr 1fr 1fr; 96 + } 97 +} 41 41 42 -[[https:~~/~~/validation-v1.brainsimulation.eu/>>url:https://validation-v1.brainsimulation.eu/]] 43 -))) 44 -))) 45 -))) 99 +@media screen and (min-width: 1800px) { 100 + .applications { 101 + grid-template-columns: 1fr 1fr 1fr 1fr; 102 + } 103 +} 104 +.application { 105 +background: var(--color-support-light); 106 +} 46 46 47 -(% class="application" %) 48 -((( 49 -(% class="application-content" %) 50 -((( 51 -(% class="app-logo" %) 52 -((( 53 - 54 -))) 108 +.application-content { 109 + border: 1px solid var(--color-support-light); 110 + background: var(--color-white); 111 + padding: 1rem; 112 + height: 100%; 113 + font-weight: normal; 114 + display: block; 115 + position: relative; 116 + padding-bottom: 3rem; 117 +} 55 55 56 -(% class="tags" %) 57 -((( 58 -Neuromorphic 59 -))) 119 +.application-content .details { 120 + display: none; 121 +} 60 60 61 -(% class="title" %) 62 -=== PyNN model builder (staging) === 63 63 64 -(% class="description" %) 65 -A graphical interface for building and simulating spiking network models 124 +.application .application-buttons { 125 + display: flex; 126 + position: absolute; 127 + bottom: 0px; 128 + left: 0; 129 + right:0; 130 +} 66 66 67 -(% class="application-buttons" %) 68 -((( 69 - 70 -))) 132 +.application .application-buttons .btn { 133 + width: 50%; 134 + margin: 0; 135 + border-radius: 0 !important; 136 +} 71 71 72 -(% class="details" %) 73 -((( 74 -==== Maintainers ==== 138 +.application img { 139 + display: block; 140 + margin: 0 auto 1.5rem auto; 141 +} 75 75 76 -* [[$user.getValue('first_name') $user.getValue('last_name')>>path:/bin/view/ExternalApps/]] 143 +.application .title { 144 + text-align: center; 145 + height: 3em; 146 +} 77 77 78 -==== Documentation ==== 148 +.application .tags { 149 + display: flex; 150 + justify-content: space-around; 151 + margin-bottom: 1.5rem; 152 +} 79 79 80 -[[$app.getValue('documentation')>>path:$app.getValue('documentation')]] 154 +.application .tags span { 155 + font-size: .8rem; 156 + border: 1px solid var(--color-support-dark); 157 + padding: .2rem .3rem; 158 + border-radius: var(--border-radius-default); 159 +} 81 81 82 -==== URL ==== 161 +.application .description { 162 + text-align: center; 163 +} 83 83 84 - [[https:~~/~~/nmpi-staging.hbpneuromorphic.eu/gui/app.html#!/home>>url:https://nmpi-staging.hbpneuromorphic.eu/gui/app.html#!/home]]85 - )))86 - )))87 - )))165 +.applications input[type="radio"], 166 +.applications input[type="checkbox"]{ 167 +display: none; 168 +} 88 88 89 -(% class="application" %) 90 -((( 91 -(% class="application-content" %) 92 -((( 93 -(% class="app-logo" %) 94 -((( 95 - 96 -))) 97 97 98 -(% class="tags" %) 99 -((( 100 -Neuromorphic 101 -))) 171 +.applications input[data-type="select"]:checked ~ div.application-content { 172 + border: 1px solid var(--color-primary); 173 +} 102 102 103 -(% class="title" %) 104 -=== Neuromorphic Computing Platform Resource Manager === 105 105 106 -(% class="description" %) 107 -An application for requesting access to the HBP Neuromorphic Computing Systems and for tracking quota usage once access is granted. 176 +.applications input[data-type="details"]:checked ~ div.application-content { 177 + position: fixed; 178 + top: 50%; 179 + left: 50%; 180 + width: 80vw; 181 + height: 80vh; 182 + margin-left:-40vw; 183 + margin-top: -40vh; 184 + background: #FFF; 185 + z-index: 255; 186 + overflow: auto; 187 +} 108 108 109 -(% class="application-buttons" %) 110 -((( 111 - 112 -))) 189 +.label-more { 190 + cursor: zoom-in; 191 +} 192 +.label-more::before { 193 + content: "More"; 194 +} 195 +.applications input[data-type="details"]:checked ~ .application-content .details { 196 + display: block; 197 +} 113 113 114 -(% class="details" %) 115 -((( 116 -==== Maintainers ==== 199 +.details-overlay { 200 + display: none; 201 + cursor: zoom-out; 202 +} 117 117 118 -* [[$user.getValue('first_name') $user.getValue('last_name')>>path:/bin/view/ExternalApps/]] 204 +.applications input[data-type="details"]:checked ~ .details-overlay { 205 + width:100vw; 206 + height: 100vh; 207 + background: var(--color-support-dark); 208 + opacity: .7; 209 + content: ''; 210 + display: block; 211 + position: fixed; 212 + margin: 0; 213 + top:0; 214 + left:0; 215 + z-index: 254; 216 +} 119 119 120 -==== Documentation ==== 218 +.applications input[data-type="details"]:checked ~ div .label-more { 219 + cursor: zoom-out; 220 +} 221 +.applications input[data-type="details"]:checked ~ div .label-more::before { 222 + content:"Close"; 223 +} 224 +</style> 121 121 122 -[[$app.getValue('documentation')>>path:$app.getValue('documentation')]] 123 123 124 -==== URL ==== 125 125 126 -[[https:~~/~~/quotas.hbpneuromorphic.eu/app/>>url:https://quotas.hbpneuromorphic.eu/app/]] 127 -))) 128 -))) 129 -))) 228 +<div class="xform"> 229 +<dl> 230 +<dt> 231 +<label>Choose an application in the list below</label> 232 +<dt> 233 +</dl> 234 +</div> 130 130 131 -(% class="application" %) 132 -((( 133 -(% class="application-content" %) 134 -((( 135 -(% class="app-logo" %) 136 -((( 137 - 138 -))) 236 +#applications( $applications ) 139 139 140 -(% class="tags" %) 141 -((( 142 -Neuromorphic 143 -))) 238 +<script> 239 +document.addEventListener('DOMContentLoaded', function() { 240 + let saveAndView = document.querySelector('input[name="action_save"]'); 241 + Array.from(document.querySelectorAll('label.choose-app')).forEach(function(button){ 242 + button.addEventListener('click', function() { setTimeout(function() { saveAndView.click() }, 250)}); 243 + }); 244 +}); 245 +</script> 144 144 145 -(% class="title" %) 146 -=== Neuromorphic Computing Platform Job Manager (staging) === 247 +{{/html}} 248 +#else 249 +##set($discard = $doc.use('InstalledApp.Code.InstalledAppClass')) 250 +#set($appId = $doc.display('app')) 251 +#set($app = $xwiki.getDocument($appId)) 252 +#*{{html clean="false"}} 253 +<style> 254 +#external-app { 255 +width: 100%; 256 +height: 100vh; 257 +} 258 +</style> 259 +<iframe id="external-app" src="$app.getValue('url')"></iframe> 260 +{{/html}} 261 +*# 147 147 148 -(% class="description" %) 149 -Staging version of Job Manager app 263 +{{html clean="false"}} 264 +#set ($discard = $xwiki.ssx.use('Collaboratory.Apps.IFrameApp.Code.IFrameAppCss')) 265 +#set ($discardjs = $xwiki.jsx.use('Collaboratory.Apps.IFrameApp.Code.IFrameAppJs')) 266 +<style> 267 +#iframeApp-container { 268 +background: #FFF; 269 +} 270 +</style> 150 150 151 -(% class="application-buttons" %) 152 -((( 153 - 154 -))) 272 +<div id="iframeApp-container"> 273 + <div class="app-toolbar"> 274 + <button id="iframeApp-fullscreen"><span class="fa fa-arrows-alt"></span></button> 275 + </div> 276 + <iframe id="iframeApp" src="$app.get('url')"></iframe> 277 +</div> 278 +{{/html}} 279 +#end 155 155 156 -(% class="details" %) 157 -((( 158 -==== Maintainers ==== 159 - 160 -* [[$user.getValue('first_name') $user.getValue('last_name')>>path:/bin/view/ExternalApps/]] 161 - 162 -==== Documentation ==== 163 - 164 -[[$app.getValue('documentation')>>path:$app.getValue('documentation')]] 165 - 166 -==== URL ==== 167 - 168 -[[https:~~/~~/nmpi-staging.hbpneuromorphic.eu/app/#/queue>>url:https://nmpi-staging.hbpneuromorphic.eu/app/#/queue]] 169 -))) 170 -))) 171 -))) 172 - 173 -(% class="application" %) 174 -((( 175 -(% class="application-content" %) 176 -((( 177 -(% class="app-logo" %) 178 -((( 179 - 180 -))) 181 - 182 -(% class="tags" %) 183 -((( 184 - 185 -))) 186 - 187 -(% class="title" %) 188 -=== TestNewApp === 189 - 190 - 191 -(% class="application-buttons" %) 192 -((( 193 - 194 -))) 195 - 196 -(% class="details" %) 197 -((( 198 -==== Maintainers ==== 199 - 200 -* [[$user.getValue('first_name') $user.getValue('last_name')>>path:/bin/view/ExternalApps/]] 201 - 202 -==== Documentation ==== 203 - 204 -[[$app.getValue('documentation')>>path:$app.getValue('documentation')]] 205 - 206 -==== URL ==== 207 -))) 208 -))) 209 -))) 210 - 211 -(% class="application" %) 212 -((( 213 -(% class="application-content" %) 214 -((( 215 -(% class="app-logo" style="background-image:url('/bin/download/ExternalApps/Unicorn%20App/logo.png')" %) 216 -((( 217 - 218 -))) 219 - 220 -(% class="tags" %) 221 -((( 222 -Tasks 223 -))) 224 - 225 -(% class="title" %) 226 -=== Dragon App === 227 - 228 -(% class="description" %) 229 -This is a fake app for testing purpose. 230 - 231 -(% class="application-buttons" %) 232 -((( 233 - 234 -))) 235 - 236 -(% class="details" %) 237 -((( 238 -==== Maintainers ==== 239 - 240 -* [[François Bougault>>path:/bin/view/XWiki/bougault]] 241 - 242 -==== Documentation ==== 243 - 244 -[[$app.getValue('documentation')>>path:$app.getValue('documentation')]] 245 - 246 -==== URL ==== 247 - 248 -[[something that should not be display as an iframe>>path:something that should not be display as an iframe]] 249 -))) 250 -))) 251 -))) 252 - 253 -(% class="application" %) 254 -((( 255 -(% class="application-content" %) 256 -((( 257 -(% class="app-logo" %) 258 -((( 259 - 260 -))) 261 - 262 -(% class="tags" %) 263 -((( 264 - 265 -))) 266 - 267 -(% class="title" %) 268 -=== Toto === 269 - 270 -(% class="description" %) 271 -Lorem ipsim 272 - 273 -(% class="application-buttons" %) 274 -((( 275 - 276 -))) 277 - 278 -(% class="details" %) 279 -((( 280 -==== Maintainers ==== 281 - 282 -* [[$user.getValue('first_name') $user.getValue('last_name')>>path:/bin/view/ExternalApps/]] 283 - 284 -==== Documentation ==== 285 - 286 -[[$app.getValue('documentation')>>path:$app.getValue('documentation')]] 287 - 288 -==== URL ==== 289 -))) 290 -))) 291 -))) 292 - 293 -(% class="application" %) 294 -((( 295 -(% class="application-content" %) 296 -((( 297 -(% class="app-logo" %) 298 -((( 299 - 300 -))) 301 - 302 -(% class="tags" %) 303 -((( 304 -Neuroinformatics 305 -))) 306 - 307 -(% class="title" %) 308 -=== Neural Activity Resource === 309 - 310 -(% class="description" %) 311 -An app for browsing, viewing and searching neural activity datasets (e.g. electrophysiology, calcium imaging, simulation results, etc.) 312 - 313 -(% class="application-buttons" %) 314 -((( 315 - 316 -))) 317 - 318 -(% class="details" %) 319 -((( 320 -==== Maintainers ==== 321 - 322 -* [[$user.getValue('first_name') $user.getValue('last_name')>>path:/bin/view/ExternalApps/]] 323 - 324 -==== Documentation ==== 325 - 326 -[[$app.getValue('documentation')>>path:$app.getValue('documentation')]] 327 - 328 -==== URL ==== 329 - 330 -[[https:~~/~~/nar-browser-app.brainsimulation.eu/app/>>url:https://nar-browser-app.brainsimulation.eu/app/]] 331 -))) 332 -))) 333 -))) 334 - 335 -(% class="application" %) 336 -((( 337 -(% class="application-content" %) 338 -((( 339 -(% class="app-logo" %) 340 -((( 341 - 342 -))) 343 - 344 -(% class="tags" %) 345 -((( 346 -Neuromorphic 347 -))) 348 - 349 -(% class="title" %) 350 -=== Neuromorphic Computing Platform Job Manager v2 === 351 - 352 -(% class="description" %) 353 -Neuromorphic Computing Platform Job Manager (version 2) 354 - 355 -(% class="application-buttons" %) 356 -((( 357 - 358 -))) 359 - 360 -(% class="details" %) 361 -((( 362 -==== Maintainers ==== 363 - 364 -* [[$user.getValue('first_name') $user.getValue('last_name')>>path:/bin/view/ExternalApps/]] 365 - 366 -==== Documentation ==== 367 - 368 -[[$app.getValue('documentation')>>path:$app.getValue('documentation')]] 369 - 370 -==== URL ==== 371 - 372 -[[https:~~/~~/nmpi.hbpneuromorphic.eu/app/#/queue>>url:https://nmpi.hbpneuromorphic.eu/app/#/queue]] 373 -))) 374 -))) 375 -))) 376 - 377 -(% class="application" %) 378 -((( 379 -(% class="application-content" %) 380 -((( 381 -(% class="app-logo" %) 382 -((( 383 - 384 -))) 385 - 386 -(% class="tags" %) 387 -((( 388 -Neuromorphic 389 -))) 390 - 391 -(% class="title" %) 392 -=== Neuromorphic Computing Platform Guidebook === 393 - 394 -(% class="description" %) 395 -A manual for users of the HBP Neuromorphic Computing Platform 396 - 397 -(% class="application-buttons" %) 398 -((( 399 - 400 -))) 401 - 402 -(% class="details" %) 403 -((( 404 -==== Maintainers ==== 405 - 406 -* [[$user.getValue('first_name') $user.getValue('last_name')>>path:/bin/view/ExternalApps/]] 407 - 408 -==== Documentation ==== 409 - 410 -[[$app.getValue('documentation')>>path:$app.getValue('documentation')]] 411 - 412 -==== URL ==== 413 - 414 -[[https:~~/~~/electronicvisions.github.io/hbp-sp9-guidebook/>>url:https://electronicvisions.github.io/hbp-sp9-guidebook/]] 415 -))) 416 -))) 417 -))) 418 - 419 -(% class="application" %) 420 -((( 421 -(% class="application-content" %) 422 -((( 423 -(% class="app-logo" %) 424 -((( 425 - 426 -))) 427 - 428 -(% class="tags" %) 429 -((( 430 -Neuroinformatics 431 -))) 432 - 433 -(% class="title" %) 434 -=== KnowledgeSpace === 435 - 436 -(% class="description" %) 437 -A community encyclopedia linking brain research concepts to data, models, and literature. 438 - 439 -(% class="application-buttons" %) 440 -((( 441 - 442 -))) 443 - 444 -(% class="details" %) 445 -((( 446 -==== Maintainers ==== 447 - 448 -* [[$user.getValue('first_name') $user.getValue('last_name')>>path:/bin/view/ExternalApps/]] 449 - 450 -==== Documentation ==== 451 - 452 -[[$app.getValue('documentation')>>path:$app.getValue('documentation')]] 453 - 454 -==== URL ==== 455 - 456 -[[https:~~/~~/knowledge-space.org/>>url:https://knowledge-space.org/]] 457 -))) 458 -))) 459 -))) 460 -))) 461 - 462 - 281 +{{/velocity}}