From 9a2ac348ca14fbf0e6e2f7f6e5aefbb610669dc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Santanch=C3=A8?= Date: Sat, 20 Nov 2021 11:50:07 -0300 Subject: [PATCH 01/17] refactor (user login): new message format and userId information --- src/adonisjs/public/infra/conditional-layout.js | 2 +- src/adonisjs/public/infra/token-validator.js | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/adonisjs/public/infra/conditional-layout.js b/src/adonisjs/public/infra/conditional-layout.js index 2bf93a35..6b1d16ad 100644 --- a/src/adonisjs/public/infra/conditional-layout.js +++ b/src/adonisjs/public/infra/conditional-layout.js @@ -56,7 +56,7 @@ class LayoutController { async busMessages(){ // console.log('======= starting conditional-layout') - LayoutController.user = await MessageBus.i.waitMessage('data/user/info') + LayoutController.user = await MessageBus.i.waitMessage('user/login/+') if(new URL(document.location).pathname == '/author/'){ LayoutController.case = await MessageBus.i.waitMessage('service/response/get/harena-case') } diff --git a/src/adonisjs/public/infra/token-validator.js b/src/adonisjs/public/infra/token-validator.js index 5d835dee..3f81769d 100644 --- a/src/adonisjs/public/infra/token-validator.js +++ b/src/adonisjs/public/infra/token-validator.js @@ -35,7 +35,8 @@ class TokenController { // localStorage.setItem('harena-user-grade', endpointResponse.data.grade) // localStorage.setItem('harena-user-institution', endpointResponse.data.institution) // localStorage.setItem('harena-user-institution-id', endpointResponse.data.institutionId) - MessageBus.i.publish('data/user/info', endpointResponse.data) + MessageBus.i.publish('user/login/' + endpointResponse.data.userId, + endpointResponse.data, true) TokenController.instance.changeHeaderButtons(endpointResponse.data) }) .catch(function (error) { @@ -111,7 +112,8 @@ class TokenController { // localStorage.setItem('harena-user-grade', endpointResponse.data.grade) // localStorage.setItem('harena-user-institution', endpointResponse.data.institution) // localStorage.setItem('harena-user-institution-id', endpointResponse.data.institutionId) - MessageBus.i.publish('data/user/info', endpointResponse.data) + MessageBus.i.publish('user/login/' + endpointResponse.data.userId, + endpointResponse.data, true) TokenController.instance.changeHeaderButtons(endpointResponse.data) } else{ From 226528a839c03769fafb63a2df36dd240d521f4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Santanch=C3=A8?= Date: Sat, 20 Nov 2021 12:36:59 -0300 Subject: [PATCH 02/17] refactor (running case): message format refactor and case start notification --- src/adonisjs/public/infra/bus.js | 10 ++++++++++ src/adonisjs/public/infra/dcc-logger.js | 18 +++++++++++++++--- src/adonisjs/public/player/js/player.js | 5 ++++- src/adonisjs/public/player/js/state.js | 8 +++++--- 4 files changed, 34 insertions(+), 7 deletions(-) diff --git a/src/adonisjs/public/infra/bus.js b/src/adonisjs/public/infra/bus.js index 419ae156..8e04595c 100644 --- a/src/adonisjs/public/infra/bus.js +++ b/src/adonisjs/public/infra/bus.js @@ -57,6 +57,16 @@ class MessageBus { } async publish (topic, message, track) { + /* + console.log('----- message: ' + topic) + console.log(message) + if (this._runningCase && this._runningCase.track) + console.log(this._runningCase.track.userid) + else { + console.log('[no running case]') + } + */ + if (track != null && this.debugger != null) this.debugger(topic, message) diff --git a/src/adonisjs/public/infra/dcc-logger.js b/src/adonisjs/public/infra/dcc-logger.js index d8b22321..0aa64349 100644 --- a/src/adonisjs/public/infra/dcc-logger.js +++ b/src/adonisjs/public/infra/dcc-logger.js @@ -6,13 +6,25 @@ class DCCLogger extends DCCLight { super() this._notifyLogger = this._notifyLogger.bind(this) - this._subscribe('case/summary', this._notifyLogger) + this._subscribe('#', this._notifyLogger) } _notifyLogger (topic, message, track) { if (track) { - console.log('=== logger DCC: ' + topic) - console.log(message) + // console.log('=== logger DCC: ' + topic) + // console.log(message) + + if (MessageBus.matchFilter(topic, 'user/login/+')) { + console.log('=== user logged') + console.log(MessageBus.extractLevel(topic, 3)) + } + + if (MessageBus.matchFilter(topic, 'case/start/+')) { + console.log('=== case started') + console.log('user id: ' + message.userId) + console.log('case id: ' + message.caseId) + console.log('instance id: ' + MessageBus.extractLevel(topic, 3)) + } } } } diff --git a/src/adonisjs/public/player/js/player.js b/src/adonisjs/public/player/js/player.js index d35d05cc..6d1c2ea3 100644 --- a/src/adonisjs/public/player/js/player.js +++ b/src/adonisjs/public/player/js/player.js @@ -501,7 +501,10 @@ class PlayerManager { Basic.service.currentCaseId) this._state.runningCase = runningCase - MessageBus.i.defineRunningCase(runningCase) + MessageBus.i.defineRunningCase(runningCase) // deprecated + MessageBus.i.publish('case/start/' + runningCase.runningId, + {userId: this._state.userid, + caseId: Basic.service.currentCaseId}, true) } } diff --git a/src/adonisjs/public/player/js/state.js b/src/adonisjs/public/player/js/state.js index 5535280e..9a39ad6a 100644 --- a/src/adonisjs/public/player/js/state.js +++ b/src/adonisjs/public/player/js/state.js @@ -28,6 +28,9 @@ class PlayState { this._metastate = {} + this.sessionRecord = this.sessionRecord.bind(this) + MessageBus.i.subscribe('user/login/+', this.sessionRecord) + this.variableGet = this.variableGet.bind(this) MessageBus.i.subscribe('var/+/get', this.variableGet) this.variableSet = this.variableSet.bind(this) @@ -50,9 +53,8 @@ class PlayState { return (state == null || state.completed) ? null : state } - sessionRecord (userid, token) { - this._state.userid = userid - this._state.token = token + sessionRecord (topic) { + this._state.userid = MessageBus.extractLevel(topic, 3) this._stateStore() } From 3c24e65c19d1b40f91ffeeb14e262cb1fee25894 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Santanch=C3=A8?= Date: Sat, 20 Nov 2021 13:08:04 -0300 Subject: [PATCH 03/17] refactor(message/case/get): message format refactor --- src/adonisjs/public/author/js/author.js | 2 +- src/adonisjs/public/author/js/draft.js | 2 +- src/adonisjs/public/infra/dcc-common-server-proxy.js | 2 +- src/adonisjs/public/player/js/player.js | 8 +++++--- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/adonisjs/public/author/js/author.js b/src/adonisjs/public/author/js/author.js index 46555a67..f0bfd695 100644 --- a/src/adonisjs/public/author/js/author.js +++ b/src/adonisjs/public/author/js/author.js @@ -289,7 +289,7 @@ class AuthorManager { async _caseLoad (caseId) { Basic.service.currentCaseId = caseId - const caseObj = await MessageBus.i.request('data/case/' + caseId + '/get', null, null, true) + const caseObj = await MessageBus.i.request('case/get/' + caseId, null, null, true) this._currentCaseTitle = caseObj.message.title await this._compile(caseObj.message.source) diff --git a/src/adonisjs/public/author/js/draft.js b/src/adonisjs/public/author/js/draft.js index 720dbf06..7f1eb43b 100644 --- a/src/adonisjs/public/author/js/draft.js +++ b/src/adonisjs/public/author/js/draft.js @@ -231,7 +231,7 @@ class DraftManager { } async downloadCase (topic, message) { - const caseObj = await MessageBus.i.request('data/case/' + message + '/get', null, null, true) + const caseObj = await MessageBus.i.request('case/get/' + message, null, null, true) Basic.service.downloadFile( caseObj.message.source, caseObj.message.title + '.md') } diff --git a/src/adonisjs/public/infra/dcc-common-server-proxy.js b/src/adonisjs/public/infra/dcc-common-server-proxy.js index c0f961ba..fc9cb766 100644 --- a/src/adonisjs/public/infra/dcc-common-server-proxy.js +++ b/src/adonisjs/public/infra/dcc-common-server-proxy.js @@ -7,7 +7,7 @@ class DCCCommonServer { this.casesList = this.casesList.bind(this) MessageBus.i.subscribe('data/case/*/list', this.casesList) this.loadCase = this.loadCase.bind(this) - MessageBus.i.subscribe('data/case/+/get', this.loadCase) + MessageBus.i.subscribe('case/get/+', this.loadCase) this.loadTheme = this.loadTheme.bind(this) this.themeFamilySettings = this.themeFamilySettings.bind(this) MessageBus.i.subscribe('data/theme_family/+/settings', diff --git a/src/adonisjs/public/player/js/player.js b/src/adonisjs/public/player/js/player.js index 6d1c2ea3..21010f11 100644 --- a/src/adonisjs/public/player/js/player.js +++ b/src/adonisjs/public/player/js/player.js @@ -287,7 +287,7 @@ class PlayerManager { const caseObj = await MessageBus.i.request( 'service/request/get', {caseId: Basic.service.currentCaseId}, null, true) */ - const caseObj = await MessageBus.i.request('data/case/' + Basic.service.currentCaseId + '/get', null, null, true) + const caseObj = await MessageBus.i.request('case/get/' + Basic.service.currentCaseId, null, null, true) this._currentCaseTitle = caseObj.message.title @@ -501,7 +501,7 @@ class PlayerManager { Basic.service.currentCaseId) this._state.runningCase = runningCase - MessageBus.i.defineRunningCase(runningCase) // deprecated + MessageBus.i.defineRunningCase(runningCase) MessageBus.i.publish('case/start/' + runningCase.runningId, {userId: this._state.userid, caseId: Basic.service.currentCaseId}, true) @@ -511,7 +511,9 @@ class PlayerManager { resumeCase () { if (!PlayerManager.isCapsule) { // this._runningCase is provisory - MessageBus.i.publish('case/' + this._state.currentCase + '/resume', this._state.runningCase, true) + MessageBus.i.publish('case/resume/' + this._state.runningCase, + {userId: this._state.userid, + caseId: this._state.currentCase}, true) MessageBus.i.defineRunningCase(this._state.runningCase) } From e5c08eaa30edfdaff2a3a3b891f9348e093bdb76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Santanch=C3=A8?= Date: Sat, 20 Nov 2021 13:16:41 -0300 Subject: [PATCH 04/17] refactor (message/case/ready): message format refactor --- src/adonisjs/public/author/js/author.js | 2 +- src/adonisjs/public/infra/simple-page-tasks.js | 2 +- src/adonisjs/public/player/js/player.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/adonisjs/public/author/js/author.js b/src/adonisjs/public/author/js/author.js index f0bfd695..0738865e 100644 --- a/src/adonisjs/public/author/js/author.js +++ b/src/adonisjs/public/author/js/author.js @@ -542,7 +542,7 @@ class AuthorManager { Comments.prepare(this._compiledCase, knotid) if (Panels.s.commentsVisible) MessageBus.i.publish('control/comments/editor') - MessageBus.i.publish('control/case/ready', null, true) + MessageBus.i.publish('case/ready/' + Basic.service.currentCaseId, null, true) } } diff --git a/src/adonisjs/public/infra/simple-page-tasks.js b/src/adonisjs/public/infra/simple-page-tasks.js index 661f1020..e360c75f 100644 --- a/src/adonisjs/public/infra/simple-page-tasks.js +++ b/src/adonisjs/public/infra/simple-page-tasks.js @@ -18,7 +18,7 @@ class PageController { // console.log(PageController.scriptsComplete) }) MessageBus.i.subscribe('control/dhtml/ready', this.removeLoadingIcon) - MessageBus.i.subscribe('control/case/ready', this.removeLoadingIcon) + MessageBus.i.subscribe('case/ready/+', this.removeLoadingIcon) MessageBus.i.subscribe('control/validate/ready', this.removeLoadingIcon) MessageBus.i.subscribe('control/html/ready', this.pageReady) } diff --git a/src/adonisjs/public/player/js/player.js b/src/adonisjs/public/player/js/player.js index 21010f11..ace72325 100644 --- a/src/adonisjs/public/player/js/player.js +++ b/src/adonisjs/public/player/js/player.js @@ -299,7 +299,7 @@ class PlayerManager { this._knots = this._compiledCase.knots // Basic.service.currentThemeFamily = this._compiledCase.theme Basic.service.composedThemeFamily(this._compiledCase.theme) - MessageBus.i.publish('control/case/ready', null, true) + MessageBus.i.publish('case/ready/' + Basic.service.currentCaseId, null, true) } _caseFlow () { From e4bd8adb2f399a4c2b3cbca61a62df23f7c91173 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Santanch=C3=A8?= Date: Sat, 20 Nov 2021 15:11:00 -0300 Subject: [PATCH 05/17] refactor (message/navigate): all navigation messages refactor --- .../dccs/components/control/dcc-compute.js | 4 +- src/adonisjs/public/player/js/caselist.js | 2 +- src/adonisjs/public/player/js/player.js | 41 +++++++------------ .../public/themes/jacinto/detailed.html | 2 +- .../public/themes/jacinto/detailed_role.html | 2 +- src/adonisjs/public/themes/jacinto/exam.html | 2 +- .../public/themes/jacinto/exam_wide.html | 2 +- .../public/themes/jacinto/information.html | 2 +- .../themes/jacinto/information_exam.html | 2 +- src/adonisjs/public/themes/jacinto/input.html | 2 +- .../public/themes/jacinto/notice.html | 6 +-- .../themes/jacinto/notice_exam_zoom.html | 6 +-- .../public/themes/jacinto/notice_wide.html | 6 +-- .../public/themes/jacinto/old/detailed.html | 2 +- .../themes/jacinto/old/information.html | 2 +- .../public/themes/jacinto/old/input.html | 2 +- .../public/themes/jacinto/old/note.html | 2 +- .../public/themes/jacinto/presentation_3.html | 2 +- .../public/themes/jacinto/presentation_4.html | 2 +- src/adonisjs/public/themes/minimal/note.html | 2 +- .../public/themes/plain/local/note.js | 2 +- .../public/themes/simple-svg/detailed.html | 2 +- .../public/themes/simple-svg/exam.html | 2 +- .../public/themes/simple-svg/input.html | 2 +- .../public/themes/simple/local/note.js | 2 +- src/adonisjs/public/themes/simple/note.html | 2 +- .../public/themes/simple/note_references.html | 2 +- .../public/themes/zombie/local/note.js | 2 +- src/adonisjs/public/themes/zombie/note.html | 2 +- src/adonisjs/public/translator/translator.js | 17 +++++--- 30 files changed, 61 insertions(+), 67 deletions(-) diff --git a/src/adonisjs/public/dccs/components/control/dcc-compute.js b/src/adonisjs/public/dccs/components/control/dcc-compute.js index 78bcdeee..95c6daba 100644 --- a/src/adonisjs/public/dccs/components/control/dcc-compute.js +++ b/src/adonisjs/public/dccs/components/control/dcc-compute.js @@ -101,9 +101,9 @@ class DCCCompute extends DCCBase { case 'divert-script': let message if (expression.target.startsWith('Case.')) - { message = 'case/' + expression.target.substring(5) + '/navigate' } + { message = 'case/navigate/' + expression.target.substring(5) } else - { message = 'knot/' + expression.target + '/navigate' } + { message = 'knot/navigate/' + expression.target } let cBus = (bus != null) ? bus : MessageBus.i if (expression.parameter) { bus.publish(message, expression.parameter, true) diff --git a/src/adonisjs/public/player/js/caselist.js b/src/adonisjs/public/player/js/caselist.js index 8bd8428d..05e9a679 100644 --- a/src/adonisjs/public/player/js/caselist.js +++ b/src/adonisjs/public/player/js/caselist.js @@ -4,7 +4,7 @@ class CaseQueueManager { this._nextCase = this._nextCase.bind(this) - MessageBus.i.subscribe('case/+/navigate', this._nextCase) + MessageBus.i.subscribe('case/navigate/+', this._nextCase) this.start() } diff --git a/src/adonisjs/public/player/js/player.js b/src/adonisjs/public/player/js/player.js index ace72325..a4454eed 100644 --- a/src/adonisjs/public/player/js/player.js +++ b/src/adonisjs/public/player/js/player.js @@ -11,10 +11,9 @@ class PlayerManager { this.controlEvent = this.controlEvent.bind(this) MessageBus.i.subscribe('control/#', this.controlEvent) this.navigateEvent = this.navigateEvent.bind(this) - MessageBus.i.subscribe('knot/+/navigate', this.navigateEvent) - MessageBus.i.subscribe('flow/+/navigate', this.navigateEvent) - MessageBus.i.subscribe('case/+/navigate', this.navigateEvent) - MessageBus.i.subscribe('variable/+/navigate', this.navigateEvent) + MessageBus.i.subscribe('knot/navigate/#', this.navigateEvent) + MessageBus.i.subscribe('flow/navigate/+', this.navigateEvent) + MessageBus.i.subscribe('case/navigate/+', this.navigateEvent) MessageBus.i.subscribe('session/close', this.navigateEvent) this._notesStack = [] @@ -47,7 +46,8 @@ class PlayerManager { } async navigateEvent (topic, message) { - let target = MessageBus.extractLevel(topic, 2) + let target = MessageBus.extractLevel(topic, 3) + if (target == '=') target = MessageBus.extractLevel(topic, 4) this.trackTrigger(target) let mandatoryEmpty = null @@ -69,7 +69,7 @@ class PlayerManager { } switch (topic) { - case 'knot/ 0) { const panel = this._notesStack.pop() this._mainPanel.removeChild(panel) @@ -83,7 +83,7 @@ class PlayerManager { this.knotLoad(this._state.historyPrevious()) } break - case 'knot/</navigate': const nextKnot = this._state.nextKnot() + case 'knot/navigate/>': const nextKnot = this._state.nextKnot() this._state.historyRecord(nextKnot) this.knotLoad(nextKnot) break - case 'flow/>/navigate': const flowNext = this._nextFlowKnot() + case 'flow/navigate/>': const flowNext = this._nextFlowKnot() if (flowNext != null) { // console.log('=== flow next') // console.log(flowNext) @@ -107,7 +107,7 @@ class PlayerManager { this.knotLoad(flowNext.target) } break - case 'case/>/navigate': + case 'case/navigate/>': // jumping other instructions - improve it // console.log('=== next case') let instruction @@ -131,21 +131,12 @@ class PlayerManager { case 'session/close': this.sessionClose() break - default: if (MessageBus.matchFilter(topic, 'knot/+/navigate') || - MessageBus.matchFilter(topic, 'variable/+/navigate')) { - /* - console.log("=== variable navigate"); - console.log(target); - */ - if (MessageBus.matchFilter(topic, 'variable/+/navigate')) { + default: if (MessageBus.matchFilter(topic, 'knot/navigate/#')) { + if (MessageBus.matchFilter(topic, 'knot/navigate/=/+')) { const result = await MessageBus.i.request('var/' + target + '/get', null, null, true) target = Translator.instance.findContext( this._compiledCase.knots, this._currentKnot, result.message) - /* - console.log("=== variable resolved"); - console.log(target); - */ } this._state.historyRecord(target) if (message.value) { @@ -155,10 +146,8 @@ class PlayerManager { this._state.parameter = null this.knotLoad(target) } - } else if (MessageBus.matchFilter(topic, 'case/+/navigate')) { + } else if (MessageBus.matchFilter(topic, 'case/navigate/+')) { if (message) { - // console.log("=== metaparameter"); - // console.log(message.parameter); this._state.metaexecParameterSet(message.parameter) } window.open('index.html?case=' + target + @@ -226,7 +215,7 @@ class PlayerManager { await this._caseLoad(this._state.currentCase) this._caseFlow() - MessageBus.i.publish('knot/< - + diff --git a/src/adonisjs/public/themes/jacinto/detailed_role.html b/src/adonisjs/public/themes/jacinto/detailed_role.html index 8fd1d0f8..db32e043 100644 --- a/src/adonisjs/public/themes/jacinto/detailed_role.html +++ b/src/adonisjs/public/themes/jacinto/detailed_role.html @@ -569,6 +569,6 @@ cy="186.4236" r="25.741863" /> - + diff --git a/src/adonisjs/public/themes/jacinto/exam.html b/src/adonisjs/public/themes/jacinto/exam.html index 6bca152c..8945d8ed 100644 --- a/src/adonisjs/public/themes/jacinto/exam.html +++ b/src/adonisjs/public/themes/jacinto/exam.html @@ -664,6 +664,6 @@ cy="186.4236" r="25.741863" /> - + diff --git a/src/adonisjs/public/themes/jacinto/exam_wide.html b/src/adonisjs/public/themes/jacinto/exam_wide.html index c201f465..3a9b3cf4 100644 --- a/src/adonisjs/public/themes/jacinto/exam_wide.html +++ b/src/adonisjs/public/themes/jacinto/exam_wide.html @@ -90,6 +90,6 @@ r="25.265163" inkscape:label="#path38" /> - + diff --git a/src/adonisjs/public/themes/jacinto/information.html b/src/adonisjs/public/themes/jacinto/information.html index d1cf5b17..635f43d7 100644 --- a/src/adonisjs/public/themes/jacinto/information.html +++ b/src/adonisjs/public/themes/jacinto/information.html @@ -676,6 +676,6 @@ cy="186.4236" r="25.741863" /> - + diff --git a/src/adonisjs/public/themes/jacinto/information_exam.html b/src/adonisjs/public/themes/jacinto/information_exam.html index 6f4475e3..ec53942e 100644 --- a/src/adonisjs/public/themes/jacinto/information_exam.html +++ b/src/adonisjs/public/themes/jacinto/information_exam.html @@ -683,6 +683,6 @@ cy="186.4236" r="25.741863" /> - + diff --git a/src/adonisjs/public/themes/jacinto/input.html b/src/adonisjs/public/themes/jacinto/input.html index dbde2e75..bfd216bd 100644 --- a/src/adonisjs/public/themes/jacinto/input.html +++ b/src/adonisjs/public/themes/jacinto/input.html @@ -583,6 +583,6 @@ cy="186.4236" r="25.741863" /> - + diff --git a/src/adonisjs/public/themes/jacinto/notice.html b/src/adonisjs/public/themes/jacinto/notice.html index bc0dcf71..96374078 100644 --- a/src/adonisjs/public/themes/jacinto/notice.html +++ b/src/adonisjs/public/themes/jacinto/notice.html @@ -91,12 +91,12 @@ r="25.265163" inkscape:label="#path38" /> - + - + - + diff --git a/src/adonisjs/public/themes/jacinto/notice_exam_zoom.html b/src/adonisjs/public/themes/jacinto/notice_exam_zoom.html index 141ad6dd..a9b45f65 100644 --- a/src/adonisjs/public/themes/jacinto/notice_exam_zoom.html +++ b/src/adonisjs/public/themes/jacinto/notice_exam_zoom.html @@ -98,12 +98,12 @@ r="25.265163" inkscape:label="#path38" /> - + - + - + diff --git a/src/adonisjs/public/themes/jacinto/notice_wide.html b/src/adonisjs/public/themes/jacinto/notice_wide.html index 6f00d9ef..3f49a84b 100644 --- a/src/adonisjs/public/themes/jacinto/notice_wide.html +++ b/src/adonisjs/public/themes/jacinto/notice_wide.html @@ -90,12 +90,12 @@ r="25.265163" inkscape:label="#path38" /> - + - + - + diff --git a/src/adonisjs/public/themes/jacinto/old/detailed.html b/src/adonisjs/public/themes/jacinto/old/detailed.html index 1637d151..6bd6ee23 100644 --- a/src/adonisjs/public/themes/jacinto/old/detailed.html +++ b/src/adonisjs/public/themes/jacinto/old/detailed.html @@ -214,7 +214,7 @@ id="Path_320" /> - + - + - + - + \ No newline at end of file diff --git a/src/adonisjs/public/themes/jacinto/presentation_3.html b/src/adonisjs/public/themes/jacinto/presentation_3.html index 0a460311..3fcb4711 100644 --- a/src/adonisjs/public/themes/jacinto/presentation_3.html +++ b/src/adonisjs/public/themes/jacinto/presentation_3.html @@ -861,6 +861,6 @@ cy="186.4236" r="25.741863" /> - + diff --git a/src/adonisjs/public/themes/jacinto/presentation_4.html b/src/adonisjs/public/themes/jacinto/presentation_4.html index 0f182aba..b17116e0 100644 --- a/src/adonisjs/public/themes/jacinto/presentation_4.html +++ b/src/adonisjs/public/themes/jacinto/presentation_4.html @@ -958,6 +958,6 @@ cy="186.4236" r="25.741863" /> - + diff --git a/src/adonisjs/public/themes/minimal/note.html b/src/adonisjs/public/themes/minimal/note.html index 52103165..4838af38 100644 --- a/src/adonisjs/public/themes/minimal/note.html +++ b/src/adonisjs/public/themes/minimal/note.html @@ -1,6 +1,6 @@
- +
{knot}
diff --git a/src/adonisjs/public/themes/plain/local/note.js b/src/adonisjs/public/themes/plain/local/note.js index 33ea1be1..f1ce15eb 100644 --- a/src/adonisjs/public/themes/plain/local/note.js +++ b/src/adonisjs/public/themes/plain/local/note.js @@ -2,7 +2,7 @@ const localTheme = `
- +
{knot}
diff --git a/src/adonisjs/public/themes/simple-svg/detailed.html b/src/adonisjs/public/themes/simple-svg/detailed.html index f3b7b84b..a545c474 100644 --- a/src/adonisjs/public/themes/simple-svg/detailed.html +++ b/src/adonisjs/public/themes/simple-svg/detailed.html @@ -539,6 +539,6 @@ r="25.741863" visibility="hidden" /> - + diff --git a/src/adonisjs/public/themes/simple-svg/exam.html b/src/adonisjs/public/themes/simple-svg/exam.html index a1670b89..8c8f2696 100644 --- a/src/adonisjs/public/themes/simple-svg/exam.html +++ b/src/adonisjs/public/themes/simple-svg/exam.html @@ -666,6 +666,6 @@ r="25.741863" visibility="hidden" /> - + diff --git a/src/adonisjs/public/themes/simple-svg/input.html b/src/adonisjs/public/themes/simple-svg/input.html index 147d28a0..a7364870 100644 --- a/src/adonisjs/public/themes/simple-svg/input.html +++ b/src/adonisjs/public/themes/simple-svg/input.html @@ -586,6 +586,6 @@ r="25.741863" visibility="hidden" /> - + diff --git a/src/adonisjs/public/themes/simple/local/note.js b/src/adonisjs/public/themes/simple/local/note.js index 33ea1be1..f1ce15eb 100644 --- a/src/adonisjs/public/themes/simple/local/note.js +++ b/src/adonisjs/public/themes/simple/local/note.js @@ -2,7 +2,7 @@ const localTheme = `
- +
{knot}
diff --git a/src/adonisjs/public/themes/simple/note.html b/src/adonisjs/public/themes/simple/note.html index 725d15eb..e3366fde 100644 --- a/src/adonisjs/public/themes/simple/note.html +++ b/src/adonisjs/public/themes/simple/note.html @@ -10,7 +10,7 @@
- +
diff --git a/src/adonisjs/public/themes/simple/note_references.html b/src/adonisjs/public/themes/simple/note_references.html index afad77ca..cb25a0ea 100644 --- a/src/adonisjs/public/themes/simple/note_references.html +++ b/src/adonisjs/public/themes/simple/note_references.html @@ -10,7 +10,7 @@
- +
diff --git a/src/adonisjs/public/themes/zombie/local/note.js b/src/adonisjs/public/themes/zombie/local/note.js index 33ea1be1..f1ce15eb 100644 --- a/src/adonisjs/public/themes/zombie/local/note.js +++ b/src/adonisjs/public/themes/zombie/local/note.js @@ -2,7 +2,7 @@ const localTheme = `
- +
{knot}
diff --git a/src/adonisjs/public/themes/zombie/note.html b/src/adonisjs/public/themes/zombie/note.html index 1eaf5090..7b7a77ad 100644 --- a/src/adonisjs/public/themes/zombie/note.html +++ b/src/adonisjs/public/themes/zombie/note.html @@ -1,6 +1,6 @@
- +
{knot}
diff --git a/src/adonisjs/public/translator/translator.js b/src/adonisjs/public/translator/translator.js index b7d38e87..e37d5a12 100644 --- a/src/adonisjs/public/translator/translator.js +++ b/src/adonisjs/public/translator/translator.js @@ -1864,7 +1864,12 @@ class Translator { _transformNavigationMessage (target) { let message const lower = target.toLowerCase() - if (Translator.reservedNavigation.includes(lower)) { message = Translator.navigationMap[lower] } else if (lower.startsWith('variable.')) { message = 'variable/' + target.substring(9) + '/navigate' } else { message = 'knot/' + target + '/navigate' } + if (Translator.reservedNavigation.includes(lower)) { + message = Translator.navigationMap[lower] } + else if (lower.startsWith('variable.')) + message = 'knot/navigate/=/' + target.substring(9) + else + message = 'knot/navigate/' + target return message } @@ -2681,11 +2686,11 @@ class Translator { 'knot.previous', 'knot.next', 'flow.next', 'session.close'] Translator.navigationMap = { - 'case.next': 'case/>/navigate', - 'knot.start': 'knot/</navigate', - 'flow.next': 'flow/>/navigate', + 'case.next': 'case/navigate/>', + 'knot.start': 'knot/navigate/<<', + 'knot.previous': 'knot/navigate/<', + 'knot.next': 'knot/navigate/>', + 'flow.next': 'flow/navigate/>', 'session.close': 'session/close' } From 81cd27f47fbe0d5f24bafebbb5e7fed5a282823b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Santanch=C3=A8?= Date: Sat, 20 Nov 2021 15:16:04 -0300 Subject: [PATCH 06/17] refactor (message/knot/start): message format refactor --- src/adonisjs/public/player/js/htracker.js | 4 ++-- src/adonisjs/public/player/js/player.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/adonisjs/public/player/js/htracker.js b/src/adonisjs/public/player/js/htracker.js index c70c81ec..d01b782c 100644 --- a/src/adonisjs/public/player/js/htracker.js +++ b/src/adonisjs/public/player/js/htracker.js @@ -27,7 +27,7 @@ class Tracker { MessageBus.i.subscribe('var/*/input/mandatory/get', this.allMandatoryFilled) this.knotStart = this.knotStart.bind(this) - MessageBus.i.subscribe('knot/+/start', this.knotStart) + MessageBus.i.subscribe('knot/start/+', this.knotStart) this.caseCompleted = this.caseCompleted.bind(this) MessageBus.i.subscribe('case/completed', this.caseCompleted) MessageBus.i.subscribe('session/close', this.caseCompleted) @@ -122,7 +122,7 @@ class Tracker { } knotStart (topic, message) { - const k = MessageBus.extractLevel(topic, 2) + const k = MessageBus.extractLevel(topic, 3) const currentDateTime = new Date() this._knotTrack.push( {knotid: k, diff --git a/src/adonisjs/public/player/js/player.js b/src/adonisjs/public/player/js/player.js index a4454eed..0dda78bc 100644 --- a/src/adonisjs/public/player/js/player.js +++ b/src/adonisjs/public/player/js/player.js @@ -355,7 +355,7 @@ class PlayerManager { if (note) { this.presentNote(knot) } else { this.presentKnot(knot) } } } - MessageBus.i.publish('knot/' + knotName + '/start', null, true) + MessageBus.i.publish('knot/start/' + knotName, null, true) if (this._knots[knotName].categories && this._knots[knotName].categories.includes('end')) From 7a32d3ed1185268f52317419c2e532083bce874b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Santanch=C3=A8?= Date: Sat, 20 Nov 2021 17:39:39 -0300 Subject: [PATCH 07/17] refactor (message/input): all input messages refactor --- .../context/playground/js/versum-context.js | 2 +- .../public/dccs/components/data/dcc-submit.js | 2 +- .../dccs/components/visual/dcc-button.js | 2 +- .../components/visual/dcc-image-marker.js | 4 ++-- .../components/visual/dcc-input-choice.js | 8 +++---- .../dccs/components/visual/dcc-input-table.js | 6 +++--- .../dccs/components/visual/dcc-input-typed.js | 6 +++--- .../dccs/components/visual/dcc-slider.js | 4 ++-- .../components/visual/dcc-state-select.js | 4 ++-- .../dccs/components/visual/dcc-state.js | 11 +--------- .../playground/gallery/cell/ecology-editor.js | 12 +++++------ .../playground/gallery/cell/microworld3.js | 12 +++++------ .../cell/movement-sand-clock-editor.js | 6 +++--- src/adonisjs/public/infra/bus.js | 16 ++++++++++++++ src/adonisjs/public/player/js/htracker.js | 21 +++++++++++-------- src/adonisjs/public/player/js/player.js | 2 +- .../gallery/cell/aquarium-scripts-plus.js | 2 +- .../gallery/cell/aquarium-scripts.js | 2 +- .../gallery/cell/aquarium-sliders.js | 14 ++++++------- .../scripts/playground/gallery/cell/boids.js | 4 ++-- .../gallery/cell/cerrado-sliders.js | 14 ++++++------- ...xpression-rocket-wide-timer-scale-ruler.js | 4 ++-- .../expression-rocket-wide-timer-scale.js | 4 ++-- .../cell/expression-rocket-wide-timer.js | 4 ++-- .../gallery/cell/microworld-scripts.js | 2 +- .../gallery/cell/microworld-sliders.js | 14 ++++++------- .../gallery/cell/zombie-wall-challenge1.js | 2 +- .../gallery/cell/zombie-wall-challenge2.js | 2 +- .../gallery/cell/zombie-wall-challenge3.js | 2 +- .../gallery/cell/zombie-wall-challenge4.js | 2 +- .../gallery/cell/zombie-wall-challenge5.js | 2 +- .../gallery/cell/zombie-wall-challenge6.js | 2 +- .../gallery/cell/zombie-wall-train1.js | 2 +- .../translator/playground/js/author-versum.js | 2 +- 34 files changed, 104 insertions(+), 94 deletions(-) diff --git a/src/adonisjs/public/context/playground/js/versum-context.js b/src/adonisjs/public/context/playground/js/versum-context.js index b1535646..110052fb 100644 --- a/src/adonisjs/public/context/playground/js/versum-context.js +++ b/src/adonisjs/public/context/playground/js/versum-context.js @@ -16,7 +16,7 @@ class VersumContextManager { this.updateVisibility = this.updateVisibility.bind(this) MessageBus.i.subscribe('control/translate/example', this.translate) - MessageBus.i.subscribe('var/output/changed', this.updateVisibility) + MessageBus.i.subscribe('input/changed/output', this.updateVisibility) } async translate (topic, message) { diff --git a/src/adonisjs/public/dccs/components/data/dcc-submit.js b/src/adonisjs/public/dccs/components/data/dcc-submit.js index 108c6fb6..bc3d8e2e 100644 --- a/src/adonisjs/public/dccs/components/data/dcc-submit.js +++ b/src/adonisjs/public/dccs/components/data/dcc-submit.js @@ -41,7 +41,7 @@ class DCCSubmit extends DCCButton { const topic = (this.hasAttribute('topic')) ? this.topic : (this.hasAttribute('variable')) - ? 'var/' + this.variable + '/changed' + ? 'input/changed/' + this.variable.replace(/\./g, '/') : 'button/' + this.label + '/clicked' if (this.hasAttribute('message')) { message.value = this.message } let form = null diff --git a/src/adonisjs/public/dccs/components/visual/dcc-button.js b/src/adonisjs/public/dccs/components/visual/dcc-button.js index 053be7b1..482a4e7e 100644 --- a/src/adonisjs/public/dccs/components/visual/dcc-button.js +++ b/src/adonisjs/public/dccs/components/visual/dcc-button.js @@ -153,7 +153,7 @@ class DCCButton extends DCCBlock { const v = (this.variable.includes(':')) ? this.variable.substring(0, this.variable.indexOf(':')) : this.variable message.value = (this.variable.endsWith(':label')) ? this.label : this.message - this._publish('var/' + v + '/changed', message, true) + this._publish('input/changed/' + v.replace(/\./g, '/'), message, true) } if (this.hasAttribute('label') || this.hasAttribute('topic')) { if (this.hasAttribute('topic') && this.topic.endsWith('/navigate')) { this._active = false } diff --git a/src/adonisjs/public/dccs/components/visual/dcc-image-marker.js b/src/adonisjs/public/dccs/components/visual/dcc-image-marker.js index 275d5b6e..8e685cbe 100644 --- a/src/adonisjs/public/dccs/components/visual/dcc-image-marker.js +++ b/src/adonisjs/public/dccs/components/visual/dcc-image-marker.js @@ -123,7 +123,7 @@ class DCCGroupMarker extends DCCBase { this._subscribe('dcc/marker-spot/set', this.setMarkerSpot) this._subscribe('dcc/marker-spot/selected', this.spotSelected) - this._publish('var/' + this.context + '/group_input/ready', + this._publish('group_input/ready/' + this.context.replace(/\./g, '/'), DCCGroupMarker.elementTag) if (this.hasAttribute('editor')) { @@ -349,7 +349,7 @@ class DCCGroupMarker extends DCCBase { width="1000" height="1000" preserveAspectRatio="xMinYMin meet" - xlink:href="[image]"/> + xlink:href="[image]"/> ` diff --git a/src/adonisjs/public/dccs/components/visual/dcc-input-choice.js b/src/adonisjs/public/dccs/components/visual/dcc-input-choice.js index f38a7b96..46b29d98 100644 --- a/src/adonisjs/public/dccs/components/visual/dcc-input-choice.js +++ b/src/adonisjs/public/dccs/components/visual/dcc-input-choice.js @@ -27,7 +27,7 @@ class DCCInputOption extends DCCInput { // align with dcc-state-select if (this._parent == null) { - this._publish('var/' + this._variable + '/input/ready', + this._publish('input/ready/' + this._variable.replace(/\./g, '/'), { sourceType: DCCInputOption.elementTag, content: this.value @@ -100,7 +100,7 @@ class DCCInputOption extends DCCInput { inputChanged () { this.changed = true - this._publish('var/' + this._variable + '/changed', + this._publish('input/changed/' + this._variable.replace(/\./g, '/'), { sourceType: DCCInputOption.elementTag, value: this.value @@ -233,7 +233,7 @@ class DCCInputChoice extends DCCInput { } this.changed = true - this._publish('var/' + this._variable + '/changed', + this._publish('input/changed/' + this._variable.replace(/\./g, '/'), { sourceType: DCCInputChoice.elementTag, value: this._value @@ -400,7 +400,7 @@ class DCCInputChoice extends DCCInput { this._presentationIsReady() // align with dcc-state-select - this._publish('var/' + this._variable + '/group_input/ready', + this._publish('group_input/ready/' + this._variable.replace(/\./g, '/'), DCCInputChoice.elementTag) } diff --git a/src/adonisjs/public/dccs/components/visual/dcc-input-table.js b/src/adonisjs/public/dccs/components/visual/dcc-input-table.js index f8cebc59..dc0429bb 100644 --- a/src/adonisjs/public/dccs/components/visual/dcc-input-table.js +++ b/src/adonisjs/public/dccs/components/visual/dcc-input-table.js @@ -21,8 +21,8 @@ class DCCInputTable extends DCCInput { super.connectedCallback() this.innerHTML = '' - this._publish('var/' + this._variable + '/input/ready', - DCCInputTable.elementTag) + this._publish('input/ready/' + this._variable.replace(/\./g, '/'), + DCCInputTable.elementTag) } disconnectedCallback () { @@ -87,7 +87,7 @@ class DCCInputTable extends DCCInput { const row = parseInt(id.substring(p + 1)) - 1 this._value[row][col] = event.target.value - this._publish('var/' + this._variable + '/changed', + this._publish('input/changed/' + this._variable.replace(/\./g, '/'), { sourceType: DCCInputTable.elementTag, value: this._value diff --git a/src/adonisjs/public/dccs/components/visual/dcc-input-typed.js b/src/adonisjs/public/dccs/components/visual/dcc-input-typed.js index 5127cf70..d8a4965c 100644 --- a/src/adonisjs/public/dccs/components/visual/dcc-input-typed.js +++ b/src/adonisjs/public/dccs/components/visual/dcc-input-typed.js @@ -13,7 +13,7 @@ class DCCInputTyped extends DCCInput { super.connectedCallback() this.innerHTML = '' - this._publish('var/' + this._variable + '/input/ready', + this._publish('input/ready/' + this._variable.replace(/\./g, '/'), DCCInputTyped.elementTag) } @@ -55,7 +55,7 @@ class DCCInputTyped extends DCCInput { inputTyped () { this.changed = true this.value = this._inputVariable.value - this._publish('var/' + this._variable + '/typed', + this._publish('input/typed/' + this._variable.replace(/\./g, '/'), { sourceType: DCCInputTyped.elementTag, value: this.value @@ -65,7 +65,7 @@ class DCCInputTyped extends DCCInput { inputChanged () { this.changed = true this.value = this._inputVariable.value - this._publish('var/' + this._variable + '/changed', + this._publish('input/changed/' + this._variable.replace(/\./g, '/'), { sourceType: DCCInputTyped.elementTag, value: this.value diff --git a/src/adonisjs/public/dccs/components/visual/dcc-slider.js b/src/adonisjs/public/dccs/components/visual/dcc-slider.js index 01babda6..dcf4e56c 100644 --- a/src/adonisjs/public/dccs/components/visual/dcc-slider.js +++ b/src/adonisjs/public/dccs/components/visual/dcc-slider.js @@ -24,7 +24,7 @@ class DCCSlider extends DCCInput { super.connectedCallback() this.innerHTML = '' - this._publish('var/' + this._variable + '/input/ready', + this._publish('input/ready/' + this._variable.replace(/\./g, '/'), DCCSlider.elementTag) } @@ -69,7 +69,7 @@ class DCCSlider extends DCCInput { this.changed = true this._value = this._inputVariable.value if (this._inputIndex) { this._inputIndex.innerHTML = this._value } - this._publish('var/' + this._variable + '/changed', + this._publish('input/changed/' + this._variable.replace(/\./g, '/'), { sourceType: DCCSlider.elementTag, value: this._value diff --git a/src/adonisjs/public/dccs/components/visual/dcc-state-select.js b/src/adonisjs/public/dccs/components/visual/dcc-state-select.js index d986a2b3..6715cd35 100644 --- a/src/adonisjs/public/dccs/components/visual/dcc-state-select.js +++ b/src/adonisjs/public/dccs/components/visual/dcc-state-select.js @@ -57,7 +57,7 @@ class DCCStateSelect extends DCCVisual { this._render() - this._publish('var/' + this.completeId + '/subinput/ready', + this._publish('subinput/ready/' + this.completeId.replace(/\./g, '/'), { sourceType: DCCStateSelect.elementTag, content: this.innerHTML @@ -240,7 +240,7 @@ class DCCGroupSelect extends DCCBlock { this._groupReady = true this._answerRequests() - this._publish('var/' + this.variable + '/group_input/ready', + this._publish('group_input/ready/' + this.variable.replace(/\./g, '/'), DCCGroupSelect.elementTag) } diff --git a/src/adonisjs/public/dccs/components/visual/dcc-state.js b/src/adonisjs/public/dccs/components/visual/dcc-state.js index 155c9fbc..01aa06c0 100644 --- a/src/adonisjs/public/dccs/components/visual/dcc-state.js +++ b/src/adonisjs/public/dccs/components/visual/dcc-state.js @@ -146,15 +146,6 @@ class DCCState extends DCCBlock { : ((n < allStates.length) ? n : ((this.rotate) ? 0 : s)) this.changeState(allStates[n]) - /* - this._stateDCCs[this.value].hide(); - this.value = allStates[n]; - this._stateDCCs[this.value].show(); - if (this.hasAttribute("variable")) - this._publish("var/" + this.variable + "/changed", - {sourceType: DCCState.elementTag, - value: this.value}, true); - */ } } @@ -164,7 +155,7 @@ class DCCState extends DCCBlock { this.value = newState this._stateDCCs[this.value].show() if (this.hasAttribute('variable')) { - this._publish('var/' + this.variable + '/changed', + this._publish('input/changed/' + this.variable.replace(/\./g, '/'), { sourceType: DCCState.elementTag, value: this.value diff --git a/src/adonisjs/public/dccs/playground/gallery/cell/ecology-editor.js b/src/adonisjs/public/dccs/playground/gallery/cell/ecology-editor.js index ec047974..639b350b 100644 --- a/src/adonisjs/public/dccs/playground/gallery/cell/ecology-editor.js +++ b/src/adonisjs/public/dccs/playground/gallery/cell/ecology-editor.js @@ -178,16 +178,16 @@ Selecione abaixo a chance de cada um dos eventos: - + - - + + - + - + - + diff --git a/src/adonisjs/public/dccs/playground/gallery/cell/microworld3.js b/src/adonisjs/public/dccs/playground/gallery/cell/microworld3.js index 81d1e76c..dee04789 100644 --- a/src/adonisjs/public/dccs/playground/gallery/cell/microworld3.js +++ b/src/adonisjs/public/dccs/playground/gallery/cell/microworld3.js @@ -164,16 +164,16 @@ Selecione abaixo a chance de cada um dos eventos: - + - - + + - + - + - + diff --git a/src/adonisjs/public/dccs/playground/gallery/cell/movement-sand-clock-editor.js b/src/adonisjs/public/dccs/playground/gallery/cell/movement-sand-clock-editor.js index 2c006384..fb0a0912 100644 --- a/src/adonisjs/public/dccs/playground/gallery/cell/movement-sand-clock-editor.js +++ b/src/adonisjs/public/dccs/playground/gallery/cell/movement-sand-clock-editor.js @@ -141,9 +141,9 @@ Selecione abaixo a chance de cada um dos eventos: - - - + + +
` diff --git a/src/adonisjs/public/infra/bus.js b/src/adonisjs/public/infra/bus.js index 8e04595c..9b161f78 100644 --- a/src/adonisjs/public/infra/bus.js +++ b/src/adonisjs/public/infra/bus.js @@ -274,6 +274,22 @@ class MessageBus { return label } + /* + * Returns the hierarchy starting at a specific level of the message. + */ + static extractLevelsFrom (topic, level) { + let hierarchy = null + if (topic != null) { + const levelSet = topic.split('/') + if (level <= levelSet.length) { + hierarchy = '' + for (let l = level-1; l < levelSet.length; l++) + hierarchy += levelSet[l] + ((l < levelSet.length-1) ? '/' : '') + } + } + return hierarchy + } + /* Message building services *************************/ static buildResponseTopic (topic, message) { diff --git a/src/adonisjs/public/player/js/htracker.js b/src/adonisjs/public/player/js/htracker.js index d01b782c..e1b98a08 100644 --- a/src/adonisjs/public/player/js/htracker.js +++ b/src/adonisjs/public/player/js/htracker.js @@ -10,17 +10,17 @@ class Tracker { this._caseCompleted = false this.inputReady = this.inputReady.bind(this) - MessageBus.i.subscribe('var/+/input/ready', this.inputReady) + MessageBus.i.subscribe('/input/ready/#', this.inputReady) this.inputMandatory = this.inputMandatory.bind(this) MessageBus.i.subscribe('var/+/input/mandatory', this.inputMandatory) this.groupinputReady = this.groupinputReady.bind(this) - MessageBus.i.subscribe('var/+/group_input/ready', this.groupinputReady) + MessageBus.i.subscribe('group_input/ready/#', this.groupinputReady) this.subinputReady = this.subinputReady.bind(this) - MessageBus.i.subscribe('var/+/subinput/ready', this.subinputReady) + MessageBus.i.subscribe('subinput/ready/#', this.subinputReady) this.inputTyped = this.inputTyped.bind(this) - MessageBus.i.subscribe('var/+/typed', this.inputTyped) + MessageBus.i.subscribe('input/typed/#', this.inputTyped) this.inputChanged = this.inputChanged.bind(this) - MessageBus.i.subscribe('var/+/changed', this.inputChanged) + MessageBus.i.subscribe('input/changed/#', this.inputChanged) this.stateChanged = this.stateChanged.bind(this) MessageBus.i.subscribe('var/+/state_changed', this.stateChanged) this.allMandatoryFilled = this.allMandatoryFilled.bind(this) @@ -33,7 +33,7 @@ class Tracker { MessageBus.i.subscribe('session/close', this.caseCompleted) this.submitVariables = this.submitVariables.bind(this) - MessageBus.i.subscribe('control/input/submit', this.submitVariables) + MessageBus.i.subscribe('input/submit/*', this.submitVariables) } inputMandatory (topic, message) { @@ -49,12 +49,13 @@ class Tracker { groupinputReady (topic, message) { this._initializeVariable(topic, {}) - this._groupInput = MessageBus.extractLevel(topic, 2) + this._groupInput = + MessageBus.extractLevelsFrom(topic, 3).replace(/\//g, '.') } subinputReady (topic, message) { if (this._groupInput != null) { - const id = MessageBus.extractLevel(topic, 2) + const id = MessageBus.extractLevelsFrom(topic, 3).replace(/\//g, '.') this._variables[this._groupInput][id] = { content: message.content, state: ' ' } } @@ -101,7 +102,9 @@ class Tracker { */ _updateVariable (topic, value) { - const v = MessageBus.extractLevel(topic, 2) + const v = MessageBus.extractLevelsFrom(topic, 3).replace(/\//g, '.') + console.log('=== variable levels') + console.log(v) if (v != null) { this._variables[v] = value this._varUpdated[v] = true diff --git a/src/adonisjs/public/player/js/player.js b/src/adonisjs/public/player/js/player.js index 0dda78bc..83e7b7f7 100644 --- a/src/adonisjs/public/player/js/player.js +++ b/src/adonisjs/public/player/js/player.js @@ -64,7 +64,7 @@ class PlayerManager { 'message', 'Ok') } else { if (this._currentKnot != null) { - MessageBus.i.publish('control/input/submit', null, true) // provisory + MessageBus.i.publish('input/submit/*', null, true) // provisory MessageBus.i.publish('knot/' + this._currentKnot + '/end', null, true) } diff --git a/src/adonisjs/public/scripts/playground/gallery/cell/aquarium-scripts-plus.js b/src/adonisjs/public/scripts/playground/gallery/cell/aquarium-scripts-plus.js index 220d6878..0aa311a6 100644 --- a/src/adonisjs/public/scripts/playground/gallery/cell/aquarium-scripts-plus.js +++ b/src/adonisjs/public/scripts/playground/gallery/cell/aquarium-scripts-plus.js @@ -51,7 +51,7 @@ -`, +`, `Selecione um dos ícones abaixo para editar o ambiente:
diff --git a/src/adonisjs/public/scripts/playground/gallery/cell/aquarium-scripts.js b/src/adonisjs/public/scripts/playground/gallery/cell/aquarium-scripts.js index d64321b5..47da8f66 100644 --- a/src/adonisjs/public/scripts/playground/gallery/cell/aquarium-scripts.js +++ b/src/adonisjs/public/scripts/playground/gallery/cell/aquarium-scripts.js @@ -55,7 +55,7 @@ -`, +`, `Selecione um dos ícones abaixo para editar o ambiente:
diff --git a/src/adonisjs/public/scripts/playground/gallery/cell/aquarium-sliders.js b/src/adonisjs/public/scripts/playground/gallery/cell/aquarium-sliders.js index 4fcb7c50..427f1677 100644 --- a/src/adonisjs/public/scripts/playground/gallery/cell/aquarium-sliders.js +++ b/src/adonisjs/public/scripts/playground/gallery/cell/aquarium-sliders.js @@ -80,7 +80,7 @@ -`, +`, `Selecione um dos ícones abaixo para editar o ambiente:
@@ -159,16 +159,16 @@ Selecione abaixo a chance de cada um dos eventos:
- + - - + + - + - + - + ` ) })() diff --git a/src/adonisjs/public/scripts/playground/gallery/cell/boids.js b/src/adonisjs/public/scripts/playground/gallery/cell/boids.js index 0c6018ad..ab30c76d 100644 --- a/src/adonisjs/public/scripts/playground/gallery/cell/boids.js +++ b/src/adonisjs/public/scripts/playground/gallery/cell/boids.js @@ -35,7 +35,7 @@ _________________ - + @@ -44,7 +44,7 @@ _________________ - +
diff --git a/src/adonisjs/public/scripts/playground/gallery/cell/cerrado-sliders.js b/src/adonisjs/public/scripts/playground/gallery/cell/cerrado-sliders.js index 5305bff1..47bd78a5 100644 --- a/src/adonisjs/public/scripts/playground/gallery/cell/cerrado-sliders.js +++ b/src/adonisjs/public/scripts/playground/gallery/cell/cerrado-sliders.js @@ -80,7 +80,7 @@ -`, +`, `Selecione um dos ícones abaixo para editar o ambiente:
@@ -159,16 +159,16 @@ Selecione abaixo a chance de cada um dos eventos:
- + - - + + - + - + - + ` ) })() diff --git a/src/adonisjs/public/scripts/playground/gallery/cell/expression-rocket-wide-timer-scale-ruler.js b/src/adonisjs/public/scripts/playground/gallery/cell/expression-rocket-wide-timer-scale-ruler.js index 4cf0f867..9f0e3d7f 100644 --- a/src/adonisjs/public/scripts/playground/gallery/cell/expression-rocket-wide-timer-scale-ruler.js +++ b/src/adonisjs/public/scripts/playground/gallery/cell/expression-rocket-wide-timer-scale-ruler.js @@ -37,7 +37,7 @@ - + @@ -46,7 +46,7 @@ - +
diff --git a/src/adonisjs/public/scripts/playground/gallery/cell/expression-rocket-wide-timer-scale.js b/src/adonisjs/public/scripts/playground/gallery/cell/expression-rocket-wide-timer-scale.js index c478f0c2..f2b929fe 100644 --- a/src/adonisjs/public/scripts/playground/gallery/cell/expression-rocket-wide-timer-scale.js +++ b/src/adonisjs/public/scripts/playground/gallery/cell/expression-rocket-wide-timer-scale.js @@ -33,14 +33,14 @@ - + - +
- + - +
-`, +`, `Selecione um dos ícones abaixo para editar o ambiente:
diff --git a/src/adonisjs/public/scripts/playground/gallery/cell/microworld-sliders.js b/src/adonisjs/public/scripts/playground/gallery/cell/microworld-sliders.js index b5c88dd0..c644c6c4 100644 --- a/src/adonisjs/public/scripts/playground/gallery/cell/microworld-sliders.js +++ b/src/adonisjs/public/scripts/playground/gallery/cell/microworld-sliders.js @@ -79,7 +79,7 @@ -`, +`, `Selecione um dos ícones abaixo para editar o ambiente:
@@ -153,16 +153,16 @@ Selecione abaixo a chance de cada um dos eventos:
- + - - + + - + - + - + ` ) })() diff --git a/src/adonisjs/public/scripts/playground/gallery/cell/zombie-wall-challenge1.js b/src/adonisjs/public/scripts/playground/gallery/cell/zombie-wall-challenge1.js index 486a2c69..d188b84a 100644 --- a/src/adonisjs/public/scripts/playground/gallery/cell/zombie-wall-challenge1.js +++ b/src/adonisjs/public/scripts/playground/gallery/cell/zombie-wall-challenge1.js @@ -104,7 +104,7 @@ Configure a transparência do teto:
- + ` ) })() diff --git a/src/adonisjs/public/scripts/playground/gallery/cell/zombie-wall-challenge2.js b/src/adonisjs/public/scripts/playground/gallery/cell/zombie-wall-challenge2.js index 989f3a8a..d9f457ff 100644 --- a/src/adonisjs/public/scripts/playground/gallery/cell/zombie-wall-challenge2.js +++ b/src/adonisjs/public/scripts/playground/gallery/cell/zombie-wall-challenge2.js @@ -104,7 +104,7 @@ Configure a transparência do teto:
- + ` ) })() diff --git a/src/adonisjs/public/scripts/playground/gallery/cell/zombie-wall-challenge3.js b/src/adonisjs/public/scripts/playground/gallery/cell/zombie-wall-challenge3.js index cd9be45d..7229fd18 100644 --- a/src/adonisjs/public/scripts/playground/gallery/cell/zombie-wall-challenge3.js +++ b/src/adonisjs/public/scripts/playground/gallery/cell/zombie-wall-challenge3.js @@ -104,7 +104,7 @@ Configure a transparência do teto:
- + ` ) })() diff --git a/src/adonisjs/public/scripts/playground/gallery/cell/zombie-wall-challenge4.js b/src/adonisjs/public/scripts/playground/gallery/cell/zombie-wall-challenge4.js index 4dbba8fc..580980d6 100644 --- a/src/adonisjs/public/scripts/playground/gallery/cell/zombie-wall-challenge4.js +++ b/src/adonisjs/public/scripts/playground/gallery/cell/zombie-wall-challenge4.js @@ -104,7 +104,7 @@ Configure a transparência do teto:
- + ` ) })() diff --git a/src/adonisjs/public/scripts/playground/gallery/cell/zombie-wall-challenge5.js b/src/adonisjs/public/scripts/playground/gallery/cell/zombie-wall-challenge5.js index 98a1fc5c..848e5d43 100644 --- a/src/adonisjs/public/scripts/playground/gallery/cell/zombie-wall-challenge5.js +++ b/src/adonisjs/public/scripts/playground/gallery/cell/zombie-wall-challenge5.js @@ -104,7 +104,7 @@ Configure a transparência do teto:
- + ` ) })() diff --git a/src/adonisjs/public/scripts/playground/gallery/cell/zombie-wall-challenge6.js b/src/adonisjs/public/scripts/playground/gallery/cell/zombie-wall-challenge6.js index 4a3ef396..73ed3b84 100644 --- a/src/adonisjs/public/scripts/playground/gallery/cell/zombie-wall-challenge6.js +++ b/src/adonisjs/public/scripts/playground/gallery/cell/zombie-wall-challenge6.js @@ -104,7 +104,7 @@ Configure a transparência do teto:
- + ` ) })() diff --git a/src/adonisjs/public/scripts/playground/gallery/cell/zombie-wall-train1.js b/src/adonisjs/public/scripts/playground/gallery/cell/zombie-wall-train1.js index 09bd6f4e..04b3fd2e 100644 --- a/src/adonisjs/public/scripts/playground/gallery/cell/zombie-wall-train1.js +++ b/src/adonisjs/public/scripts/playground/gallery/cell/zombie-wall-train1.js @@ -104,7 +104,7 @@ Configure a transparência do teto:
- + ` ) })() diff --git a/src/adonisjs/public/translator/playground/js/author-versum.js b/src/adonisjs/public/translator/playground/js/author-versum.js index e0388d62..7f24c096 100644 --- a/src/adonisjs/public/translator/playground/js/author-versum.js +++ b/src/adonisjs/public/translator/playground/js/author-versum.js @@ -16,7 +16,7 @@ class AuthorVersumManager { this.updateVisibility = this.updateVisibility.bind(this) MessageBus.i.subscribe('control/translate/example', this.translate) - MessageBus.i.subscribe('var/output/changed', this.updateVisibility) + MessageBus.i.subscribe('input/changed/output', this.updateVisibility) } async translate (topic, message) { From 1c2df7306036a42c757675d7d4e9c5cac7ef8332 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Santanch=C3=A8?= Date: Sat, 20 Nov 2021 19:24:46 -0300 Subject: [PATCH 08/17] refactor (message/navigate): navigation target adapted to hierarchy --- .../dccs/components/control/dcc-compute.js | 2 +- .../dccs/components/visual/dcc-button.js | 10 +- src/adonisjs/public/infra/bus.js | 38 ++-- src/adonisjs/public/player/js/htracker.js | 10 +- src/adonisjs/public/player/js/player.js | 204 +++++++++--------- src/adonisjs/public/translator/translator.js | 4 +- 6 files changed, 144 insertions(+), 124 deletions(-) diff --git a/src/adonisjs/public/dccs/components/control/dcc-compute.js b/src/adonisjs/public/dccs/components/control/dcc-compute.js index 95c6daba..e8c805ab 100644 --- a/src/adonisjs/public/dccs/components/control/dcc-compute.js +++ b/src/adonisjs/public/dccs/components/control/dcc-compute.js @@ -103,7 +103,7 @@ class DCCCompute extends DCCBase { if (expression.target.startsWith('Case.')) { message = 'case/navigate/' + expression.target.substring(5) } else - { message = 'knot/navigate/' + expression.target } + { message = 'knot/navigate/' + expression.target.replace(/\./g, '/') } let cBus = (bus != null) ? bus : MessageBus.i if (expression.parameter) { bus.publish(message, expression.parameter, true) diff --git a/src/adonisjs/public/dccs/components/visual/dcc-button.js b/src/adonisjs/public/dccs/components/visual/dcc-button.js index 482a4e7e..0bcbe4c1 100644 --- a/src/adonisjs/public/dccs/components/visual/dcc-button.js +++ b/src/adonisjs/public/dccs/components/visual/dcc-button.js @@ -16,9 +16,11 @@ class DCCButton extends DCCBlock { connectedCallback () { super.connectedCallback() - if (this.hasAttribute('topic') && this.topic.endsWith('/navigate')) { + if (this.hasAttribute('topic') && + MessageBus.extractLevel(this.topic, 2) == 'navigate') { this.navigationBlocked = this.navigationBlocked.bind(this) - this._subscribe('+/+/navigate/blocked', this.navigationBlocked) + this._subscribe(MessageBus.extractLevelsSegment(this.topic, 1, 2) + '/!', + this.navigationBlocked) } this._publish('control/button/' + @@ -156,7 +158,9 @@ class DCCButton extends DCCBlock { this._publish('input/changed/' + v.replace(/\./g, '/'), message, true) } if (this.hasAttribute('label') || this.hasAttribute('topic')) { - if (this.hasAttribute('topic') && this.topic.endsWith('/navigate')) { this._active = false } + if (this.hasAttribute('topic') && + MessageBus.extractLevel(this.topic, 2) == 'navigate') + this._active = false const topic = (this.hasAttribute('topic')) ? this.topic : 'button/' + this.label + '/clicked' if (this.hasAttribute('message')) { message.value = this.message } diff --git a/src/adonisjs/public/infra/bus.js b/src/adonisjs/public/infra/bus.js index 9b161f78..ff91f617 100644 --- a/src/adonisjs/public/infra/bus.js +++ b/src/adonisjs/public/infra/bus.js @@ -266,30 +266,40 @@ class MessageBus { * Returns the label at a specific level of the message. */ static extractLevel (topic, level) { - let label = null - if (topic != null) { - const levelSet = topic.split('/') - if (level <= levelSet.length) { label = levelSet[level - 1] } - } - return label + const levelSet = MessageBus._splitLevels(topic, level) + return (levelSet == null) ? null : levelSet[level - 1] } /* - * Returns the hierarchy starting at a specific level of the message. + * Returns the hierarchy from a level to a level of the message. */ - static extractLevelsFrom (topic, level) { + static extractLevelsSegment (topic, levelFrom, levelTo) { let hierarchy = null - if (topic != null) { - const levelSet = topic.split('/') - if (level <= levelSet.length) { - hierarchy = '' - for (let l = level-1; l < levelSet.length; l++) - hierarchy += levelSet[l] + ((l < levelSet.length-1) ? '/' : '') + const levelSet = MessageBus._splitLevels(topic) + if (levelSet != null) { + if (levelTo == null) + levelTo = levelSet.length + if (levelTo >= levelFrom) { + if (levelSet != null) { + hierarchy = '' + for (let l = levelFrom-1; l < levelTo; l++) + hierarchy += levelSet[l] + ((l < levelTo-1) ? '/' : '') + } } } return hierarchy } + static _splitLevels (topic, level) { + let split = null + if (topic != null) { + const levelSet = topic.split('/') + if (level == null || level <= levelSet.length) + split = levelSet + } + return split + } + /* Message building services *************************/ static buildResponseTopic (topic, message) { diff --git a/src/adonisjs/public/player/js/htracker.js b/src/adonisjs/public/player/js/htracker.js index e1b98a08..b741c3c1 100644 --- a/src/adonisjs/public/player/js/htracker.js +++ b/src/adonisjs/public/player/js/htracker.js @@ -27,7 +27,7 @@ class Tracker { MessageBus.i.subscribe('var/*/input/mandatory/get', this.allMandatoryFilled) this.knotStart = this.knotStart.bind(this) - MessageBus.i.subscribe('knot/start/+', this.knotStart) + MessageBus.i.subscribe('knot/start/#', this.knotStart) this.caseCompleted = this.caseCompleted.bind(this) MessageBus.i.subscribe('case/completed', this.caseCompleted) MessageBus.i.subscribe('session/close', this.caseCompleted) @@ -50,12 +50,12 @@ class Tracker { groupinputReady (topic, message) { this._initializeVariable(topic, {}) this._groupInput = - MessageBus.extractLevelsFrom(topic, 3).replace(/\//g, '.') + MessageBus.extractLevelsSegment(topic, 3).replace(/\//g, '.') } subinputReady (topic, message) { if (this._groupInput != null) { - const id = MessageBus.extractLevelsFrom(topic, 3).replace(/\//g, '.') + const id = MessageBus.extractLevelsSegment(topic, 3).replace(/\//g, '.') this._variables[this._groupInput][id] = { content: message.content, state: ' ' } } @@ -102,7 +102,7 @@ class Tracker { */ _updateVariable (topic, value) { - const v = MessageBus.extractLevelsFrom(topic, 3).replace(/\//g, '.') + const v = MessageBus.extractLevelsSegment(topic, 3).replace(/\//g, '.') console.log('=== variable levels') console.log(v) if (v != null) { @@ -125,7 +125,7 @@ class Tracker { } knotStart (topic, message) { - const k = MessageBus.extractLevel(topic, 3) + const k = MessageBus.extractLevelsSegment(topic, 3).replace(/\//g, '.') const currentDateTime = new Date() this._knotTrack.push( {knotid: k, diff --git a/src/adonisjs/public/player/js/player.js b/src/adonisjs/public/player/js/player.js index 83e7b7f7..c9dde9c0 100644 --- a/src/adonisjs/public/player/js/player.js +++ b/src/adonisjs/public/player/js/player.js @@ -46,114 +46,119 @@ class PlayerManager { } async navigateEvent (topic, message) { - let target = MessageBus.extractLevel(topic, 3) - if (target == '=') target = MessageBus.extractLevel(topic, 4) - this.trackTrigger(target) - - let mandatoryEmpty = null - const mandatoryM = await MessageBus.i.request('var/*/input/mandatory/get') - for (const m in mandatoryM.message) { - if (mandatoryM.message[m].filled == false && mandatoryEmpty == null) { - mandatoryEmpty = mandatoryM.message[m].message } - } - - if (mandatoryEmpty != null) { - MessageBus.i.publish(topic + '/blocked', 'Input missing: ' + mandatoryEmpty, true) - await DCCNoticeInput.displayNotice( - 'You must answer the question: ' + mandatoryEmpty, - 'message', 'Ok') - } else { - if (this._currentKnot != null) { - MessageBus.i.publish('input/submit/*', null, true) // provisory - MessageBus.i.publish('knot/' + this._currentKnot + '/end', null, true) + if (MessageBus.extractLevel(topic, 3) != '!') { // navigation blocked + let target = + MessageBus.extractLevelsSegment(topic, + (MessageBus.extractLevel(topic, 3) == '=') ? 4 : 3).replace(/\//g, '.') + this.trackTrigger(target) + + let mandatoryEmpty = null + const mandatoryM = await MessageBus.i.request('var/*/input/mandatory/get') + for (const m in mandatoryM.message) { + if (mandatoryM.message[m].filled == false && mandatoryEmpty == null) { + mandatoryEmpty = mandatoryM.message[m].message } } - switch (topic) { - case 'knot/navigate/<': - if (this._notesStack.length > 0) { - const panel = this._notesStack.pop() - this._mainPanel.removeChild(panel) - } - if (this._state.historyHasPrevious()) { - // removes the panel to rebuild it + if (mandatoryEmpty != null) { + MessageBus.i.publish(MessageBus.extractLevelsSegment(topic, 1, 2) + '/!', + 'Input missing: ' + mandatoryEmpty, true) + await DCCNoticeInput.displayNotice( + 'You must answer the question: ' + mandatoryEmpty, + 'message', 'Ok') + } else { + if (this._currentKnot != null) { + MessageBus.i.publish('input/submit/*', null, true) // provisory + MessageBus.i.publish('knot/end/' + this._currentKnot.replace(/\./g, '/'), + null, true) + } + + switch (topic) { + case 'knot/navigate/<': if (this._notesStack.length > 0) { const panel = this._notesStack.pop() this._mainPanel.removeChild(panel) } - this.knotLoad(this._state.historyPrevious()) - } - break - case 'knot/navigate/<<': this.startCase() - const flowStart = this._nextFlowKnot() - const startKnot = (flowStart != null) - ? flowStart.target - : (DCCPlayerServer.localEnv) - ? DCCPlayerServer.playerObj.start - : this._compiledCase.start - // console.log("=== start"); - // console.log(startKnot); - this._state.historyRecord(startKnot) - this.knotLoad(startKnot) - break - case 'knot/navigate/>': const nextKnot = this._state.nextKnot() - this._state.historyRecord(nextKnot) - this.knotLoad(nextKnot) - break - case 'flow/navigate/>': const flowNext = this._nextFlowKnot() - if (flowNext != null) { - // console.log('=== flow next') - // console.log(flowNext) - this._state.historyRecord(flowNext.target) - this.knotLoad(flowNext.target) - } - break - case 'case/navigate/>': - // jumping other instructions - improve it - // console.log('=== next case') - let instruction - do { - instruction = this._state.metascriptNextInstruction() - } while (instruction != null && instruction.type != 'divert-script' && - instruction.target.substring(0, 5).toLowerCase() != 'case.') - - // console.log(instruction) - if (instruction != null) { - if (instruction.parameter) { - // console.log("=== metaparameter"); - // console.log(instruction.parameter.parameter); - this._state.metaexecParameterSet(instruction.parameter.parameter) + if (this._state.historyHasPrevious()) { + // removes the panel to rebuild it + if (this._notesStack.length > 0) { + const panel = this._notesStack.pop() + this._mainPanel.removeChild(panel) + } + this.knotLoad(this._state.historyPrevious()) + } + break + case 'knot/navigate/<<': this.startCase() + const flowStart = this._nextFlowKnot() + const startKnot = (flowStart != null) + ? flowStart.target + : (DCCPlayerServer.localEnv) + ? DCCPlayerServer.playerObj.start + : this._compiledCase.start + // console.log("=== start"); + // console.log(startKnot); + this._state.historyRecord(startKnot) + this.knotLoad(startKnot) + break + case 'knot/navigate/>': const nextKnot = this._state.nextKnot() + this._state.historyRecord(nextKnot) + this.knotLoad(nextKnot) + break + case 'flow/navigate/>': const flowNext = this._nextFlowKnot() + if (flowNext != null) { + // console.log('=== flow next') + // console.log(flowNext) + this._state.historyRecord(flowNext.target) + this.knotLoad(flowNext.target) + } + break + case 'case/navigate/>': + // jumping other instructions - improve it + // console.log('=== next case') + let instruction + do { + instruction = this._state.metascriptNextInstruction() + } while (instruction != null && instruction.type != 'divert-script' && + instruction.target.substring(0, 5).toLowerCase() != 'case.') + + // console.log(instruction) + if (instruction != null) { + if (instruction.parameter) { + // console.log("=== metaparameter"); + // console.log(instruction.parameter.parameter); + this._state.metaexecParameterSet(instruction.parameter.parameter) + } + window.open('index.html?case=' + + instruction.target.substring(5) + + (this._previewCase ? '&preview' : ''), '_self') + } + break + case 'session/close': + this.sessionClose() + break + default: if (MessageBus.matchFilter(topic, 'knot/navigate/#')) { + if (MessageBus.matchFilter(topic, 'knot/navigate/=/#')) { + const result = await MessageBus.i.request('var/' + target + '/get', null, null, true) + target = Translator.instance.findContext( + this._compiledCase.knots, this._currentKnot, + result.message) + } + this._state.historyRecord(target) + if (message.value) { + this._state.parameter = message.value + this.knotLoad(target, message.value) + } else { + this._state.parameter = null + this.knotLoad(target) + } + } else if (MessageBus.matchFilter(topic, 'case/navigate/+')) { + if (message) { + this._state.metaexecParameterSet(message.parameter) } - window.open('index.html?case=' + - instruction.target.substring(5) + - (this._previewCase ? '&preview' : ''), '_self') + window.open('index.html?case=' + target + + (this._previewCase ? '&preview' : ''), '_self') } break - case 'session/close': - this.sessionClose() - break - default: if (MessageBus.matchFilter(topic, 'knot/navigate/#')) { - if (MessageBus.matchFilter(topic, 'knot/navigate/=/+')) { - const result = await MessageBus.i.request('var/' + target + '/get', null, null, true) - target = Translator.instance.findContext( - this._compiledCase.knots, this._currentKnot, - result.message) - } - this._state.historyRecord(target) - if (message.value) { - this._state.parameter = message.value - this.knotLoad(target, message.value) - } else { - this._state.parameter = null - this.knotLoad(target) - } - } else if (MessageBus.matchFilter(topic, 'case/navigate/+')) { - if (message) { - this._state.metaexecParameterSet(message.parameter) - } - window.open('index.html?case=' + target + - (this._previewCase ? '&preview' : ''), '_self') } - break } } } @@ -355,7 +360,8 @@ class PlayerManager { if (note) { this.presentNote(knot) } else { this.presentKnot(knot) } } } - MessageBus.i.publish('knot/start/' + knotName, null, true) + MessageBus.i.publish('knot/start/' + knotName.replace(/\./g, '/'), + null, true) if (this._knots[knotName].categories && this._knots[knotName].categories.includes('end')) diff --git a/src/adonisjs/public/translator/translator.js b/src/adonisjs/public/translator/translator.js index e37d5a12..4320f1e1 100644 --- a/src/adonisjs/public/translator/translator.js +++ b/src/adonisjs/public/translator/translator.js @@ -1867,9 +1867,9 @@ class Translator { if (Translator.reservedNavigation.includes(lower)) { message = Translator.navigationMap[lower] } else if (lower.startsWith('variable.')) - message = 'knot/navigate/=/' + target.substring(9) + message = 'knot/navigate/=/' + target.substring(9).replace(/\./g, '/') else - message = 'knot/navigate/' + target + message = 'knot/navigate/' + target.replace(/\./g, '/') return message } From 0b218a5f6d3b6c78d39ab34bac36946f3e257ce3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Santanch=C3=A8?= Date: Sun, 21 Nov 2021 08:59:45 -0300 Subject: [PATCH 09/17] refactor (message/set): set messages refactor --- .../dccs/components/control/dcc-compute.js | 14 +++++---- .../dccs/components/visual/dcc-expression.js | 7 ++--- .../public/dccs/components/web/dcc-dhtml.js | 8 ++--- src/adonisjs/public/player/js/htracker.js | 29 ++++++++++--------- src/adonisjs/public/player/js/player.js | 3 +- src/adonisjs/public/player/js/state.js | 8 +++-- 6 files changed, 39 insertions(+), 30 deletions(-) diff --git a/src/adonisjs/public/dccs/components/control/dcc-compute.js b/src/adonisjs/public/dccs/components/control/dcc-compute.js index e8c805ab..cf017ebf 100644 --- a/src/adonisjs/public/dccs/components/control/dcc-compute.js +++ b/src/adonisjs/public/dccs/components/control/dcc-compute.js @@ -19,7 +19,7 @@ class DCCCompute extends DCCBase { if (this.active) { const variables = DCCCompute.filterVariables(this._compiled, false) for (let v of variables) - this._subscribe('var/' + v + '/set', this.update) + this._subscribe('var/set/' + v.replace(/\./g, '/'), this.update) } } } @@ -70,7 +70,7 @@ class DCCCompute extends DCCBase { this.update() } - async update() { + async update () { const result = await DCCCompute.computeExpression(this._compiled, this._bus) if (result) await this.multiRequest('true', null) @@ -227,7 +227,8 @@ class DCCCompute extends DCCBase { if (s[0] != null) { result = DCCCompute.computeCompiled(s[1]) let cBus = (bus != null) ? bus : MessageBus.i - await cBus.request('var/' + s[0] + '/set', result, null, true) + await cBus.request('var/set/' + s[0].replace(/\./g, '/'), + result, null, true) } else if (compiledSet.length == 1) { result = DCCCompute.computeCompiled(s[1]) // looks for a variable inside the expression @@ -235,7 +236,7 @@ class DCCCompute extends DCCBase { if (autoAssign) { let variable = s[1].find(el => el[0] == 3) if (variable) - await this._request('var/' + variable[1] + '/set', result, null, true) + await this._request('var/set/' + variable[1].replace(/\./g, '/'), result, null, true) } */ } @@ -269,8 +270,9 @@ class DCCCompute extends DCCBase { for (let c of compiled) if (c[0] == DCCCompute.role.variable) { let cBus = (bus != null) ? bus : MessageBus.i - if (cBus.hasSubscriber('var/' + c[1] + '/get')) { - const mess = await cBus.request('var/' + c[1] + '/get', null, null, true) + if (cBus.hasSubscriber('var/get/' + c[1].replace(/\./g, '/'))) { + const mess = await cBus.request('var/get/' + c[1].replace(/\./g, '/'), + null, null, true) if (mess.message != null) { const value = (mess.message.body != null) ? mess.message.body : mess.message diff --git a/src/adonisjs/public/dccs/components/visual/dcc-expression.js b/src/adonisjs/public/dccs/components/visual/dcc-expression.js index a201e98c..9d18a59b 100644 --- a/src/adonisjs/public/dccs/components/visual/dcc-expression.js +++ b/src/adonisjs/public/dccs/components/visual/dcc-expression.js @@ -47,10 +47,10 @@ class DCCExpression extends DCCVisual { if (this.active) { this.variableUpdated = this.variableUpdated.bind(this) const variables = DCCCompute.filterVariables(this._compiled, false) - // this._subscribe(// 'var/' + this._variable + '/set', this.variableUpdated) - this._subscribe('var/*/set', this.variableUpdated) + this._subscribe('var/set/*', this.variableUpdated) for (let v of variables) - this._subscribe('var/' + v + '/set', this.variableUpdated) + this._subscribe('var/set/' + v.replace(/\./g, '/'), + this.variableUpdated) } } } @@ -66,7 +66,6 @@ class DCCExpression extends DCCVisual { async _showResult () { let result = await DCCCompute.computeExpression(this._compiled) - // let result = await this._request('var/' + this._variable + '/get', null, null, true) if (result == null) { result = '' } else { diff --git a/src/adonisjs/public/dccs/components/web/dcc-dhtml.js b/src/adonisjs/public/dccs/components/web/dcc-dhtml.js index 7df72ab0..4c0211b5 100644 --- a/src/adonisjs/public/dccs/components/web/dcc-dhtml.js +++ b/src/adonisjs/public/dccs/components/web/dcc-dhtml.js @@ -36,11 +36,11 @@ class DCCDHTML extends DCCBase { {attributes: true, childList: true, subtree: true}) if (this.hasAttribute('autoupdate')) { - let record = await this._request('var/*/get', null, null, true) + let record = await this._request('var/get/*', null, null, true) record = (record == null || record.message == null) ? {} : record.message - this.recordUpdate('var/*/get', record) + this.recordUpdate('var/get/*', record) this.fieldUpdate = this.fieldUpdate.bind(this) - this._subscribe('var/+/set', this.fieldUpdate) + this._subscribe('var/set/#', this.fieldUpdate) } this._ready = false @@ -168,7 +168,7 @@ class DCCDHTML extends DCCBase { } fieldUpdate (topic, message) { - const id = MessageBus.extractLevel(topic, 2) + const id = MessageBus.extractLevelsSegment(topic, 3).replace(/\//g, '.') const value = this._extractValue(message) if (id == '*') this._record = value diff --git a/src/adonisjs/public/player/js/htracker.js b/src/adonisjs/public/player/js/htracker.js index b741c3c1..0aea90bf 100644 --- a/src/adonisjs/public/player/js/htracker.js +++ b/src/adonisjs/public/player/js/htracker.js @@ -10,7 +10,7 @@ class Tracker { this._caseCompleted = false this.inputReady = this.inputReady.bind(this) - MessageBus.i.subscribe('/input/ready/#', this.inputReady) + MessageBus.i.subscribe('input/ready/#', this.inputReady) this.inputMandatory = this.inputMandatory.bind(this) MessageBus.i.subscribe('var/+/input/mandatory', this.inputMandatory) this.groupinputReady = this.groupinputReady.bind(this) @@ -36,6 +36,14 @@ class Tracker { MessageBus.i.subscribe('input/submit/*', this.submitVariables) } + _extractEntityId (topic) { + return MessageBus.extractLevelsSegment(topic, 3).replace(/\//g, '.') + } + + _exportEntityId (entity) { + return entity.replace(/\./g, '/') + } + inputMandatory (topic, message) { const v = MessageBus.extractLevel(topic, 2) if (v != null) { @@ -49,16 +57,13 @@ class Tracker { groupinputReady (topic, message) { this._initializeVariable(topic, {}) - this._groupInput = - MessageBus.extractLevelsSegment(topic, 3).replace(/\//g, '.') + this._groupInput = this._extractEntityId(topic) } subinputReady (topic, message) { - if (this._groupInput != null) { - const id = MessageBus.extractLevelsSegment(topic, 3).replace(/\//g, '.') - this._variables[this._groupInput][id] = + if (this._groupInput != null) + this._variables[this._groupInput][this._extractEntityId(topic)] = { content: message.content, state: ' ' } - } } inputTyped (topic, message) { @@ -81,7 +86,8 @@ class Tracker { submitVariables (topic, message) { for (const v in this._variables) { if (this._varUpdated[v] == null || this._varUpdated[v]) { - MessageBus.i.publish('var/' + v + '/set', this._variables[v], true) + MessageBus.i.publish('var/set/' + this._exportEntityId(v), + this._variables[v], true) this._varUpdated[v] = false } } @@ -102,9 +108,7 @@ class Tracker { */ _updateVariable (topic, value) { - const v = MessageBus.extractLevelsSegment(topic, 3).replace(/\//g, '.') - console.log('=== variable levels') - console.log(v) + const v = this._extractEntityId(topic) if (v != null) { this._variables[v] = value this._varUpdated[v] = true @@ -125,10 +129,9 @@ class Tracker { } knotStart (topic, message) { - const k = MessageBus.extractLevelsSegment(topic, 3).replace(/\//g, '.') const currentDateTime = new Date() this._knotTrack.push( - {knotid: k, + {knotid: this._extractEntityId(topic), timeStart: currentDateTime.toJSON()}) } diff --git a/src/adonisjs/public/player/js/player.js b/src/adonisjs/public/player/js/player.js index c9dde9c0..f46a5302 100644 --- a/src/adonisjs/public/player/js/player.js +++ b/src/adonisjs/public/player/js/player.js @@ -344,7 +344,8 @@ class PlayerManager { */ if (!DCCPlayerServer.localEnv) { if (parameter) { - MessageBus.i.publish('var/' + knotName + '.parameter/set', parameter, true) + MessageBus.i.publish( + 'var/set/' + knotName.replace(/\./g, '/') + '/parameter', parameter, true) } if (this._compiledCase.role && this._compiledCase.role == 'metacase' && this._knots[knotName].categories && diff --git a/src/adonisjs/public/player/js/state.js b/src/adonisjs/public/player/js/state.js index 9a39ad6a..9e1c1eed 100644 --- a/src/adonisjs/public/player/js/state.js +++ b/src/adonisjs/public/player/js/state.js @@ -34,7 +34,7 @@ class PlayState { this.variableGet = this.variableGet.bind(this) MessageBus.i.subscribe('var/+/get', this.variableGet) this.variableSet = this.variableSet.bind(this) - MessageBus.i.subscribe('var/+/set', this.variableSet) + MessageBus.i.subscribe('var/set/#', this.variableSet) this.variableSubGet = this.variableSubGet.bind(this) MessageBus.i.subscribe('var/+/get/sub', this.variableSubGet) } @@ -123,6 +123,10 @@ class PlayState { * Scenario Variables */ + _extractEntityId (topic) { + return MessageBus.extractLevelsSegment(topic, 3).replace(/\//g, '.') + } + variableGet (topic, message, track) { let id = MessageBus.extractLevel(topic, 2) @@ -169,7 +173,7 @@ class PlayState { } variableSet (topic, message, track) { - const id = MessageBus.extractLevel(topic, 2) + const id = this._extractEntityId(topic) let status = false const content = (message.responseStamp != null && message.body != null) ? From edd5360d4bc58958ef2f3807016cea1ebdb4579f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Santanch=C3=A8?= Date: Sun, 21 Nov 2021 10:24:46 -0300 Subject: [PATCH 10/17] refactor (message/input): change in the group and sub inputs structure --- .../components/visual/dcc-image-marker.js | 2 +- .../components/visual/dcc-input-choice.js | 2 +- .../components/visual/dcc-state-select.js | 4 +- src/adonisjs/public/player/js/htracker.js | 57 ++++++++----------- 4 files changed, 28 insertions(+), 37 deletions(-) diff --git a/src/adonisjs/public/dccs/components/visual/dcc-image-marker.js b/src/adonisjs/public/dccs/components/visual/dcc-image-marker.js index 8e685cbe..f9dd7a24 100644 --- a/src/adonisjs/public/dccs/components/visual/dcc-image-marker.js +++ b/src/adonisjs/public/dccs/components/visual/dcc-image-marker.js @@ -123,7 +123,7 @@ class DCCGroupMarker extends DCCBase { this._subscribe('dcc/marker-spot/set', this.setMarkerSpot) this._subscribe('dcc/marker-spot/selected', this.spotSelected) - this._publish('group_input/ready/' + this.context.replace(/\./g, '/'), + this._publish('input/ready/ align with dcc-state-select - this._publish('group_input/ready/' + this._variable.replace(/\./g, '/'), + this._publish('input/ready//' + this.completeId.replace(/\./g, '/'), { sourceType: DCCStateSelect.elementTag, content: this.innerHTML @@ -240,7 +240,7 @@ class DCCGroupSelect extends DCCBlock { this._groupReady = true this._answerRequests() - this._publish('group_input/ready/' + this.variable.replace(/\./g, '/'), + this._publish('input/ready/') ? 4 : 3 + const v = this._extractEntityId(topic, position) + if (v != null && this._variables[v] == null) + switch (type) { + '<' : this._updateVariable(v, {}) + this._groupInput = v + break + '>' : if (this._groupInput != null) + this._variables[this._groupInput][v] = + { content: message.content, state: ' ' } + break + default: this._updateVariable(v, '') + } } inputTyped (topic, message) { - this._updateVariable(topic, message.value) + this._updateVariable(this._extractEntityId(topic, 3), message.value) // this._changedVariable(topic, message.value) } inputChanged (topic, message) { - this._updateVariable(topic, message.value) + this._updateVariable(this._extractEntityId(topic, 3), message.value) // this._changedVariable(topic, message.value) } @@ -107,22 +105,15 @@ class Tracker { } */ - _updateVariable (topic, value) { - const v = this._extractEntityId(topic) - if (v != null) { - this._variables[v] = value - this._varUpdated[v] = true - if (this._mandatoryFilled[v] !== undefined) { - this._mandatoryFilled[v].filled = (value.length > 0) } + _updateVariable (variable, value) { + if (variable != null) { + this._variables[variable] = value + this._varUpdated[variable] = true + if (this._mandatoryFilled[variable] !== undefined) { + this._mandatoryFilled[variable].filled = (value.length > 0) } } } - _initializeVariable (topic, value) { - const v = MessageBus.extractLevel(topic, 2) - if (v != null && this._variables[v] == null) - this._updateVariable(topic, value) - } - allMandatoryFilled (topic, message, track) { MessageBus.i.publish(MessageBus.buildResponseTopic(topic, message), this._mandatoryFilled, track) From 998fdeb4831b9d64307d3053255c91928b7a5e21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Santanch=C3=A8?= Date: Sun, 21 Nov 2021 11:21:39 -0300 Subject: [PATCH 11/17] refactor (message/response): new response message structure --- src/adonisjs/public/infra/bus.js | 11 +++++++++-- src/adonisjs/public/player/js/htracker.js | 16 ++++++++-------- src/adonisjs/public/player/js/state.js | 4 ++-- 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/adonisjs/public/infra/bus.js b/src/adonisjs/public/infra/bus.js index ff91f617..64a4b858 100644 --- a/src/adonisjs/public/infra/bus.js +++ b/src/adonisjs/public/infra/bus.js @@ -146,7 +146,7 @@ class MessageBus { if (responseTopic) { rt = responseTopic } else { if (rm == null) { rm = {} } else if (typeof rm !== 'object') { rm = { body: rm } } rm.responseStamp = MessageBus._stamp - rt = requestTopic + '/response/' + MessageBus._stamp + rt = 'response/' + MessageBus._stamp + '/' + requestTopic MessageBus._stamp++ } @@ -167,6 +167,13 @@ class MessageBus { } } + publishHasResponse (topic, requestMessage, responseMessage, track) { + if (requestMessage.responseStamp) + this.publish( + MessageBus.buildResponseTopic(topic, requestMessage), + responseMessage, track) + } + async waitMessage (topic) { const promise = new Promise((resolve, reject) => { const callback = function (topic, message) { @@ -303,7 +310,7 @@ class MessageBus { /* Message building services *************************/ static buildResponseTopic (topic, message) { - return topic + '/response/' + message.responseStamp + return 'response/' + message.responseStamp + '/' + topic } } diff --git a/src/adonisjs/public/player/js/htracker.js b/src/adonisjs/public/player/js/htracker.js index daf93479..efc54ac8 100644 --- a/src/adonisjs/public/player/js/htracker.js +++ b/src/adonisjs/public/player/js/htracker.js @@ -13,7 +13,7 @@ class Tracker { MessageBus.i.subscribe('input/ready/#', this.inputReady) this.inputMandatory = this.inputMandatory.bind(this) MessageBus.i.subscribe('var/+/input/mandatory', this.inputMandatory) - this.groupinputReady = this.groupinputReady.bind(this) + this.inputTyped = this.inputTyped.bind(this) MessageBus.i.subscribe('input/typed/#', this.inputTyped) this.inputChanged = this.inputChanged.bind(this) MessageBus.i.subscribe('input/changed/#', this.inputChanged) @@ -53,12 +53,12 @@ class Tracker { const v = this._extractEntityId(topic, position) if (v != null && this._variables[v] == null) switch (type) { - '<' : this._updateVariable(v, {}) - this._groupInput = v - break - '>' : if (this._groupInput != null) - this._variables[this._groupInput][v] = - { content: message.content, state: ' ' } + case '<' : this._updateVariable(v, {}) + this._groupInput = v + break + case '>' : if (this._groupInput != null) + this._variables[this._groupInput][v] = + { content: message.content, state: ' ' } break default: this._updateVariable(v, '') } @@ -122,7 +122,7 @@ class Tracker { knotStart (topic, message) { const currentDateTime = new Date() this._knotTrack.push( - {knotid: this._extractEntityId(topic), + {knotid: this._extractEntityId(topic, 3), timeStart: currentDateTime.toJSON()}) } diff --git a/src/adonisjs/public/player/js/state.js b/src/adonisjs/public/player/js/state.js index 9e1c1eed..fc7ce152 100644 --- a/src/adonisjs/public/player/js/state.js +++ b/src/adonisjs/public/player/js/state.js @@ -189,8 +189,8 @@ class PlayState { status = true } this._stateStore() - MessageBus.i.publish(MessageBus.buildResponseTopic(topic, message), - status, track) + + MessageBus.i.publishHasResponse(topic, message, status, track) } /* From 6914d1b2fe82d88e91d68fc536838e144b1436fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Santanch=C3=A8?= Date: Sun, 21 Nov 2021 12:03:44 -0300 Subject: [PATCH 12/17] refactor (message/mandatory): mandatory inputs reformat messages --- .../dccs/components/visual/dcc-input.js | 4 ++-- src/adonisjs/public/infra/bus.js | 3 +++ src/adonisjs/public/player/js/htracker.js | 21 ++++++++----------- src/adonisjs/public/player/js/player.js | 2 +- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/adonisjs/public/dccs/components/visual/dcc-input.js b/src/adonisjs/public/dccs/components/visual/dcc-input.js index daf52220..d3e9e8c1 100644 --- a/src/adonisjs/public/dccs/components/visual/dcc-input.js +++ b/src/adonisjs/public/dccs/components/visual/dcc-input.js @@ -23,8 +23,8 @@ class DCCInput extends DCCBlock { ? this._statement : this._variable.substring(this._variable.lastIndexOf('.') + 1) - this._publish('var/' + this._variable + '/input/mandatory', - inputIndication) + this._publish('input/mandatory/' + this._variable.replace(/\./g, '/'), + inputIndication) } } diff --git a/src/adonisjs/public/infra/bus.js b/src/adonisjs/public/infra/bus.js index 64a4b858..35fc43ff 100644 --- a/src/adonisjs/public/infra/bus.js +++ b/src/adonisjs/public/infra/bus.js @@ -167,6 +167,9 @@ class MessageBus { } } + /* + Publishes the response only if a request exists + */ publishHasResponse (topic, requestMessage, responseMessage, track) { if (requestMessage.responseStamp) this.publish( diff --git a/src/adonisjs/public/player/js/htracker.js b/src/adonisjs/public/player/js/htracker.js index efc54ac8..c5061c7f 100644 --- a/src/adonisjs/public/player/js/htracker.js +++ b/src/adonisjs/public/player/js/htracker.js @@ -12,15 +12,13 @@ class Tracker { this.inputReady = this.inputReady.bind(this) MessageBus.i.subscribe('input/ready/#', this.inputReady) this.inputMandatory = this.inputMandatory.bind(this) - MessageBus.i.subscribe('var/+/input/mandatory', this.inputMandatory) + MessageBus.i.subscribe('input/mandatory/#', this.inputMandatory) this.inputTyped = this.inputTyped.bind(this) MessageBus.i.subscribe('input/typed/#', this.inputTyped) this.inputChanged = this.inputChanged.bind(this) MessageBus.i.subscribe('input/changed/#', this.inputChanged) this.stateChanged = this.stateChanged.bind(this) MessageBus.i.subscribe('var/+/state_changed', this.stateChanged) - this.allMandatoryFilled = this.allMandatoryFilled.bind(this) - MessageBus.i.subscribe('var/*/input/mandatory/get', this.allMandatoryFilled) this.knotStart = this.knotStart.bind(this) MessageBus.i.subscribe('knot/start/#', this.knotStart) @@ -40,10 +38,14 @@ class Tracker { return entity.replace(/\./g, '/') } - inputMandatory (topic, message) { - const v = MessageBus.extractLevel(topic, 2) - if (v != null) { - this._mandatoryFilled[v] = { message: message, filled: false } + inputMandatory (topic, message, track) { + if (MessageBus.extractLevel(topic, 3) == '*') + MessageBus.i.publishHasResponse( + topic, message, this._mandatoryFilled, track) + else { + const v = this._extractEntityId(topic, 3) + if (v != null) + this._mandatoryFilled[v] = { message: message, filled: false } } } @@ -114,11 +116,6 @@ class Tracker { } } - allMandatoryFilled (topic, message, track) { - MessageBus.i.publish(MessageBus.buildResponseTopic(topic, message), - this._mandatoryFilled, track) - } - knotStart (topic, message) { const currentDateTime = new Date() this._knotTrack.push( diff --git a/src/adonisjs/public/player/js/player.js b/src/adonisjs/public/player/js/player.js index f46a5302..c13d1a3d 100644 --- a/src/adonisjs/public/player/js/player.js +++ b/src/adonisjs/public/player/js/player.js @@ -53,7 +53,7 @@ class PlayerManager { this.trackTrigger(target) let mandatoryEmpty = null - const mandatoryM = await MessageBus.i.request('var/*/input/mandatory/get') + const mandatoryM = await MessageBus.i.request('input/mandatory/*') for (const m in mandatoryM.message) { if (mandatoryM.message[m].filled == false && mandatoryEmpty == null) { mandatoryEmpty = mandatoryM.message[m].message } From 3f222135e9b4c0317a3fd9539edda5b8061ac9a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Santanch=C3=A8?= Date: Sun, 21 Nov 2021 13:52:44 -0300 Subject: [PATCH 13/17] refactor (message/input/state): var/state_change refactored to input/state --- .../dccs/components/visual/dcc-expression.js | 4 ++-- .../dccs/components/visual/dcc-state-select.js | 16 +++++++++++----- src/adonisjs/public/player/js/htracker.js | 9 ++++----- src/adonisjs/public/player/js/state.js | 6 ++++-- src/adonisjs/public/translator/translator.js | 10 ++++++++-- 5 files changed, 29 insertions(+), 16 deletions(-) diff --git a/src/adonisjs/public/dccs/components/visual/dcc-expression.js b/src/adonisjs/public/dccs/components/visual/dcc-expression.js index 9d18a59b..a55e3ab0 100644 --- a/src/adonisjs/public/dccs/components/visual/dcc-expression.js +++ b/src/adonisjs/public/dccs/components/visual/dcc-expression.js @@ -34,7 +34,7 @@ class DCCExpression extends DCCVisual { // also monitors all messages if (this.active) { this.stateChanged = this.stateChanged.bind(this) - this._subscribe('var/+/state_changed', this.stateChanged) + this._subscribe('input/state/#', this.stateChanged) this._stateValues = {} } @@ -138,7 +138,7 @@ class DCCExpression extends DCCVisual { } stateChanged (topic, message) { - const id = MessageBus.extractLevel(topic, 2) + const id = MessageBus.extractLevelsSegment(topic, 3).replace(/\//g, '.') if (id.startsWith(this._variable)) { const subid = id.substring(this._variable.length + 1) diff --git a/src/adonisjs/public/dccs/components/visual/dcc-state-select.js b/src/adonisjs/public/dccs/components/visual/dcc-state-select.js index d6a4a312..e00bdae1 100644 --- a/src/adonisjs/public/dccs/components/visual/dcc-state-select.js +++ b/src/adonisjs/public/dccs/components/visual/dcc-state-select.js @@ -134,7 +134,8 @@ class DCCStateSelect extends DCCVisual { } set selection (newValue) { - if (this._statesArr && this._statesArr.includes(newValue)) { this._selectionIndex = this._statesArr.indexOf(newValue) } + if (this._statesArr && this._statesArr.includes(newValue)) + this._selectionIndex = this._statesArr.indexOf(newValue) this.setAttribute('selection', newValue) } @@ -143,14 +144,19 @@ class DCCStateSelect extends DCCVisual { } set selectionIndex (newValue) { - if (this._statesArr && this._statesArr[newValue]) { this.selection = this._statesArr[newValue] } else { this._selectionIndex = newValue } + if (this._statesArr && this._statesArr[newValue]) + this.selection = this._statesArr[newValue] + else + this._selectionIndex = newValue } /* Rendering */ async _render () { if (this.states != null) { - if (this.hasAttribute('answer') || this.author) { this.selection = this.answer } else if (this.hasAttribute('player')) { + if (this.hasAttribute('answer') || this.author) + this.selection = this.answer + else if (this.hasAttribute('player')) { const value = await this._request( 'var/' + this.player + '/get/sub', this.innerHTML, null, true) this.selection = value.message @@ -196,7 +202,7 @@ class DCCStateSelect extends DCCVisual { _changeState () { if (this.states != null) { this.selectionIndex = (this.selectionIndex + 1) % this._statesArr.length - this._publish('var/' + this.completeId + '/state_changed', + this._publish('input/state/' + this.completeId.replace(/\./g, '/'), { sourceType: DCCStateSelect.elementTag, state: this.selection, @@ -241,7 +247,7 @@ class DCCGroupSelect extends DCCBlock { this._answerRequests() this._publish('input/ready/ -1) { id = id.substring(id.indexOf('.') + 1) } + while (this._state.variables[id] === undefined && id.indexOf('.') > -1) + id = id.substring(id.indexOf('.') + 1) if (this._state.variables[id]) { for (const v in this._state.variables[id]) { - if (this._state.variables[id][v].content == message.body) { result = this._state.variables[id][v].state } + if (this._state.variables[id][v].content == message.body) + result = this._state.variables[id][v].state } } MessageBus.i.publish(MessageBus.buildResponseTopic(topic, message), diff --git a/src/adonisjs/public/translator/translator.js b/src/adonisjs/public/translator/translator.js index 4320f1e1..4b9b8a53 100644 --- a/src/adonisjs/public/translator/translator.js +++ b/src/adonisjs/public/translator/translator.js @@ -2237,7 +2237,10 @@ class Translator { // provisory - weak strategy (only one per case) let answer = '' if (this._playerInputShow || this.authoringRender) { - if (this._playerInputShow == '#answer' || this.authoringRender) { answer = " answer='" + obj.value + "'" } else { answer = " player='" + this._playerInputShow + "'" } + if (this._playerInputShow == '#answer' || this.authoringRender) + { answer = " answer='" + obj.value + "'" } + else + { answer = " player='" + this._playerInputShow + "'" } } let extraAttr = '' @@ -2271,7 +2274,10 @@ class Translator { // indicates how related selects will behave this._playerInputShow = null if (obj.show) { - if (obj.show == 'answer') { this._playerInputShow = '#answer' } else { this._playerInputShow = obj.variable } + if (obj.show == 'answer') + this._playerInputShow = '#answer' + else + this._playerInputShow = obj.variable } } From b0e63ea916041625b17f6f4f72c5f86df9f3bc66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Santanch=C3=A8?= Date: Sun, 21 Nov 2021 16:26:53 -0300 Subject: [PATCH 14/17] refactor (message/get): get messages refactor --- .../dccs/components/visual/dcc-input-table.js | 3 +- .../components/visual/dcc-state-select.js | 3 +- src/adonisjs/public/player/js/player.js | 3 +- src/adonisjs/public/player/js/state.js | 76 +++++++++---------- 4 files changed, 41 insertions(+), 44 deletions(-) diff --git a/src/adonisjs/public/dccs/components/visual/dcc-input-table.js b/src/adonisjs/public/dccs/components/visual/dcc-input-table.js index dc0429bb..3def3f69 100644 --- a/src/adonisjs/public/dccs/components/visual/dcc-input-table.js +++ b/src/adonisjs/public/dccs/components/visual/dcc-input-table.js @@ -129,7 +129,8 @@ class DCCInputTable extends DCCInput { if (this.hasAttribute('player')) { const value = await this._request( - 'var/' + this.player + '/get/sub', this.innerHTML, null, true) + 'var/get/>/' + this.player.replace(/\./g, '/'), + this.innerHTML, null, true) console.log('=== return value') console.log(value) const input = value.message diff --git a/src/adonisjs/public/dccs/components/visual/dcc-state-select.js b/src/adonisjs/public/dccs/components/visual/dcc-state-select.js index e00bdae1..d885ec11 100644 --- a/src/adonisjs/public/dccs/components/visual/dcc-state-select.js +++ b/src/adonisjs/public/dccs/components/visual/dcc-state-select.js @@ -158,7 +158,8 @@ class DCCStateSelect extends DCCVisual { this.selection = this.answer else if (this.hasAttribute('player')) { const value = await this._request( - 'var/' + this.player + '/get/sub', this.innerHTML, null, true) + 'var/get/>/' + this.player.replace(/\./g, '/'), + this.innerHTML, null, true) this.selection = value.message } else { this._presentation.addEventListener('mouseover', this._showState) diff --git a/src/adonisjs/public/player/js/player.js b/src/adonisjs/public/player/js/player.js index c13d1a3d..034f8615 100644 --- a/src/adonisjs/public/player/js/player.js +++ b/src/adonisjs/public/player/js/player.js @@ -137,7 +137,8 @@ class PlayerManager { break default: if (MessageBus.matchFilter(topic, 'knot/navigate/#')) { if (MessageBus.matchFilter(topic, 'knot/navigate/=/#')) { - const result = await MessageBus.i.request('var/' + target + '/get', null, null, true) + const result = await MessageBus.i.request( + 'var/get/' + target.replace(/\./g, '/'), null, null, true) target = Translator.instance.findContext( this._compiledCase.knots, this._currentKnot, result.message) diff --git a/src/adonisjs/public/player/js/state.js b/src/adonisjs/public/player/js/state.js index 965ceb5c..49a8848e 100644 --- a/src/adonisjs/public/player/js/state.js +++ b/src/adonisjs/public/player/js/state.js @@ -32,11 +32,9 @@ class PlayState { MessageBus.i.subscribe('user/login/+', this.sessionRecord) this.variableGet = this.variableGet.bind(this) - MessageBus.i.subscribe('var/+/get', this.variableGet) + MessageBus.i.subscribe('var/get/#', this.variableGet) this.variableSet = this.variableSet.bind(this) MessageBus.i.subscribe('var/set/#', this.variableSet) - this.variableSubGet = this.variableSubGet.bind(this) - MessageBus.i.subscribe('var/+/get/sub', this.variableSubGet) } /* @@ -128,54 +126,50 @@ class PlayState { } variableGet (topic, message, track) { - let id = MessageBus.extractLevel(topic, 2) + const type = MessageBus.extractLevel(topic, 3) + let id = this._extractEntityId(topic, (type == '>') ? 4 : 3) - if (id != null) + if (id != null) { id = id.toLowerCase() - if (id != null && id.startsWith('previous.')) { - const previousKnot = this.historyPreviousId().toLowerCase() - if (previousKnot != null) { id = previousKnot + '.' + id.substring(9) } - } - - if (id == '*') - MessageBus.i.publish(MessageBus.buildResponseTopic(topic, message), - this._state.variables, track) - else { - // tries to give a scope to the variable - if (id != null && this._state.variables[id] == null) { - const currentKnot = this.historyCurrent() - if (currentKnot != null && - this._state.variables[currentKnot + '.' + id] != null) { id = currentKnot + '.' + id } + if (id.startsWith('previous.')) { + const previousKnot = this.historyPreviousId().toLowerCase() + if (previousKnot != null) { id = previousKnot + '.' + id.substring(9) } } - if (id != null) { - MessageBus.i.publish(MessageBus.buildResponseTopic(topic, message), - this._state.variables[id], track) - } - } - } - - variableSubGet (topic, message, track) { - const completeId = MessageBus.extractLevel(topic, 2) - if (completeId != null) { - let result = null - let id = completeId - while (this._state.variables[id] === undefined && id.indexOf('.') > -1) - id = id.substring(id.indexOf('.') + 1) - if (this._state.variables[id]) { - for (const v in this._state.variables[id]) { - if (this._state.variables[id][v].content == message.body) - result = this._state.variables[id][v].state - } + switch (type) { + case '*': + MessageBus.i.publishHasResponse ( + topic, message, this._state.variables, track) + break + case '>': + let result = null + while (this._state.variables[id] === undefined && id.indexOf('.') > -1) + id = id.substring(id.indexOf('.') + 1) + if (this._state.variables[id]) { + for (const v in this._state.variables[id]) { + if (this._state.variables[id][v].content == message.body) + result = this._state.variables[id][v].state + } + } + MessageBus.i.publishHasResponse (topic, message, result, track) + break + default: + // tries to give a scope to the variable + if (this._state.variables[id] == null) { + const currentKnot = this.historyCurrent() + if (currentKnot != null && + this._state.variables[currentKnot + '.' + id] != null) + id = currentKnot + '.' + id + } + MessageBus.i.publishHasResponse ( + topic, message, this._state.variables[id], track) } - MessageBus.i.publish(MessageBus.buildResponseTopic(topic, message), - result, track) } } variableSet (topic, message, track) { - const id = this._extractEntityId(topic) + const id = this._extractEntityId(topic, 3) let status = false const content = (message.responseStamp != null && message.body != null) ? From 75f33c199c07007796aa9a6f4088c80823d95e12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Santanch=C3=A8?= Date: Sun, 21 Nov 2021 16:50:37 -0300 Subject: [PATCH 15/17] refactor (message/case/completed): add case information --- src/adonisjs/public/player/js/htracker.js | 8 +++++--- src/adonisjs/public/player/js/player.js | 7 +++++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/adonisjs/public/player/js/htracker.js b/src/adonisjs/public/player/js/htracker.js index 15d460f7..b5384452 100644 --- a/src/adonisjs/public/player/js/htracker.js +++ b/src/adonisjs/public/player/js/htracker.js @@ -23,7 +23,7 @@ class Tracker { this.knotStart = this.knotStart.bind(this) MessageBus.i.subscribe('knot/start/#', this.knotStart) this.caseCompleted = this.caseCompleted.bind(this) - MessageBus.i.subscribe('case/completed', this.caseCompleted) + MessageBus.i.subscribe('case/completed/+', this.caseCompleted) MessageBus.i.subscribe('session/close', this.caseCompleted) this.submitVariables = this.submitVariables.bind(this) @@ -132,8 +132,10 @@ class Tracker { if (message && message.knotid) kt.knotid = message.knotid this._knotTrack.push(kt) - MessageBus.i.publish('case/summary', - {knotTrack: this._knotTrack, + MessageBus.i.publish('case/summary/' + MessageBus.extractLevel(topic, 3), + {userId: message.userId, + caseId: message.caseId, + knotTrack: this._knotTrack, variables: this._variables}, true) } } diff --git a/src/adonisjs/public/player/js/player.js b/src/adonisjs/public/player/js/player.js index 034f8615..ee509333 100644 --- a/src/adonisjs/public/player/js/player.js +++ b/src/adonisjs/public/player/js/player.js @@ -23,7 +23,7 @@ class PlayerManager { MessageBus.i.subscribe('/report/get', this.produceReport) this.caseCompleted = this.caseCompleted.bind(this) - MessageBus.i.subscribe('case/completed', this.caseCompleted) + MessageBus.i.subscribe('case/completed/+', this.caseCompleted) // tracking this.trackTyping = this.trackTyping.bind(this) @@ -367,7 +367,10 @@ class PlayerManager { if (this._knots[knotName].categories && this._knots[knotName].categories.includes('end')) - { MessageBus.i.publish('case/completed', {knotid: knotName}, true) } + MessageBus.i.publish('case/completed/' + this._state.runningCase.runningId, + {userId: this._state.userid, + caseId: Basic.service.currentCaseId, + knotid: knotName}, true) } caseCompleted (topic, message) { From 644a2bcb9a2605c8a9367c38b861b3fa2eabcf75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Santanch=C3=A8?= Date: Sun, 21 Nov 2021 17:09:54 -0300 Subject: [PATCH 16/17] fix (dcc-compute): updating output values --- src/adonisjs/public/dccs/components/control/dcc-compute.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/adonisjs/public/dccs/components/control/dcc-compute.js b/src/adonisjs/public/dccs/components/control/dcc-compute.js index cf017ebf..62a15f80 100644 --- a/src/adonisjs/public/dccs/components/control/dcc-compute.js +++ b/src/adonisjs/public/dccs/components/control/dcc-compute.js @@ -270,7 +270,7 @@ class DCCCompute extends DCCBase { for (let c of compiled) if (c[0] == DCCCompute.role.variable) { let cBus = (bus != null) ? bus : MessageBus.i - if (cBus.hasSubscriber('var/get/' + c[1].replace(/\./g, '/'))) { + if (cBus.hasSubscriber('var/get/' + c[1].replace(/\./g, '/'), true)) { const mess = await cBus.request('var/get/' + c[1].replace(/\./g, '/'), null, null, true) if (mess.message != null) { From 84394fbf9880cec07e0223feb6eb478def196824 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Santanch=C3=A8?= Date: Tue, 23 Nov 2021 19:52:06 -0300 Subject: [PATCH 17/17] feat (translator): new input approach with options --- .../public/dccs/edit/inplace-text-editor.js | 2 +- src/adonisjs/public/translator/translator.js | 129 +++++++++--------- 2 files changed, 65 insertions(+), 66 deletions(-) diff --git a/src/adonisjs/public/dccs/edit/inplace-text-editor.js b/src/adonisjs/public/dccs/edit/inplace-text-editor.js index 602bb210..4cd22e5e 100644 --- a/src/adonisjs/public/dccs/edit/inplace-text-editor.js +++ b/src/adonisjs/public/dccs/edit/inplace-text-editor.js @@ -61,7 +61,7 @@ class EditDCCText extends EditDCC { }, { name: 'harenaProvider', - url: /(^https?:\/\/(?:localhost|0\.0\.0\.0|(?:dev\.)?jacinto\.harena\.org)(?::10020)?\/.*)/, + url: /(^https?:\/\/(?:localhost|0\.0\.0\.0|(?:dev\.)?jacinto(?:-.)?\.harena\.org)(?::10020)?\/.*)/, html: match => '' } ] diff --git a/src/adonisjs/public/translator/translator.js b/src/adonisjs/public/translator/translator.js index 4b9b8a53..4f799ee0 100644 --- a/src/adonisjs/public/translator/translator.js +++ b/src/adonisjs/public/translator/translator.js @@ -425,7 +425,7 @@ class Translator { // can be interesting this link in the future // compiled[c].input = this.findContext(knotSet, knotId, compiled[c].input); else if (compiled[c].type == 'option' || - compiled[c].type == 'divert') { + compiled[c].type == 'divert') { compiled[c].contextTarget = this._findTarget(knotSet, knotId, compiled[c].target) } else if (compiled[c].type == 'text-block') @@ -654,41 +654,7 @@ class Translator { } } - // seventh cycle - aggregates options - let optionGroup = null - let subtype = null - for (let c = 1; c < compiled.length; c++) { - const pr = (c > 1 && compiled[c - 1].type == 'linefeed') ? c - 2 : c - 1 - if (compiled[c].type == 'option') { - let stype = compiled[c].subtype - if (compiled[pr].type == 'option' && compiled[c].subtype == subtype) { - optionGroup = this._initializeObject( - { - type: 'input', - subtype: 'choice', - exclusive: true, - shuffle: (subtype == '+'), - options: {} - }, compiled[pr]._source) - this._transferOption(optionGroup.options, compiled[pr]) - compiled[pr] = optionGroup - } - if (optionGroup != null && compiled[c].subtype == subtype) { - this._transferOption(optionGroup.options, compiled[c]) - optionGroup._source += '\n' + compiled[c]._source - const shift = c - pr - compiled.splice(c - shift + 1, shift) - c -= shift - } else - optionGroup = null - subtype = stype - } else if (compiled[c].type != 'linefeed') { - optionGroup = null - } - compiled[c].seq = c + 1 - } - - // eighth cycle - computes subordinate elements + // seventh cycle - computes subordinate elements for (let c = 0; c < compiled.length; c++) { const pr = (c > 1 && compiled[c - 1].type == 'linefeed') ? c - 2 : c - 1 // later blockquotes and subordinates (excluding knot subordinates) @@ -727,14 +693,6 @@ class Translator { (compiled[c].subordinate || compiled[c].blockquote)) { compiled[pr][Translator.element[compiled[pr].type].subtext] = compiled[c].content - /* - if (compiled[pr][Translator.element[compiled[pr].type].subtext] == null) - compiled[pr][Translator.element[compiled[pr].type].subtext] = - compiled[c].content; - else - compiled[pr][Translator.element[compiled[pr].type].subtext] += "\n" + - compiled[c].content; - */ merge = true } if (merge) { @@ -743,19 +701,71 @@ class Translator { compiled[pr].mergeLine = Translator.element[compiled[c].type] && Translator.isLine.includes(compiled[c].type) - /* - compiled[pr].mergeLine = - (Translator.element[compiled[c].type] && - Translator.element[compiled[c].type].line !== undefined) - ? Translator.element[compiled[c].type].line : false; - */ const shift = c - pr compiled.splice(c - shift + 1, shift) c -= shift } } - // previous blockquotes for inputs - else if (compiled[c].type == 'input' && compiled[pr].blockquote) { + // manages elements subordinated to the knot + else if ((c == 0 || (c == 1 && compiled[c - 1].type == 'linefeed')) && + compiled[c].subordinate && compiled[c].type == 'image') { + // console.log('=== image back') + unity.background = { + alternative: compiled[c].alternative, + path: compiled[c].path + } + if (compiled[c].title) { unity.background.title = compiled[c].title } + compiled[c].render = false + } + if (c >= 0) { compiled[c].seq = c + 1 } + } + + // eighth cycle - aggregates options + let optionGroup = null + let subtype = null + for (let c = 1; c < compiled.length; c++) { + const pr = (c > 1 && compiled[c - 1].type == 'linefeed') ? c - 2 : c - 1 + if (compiled[c].type == 'option') { + console.log('=== previous') + console.log(compiled[pr]) + let stype = compiled[c].subtype + if (compiled[pr].type == 'input' && compiled[pr].subtype && + compiled[pr].subtype == 'choice' && compiled[pr].options == null) { + subtype = stype + optionGroup = compiled[pr] + optionGroup.options = {} + } else if (compiled[pr].type == 'option' && + compiled[c].subtype == subtype) { + optionGroup = this._initializeObject( + { + type: 'input', + subtype: 'choice', + exclusive: true, + shuffle: (subtype == '+'), + options: {} + }, compiled[pr]._source) + this._transferOption(optionGroup.options, compiled[pr]) + compiled[pr] = optionGroup + } + if (optionGroup != null && compiled[c].subtype == subtype) { + this._transferOption(optionGroup.options, compiled[c]) + optionGroup._source += '\n' + compiled[c]._source + const shift = c - pr + compiled.splice(c - shift + 1, shift) + c -= shift + } else + optionGroup = null + subtype = stype + } else if (compiled[c].type != 'linefeed' || + compiled[c].content.length > 1) + optionGroup = null + compiled[c].seq = c + 1 + } + + // ninth cycle - previous blockquotes for inputs + for (let c = 0; c < compiled.length; c++) { + const pr = (c > 1 && compiled[c - 1].type == 'linefeed') ? c - 2 : c - 1 + if (compiled[c].type == 'input' && compiled[pr].blockquote) { let content = compiled[pr].content let source = compiled[pr]._source @@ -773,21 +783,10 @@ class Translator { compiled.splice(pr, shift) c -= shift } - // manages elements subordinated to the knot - else if ((c == 0 || (c == 1 && compiled[c - 1].type == 'linefeed')) && - compiled[c].subordinate && compiled[c].type == 'image') { - // console.log('=== image back') - unity.background = { - alternative: compiled[c].alternative, - path: compiled[c].path - } - if (compiled[c].title) { unity.background.title = compiled[c].title } - compiled[c].render = false - } if (c >= 0) { compiled[c].seq = c + 1 } } - // ninth cycle - joins script sentences + // tenth cycle - joins script sentences // quite similar to text-block (join?) let script let scriptSeq @@ -828,7 +827,7 @@ class Translator { this._compileMergeLinefeeds(compiled) - // tenth cycle - process and hide formal comments + // eleventh cycle - process and hide formal comments let inFormal = false let lastContext = null let lastId = null