-
+
@@ -117,7 +117,7 @@
{{@endfor}}
-
+
@@ -188,7 +188,7 @@
{{@endfor}}
-
+
-->
@@ -261,7 +261,7 @@
Created by: {{c.cases.username}} ({{c.cases.institution_acronym}}) || {{c.ca
{{@endfor}}
-
+
diff --git a/src/adonisjs/public/author/drafts/index.html b/src/adonisjs/public/author/drafts/index.html
index 743f2192..757a3c3c 100644
--- a/src/adonisjs/public/author/drafts/index.html
+++ b/src/adonisjs/public/author/drafts/index.html
@@ -44,7 +44,7 @@
-
+
@@ -117,7 +117,7 @@
{{@endfor}}
-
+
@@ -161,7 +161,7 @@ Filter by:
{{@endfor}}
-
+
@@ -231,7 +231,7 @@
{{@endfor}}
-
+
@@ -302,7 +302,7 @@
Created by {{c.cases.author_grade}}: {{c.cases.username}} ({{c.cases.institu
{{@endfor}}
-
+
diff --git a/src/adonisjs/public/author/index.html b/src/adonisjs/public/author/index.html
index 610388a1..fc2d3a97 100644
--- a/src/adonisjs/public/author/index.html
+++ b/src/adonisjs/public/author/index.html
@@ -81,7 +81,7 @@
-
+
@@ -208,7 +208,7 @@ Settings
-
+
@@ -249,7 +249,7 @@ Settings
{{@endfor}}
-
+
@@ -265,7 +265,7 @@ Settings
-
+
@@ -318,7 +318,7 @@
Edit case - {{title}}
Created by {{author_grade}}: {{username}} ({{institution_acronym}}).
-
+
diff --git a/src/adonisjs/public/author/partials/case-list-min.html b/src/adonisjs/public/author/partials/case-list-min.html
index 01433fc3..03842ba5 100644
--- a/src/adonisjs/public/author/partials/case-list-min.html
+++ b/src/adonisjs/public/author/partials/case-list-min.html
@@ -12,7 +12,7 @@
{{@endfor}}
-
+
@@ -78,6 +78,6 @@
Created by {{c.cases.author_grade}}: {{c.cases.username}} ({{c.cases.institu
{{@endfor}}
-
+
diff --git a/src/adonisjs/public/author/partials/template-min.html b/src/adonisjs/public/author/partials/template-min.html
index 0be1a66a..c94ecc17 100644
--- a/src/adonisjs/public/author/partials/template-min.html
+++ b/src/adonisjs/public/author/partials/template-min.html
@@ -79,7 +79,7 @@
-
+
diff --git a/src/adonisjs/public/dccs/base/end-dcc.js b/src/adonisjs/public/dccs/base/end-dcc.js
deleted file mode 100644
index 0f088030..00000000
--- a/src/adonisjs/public/dccs/base/end-dcc.js
+++ /dev/null
@@ -1,18 +0,0 @@
-class EndDCC extends PrimitiveDCC {
- connectedCallback() {
- super.connectedCallback()
- if (this._triggered == null) {
- let parent = this.parentNode
- while (parent != null && !parent.nodeName.toLowerCase().startsWith('dcc-'))
- parent = parent.parentNode
- if (parent != null)
- parent.endReached()
- }
- this._triggered = true
- }
-}
-
-(function () {
- EndDCC.elementTag = 'end-dcc'
- DCC.webComponent(EndDCC.elementTag, EndDCC)
-})()
diff --git a/src/adonisjs/public/dccs/components/data/dcc-table-csv.js b/src/adonisjs/public/dccs/components/data/dcc-table-csv.js
index ab2a6f41..50a74d79 100644
--- a/src/adonisjs/public/dccs/components/data/dcc-table-csv.js
+++ b/src/adonisjs/public/dccs/components/data/dcc-table-csv.js
@@ -40,7 +40,7 @@ class DCCTableCSV extends DCCVisual {
}
static get observedAttributes () {
- return DCCVisual.observedAttributes.concat(['drop', 'view'])
+ return DCCVisual.observedAttributes.concat(['drop', 'view', 'separator'])
}
get drop () {
@@ -61,6 +61,14 @@ class DCCTableCSV extends DCCVisual {
else { this.removeAttribute('view') }
}
+ get separator () {
+ return this.getAttribute('separator')
+ }
+
+ set separator (newValue) {
+ this.setAttribute('separator', newValue)
+ }
+
_tableDrag (event) {
this._dropZone.innerHTML = 'Drop your file here'
event.preventDefault()
@@ -93,10 +101,15 @@ class DCCTableCSV extends DCCVisual {
}
_processTable (csv) {
+ const sep = (this.hasAttribute('separator')) ? this.separator : ','
+ const lineRE =
+ new RegExp('(?:^|' + sep + ')[ \\t]*(?:(?:"([^"]*)")|([^' + sep + ']*))',
+ 'g')
+
let lines = csv.split(/\r\n|\r|\n/)
this._table = []
for (let l of lines) {
- let cells = l.matchAll(/(?:^|,)[ \t]*(?:(?:"([^"]*)")|([^,]*))/g)
+ let cells = l.matchAll(lineRE)
let ln = []
for (const c of cells)
ln.push((c[1] != null) ? c[1] : c[2])
diff --git a/src/adonisjs/public/dccs/components/web/dcc-dhtml.js b/src/adonisjs/public/dccs/components/web/dcc-dhtml.js
index 857eb0b2..7df72ab0 100644
--- a/src/adonisjs/public/dccs/components/web/dcc-dhtml.js
+++ b/src/adonisjs/public/dccs/components/web/dcc-dhtml.js
@@ -4,13 +4,37 @@
class DCCDHTML extends DCCBase {
constructor() {
super()
+ this._originalHTML = ''
this.recordUpdate = this.recordUpdate.bind(this)
this.checkStatus = this.checkStatus.bind(this)
+ this._contentUpdated = this._contentUpdated.bind(this)
}
async connectedCallback () {
super.connectedCallback()
+ const template = document.createElement('template')
+ template.innerHTML =
+ '
'
+ if (!this.shadowRoot) {
+ const shadow = this.attachShadow({ mode: 'open' })
+ shadow.appendChild(template.content.cloneNode(true))
+ const div = document.createElement('div')
+ div.setAttribute('display', 'inline-block')
+ if (this.hasAttribute('class'))
+ div.setAttribute('class', this.getAttribute('class'))
+ if (this.hasAttribute('style'))
+ div.setAttribute('style', this.getAttribute('style'))
+ this._dhtmlRender = div
+ this.parentNode.insertBefore(this._dhtmlRender, this.nextSibling)
+ }
+
+ this._renderHTML()
+
+ this._observer = new MutationObserver(this._contentUpdated)
+ this._observer.observe(this,
+ {attributes: true, childList: true, subtree: true})
+
if (this.hasAttribute('autoupdate')) {
let record = await this._request('var/*/get', null, null, true)
record = (record == null || record.message == null) ? {} : record.message
@@ -20,6 +44,7 @@ class DCCDHTML extends DCCBase {
}
this._ready = false
+
this._subscribe('control/dhtml/status/request', this.checkStatus)
}
@@ -39,9 +64,11 @@ class DCCDHTML extends DCCBase {
this.setAttribute('autoupdate', newValue)
}
- endReached() {
- this._originalHTML = this.innerHTML.replace(
- /]*>[^<]*<\/end-dcc>/igm, '')
+ _contentUpdated(mutationsList, observer) {
+ if (this.innerHTML.length > 0) {
+ this._originalHTML += this.innerHTML
+ this.innerHTML = ''
+ }
this._renderHTML()
}
@@ -52,9 +79,9 @@ class DCCDHTML extends DCCBase {
if (typeof this._record === 'object')
html = this._replaceEach(html, this._record)
else
- html = this._originalHTML.replace(/\{\{[ \t]*value[ \t]*\}\}/igm, this._record)
+ html = html.replace(/\{\{[ \t]*value[ \t]*\}\}/igm, this._record)
}
- this.innerHTML = html.replace(/\{\{[^}]*\}\}/igm, '')
+ this._dhtmlRender.innerHTML = html.replace(/\{\{[^}]*\}\}/igm, '')
}
if (!this.hasAttribute('connect')) {
this._ready = true
@@ -64,7 +91,7 @@ class DCCDHTML extends DCCBase {
_replaceEach (html, record) {
const eachBlocks = html.split(
- /\{\{[ \t]*@foreach[ \t]+([^ \t]+)[ \t]+([^ \t}]+)[ \t]*\}\}/im)
+ /(?:)?/im)
let part = 0
html = ''
while (part < eachBlocks.length) {
@@ -74,17 +101,15 @@ class DCCDHTML extends DCCBase {
if (part < eachBlocks.length) {
let field = eachBlocks[part]
let item = eachBlocks[part+1]
- const vhtml = eachBlocks[part+2].split(/\{\{[ \t]*@endfor[ \t]*\}\}/im)
- let phtml = vhtml[0]
- const it = (field == '.') ? record : record[field]
- for (let i of it) {
- let shtml = phtml
- shtml = this._replaceFields(shtml, '', record)
- shtml = this._replaceFields(
- shtml, (field == '.') ? item : item + '.' + field, i)
- html += shtml
+ const vhtml = eachBlocks[part+2].split(/(?:)?/im)
+ const phtml = this._replaceFields(vhtml[0], '', record)
+ if (phtml.includes('{{')) {
+ const it = (field == '.') ? record : record[field]
+ for (let i of it)
+ html += this._replaceFields(
+ phtml, (field == '.') ? item : item + '.' + field, i)
}
- if (vhtml.length > 0)
+ if (vhtml.length > 1)
html += this._replaceFields(vhtml[1], '', record)
part += 3
}
@@ -93,35 +118,38 @@ class DCCDHTML extends DCCBase {
}
_replaceFields (html, prefix, record) {
- if (prefix != '') prefix += '.'
- for (let r in record) {
- let pr = prefix + r
- if (record[r] != null && typeof record[r] === 'object')
- html = this._replaceFields(html, pr, record[r])
- else {
- if (typeof record[r] === 'number') record[r] = record[r].toString()
- const content = (record[r] == null) ? '' :
- record[r].replace(/&/gm, '&')
- .replace(/"/gm, '"')
- .replace(/'/gm, ''')
- .replace(//gm, '>')
- html = html.replace(
- new RegExp('\{\{[ \\t]*' + pr + '[ \\t]*\}\}', 'igm'), content)
-
- let condExp = '\{\{[ \\t]*([^?\}]+)[ \\t]*\\?[ \\t]*' + pr +
- '[ \\t]*:[ \\t]*([^\}]+)[ \\t]*\}\}(?:="")?'
- let conditions = html.match(new RegExp(condExp, 'igm'))
- if (conditions != null)
- for (let c of conditions) {
- let inside = c.match(new RegExp(condExp, 'im'))
- html = html.replace(
- new RegExp('\{\{[ \\t]*' + inside[1] + '[ \\t]*\\?[ \\t]*' + pr +
- '[ \\t]*:[ \\t]*' + inside[2] + '[ \\t]*\}\}(?:="")?',
- 'igm'),
- ((inside[2] == '' + content) ? inside[1] : '')
- )
- }
+ if (html.includes('{{')) {
+ if (prefix != '') prefix += '.'
+ for (let r in record) {
+ if (!html.includes('{{')) break;
+ let pr = prefix + r
+ if (record[r] != null && typeof record[r] === 'object')
+ html = this._replaceFields(html, pr, record[r])
+ else {
+ if (typeof record[r] === 'number') record[r] = record[r].toString()
+ const content = (record[r] == null) ? '' :
+ record[r].replace(/&/gm, '&')
+ .replace(/"/gm, '"')
+ .replace(/'/gm, ''')
+ .replace(//gm, '>')
+ html = html.replace(
+ new RegExp('\{\{[ \\t]*' + pr + '[ \\t]*\}\}', 'igm'), content)
+
+ let condExp = '\{\{[ \\t]*([^?\}]+)[ \\t]*\\?[ \\t]*' + pr +
+ '[ \\t]*:[ \\t]*([^\}]+)[ \\t]*\}\}(?:="")?'
+ let conditions = html.match(new RegExp(condExp, 'igm'))
+ if (conditions != null)
+ for (let c of conditions) {
+ let inside = c.match(new RegExp(condExp, 'im'))
+ html = html.replace(
+ new RegExp('\{\{[ \\t]*' + inside[1] + '[ \\t]*\\?[ \\t]*' + pr +
+ '[ \\t]*:[ \\t]*' + inside[2] + '[ \\t]*\}\}(?:="")?',
+ 'igm'),
+ ((inside[2] == '' + content) ? inside[1] : '')
+ )
+ }
+ }
}
}
return html
@@ -171,8 +199,6 @@ class DCCDHTML extends DCCBase {
this._ready = true
this._publish('control/dhtml/ready',
(this.hasAttribute('id')) ? {id: this.id} : null)
- // console.log('============ dhtml')
- // console.log(this.id)
}
checkStatus (topic, message) {
@@ -182,8 +208,6 @@ class DCCDHTML extends DCCBase {
this._publish('control/dhtml/' +
((this._ready) ? "ready" : "not-ready"),
(this.hasAttribute('id')) ? {id: this.id} : null)
- // console.log('============ dhtml check')
- // console.log(this.id)
}
}
diff --git a/src/adonisjs/public/dccs/components/web/dcc-rest.js b/src/adonisjs/public/dccs/components/web/dcc-rest.js
index 6c91ccc2..c94563ef 100644
--- a/src/adonisjs/public/dccs/components/web/dcc-rest.js
+++ b/src/adonisjs/public/dccs/components/web/dcc-rest.js
@@ -36,11 +36,6 @@ class DCCRest extends DCCBase {
}
async restRequest(method, parameters) {
- // console.log('============ rest method')
- // console.log(method)
- // console.log('=== service request')
- // console.log(method)
- // console.log(parameters)
let result = null
if (this._setup.environment)
@@ -49,7 +44,6 @@ class DCCRest extends DCCBase {
if (this._setup != null && this._setup.oas != null &&
this._setup.oas.paths != null) {
- // console.log('--- inside request')
const paths = Object.keys(this._setup.oas.paths)
if (paths.length > 0) {
let url = paths[0]
@@ -90,7 +84,9 @@ class DCCRest extends DCCBase {
console.log('===== error in request')
console.log(error.message)
console.log('=====')
- result = error.message
+ result = {
+ error: error.message
+ }
})
}
diff --git a/src/adonisjs/public/dccs/playground/index-data.html b/src/adonisjs/public/dccs/playground/index-data.html
index fbc08cc2..7655773c 100644
--- a/src/adonisjs/public/dccs/playground/index-data.html
+++ b/src/adonisjs/public/dccs/playground/index-data.html
@@ -26,7 +26,7 @@
-
+
diff --git a/src/adonisjs/public/dccs/playground/index.html b/src/adonisjs/public/dccs/playground/index.html
index 9783b329..7e3af9be 100644
--- a/src/adonisjs/public/dccs/playground/index.html
+++ b/src/adonisjs/public/dccs/playground/index.html
@@ -31,7 +31,7 @@
-
+
diff --git a/src/adonisjs/public/hradm/css/adm.css b/src/adonisjs/public/hradm/css/adm.css
new file mode 100644
index 00000000..3766281e
--- /dev/null
+++ b/src/adonisjs/public/hradm/css/adm.css
@@ -0,0 +1,203 @@
+@charset "UTF-8";
+
+#inplace-editor-wrapper{
+
+ border-color: #004270;
+ border-radius: 9px;
+ border-style: solid;
+ border-width: 13px;
+ border-bottom-width: 30px;
+
+}
+
+.sty-main-panel {
+ /* the main box (body) occupies all the visible area */
+ position: absolute;
+ left: 0px;
+ right: 0px;
+ top: 0px;
+ bottom: 0px;
+
+ /* eliminate margins etc. */
+ margin: 0px;
+ padding: 0px;
+ border-width: 0px;
+
+ display: flex;
+ flex-direction: column;
+
+ overflow: hidden;
+}
+
+.sty-control-panel {
+ flex: 48px;
+ max-height: 48px;
+ display: flex;
+ flex-direction: row;
+}
+
+.sty-message-space {
+ position: absolute;
+ font-size: 30pt;
+ font-weight: bold;
+ color: #c5c5ca;
+ height: 100vh;
+ width: 100vw;
+ background-color: #040404ab;
+ z-index: 3000;
+ vertical-align: middle;
+}
+
+.sty-work-panel {
+ width: 100%;
+ height: 90%;
+ max-height: 90%;
+ flex: 90%;
+ display: flex;
+}
+
+@media (orientation: landscape) {
+ .work-panel {
+ flex-direction: row;
+ }
+}
+
+@media (orientation: portrait) {
+ .work-panel {
+ flex-direction: column;
+ }
+}
+
+.sty-navigation-block {
+ flex: 15%;
+ max-width: 100%;
+ height: 100%;
+ display: flex;
+ flex-direction: row;
+}
+
+.sty-navigation-panel {
+ width: 100%;
+ height: 100%;
+ display: flex;
+ flex-direction: column;
+ overflow: scroll;
+}
+
+.sty-navigation-set {
+ width: .700rem;
+ height: 1.925rem;
+}
+
+.sty-tree-button {
+ width: 48px;
+ height: 48px;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.sty-navigation-knot {
+ border-style: solid;
+ border-color: rgb(180,180,180);
+ border-radius: 7px;
+ background-color: white;
+ position: relative;
+ width: 100%;
+ height: 100%;
+}
+
+.sty-navigation-label {
+ position: relative;
+ font-size: 10pt;
+ text-align: center;
+ vertical-align: middle;
+ line-height: 1em;
+}
+
+.sty-selected-knot {
+ border: 5px dashed blue;
+ border-radius: 5px;
+}
+
+.sty-menu-floating {
+ position: absolute;
+ background-color: white;
+ border-radius: 1px;
+ box-shadow: 0px 0px 0px 5px rgba(0,0,0,0.5);
+ margin: 5px;
+}
+
+.sty-editable-asset:hover {
+ border: 5px;
+ border-color: black;
+ cursor: pointer;
+}
+
+.sty-navigation-knot-cover {
+ position: absolute;
+ left: 0px;
+ top: 0px;
+ width: 100%;
+ height: 100%;
+}
+
+.sty-navigation-knot-cover:hover {
+ background: rgba(0, 0, 0, 0.3);
+}
+
+.sty-knot-panel {
+ /* flex: 55%;
+ min-width: 20%; */
+ overflow: scroll;
+ height: 100%;
+}
+
+.sty-editor {
+ width: 100%;
+ height: 100%;
+}
+
+.sty-lock {
+ position: absolute;
+ left: 0px;
+ top: 0px;
+ width: 100%;
+ height: 100%;
+}
+
+.sty-lock:hover {
+ background: rgba(0, 0, 0, 0.3);
+}
+
+/* Properties */
+
+.sty-elements-block {
+ flex: 20%;
+ min-width: 20%;
+ max-width: 100%;
+ height: 100%;
+ overflow: hidden;
+ display: flex;
+ flex-direction: column;
+}
+
+.sty-properties-block {
+ flex: 95%;
+ width: auto;
+ height: 95%;
+ overflow: hidden;
+ display: flex;
+ flex-direction: column;
+
+
+ z-index: 2;
+ position: relative;
+
+}
+
+/*
+.ql-editor {
+ font-family: monospace;
+ font-size: 14pt;
+}
+*/
diff --git a/src/adonisjs/public/hradm/js/dcc-rest-proxy-adm.js b/src/adonisjs/public/hradm/js/dcc-rest-proxy-adm.js
new file mode 100644
index 00000000..91e4a021
--- /dev/null
+++ b/src/adonisjs/public/hradm/js/dcc-rest-proxy-adm.js
@@ -0,0 +1,115 @@
+(function () {
+
+DCC.component(
+ 'harena-users',
+ 'dcc-rest',
+ {
+ environment: {
+ 'url-manager': HarenaConfig.manager.url + HarenaConfig.manager.api
+ },
+ oas: {
+ paths: {
+ '{url-manager}/admin/users': {
+ 'get': {
+ operationId: 'users',
+ parameters: [
+ {name: 'url-manager',
+ in: 'path'}
+ ]
+ }
+ }
+ }
+ }
+ }
+)
+
+DCC.component(
+ 'harena-create-user',
+ 'dcc-rest',
+ {
+ environment: {
+ 'url-manager': HarenaConfig.manager.url + HarenaConfig.manager.api
+ },
+ oas: {
+ paths: {
+ '{url-manager}/user': {
+ 'post': {
+ operationId: 'create-user',
+ parameters: [
+ {name: 'url-manager',
+ in: 'path'},
+ {name: 'username',
+ in: 'query'},
+ {name: 'email',
+ in: 'query'},
+ {name: 'password',
+ in: 'query'},
+ {name: 'login',
+ in: 'query'},
+ {name: 'institution',
+ in: 'query'},
+ {name: 'grade',
+ in: 'query'}
+ ]
+ }
+ }
+ }
+ }
+ }
+)
+
+DCC.component(
+ 'harena-link-user-role',
+ 'dcc-rest',
+ {
+ environment: {
+ 'url-manager': HarenaConfig.manager.url + HarenaConfig.manager.api
+ },
+ oas: {
+ paths: {
+ '{url-manager}/admin/user/link/role': {
+ 'post': {
+ operationId: 'link-user-role',
+ parameters: [
+ {name: 'url-manager',
+ in: 'path'},
+ {name: 'userId',
+ in: 'query'},
+ {name: 'roleId',
+ in: 'query'}
+ ]
+ }
+ }
+ }
+ }
+ }
+)
+
+DCC.component(
+ 'harena-link-user-group',
+ 'dcc-rest',
+ {
+ environment: {
+ 'url-manager': HarenaConfig.manager.url + HarenaConfig.manager.api
+ },
+ oas: {
+ paths: {
+ '{url-manager}/group/link/user': {
+ 'post': {
+ operationId: 'link-user-group',
+ parameters: [
+ {name: 'url-manager',
+ in: 'path'},
+ {name: 'groupId',
+ in: 'query'},
+ {name: 'userId',
+ in: 'query'}
+ ]
+ }
+ }
+ }
+ }
+ }
+)
+
+})()
diff --git a/src/adonisjs/public/hradm/js/users-csv.js b/src/adonisjs/public/hradm/js/users-csv.js
new file mode 100644
index 00000000..47e1b7fe
--- /dev/null
+++ b/src/adonisjs/public/hradm/js/users-csv.js
@@ -0,0 +1,72 @@
+class UsersCSVManager {
+ start () {
+ this._updateCSV = this._updateCSV.bind(this)
+ MessageBus.i.subscribe('table/updated', this._updateCSV)
+ this._addUsers = this._addUsers.bind(this)
+ MessageBus.i.subscribe('/adm/add/users', this._addUsers)
+ }
+
+ _updateCSV (topic, message) {
+ console.log('===== CSV received')
+ console.log(message)
+ this._table = message.table
+ }
+
+ async _addUsers (topic, message) {
+ if (message.value) {
+ const parameters = message.value
+ console.log('===== user parameters')
+ console.log(parameters)
+ for (let line = 1; line < this._table.length; line++) {
+ if (this._table[line][2]) {
+ let lp = this._table[line][2].substring(0, this._table[line][2].indexOf('@'))
+ console.log('========== creating user ==========')
+ let user = await MessageBus.i.request('user/create/post',
+ {
+ username: this._table[line][1],
+ email: this._table[line][2],
+ password: lp,
+ login: lp,
+ institution: parameters.institution,
+ grade: parameters.grade
+ }
+ )
+ if (user.message.error) {
+ console.log('--- error')
+ console.log(user.message.error)
+ } else {
+ console.log(user.message.username)
+ console.log(user.message.id)
+ let role = await MessageBus.i.request('link/role/post',
+ {
+ userId: user.message.id,
+ roleId: parameters.role
+ }
+ )
+ if (role.message.error) {
+ console.log('--- error')
+ console.log(role.message.error)
+ } else {
+ console.log('--- link role success')
+ let group = await MessageBus.i.request('link/group/post',
+ {
+ userId: user.message.id,
+ groupId: parameters.group
+ }
+ )
+ if (group.message.error) {
+ console.log('--- error')
+ console.log(group.message.error)
+ } else
+ console.log('--- link group success')
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+(function () {
+ UsersCSVManager.i = new UsersCSVManager()
+})()
diff --git a/src/adonisjs/public/hradm/users-csv/index.html b/src/adonisjs/public/hradm/users-csv/index.html
new file mode 100644
index 00000000..4a0994d6
--- /dev/null
+++ b/src/adonisjs/public/hradm/users-csv/index.html
@@ -0,0 +1,128 @@
+
+
+
+
+ Users CSV Manager
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/adonisjs/public/hradm/users/index.html b/src/adonisjs/public/hradm/users/index.html
new file mode 100644
index 00000000..50becf4d
--- /dev/null
+++ b/src/adonisjs/public/hradm/users/index.html
@@ -0,0 +1,144 @@
+
+
+
+
+
Authoring Environment
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/adonisjs/public/player/case/index.html b/src/adonisjs/public/player/case/index.html
index b007342d..8efb6956 100644
--- a/src/adonisjs/public/player/case/index.html
+++ b/src/adonisjs/public/player/case/index.html
@@ -49,7 +49,7 @@
-
+
diff --git a/src/adonisjs/public/player/case/logger.html b/src/adonisjs/public/player/case/logger.html
index 7c1c04fc..e9475a01 100644
--- a/src/adonisjs/public/player/case/logger.html
+++ b/src/adonisjs/public/player/case/logger.html
@@ -49,7 +49,7 @@
-
+
diff --git a/src/adonisjs/public/player/home/category/cases/index.html b/src/adonisjs/public/player/home/category/cases/index.html
index 71151210..48f76241 100644
--- a/src/adonisjs/public/player/home/category/cases/index.html
+++ b/src/adonisjs/public/player/home/category/cases/index.html
@@ -43,7 +43,7 @@
-
+
@@ -108,7 +108,7 @@
{{@endfor}}
-
+
@@ -155,7 +155,7 @@
Created by {{c.cases.author_grade}}: {{c.cases.username}} ({{c.cases.institu
{{@endfor}}
-
+
diff --git a/src/adonisjs/public/player/home/category/index.html b/src/adonisjs/public/player/home/category/index.html
index b2e5e8c3..b8a248c3 100644
--- a/src/adonisjs/public/player/home/category/index.html
+++ b/src/adonisjs/public/player/home/category/index.html
@@ -43,7 +43,7 @@
-
+
@@ -109,7 +109,7 @@
-
+
@@ -109,7 +109,7 @@
{{@endfor}}
-
+
@@ -157,7 +157,7 @@
Created by {{c.cases.author_grade}}: {{c.cases.username}} ({{c.cases.institu
{{@endfor}}
-
+
diff --git a/src/adonisjs/public/player/welcome/index.html b/src/adonisjs/public/player/welcome/index.html
index 8e5378ab..d4efaa37 100644
--- a/src/adonisjs/public/player/welcome/index.html
+++ b/src/adonisjs/public/player/welcome/index.html
@@ -42,7 +42,7 @@
-
+
@@ -94,7 +94,7 @@
-
+
diff --git a/src/adonisjs/public/prognosis/creation/index.html b/src/adonisjs/public/prognosis/creation/index.html
index f568b66b..576e52f5 100644
--- a/src/adonisjs/public/prognosis/creation/index.html
+++ b/src/adonisjs/public/prognosis/creation/index.html
@@ -84,7 +84,7 @@
-
+
diff --git a/src/adonisjs/public/prognosis/index.html b/src/adonisjs/public/prognosis/index.html
index e7c98490..cfd64c94 100644
--- a/src/adonisjs/public/prognosis/index.html
+++ b/src/adonisjs/public/prognosis/index.html
@@ -80,7 +80,7 @@
-
+
@@ -126,11 +126,11 @@ Roda da Fortuna
-
+
-
+