diff --git a/language/.en.json b/language/.en.json index afa0de4..92f2fcf 100644 --- a/language/.en.json +++ b/language/.en.json @@ -103,6 +103,9 @@ }, { "label": "Extra time" + }, + { + "label": "Link to external content" } ] }, @@ -114,6 +117,21 @@ "label": "Number of seconds of extra time", "description": "Set how many seconds the user will gain for the global time limit when entering this stage." }, + { + "label": "URL to link to", + "description": "Set where the user should be sent to when opening this stage." + }, + { + "label": "Place to open link in", + "options": [ + { + "label": "New tab" + }, + { + "label": "Same tab" + } + ] + }, { "label": "Always visible", "description": "If checked, this stage will always be visible, even if the map's visibility range settings dictate otherwise." diff --git a/language/de.json b/language/de.json index 4453d97..e911dcb 100644 --- a/language/de.json +++ b/language/de.json @@ -103,6 +103,9 @@ }, { "label": "Extrazeit" + }, + { + "label": "Link zu externem Inhalt" } ] }, @@ -114,6 +117,21 @@ "label": "Anzahl der Extrazeit in Sekunden", "description": "Lege fest, wie viele Sekunden die Nutzenden für ihre Gesamtzeit erhalten, wenn sie diese Etappe öffnen." }, + { + "label": "URL für externen Inhalt", + "description": "Lege fest, wohin die Nutzenden geschickt werden, wenn sie auf den Link klicken." + }, + { + "label": "Ort, in dem der Link geöffnet wird", + "options": [ + { + "label": "Neuer Tab" + }, + { + "label": "Gleicher Tab" + } + ] + }, { "label": "Immer sichtbar", "description": "Wenn gewählt, wird diese Etappe immer sichtbar sein. Dies gilt auch dann, wenn die Einstellungen zur Sichtreichweite der Karte anderes vorgeben." diff --git a/language/el.json b/language/el.json index 6405f86..4ce7987 100644 --- a/language/el.json +++ b/language/el.json @@ -103,6 +103,9 @@ }, { "label": "Επιπλέον χρόνος" + }, + { + "label": "Link to external content" } ] }, @@ -114,6 +117,21 @@ "label": "Αριθμός δευτερολέπτων παράτασης", "description": "Ορίστε πόσα δευτερόλεπτα θα κερδίζει ο χρήστης για το συνολικό χρονικό όριο κατά την είσοδο σε αυτό το επείπεδο." }, + { + "label": "URL to link to", + "description": "Set where the user should be sent to when opening this stage." + }, + { + "label": "Place to open link in", + "options": [ + { + "label": "New tab" + }, + { + "label": "Same tab" + } + ] + }, { "label": "Always visible", "description": "If checked, this stage will always be visible, even if the map's visibility range settings dictate otherswise." diff --git a/language/es-mx.json b/language/es-mx.json index 8620621..9e4dc0b 100644 --- a/language/es-mx.json +++ b/language/es-mx.json @@ -103,6 +103,9 @@ }, { "label": "Tiempo extra" + }, + { + "label": "Link to external content" } ] }, @@ -114,6 +117,21 @@ "label": "Número de segundos de tiempo extra", "description": "Configurar cuantos segundos ganará el usuario para el límite global de tiempo al entrar en esta etapa." }, + { + "label": "URL to link to", + "description": "Set where the user should be sent to when opening this stage." + }, + { + "label": "Place to open link in", + "options": [ + { + "label": "New tab" + }, + { + "label": "Same tab" + } + ] + }, { "label": "Always visible", "description": "If checked, this stage will always be visible, even if the map's visibility range settings dictate otherswise." diff --git a/language/es.json b/language/es.json index 69d7859..3e6194a 100644 --- a/language/es.json +++ b/language/es.json @@ -103,6 +103,9 @@ }, { "label": "Tiempo extra" + }, + { + "label": "Link to external content" } ] }, @@ -114,6 +117,21 @@ "label": "Número de segundos de tiempo extra", "description": "Configurar cuantos segundos ganará el usuario para el límite global de tiempo al entrar en esta etapa." }, + { + "label": "URL to link to", + "description": "Set where the user should be sent to when opening this stage." + }, + { + "label": "Place to open link in", + "options": [ + { + "label": "New tab" + }, + { + "label": "Same tab" + } + ] + }, { "label": "Always visible", "description": "If checked, this stage will always be visible, even if the map's visibility range settings dictate otherswise." diff --git a/language/eu.json b/language/eu.json index 3563be9..fac410d 100644 --- a/language/eu.json +++ b/language/eu.json @@ -103,6 +103,9 @@ }, { "label": "Denbora gehigarria" + }, + { + "label": "Link to external content" } ] }, @@ -114,6 +117,21 @@ "label": "Denbora gehigarriaren segundo kopurua", "description": "Ezarri erabiltzaileak zenbat segundo irabaziko dituen denbora-muga globalerako etapa honetan sartzean." }, + { + "label": "URL to link to", + "description": "Set where the user should be sent to when opening this stage." + }, + { + "label": "Place to open link in", + "options": [ + { + "label": "New tab" + }, + { + "label": "Same tab" + } + ] + }, { "label": "Always visible", "description": "If checked, this stage will always be visible, even if the map's visibility range settings dictate otherswise." diff --git a/language/fr.json b/language/fr.json index 6c02df7..e6500cd 100644 --- a/language/fr.json +++ b/language/fr.json @@ -103,6 +103,9 @@ }, { "label": "Temps supplémentaire" + }, + { + "label": "Link to external content" } ] }, @@ -114,6 +117,21 @@ "label": "Nombre de secondes pour le temps supplémentaire", "description": "Définissez le nombre de secondes que l'utilisateur gagnera en entrant dans cette étape." }, + { + "label": "URL to link to", + "description": "Set where the user should be sent to when opening this stage." + }, + { + "label": "Place to open link in", + "options": [ + { + "label": "New tab" + }, + { + "label": "Same tab" + } + ] + }, { "label": "Toujours visible", "description": "Si cette case est cochée, cette étape sera toujours visible, même si les paramètres de plage de visibilité de la carte en imposent autrement." diff --git a/language/gl.json b/language/gl.json index aa4b011..c0e326f 100644 --- a/language/gl.json +++ b/language/gl.json @@ -103,6 +103,9 @@ }, { "label": "Tempo extra" + }, + { + "label": "Link to external content" } ] }, @@ -114,6 +117,21 @@ "label": "Número de segundos de tempo extra", "description": "Establece cantos segundos gañará o usuario para o límite de tempo global ao entrar nesta etapa." }, + { + "label": "URL to link to", + "description": "Set where the user should be sent to when opening this stage." + }, + { + "label": "Place to open link in", + "options": [ + { + "label": "New tab" + }, + { + "label": "Same tab" + } + ] + }, { "label": "Always visible", "description": "If checked, this stage will always be visible, even if the map's visibility range settings dictate otherswise." diff --git a/language/it.json b/language/it.json index fdd34d8..056bd37 100644 --- a/language/it.json +++ b/language/it.json @@ -103,6 +103,9 @@ }, { "label": "Extra time" + }, + { + "label": "Link to external content" } ] }, @@ -114,6 +117,21 @@ "label": "Number of seconds of extra time", "description": "Set how many seconds the user will gain for the global time limit when entering this stage." }, + { + "label": "URL to link to", + "description": "Set where the user should be sent to when opening this stage." + }, + { + "label": "Place to open link in", + "options": [ + { + "label": "New tab" + }, + { + "label": "Same tab" + } + ] + }, { "label": "Always visible", "description": "If checked, this stage will always be visible, even if the map's visibility range settings dictate otherswise." diff --git a/language/lt.json b/language/lt.json index c5c0037..3553eb0 100644 --- a/language/lt.json +++ b/language/lt.json @@ -103,6 +103,9 @@ }, { "label": "Extra time" + }, + { + "label": "Link to external content" } ] }, @@ -114,6 +117,21 @@ "label": "Number of seconds of extra time", "description": "Set how many seconds the user will gain for the global time limit when entering this stage." }, + { + "label": "URL to link to", + "description": "Set where the user should be sent to when opening this stage." + }, + { + "label": "Place to open link in", + "options": [ + { + "label": "New tab" + }, + { + "label": "Same tab" + } + ] + }, { "label": "Always visible", "description": "If checked, this stage will always be visible, even if the map's visibility range settings dictate otherswise." diff --git a/language/nl.json b/language/nl.json index 9e8a0da..96c6022 100644 --- a/language/nl.json +++ b/language/nl.json @@ -103,6 +103,9 @@ }, { "label": "Extra tijd" + }, + { + "label": "Link to external content" } ] }, @@ -114,6 +117,21 @@ "label": "Aantal seconden extra tijd", "description": "Stel in hoeveel seconden de gebruiker wint voor de globale tijdslimiet bij het betreden van deze fase" }, + { + "label": "URL to link to", + "description": "Set where the user should be sent to when opening this stage." + }, + { + "label": "Place to open link in", + "options": [ + { + "label": "New tab" + }, + { + "label": "Same tab" + } + ] + }, { "label": "Always visible", "description": "If checked, this stage will always be visible, even if the map's visibility range settings dictate otherswise." diff --git a/language/sl.json b/language/sl.json index d0a1da9..2f550a9 100644 --- a/language/sl.json +++ b/language/sl.json @@ -103,6 +103,9 @@ }, { "label": "Dodaten čas" + }, + { + "label": "Link to external content" } ] }, @@ -114,6 +117,21 @@ "label": "Število sekund dodatnega časa", "description": "Vnos sekund, ki jih udeleženec prejme za skupno časovno omejitev ob vstopu v stopnjo." }, + { + "label": "URL to link to", + "description": "Set where the user should be sent to when opening this stage." + }, + { + "label": "Place to open link in", + "options": [ + { + "label": "New tab" + }, + { + "label": "Same tab" + } + ] + }, { "label": "Vedno vidno", "description": "Nastavitev preglasi druge določitve glede vidnosti stopnje in jo vedno prikazuje." diff --git a/language/zh-cn.json b/language/zh-cn.json index b731c7f..308f138 100644 --- a/language/zh-cn.json +++ b/language/zh-cn.json @@ -103,6 +103,9 @@ }, { "label": "额外时间" + }, + { + "label": "Link to external content" } ] }, @@ -114,6 +117,21 @@ "label": "额外时间秒数", "description": "设置用户进入此关卡时全局时间限制将增加多少秒。" }, + { + "label": "URL to link to", + "description": "Set where the user should be sent to when opening this stage." + }, + { + "label": "Place to open link in", + "options": [ + { + "label": "New tab" + }, + { + "label": "Same tab" + } + ] + }, { "label": "Always visible", "description": "If checked, this stage will always be visible, even if the map's visibility range settings dictate otherswise." diff --git a/language/zh-hans.json b/language/zh-hans.json index 7ddabea..987b0fe 100644 --- a/language/zh-hans.json +++ b/language/zh-hans.json @@ -103,6 +103,9 @@ }, { "label": "额外时间" + }, + { + "label": "Link to external content" } ] }, @@ -114,6 +117,21 @@ "label": "额外时间秒数", "description": "设置用户进入此关卡时全局时间限制将增加多少秒。" }, + { + "label": "URL to link to", + "description": "Set where the user should be sent to when opening this stage." + }, + { + "label": "Place to open link in", + "options": [ + { + "label": "New tab" + }, + { + "label": "Same tab" + } + ] + }, { "label": "Always visible", "description": "If checked, this stage will always be visible, even if the map's visibility range settings dictate otherswise." diff --git a/language/zh.json b/language/zh.json index 7ddabea..987b0fe 100644 --- a/language/zh.json +++ b/language/zh.json @@ -103,6 +103,9 @@ }, { "label": "额外时间" + }, + { + "label": "Link to external content" } ] }, @@ -114,6 +117,21 @@ "label": "额外时间秒数", "description": "设置用户进入此关卡时全局时间限制将增加多少秒。" }, + { + "label": "URL to link to", + "description": "Set where the user should be sent to when opening this stage." + }, + { + "label": "Place to open link in", + "options": [ + { + "label": "New tab" + }, + { + "label": "Same tab" + } + ] + }, { "label": "Always visible", "description": "If checked, this stage will always be visible, even if the map's visibility range settings dictate otherswise." diff --git a/semantics.json b/semantics.json index 480f772..f96c10e 100644 --- a/semantics.json +++ b/semantics.json @@ -262,6 +262,10 @@ { "value": "extra-time", "label": "Extra time" + }, + { + "value": "link", + "label": "Link to external content" } ] }, @@ -281,6 +285,29 @@ "default": 1, "min": 1 }, + { + "name": "specialStageLinkURL", + "type": "text", + "label": "URL to link to", + "description": "Set where the user should be sent to when opening this stage.", + "optional": false + }, + { + "name": "specialStageLinkTarget", + "type": "select", + "label": "Place to open link in", + "options": [ + { + "value": "_blank", + "label": "New tab" + }, + { + "value": "_parent", + "label": "Same tab" + } + ], + "default": "_blank" + }, { "name": "alwaysVisible", "type": "boolean", diff --git a/src/scripts/components/map/stage/special-stage.js b/src/scripts/components/map/stage/special-stage.js index 671e4fa..9f653d8 100644 --- a/src/scripts/components/map/stage/special-stage.js +++ b/src/scripts/components/map/stage/special-stage.js @@ -48,5 +48,9 @@ export default class SpecialStage extends Stage { main.handleSpecialFeatureRun('extra-time'); this.disable(); } + else if (this.params.specialStageType === 'link') { + this.setState(this.params.globals.get('states').cleared); + window.open(this.params.specialStageLinkURL, this.params.specialStageLinkTarget); + } } } diff --git a/src/scripts/components/map/stage/special-stage.scss b/src/scripts/components/map/stage/special-stage.scss index f76c5a9..ec1f98a 100644 --- a/src/scripts/components/map/stage/special-stage.scss +++ b/src/scripts/components/map/stage/special-stage.scss @@ -1,36 +1,36 @@ .h5p-game-map-stage-content.h5p-game-map-stage-locked.override-symbol, .h5p-game-map-stage-content.h5p-game-map-stage-open, .h5p-game-map-stage-content.h5p-game-map-stage-cleared { - &.finish::before { - content: "\f11e"; + &::before { font-family: "H5PGameMap", "H5PFontAwesome4", sans-serif; font-size: max(0.75rem, var(--stage-font-size)); left: 50%; line-height: max(1rem, var(--stage-line-height)); - position: absolute; top: calc(50%); transform: translate(-50%, -50%); } + &.finish::before { + content: "\f11e"; + left: 50%; + top: calc(50%); + } + &.extra-life::before { content: "\f004"; - font-family: "H5PGameMap", "H5PFontAwesome4", sans-serif; - font-size: max(0.75rem, var(--stage-font-size)); left: 50%; - line-height: max(1rem, var(--stage-line-height)); - position: absolute; top: calc(50% + 0.125em); - transform: translate(-50%, -50%); } &.extra-time::before { content: "\f017"; - font-family: "H5PGameMap", "H5PFontAwesome4", sans-serif; - font-size: max(0.75rem, var(--stage-font-size)); left: 50%; - line-height: max(1rem, var(--stage-line-height)); - position: absolute; top: calc(50% + 0.05em); - transform: translate(-50%, -50%); + } + + &.link::before { + content: "\f0c1"; + left: 50%; + top: calc(50% + 0.05em); } } diff --git a/src/scripts/models/stages.js b/src/scripts/models/stages.js index ed68c76..41567a6 100644 --- a/src/scripts/models/stages.js +++ b/src/scripts/models/stages.js @@ -95,6 +95,14 @@ export default class Stages { elementParams.specialStageExtraTime && { specialStageExtraTime: elementParams.specialStageExtraTime } ), + ...( + elementParams.specialStageLinkURL && + { specialStageLinkURL: elementParams.specialStageLinkURL } + ), + ...( + elementParams.specialStageLinkTarget && + { specialStageLinkTarget: elementParams.specialStageLinkTarget } + ), label: elementParams.label, neighbors: neighbors, telemetry: elementParams.telemetry,