This commit is contained in:
2025-01-04 00:34:03 +01:00
parent 41829408dc
commit 0ca14bbc19
18111 changed files with 1871397 additions and 0 deletions

View File

@@ -0,0 +1,134 @@
{{#*inline "deviceList"}}
<div class="form-group stacked">
<label>{{localize label}}:</label>
<select name="{{name}}">
{{#if disabledLabel}}
<option value="disabled" {{#if disabled}}selected{{/if}}>{{localize disabledLabel}}</option>
{{/if}}
{{#select device}}
<option value="default">{{localize "WEBRTC.DefaultSource"}}</option>
{{#each deviceList as |label d|}}
<option value="{{d}}">{{label}}</option>
{{/each}}
{{/select}}
{{#if unavailable}}
<option value="{{device}}" selected>{{localize "WEBRTC.UnavailableDevice"}}</option>
{{/if}}
</select>
<p class="notes">{{localize notes}}</p>
</div>
{{/inline}}
<form>
<!-- Sheet Navigation Tabs -->
<nav class="sheet-tabs tabs" aria-role="{{localize 'SHEETS.FormNavLabel'}}">
<a class="item" data-tab="general">
<i class="fas fa-headset"></i> {{localize "WEBRTC.GeneralTab"}}
</a>
<a class="item" data-tab="devices">
<i class="fas fa-headset"></i> {{localize "WEBRTC.DevicesTab"}}
</a>
{{#if user.isGM}}
<a class="item" data-tab="server">
<i class="fas fa-server"></i> {{localize "WEBRTC.ServerTab"}}
</a>
{{/if}}
</nav>
<!-- General Tab -->
<div class="tab" data-tab="general">
<div class="form-group stacked">
<label>{{localize "WEBRTC.AVMode"}}:</label>
<select name="world.mode" data-dtype="Number" {{#unless canSelectMode}}disabled{{/unless}}>
{{selectOptions modes selected=settings.world.mode localize=true}}
</select>
<p class="notes">{{ localize "WEBRTC.AVModeNotes" }}</p>
{{#if noSSL}}
<p class="notification error">{{ localize "WEBRTC.NoSSLError" }}</p>
{{/if}}
</div>
<div class="form-group">
<label>{{localize "WEBRTC.VoiceMode"}}</label>
<select name="client.voice.mode">
{{selectOptions voiceModes selected=settings.client.voice.mode localize=true}}
</select>
<p class="notes">{{ localize "WEBRTC.VoiceModeNotes" }}</p>
</div>
<div class="form-group">
<label>{{localize "WEBRTC.DockPosition"}}</label>
<select name="client.dockPosition">
{{selectOptions dockPositions selected=settings.client.dockPosition}}
</select>
</div>
<div class="form-group">
<label>{{localize "WEBRTC.Nameplates"}}</label>
<select name="client.nameplates" data-dtype="Number">
{{selectOptions nameplates selected=nameplateSetting localize=true}}
</select>
</div>
<div class="form-group">
<label>{{localize "WEBRTC.BorderColors"}}</label>
<input type="checkbox" name="client.borderColors" {{checked settings.client.borderColors}}>
</div>
</div>
<!-- Devices Tab -->
<div class="tab" data-tab="devices">
<div class="form-group stacked">
<label>{{localize WEBRTC.VideoDevice}}</label>
<select name="client.videoSrc">
{{selectOptions videoSourceOptions selected=settings.client.videoSrc}}
</select>
<p class="notes">{{localize "WEBRTC.VideoDeviceNotes"}}</p>
</div>
<div class="form-group stacked">
<label>{{localize WEBRTC.AudioDevice}}</label>
<select name="client.audioSrc">
{{selectOptions audioSourceOptions selected=settings.client.audioSrc}}
</select>
<p class="notes">{{localize "WEBRTC.VideoDeviceNotes"}}</p>
</div>
<div class="form-group stacked">
<label>{{localize WEBRTC.AudioOutput}}</label>
<select name="client.audioSink">
{{selectOptions audioSinkOptions selected=settings.client.audioSink}}
</select>
<p class="notes">{{localize "WEBRTC.AudioOutputNotes"}}</p>
</div>
</div>
<!-- Server Tab -->
{{#if user.isGM}}
<div class="tab" data-tab="server">
<div class="form-group">
<label>{{localize "WEBRTC.WebRTCTurnServer"}}:</label>
<select name="world.turn.type">
{{selectOptions turnTypes selected=settings.world.turn.type localize=true}}
</select>
</div>
<div class="webrtc-custom-turn-config">
<div class="form-group">
<label>{{localize "WEBRTC.WebRTCTURNURL"}}:</label>
<input type="text" name="world.turn.url" value="{{settings.world.turn.url}}"/>
</div>
<div class="form-group">
<label>{{localize "WEBRTC.WebRTCTurnUsername"}}:</label>
<input type="text" name="world.turn.username" value="{{settings.world.turn.username}}"/>
</div>
<div class="form-group">
<label>{{localize "WEBRTC.WebRTCTurnPassword"}}:</label>
<input type="password" name="world.turn.password" value="{{settings.world.turn.password}}"/>
</div>
</div>
</div>
{{/if}}
<button type="submit" {{#if noSSL}}disabled{{/if}}>
<i class="far fa-save"></i> {{localize "Save Changes"}}
</button>
</form>

View File

@@ -0,0 +1,17 @@
<form autocomplete="off">
<p class="notes">{{localize "COMPENDIUM.ImportAllHint"}}</p>
<div class="form-group">
<label>{{ localize "FOLDER.ExportExistingFolder" }}</label>
<select name="folder">
{{ selectOptions folders valueAttr="id" labelAttr="name" blank="" }}
</select>
</div>
<div class="form-group">
<label>{{localize "FOLDER.ExportNewFolder"}}</label>
<input type="text" name="folderName" value="{{folderName}}">
</div>
<div class="form-group">
<label>{{localize "FOLDER.ExportKeepId"}}</label>
<input type="checkbox" name="keepId" {{ checked keepId }}>
</div>
</form>

View File

@@ -0,0 +1,10 @@
<form class="compendium-ownership-dialog">
{{#each roles as |config role|}}
<div class="form-group">
<label>{{localize config.label}}</label>
<select name="{{role}}">
{{selectOptions config.levels selected=config.value}}
</select>
</div>
{{/each}}
</form>

View File

@@ -0,0 +1,11 @@
<h2 class="border">{{title}}</h2>
{{#each subTypes}}
<div class="form-group">
<label>{{name}}</label>
<div class="form-fields">
<select name="{{../id}}.{{type}}">
{{selectOptions defaultClasses selected=defaultClass}}
</select>
</div>
</div>
{{/each}}

View File

@@ -0,0 +1,34 @@
<form autocomplete="off">
<p class="notes">{{ localize "FOLDER.ExportHint" }}</p>
<div class="form-group">
<label>{{ localize "FOLDER.ExportDestination" }}</label>
<div class="form-fields">
<select name="pack">
{{selectOptions packs selected=pack blank=""}}
</select>
</div>
</div>
<div class="form-group">
<label>{{ localize "DOCUMENT.Folder" }}</label>
<div class="form-fields">
<select name="folder" {{#unless hasFolders}}disabled{{/unless}}>
{{selectOptions folders valueAttr="id" labelAttr="name" selected=folder blank=""}}
</select>
</div>
</div>
<fieldset>
<legend>{{ localize "FOLDER.ExportOptions" }}</legend>
<div class="form-group">
<label>{{ localize "FOLDER.ExportMerge" }}</label>
<input type="checkbox" name="merge" {{ checked merge }}/>
</div>
<div class="form-group">
<label>{{ localize "FOLDER.ExportKeepId" }}</label>
<input type="checkbox" name="keepId" {{ checked keepId }}/>
</div>
<div class="form-group">
<label>{{ localize "FOLDER.ExportKeepFolders" }}</label>
<input type="checkbox" name="keepFolders" {{ checked keepFolders }}/>
</div>
</fieldset>
</form>

View File

@@ -0,0 +1,71 @@
<form>
<!-- Font Preview -->
<div style="font-family: '{{family}}'; font-weight: {{selected.weight}}; font-style: {{selected.style}};"
class="font-preview">
<p contenteditable="true" data-edit="preview">{{{font.preview}}}</p>
</div>
{{#if fonts}}
<hr>
{{/if}}
<!-- Custom Fonts -->
{{#each fonts}}
<div class="control custom-font {{#if selected}}selected{{/if}}" data-family="{{family}}" data-index="{{index}}"
data-action="select">
<span>{{{font}}}</span>
<a class="control" data-action="delete" title="{{localize "FONTS.RemoveFont"}}">
<i class="fa-solid fa-xmark"></i>
</a>
</div>
{{/each}}
<hr>
<!-- Add a Font -->
<div class="form-group">
<label>{{localize "FONTS.Type"}}</label>
<div class="form-fields">
<label class="checkbox">
<input type="radio" name="type" value="file" checked>
{{localize "FONTS.TypeFile"}}
</label>
<label class="checkbox">
<input type="radio" name="type" value="system">
{{localize "FONTS.TypeSystem"}}
</label>
</div>
<p class="hint">{{localize "FONTS.TypeHint"}}</p>
</div>
<div class="form-group">
<label>{{localize "FONTS.Family"}}</label>
<div class="form-fields">
<input type="text" name="family" value="{{font.family}}">
</div>
</div>
<div class="form-group">
<label>{{localize "FONTS.Weight"}}</label>
<div class="form-fields">
<select name="weight" data-dtype="Number">
{{selectOptions weights selected=font.weight valueAttr="value" labelAttr="label"}}
</select>
</div>
</div>
<div class="form-group">
<label>{{localize "FONTS.Style"}}</label>
<div class="form-fields">
<select name="style">
{{selectOptions styles selected=font.style}}
</select>
</div>
</div>
<div class="form-group picker">
<label>{{localize "FONTS.File"}}</label>
<div class="form-fields">
<file-picker name="src" type="font" value="{{font.src}}"></file-picker>
</div>
</div>
<button type="button" name="add-font" class="control" data-action="add">
<i class="fa-solid fa-plus"></i> {{localize "FONTS.AddFont"}}
</button>
</form>

View File

@@ -0,0 +1,34 @@
<form>
<p class="notes">{{localize 'INVITATIONS.Instructions'}}</p>
<div class="form-group">
<label for="local"><i class="fas fa-ethernet"></i> {{localize 'INVITATIONS.Local'}}</label>
{{#if local}}
<input type="text" class="invite-link" name="local" value="{{local}}" readonly/>
{{else}}
<input type="text" class="invite-link" name="local" value="Unknown" disabled/>
{{/if}}
</div>
<div class="form-group">
<label for="remote" data-tooltip="{{remoteTitle}}">
<i class="fas fa-wifi"></i> {{localize 'INVITATIONS.Internet'}}
{{#if remoteClass}}
{{#if canConnect}}
<i class="fas fa-check-circle connection open"></i>
{{else if failedCheck}}
<i class="fas fa-exclamation-circle connection unknown"></i>
{{else}}
<i class="fas fa-times-circle connection closed"></i>
{{/if}}
{{/if}}
<i class="fas fa-sync refresh"></i>
</label>
{{#if remote}}
<input type="password" id="remote-link" class="invite-link" name="remote" value="{{remote}}" readonly/>
<i class="far fa-eye show-hide show-link"></i>
{{else}}
<input type="text" class="invite-link" name="remote" value="{{localize "Unknown"}}" disabled
data-tooltip="{{localize "INVITATIONS.DiscoveryFailed"}}">
{{/if}}
</div>
</form>

View File

@@ -0,0 +1,48 @@
<h2 class="category-title">{{this.title}}</h2>
{{#each this.actions as |action| }}
<div class="form-group action {{action.cssClass}}" data-action-id="{{action.id}}">
<label class="action-title">{{action.name}}</label>
<ol class="action-bindings flexcol">
{{#if action.noBindings}}
<li class="binding flexrow" data-binding-id="empty">
<span></span>
<div class="binding-controls flexrow">
<a class="control" title="{{localize 'KEYBINDINGS.AddBinding'}}" data-action="add"><i class="fas fa-plus"></i></a>
</div>
</li>
{{/if}}
{{#each action.bindings as |binding|}}
<li class="binding flexrow" data-binding-id="{{binding.id}}">
{{#if binding.isEditable}}
<span class="key editable-binding {{binding.cssClasses}}">{{binding.display}}</span>
<div class="editable-binding hidden">
<div class="form-fields binding-fields">
<input type="text" class="binding-input" name="{{binding.id}}" id="{{binding.id}}" value="{{binding.display}}" readonly>
<i class="far fa-keyboard binding-input-icon"></i>
</div>
</div>
{{else}}
<span class="key {{binding.cssClasses}}">{{binding.display}}</span>
{{/if}}
<div class="binding-controls flexrow">
{{#if binding.hasConflicts}}
<div class="control conflicts" title="{{binding.conflicts}}"><i class="fas fa-exclamation-triangle"></i></div>
{{/if}}
{{#if binding.isFirst}}
<a class="control" title="{{localize 'KEYBINDINGS.AddBinding'}}" data-action="add"><i class="fas fa-plus"></i></a>
{{/if}}
{{#if binding.isEditable}}
<a class="control save-edit hidden" title="{{localize 'KEYBINDINGS.SaveBinding'}}" data-action="save"><i class="fas fa-save"></i></a>
<a class="control save-edit" title="{{localize 'KEYBINDINGS.EditBinding'}}" data-action="edit"><i class="fas fa-edit"></i></a>
<a class="control" title="{{localize 'KEYBINDINGS.DeleteBinding'}}" data-action="delete"><i class="fas fa-trash-alt"></i></a>
{{else}}
<div class="control uneditable" title="{{localize 'KEYBINDINGS.Uneditable'}}"><i class="fas fa-lock"></i></div>
{{/if}}
</div>
</li>
{{/each}}
</ol>
{{#if action.notes}}<p class="notes">{{{action.notes}}}</p>{{/if}}
</div>
{{/each}}

View File

@@ -0,0 +1,75 @@
<form autocomplete="off">
<p class="notes">
{{#if editable }}
{{localize 'MODMANAGE.Instructions'}}
{{else}}
{{localize 'MODMANAGE.View'}}
{{/if}}
</p>
<nav class="list-filters" aria-label="{{localize 'MODMANAGE.NavLabel'}}">
<input type="search" name="search" placeholder="{{localize 'MODMANAGE.Search'}}" value=""/>
{{#each filters}}
<a class="filter" data-filter="{{ this.id }}">{{ this.label }} ({{ this.count }})</a>
{{/each}}
<button type="button" class="expand">
<i class="fa"></i>
</button>
</nav>
<ul id="module-list" class="directory-list package-list">
{{#each modules}}
<li class="package flexcol{{css}}" data-module-id="{{this.id}}">
<div class="package-overview flexrow" {{#if this.tooltip}}data-tooltip="{{this.tooltip}}"{{/if}}>
<label class="package-title checkbox">
<input type="checkbox" class="active" name="{{this.id}}" data-dtype="Boolean" {{checked this.active}}
{{#if this.disabled}} disabled {{/if}}/>
<div class="title-group">
<div class="title">{{~this.title~}}</div>
{{#if this.documents}}
<div class="subtitle">{{{this.documents}}}</div>
{{/if}}
</div>
</label>
{{> templates/setup/parts/package-tags.hbs versionLabel="PACKAGE.TagVersion" package=this }}
</div>
<div class="package-description" >
{{{this.description}}}
<ul class="package-metadata">
<li><strong>{{labels.authors}}:</strong> <span class="author">{{{authors}}}</span></li>
{{#if this.url}}
<li><strong>{{localize "URL"}}:</strong> <a href="{{this.url}}" target="_blank">{{this.url}}</a></li>
{{/if}}
{{#if this.readme}}
<li><strong>{{localize "MODMANAGE.Readme"}}:</strong> <a href="{{this.readme}}" target="_blank">{{this.readme}}</a></li>
{{/if}}
{{#if this.bugs}}
<li><strong>{{localize "MODMANAGE.Bugs"}}:</strong> <a href="{{this.bugs}}" target="_blank">{{this.bugs}}</a></li>
{{/if}}
{{#if this.relationships.requires}}
<li>
<strong>{{ localize "MODMANAGE.Dependencies" }}:</strong>
{{#each this.relationships.requires}}
<span class="tag {{this.class}}" data-tooltip="{{this.message}}">{{ this.id }}</span>
{{/each}}
</li>
{{/if}}
</ul>
</div>
</li>
{{ else }}
{{#unless editable}}<p class="notes">{{ localize "MODMANAGE.None" }}</p>{{/unless}}
{{/each}}
</ul>
{{#if editable}}
<footer class="flexrow">
<button type="submit">
<i class="far fa-save"></i> {{localize 'MODMANAGE.Submit'}}
</button>
<button type="button" name="deactivate">
<i class="fas fa-ban"></i> {{localize 'MODMANAGE.DeactivateAll'}}
</button>
</footer>
{{/if}}
</form>

View File

@@ -0,0 +1,37 @@
<div class="flexrow">
<aside class="sidebar flexcol">
<div class="entry-filter form-group">
<input name="filter" type="search" placeholder="{{localize "PACKAGECONFIG.Filter"}}" value=""/>
</div>
<nav class="tabs" aria-label="{{localize 'PACKAGECONFIG.NavLabel'}}">
<a class="item category-tab category-all" data-tab="all">
{{localize "PACKAGECONFIG.All"}}
<span class="count">[{{ total }}]</span>
</a>
{{#each categories as |category|}}
<a class="item category-tab" data-tab="{{category.id}}">
{{category.title}}
<span class="count">[{{ category.count }}]</span>
</a>
{{/each}}
</nav>
<button class="reset-all" type="button">
<i class="fas fa-undo"></i> {{localize 'PACKAGECONFIG.Reset'}}
</button>
</aside>
<form class="categories flexcol" autocomplete="off">
<div class="scrollable">
{{#each categories as |category|}}
<section class="tab category" data-tab="{{category.id}}" data-category="{{category.id}}">
{{> (lookup @root "categoryTemplate")}}
</section>
{{/each}}
</div>
{{#if submitButton}}
<footer>
<button type="submit"><i class="fas fa-save"></i> {{localize "SETTINGS.Save"}}</button>
</footer>
{{/if}}
</form>
</div>

View File

@@ -0,0 +1,26 @@
{{ localize 'Foundry Virtual Tabletop' }}: {{ report.coreVersion }}
{{ localize 'WORLD.GameSystem' }}: {{ report.systemVersion }}
{{ localize 'MODMANAGE.FilterActive' }}: {{ report.activeModuleCount }}
{{ localize 'SETTINGS.PerformanceModeN' }}: {{ report.performanceMode }}
{{ localize 'SUPPORT.OS' }}: {{ report.os }}
{{ localize 'SUPPORT.Client' }}: {{ report.client }}
{{ localize 'SUPPORT.GPU' }}: {{ report.gpu }}
{{ localize 'SUPPORT.MaxTextureSize' }}: {{ report.maxTextureSize }}
{{#if report.hasViewedScene }}
{{ localize 'DOCUMENT.Scene' }}: {{ report.sceneDimensions }} | {{ localize 'SCENES.GridSize' }}: {{ report.grid }} | {{ localize 'SCENES.Padding' }}: {{ report.padding }}
{{ localize 'DOCUMENT.Walls' }}: {{ report.walls }} | {{ localize 'DOCUMENT.AmbientLights' }}: {{ report.lights }} | {{ localize 'DOCUMENT.AmbientSounds' }}: {{ report.sounds }} | {{ localize 'DOCUMENT.Tiles' }}: {{ report.tiles }} | {{ localize 'DOCUMENT.Tokens' }}: {{ report.tokens }}
{{#with report.largestTexture}}
{{#if (or width height)}}
{{ localize "SUPPORT.LargestTexture" }}: {{ width }} x {{ height }} {{#if src}}"{{ src }}"{{/if}}
{{/if}}
{{/with}}
{{else}}
{{ localize 'SUPPORT.NoViewedScene' }}
{{/if }}
{{ localize 'DOCUMENT.Actors' }}: {{ report.actors }} | {{ localize 'DOCUMENT.Items' }}: {{report.items }} | {{ localize 'DOCUMENT.JournalEntries' }}: {{ report.journal }} | {{ localize 'DOCUMENT.RollTables' }}: {{ report.tables }} |
{{ localize 'PLAYLIST.VolPlaylist' }}: {{ report.playlists }} | {{ localize 'SIDEBAR.TabCompendium' }}: {{ report.packs }} | {{ localize 'DOCUMENT.ChatMessages' }}: {{ report.messages }}
{{ localize "SUPPORT.WorldScripts" }}: {{ report.worldScripts }}

View File

@@ -0,0 +1,47 @@
<h2 class="border">{{this.title}}</h2>
{{#each this.menus}}
<div class="form-group submenu">
<label>{{ localize this.name }}</label>
<button type="button" data-key="{{ this.key }}">
{{#if this.icon}}<i class="{{ this.icon }}"></i>{{/if}}
<label>{{ localize this.label }}</label>
</button>
{{#if this.hint}}<p class="notes">{{ localize this.hint }}</p>{{/if}}
</div>
{{/each}}
{{#each this.settings}}
<div class="form-group" data-setting-id="{{this.id}}">
<label>{{this.name}}</label>
<div class="form-fields">
{{#if this.dataField}}
{{formInput this.dataField value=this.value input=this.input localize=true}}
{{else if this.isCheckbox}}
<input type="checkbox" name="{{this.id}}" data-dtype="Boolean" {{checked this.value}}/>
{{else if this.isSelect}}
<select name="{{this.id}}" data-dtype="{{this.type}}">
{{selectOptions this.choices selected=this.value localize=true}}
</select>
{{else if this.isRange}}
<input type="range" name="{{this.id}}" data-dtype="Number" value="{{ this.value }}"
min="{{ this.range.min }}" max="{{ this.range.max }}" step="{{ this.range.step }}"/>
<span class="range-value">{{this.value}}</span>
{{else if this.filePicker}}
<file-picker name="{{this.id}}" type="{{this.filePickerType}}" value="{{this.value}}"></file-picker>
{{else if this.isNumber}}
{{numberInput this.value name=this.id}}
{{else}}
<input type="text" name="{{this.id}}" value="{{this.value}}" data-dtype="{{this.type}}"/>
{{/if}}
</div>
<p class="notes">{{this.hint}}</p>
</div>
{{/each}}

View File

@@ -0,0 +1,105 @@
<article class="flexcol">
<!-- Support & Issues Tabs -->
<nav class="sheet-tabs tabs" data-group="main">
<a class="item" data-tab="support">
<i class="fas fa-hands-helping"></i> {{localize "SUPPORT.Title"}}
</a>
<a class="item" data-tab="documents">
<i class="fa-solid fa-file-circle-exclamation"></i> {{localize "SUPPORT.DocumentIssues"}}
</a>
<a class="item" data-tab="client">
<i class="fa-regular fa-window"></i> {{localize "SUPPORT.ClientIssues"}}
</a>
<a class="item" data-tab="modules">
<i class="fa-solid fa-box-open"></i> {{localize "SUPPORT.ModuleIssues"}}
</a>
</nav>
<!-- Support Details Report -->
<div class="tab" data-group="main" data-tab="support">
<h2>{{ localize 'SUPPORT.Places' }}</h2>
<p class="notes">
{{ localize 'SUPPORT.Discord' }} <a href="https://discord.gg/foundryvtt" target="_blank" rel="nofollow" title="FoundryVTT Discord">https://discord.gg/foundryvtt</a>
</p>
<p class="notes">
{{ localize 'SUPPORT.BugReporting' }} <a href="https://foundryvtt.com/contact-us?category=bug" target="_blank" rel="nofollow" title="FoundryVTT Contact Us">https://foundryvtt.com/contact-us/</a>
</p>
<h2>{{ localize 'SUPPORT.Details' }}</h2>
<p class="notes">{{ localize 'SUPPORT.ReportPrelude' }}</p>
<pre tabindex="0" id="support-report">{{> supportDetailsReport }}</pre>
<div class="flexrow">
<button type="button" data-action="copy">
<i class="fas fa-copy"></i> {{ localize 'SUPPORT.CopyReport' }}
</button>
<button type="button" data-action="fullReport" data-tooltip="SUPPORT.GenerateFullReportHint">
<i class="fas fa-file-lines"></i>
<span>{{ localize "SUPPORT.GenerateFullReport" }}</span>
</button>
</div>
</div>
<!-- Document Issues -->
<div class="tab" data-group="main" data-tab="documents">
<ul class="summary-tree summary-tree-root">
{{#each documentIssues}}
<li>
<details>
<summary>{{label}}</summary>
<ul>
{{#each documents}}
<li>
<details>
<summary>{{name}}</summary>
{{{validationError}}}
</details>
</li>
{{/each}}
</ul>
</details>
</li>
{{/each}}
</ul>
</div>
<!-- Client Issues -->
<div class="tab" data-group="main" data-tab="client">
<ul class="issues">
{{#each clientIssues}}
<li class="issue notification {{severity}}">{{{message}}}</li>
{{/each}}
</ul>
</div>
<!-- Module Issues -->
{{#*inline "moduleIssue"}}
<li>
<details>
<summary>{{label}}</summary>
<ul>
{{#each issues}}
<li>
<details>
<summary>{{label}}</summary>
<ul class="issues">
{{#each issues}}
<li class="issue notification {{severity}}">{{message}}</li>
{{/each}}
</ul>
</details>
</li>
{{/each}}
</ul>
</details>
</li>
{{/inline}}
<div class="tab" data-group="main" data-tab="modules">
<ul>
{{#each moduleIssues}}
{{> moduleIssue}}
{{/each}}
</ul>
</div>
</article>

View File

@@ -0,0 +1,18 @@
<h2 class="category-title">{{this.title}}</h2>
{{#each this.tours as |tour| }}
<div class="form-group tour {{tour.cssClass}}" data-tour="{{tour.id}}">
<label class="tour-title">{{tour.title}} <span class="status">({{tour.status}})</span></label>
<div class="form-fields controls">
{{#if tour.canBePlayed}}
<a class="control" data-action="play" data-tooltip="{{startOrResume}}">
<i class="fas fa-play"></i></a>
{{/if}}
{{#if tour.canBeReset}}
<a class="control" data-action="reset" data-tooltip="{{localize 'TOURS.Reset'}}">
<i class="fas fa-arrow-rotate-left"></i>
</a>
{{/if}}
</div>
{{#if tour.notes}}<p class="notes">{{{tour.notes}}}</p>{{/if}}
</div>
{{/each}}

View File

@@ -0,0 +1,56 @@
<form class="flexrow" autocomplete="off">
<nav class="filters" aria-label="{{localize 'TOURS.NavLabel'}}">
<h3 class="noborder">{{ localize "TOURS.TourCategories" }}</h3>
<div class="category-filter all {{#if allActive}}active{{/if}}">
<a class="filter" data-category="all">{{ localize "TOURS.AllTours" }}</a>
<span class="count">[{{ total }}]</span>
</div>
{{#each categories as |category|}}
<div class="category-filter {{ category.id }} {{#if category.active}}active{{/if}}">
<a class="filter" data-category="{{ category.id }}">{{ category.title }}</a>
<span class="count">[{{ category.count }}]</span>
</div>
{{/each}}
</nav>
<div class="categories flexcol">
<div class="tour-filter form-group">
<button class="reset-all" type="button">
<i class="fas fa-undo" title="{{localize 'SETTINGS.Reset'}}"></i> {{localize 'TOURS.ResetAll'}}
</button>
<label>{{localize "TOURS.TourFilter"}}</label>
<input name="filter" type="search" placeholder="{{localize 'TOURS.TourName'}}" value=""/>
</div>
<div class="category-list">
{{#each categories as |category|}}
{{#unless category.hidden}}
<section class="category" data-category-id="{{category.id}}">
<header class="category-header flexrow">
<h3 class="category-title noborder">{{this.title}}</h3>
<span class="category-collapse" title="Collapse"><i class="fas fa-chevron-down"></i></span>
<span class="category-collapse hidden" title="Expand"><i class="fas fa-chevron-up"></i></span>
</header>
<ol class="tour-list">
{{#each this.tours as |tour| }}
<li class="tour {{tour.cssClass}} flexrow" data-tour-id="{{tour.id}}">
<h4 class="tour-title">{{tour.title}}</h4>
<div class="flexrow">
<span>{{tour.status}}</span>
<div class="controls flexrow">
{{#if tour.canBePlayed}}
<a class="control" title="{{startOrResume}}" data-action="play"><i class="fas fa-play"></i></a>
{{/if}}
<a class="control" title="{{localize 'TOURS.Reset'}}" data-action="reset"><i class="fas fa-arrow-rotate-left"></i></a>
</div>
</div>
{{#if tour.description}}<p class="notes">{{{tour.description}}}</p>{{/if}}
</li>
{{/each}}
</ol>
</section>
{{/unless}}
{{/each}}
</div>
</div>
</form>

View File

@@ -0,0 +1,39 @@
<form id="document-create" autocomplete="off">
<div class="form-group">
<label>{{localize "Name"}}</label>
<div class="form-fields">
<input type="text" name="name" placeholder="{{defaultName}}" autofocus>
</div>
</div>
{{#if hasTypes}}
<div class="form-group">
<label>{{localize "Type"}}</label>
<div class="form-fields">
<select name="type">
{{selectOptions types selected=type}}
</select>
</div>
</div>
{{/if}}
{{#if hasFolders}}
<div class="form-group">
<label>{{ localize "DOCUMENT.Folder" }}</label>
<div class="form-fields">
<select name="folder">
{{selectOptions folders selected=folder blank="" valueAttr="id" labelAttr="name"}}
</select>
</div>
</div>
{{/if}}
<div class="cards-presets form-group">
<label>{{localize "CARDS.DeckPreset"}}</label>
<div class="form-fields">
<select name="preset">
{{selectOptions presets localize=true labelAttr="label" blank=""}}
</select>
</div>
</div>
</form>

View File

@@ -0,0 +1,27 @@
<section class="{{cssClass}} directory flexcol" id="{{cssId}}" data-tab="{{tabName}}">
<ol id="chat-log">
</ol>
<div class="hidden jump-to-bottom">
<a aria-label="{{localize 'CHAT.JumpToBottom'}}" role="button"><i class="fas fa-keyboard-down"></i> {{localize "CHAT.JumpToBottom"}}</a>
</div>
{{#unless isStream}}
<div id="chat-controls" class="flexrow">
<label class="chat-control-icon"><i class="fas fa-dice-d20"></i></label>
<select aria-label="{{localize 'CHAT.RollVisibility'}}" class="roll-type-select" name="rollMode">
{{selectOptions rollModes selected=rollMode localize=true}}
</select>
{{#if user.isGM}}
<div class="control-buttons">
<a aria-label="{{localize 'CHAT.Export'}}" role="button" class="export-log" data-tooltip="CHAT.Export"><i class="fas fa-save"></i></a>
<a aria-label="{{localize 'CHAT.Clear'}}" role="button" class="delete chat-flush" data-tooltip="CHAT.Clear"><i class="fas fa-trash"></i></a>
</div>
{{/if}}
</div>
<form id="chat-form">
<textarea id="chat-message" autocomplete="off" title="{{localize 'CHAT.Chat'}}"></textarea>
</form>
{{/unless}}
</section>

View File

@@ -0,0 +1,22 @@
<li class="chat-message message flexcol {{cssClass}}" data-message-id="{{message._id}}" {{#if borderColor}}style="border-color:{{borderColor}}"{{/if}}>
<header class="message-header flexrow">
<h4 class="message-sender">{{alias}}</h4>
<span class="message-metadata">
<time class="message-timestamp">{{timeSince message.timestamp}}</time>
{{#if canDelete}}
<a aria-label="{{localize 'Delete'}}" class="message-delete"><i class="fas fa-trash"></i></a>
{{/if}}
</span>
{{#if isWhisper}}
<span class="whisper-to">{{localize 'CHAT.To'}}: {{whisperTo}}</span>
{{/if}}
{{#if message.flavor}}
<span class="flavor-text">{{{message.flavor}}}</span>
{{/if}}
</header>
<div class="message-content">
{{{message.content}}}
</div>
</li>

View File

@@ -0,0 +1,130 @@
<section class="{{cssClass}} directory flexcol" id="{{cssId}}" data-tab="{{tabName}}">
<header class="combat-tracker-header">
{{#if user.isGM}}
<nav class="encounters flexrow" aria-label="{{localize 'COMBAT.NavLabel'}}">
<a class="combat-button combat-create" aria-label="{{localize 'COMBAT.Create'}}" role="button" data-tooltip="COMBAT.Create">
<i class="fas fa-plus"></i>
</a>
{{#if combatCount}}
<a class="combat-button combat-cycle" aria-label="{{localize 'COMBAT.EncounterPrevious'}}" role="button" data-tooltip="COMBAT.EncounterPrevious"
{{#if previousId}}data-document-id="{{previousId}}"{{else}}disabled{{/if}}>
<i class="fas fa-caret-left"></i>
</a>
<h4 class="encounter">{{localize "COMBAT.Encounter"}} {{currentIndex}} / {{combatCount}}</h4>
<a class="combat-button combat-cycle" aria-label="{{localize 'COMBAT.EncounterNext'}}" role="button" data-tooltip="COMBAT.EncounterNext"
{{#if nextId}}data-document-id="{{nextId}}"{{else}}disabled{{/if}}>
<i class="fas fa-caret-right"></i>
</a>
{{/if}}
<a class="combat-button combat-control" aria-label="{{localize 'COMBAT.Delete'}}" role="button" data-tooltip="COMBAT.Delete" data-control="endCombat" {{#unless combatCount}}disabled{{/unless}}>
<i class="fas fa-trash"></i>
</a>
</nav>
{{/if}}
<div class="encounter-controls flexrow {{#if hasCombat}}combat{{/if}}">
{{#if user.isGM}}
<a class="combat-button combat-control" aria-label="{{localize 'COMBAT.RollAll'}}" role="button" data-tooltip="COMBAT.RollAll" data-control="rollAll" {{#unless turns}}disabled{{/unless}}>
<i class="fas fa-users"></i>
</a>
<a class="combat-button combat-control" aria-label="{{localize 'COMBAT.RollNPC'}}" role="button" data-tooltip="COMBAT.RollNPC" data-control="rollNPC" {{#unless turns}}disabled{{/unless}}>
<i class="fas fa-users-cog"></i>
</a>
{{/if}}
{{#if combatCount}}
{{#if combat.round}}
<h3 class="encounter-title noborder">{{localize 'COMBAT.Round'}} {{combat.round}}</h3>
{{else}}
<h3 class="encounter-title noborder">{{localize 'COMBAT.NotStarted'}}</h3>
{{/if}}
{{else}}
<h3 class="encounter-title noborder">{{localize "COMBAT.None"}}</h3>
{{/if}}
{{#if user.isGM}}
<a class="combat-button combat-control" aria-label="{{localize 'COMBAT.InitiativeReset'}}" role="button" data-tooltip="COMBAT.InitiativeReset" data-control="resetAll"
{{#unless hasCombat}}disabled{{/unless}}>
<i class="fas fa-undo"></i>
</a>
<a class="combat-button combat-control" aria-label="{{localize 'labels.scope'}}" role="button" data-tooltip="{{labels.scope}}"
data-control="toggleSceneLink" {{#unless hasCombat}}disabled{{/unless}}>
<i class="fas fa-{{#unless linked}}un{{/unless}}link"></i>
</a>
{{/if}}
<a class="combat-button combat-settings" aria-label="{{localize 'COMBAT.Settings'}}" role="button" data-tooltip="COMBAT.Settings" data-control="trackerSettings">
<i class="fas fa-cog"></i>
</a>
</div>
</header>
<ol id="combat-tracker" class="directory-list">
{{#each turns}}
<li class="combatant actor directory-item flexrow {{this.css}}" data-combatant-id="{{this.id}}">
<img class="token-image" data-src="{{this.img}}" alt="{{this.name}}"/>
<div class="token-name flexcol">
<h4>{{this.name}}</h4>
<div class="combatant-controls flexrow">
{{#if ../user.isGM}}
<a class="combatant-control {{#if this.hidden}}active{{/if}}" aria-label="{{localize 'COMBAT.ToggleVis'}}" role="button" data-tooltip="COMBAT.ToggleVis" data-control="toggleHidden">
<i class="fas fa-eye-slash"></i>
</a>
<a class="combatant-control {{#if this.defeated}}active{{/if}}" aria-label="{{localize 'COMBAT.ToggleDead'}}" role="button" data-tooltip="COMBAT.ToggleDead" data-control="toggleDefeated">
<i class="fas fa-skull"></i>
</a>
{{/if}}
{{#if this.canPing}}
<a class="combatant-control" aria-label="{{localize 'COMBAT.PingCombatant'}}" role="button" data-tooltip="COMBAT.PingCombatant" data-control="pingCombatant">
<i class="fa-solid fa-bullseye-arrow"></i>
</a>
{{/if}}
{{#unless ../user.isGM}}
<a class="combatant-control" aria-label="{{localize 'COMBAT.PanToCombatant'}}" role="button" data-tooltip="COMBAT.PanToCombatant" data-control="panToCombatant">
<i class="fa-solid fa-arrows-to-eye"></i>
</a>
{{/unless}}
<div class="token-effects">
{{#each this.effects}}
<img class="token-effect" src="{{this}}"/>
{{/each}}
</div>
</div>
</div>
{{#if this.hasResource}}
<div class="token-resource">
<span class="resource">{{this.resource}}</span>
</div>
{{/if}}
<div class="token-initiative">
{{#if this.hasRolled}}
<span class="initiative">{{this.initiative}}</span>
{{else if this.owner}}
<a class="combatant-control roll" aria-label="{{localize 'COMBAT.InitiativeRoll'}}" role="button" data-tooltip="COMBAT.InitiativeRoll" data-control="rollInitiative"></a>
{{/if}}
</div>
</li>
{{/each}}
</ol>
<nav id="combat-controls" class="directory-footer flexrow" data-tooltip-direction="UP">
{{#if hasCombat}}
{{#if user.isGM}}
{{#if round}}
<a class="combat-control" aria-label="{{localize 'COMBAT.RoundPrev'}}" role="button" data-tooltip="COMBAT.RoundPrev" data-control="previousRound"><i class="fas fa-step-backward"></i></a>
<a class="combat-control" aria-label="{{localize 'COMBAT.TurnPrev'}}" role="button" data-tooltip="COMBAT.TurnPrev" data-control="previousTurn"><i class="fas fa-arrow-left"></i></a>
<a class="combat-control center" aria-label="{{localize 'COMBAT.End'}}" role="button" data-control="endCombat">{{localize 'COMBAT.End'}}</a>
<a class="combat-control" aria-label="{{localize 'COMBAT.TurnNext'}}" role="button" data-tooltip="COMBAT.TurnNext" data-control="nextTurn"><i class="fas fa-arrow-right"></i></a>
<a class="combat-control" aria-label="{{localize 'COMBAT.RoundNext'}}" role="button" data-tooltip="COMBAT.RoundNext" data-control="nextRound"><i class="fas fa-step-forward"></i></a>
{{else}}
<a class="combat-control center" aria-label="{{localize 'COMBAT.Begin'}}" role="button" data-control="startCombat">{{localize 'COMBAT.Begin'}}</a>
{{/if}}
{{else if control}}
<a class="combat-control" aria-label="{{localize 'COMBAT.TurnPrev'}}" role="button" data-tooltip="COMBAT.TurnPrev" data-control="previousTurn"><i class="fas fa-arrow-left"></i></a>
<a class="combat-control center" aria-label="{{localize 'COMBAT.TurnEnd'}}" role="button" data-control="nextTurn">{{localize 'COMBAT.TurnEnd'}}</a>
<a class="combat-control" aria-label="{{localize 'COMBAT.TurnNext'}}" role="button" data-tooltip="COMBAT.TurnNext" data-control="nextTurn"><i class="fas fa-arrow-right"></i></a>
{{/if}}
{{/if}}
</nav>
</section>

View File

@@ -0,0 +1,31 @@
<form id="compendium-create">
<p>{{localize "COMPENDIUM.CreateHint"}}</p>
<div class="form-group">
<label>{{localize "Name"}}</label>
<div class="form-fields">
<input type="text" name="label" placeholder="{{localize 'COMPENDIUM.Name'}}" autofocus>
</div>
</div>
<div class="form-group">
<label>{{localize "COMPENDIUM.Type"}}</label>
<div class="form-fields">
<select name="type">
{{selectOptions types valueAttr="value" labelAttr="label"}}
</select>
</div>
<p class="notes">{{localize "COMPENDIUM.TypeHint"}}</p>
</div>
{{#if hasFolders}}
<div class="form-group">
<label>{{ localize "DOCUMENT.Folder" }}</label>
<div class="form-fields">
<select name="folder">
{{selectOptions folders valueAttr="id" labelAttr="name" selected=folder blank=""}}
</select>
</div>
</div>
{{/if}}
</form>

View File

@@ -0,0 +1,38 @@
<section class="{{cssClass}} directory flexcol" id="{{cssId}}" data-tab="{{tabName}}">
<!-- Directory Header -->
<header class="directory-header">
<div class="header-actions action-buttons flexrow">
{{#if canCreateEntry}}
<button class="create-entry"><i class="{{sidebarIcon}}"></i> {{localize 'SIDEBAR.Create' type=label}}</button>
{{/if}}
{{#if canCreateFolder}}
<button class="create-folder"><i class="{{folderIcon}}"></i> {{localize 'FOLDER.Create'}}</button>
{{/if}}
</div>
<div class="header-search flexrow">
<a class="header-control filter" aria-label="{{localize 'COMPENDIUM.FilterDocuments'}}" role="button" data-tooltip="COMPENDIUM.FilterDocuments"><i class="fa-solid {{#if filtersActive}}fa-filter-list{{else}}fa-filter{{/if}}"></i></a>
<input type="search" name="search" value="" placeholder="{{localize 'SIDEBAR.Search' types=labelPlural}}" autocomplete="off"/>
<a class="header-control toggle-sort" aria-label="{{localize sortTooltip}}" role="button" data-tooltip="{{localize sortTooltip}}"><i class="fa-solid {{sortIcon}}"></i></a>
<a class="header-control collapse-all" aria-label="{{localize 'FOLDER.Collapse'}}" role="button" data-tooltip="FOLDER.Collapse"><i class="fa-duotone fa-folder-tree"></i></a>
</div>
</header>
<!-- Directories List -->
<ol class="directory-list">
{{#each tree.children}}
{{> (lookup @root "folderPartial") node=this folder=this.folder}}
{{/each}}
{{#each tree.entries}}
{{> (lookup @root "entryPartial")}}
{{/each}}
</ol>
<!-- Directory Footer -->
<footer class="directory-footer action-buttons {{#if unavailable}}warning{{/if}}">
{{~#if unavailable}}
<i class="fa-solid fa-triangle-exclamation"></i>
<a class="show-issues">{{localize "SUPPORT.UnavailableDocuments" count=unavailable document=label}}</a>
{{/if~}}
</footer>
</section>

View File

@@ -0,0 +1,32 @@
<form id="document-create" autocomplete="off">
<div class="form-group">
<label>{{localize "Name"}}</label>
<div class="form-fields">
<input type="text" name="name" placeholder="{{defaultName}}" autofocus>
</div>
</div>
{{#if hasTypes}}
<div class="form-group">
<label>{{localize "Type"}}</label>
<div class="form-fields">
<select name="type">
{{selectOptions types selected=type}}
</select>
</div>
</div>
{{/if}}
{{#if hasFolders}}
<div class="form-group">
<label>{{ localize "DOCUMENT.Folder" }}</label>
<div class="form-fields">
<select name="folder">
{{selectOptions folders selected=folder blank="" valueAttr="id" labelAttr="name"}}
</select>
</div>
</div>
{{/if}}
{{{content}}}
</form>

View File

@@ -0,0 +1,38 @@
<section class="{{cssClass}} directory flexcol" id="{{cssId}}" data-tab="{{tabName}}">
<!-- Directory Header -->
<header class="directory-header">
<div class="header-actions action-buttons flexrow">
{{#if canCreateEntry}}
<button class="create-document create-entry"><i class="{{sidebarIcon}}"></i> {{localize 'SIDEBAR.Create' type=label}}</button>
{{/if}}
{{#if canCreateFolder }}
<button class="create-folder"><i class="{{folderIcon}}"></i> {{localize 'FOLDER.Create'}}</button>
{{/if}}
</div>
<div class="header-search flexrow">
<a class="header-control toggle-search-mode" aria-label="{{localize searchTooltip}}" role="button" data-tooltip="{{localize searchTooltip}}"><i class="fas {{searchIcon}}"></i></a>
<input type="search" name="search" value="" aria-label="{{localize 'SIDEBAR.Search' types=labelPlural}}" placeholder="{{localize 'SIDEBAR.Search' types=labelPlural}}" autocomplete="off"/>
<a class="header-control toggle-sort" aria-label="{{localize sortTooltip}}" role="button" data-tooltip="{{localize sortTooltip}}"><i class="fa-solid {{sortIcon}}"></i></a>
<a class="header-control collapse-all" aria-label="{{localize 'FOLDER.Collapse'}}" role="button" data-tooltip="FOLDER.Collapse"><i class="fa-duotone fa-folder-tree"></i></a>
</div>
</header>
<!-- Directories List -->
<ol class="directory-list">
{{~#each tree.children}}
{{> (lookup @root "folderPartial") node=this folder=this.folder}}
{{/each}}
{{#each tree.entries}}
{{> (lookup @root "entryPartial")}}
{{/each~}}
</ol>
<!-- Directory Footer -->
<footer class="directory-footer action-buttons {{#if unavailable}}warning{{/if}}">
{{~#if unavailable}}
<i class="fa-solid fa-triangle-exclamation"></i>
<a class="show-issues">{{localize "SUPPORT.UnavailableDocuments" count=unavailable document=label}}</a>
{{/if~}}
</footer>
</section>

View File

@@ -0,0 +1,26 @@
<form autocomplete="off">
<input type="hidden" name="type" value="{{folder.type}}"/>
<input type="hidden" name="folder" value="{{folder.folder}}"/>
<div class="form-group">
<label>{{localize "FOLDER.Name"}}</label>
<div class="form-fields">
<input type="text" name="name" placeholder="{{newName}}" value="{{name}}" autofocus>
</div>
</div>
<div class="form-group">
<label>{{localize "FOLDER.Color"}}</label>
<div class="form-fields">
<color-picker name="color" value="{{folder.color}}"></color-picker>
</div>
</div>
<div class="form-group">
<label>{{localize "FOLDER.SortMode"}}</label>
<div class="form-fields">
{{radioBoxes "sorting" sortingModes checked=folder.sorting localize=true}}
</div>
</div>
<button type="submit"><i class="fas fa-check"></i> {{submitText}}</button>
</form>

View File

@@ -0,0 +1,28 @@
<li class="directory-item folder flexcol {{#unless folder.expanded}}collapsed{{/unless}}"
data-folder-id="{{folder.id}}" data-uuid={{folder.uuid}} data-folder-depth="{{node.depth}}">
<header class="folder-header flexrow" {{#if folder.color}}style="background-color: {{folder.color.css}}"{{/if}}>
<h3 class="noborder"><i class="fas fa-folder-open fa-fw"></i>{{folder.name}}</h3>
{{#if @root.canCreateFolder}}
<a class="create-button create-folder">
<i class="{{@root.folderIcon}}"></i>
<i class="fas fa-plus"></i>
</a>
{{/if}}
{{#if @root.canCreateEntry}}
<a class="create-button create-entry">
<i class="{{@root.sidebarIcon}}"></i>
<i class="fas fa-plus"></i>
</a>
{{/if}}
</header>
<ol class="subdirectory" {{#if folder.color}}style="border-left-color: {{folder.color.css}}"{{/if}}>
{{~#each node.children}}
{{> (lookup @root "folderPartial") node=this folder=this.folder}}
{{/each}}
{{#each node.entries}}
{{> (lookup @root "entryPartial")}}
{{/each~}}
</ol>
</li>

View File

@@ -0,0 +1,8 @@
<li class="directory-item document {{@root.documentCls}} flexrow" data-entry-id="{{this._id}}" data-document-id="{{this._id}}">
{{#if this.thumb}}
<img class="thumbnail" title="{{this.name}}" alt="{{this.name}}" data-src="{{this.thumb}}"/>
{{else if this.img}}
<img class="thumbnail" title="{{this.name}}" alt="{{this.name}}" data-src="{{this.img}}"/>
{{/if}}
<h4 class="entry-name document-name"><a>{{this.name}}</a></h4>
</li>

View File

@@ -0,0 +1,6 @@
<li class="directory-item document {{@root.documentCls}} flexrow" data-entry-id="{{this.id}}" data-document-id="{{this.id}}">
{{#if this.thumbnail}}
<img class="thumbnail" title="{{this.name}}" data-src="{{this.thumbnail}}"/>
{{/if}}
<h4 class="entry-name document-name"><a>{{this.name}}</a></h4>
</li>

View File

@@ -0,0 +1,3 @@
<li class="directory-item entry flexrow" data-entry-id="{{this.id}}">
<h4 class="entry-name"><a>{{this.name}}</a></h4>
</li>

View File

@@ -0,0 +1,14 @@
{{#with (lookup @root.packContext collection)}}
<li class="directory-item compendium {{@root.documentCls}} {{#if locked}}locked{{/if}} {{#if hidden}}hidden{{/if}}
flexcol" data-pack="{{collection}}" data-entry-id="{{collection}}">
{{#if banner}}<img class="compendium-banner" data-src="{{banner}}">{{/if}}
<h3 class="entry-name compendium-name"><i class="{{icon}}"></i> {{localize label}}</h3>
<div class="status-icons flexrow">
{{#if this.customOwnership}}<i class="fa-solid fa-eye"></i>{{/if}}
{{#if this.locked}}<i class="fa-solid fa-lock"></i>{{/if}}
</div>
<footer class="compendium-footer">
<span class="source"><i class="fa-solid {{sourceIcon}}"></i> {{name}}</span>
</footer>
</li>
{{/with}}

View File

@@ -0,0 +1,32 @@
<li class="directory-item document {{@root.documentCls}} flexrow {{this.css}}" data-entry-id="{{this._id}}" data-document-id="{{this._id}}">
<header class="playlist-header flexrow">
<h4 class="entry-name playlist-name">{{this.name}} <i class="collapse fa fa-angle-{{#if this.expanded}}down{{else}}up{{/if}}"></i></h4>
<div class="sound-controls playlist-controls flexrow">
{{#unless this.playing}}
{{#if this.isOwner}}
<a class="sound-control fa-solid fa-plus" data-action="sound-create"
data-tooltip="PLAYLIST.SoundCreate"></a>
{{/if}}
{{/unless}}
<a class="sound-control {{#unless this.isOwner}}disabled{{/unless}} {{this.modeIcon}}"
data-action="playlist-mode" data-tooltip="{{this.modeTooltip}}"></a>
{{#if this.playing}}
<a class="sound-control fa-solid fa-backward {{this.controlCSS}}" data-action="playlist-backward"
data-tooltip="PLAYLIST.Backward"></a>
<a class="sound-control fa-solid fa-forward {{this.controlCSS}}" data-action="playlist-forward"
data-tooltip="PLAYLIST.Forward"></a>
<a class="sound-control fa-solid fa-square {{this.controlCSS}}" data-action="playlist-stop"
data-tooltip="PLAYLIST.Stop"></a>
{{else}}
<a class="sound-control fa-solid fa-play {{this.controlCSS}}" data-action="playlist-play"
data-tooltip="PLAYLIST.Play"></a>
{{/if}}
</div>
</header>
<ol class="playlist-sounds">
{{#each this.sounds as |sound|}}
{{> soundPartial sound=sound playback=false}}
{{/each}}
</ol>
</li>

View File

@@ -0,0 +1,122 @@
{{#*inline "soundPartial"}}
<li class="sound flexrow {{sound.css}}" data-playlist-id="{{sound.playlistId}}" data-sound-id="{{sound._id}}">
<h4 class="sound-name">{{sound.name}}</h4>
<div class="sound-controls flexrow">
{{#if sound.isOwner}}
<a class="sound-control fa-solid fa-sync {{#unless sound.repeat}}inactive{{/unless}} {{sound.controlCSS}}"
data-action="sound-repeat" data-tooltip="PLAYLIST.SoundLoop"></a>
{{/if}}
{{#if sound.playing}}
<a class="sound-control {{sound.playIcon}} {{sound.controlCSS}}" data-action="sound-stop"
data-tooltip="PLAYLIST.SoundStop"></a>
{{else}}
<a class="sound-control {{sound.playIcon}} {{sound.controlCSS}}" data-action="sound-play"
data-tooltip="{{sound.playTitle}}"></a>
{{/if}}
</div>
{{#if playback}}
<div class="sound-playback flexrow">
<div class="sound-timer">
<span class="current">{{sound.currentTime}}</span>
<span class="sep">/</span>
<span class="duration">{{sound.durationTime}}</span>
</div>
<i class="volume-icon fas fa-volume-down"></i>
<input class="sound-volume" type="range"
value="{{sound.lvolume}}" min="0" max="1" step="0.05" data-tooltip="{{sound.volumeTooltip}}">
<a class="sound-control pause {{sound.pauseIcon}} {{sound.controlCSS}} {{#if sound.isPaused}}disabled{{/if}}"
data-action="sound-pause" data-tooltip="PLAYLIST.SoundPause"></a>
</div>
{{/if}}
</li>
{{/inline}}
{{#*inline "playingPartial"}}
{{#if showPlaying}}
<div id="currently-playing" class="global-control flexrow {{currentlyPlaying.class}}">
<header class="playlist-header flexrow">
<h4>{{localize "PLAYLIST.CurrentlyPlaying"}}</h4>
<a class="pin fa-solid fa-caret-{{currentlyPlaying.pin.caret}}"
data-tooltip="{{localize currentlyPlaying.pin.label}}"></a>
</header>
<ol class="playlist-sounds">
{{#each playingSounds as |sound|}}
{{> soundPartial sound=sound playback=true}}
{{/each}}
</ol>
</div>
{{/if}}
{{/inline}}
<section class="{{cssClass}} directory flexcol" id="{{cssId}}" data-tab="{{tabName}}">
<!-- Directory Header -->
<header class="directory-header">
<div class="header-actions action-buttons flexrow">
{{#if canCreateEntry}}
<button class="create-document create-entry"><i class="{{sidebarIcon}}"></i> {{localize 'SIDEBAR.Create' type=label}}</button>
{{/if}}
{{#if canCreateFolder }}
<button class="create-folder"><i class="{{folderIcon}}"></i> {{localize 'FOLDER.Create'}}</button>
{{/if}}
</div>
<div class="header-search flexrow">
<a class="header-control toggle-search-mode" aria-label="{{localize searchTooltip}}" role="button" data-tooltip="{{localize searchTooltip}}"><i class="fas {{searchIcon}}"></i></a>
<input type="search" name="search" value="" placeholder="{{localize 'SIDEBAR.Search' types=labelPlural }}" autocomplete="off">
<a class="header-control toggle-sort" aria-label="{{localize sortTooltip}}" role="button" data-tooltip="{{localize sortTooltip}}"><i class="fa-solid {{sortIcon}}"></i></a>
<a class="header-control collapse-all" aria-label="{{localize 'FOLDER.Collapse'}}" role="button" data-tooltip="FOLDER.Collapse"><i class="fa-duotone fa-folder-tree"></i></a>
</div>
</header>
<div id="global-volume" class="global-control flexrow {{#unless volumeExpanded}}collapsed{{/unless}}">
<header class="playlist-header flexrow">
<h4>{{localize "PLAYLIST.VOLUME.CONTROLS"}} <i class="collapse fa fa-angle-{{#if volumeExpanded}}down{{else}}up{{/if}}"></i></h4>
</header>
<ol class="playlist-sounds">
<li class="sound flexrow" data-tooltip="AUDIO.CHANNELS.MUSIC.tooltip">
<h4>{{localize "AUDIO.CHANNELS.MUSIC.label"}}</h4>
<i class="volume-icon fas fa-volume-down"></i>
<input class="global-volume-slider" name="globalPlaylistVolume" type="range"
value="{{playlistModifier}}" min="0" max="1" step="0.05" data-tooltip="{{playlistTooltip}}"
aria-label="{{localize 'AUDIO.CHANNELS.MUSIC.label'}}">
</li>
<li class="sound flexrow" data-tooltip="AUDIO.CHANNELS.ENVIRONMENT.tooltip">
<h4>{{localize "AUDIO.CHANNELS.ENVIRONMENT.label"}}</h4>
<i class="volume-icon fas fa-volume-down"></i>
<input class="global-volume-slider" name="globalAmbientVolume" type="range" value="{{ambientModifier}}"
min="0" max="1" step="0.05" data-tooltip="{{ambientTooltip}}"
aria-label="{{localize 'AUDIO.CHANNELS.ENVIRONMENT.label'}}">
</li>
<li class="sound flexrow" data-tooltip="AUDIO.CHANNELS.INTERFACE.tooltip">
<h4>{{localize "AUDIO.CHANNELS.INTERFACE.label"}}</h4>
<i class="volume-icon fas fa-volume-down"></i>
<input class="global-volume-slider" name="globalInterfaceVolume" type="range"
value="{{interfaceModifier}}" min="0" max="1" step="0.05" data-tooltip="{{interfaceTooltip}}"
aria-label="{{localize 'AUDIO.CHANNELS.INTERFACE.label'}}">
</li>
</ol>
</div>
{{#if currentlyPlaying.location.top}}
{{> playingPartial}}
{{/if}}
<!-- Directories List -->
<ol class="directory-list">
{{~#each tree.children}}
{{> (lookup @root "folderPartial") node=this folder=this.folder}}
{{/each}}
{{#each tree.entries}}
{{> (lookup @root "entryPartial")}}
{{/each~}}
</ol>
{{#if currentlyPlaying.location.bottom}}
{{> playingPartial}}
{{/if}}
<!-- Directory Footer -->
<footer class="directory-footer"></footer>
</section>

View File

@@ -0,0 +1,4 @@
<li class="directory-item document {{@root.documentCls}} flexrow" data-entry-id="{{this.id}}"
data-document-id="{{this.id}}" data-background-image="{{this.thumbnail}}">
<h3 class="document-name entry-name noborder"><a>{{this.name}}</a></h3>
</li>

View File

@@ -0,0 +1,88 @@
<section class="{{cssClass}}" id="{{cssId}}" data-tab="{{tabName}}">
<h2>{{localize 'SETTINGS.InfoHeader'}}</h2>
<ul id="game-details">
<li class="version">Foundry Virtual Tabletop
<span>
{{#if coreUpdate}}
<i class="notification-pip update fas fa-exclamation-circle" data-action="core-update" data-tooltip="{{ coreUpdate }}"></i>
{{/if}}
{{ versionDisplay }}
</span>
</li>
<li class="build">{{localize "MODMANAGE.Build"}} <span>{{ release.build }}</span></li>
<hr />
<li class="system flexrow">
<span class="system-title">{{system.title}}</span>
<span class="system-info">
{{#if systemUpdate}}
<i class="notification-pip update fas fa-exclamation-circle" data-action="system-update" data-tooltip="{{ systemUpdate }}"></i>
{{/if}}
{{system.version}}
</span>
</li>
<li class="modules">{{localize "MODMANAGE.FilterActive"}} <span>{{ modules }}</span></li>
{{#if isDemo}}
<li class="demo">{{ localize "SETTINGS.DemoMode" }}</li>
{{/if}}
</ul>
<h2>{{localize 'SETTINGS.SettingsHeader'}}</h2>
<div id="settings-game">
<button data-action="configure">
<i class="fas fa-cogs"></i> {{localize 'SETTINGS.Configure'}}
</button>
<button data-action="controls">
<i class="fas fa-gamepad"></i> {{localize 'SETTINGS.Keybindings'}}
</button>
<button data-action="modules">
<i class="fas fa-cube"></i>
{{#if canConfigure}}{{localize 'SETTINGS.ManageModules'}}
{{else}}{{localize "SETTINGS.ViewModules"}}
{{/if}}
</button>
{{#if canEditWorld }}
<button data-action="world">
<i class="fas fa-globe"></i> {{localize 'SETUP.WorldEdit'}}
</button>
{{/if}}
{{#if canManagePlayers}}
<button data-action="players">
<i class="fas fa-users"></i> {{localize 'SETTINGS.Players'}}
</button>
{{/if}}
<button data-action="tours">
<i class="fas fa-person-hiking"></i> {{localize 'SETTINGS.Tours'}}
</button>
</div>
<h2>{{localize 'SETTINGS.DocsHeader'}}</h2>
<div id="settings-documentation">
<button data-action="support">
<i class="fas fa-hands-helping"></i> {{localize 'SETTINGS.Support'}}
{{#if issues}}({{issues}}){{/if}}
</button>
<button data-action="docs">
<i class="fas fa-book"></i> {{localize 'SETTINGS.Docs'}}
</button>
<button data-action="wiki">
<i class="fas fa-landmark"></i> {{localize 'SETTINGS.Wiki'}}
</button>
</div>
<h2>{{localize 'SETTINGS.AccessHeader'}}</h2>
<div id="settings-access">
{{#if user.isGM }}
<button data-action="invitations">
<i class="fas fa-wifi"></i> {{localize 'SETTINGS.Invite'}}
</button>
{{/if}}
<button data-action="logout">
<i class="fas fa-door-closed"></i> {{localize 'SETTINGS.Logout'}}
</button>
{{#if canReturnSetup}}
<button data-action="setup">
<i class="fas fa-home"></i> {{localize 'GAME.ReturnSetup'}}
</button>
{{/if}}
</div>
</section>

View File

@@ -0,0 +1,16 @@
<div id="sidebar" class="app">
<nav id="sidebar-tabs" class="tabs" role="tablist" data-tooltip-direction="DOWN" aria-label="{{localize 'SIDEBAR.NavLabel'}}">
{{#each tabs as |tab id|}}
<a class="item" data-tab="{{id}}" aria-label="{{localize tab.tooltip}}" aria-controls="{{id}}" role="tab" data-tooltip="{{tab.tooltip}}">
<i class="{{tab.icon}}"></i>
{{{tab.notification}}}
</a>
{{/each}}
<a class="collapse" aria-label="{{localize 'SIDEBAR.CollapseToggle'}}" role="button" data-tooltip="{{localize 'SIDEBAR.CollapseToggle'}}">
<i class="fas fa-caret-right"></i>
</a>
</nav>
{{#each tabs as |tab id|}}
<template class="tab" role="tabpanel" id="{{id}}" data-tab="{{id}}"></template>
{{/each}}
</div>