From 2b2ff6a70d6d6a3e2a743957263e7bb003fe2f9a Mon Sep 17 00:00:00 2001 From: Heitor Mattosinho Date: Wed, 2 Sep 2020 18:36:55 -0300 Subject: [PATCH 1/5] feat (player quest): automated GET quest --- .../app/Controllers/Http/QuestController.js | 48 ++++++++++- .../{public => old_html}/player/index.html | 0 src/adonisjs/resources/views/author/home.edge | 80 ++++++++++--------- .../views/layout/partials/header.edge | 4 +- .../resources/views/player/player-cases.edge | 4 +- .../resources/views/player/welcome.edge | 13 +-- src/adonisjs/start/routes.js | 5 +- 7 files changed, 100 insertions(+), 54 deletions(-) rename src/adonisjs/{public => old_html}/player/index.html (100%) diff --git a/src/adonisjs/app/Controllers/Http/QuestController.js b/src/adonisjs/app/Controllers/Http/QuestController.js index 1e9b1d758..b4442b7c6 100644 --- a/src/adonisjs/app/Controllers/Http/QuestController.js +++ b/src/adonisjs/app/Controllers/Http/QuestController.js @@ -10,8 +10,10 @@ class QuestController { async getCasesByQuest({ request, response }) { try{ const params = request.all() + console.log('------------------------COR DA QUEST'); + console.log(params.color); var responseData = []; - let endpoint_url = Env.get("HARENA_MANAGER_URL") + "/api/v1/quest/cases" + let endpoint_url = Env.get("HARENA_MANAGER_URL") + "/api/v1/author/quest/cases" var config = { method: 'get', @@ -48,7 +50,49 @@ class QuestController { console.log(e) } - return view.render('player.player-cases', { cases: responseData[0], }); + return view.render('player.player-cases', { cases: responseData[0], color: request.input('color') }); + + } + async getQuests({ request, response }) { + try{ + var responseData = []; + let endpoint_url = Env.get("HARENA_MANAGER_URL") + "/api/v1/author/quests" + + var config = { + method: 'get', + url: endpoint_url, + headers: { + 'Authorization': 'Bearer ' + request.cookie('token') + } + }; + + + await axios(config) + .then(function (endpoint_response) { + console.log('============ Retrieving quests'); + console.log(endpoint_response.data); + const busResponse = [] + for (const c in endpoint_response.data) { + busResponse.push({ + id: endpoint_response.data[c].id, + title: endpoint_response.data[c].title, + color: endpoint_response.data[c].color, + url: endpoint_response.data[c].url, + + }) + + } + responseData[0] = busResponse; + }) + + .catch(function (error) { + console.log(error); + }); + } catch(e){ + console.log(e) + } + + return view.render('player.welcome', { quests: responseData[0] }); } } diff --git a/src/adonisjs/public/player/index.html b/src/adonisjs/old_html/player/index.html similarity index 100% rename from src/adonisjs/public/player/index.html rename to src/adonisjs/old_html/player/index.html diff --git a/src/adonisjs/resources/views/author/home.edge b/src/adonisjs/resources/views/author/home.edge index 00acbf705..1d4989d34 100644 --- a/src/adonisjs/resources/views/author/home.edge +++ b/src/adonisjs/resources/views/author/home.edge @@ -2,43 +2,45 @@ @section('content') - -
-
- -
-
-

Hello!

-
-
-

What would like to do today?

-
- -
-
-
- - + @include('layout.partials.header') + + +
+
+ +
+
+

Hello!

+
+
+

What would like to do today?

+
+ +
+
+
+ + -@endsection \ No newline at end of file +@endsection diff --git a/src/adonisjs/resources/views/layout/partials/header.edge b/src/adonisjs/resources/views/layout/partials/header.edge index fc844419e..f1543c36d 100644 --- a/src/adonisjs/resources/views/layout/partials/header.edge +++ b/src/adonisjs/resources/views/layout/partials/header.edge @@ -24,13 +24,13 @@ Hello {{ auth.user.username }} - + Logout @else - + Log in diff --git a/src/adonisjs/resources/views/player/player-cases.edge b/src/adonisjs/resources/views/player/player-cases.edge index 38fa3e869..9f0866660 100644 --- a/src/adonisjs/resources/views/player/player-cases.edge +++ b/src/adonisjs/resources/views/player/player-cases.edge @@ -16,9 +16,9 @@ -
+
-

Choose a case from Visita Virtual.

+

Choose a case.

diff --git a/src/adonisjs/resources/views/player/welcome.edge b/src/adonisjs/resources/views/player/welcome.edge index 3106e45aa..b142e6503 100755 --- a/src/adonisjs/resources/views/player/welcome.edge +++ b/src/adonisjs/resources/views/player/welcome.edge @@ -18,15 +18,18 @@
+ @each(q in quests) + -
+ @endeach +
diff --git a/src/adonisjs/start/routes.js b/src/adonisjs/start/routes.js index b8820cfe3..3fe7f3be8 100644 --- a/src/adonisjs/start/routes.js +++ b/src/adonisjs/start/routes.js @@ -68,10 +68,7 @@ let harenaManagerUrl = Env.get("HARENA_MANAGER_URL", "http://localhost:3000/api/v1/"); */ -Route.get('player/welcome', ({ view }) => { - const pageTitle = 'Welcome player' - return view.render('player.welcome', {pageTitle}) -}).as('player_home') +Route.get('player', 'QuestController.getQuests').as('player_home') Route.get('player/quest', 'QuestController.getCasesByQuest').as('player_quest') Route.get('player/case', ({ view,request }) => { From 0b3612080ac144e59986c5c55fe59fe67fabfbcc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Santanch=C3=A8?= Date: Wed, 2 Sep 2020 18:55:27 -0300 Subject: [PATCH 2/5] fix (translator): target message adjusted --- src/adonisjs/public/themes/simple/css/theme.css | 4 ++-- src/adonisjs/public/translator/translator.js | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/adonisjs/public/themes/simple/css/theme.css b/src/adonisjs/public/themes/simple/css/theme.css index 00724b5e9..1f696fe39 100644 --- a/src/adonisjs/public/themes/simple/css/theme.css +++ b/src/adonisjs/public/themes/simple/css/theme.css @@ -57,8 +57,8 @@ position: absolute; bottom: 0px; width: 100%; - display: flex; - flex-direction: row; + /* display: flex; */ + /* flex-direction: row; */ } .styt-button, .styt-button-option { diff --git a/src/adonisjs/public/translator/translator.js b/src/adonisjs/public/translator/translator.js index 31e436ae6..5976234a5 100644 --- a/src/adonisjs/public/translator/translator.js +++ b/src/adonisjs/public/translator/translator.js @@ -1565,7 +1565,9 @@ 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 = 'variable/' + target.substring(9) + '/navigate' } + else { message = 'knot/' + target + '/navigate' } return message } @@ -1876,7 +1878,7 @@ class Translator { .replace('[value]', obj.options[op]) } else { choice = choice.replace('[target]', - "target='" + obj.options[op].contextTarget + "' ") + "target='" + this._transformNavigationMessage(obj.options[op].contextTarget) + "' ") .replace('[value]', obj.options[op].message) } statement += choice From b99bc0b319e83ef0ede4afc4bb671acbfa7b129a Mon Sep 17 00:00:00 2001 From: Fagner Date: Wed, 2 Sep 2020 22:33:16 -0300 Subject: [PATCH 3/5] feature(add version to footnote.edge) --- src/adonisjs/resources/views/index.edge | 3 +++ src/adonisjs/resources/views/layout/partials/footnote.edge | 3 +++ 2 files changed, 6 insertions(+) create mode 100644 src/adonisjs/resources/views/layout/partials/footnote.edge diff --git a/src/adonisjs/resources/views/index.edge b/src/adonisjs/resources/views/index.edge index e3f4e244b..217fb30cd 100644 --- a/src/adonisjs/resources/views/index.edge +++ b/src/adonisjs/resources/views/index.edge @@ -46,5 +46,8 @@ + + @include('layout.partials.footnote') + diff --git a/src/adonisjs/resources/views/layout/partials/footnote.edge b/src/adonisjs/resources/views/layout/partials/footnote.edge new file mode 100644 index 000000000..c582835b5 --- /dev/null +++ b/src/adonisjs/resources/views/layout/partials/footnote.edge @@ -0,0 +1,3 @@ +
+ Version Harena - v1.2.0 +
From c039395acdccc8d5c6ff22392b775ac3c6ff7a4e Mon Sep 17 00:00:00 2001 From: Heitor Mattosinho Date: Wed, 2 Sep 2020 22:33:20 -0300 Subject: [PATCH 4/5] refactor (index edge): change images initial page --- .../app/Controllers/Http/QuestController.js | 4 ++-- .../author/js/dcc-author-server-proxy.js | 2 +- src/adonisjs/public/start/css/main.css | 4 ++-- .../public/start/img/background_home.jpeg | Bin 0 -> 29921 bytes src/adonisjs/public/start/img/home_icon.png | Bin 0 -> 12464 bytes src/adonisjs/resources/views/index.edge | 21 +++++++----------- .../views/layout/partials/header.edge | 1 - 7 files changed, 13 insertions(+), 19 deletions(-) create mode 100644 src/adonisjs/public/start/img/background_home.jpeg create mode 100644 src/adonisjs/public/start/img/home_icon.png diff --git a/src/adonisjs/app/Controllers/Http/QuestController.js b/src/adonisjs/app/Controllers/Http/QuestController.js index b4442b7c6..f737c19f1 100644 --- a/src/adonisjs/app/Controllers/Http/QuestController.js +++ b/src/adonisjs/app/Controllers/Http/QuestController.js @@ -91,8 +91,8 @@ class QuestController { } catch(e){ console.log(e) } - - return view.render('player.welcome', { quests: responseData[0] }); + const pageTitle = 'Welcome Player'; + return view.render('player.welcome', { quests: responseData[0], pageTitle}); } } diff --git a/src/adonisjs/public/author/js/dcc-author-server-proxy.js b/src/adonisjs/public/author/js/dcc-author-server-proxy.js index 208733384..10b6010e9 100644 --- a/src/adonisjs/public/author/js/dcc-author-server-proxy.js +++ b/src/adonisjs/public/author/js/dcc-author-server-proxy.js @@ -289,7 +289,7 @@ class DCCAuthorServer { async uploadArtifact (topic, message) { const data = new FormData() if (message.file) { data.append('file', message.file) } else if (message.b64) { data.append('image', this.b64toBlob(message.b64)) } - data.append('case_id', message.caseid) + data.append('caseId', message.caseid) const header = { async: true, crossDomain: true, diff --git a/src/adonisjs/public/start/css/main.css b/src/adonisjs/public/start/css/main.css index d49549d5d..19e6f0ca1 100644 --- a/src/adonisjs/public/start/css/main.css +++ b/src/adonisjs/public/start/css/main.css @@ -37,12 +37,12 @@ div { .home-p-text{ font-family: 'Lato',serif; color: rgb(130,130,130); - font-size: 20pt; + font-size: 27px; } .home-header-text{ font-family: 'Lato',serif; font-weight: 700; - font-size: 40pt; + font-size: 60px; font-style: bold; color: rgb(52,110,147); } diff --git a/src/adonisjs/public/start/img/background_home.jpeg b/src/adonisjs/public/start/img/background_home.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..a7d94e005aa510c50e3f14834a69ed5d337f9baf GIT binary patch literal 29921 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 literal 0 HcmV?d00001 diff --git a/src/adonisjs/resources/views/index.edge b/src/adonisjs/resources/views/index.edge index e3f4e244b..2b2535ca4 100644 --- a/src/adonisjs/resources/views/index.edge +++ b/src/adonisjs/resources/views/index.edge @@ -13,16 +13,6 @@ Phil Muchbetter Game - @@ -30,15 +20,20 @@ @include('layout.partials.header')
-
- -
+
+ +

Phil Muchbetter: a clinical reasoning game

Join us in this adventure of becoming a doctor

Let's Play
+
+
+ +
+
diff --git a/src/adonisjs/resources/views/layout/partials/header.edge b/src/adonisjs/resources/views/layout/partials/header.edge index f1543c36d..0e167180a 100644 --- a/src/adonisjs/resources/views/layout/partials/header.edge +++ b/src/adonisjs/resources/views/layout/partials/header.edge @@ -3,7 +3,6 @@ {{-- Logo / Main Link --}} {{-- Navigation Actions --}}
-Hello {{ auth.user.username }} From 2e4dc049171cade69d94df0b7adf5f53308dbf8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Santanch=C3=A8?= Date: Wed, 2 Sep 2020 22:38:12 -0300 Subject: [PATCH 5/5] fix (option & divert): link adjusts --- .../author/js/dcc-author-server-proxy.js | 5 +- .../dccs/components/dcc-input-choice.js | 30 +++++---- .../public/dccs/components/dcc-trigger.js | 41 +++++++++--- .../templates/simple/case/quiz_sequence.md | 66 ++++++++----------- .../templates/simple/case/quiz_short.md | 14 +++- src/adonisjs/public/themes/simple/note.html | 2 +- .../public/translator/item-templates.js | 2 +- src/adonisjs/public/translator/translator.js | 6 +- 8 files changed, 97 insertions(+), 69 deletions(-) diff --git a/src/adonisjs/public/author/js/dcc-author-server-proxy.js b/src/adonisjs/public/author/js/dcc-author-server-proxy.js index 208733384..051273847 100644 --- a/src/adonisjs/public/author/js/dcc-author-server-proxy.js +++ b/src/adonisjs/public/author/js/dcc-author-server-proxy.js @@ -289,7 +289,7 @@ class DCCAuthorServer { async uploadArtifact (topic, message) { const data = new FormData() if (message.file) { data.append('file', message.file) } else if (message.b64) { data.append('image', this.b64toBlob(message.b64)) } - data.append('case_id', message.caseid) + data.append('caseId', message.caseid) const header = { async: true, crossDomain: true, @@ -309,9 +309,10 @@ class DCCAuthorServer { // console.log(header); const response = await fetch(DCCCommonServer.managerAddressAPI + 'artifact', header) - console.log('=== response') + console.log('=== response image upload') console.log(response) const jsonResponse = await response.json() + console.log(jsonResponse) MessageBus.ext.publish(MessageBus.buildResponseTopic(topic, message), jsonResponse.filename) } diff --git a/src/adonisjs/public/dccs/components/dcc-input-choice.js b/src/adonisjs/public/dccs/components/dcc-input-choice.js index a6891ce1f..b83f5285b 100644 --- a/src/adonisjs/public/dccs/components/dcc-input-choice.js +++ b/src/adonisjs/public/dccs/components/dcc-input-choice.js @@ -25,12 +25,12 @@ class DCCInputOption extends DCCInput { if (!this.hasAttribute('value')) { this.value = this._statement.trim() } // align with dcc-state-select - if (this._parent == null && this.hasAttribute('variable')) { + if (this._parent == null && this.hasAttribute('variable')) { MessageBus.int.publish('var/' + this.variable + '/input/ready', - { + { sourceType: DCCInputOption.elementTag, - content: this.value - }) + content: this.value + }) } } @@ -92,9 +92,9 @@ class DCCInputOption extends DCCInput { inputChanged () { this.changed = true MessageBus.ext.publish('var/' + this.variable + '/changed', - { + { sourceType: DCCInputOption.elementTag, - value: this.value + value: this.value }) } @@ -118,11 +118,12 @@ class DCCInputOption extends DCCInput { ? '' : this._statement const html = (this.target) - ? "" + ? "" .replace('[id]', varid + nop) .replace('[target]', this.target) .replace('[statement]', child._statement) .replace('[value]', child.value) + .replace('[variable]', this.variable) : "[statement]" .replace('[exclusive]', (this.hasAttribute('exclusive') ? 'radio' : 'checkbox')) .replace('[variable]', this.variable) @@ -160,8 +161,8 @@ class DCCInputChoice extends DCCInput { } disconnectedCallback () { - if (this._options != null) { - for (const o of this._options) { o.removeEventListener('change', this.inputChanged) } + if (this._options != null) { + for (const o of this._options) { o.removeEventListener('change', this.inputChanged) } } } @@ -195,9 +196,9 @@ class DCCInputChoice extends DCCInput { inputChanged (event) { this.changed = true MessageBus.ext.publish('var/' + this.variable + '/changed', - { + { sourceType: DCCInputChoice.elementTag, - value: event.target.value + value: event.target.value }) } @@ -248,11 +249,12 @@ class DCCInputChoice extends DCCInput { child.tagName.toLowerCase() == DCCInputOption.elementTag) { nop++ const element = (this.target || child.target) - ? "" + ? "" .replace('[id]', varid + '_' + nop) .replace('[target]', (child.target) ? child.target : this.target) .replace('[statement]', child._statement) .replace('[value]', child.value) + .replace('[variable]', this.variable) : "[statement]" .replace('[id]', varid + '_' + nop) .replace('[exclusive]', @@ -284,9 +286,9 @@ class DCCInputChoice extends DCCInput { if (this.hasAttribute("xstyle") && this.xstyle.startsWith("out") && this._statement != null) { */ - if (this._statement != null) { + if (this._statement != null) { await this._applyRender( - '

' + this._statement + '

', 'innerHTML', 'text') + '

' + this._statement + '

', 'innerHTML', 'text') } // presentation = await this._applyRender(html, "innerHTML", "input"); diff --git a/src/adonisjs/public/dccs/components/dcc-trigger.js b/src/adonisjs/public/dccs/components/dcc-trigger.js index 58ef2d867..66ea0bd34 100644 --- a/src/adonisjs/public/dccs/components/dcc-trigger.js +++ b/src/adonisjs/public/dccs/components/dcc-trigger.js @@ -31,7 +31,7 @@ class DCCTrigger extends DCCBlock { static get observedAttributes () { return DCCBlock.observedAttributes.concat( - ['type', 'link', 'action', 'value']) + ['type', 'link', 'action', 'value', 'variable']) } get type () { @@ -66,6 +66,14 @@ class DCCTrigger extends DCCBlock { this.setAttribute('value', newValue) } + get variable () { + return this.getAttribute('variable') + } + + set variable (newValue) { + this.setAttribute('variable', newValue) + } + /* Rendering */ async _renderInterface () { @@ -124,15 +132,28 @@ class DCCTrigger extends DCCBlock { } _computeTrigger () { - if (this._active && - (this.hasAttribute('label') || this.hasAttribute('action'))) { - if (this.hasAttribute('action') && this.action.endsWith('/navigate')) { this._active = false } - const topic = (this.hasAttribute('action')) - ? this.action : 'trigger/' + this.label + '/clicked' - const message = {} - if (this.hasAttribute('value')) { message.value = this.value } - - MessageBus.ext.publish(topic, message) + if (this._active) { + if (this.hasAttribute('variable')) { + const v = (this.variable.includes(':')) + ? this.variable.substring(0, this.variable.indexOf(':')) : this.variable + console.log('=== trigger variable') + console.log('var/' + v + '/changed') + console.log((this.variable.endsWith(':label')) ? this.label : this.value) + MessageBus.ext.publish('var/' + v + '/changed', + { + sourceType: DCCTrigger.elementTag, + value: (this.variable.endsWith(':label')) ? this.label : this.value + }) + } + if (this.hasAttribute('label') || this.hasAttribute('action')) { + if (this.hasAttribute('action') && this.action.endsWith('/navigate')) { this._active = false } + const topic = (this.hasAttribute('action')) + ? this.action : 'trigger/' + this.label + '/clicked' + const message = {} + if (this.hasAttribute('value')) { message.value = this.value } + + MessageBus.ext.publish(topic, message) + } } } diff --git a/src/adonisjs/public/templates/simple/case/quiz_sequence.md b/src/adonisjs/public/templates/simple/case/quiz_sequence.md index 94d8b7934..e66975e25 100644 --- a/src/adonisjs/public/templates/simple/case/quiz_sequence.md +++ b/src/adonisjs/public/templates/simple/case/quiz_sequence.md @@ -1,54 +1,44 @@ # Quiz1 (quiz) -Write here the **stem** of your quiz. - -> Write here the lead-in of your quiz. -> -? hypothesis - * type: choice - * exclusive - * trigger - * scramble - * target: Feedback - * options: - * Answer-key: Feedback for Answer-key - * Distractor 1: Feedback for Distractor 1 - * Distractor 2: Feedback for Distractor 2 - * Distractor 3: Feedback for Distractor 3 - -* Next Quiz -> Knot.Next -* Menu -> Presentation +Write here the **stem** of your question. + +> Write here the **lead-in** of your question. ++ Answer-key <-> "Feedback for Answer-key" ++ Distractor 1 <-> "Feedback for Distractor 1" ++ Distractor 2 <-> "Feedback for Distractor 2" ++ Distractor 3 <-> "Feedback for Distractor 3" + +* Next Question -> Knot.Next # Quiz2 (quiz) -Write here the **stem** of your quiz. +Write here the **stem** of your question. -> Write here the lead-in of your quiz. -> -? hypothesis - * type: choice - * exclusive - * trigger - * scramble - * target: Feedback - * options: - * Answer-key: Feedback for Answer-key - * Distractor 1: Feedback for Distractor 1 - * Distractor 2: Feedback for Distractor 2 - * Distractor 3: Feedback for Distractor 3 +> Write here the **lead-in** of your question. ++ Answer-key <-> "Feedback for Answer-key" ++ Distractor 1 <-> "Feedback for Distractor 1" ++ Distractor 2 <-> "Feedback for Distractor 2" ++ Distractor 3 <-> "Feedback for Distractor 3" -* Next Case -> Case.Next -* Menu -> Presentation +* Next Question -> Knot.Next -# Feedback (note) +# Note (note) -You answered: ^Block.Presentation.hypothesis^. +**You answered:** ^Presentation.input1^. +
+^parameter^ +# Presentation References (note) + +**You answered:** ^Presentation.input1^. +
^parameter^ -* Return -> Presentation +References <-> References + +# References (note) -* Próximo caso -> Case.Next +* [Enter References](References) ___ Flow ___ diff --git a/src/adonisjs/public/templates/simple/case/quiz_short.md b/src/adonisjs/public/templates/simple/case/quiz_short.md index 6706ed1be..411c8e56e 100644 --- a/src/adonisjs/public/templates/simple/case/quiz_short.md +++ b/src/adonisjs/public/templates/simple/case/quiz_short.md @@ -12,10 +12,22 @@ Write here the **stem** of your quiz. # Presentation Note (note) -You answered: ^Presentation.input^. +**You answered:** ^Presentation.input1^. +
+^parameter^ + +# Presentation References (note) +**You answered:** ^Presentation.input1^. +
^parameter^ +References <-> References + +# References (note) + +* [Enter References](References) + ___ Flow ___ * Sequential: diff --git a/src/adonisjs/public/themes/simple/note.html b/src/adonisjs/public/themes/simple/note.html index 58b70939e..e91988e6d 100644 --- a/src/adonisjs/public/themes/simple/note.html +++ b/src/adonisjs/public/themes/simple/note.html @@ -1,7 +1,7 @@
- + {knot}
diff --git a/src/adonisjs/public/translator/item-templates.js b/src/adonisjs/public/translator/item-templates.js index 89493835b..daa2d11c1 100644 --- a/src/adonisjs/public/translator/item-templates.js +++ b/src/adonisjs/public/translator/item-templates.js @@ -31,7 +31,7 @@ option: '', divert: -'', +'', 'divert-script': '-> [target][parameter]
', entity: diff --git a/src/adonisjs/public/translator/translator.js b/src/adonisjs/public/translator/translator.js index 5976234a5..0ea2089b7 100644 --- a/src/adonisjs/public/translator/translator.js +++ b/src/adonisjs/public/translator/translator.js @@ -1674,10 +1674,11 @@ class Translator { */ _divertMdToObj (matchArray) { const label = (matchArray[1]) ? matchArray[1].trim() : matchArray[2].trim() - const target = (matchArray[3]) ? matchArray[3].trim() : matchArray[4].trim() + const target = (matchArray[4]) ? matchArray[4].trim() : matchArray[5].trim() return { type: 'divert', label: label, + divert: matchArray[3].trim(), target: target } } @@ -1689,6 +1690,7 @@ class Translator { return Translator.htmlTemplates.divert .replace('[seq]', obj.seq) .replace('[author]', this.authorAttr) + .replace('[divert]', this.divert) .replace('[target]', this._transformNavigationMessage(obj.contextTarget)) .replace('[display]', obj.label) @@ -2161,7 +2163,7 @@ class Translator { mark: /^[ \t]*(?:\(([\w\.]+)[ \t]*(==|>|<|>=|<=|>|<|>=|<=)[ \t]*((?:"[^"\n\r\f]+")|(?:\-?\d+(?:\.\d+)?)|(?:[\w\.]+))\)[ \t]*)?-(?:(?:>)|>)[ \t]*([^"\n\r\f]+)(?:"([^"\n\r\f]+)")?[ \t]*$/im }, divert: { - mark: /(?:(\w+)|"([^"]+)")(?:[ \t])*-(?:(?:>)|>)[ \t]*(?:(\w[\w.]*)|"([^"]*)")/im, + mark: /(?:(\w+)|"([^"]+)")(?:[ \t])*((?:(?:(?:<)|<)?-(?:(?:>)|>))|(?:\(-\)))[ \t]*(?:(\w[\w.]*)|"([^"]*)")/im, inline: true }, entity: {