diff --git a/MaterialDeck.js b/MaterialDeck.js index ab34934..5a4c6b6 100644 --- a/MaterialDeck.js +++ b/MaterialDeck.js @@ -11,10 +11,10 @@ export var streamDeck; export var tokenControl; var move; export var macroControl; -var combatTracker; -var playlistControl; -var soundboard; -var otherControls; +export var combatTracker; +export var playlistControl; +export var soundboard; +export var otherControls; export const moduleName = "MaterialDeck"; export var selectedTokenId; @@ -45,7 +45,7 @@ async function analyzeWSmessage(msg,passthrough = false){ if (enableModule == false) return; const data = JSON.parse(msg); if (data == undefined || data.payload == undefined) return; - //console.log(data); + //console.log("Received",data); const action = data.action; const event = data.event; const context = data.context; @@ -62,9 +62,9 @@ async function analyzeWSmessage(msg,passthrough = false){ streamDeck.setContext(action,context,coordinates,settings); if (action == 'token'){ - if (selectedTokenId != undefined) - tokenControl.update(selectedTokenId); - } + tokenControl.active = true; + tokenControl.update(selectedTokenId); + } else if (action == 'macro') macroControl.update(settings,context); else if (action == 'combattracker') @@ -126,7 +126,7 @@ function startWebsocket() { ws.onopen = function() { WSconnected = true; - ui.notifications.info("Material Deck Connected: "+ip+':'+port); + ui.notifications.info("Material Deck "+game.i18n.localize("MaterialDeck.Notifications.Connected") +": "+ip+':'+port); wsOpen = true; let msg = { type: "Foundry" @@ -276,6 +276,7 @@ Hooks.on('renderHotbar', (hotbar)=>{ Hooks.on('renderCombatTracker',()=>{ if (enableModule == false || ready == false) return; combatTracker.updateAll(); + tokenControl.update(selectedTokenId); }); Hooks.on('renderPlaylistDirectory', (playlistDirectory)=>{ @@ -309,6 +310,11 @@ Hooks.on('renderSceneControls',()=>{ otherControls.updateAll(); }); +Hooks.on('targetToken',(user,token,targeted)=>{ + if (enableModule == false || ready == false) return; + if (token.id == selectedTokenId) tokenControl.update(selectedTokenId); +}); + Hooks.once('init', ()=>{ //CONFIG.debug.hooks = true; registerSettings(); //in ./src/settings.js diff --git a/changelog.md b/changelog.md index f37a53f..0b79a5e 100644 --- a/changelog.md +++ b/changelog.md @@ -1,4 +1,22 @@ # Changelog Material Deck Module +### v0.8.5 - 17-11-2020 + +Compatible server app and SD plugin:
+Server v0.2.4 (no change)
+SD plugin v0.7.2
+ ### v0.8.4 - 11-11-2020 Compatible server app and SD plugin:
-Server v0.2.4
+Server v0.2.4 (no change)
SD plugin v0.7.1
### v0.8.3 - 10-11-2020 diff --git a/lang/en.json b/lang/en.json index 2d545a4..113bb18 100644 --- a/lang/en.json +++ b/lang/en.json @@ -1,39 +1,40 @@ { "MaterialDeck.Notifications.Disconnected": "Disconnected from mdServer, attempting to reconnect", "MaterialDeck.Notifications.ConnectFail": "Can't connect to mdServer, retrying", - - "MaterialDeck.Sett.PlaylistConfig": "Playlist Configuration", - "MaterialDeck.Sett.SoundboardConfig": "Soundboard Configuration", - "MaterialDeck.Sett.MacroConfig": "Macro Configuration", - "MaterialDeck.Sett.Brightness": "Brightness", - "MaterialDeck.Sett.Brightness_Hint": "LED brightness level", - "MaterialDeck.Sett.Enable": "Enable module", + "MaterialDeck.Notifications.Connected": "Connected", - "MaterialDeck.Playlist.Clear": "Clear data", - "MaterialDeck.Playlist.Playmethod.Header": "Play Method", - "MaterialDeck.Playlist.Playmethod.Label": "Method", - "MaterialDeck.Playlist.Playmethod.Unrestricted": "Unrestricted", - "MaterialDeck.Playlist.Playmethod.OneTrackPlaylist": "One track per playlist", - "MaterialDeck.Playlist.Playmethod.OneTrackTotal": "One track in total", - "MaterialDeck.Playlist.Playlists": "Playlists", - "MaterialDeck.Playlist.Playlist": "Playlist", - "MaterialDeck.Playlist.None": "None", - "MaterialDeck.Playlist.Save": "Save", - "MaterialDeck.Soundboard.Volume": "Volume", + "MaterialDeck.Sett.Enable": "Enable module", + "MaterialDeck.Sett.Model": "Stream Deck Model", + "MaterialDeck.Sett.Model_Hint": "Reduces the amount of macros and sounds in the macro and soundboard configuration screens. Gives a better overview, but if desired it can be set to XL to get the maximum number. This doesn't influence the operation of the module.", + "MaterialDeck.Sett.Model_Mini": "Mini", + "MaterialDeck.Sett.Model_Normal": "Normal or Mobile", + "MaterialDeck.Sett.Model_XL": "XL", + "MaterialDeck.Sett.PlaylistConfig": "Playlist Configuration", + "MaterialDeck.Sett.MacroConfig": "Macro Configuration", + "MaterialDeck.Sett.SoundboardConfig": "Soundboard Configuration", - "MaterialDeck.Soundboard.Sound": "Sound", - "MaterialDeck.Soundboard.Icon": "Icon", - "MaterialDeck.Soundboard.Playback": "Playback", - "MaterialDeck.Soundboard.Once": "Once", - "MaterialDeck.Soundboard.Repeat": "Repeat", - "MaterialDeck.Soundboard.Hold": "Hold", - "MaterialDeck.Soundboard.On": "On", - "MaterialDeck.Soundboard.Off": "Off", - - "MaterialDeck.Macro.Macro": "Macro", - "MaterialDeck.Macro.Background": "Background", - "MaterialDeck.Macro.FurnaceArgs": "Furnace arguments", - - "MaterialDeck.Name": "Name" + "MaterialDeck.PL.Unrestricted": "Unrestricted", + "MaterialDeck.PL.OneTrackPlaylist": "One track per playlist", + "MaterialDeck.PL.OneTrackTotal": "One track in total", + "MaterialDeck.PL.Header": "Play Method", + "MaterialDeck.PL.Label": "Method", + + "MaterialDeck.Playlists": "Playlists", + "MaterialDeck.Playlist": "Playlist", + "MaterialDeck.FurnaceArgs": "Furnace arguments", + "MaterialDeck.Background": "Background", + "MaterialDeck.Macro": "Macro", + "MaterialDeck.Sound": "Sound", + "MaterialDeck.Icon": "Icon", + "MaterialDeck.Once": "Once", + "MaterialDeck.Repeat": "Repeat", + "MaterialDeck.Hold": "Hold", + "MaterialDeck.Playback": "Playback", + "MaterialDeck.Volume": "Volume", + "MaterialDeck.On": "On", + "MaterialDeck.Off": "Off", + "MaterialDeck.Name": "Name", + "MaterialDeck.None": "None", + "MaterialDeck.Save": "Save" } diff --git a/module.json b/module.json index 11d52f1..4a09a94 100644 --- a/module.json +++ b/module.json @@ -2,7 +2,7 @@ "name": "MaterialDeck", "title": "Material Deck", "description": "", - "version": "0.8.4", + "version": "0.8.5", "author": "CDeenen", "esmodules": [ "./MaterialDeck.js" diff --git a/src/combattracker.js b/src/combattracker.js index 2667a0b..3fea2b0 100644 --- a/src/combattracker.js +++ b/src/combattracker.js @@ -3,11 +3,12 @@ import {streamDeck, tokenControl} from "../MaterialDeck.js"; export class CombatTracker{ constructor(){ + this.active = false; this.combatantLength = 0; } async updateAll(){ - + if (this.active == false) return; for (let i=0; i<32; i++){ let data = streamDeck.buttonContext[i]; if (data == undefined || data.action != 'combattracker') continue; @@ -16,6 +17,7 @@ export class CombatTracker{ } update(settings,context){ + this.active = true; let ctFunction = settings.combatTrackerFunction; if (ctFunction == undefined) ctFunction == 0; diff --git a/src/macro.js b/src/macro.js index 8411551..3dda53d 100644 --- a/src/macro.js +++ b/src/macro.js @@ -3,10 +3,12 @@ import {streamDeck} from "../MaterialDeck.js"; export class MacroControl{ constructor(){ + this.active = false; this.offset = 0; } async updateAll(){ + if (this.active == false) return; for (let i=0; i<32; i++){ let data = streamDeck.buttonContext[i]; if (data == undefined || data.action != 'macro') continue; @@ -15,10 +17,13 @@ export class MacroControl{ } update(settings,context){ + this.active = true; let mode = settings.macroMode; let displayName = settings.displayName; let macroNumber = settings.macroNumber; let background = settings.background; + let icon = false; + if (settings.displayIcon) icon = true; let ringColor = "#000000"; let ring = 0; if(macroNumber == undefined || isNaN(parseInt(macroNumber))){ @@ -53,15 +58,15 @@ export class MacroControl{ src += macro.img; } } - - streamDeck.setIcon(1,context,src,background); + if (icon) streamDeck.setIcon(1,context,src,background); + else streamDeck.setIcon(0, context, "", background); if (displayName == 0) name = ""; streamDeck.setTitle(name,context); } - else { + else { //Macro board let name = ""; let src = ''; - if (settings.macroBoardMode == 0) { + if (settings.macroBoardMode == 0) { //Execute macro macroNumber += this.offset - 1; if (macroNumber < 0) macroNumber = 0; var macroId = game.settings.get(MODULE.moduleName,'macroSettings').macros[macroNumber]; @@ -76,8 +81,8 @@ export class MacroControl{ src += macro.img; } } - } - else { + } + else { //Offset let ringOffColor = settings.offRing; if (ringOffColor == undefined) ringOffColor = '#000000'; @@ -92,7 +97,8 @@ export class MacroControl{ ring = 2; } - streamDeck.setIcon(1, context,src,background,ring,ringColor); + if (icon) streamDeck.setIcon(1, context,src,background,ring,ringColor); + else streamDeck.setIcon(0, context, "", background,ring,ringColor); if (displayName == 0) name = ""; streamDeck.setTitle(name,context); } diff --git a/src/move.js b/src/move.js index 516837b..9bc6fb2 100644 --- a/src/move.js +++ b/src/move.js @@ -2,22 +2,37 @@ import * as MODULE from "../MaterialDeck.js"; export class Move{ constructor(){ + this.active = false; } keyPress(settings){ + console.log('move',settings) let dir = settings.dir; let mode = settings.mode; if (mode == undefined) mode = 0; if (dir == undefined) dir = 0; - if (settings.mode == '1') - this.moveToken(MODULE.selectedTokenId,dir); - else - this.moveCanvas(dir); + if (dir < 9){ + if (settings.mode == '1') + this.moveToken(MODULE.selectedTokenId,dir); + else + this.moveCanvas(dir); + } + else if (dir == 9) {//zoom in + let viewPosition = canvas.scene._viewPosition; + viewPosition.scale = viewPosition.scale*1.05; + viewPosition.duration = 100; + canvas.animatePan(viewPosition); + } + else if (dir == 10) {//zoom out + let viewPosition = canvas.scene._viewPosition; + viewPosition.scale = viewPosition.scale*0.95; + viewPosition.duration = 100; + canvas.animatePan(viewPosition); + } } async moveToken(tokenId,dir){ if (tokenId == undefined) return; - const token = canvas.tokens.children[0].children.find(p => p.id == tokenId); const gridSize = canvas.scene.data.grid; let x = token.x; diff --git a/src/othercontrols.js b/src/othercontrols.js index c11eb6b..e1b6777 100644 --- a/src/othercontrols.js +++ b/src/othercontrols.js @@ -3,10 +3,12 @@ import {streamDeck} from "../MaterialDeck.js"; export class OtherControls{ constructor(){ + this.active = false; this.offset = 0; } async updateAll(){ + if (this.active == false) return; for (let i=0; i<32; i++){ let data = streamDeck.buttonContext[i]; if (data == undefined || data.action != 'other') continue; @@ -15,6 +17,7 @@ export class OtherControls{ } update(settings,context){ + this.active = true; let mode = settings.otherMode; if (mode == undefined) mode = 0; @@ -312,8 +315,10 @@ export class OtherControls{ if (selectedControl != undefined){ const selectedTool = selectedControl.tools[controlNr]; if (selectedTool != undefined){ - if (selectedTool.toggle) + if (selectedTool.toggle) { selectedTool.active = !selectedTool.active; + selectedTool.onClick(selectedTool.active); + } else if (selectedTool.button){ selectedTool.onClick(); } @@ -335,8 +340,10 @@ export class OtherControls{ if (selectedTool != undefined){ ui.controls.activeControl = controlName; canvas.getLayer(selectedControl.layer).activate(); - if (selectedTool.toggle) + if (selectedTool.toggle) { selectedTool.active = !selectedTool.active; + selectedTool.onClick(selectedTool.active); + } else if (selectedTool.button){ selectedTool.onClick(); } diff --git a/src/playlist.js b/src/playlist.js index fb18ab1..97f4b00 100644 --- a/src/playlist.js +++ b/src/playlist.js @@ -3,11 +3,13 @@ import {streamDeck} from "../MaterialDeck.js"; export class PlaylistControl{ constructor(){ + this.active = false; this.playlistOffset = 0; this.trackOffset = 0; } async updateAll(){ + if (this.active == false) return; for (let i=0; i<32; i++){ let data = streamDeck.buttonContext[i]; if (data == undefined || data.action != 'playlist') continue; @@ -16,6 +18,7 @@ export class PlaylistControl{ } update(settings,context){ + this.active = true; if (settings.playlistMode == undefined) settings.playlistMode = 0; if (settings.playlistMode == 0){ this.updatePlaylist(settings,context); diff --git a/src/settings.js b/src/settings.js index d64bba2..011ed91 100644 --- a/src/settings.js +++ b/src/settings.js @@ -17,13 +17,13 @@ export const registerSettings = function() { }); game.settings.register(MODULE.moduleName,'streamDeckModel', { - name: "Stream Deck Model", - hint: "Reduces the amount of macros and sounds in the macro and soundboard configuration screens. Gives a better overview, but if desired it can be set to XL to get the maximum number. This doesn't influence the operation of the module.", + name: "MaterialDeck.Sett.Model", + hint: "MaterialDeck.Sett.Model_Hint", scope: "world", config: true, type:Number, default:1, - choices:["Mini","Normal or Mobile","XL"], + choices:["MaterialDeck.Sett.Model_Mini","MaterialDeck.Sett.Model_Normal","MaterialDeck.Sett.Model_XL"], }); /** @@ -35,12 +35,12 @@ export const registerSettings = function() { config: false, type:Number, default:0, - choices:["Default","One track per playlist","One track in total"], + choices:["MaterialDeck.Playlist.Playmethod.Unrestricted","MaterialDeck.Playlist.Playmethod.OneTrackPlaylist","MaterialDeck.Playlist.Playmethod.OneTrackTotal"], }); game.settings.registerMenu(MODULE.moduleName, 'playlistConfigMenu',{ - name: "Playlist Configuration", - label: "Playlist Configuration", + name: "MaterialDeck.Sett.PlaylistConfig", + label: "MaterialDeck.Sett.PlaylistConfig", type: playlistConfigForm, restricted: true }); diff --git a/src/soundboard.js b/src/soundboard.js index bb31e78..d907f2c 100644 --- a/src/soundboard.js +++ b/src/soundboard.js @@ -3,6 +3,7 @@ import {streamDeck} from "../MaterialDeck.js"; export class SoundboardControl{ constructor(){ + this.active = false; this.offset = 0; this.activeSounds = []; for (let i=0; i<64; i++) @@ -10,6 +11,7 @@ export class SoundboardControl{ } async updateAll(){ + if (this.active == false) return; for (let i=0; i<32; i++){ let data = streamDeck.buttonContext[i]; if (data == undefined || data.action != 'soundboard') continue; @@ -18,6 +20,7 @@ export class SoundboardControl{ } update(settings,context){ + this.active = true; let mode = settings.soundboardMode; if (mode == undefined) mode = 0; diff --git a/src/streamDeck.js b/src/streamDeck.js index ee4ee04..8941441 100644 --- a/src/streamDeck.js +++ b/src/streamDeck.js @@ -23,6 +23,8 @@ export class StreamDeck{ let canvasBox = document.createElement('div'); canvasBox.id = 'sdCanvasBox'; document.body.appendChild(canvasBox); // adds the canvas to the body element + + this.syllableRegex = /[^aeiouy]*[aeiouy]+(?:[^aeiouy]*$|[^aeiouy](?=[^aeiouy]))?/gi; } setScreen(action){ @@ -42,20 +44,90 @@ export class StreamDeck{ clearContext(action,coordinates = {column:0,row:0}){ let num = coordinates.column + coordinates.row*8; this.buttonContext[num] = undefined; + if (this.getActive(action) == false){ + if (action == 'token') MODULE.tokenControl.active = false; + else if (action == 'macro') MODULE.macroControl.active = false; + else if (action == 'combattracker') MODULE.combatTracker.active = false; + else if (action == 'playlist') MODULE.playlistControl.active = false; + else if (action == 'soundboard') MODULE.soundboard.active = false; + else if (action == 'other') MODULE.otherControls.active = false; + } + } + + getActive(action){ + for (let i=0; i 10){ + let syllables = this.syllabify(txtNewPart); + + for (let j=0; j j) newTxtArray[counter] += '-'; + counter++; + j++; + } + else { + newTxtArray[counter] = syllables[j]; + if (syllables.length > j) newTxtArray[counter] += '-'; + counter++; + } + } + } + else{ + newTxtArray[counter] = txtNewPart; + counter++; + } + } + for (let i=0; i 0) txtNew += "\n"; - txtNew += txtNewPart; + if (i { if (format == 'color') ctx.filter = "opacity(0)"; + if (data.overlay) ctx.filter = "brightness(60%)"; //ctx.filter = "brightness(0) saturate(100%) invert(38%) sepia(62%) saturate(2063%) hue-rotate(209deg) brightness(90%) contrast(95%)"; var imageAspectRatio = img.width / img.height; var canvasAspectRatio = canvas.width / canvas.height; diff --git a/src/token.js b/src/token.js index 11f8cb8..cfd3996 100644 --- a/src/token.js +++ b/src/token.js @@ -3,9 +3,11 @@ import {streamDeck} from "../MaterialDeck.js"; export class TokenControl{ constructor(){ + this.active = false; } async update(tokenId){ + if (this.active == false) return; for (let i=0; i<32; i++){ let data = streamDeck.buttonContext[i]; if (data == undefined || data.action != 'token') continue; @@ -73,10 +75,99 @@ export class TokenControl{ } initiative = attributes.init.total; } - else return; + else { + //Other systems + + + + + } + if (settings.onClick == 4) { //toggle visibility + ring = 1; + if (token.data.hidden){ + ring = 2; + ringColor = "#FF7B00"; + } + if (icon == false) { + iconSrc = window.CONFIG.controlIcons.visibility; + streamDeck.setIcon(1,context,iconSrc,background,ring,ringColor,true); + } + } + else if (settings.onClick == 5) { //toggle combat state + ring = 1; + if (token.inCombat){ + ring = 2; + ringColor = "#FF7B00"; + } + if (icon == false) { + iconSrc = window.CONFIG.controlIcons.combat; + streamDeck.setIcon(1,context,iconSrc,background,ring,ringColor,true); + } + } + else if (settings.onClick == 6) { //target token + ring = 1; + if (token.isTargeted){ + ring = 2; + ringColor = "#FF7B00"; + } + if (icon == false) { + iconSrc = "fas fa-bullseye"; + streamDeck.setIcon(1,context,iconSrc,background,ring,ringColor); + } + } + else if (settings.onClick == 7) { //toggle condition + ring = 1; + let condition = settings.condition; + if (condition == undefined) condition = 0; + + if (condition == 0 && icon == false){ + iconSrc = window.CONFIG.controlIcons.effects; + } + else if (icon == false) { + let effect = CONFIG.statusEffects.find(e => e.id === this.getStatusId(condition)); + iconSrc = effect.icon; + let effects = token.actor.effects.entries; + let active = effects.find(e => e.isTemporary === this.getStatusId(condition)); + if (active != undefined){ + ring = 2; + ringColor = "#FF7B00"; + } + } + streamDeck.setIcon(1,context,iconSrc,background,ring,ringColor,true); + } } else { iconSrc += ""; + if (settings.onClick == 4) { //toggle visibility + if (icon == false) { + iconSrc = window.CONFIG.controlIcons.visibility; + streamDeck.setIcon(1,context,iconSrc,background,1,'#000000',true); + } + } + else if (settings.onClick == 5) { //toggle combat state + if (icon == false) { + iconSrc = window.CONFIG.controlIcons.combat; + streamDeck.setIcon(1,context,iconSrc,background,1,'#000000',true); + } + } + else if (settings.onClick == 6) { //target token + if (icon == false) { + iconSrc = "fas fa-bullseye"; + streamDeck.setIcon(1,context,iconSrc,background,1,'#000000'); + } + } + else if (settings.onClick == 7) { //toggle condition + let condition = settings.condition; + if (condition == undefined) condition = 0; + + if (condition == 0 && icon == false){ + iconSrc = window.CONFIG.controlIcons.effects; + } + else if (icon == false) { + iconSrc = CONFIG.statusEffects.find(e => e.id === this.getStatusId(condition)).icon; + } + streamDeck.setIcon(1,context,iconSrc,background,1,'#000000',true); + } } if (icon) streamDeck.setIcon(1,context,iconSrc,background,ring,ringColor); @@ -89,7 +180,7 @@ export class TokenControl{ streamDeck.setTitle(txt,context); } - keyPress(settings){ + async keyPress(settings){ if (MODULE.selectedTokenId == undefined) return; const tokenId = MODULE.selectedTokenId; @@ -108,8 +199,72 @@ export class TokenControl{ else if (onClick == 2){ //Open character sheet token.actor.sheet.render(true); } - else { //Open token config + else if (onClick == 3) { //Open token config token.sheet._render(true); } + else if (onClick == 4) { //Toggle visibility + token.toggleVisibility(); + } + else if (onClick == 5) { //Toggle combat state + token.toggleCombat(); + } + else if (onClick == 6) { //Target token + token.setTarget(!token.isTargeted,{releaseOthers:false}); + } + else if (onClick == 7) { //Toggle condition + let condition = settings.condition; + if (condition == undefined) condition = 0; + + if (condition == 0){ + const effects = token.actor.effects.entries; + for (let i=0; i e.icon === effects[i].data.icon); + await token.toggleEffect(effect) + } + } + else { + const effect = CONFIG.statusEffects.find(e => e.id === this.getStatusId(condition)); + token.toggleEffect(effect); + } + + } + } + + getStatusId(nr){ + let id; + if (nr == 1) id = 'dead'; + else if (nr == 2) id = 'unconscious'; + else if (nr == 3) id = 'sleep'; + else if (nr == 4) id = 'stun'; + else if (nr == 5) id = 'prone'; + else if (nr == 6) id = 'restrain'; + else if (nr == 7) id = 'paralysis'; + else if (nr == 8) id = 'fly'; + else if (nr == 9) id = 'bind'; + else if (nr == 10) id = 'deaf'; + else if (nr == 11) id = 'silence'; + else if (nr == 12) id = 'fear'; + else if (nr == 13) id = 'burning'; + else if (nr == 14) id = 'frozen'; + else if (nr == 15) id = 'shock'; + else if (nr == 16) id = 'corrode'; + else if (nr == 17) id = 'bleeding'; + else if (nr == 18) id = 'disease'; + else if (nr == 19) id = 'poison'; + else if (nr == 20) id = 'radiation'; + else if (nr == 21) id = 'regen'; + else if (nr == 22) id = 'degen'; + else if (nr == 23) id = 'upgrade'; + else if (nr == 24) id = 'downgrade'; + else if (nr == 25) id = 'target'; + else if (nr == 26) id = 'eye'; + else if (nr == 27) id = 'curse'; + else if (nr == 28) id = 'bless'; + else if (nr == 29) id = 'fireShield'; + else if (nr == 30) id = 'coldShield'; + else if (nr == 31) id = 'magicShield'; + else if (nr == 32) id = 'holyShield'; + + return id; } } \ No newline at end of file diff --git a/templates/macroConfig.html b/templates/macroConfig.html index f5d15ff..f951a79 100644 --- a/templates/macroConfig.html +++ b/templates/macroConfig.html @@ -13,12 +13,12 @@ {{#each this.dataThis}}
- {{localize "MaterialDeck.Macro.Macro"}} {{this.iteration}} + {{localize "MaterialDeck.Macro"}} {{this.iteration}}
{{#if this.furnace}} - + {{/if}}
- +
@@ -39,7 +39,7 @@ {{/each}} \ No newline at end of file diff --git a/templates/playlistConfig.html b/templates/playlistConfig.html index 106258f..b606cb5 100644 --- a/templates/playlistConfig.html +++ b/templates/playlistConfig.html @@ -1,26 +1,26 @@
-

{{localize "MaterialDeck.Playlist.Playmethod.Header"}}

+

{{localize "MaterialDeck.PL.Header"}}

- +
-

{{localize "MaterialDeck.Playlist.Playlists"}}

+

{{localize "MaterialDeck.Playlists"}}

{{#each playlistData}}
- + {{#select playlist}} - + {{#each playlists}} {{/each}} @@ -23,19 +23,19 @@ {{#each this.dataThis}}
- {{localize "MaterialDeck.Soundboard.Sound"}} {{this.iteration}} + {{localize "MaterialDeck.Sound"}} {{this.iteration}}
{{localize "MaterialDeck.Name"}}
- {{localize "MaterialDeck.Soundboard.Sound"}} + {{localize "MaterialDeck.Sound"}}
- {{localize "MaterialDeck.Soundboard.Icon"}} + {{localize "MaterialDeck.Icon"}}
- + - +
- +
- +
@@ -78,7 +78,7 @@
{{/each}} \ No newline at end of file