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,106 @@
{{#*inline "contentTreeNode"}}
<div class="node">
<h4 class="folder {{node.state}}" data-document-id="{{node.id}}">
<i class="fa-solid fa-folder-open"></i> {{node.name}}
<a class="control" data-action="remove"><i class="fa-solid fa-xmark"></i></a>
</h4>
{{#each node.children as |child|}}
{{> contentTreeNode node=child}}
{{/each}}
<ol class="document-list">
{{#each node.documents as |document|}}
<h4 class="document {{document.state}}" data-tooltip="{{localize document.stateLabel}}" data-document-id="{{document.id}}">
{{document.name}}
<a class="control" data-action="remove"><i class="fa-solid fa-xmark"></i></a>
</h4>
{{/each}}
</ol>
</div>
{{/inline}}
<form autocomplete="off">
<nav class="tabs sheet-tabs" data-group="primary" aria-role="{{localize 'SHEETS.FormNavLabel'}}">
<a class="item" data-tab="summary" data-group="primary">
<i class="fa-solid fa-feather-pointed"></i> {{localize "ADVENTURE.ExportTabSummary"}}
</a>
<a class="item" data-tab="contents" data-group="primary">
<i class="fa-solid fa-folder-tree"></i> {{localize "ADVENTURE.ExportTabContents"}}
</a>
</nav>
<section class="tab" data-group="primary" data-tab="summary">
<div class="form-group">
<label>{{localize "ADVENTURE.Name"}}</label>
<div class="form-fields">
<input type="text" name="name" value="{{adventure.name}}"/>
</div>
<p class="hint">{{ localize "ADVENTURE.NameHint" }}</p>
</div>
<div class="form-group">
<label>{{ localize "ADVENTURE.Image" }}:</label>
<div class="form-fields">
<file-picker name="img" type="image" value="{{adventure.img}}"></file-picker>
</div>
<p class="hint">{{ localize "ADVENTURE.ImageHint" }}</p>
</div>
<div class="form-group stacked">
<label>{{localize "ADVENTURE.Caption"}}</label>
<div class="form-fields">
<textarea name="caption">{{adventure.caption}}</textarea>
</div>
<p class="hint">{{ localize "ADVENTURE.CaptionHint" }}</p>
</div>
<div class="form-group stacked">
<label>{{localize "ADVENTURE.Description"}}</label>
{{editor adventure.description target="description" button=false engine="prosemirror" collaborate=false}}
<p class="hint">{{ localize "ADVENTURE.DescriptionHint" }}</p>
</div>
<div class="form-group">
<label>{{localize "FOLDER.DocumentSort"}}</label>
<div class="form-fields">
{{numberInput adventure.sort name="sort" step=1}}
</div>
<p class="hint">{{ localize "FOLDER.DocumentSortHint" }}</p>
</div>
</section>
<section class="tab contents" data-group="primary" data-tab="contents">
{{#each contentTree as |root|}}
<div class="document-type {{root.cssClass}}" data-document-type="{{root.documentName}}">
<h3 class="noborder">
<a class="control collapse" data-action="collapse"><i class="{{root.collapseIcon}}"></i></a>
<i class="{{root.icon}}"></i> {{root.name}} ({{root.documentCount}})
<a class="control clear" data-action="clear"><i class="fa-solid fa-trash"></i></a>
</h3>
<div class="included-content">
{{#each root.children}}
{{> contentTreeNode node=this}}
{{/each}}
<ol class="document-list">
{{#each root.documents as |document|}}
<h4 class="document {{document.state}}" data-tooltip="{{localize document.stateLabel}}" data-document-id="{{document.id}}">
{{document.name}}
<a class="control" data-action="remove"><i class="fa-solid fa-xmark"></i></a>
</h4>
{{/each}}
</ol>
</div>
</div>
{{else}}
<div class="drop-zone">
<label>{{localize "ADVENTURE.ExportDropZone"}}</label>
</div>
{{/each}}
</section>
<footer class="adventure-footer">
<button type="submit">
<i class="fas fa-upload"></i>
{{localize "ADVENTURE.ExportSubmit"}}
</button>
</footer>
</form>

View File

@@ -0,0 +1,53 @@
<form class="flexrow" autocomplete="off" data-pack="{{adventure.pack}}" data-adventure-id="{{adventure.id}}">
<header class="adventure-header">
<h1>{{adventure.name}}</h1>
</header>
<figure class="adventure-banner">
<img src="{{adventure.img}}" title="{{adventure.name}}" height="300"/>
<figcaption>{{{adventure.caption}}}</figcaption>
</figure>
<section class="adventure-overview">
<h2>{{localize "ADVENTURE.ImportHeaderOverview"}}</h2>
{{{adventure.description}}}
</section>
<section class="adventure-contents">
<section class="import-controls">
<h2>{{localize "ADVENTURE.ImportHeaderContents"}}</h2>
{{#if imported}}
<div class="form-group">
<label class="checkbox">
<input type="checkbox" name="importFields" value="all" title="{{ localize "ADVENTURE.ImportAll" }}"
checked>
{{ localize "ADVENTURE.ImportAll" }}
</label>
</div>
{{#each contents}}
<div class="form-group">
<label class="checkbox">
<input type="checkbox" name="importFields" value="{{ field }}" checked disabled
data-tooltip="{{ localize "ADVENTURE.ImportContent" label=label }}">
<i class="{{ icon }} fa-fw"></i>
{{ count }} {{ label }}
</label>
</div>
{{/each}}
{{else}}
<ul>
{{#each contents}}
<li><i class="{{this.icon}} fa-fw"></i> {{this.count}} {{this.label}}</li>
{{/each}}
</ul>
{{/if}}
</section>
</section>
<footer class="adventure-footer">
<button type="submit">
<i class="fas fa-download"></i>
{{localize "ADVENTURE.ImportSubmit"}}
</button>
</footer>
</form>

View File

@@ -0,0 +1,12 @@
<div id="{{id}}" class="app window-app {{classes}}" data-appid="{{appId}}">
<header class="window-header flexrow">
<h4 class="window-title">{{title}}</h4>
{{#each headerButtons}}
<a class="header-button control {{this.class}}" {{#if this.tooltip}}data-tooltip="{{this.tooltip}}"{{/if}}>
<i class="{{this.icon}}"></i>{{localize this.label}}
</a>
{{/each}}
</header>
<section class="window-content">
</section>
</div>

View File

@@ -0,0 +1,31 @@
<section>
<ol class="priority-list">
{{#each config}}
<li data-package-id="{{ packageId }}">
<input type="hidden" name="{{ packageId }}.priority" value="{{ priority }}" data-dtype="Number">
<label>{{ title }}</label>
<div class="form-fields">
<label>
{{ localize "COMPENDIUM.ART.CONFIG.Portraits" }}
<input type="checkbox" name="{{ packageId }}.portraits" {{ checked portraits }}>
</label>
<label>
{{ localize "COMPENDIUM.ART.CONFIG.Tokens" }}
<input type="checkbox" name="{{ packageId }}.tokens" {{ checked tokens }}>
</label>
</div>
<div class="priority-adjust">
<button type="button" data-action="priority" data-increase
aria-label="{{ localize "COMPENDIUM.ART.CONFIG.PriorityIncrease" }}">
<i class="fas fa-angle-up"></i>
</button>
<button type="button" data-action="priority" data-decrease
aria-label="{{ localize "COMPENDIUM.ART.CONFIG.PriorityDecrease" }}">
<i class="fas fa-angle-down"></i>
</button>
</div>
</li>
{{/each}}
</ol>
<p class="hint">{{ localize "COMPENDIUM.ART.CONFIG.Hint" }}</p>
</section>

View File

@@ -0,0 +1,45 @@
<div class="compendium directory flexcol" data-pack="{{collection.collection}}">
<!-- Directory Header -->
<header class="directory-header flexcol">
<div class="header-banner" {{#if collection.banner}}style="background-image: url('{{collection.banner}}')"{{/if}}>
<h3 class="entry-name compendium-name"><i class="{{sidebarIcon}}" ></i> {{name}}</h3>
</div>
<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" data-tooltip="{{localize searchTooltip}}"><i class="fas {{searchIcon}}"></i></a>
<input type="search" name="search" value="" placeholder="{{ localize 'FILES.Search' }}" autocomplete="off"/>
<a class="header-control toggle-sort" data-tooltip="{{localize sortTooltip}}"><i class="fa-solid {{sortIcon}}"></i></a>
<a class="header-control collapse-all" data-tooltip="{{localize 'FOLDER.Collapse'}}"><i class="fa-duotone fa-folder-tree"></i></a>
</div>
</header>
<!-- Directory Contents -->
<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 -->
{{#if footerButtons.length}}
<footer class="directory-footer flexrow">
{{#each footerButtons}}
<button type="button" data-action="{{this.action}}">
<i class="{{this.icon}}"></i>
{{localize this.label}}
</button>
{{/each}}
</footer>
{{/if}}
</div>

View File

@@ -0,0 +1 @@
<iframe id="docs" src="{{src}}" width="100%" height="100%"/>

View File

@@ -0,0 +1,166 @@
<form class="standard-form {{ cssClass }}" autocomplete="off" enctype="multipart/form-data">
<header class="filepicker-header flexcol">
<nav class="tabs" aria-role="{{localize 'SHEETS.FormNavLabel'}}">
{{#each sources as |source id|}}
<a class="item" data-tab="{{id}}"><i class="{{source.icon}}"></i> {{source.label}}</a>
{{/each}}
</nav>
<div class="form-group current-dir">
<button type="button" class="back" data-action="back" {{#unless canGoBack}}disabled{{/unless}}>
<i class="fas fa-level-up-alt fa-flip-horizontal fa-fw"></i>
</button>
<div class="form-fields">
<input type="text" name="target" value="{{target}}">
</div>
{{#if user.isGM}}
{{#if canUpload}}
<button type="button" data-action="mkdir" title="{{ localize "FILES.CreateDirectory" }}">
<i class="fas fa-folder-plus"></i>
</button>
{{/if}}
<button class="privacy" type="button" data-action="toggle-privacy" title="{{ localize "FILES.TogglePrivacy" }}">
<i class="fas fa-eye-slash"></i>
</button>
{{/if}}
</div>
<div class="form-group favorites">
<label>
<span>{{ localize "FILES.FavoritesLabel" }} </span>
<a class="fas fa-plus" data-action="setFavorite" data-tooltip="{{localize 'FILES.AddFavorite'}}"></a>
</label>
<div class="form-fields paths tags">
{{#each favorites }}
<span class="path tag">
<a class="link" data-tooltip="{{ this.path }}" data-source="{{ this.source }}" data-path="{{ this.path }}" data-action="goToFavorite">{{ this.label }}</a>
<a class="remove fa-solid fa-trash" data-tooltip="Remove from favorites" data-source="{{ this.source }}" data-path="{{ this.path }}" data-action="removeFavorite"></a>
</span>
{{/each}}
</div>
</div>
{{#if isS3}}
<div class="form-group bucket">
<label>{{ localize "FILES.S3Label" }}</label>
<select name="bucket">
{{selectOptions buckets selected=bucket}}
</select>
</div>
{{/if}}
<div class="form-group filter-dir">
<label>{{ localize "FILES.FilterLabel" }}</label>
<input type="search" name="filter" placeholder="{{ localize "FILES.Search" }}">
</div>
<div class="form-group">
<label>{{ localize "FILES.DisplayMode" }}</label>
<div class="form-fields display-modes">
<a class="display-mode" title="{{ localize 'FILES.DisplayModeList' }}" data-mode="list">
<i class="fas fa-bars"></i>
</a>
<a class="display-mode" title="{{ localize 'FILES.DisplayModeThumbs' }}" data-mode="thumbs">
<i class="fas fa-th-list"></i>
</a>
<a class="display-mode" title="{{ localize 'FILES.DisplayModeTiles' }}" data-mode="tiles">
<i class="fas fa-th-large"></i>
</a>
<a class="display-mode" title="{{ localize 'FILES.DisplayModeImages' }}" data-mode="images">
<i class="fas fa-image"></i>
</a>
</div>
</div>
{{#if tileSize}}
<div class="form-group tile-size">
<label>{{ localize "FILES.TileSize" }}</label>
<div class="form-fields">
{{ numberInput tileSize name="tileSize" placeholder=(localize "FILES.InPixels") }}
<span class="units">{{ localize "FILES.UnitPixels" }}</span>
</div>
<p class="hint">{{ localize "FILES.TileSizeHint" }}</p>
</div>
{{/if}}
</header>
<section class="filepicker-body flexcol">
{{#if dirs}}
<ol class="directory folders-list details-list">
{{#each dirs}}
<li class="dir {{#if this.private}}private{{/if}}" data-path="{{this.path}}" data-name="{{this.name}}">
<i class="fas fa-folder fa-fw"></i>{{this.name}}
</li>
{{/each}}
</ol>
{{/if}}
{{#if files}}
{{#if (eq displayMode "list")}}
<ol class="directory files-list details-list">
{{#each files}}
<li class="file" data-path="{{this.url}}" data-name="{{this.name}}">
<img data-src="{{ this.img }}">
<i class="fas fa-file fa-fw"></i>{{this.name}}
</li>
{{/each}}
</ol>
{{else if (eq displayMode "thumbs")}}
<ol class="directory files-list thumbs-list">
{{#each files}}
<li class="file flexrow" data-path="{{this.url}}" data-name="{{this.name}}">
<img data-src="{{ this.img }}" width="48" height="48">
<span class="filename">{{this.name}}</span>
</li>
{{/each}}
</ol>
{{else if (eq displayMode "tiles")}}
<ol class="directory files-list tiles-list">
{{#each files}}
<li class="file" data-path="{{this.url}}" data-name="{{this.name}}">
<img data-src="{{ this.img }}" width="100" height="100" title="{{ this.name }}">
</li>
{{/each}}
</ol>
{{else if (eq displayMode "images")}}
<ol class="directory files-list images-list">
{{#each files}}
<li class="file" data-path="{{this.url}}" data-name="{{this.name}}">
<img data-src="{{ this.img }}" title="{{ this.name }}">
<span class="filename">{{this.name}}</span>
</li>
{{/each}}
</ol>
{{/if}}
{{/if}}
{{#if noResults}}
<p class="note">{{ localize "FILES.NoResults" }}</p>
{{/if}}
</section>
{{#if canUpload}}
<div class="form-group upload-file">
<label><i class="fas fa-upload fa-fw"></i> {{ localize "FILES.Upload" }}</label>
<div class="form-fields">
<input type="file" name="upload">
</div>
</div>
{{/if}}
{{#if canSelect}}
<div class="form-group selected-file">
<label><i class="fas fa-file fa-fw"></i> {{ localize "FILES.Selected" }}</label>
<div class="form-fields">
<input type="text" name="file" value="{{selected}}">
</div>
</div>
<footer class="form-footer filepicker-footer">
<button class="bright" type="submit">
<i class="far fa-save"></i> {{ localize submitText }}
</button>
</footer>
{{/if}}
</form>

View File

@@ -0,0 +1,21 @@
<form class="{{cssClass}} flexcol" autocomplete="off">
<figure class="flexcol">
{{#if isVideo}}
<video src="{{ image }}" {{#if showTitle}}aria-label="{{ title }}"{{/if}} autoplay loop muted playsinline></video>
{{else}}
<img src="{{image}}" {{#if showTitle}}alt="{{title}}"{{/if}}>
{{/if}}
{{#if caption}}<figcaption>{{caption}}</figcaption>{{/if}}
</figure>
{{#if editable}}
<div class="form-group title">
<input type="text" name="title" value="{{title}}"/>
</div>
<div class="form-group picker">
<file-picker name="image" type="image" value="{{image}}"></file-picker>
<button type="submit"><i class="fas fa-check"></i></button>
</div>
{{/if}}
</form>

View File

@@ -0,0 +1,8 @@
<form autocomplete="off" onsubmit="event.preventDefault();">
<p class="notes">{{hint1}}</p>
<p class="notes">{{hint2}}</p>
<div class="form-group">
<label for="data">{{ localize 'DOCUMENT.ImportSource' }}</label>
<input type="file" name="data" accept=".json"/>
</div>
</form>

View File

@@ -0,0 +1,40 @@
<form id="permission-control">
<p class="notes">{{ instructions }}</p>
<div class="form-group">
<label class="checkbox">
{{localize "OWNERSHIP.ShowGM"}}
<input id="show-gm-toggle" type="checkbox" {{checked showGM}}>
</label>
</div>
<hr/>
<div class="form-group">
<label>{{ localize "OWNERSHIP.AllPlayers" }}</label>
<select name="default" data-dtype="Number">
{{selectOptions defaultLevels selected=currentDefault valueAttr="level" labelAttr="label"}}
</select>
</div>
<hr/>
{{#each users}}
<div class="form-group {{this.cssClass}}">
<label>
{{this.user.name}}
{{~#if this.icon}}
<i class="role-icon {{this.icon}}" data-tooltip="{{this.tooltip}}"></i>
{{/if~}}
</label>
{{#if isAuthor}}
<div class="author">{{localize "Author"}}</div>
{{else}}
<select name="{{this.user.id}}" data-dtype="Number">
{{selectOptions ../playerLevels selected=this.level valueAttr="level" labelAttr="label"}}
</select>
{{/if}}
</div>
{{/each}}
<button type="submit">
<i class="far fa-save"></i> {{ localize "Save Changes" }}
</button>
</form>

View File

@@ -0,0 +1,22 @@
<div>
<p>{{localize "PERMISSION.Instructions"}}</p>
<header class="table-header flexrow">
<label class="index">{{ localize "PERMISSION.Permission" }}</label>
{{#each roles as |rl r|}}
<label>{{ localize rl}}</label>
{{/each}}
</header>
<ul class="permissions-list">
{{#each permissions as |p|}}
<li class="permission form-group">
<label class="index">{{ localize p.label }}</label>
<div class="form-fields">
{{#each p.roles as |r|}}
<input type="checkbox" name="{{r.name}}" {{checked r.value}} {{r.readonly}}>
{{/each}}
</div>
<p class="hint">{{ localize p.hint }}</p>
</li>
{{/each}}
</ul>
</div>

View File

@@ -0,0 +1,26 @@
<header class="step-header flexrow">
<h3 class="step-title noborder">{{title}}</h3>
<a class="step-button" role="button" data-action="exit">
<i class="far fa-circle-xmark"></i>
</a>
</header>
{{#each content}}
<p class="content">{{{this}}}</p>
{{/each}}
<footer class="step-controls flexrow">
<a class="step-button" role="button" data-action="previous">
{{#if hasPrevious}}
<i class="far fa-circle-arrow-left"></i>
{{/if}}
</a>
<span class="progress">Step {{step}} of {{totalSteps}}</span>
<a class="step-button" role="button" data-action="next">
{{#if hasNext}}
<i class="far fa-circle-arrow-right"></i>
{{else}}
<i class="far fa-circle-check"></i>
{{/if}}
</a>
</footer>

View File

@@ -0,0 +1,127 @@
<form class="{{cssClass}}" autocomplete="off">
<header class="sheet-header flexrow">
<img class="card-face" src="{{document.img}}" title="{{data.name}}"/>
<h1 class="name">
<input type="text" name="name" value="{{data.name}}" placeholder="{{localize 'Name'}}"/>
</h1>
</header>
<!-- Tab Navigation -->
<nav class="sheet-tabs tabs" data-group="main" aria-role="{{localize 'SHEETS.FormNavLabel'}}">
<a class="item" data-tab="details"><i class="fas fa-cogs"></i> {{localize "CARD.HeaderDetails"}}</a>
<a class="item" data-tab="faces"><i class="fas fa-id-badge"></i> {{localize "CARD.HeaderFaces"}}</a>
<a class="item" data-tab="back"><i class="fas fa-id-badge"></i> {{localize "CARD.HeaderBack"}}</a>
</nav>
<!-- Details Tab -->
<div class="tab" data-tab="details">
<div class="form-group">
<label>{{ localize "CARD.Type" }}</label>
<div class="form-fields">
<select name="type">
{{selectOptions types selected=data.type localize=true}}
</select>
</div>
</div>
<div class="form-group">
<label>{{ localize "CARD.Suit" }}</label>
<div class="form-fields">
<input type="text" name="suit" value="{{data.suit}}">
</div>
</div>
<div class="form-group">
<label>{{ localize "CARD.Value" }}</label>
<div class="form-fields">
{{numberInput data.value name="value" step=1}}
</div>
</div>
<div class="form-group">
<label>{{localize "CARD.Dimensions"}}</label>
<div class="form-fields">
<label>{{localize "Width"}}</label>
{{numberInput data.width name="width" step=1}}
<label>{{localize "Height"}}</label>
{{numberInput data.height name="height" step=1}}
<label>{{localize "Rotation"}}</label>
{{numberInput data.rotation name="rotation" step=1 min=0 max=360}}
</div>
</div>
<div class="form-group stacked">
<label>{{ localize "CARD.Description" }}</label>
<textarea name="description">{{ data.description }}</textarea>
</div>
</div>
<!-- Faces Tab -->
<div class="tab" data-tab="faces">
<div class="form-group">
<label>{{ localize "CARD.Face" }}</label>
<div class="form-fields">
{{numberInput data.face name="face" min=0 step=1}}
<button type="button" class="face-control" title="{{localize 'CARD.FaceAdd'}}" data-action="addFace">
<i class="fas fa-plus fa-fw"></i>
</button>
</div>
</div>
{{#each data.faces as |face i|}}
<div class="face" data-face="{{i}}">
<div class="form-group">
<label>{{ localize "CARD.FaceName" }}</label>
<div class="form-fields">
<input type="text" name="faces.{{i}}.name" value="{{face.name}}">
<button type="button" class="face-control" title="{{localize 'CARD.FaceDelete'}}" data-action="deleteFace">
<i class="fas fa-trash fa-fw"></i>
</button>
</div>
</div>
<div class="form-group">
<label>{{ localize "CARD.FaceImage" }}</label>
<div class="form-fields">
<file-picker name="faces.{{i}}.img" type="image" value="{{face.img}}"></file-picker>
</div>
</div>
<div class="form-group">
<label>{{ localize "CARD.FaceText" }}</label>
<div class="form-fields">
<textarea name="faces.{{i}}.text">{{face.text}}</textarea>
</div>
</div>
</div>
{{/each}}
</div>
<!-- Back Tab -->
<div class="tab" data-tab="back">
<div class="form-group">
<label>{{ localize "CARD.BackName" }}</label>
<div class="form-fields">
<input type="text" name="back.name" placeholder="{{localize 'CARD.BackName'}}" value="{{data.back.name}}">
</div>
</div>
<div class="form-group">
<label>{{ localize "CARD.BackImage" }}</label>
<div class="form-fields">
<file-picker name="back.img" type="image" value="{{data.back.img}}"></file-picker>
</div>
</div>
<div class="form-group stacked">
<label>{{ localize "CARD.BackText" }}</label>
<textarea name="back.text">{{ data.back.text }}</textarea>
</div>
</div>
<!-- Sheet Footer -->
<footer class="sheet-footer flexrow">
{{#if owner}}
<button class="submit" type="submit"><i class="fas fa-save"></i> {{ localize "CARD.Save" }}</button>
{{/if}}
</footer>
</form>

View File

@@ -0,0 +1,102 @@
<form class="{{cssClass}}" autocomplete="off">
<header class="sheet-header flexrow">
<img class="card-face" src="{{data.img}}" title="{{data.name}}"/>
<h1 class="name">
<input type="text" name="name" value="{{data.name}}" placeholder="{{localize 'Name'}}"/>
</h1>
</header>
<!-- Tab Navigation -->
<nav class="sheet-tabs tabs" data-group="main" aria-role="{{localize 'SHEETS.FormNavLabel'}}">
<a class="item" data-tab="details"><i class="fas fa-cogs"></i> {{localize "CARDS.HeaderDetails"}}</a>
<a class="item" data-tab="cards"><i class="fas fa-id-badge"></i> {{localize "CARDS.HeaderCards"}}</a>
</nav>
<!-- Details Tab -->
<div class="tab" data-tab="details">
<div class="form-group">
<label>{{ localize "CARDS.Image" }}</label>
<div class="form-fields">
<file-picker name="img" type="image" value="{{data.img}}"></file-picker>
</div>
</div>
<div class="form-group stacked">
<label>{{ localize "CARDS.Description" }}</label>
<textarea name="description">{{ data.description }}</textarea>
</div>
<div class="form-group">
<label>{{localize "CARDS.Dimensions"}}</label>
<div class="form-fields">
<label>{{localize "Width"}}</label>
{{numberInput data.width name="width" step=1}}
<label>{{localize "Height"}}</label>
{{numberInput data.height name="height" step=1}}
<label>{{localize "Rotation"}}</label>
{{numberInput data.rotation name="rotation" step=1 min=0 max=360}}
</div>
</div>
</div>
<!-- Cards Tab -->
<div class="tab" data-tab="cards">
<header class="cards-header flexrow">
<a class="card-control sort-mode" title="{{localize "CARDS.SortMode"}}" data-action="toggleSort">
<i class="fas fa-sort fa-fw"></i>
</a>
<h4 class="card-name">{{localize "CARD.Name"}}</h4>
<span class="card-type">{{localize "CARD.Type"}}</span>
<span class="card-suit">{{localize "CARD.Suit"}}</span>
<span class="card-value">{{localize "CARD.Value"}}</span>
<span class="card-drawn">{{localize "CARD.Drawn"}}</span>
<span class="card-faces">{{localize "CARD.Face"}}</span>
<div class="card-controls">
<a class="card-control" title="{{localize 'CARD.Create'}}" data-action="create"><i class="fas fa-plus"></i> {{localize "Add"}}</a>
</div>
</header>
<ol class="cards">
{{#each cards as |card|}}
<li class="card flexrow" data-card-id="{{card.id}}">
<img class="card-face" data-src="{{card.img}}" alt="{{card.name}}" height="48">
<h4 class="card-name">{{card.name}}</h4>
<span class="card-type">{{card.type}}</span>
<span class="card-suit">{{card.suit}}</span>
<span class="card-value">{{card.value}}</span>
<div class="card-drawn">
<input type="checkbox" class="card-value" {{checked card.drawn}} disabled>
</div>
<div class="card-faces flexcol">
<a class="card-control" title="{{localize 'CARD.FaceNext'}}" data-action="nextFace" {{#unless card.hasNextFace}}disabled{{/unless}}><i class="fas fa-caret-up"></i></a>
<a class="card-control" title="{{localize 'CARD.FacePrevious'}}" data-action="prevFace" {{#unless card.hasPreviousFace}}disabled{{/unless}}><i class="fas fa-caret-down"></i></a>
</div>
<div class="card-controls">
<a class="card-control" title="{{localize 'CARD.Edit'}}" data-action="edit"><i class="fas fa-edit"></i></a>
<a class="card-control" title="{{localize 'CARD.Delete'}}" data-action="delete"><i class="fas fa-trash"></i></a>
</div>
</li>
{{else}}
<li>
<p class="hint">{{localize "CARDS.NoCards"}}</p>
</li>
{{/each}}
</ol>
</div>
<!-- Sheet Footer -->
<footer class="sheet-footer flexrow">
{{#if owner}}
<button class="card-control" type="button" data-action="shuffle" {{ disabled inCompendium }}>
<i class="fas fa-random"></i> {{localize "CARDS.Shuffle"}}
</button>
<button class="card-control" type="button" data-action="deal" {{ disabled inCompendium }}>
<i class="fas fa-share-square"></i> {{localize "CARDS.Deal"}}
</button>
<button class="card-control" type="button" data-action="reset" {{ disabled inCompendium }}>
<i class="fas fa-undo"></i> {{localize "CARDS.Reset"}}
</button>
<button class="submit" type="submit"><i class="fas fa-save"></i> {{ localize "CARDS.Save" }}</button>
{{/if}}
</footer>
</form>

View File

@@ -0,0 +1,66 @@
<form class="{{cssClass}}" autocomplete="off">
<header class="sheet-header flexrow">
<h1 class="name">
<input type="text" name="name" value="{{data.name}}" placeholder="{{localize 'Name'}}"/>
</h1>
</header>
<div>
<header class="cards-header flexrow">
<a class="card-control sort-mode" title="{{localize "CARDS.SortMode"}}" data-action="toggleSort">
<i class="fas fa-sort fa-fw"></i>
</a>
<h4 class="card-name">{{localize "CARD.Name"}}</h4>
<span class="card-type">{{localize "CARD.Type"}}</span>
<span class="card-suit">{{localize "CARD.Suit"}}</span>
<span class="card-value">{{localize "CARD.Value"}}</span>
<span class="card-faces">{{localize "CARD.Face"}}</span>
<div class="card-controls"></div>
</header>
<ol class="cards">
{{#each cards as |card|}}
<li class="card flexrow" data-card-id="{{card.id}}">
<img class="card-face" data-src="{{card.img}}" alt="{{card.name}}" height="48">
<h4 class="card-name">{{card.name}}</h4>
{{#if card.showFace}}
<span class="card-type">{{card.type}}</span>
<span class="card-suit">{{card.suit}}</span>
<span class="card-value">{{card.value}}</span>
{{/if}}
<div class="card-faces flexcol">
<a class="card-control" title="{{localize 'CARD.FaceNext'}}" data-action="nextFace" {{#unless card.hasNextFace}}disabled{{/unless}}><i class="fas fa-caret-up"></i></a>
<a class="card-control" title="{{localize 'CARD.FacePrevious'}}" data-action="prevFace" {{#unless card.hasPreviousFace}}disabled{{/unless}}><i class="fas fa-caret-down"></i></a>
</div>
<div class="card-controls">
{{#if (and @root.editable (not @root.inCompendium))}}
<a class="card-control" title="{{localize 'CARD.Play'}}" data-action="play"><i class="fas fa-chevron-circle-right"></i></a>
{{/if}}
</div>
</li>
{{else}}
<li>
<p class="hint">{{localize "CARDS.NoCards"}}</p>
</li>
{{/each}}
</ol>
</div>
<!-- Sheet Footer -->
<footer class="sheet-footer flexrow">
{{#if owner}}
<button class="card-control" type="button" data-action="draw" {{ disabled inCompendium }}>
<i class="fas fa-plus"></i> {{localize "CARDS.Draw"}}
</button>
<button class="card-control" type="button" data-action="pass" {{ disabled inCompendium }}>
<i class="fas fa-share-square"></i> {{localize "CARDS.Pass"}}
</button>
<button class="card-control" type="button" data-action="reset" {{ disabled inCompendium }}>
<i class="fas fa-undo"></i> {{localize "CARDS.Reset"}}
</button>
<button class="submit" type="submit">
<i class="fas fa-save"></i> {{ localize "CARDS.Save" }}
</button>
{{/if}}
</footer>
</form>

View File

@@ -0,0 +1,63 @@
<form class="{{cssClass}}" autocomplete="off">
<header class="sheet-header flexrow">
<h1 class="name">
<input type="text" name="name" value="{{data.name}}" placeholder="{{localize 'Name'}}"/>
</h1>
</header>
<div>
<header class="cards-header flexrow">
<span class="sort-mode"></span>
<h4 class="card-name">{{localize "CARD.Name"}}</h4>
<span class="card-type">{{localize "CARD.Type"}}</span>
<span class="card-suit">{{localize "CARD.Suit"}}</span>
<span class="card-value">{{localize "CARD.Value"}}</span>
<span class="card-faces">{{localize "CARD.Face"}}</span>
<div class="card-controls"></div>
</header>
<ol class="cards">
{{#each cards as |card|}}
<li class="card flexrow" data-card-id="{{card.id}}">
<img class="card-face" data-src="{{card.img}}" alt="{{card.name}}" height="48">
<h4 class="card-name">{{card.name}}</h4>
{{#if card.showFace}}
<span class="card-type">{{card.type}}</span>
<span class="card-suit">{{card.suit}}</span>
<span class="card-value">{{card.value}}</span>
{{/if}}
<div class="card-faces flexcol">
<a class="card-control" title="{{localize 'CARD.FaceNext'}}" data-action="nextFace" {{#unless card.hasNextFace}}disabled{{/unless}}><i class="fas fa-caret-up"></i></a>
<a class="card-control" title="{{localize 'CARD.FacePrevious'}}" data-action="prevFace" {{#unless card.hasPreviousFace}}disabled{{/unless}}><i class="fas fa-caret-down"></i></a>
</div>
<div class="card-controls">
{{#if (and @root.editable (not @root.inCompendium))}}
<a class="card-control" title="{{localize 'CARD.Play'}}" data-action="play"><i class="fas fa-chevron-circle-right"></i></a>
{{/if}}
</div>
</li>
{{else}}
<li>
<p class="hint">{{localize "CARDS.NoCards"}}</p>
</li>
{{/each}}
</ol>
</div>
<!-- Sheet Footer -->
<footer class="sheet-footer flexrow">
{{#if owner}}
<button class="card-control" type="button" data-action="shuffle" {{ disabled inCompendium }}>
<i class="fas fa-random"></i> {{localize "CARDS.Shuffle"}}
</button>
<button class="card-control" type="button" data-action="pass" {{ disabled inCompendium }}>
<i class="fas fa-share-square"></i> {{localize "CARDS.Pass"}}
</button>
<button class="card-control" type="button" data-action="reset" {{ disabled inCompendium }}>
<i class="fas fa-undo"></i> {{localize "CARDS.Reset"}}
</button>
<button class="submit" type="submit">
<i class="fas fa-save"></i> {{ localize "CARDS.Save" }}
</button>
{{/if}}
</footer>
</form>

View File

@@ -0,0 +1,38 @@
<form class="cards-dialog">
<p class="notes">{{localize "CARDS.DealHint"}}</p>
<div class="form-group-stacked">
<label>{{localize "CARDS.DealTo"}}</label>
<div class="form-fields">
{{#each hands}}
<label class="checkbox">
{{this.name}}
<input type="checkbox" name="to" value="{{this.id}}"/>
</label>
{{/each}}
</div>
</div>
<div class="form-group">
<label>{{localize "CARDS.Number"}}</label>
<div class="form-fields">
{{numberInput 1 name="number" value="1" min="1" step="1"}}
</div>
</div>
<div class="form-group">
<label>{{localize "CARDS.DrawMode"}}</label>
<div class="form-fields">
<select name="how" data-dtype="Number">
{{selectOptions modes localize=true}}
</select>
</div>
</div>
<div class="form-group">
<label>{{localize "CARDS.Facedown"}}</label>
<div class="form-fields">
<input type="checkbox" name="down"/>
</div>
</div>
</form>

View File

@@ -0,0 +1,35 @@
<form class="cards-dialog">
<p class="notes">{{localize "CARDS.DrawHint"}}</p>
<div class="form-group">
<label>{{localize "CARDS.DrawFrom"}}</label>
<div class="form-fields">
<select name="from">
{{selectOptions decks valueAttr="id" labelAttr="name"}}
</select>
</div>
</div>
<div class="form-group">
<label>{{localize "CARDS.Number"}}</label>
<div class="form-fields">
{{numberInput 1 name="number" value="1" min="1" step="1"}}
</div>
</div>
<div class="form-group">
<label>{{localize "CARDS.DrawMode"}}</label>
<div class="form-fields">
<select name="how" data-dtype="Number">
{{selectOptions modes localize=true}}
</select>
</div>
</div>
<div class="form-group">
<label>{{localize "CARDS.Facedown"}}</label>
<div class="form-fields">
<input type="checkbox" name="down"/>
</div>
</div>
</form>

View File

@@ -0,0 +1,35 @@
<form class="cards-dialog">
<p class="notes">{{localize "CARDS.PassHint"}}</p>
<div class="form-group stacked">
<label>{{localize "CARDS.PassTo"}}</label>
<div class="form-fields">
<select name="to">
{{selectOptions cards valueAttr="id" labelAttr="name"}}
</select>
</div>
</div>
<div class="form-group">
<label>{{localize "CARDS.Number"}}</label>
<div class="form-fields">
{{numberInput 1 name="number" value="1" min="1" step="1"}}
</div>
</div>
<div class="form-group">
<label>{{localize "CARDS.DrawMode"}}</label>
<div class="form-fields">
<select name="how" data-dtype="Number">
{{selectOptions modes localize=true}}
</select>
</div>
</div>
<div class="form-group">
<label>{{localize "CARDS.Facedown"}}</label>
<div class="form-fields">
<input type="checkbox" name="down"/>
</div>
</div>
</form>

View File

@@ -0,0 +1,23 @@
<form class="cards-dialog">
<figure>
<img class="thumbnail" src="{{card.img}}" height="480"/>
<figcaption>{{card.name}}</figcaption>
</figure>
<p class="notes">{{localize "CARD.PlayHint"}}</p>
<div class="form-group stacked">
<label>{{localize "CARDS.PassTo"}}</label>
<div class="form-fields">
<select name="to">
{{selectOptions cards valueAttr="id" labelAttr="name"}}
</select>
</div>
</div>
<div class="form-group">
<label>{{localize "CARDS.Facedown"}}</label>
<div class="form-fields">
<input type="checkbox" name="down"/>
</div>
</div>
</form>

View File

@@ -0,0 +1,16 @@
<form class="{{ cssClass }} flexcol" autocomplete="off">
<section>
{{#each dice}}
<div class="form-group">
<label>{{{ icon }}} {{ localize label }}</label>
<select name="{{ denomination }}">
{{ selectOptions @root.methods selected=method labelAttr="label" localize=true
blank="DICE.FULFILLMENT.Default" }}
</select>
</div>
{{/each}}
</section>
<footer>
<button type="submit"><i class="fas fa-save"></i> {{ localize "Save" }}</button>
</footer>
</form>

View File

@@ -0,0 +1,24 @@
<section class="flexcol standard-form">
<p class="formula">{{ formula }}</p>
{{#each groups}}
<fieldset class="input-grid" data-term-id="{{ @key }}">
<legend>{{ label }} <span data-tooltip="{{ tooltip }}" aria-label="{{ tooltip }}">{{{ icon }}}</span></legend>
{{#each results}}
<label class="icon die-input {{#if isNew}}new-addition{{/if}}" data-denomination="{{ denomination }}"
data-method="{{ method }}">
{{ numberInput value min=1 max=faces step=1 name=id readonly=readonly placeholder=(localize denomination)
disabled=disabled autofocus=true }}
{{#if rerolled}}<i class="fas fa-arrow-rotate-right"></i>{{/if}}
{{#if exploded}}<i class="fas fa-burst"></i>{{/if}}
{{{ icon }}}
</label>
{{/each}}
</fieldset>
{{/each}}
<footer class="form-footer">
<button type="submit">
<i class="fas fa-check"></i>
{{ localize "DICE.SubmitRollPl" }}
</button>
</footer>
</section>

View File

@@ -0,0 +1,10 @@
<div class="dice-roll">
{{#if flavor}}
<div class="dice-flavor">{{flavor}}</div>
{{/if}}
<div class="dice-result">
<div class="dice-formula">{{formula}}</div>
{{{tooltip}}}
<h4 class="dice-total">{{total}}</h4>
</div>
</div>

View File

@@ -0,0 +1,14 @@
<div class="table-draw" data-table-id="{{ table.id }}">
{{#if description}}
<div class="table-description">{{{description}}}</div>
{{/if}}
{{{ rollHTML }}}
<ol class="table-results">
{{#each results}}
<li class="table-result flexrow" data-result-id="{{ this._id }}">
<img class="result-image" src="{{this.icon}}"/>
<div class="result-text">{{{this.text}}}</div>
</li>
{{/each}}
</ol>
</div>

View File

@@ -0,0 +1,25 @@
{{#if parts.length}}
<div class="dice-tooltip">
{{#each parts}}
<section class="tooltip-part">
<div class="dice">
<header class="part-header flexrow">
{{#if icon}}
<span class="part-method" data-tooltip="{{ method }}" aria-label="{{ localize method }}">
{{{ icon }}}
</span>
{{/if}}
<span class="part-formula">{{this.formula}}</span>
{{#if this.flavor}}<span class="part-flavor">{{this.flavor}}</span>{{/if}}
<span class="part-total">{{this.total}}</span>
</header>
<ol class="dice-rolls">
{{#each this.rolls}}
<li class="roll {{this.classes}}">{{{this.result}}}</li>
{{/each}}
</ol>
</div>
</section>
{{/each}}
</div>
{{/if}}

View File

@@ -0,0 +1,14 @@
<section class="standard-form">
{{#each fields as |field|}}
{{#if field.fieldset}}
<fieldset>
<legend>{{localize field.legend}}</legend>
{{#each field.fields as |f|}}
{{formField f.field value=f.value localize=true}}
{{/each}}
</fieldset>
{{else}}
{{formField outer.field value=outer.value localize=true}}
{{/if}}
{{/each}}
</section>

View File

@@ -0,0 +1,9 @@
<footer class="form-footer">
{{#each buttons as |button|}}
<button type="{{button.type}}" {{#if button.name}}name="{{button.name}}"{{/if}} class="{{button.cssClass}}"
{{#if button.action}}data-action="{{button.action}}"{{/if}} {{#if button.disabled}}disabled{{/if}}>
{{#if button.icon}}<i class="{{button.icon}}" inert></i>{{/if}}
{{#if button.label}}<label inert>{{localize button.label}}</label>{{/if}}
</button>
{{/each}}
</footer>

View File

@@ -0,0 +1,8 @@
<nav class="sheet-tabs tabs" aria-role="{{localize 'SHEETS.FormNavLabel'}}">
{{#each tabs as |tab|}}
<a class="{{tab.cssClass}}" data-action="tab" data-group="{{tab.group}}" data-tab="{{tab.id}}">
<i class="{{tab.icon}}"></i>
<label>{{localize tab.label}}</label>
</a>
{{/each}}
</nav>

View File

@@ -0,0 +1,118 @@
{{#*inline "controlBar"}}
<nav class="control-bar bottom flexrow" aria-label="{{localize 'WEBRTC.NavLabel'}}">
<div class="volume-bar">
<i class="fas fa-volume-down fa-fw vol-min"></i>
<input class="webrtc-volume-slider" type="range" min="0" max="1" step="0.05" value="{{this.volume}}"/>
<i class="fas fa-volume-up fa-fw vol-max"></i>
</div>
{{#if (and local (not @root.hidden))}}
<a class="av-control toggle" data-action="toggle-dock">
<i class="far fa-fw"></i>
</a>
<a class="av-control toggle" data-action="toggle-players">
<i class="far fa-fw fa-rotate-270"></i>
</a>
{{/if}}
<a class="av-control toggle" data-action="toggle-video">
<i class="fas fa-fw"></i>
</a>
<a class="av-control toggle" data-action="toggle-audio">
<i class="fas fa-fw"></i>
</a>
<a class="av-control toggle" data-action="mute-peers">
<i class="fas fa-fw"></i>
</a>
<a class="av-control toggle" data-action="disable-video">
<i class="fas fa-fw"></i>
</a>
{{#if this.local}}
<a class="av-control" data-tooltip="{{localize 'WEBRTC.TooltipConfigure'}}" data-action="configure">
<i class="fas fa-cog"></i>
</a>
{{/if}}
</nav>
{{/inline}}
{{#*inline "cameraBox"}}
<div class="camera-view {{this.cameraViewClass}}" data-user="{{this.user.id}}"
{{#if @root.borderColors}}style="background: linear-gradient(to bottom, {{this.user.border.css}} 0%, {{this.user.color}} 100%);"{{/if}}>
<div class="video-container {{#if this.settings.popout}}camera-container-popout{{/if}}">
<img class="user-avatar" src="{{this.user.avatar}}"/>
<video class="user-camera {{#if this.local}}local-camera{{/if}}"
style="visibility:hidden; display: none;" autoplay="autoplay" playsinline="playsinline">
</video>
</div>
{{!-- Left Control Bar --}}
<div class="control-bar left flexcol hidden">
<a class="av-control toggle global" data-action="block-video">
<i class="fas fa-fw"></i>
</a>
<a class="av-control toggle global" data-action="block-audio">
<i class="fas fa-fw"></i>
</a>
<a class="av-control toggle" data-action="hide-user">
<i class="fas fa-fw"></i>
</a>
{{#if this.settings.popout}}
<a class="av-control toggle" data-tooltip="{{localize 'WEBRTC.TooltipDock'}}" data-action="toggle-popout">
<i class="fas fa-external-link-square-alt fa-rotate-180"></i>
</a>
{{else}}
<a class="av-control toggle" data-tooltip="{{localize 'WEBRTC.TooltipPopout'}}" data-action="toggle-popout">
<i class="fas fa-external-link-alt"></i>
</a>
{{/if}}
</div>
{{!-- Bottom Control Bar --}}
{{#if (or @root.hidden (not local))}}
{{> controlBar}}
{{/if}}
{{!-- Right Notification Bar --}}
<div class="notification-bar right flexcol">
<i class="fas fa-video-slash fa-fw status-hidden hidden"></i>
<i class="fas fa-microphone-slash fa-fw status-muted hidden"></i>
</div>
<div class="shadow"></div>
<h3 class="player-name noborder {{@root.nameplates.cssClass}}" style="color: {{this.user.border}};">
{{#if @root.nameplates.playerName}}
<span>{{this.user.name}}</span>
{{/if}}
{{#if @root.nameplates.charname}}
<span>{{#if this.charname}}{{this.charname}}{{else}}{{this.user.name}}{{/if}}</span>
{{/if}}
</h3>
</div>
{{/inline}}
<div id="camera-views" class="app {{dockClass}}">
<div class="camera-container">
<div class="camera-grid">
{{#each users}}
{{#if this.settings.popout}}
<div id="camera-views-user-{{this.user.id}}" class="app camera-view-popout">
{{> cameraBox isGM=../self.isGM muteAll=../muteAll}}
</div>
{{else}}
{{> cameraBox isGM=../self.isGM muteAll=../muteAll dockClass=../dockClass}}
{{/if}}
{{/each}}
</div>
</div>
<div class="camera-view-width-control"></div>
<div class="user-controls" data-user="{{self.id}}">
{{> controlBar local=true}}
</div>
</div>

View File

@@ -0,0 +1,5 @@
<div class="chat-bubble {{ cssClasses }}" data-token-id="{{ token.id }}">
<div class="bubble-content">
{{{ message }}}
</div>
</div>

View File

@@ -0,0 +1,18 @@
<nav id="controls" class="flexrow" data-tooltip-direction="RIGHT" aria-label="{{localize 'CONTROLS.NavLabel'}}">
<ol class="main-controls app control-tools flexcol {{ cssClass }}" role="tablist">
{{#each controls as |c|}}
<li class="scene-control {{c.css}}" data-control="{{c.name}}" data-canvas-layer="{{c.layer}}" aria-label="{{localize c.title}}" role="tab" aria-controls="tools-panel-{{ c.name }}" data-tooltip="{{localize c.title}}">
<i class="{{c.icon}}"></i>
</li>
{{/each}}
</ol>
{{#each controls as |c|}}
<ol id="tools-panel-{{ c.name }}" role="tabpanel" class="sub-controls app control-tools flexcol {{c.css}}">
{{#each c.tools as |t|}}
<li class="control-tool {{t.css}}" data-tool="{{t.name}}" aria-label="{{localize t.title}}" role="button" data-tooltip="{{t.tooltip}}">
<i class="{{t.icon}}"></i>
</li>
{{/each}}
</ol>
{{/each}}
</nav>

View File

@@ -0,0 +1,11 @@
<div class="dialog-content">
{{{content}}}
</div>
<div class="dialog-buttons">
{{#each buttons as |button id|}}
<button class="dialog-button {{cssClass}}" data-button="{{id}}" {{disabled button.disabled}}>
{{{button.icon}}}
{{{button.label}}}
</button>
{{/each}}
</div>

View File

@@ -0,0 +1,30 @@
<form id="{{id}}" class="{{classes}}" data-appid="{{appId}}" autocomplete="off" onsubmit="event.preventDefault();">
<div class="col left">
<div class="attribute elevation" data-tooltip="HUD.Elevation">
<i class="fas fa-angle-up"></i>
<input type="text" name="elevation" value="{{elevation}}" {{disabled (or locked (and isGamePaused (not isGM)))}}>
</div>
<div class="control-icon" data-action="sort-up" data-tooltip="HUD.ToFront">
<img src="{{icons.up}}" width="36" height="36"/>
</div>
<div class="control-icon" data-action="sort-down" data-tooltip="HUD.ToBack">
<img src="{{icons.down}}" width="36" height="36"/>
</div>
</div>
<div class="col middle">
</div>
<div class="col right">
<div class="control-icon {{visibilityClass}}" data-action="visibility" data-tooltip="HUD.ToggleVis">
<img src="{{icons.visibility}}" width="36" height="36"/>
</div>
<div class="control-icon {{lockedClass}}" data-action="locked" data-tooltip="HUD.ToggleLock">
<img src="{{icons.lock}}" width="36" height="36"/>
</div>
</div>
</form>

View File

@@ -0,0 +1,40 @@
<div id="hotbar" class="flexrow {{#if locked}}locked{{/if}}" data-tooltip-direction="UP">
<div id="hotbar-directory-controls" class="bar-controls flexcol">
<a id="bar-toggle" aria-label="{{localize 'MACRO.CollapseHotbar'}}" role="button" data-tooltip="MACRO.CollapseHotbar">
<i class="fas fa-caret-down"></i>
</a>
<a id="macro-directory" aria-label="{{localize 'MACRO.Directory'}}" role="button" data-tooltip="MACRO.Directory">
<i class="fas fa-folder"></i>
</a>
</div>
<nav id="action-bar" class="flexrow {{barClass}}" aria-label="{{localize 'MACRO.NavLabel'}}">
<ol id="macro-list" class="flexrow" data-page="{{page}}">
{{#each macros}}
<li class="macro {{this.cssClass}}" data-slot="{{this.slot}}" role="button"
{{#if this.macro}}
data-macro-id="{{this.macro.id}}" aria-label="{{this.tooltip}}" data-tooltip="{{this.tooltip}}"
{{else}}
aria-label="{{localize 'MACRO.EmptySlot' slot=slot}}"
{{/if}}>
<span class="macro-key">{{this.key}}</span>
{{#if this.icon}}
<img class="macro-icon" src="{{this.icon}}" alt="{{this.tooltip}}" />
{{/if}}
</li>
{{/each}}
</ol>
<div id="hotbar-lock" class="bar-controls flexcol" data-tooltip-direction="UP">
<a class="page-control" data-action="lock" aria-label="{{localize 'MACRO.LockBar'}}" role="button" data-tooltip="MACRO.{{ifThen locked "Unlock" "Lock"}}Bar">
<i class="fas fa-lock{{#unless locked}}-open{{/unless}}"></i>
</a>
</div>
<div id="hotbar-page-controls" class="bar-controls flexcol" data-tooltip-direction="UP">
<a class="page-control" data-action="page-up" aria-label="{{localize 'MACRO.PageUp'}}" role="button" data-tooltip="MACRO.PageUp" alt="{{localize 'MACRO.PageUp'}}" >
<i class="fas fa-caret-up"></i></a>
<span class="page-number">{{page}}</span>
<a class="page-control" data-action="page-down" aria-label="{{localize 'MACRO.PageDown'}}" role="button" data-tooltip="MACRO.PageDown" alt="{{localize 'MACRO.PageDown'}}">
<i class="fas fa-caret-down"></i>
</a>
</div>
</nav>
</div>

View File

@@ -0,0 +1,7 @@
<div id="hud" style="width: {{ width }}px; height: {{ height }}px">
<template id="token-hud"></template>
<template id="tile-hud"></template>
<template id="drawing-hud"></template>
<div id="chat-bubbles">
</div>
</div>

View File

@@ -0,0 +1,12 @@
<nav id="menu" aria-label="{{localize 'MENU.NavLabel'}}">
<ol id="menu-items">
{{#each items as |item id|}}
{{#if item.enabled}}
<li class="menu-{{id}}">
{{{item.icon}}}
<h4>{{localize item.label}}</h4>
</li>
{{/if}}
{{/each}}
</ol>
</nav>

View File

@@ -0,0 +1,24 @@
<nav id="navigation" class="app flexrow {{#if collapsed}}collapsed{{/if}}" data-tooltip-direction="CENTER"
aria-label="{{localize 'SCENES.NavLabel'}}">
{{#if scenes}}
<a id="nav-toggle" class="nav-item" aria-label="{{localize 'SCENES.ToggleNav'}}" role="button" data-tooltip="SCENES.ToggleNav" alt="{{localize 'SCENES.ToggleNav'}}">
<i class="fas fa-caret-{{#if collapsed}}down{{else}}up{{/if}}"></i>
</a>
{{/if}}
<ol id="scene-list">
{{#each scenes}}
<li class="scene nav-item {{this.css}}" data-scene-id="{{this.id}}" {{#if this.tooltip}}data-tooltip="{{this.tooltip}}"{{/if}}>
<a class="scene-name">
{{#if this.active}}<i class="fas fa-bullseye"></i>{{/if}}
{{{this.name}}}
</a>
<ul class="scene-players">
{{#each this.users as |user i|}}
<li class="scene-player" style="background-color: {{user.color}};">{{user.letter}}</li>
{{/each}}
</ul>
</li>
{{/each}}
</ol>
</nav>

View File

@@ -0,0 +1,4 @@
<figure id="pause" class="{{#if paused}}paused{{/if}}">
<img src="icons/svg/clockwork.svg" class="fa-spin">
<figcaption>{{localize "GAME.Paused"}}</figcaption>
</figure>

View File

@@ -0,0 +1,31 @@
<form id="{{id}}" class="{{classes}}" data-appid="{{appId}}" autocomplete="off">
<div class="col left">
<div class="attribute elevation" data-tooltip="HUD.Elevation">
<i class="fas fa-angle-up"></i>
<input type="text" name="elevation" value="{{elevation}}" {{disabled (or locked (and isGamePaused (not isGM)))}}>
</div>
<div class="control-icon" data-action="sort-up" data-tooltip="HUD.ToFront">
<img src="{{icons.up}}" width="36" height="36"/>
</div>
<div class="control-icon" data-action="sort-down" data-tooltip="HUD.ToBack">
<img src="{{icons.down}}" width="36" height="36"/>
</div>
</div>
<div class="col middle">
</div>
<div class="col right">
<div class="control-icon {{visibilityClass}}" data-action="visibility" data-tooltip="HUD.ToggleVis">
<img src="{{icons.visibility}}" width="36" height="36"/>
</div>
<div class="control-icon {{lockedClass}}" data-action="locked" data-tooltip="HUD.ToggleLock">
<img src="{{icons.lock}}" width="36" height="36"/>
</div>
{{#if isVideo }}
<div class="control-icon" data-action="video" data-tooltip="{{videoTitle}}">
<i class="{{videoIcon}}"></i>
</div>
{{/if}}
</div>
</form>

View File

@@ -0,0 +1,65 @@
<form id="{{id}}" class="{{classes}}" data-appid="{{appId}}" autocomplete="off" onsubmit="event.preventDefault();">
<div class="col left">
<div class="attribute elevation" data-tooltip="HUD.Elevation">
<i class="fas fa-angle-up"></i>
<input type="text" name="elevation" value="{{elevation}}" {{disabled (or locked (and isGamePaused (not isGM)))}}>
</div>
<div class="control-icon" data-action="sort-up" data-tooltip="HUD.ToFront">
<img src="{{icons.up}}" width="36" height="36"/>
</div>
<div class="control-icon" data-action="sort-down" data-tooltip="HUD.ToBack">
<img src="{{icons.down}}" width="36" height="36"/>
</div>
{{#if canConfigure}}
<div class="control-icon" data-action="config" data-tooltip="HUD.OpenConfig">
<i class="fas fa-cog"></i>
</div>
{{/if}}
</div>
<div class="col middle">
<div class="attribute bar2">
{{#if displayBar2}}
<input type="text" name="bar2" value="{{bar2Data.value}}" {{#unless bar2Data.editable}}disabled{{/unless}}>
{{/if}}
</div>
<div class="attribute bar1">
{{#if displayBar1}}
<input type="text" name="bar1" value="{{bar1Data.value}}" {{#unless bar1Data.editable}}disabled{{/unless}}>
{{/if}}
</div>
</div>
<div class="col right">
{{#if isGM}}
<div class="control-icon {{visibilityClass}}" data-action="visibility" data-tooltip="HUD.ToggleVis">
<img src="{{icons.visibility}}" width="36" height="36"/>
</div>
{{/if}}
<div class="control-icon {{effectsClass}}" data-action="effects" data-tooltip="HUD.AssignStatusEffects">
<img src="{{icons.effects}}" width="36" height="36"/>
</div>
<div class="status-effects">
{{#each statusEffects as |status|}}
<img class="effect-control {{status.cssClass}}" src="{{status.src}}"
{{#if status.title}}data-tooltip="{{status.title}}"{{/if}} data-status-id="{{status.id}}"/>
{{/each}}
</div>
<div class="control-icon {{targetClass}}" data-action="target" data-tooltip="HUD.ToggleTargetState">
<i class="fas fa-bullseye"></i>
</div>
{{#if canToggleCombat}}
<div class="control-icon {{combatClass}}" data-action="combat" data-tooltip="HUD.ToggleCombatState">
<img src="{{icons.combat}}" width="36" height="36"/>
</div>
{{/if}}
</div>
</form>

View File

@@ -0,0 +1,19 @@
<div class="toolclip">
<video src="{{ src }}" autoplay muted loop></video>
<h4>{{ localize heading }}</h4>
{{#each items}}
<p>
{{#if paragraph}}
{{{ localize paragraph }}}
{{else}}
<strong>{{ localize heading }}:</strong>
{{#if content}}
{{{ localize content mod=@root.mod alt=@root.alt }}}
{{else}}
<span class="reference">{{ localize reference mod=@root.mod alt=@root.alt }}</span>
{{/if}}
{{/if}}
</p>
{{/each}}
<p class="faint">{{ localize "CONTROLS.DisableToolclips" }}</p>
</div>

View File

@@ -0,0 +1,52 @@
<form class="journal-show-dialog">
<div class="form-group-stacked">
<div class="checkbox-label">
<span>{{localize "JOURNAL.ShowTo"}}</span>
<label class="checkbox">
{{localize "OWNERSHIP.AllPlayers"}}
<input type="checkbox" name="allPlayers" checked>
</label>
</div>
<div class="form-fields">
{{#each users}}
<label class="checkbox">
{{name}}
<input type="checkbox" name="players" value="{{id}}" checked disabled>
</label>
{{/each}}
</div>
</div>
{{#if isImage}}
<div class="form-group">
<label>{{localize "JOURNALENTRYPAGE.ShowImageOnly"}}</label>
<div class="form-fields">
<input type="checkbox" name="imageOnly" checked>
</div>
</div>
<div class="form-group">
<label>{{localize "JOURNALENTRYPAGE.ShowImageTitle"}}</label>
<div class="form-fields">
<input type="checkbox" name="showImageTitle">
</div>
</div>
<div class="form-group">
<label>{{localize "JOURNALENTRYPAGE.ShowImageCaption"}}</label>
<div class="form-fields">
<input type="checkbox" name="showImageCaption">
</div>
</div>
{{/if}}
<hr>
<p class="notes">{{localize "JOURNAL.ShowOwnershipHint"}}</p>
<div class="form-group">
<label>{{localize "OWNERSHIP.Configure"}}</label>
<div class="form-fields">
<select name="ownership" data-dtype="Number">
{{selectOptions levels valueAttr="level" labelAttr="label" localize=true}}
</select>
</div>
</div>
</form>

View File

@@ -0,0 +1,25 @@
<form>
<div class="form-group">
<label>{{localize "EDITOR.ImageSource"}}</label>
<div class="form-fields">
<file-picker name="src" type="image" value="{{src}}"></file-picker>
</div>
</div>
<div class="form-group">
<label>{{localize "EDITOR.ImageAlt"}}</label>
<div class="form-fields">
<input type="text" name="alt" value="{{ alt }}">
</div>
</div>
<div class="form-group">
<label>{{localize "EDITOR.ImageDimensions"}}</label>
<div class="form-fields">
<label>{{localize "Width"}}</label>
{{numberInput width name="width" min="0" step="1"}}
<label>{{localize "Height"}}</label>
{{numberInput height name="height" min="0" step="1"}}
</div>
<p class="hint">{{localize "EDITOR.ImageDimensionsHint"}}</p>
</div>
<button type="button" name="save">{{localize "EDITOR.ImageInsert"}}</button>
</form>

View File

@@ -0,0 +1,21 @@
<form>
<div class="form-group">
<label>{{localize "EDITOR.LinkURL"}}</label>
<div class="form-fields">
<input type="text" name="href" value="{{href}}">
</div>
</div>
<div class="form-group">
<label>{{localize "EDITOR.LinkText"}}</label>
<div class="form-fields">
<input type="text" name="text" value="{{text}}">
</div>
</div>
<div class="form-group">
<label>{{localize "EDITOR.LinkTitle"}}</label>
<div class="form-fields">
<input type="text" name="title" value="{{title}}">
</div>
</div>
<button type="button" name="save">{{localize "EDITOR.LinkInsert"}}</button>
</form>

View File

@@ -0,0 +1,12 @@
<form>
<div class="form-group slim">
<label>{{ localize "EDITOR.TableDimensions" }}</label>
<div class="form-fields">
<label>{{ localize "EDITOR.TableColumns" }}</label>
{{ numberInput 1 name="cols" min=1 step=1 placeholder=1 }}
<label>{{ localize "EDITOR.TableRows" }}</label>
{{ numberInput 1 name="rows" min=1 step=1 placeholder=1 }}
</div>
</div>
<button type="button" name="save">{{ localize "EDITOR.TableInsert" }}</button>
</form>

View File

@@ -0,0 +1,7 @@
<ol class="headings">
{{#each headings}}
<li class="heading h{{level}}" data-anchor="{{slug}}">
<a class="heading-link">{{text}}</a>
</li>
{{/each}}
</ol>

View File

@@ -0,0 +1,24 @@
<form class="{{cssClass}} flexcol" autocomplete="off">
{{> journalEntryPageHeader}}
<figure class="image-preview">
<img src="{{document.src}}" title="{{title}}" alt="{{title}}"/>
<figcaption>{{document.image.caption}}</figcaption>
</figure>
<div class="form-group picker">
<label>{{localize "JOURNALENTRYPAGE.ImageSource"}}</label>
<div class="form-fields">
<file-picker name="src" type="image" value="{{document.src}}"></file-picker>
</div>
</div>
<div class="form-group">
<label>{{localize "JOURNALENTRYPAGE.ImageCaption"}}</label>
<div class="form-fields">
<input type="text" name="image.caption" value="{{document.image.caption}}">
</div>
</div>
{{> journalEntryPageFooter}}
</form>

View File

@@ -0,0 +1,9 @@
{{#if data.title.show}}
<header class="journal-page-header">
<h{{data.title.level}}>{{data.name}}</h{{data.title.level}}>
</header>
{{/if}}
<figure>
<img src="{{data.src}}" alt="{{data.name}}">
{{#if data.image.caption}}<figcaption>{{data.image.caption}}</figcaption>{{/if}}
</figure>

View File

@@ -0,0 +1,8 @@
<form class="{{cssClass}} flexcol" autocomplete="off">
{{> journalEntryPageHeader}}
<input type="hidden" name="text.format" value="{{markdownFormat}}" data-dtype="Number">
<textarea class="markdown-editor" name="text.markdown" autofocus>
{{~data.text.markdown~}}
</textarea>
{{> journalEntryPageFooter}}
</form>

View File

@@ -0,0 +1,16 @@
<form class="{{cssClass}} flexcol" autocomplete="off">
{{> journalEntryPageHeader}}
{{#if document.src}}
<iframe src="scripts/pdfjs/web/viewer.html?{{params}}"></iframe>
{{/if}}
<div class="form-group picker">
<label>{{localize "JOURNALENTRYPAGE.PDFSource"}}</label>
<div class="form-fields">
<file-picker name="src" type="text" value="{{document.src}}"></file-picker>
</div>
</div>
{{> journalEntryPageFooter}}
</form>

View File

@@ -0,0 +1,10 @@
{{#if data.title.show}}
<header class="journal-page-header">
<h{{data.title.level}}>{{data.name}}</h{{data.title.level}}>
</header>
{{/if}}
{{#if data.src}}
<div class="load-pdf">
<button type="button">{{localize "JOURNALENTRYPAGE.PDFLoad"}}</button>
</div>
{{/if}}

View File

@@ -0,0 +1,5 @@
<form class="{{cssClass}} flexcol" autocomplete="off">
{{> journalEntryPageHeader}}
{{editor editor.content target="text.content" class="journal-page-content" button=false editable=true
engine=editor.engine collaborate=editor.collaborate}}
</form>

View File

@@ -0,0 +1,8 @@
{{#if data.title.show}}
<header class="journal-page-header">
<h{{data.title.level}}>{{data.name}}</h{{data.title.level}}>
</header>
{{/if}}
<section class="journal-page-content">
{{{editor.content}}}
</section>

View File

@@ -0,0 +1,78 @@
<form class="{{cssClass}} flexcol" autocomplete="off">
{{> journalEntryPageHeader}}
{{#if document.src}}
<figure class="{{#if flexRatio}}flex-ratio{{/if}}">
{{#if isYouTube}}
<iframe id="{{yt.id}}" src="{{yt.url}}" frameborder="0"
{{#if document.video.width}}width="{{document.video.width}}"{{/if}}
{{#if document.video.height}}height="{{document.video.height}}"{{/if}}>
</iframe>
{{else}}
<video src="{{document.src}}" controls
{{#if document.video.width}}width="{{document.video.width}}" {{/if}}
{{#if document.video.height}}height="{{document.video.height}}"{{/if}}>
</video>
{{/if}}
</figure>
{{/if}}
<div class="form-group picker">
<label>{{localize "JOURNALENTRYPAGE.VideoSource"}}</label>
<div class="form-fields">
<file-picker name="src" type="video" value="{{document.src}}"></file-picker>
</div>
<p class="hint">{{localize "JOURNALENTRYPAGE.VideoSourceHint"}}</p>
</div>
<div class="form-group">
<label>{{localize "JOURNALENTRYPAGE.VideoControls"}}</label>
<div class="form-fields">
<input type="checkbox" name="video.controls" {{checked document.video.controls}}>
</div>
</div>
<div class="form-group">
<label>{{localize "TILE.VideoAutoplay"}}</label>
<div class="form-fields">
<input type="checkbox" name="video.autoplay" {{checked document.video.autoplay}}>
</div>
</div>
<div class="form-group">
<label>{{localize "TILE.VideoLoop"}}</label>
<div class="form-fields">
<input type="checkbox" name="video.loop" {{checked document.video.loop}}>
</div>
</div>
<div class="form-group">
<label>{{localize "TILE.VideoVolume"}}</label>
<div class="form-fields">
{{rangePicker name="video.volume" min=0 max=1 step=0.1 value=document.video.volume}}
</div>
</div>
<div class="form-group video-time">
<label>{{localize "JOURNALENTRYPAGE.VideoStartTime"}}</label>
<div class="form-fields">
{{numberInput timestamp.h name="timestamp.h" min=0 step=1 placeholder=(localize "TIME.Hours")}}
<span class="sep">:</span>
{{numberInput timestamp.m name="timestamp.m" min=0 max=59 step=1 placeholder=(localize "TIME.Minutes")}}
<span class="sep">:</span>
{{numberInput timestamp.s name="timestamp.s" min=0 max=59 step=1 placeholder=(localize "TIME.Seconds")}}
</div>
</div>
<div class="form-group">
<label>{{localize "JOURNALENTRYPAGE.VideoDimensions"}}</label>
<div class="form-fields">
<label>{{localize "Width"}}</label>
{{numberInput document.video.width name="video.width" min=0 step=1}}
<label>{{localize "Height"}}</label>
{{numberInput document.video.height name="video.height" min=0 step=1}}
</div>
</div>
{{> journalEntryPageFooter}}
</form>

View File

@@ -0,0 +1,23 @@
{{#if data.title.show}}
<header class="journal-page-header">
<h{{data.title.level}}>{{data.name}}</h{{data.title.level}}>
</header>
{{/if}}
{{#if document.src}}
<figure class="{{#if flexRatio}}flex-ratio{{/if}}">
{{#if isYouTube}}
<iframe id="{{yt.id}}" src="{{yt.url}}" frameborder="0" allowfullscreen
{{#if document.video.autoplay}}allow="autoplay" {{/if}}
{{#if document.video.width}}width="{{document.video.width}}" {{/if}}
{{#if document.video.height}}height="{{document.video.height}}"{{/if}}></iframe>
{{else}}
<video src="{{document.src}}"
{{#if document.video.controls}}controls{{/if}}
{{#if document.video.autoplay}}autoplay{{/if}}
{{#if document.video.loop}}loop{{/if}}
{{#if document.video.width}}width="{{document.video.width}}" {{/if}}
{{#if document.video.height}}height="{{document.video.height}}"{{/if}}></video>
{{/if}}
</figure>
{{/if}}

View File

@@ -0,0 +1,5 @@
<footer class="sheet-footer journal-footer flexrow">
<button type="submit">
<i class="fas fa-feather-alt"></i> {{localize "JOURNAL.Submit"}}
</button>
</footer>

View File

@@ -0,0 +1,22 @@
<header class="journal-header">
<input class="title" name="name" type="text" value="{{data.name}}" placeholder="{{localize 'JOURNALENTRYPAGE.PageTitle'}}"/>
<aside class="page-level flexcol">
<div class="heading-level flexrow">
<label class="flex0" data-tooltip="{{localize 'JOURNALENTRYPAGE.HeadingLevel'}}">
<i class="fa-solid fa-list-tree"></i>
</label>
<select name="title.level">
{{selectOptions headingLevels selected=data.title.level}}
</select>
</div>
<div class="show-title">
<label class="checkbox">
{{localize "JOURNALENTRYPAGE.ShowTitle"}}
<input type="checkbox" name="title.show" {{checked data.title.show}}>
</label>
</div>
</aside>
</header>

View File

@@ -0,0 +1,72 @@
<div class="journal-sheet-container">
{{! Sidebar Container }}
<aside class="sidebar directory flexcol journal-sidebar {{sidebarClass}}">
{{! Sidebar Search }}
<header class="directory-header">
<div class="header-search flexrow">
<a class="action-button view-mode" data-action="toggleView"
data-tooltip="{{localize viewMode.label}}"><i class="{{viewMode.icon}}"></i></a>
<a class="action-button toggle-search-mode" data-action="toggleSearch" data-tooltip="{{localize searchTooltip}}"><i class="fas {{searchIcon}}"></i></a>
<input type="search" name="search" value="" autocomplete="off"
placeholder="{{localize "SIDEBAR.Search" types=(localize "DOCUMENT.JournalEntryPages")}}">
<a class="action-button collapse-toggle" data-action="toggleCollapse"
data-tooltip="{{localize collapseMode.label}}"><i class="{{collapseMode.icon}}"></i></a>
</div>
</header>
{{! Sidebar Pages Navigation }}
<nav class="pages-list" aria-label="{{localize 'JOURNAL.NavLabel'}}" data-tooltip-direction="RIGHT">
<ol class="directory-list scrollable">
{{#each toc as |page|}}
<li class="directory-item {{page.tocClass}}" data-page-id="{{page._id}}">
<div class="page-heading">
<span class="page-number" data-tooltip="{{page.name}}">{{page.number}}.</span>
<span class="page-title">{{page.name}}</span>
{{#if page.icon}}
<span class="page-ownership {{page.ownershipCls}}"><i class="{{page.icon}}"></i></span>
{{/if}}
</div>
</li>
{{/each}}
</ol>
</nav>
{{! Sidebar Control Buttons }}
<div class="action-buttons flexrow">
<button class="previous" type="button" data-action="previous" data-tooltip="{{localize 'JOURNAL.PrevPage'}}">
<i class="fa-solid fa-chevron-left"></i>
</button>
{{#if editable}}
<button class="create" type="button" data-action="createPage">
<i class="fa-solid fa-file-circle-plus"></i> {{localize "JOURNAL.AddPage"}}
</button>
{{/if}}
<button class="next" type="button" data-action="next" data-tooltip="{{localize 'JOURNAL.NextPage'}}">
<i class="fa-solid fa-chevron-right"></i>
</button>
</div>
</aside>
{{! Main Content }}
<section class="journal-entry-content flexcol">
<form class="journal-header">
<input class="title" name="name" type="text" value="{{document.name}}" placeholder="{{localize "JOURNAL.EntryTitle"}}"/>
</form>
<div class="journal-entry-pages {{cssClass}} {{viewMode.cls}}">
<div class="scrollable">
{{#each pages as |page|}}
<article class="journal-entry-page {{page.viewClass}}" data-page-id="{{page._id}}">
{{#if page.editable}}
<div class="edit-container">
<a class="editor-edit"><i class="fas fa-edit"></i></a>
</div>
{{/if}}
</article>
{{/each}}
</div>
</div>
</section>
</div>

View File

@@ -0,0 +1,48 @@
<form autocomplete="off">
<div class="form-group">
<label>{{ localize "PLAYLIST.Name" }}</label>
<input type="text" name="name" placeholder="{{ localize 'PLAYLIST.Name' }}" value="{{data.name}}"/>
</div>
<div class="form-group">
<label>{{ localize "PLAYLIST.Mode" }}</label>
<select name="mode" data-dtype="Number">
{{selectOptions modes selected=data.mode}}
</select>
</div>
<div class="form-group">
<label>{{ localize "PLAYLIST.Channel" }}</label>
<select name="channel">
{{selectOptions channels selected=data.channel localize=true}}
</select>
</div>
<div class="form-group">
<label>{{localize "PLAYLIST.SortMode"}}</label>
<select name="sorting">
{{selectOptions sorting selected=data.sorting}}
</select>
</div>
<div class="form-group">
<label>{{ localize "PLAYLIST.Fade" }}</label>
<input name="fade" type="number" value="{{data.fade}}" step="1" min="0"/>
</div>
<div class="form-group form-group-stacked">
<label>{{ localize "PLAYLIST.Description" }}</label>
<textarea name="description" style="resize: none;">{{data.description}}</textarea>
</div>
<div class="form-group">
<label>{{ localize "PLAYLIST.BulkImport" }}</label>
<div class="form-fields">
<file-picker name="importPath" type="folder" noupload></file-picker>
</div>
</div>
<button type="submit">
<i class="far fa-save"></i> {{ localize "PLAYLIST.Update" }}
</button>
</form>

View File

@@ -0,0 +1,44 @@
<form autocomplete="off">
<div class="form-group">
<label>{{ localize "PLAYLIST.SoundName" }}</label>
<input type="text" name="name" placeholder="{{ localize 'Name' }}" value="{{data.name}}" required/>
</div>
<div class="form-group">
<label>{{ localize "PLAYLIST.SoundSrc" }}</label>
<div class="form-fields">
<file-picker name="path" type="audio" value="{{data.path}}" placeholder="path/to/audio.mp3"></file-picker>
</div>
</div>
<div class="form-group">
<label>{{ localize "PLAYLIST.Channel" }}</label>
<select name="channel">
{{selectOptions channels selected=data.channel localize=true blank=""}}
</select>
</div>
<div class="form-group">
<label>{{ localize "PLAYLIST.SoundVolume" }}</label>
<input class="sound-volume" type="range" name="lvolume" title="{{ localize 'PLAYLIST.SoundVolume' }}" value="{{lvolume}}" min="0" max="1" step="0.05" tabindex="-1"/>
</div>
<div class="form-group">
<label>{{ localize "PLAYLIST.SoundRepeat" }}</label>
<input type="checkbox" name="repeat" {{checked data.repeat}}/>
</div>
<div class="form-group">
<label>{{ localize "PLAYLIST.Fade" }}</label>
<input name="fade" type="number" value="{{data.fade}}" step="1" min="0"/>
</div>
<div class="form-group form-group-stacked">
<label>{{ localize "PLAYLIST.SoundDescription" }}</label>
<textarea name="description" style="resize: none;">{{data.description}}</textarea>
</div>
<button type="submit">
<i class="far fa-save"></i> {{ localize "PLAYLIST.SoundUpdate" }}
</button>
</form>

View File

@@ -0,0 +1,79 @@
<div class="form-body standard-form scrollable">
<fieldset>
<legend>{{ localize "AMBIENT_SOUND.SECTIONS.SOURCE" }}</legend>
{{formField fields.path value=source.path placeholder=(localize "SOUND.PathPlaceholder")}}
</fieldset>
<fieldset>
<legend>{{ localize "AMBIENT_SOUND.SECTIONS.PLACEMENT" }}</legend>
<div class="form-group slim">
<label>{{localize "Coordinates"}} <span class="units">({{localize "Pixels"}})</span></label>
<div class="form-fields">
<label>{{fields.x.label}}</label>
{{formInput fields.x value=source.x}}
<label>{{fields.y.label}}</label>
{{formInput fields.y value=source.y}}
</div>
</div>
<div class="form-group slim">
<label>{{fields.radius.label}} <span class="units">({{gridUnits}})</span></label>
<div class="form-fields">
{{formInput fields.radius value=source.radius}}
</div>
</div>
<div class="form-group slim">
<label>{{fields.elevation.label}} <span class="units">({{gridUnits}})</span></label>
<div class="form-fields">
{{formInput fields.elevation value=source.elevation placeholder=gridUnits}}
</div>
</div>
<p class="hint">{{localize "AMBIENT_SOUND.SECTIONS.PLACEMENT_HINT"}}</p>
</fieldset>
<fieldset>
<legend>{{ localize "AMBIENT_SOUND.SECTIONS.VOLUME" }}</legend>
{{formField fields.volume value=source.volume}}
{{formField fields.easing value=source.easing}}
</fieldset>
<fieldset>
<legend>{{ localize "AMBIENT_SOUND.SECTIONS.ACTIVATION" }}</legend>
{{formField fields.hidden value=source.hidden}}
{{formField fields.walls value=source.walls}}
<div class="form-group slim">
<label>{{fields.darkness.label}}</label>
<div class="form-fields">
<label>{{fields.darkness.fields.min.label}}</label>
{{ numberInput source.darkness.min name="darkness.min" min=0 max=1 placeholder="0" }}
<label>{{fields.darkness.fields.max.label}}</label>
{{ numberInput source.darkness.max name="darkness.max" min=0 max=1 placeholder="1" }}
</div>
<p class="hint">{{fields.darkness.hint}}</p>
</div>
</fieldset>
<fieldset>
<legend>{{ localize "AMBIENT_SOUND.SECTIONS.EFFECTS" }}</legend>
<div class="form-group">
<label>{{fields.effects.fields.base.fields.type.label}}</label>
<div class="form-fields">
<select name="effects.base.type">
{{selectOptions soundEffects selected=source.effects.base.type labelAttr="label" blank="" localize=true}}
</select>
</div>
</div>
{{formField fields.effects.fields.base.fields.intensity value=source.effects.base.intensity}}
<p class="hint">{{fields.effects.fields.base.hint}}</p>
<div class="form-group">
<label>{{fields.effects.fields.muffled.fields.type.label}}</label>
<div class="form-fields">
<select name="effects.muffled.type">
{{selectOptions soundEffects selected=source.effects.muffled.type labelAttr="label" blank="" localize=true}}
</select>
</div>
</div>
{{formField fields.effects.fields.muffled.fields.intensity value=source.effects.muffled.intensity}}
<p class="hint">{{fields.effects.fields.muffled.hint}}</p>
</fieldset>
</div>

View File

@@ -0,0 +1,270 @@
<form class="flexcol {{cssClasses}}" autocomplete="off">
<!-- Configuration Tabs -->
<nav class="sheet-tabs tabs" data-group="main" aria-role="{{localize 'SHEETS.FormNavLabel'}}">
<a class="item" data-tab="basic"><i class="fas fa-image"></i> {{localize "SCENES.HeaderDetails"}}</a>
<a class="item" data-tab="grid"><i class="fas fa-ruler"></i> {{localize "SCENES.HeaderGrid"}}</a>
<a class="item" data-tab="lighting"><i class="fas fas fa-lightbulb"></i> {{localize "SCENES.HeaderVision"}}</a>
<a class="item" data-tab="ambience"><i class="fas fa-cloud-sun"></i> {{localize "SCENES.HeaderAmbience"}}</a>
</nav>
<!-- Basic Tab -->
<div class="tab" data-group="main" data-tab="basic">
<div class="form-group">
<label>{{localize "SCENES.SceneName"}}</label>
<div class="form-fields">
<input type="text" name="name" placeholder="{{localize 'Name'}}" value="{{data.name}}"/>
</div>
</div>
<div class="form-group">
<label>{{localize "SCENES.Accessibility"}}</label>
<div class="form-fields">
<label class="checkbox">
{{localize "SCENES.ShowNav"}}
<input type="checkbox" name="navigation" {{checked data.navigation}}>
</label>
<select name="ownership.default" data-dtype="Number">
{{selectOptions ownerships selected=data.ownership.default localize=true}}
</select>
</div>
</div>
<div class="form-group">
<label>{{localize "SCENES.NavName"}}</label>
<div class="form-fields">
<input type="text" name="navName" value="{{data.navName}}"/>
</div>
<p class="notes">{{localize "SCENES.NavNameHint"}}</p>
</div>
<hr>
<div class="form-group">
<label>{{localize "SCENES.BackgroundImage"}}</label>
<div class="form-fields">
<file-picker name="background.src" type="imagevideo" value="{{data.background.src}}"></file-picker>
</div>
<p class="notes">{{localize "SCENES.BackgroundImageHint"}}</p>
</div>
<div class="form-group">
<label>{{localize "SCENES.ForegroundImage"}}</label>
<div class="form-fields">
<file-picker name="foreground" type="imagevideo" value="{{data.foreground}}"></file-picker>
</div>
<p class="notes">{{localize "SCENES.ForegroundImageHint"}}</p>
</div>
<hr>
<div class="form-group">
<label>{{localize "SCENES.BackgroundColor"}}</label>
<div class="form-fields">
<color-picker name="backgroundColor" value="{{data.backgroundColor}}" placeholder="#999999"></color-picker>
</div>
</div>
<div class="form-group">
<label>{{localize "SCENES.ForegroundElevation"}}</label>
<div class="form-fields">
{{numberInput foregroundElevation name="foregroundElevation" min=1 step=1}}
</div>
<p class="notes">{{localize "SCENES.ForegroundElevationHint"}}</p>
</div>
<div class="form-group initial-position">
<label>{{localize "SCENES.InitialView"}}</label>
<div class="form-fields">
<button class="capture-position" type="button" data-tooltip="{{ localize "SCENES.InitialViewButton" }}">
<i class="fas fa-crop-alt fa-fw"></i>
</button>
<label>X</label>
<input type="number" name="initial.x" placeholder="0" value="{{data.initial.x}}" step="1"/>
<label>Y</label>
<input type="number" name="initial.y" placeholder="0" value="{{data.initial.y}}" step="1"/>
<label>{{localize "SCENES.ZoomLower"}}</label>
<input type="number" name="initial.scale" placeholder="1" value="{{data.initial.scale}}" step="any"/>
</div>
<p class="notes">{{localize "SCENES.InitialViewHint"}}</p>
</div>
</div>
<!-- Grid Tab -->
<div class="tab" data-group="main" data-tab="grid">
<div class="form-group">
<label>{{localize "SCENES.GridType"}}</label>
<div class="form-fields">
<button type="button" class="grid-config" data-tooltip="{{ localize "SCENES.GridConfigTool" }}">
<i class="fas fa-ruler-combined"></i>
</button>
<select name="grid.type" data-dtype="Number">
{{ selectOptions gridTypes selected=data.grid.type localize=true }}
</select>
</div>
</div>
<div class="form-group">
<label>{{localize "SCENES.GridSize"}} <span class="units">({{localize "SCENES.Pixels"}})</span></label>
<div class="form-fields">
{{numberInput data.grid.size name="grid.size" placeholder=(localize "SCENES.Pixels") min=minGrid step=1}}
</div>
<p class="notes">{{localize "SCENES.GridSizeHint"}}</p>
</div>
<div class="form-group">
<label>{{localize "SCENES.Dimensions"}} <span class="units">({{localize "SCENES.Pixels"}})</span></label>
<div class="form-fields">
<label>{{localize "Width"}}</label>
{{numberInput data.width name="width"}}
<button type="button" class="dimension-link" data-tooltip="{{ localize 'SCENES.DimensionLinked' }}">
<i class="fas fa-link-simple"></i>
</button>
<label>{{localize "Height"}}</label>
{{numberInput data.height name="height"}}
</div>
<p class="notes">{{localize "SCENES.DimensionsHint"}}</p>
</div>
<div class="form-group">
<label>{{localize "SCENES.Padding"}}</label>
<div class="form-fields">
<range-picker name="padding" value="{{data.padding}}" min="0" max="0.5" step="0.05"></range-picker>
</div>
<p class="notes">{{localize "SCENES.PaddingHint"}}</p>
</div>
<div class="form-group">
<label>{{localize "SCENES.ShiftBG"}} <span class="units">({{localize "SCENES.Pixels"}})</span></label>
<div class="form-fields">
<label class="grid-label">{{localize "SCENES.ShiftHorizontal"}}</label>
{{numberInput data.background.offsetX name="background.offsetX" placeholder=(localize "SCENES.Pixels")}}
<label class="grid-label">{{localize "SCENES.ShiftVertical"}}</label>
{{numberInput data.background.offsetY name="background.offsetY" placeholder=(localize "SCENES.Pixels")}}
</div>
</div>
<hr>
<div class="form-group">
<label>{{localize "SCENES.GridScale"}}</label>
<div class="form-fields">
<label class="grid-label">{{localize "SCENES.GridDistance"}}</label>
{{numberInput data.grid.distance name="grid.distance" placeholder=1}}
<label class="grid-label">{{localize "SCENES.GridUnits"}}</label>
<input type="text" name="grid.units" placeholder="{{localize "None"}}" value="{{data.grid.units}}"/>
</div>
</div>
<div class="form-group">
<label>{{localize "SCENES.GridStyle"}}</label>
<div class="form-fields">
<select name="grid.style">
{{ selectOptions gridStyles selected=data.grid.style labelAttr="label" localize=true }}
</select>
</div>
</div>
<div class="form-group">
<label>{{localize "SCENES.GridThickness"}}</label>
<div class="form-fields">
{{numberInput data.grid.thickness name="grid.thickness" placeholder=1}}
</div>
</div>
<div class="form-group">
<label>{{localize "SCENES.GridColor"}}</label>
<div class="form-fields">
<color-picker name="grid.color" value="{{data.grid.color}}" placeholder="#000000"></color-picker>
</div>
</div>
<div class="form-group">
<label>{{localize "SCENES.GridOpacity"}}</label>
<div class="form-fields">
<range-picker name="grid.alpha" value="{{data.grid.alpha}}" min="0" max="1" step="0.05"></range-picker>
</div>
</div>
</div>
<!-- Lighting and Vision -->
<div class="tab" data-group="main" data-tab="lighting">
<div class="form-group">
<label>{{localize "SCENES.TokenVision"}}</label>
<input type="checkbox" name="tokenVision" {{checked data.tokenVision}}/>
<p class="notes">{{localize "SCENES.TokenVisionHint"}}</p>
</div>
<div class="form-group">
<label>{{localize "SCENES.FogExplore"}}</label>
<input type="checkbox" name="fog.exploration" {{checked data.fog.exploration}}/>
<p class="notes">{{localize "SCENES.FogExploreHint"}}</p>
</div>
<div class="form-group">
<label>{{localize "SCENES.FogOverlay"}}</label>
<div class="form-fields">
<file-picker name="fog.overlay" type="imagevideo" value="{{data.fog.overlay}}"></file-picker>
</div>
<p class="notes">{{localize "SCENES.FogOverlayHint"}}</p>
</div>
<div class="form-group">
<label>{{localize "SCENES.FogUnexploredColor"}}</label>
<div class="form-fields">
<color-picker name="fog.colors.unexplored" value="{{data.fog.colors.unexplored}}"></color-picker>
</div>
<p class="notes">{{localize "SCENES.FogUnexploredColorHint"}}</p>
</div>
<div class="form-group">
<label>{{localize "SCENES.FogExploredColor"}}</label>
<div class="form-fields">
<color-picker name="fog.colors.explored" value="{{data.fog.colors.explored}}"></color-picker>
</div>
<p class="notes">{{localize "SCENES.FogExploredColorHint"}}</p>
</div>
<hr>
<div class="form-group">
<label>{{localize "SCENES.GlobalIllum"}}</label>
<input type="checkbox" name="environment.globalLight.enabled" {{checked data.environment.globalLight.enabled}}/>
<p class="notes">{{localize "SCENES.GlobalIllumHint"}}</p>
</div>
<div class="form-group">
<label>{{localize "SCENES.GlobalLightThreshold"}}</label>
<div class="form-fields">
<range-picker name="environment.globalLight.darkness.max"
value="{{data.environment.globalLight.darkness.max}}"
min="0" max="1" step="0.05"></range-picker>
</div>
<p class="notes">{{localize "SCENES.GlobalLightThresholdHint"}}</p>
</div>
<div class="form-group">
<label>{{localize "SCENES.Darkness"}}</label>
<div class="form-fields">
<range-picker name="environment.darknessLevel" value="{{data.environment.darknessLevel}}"
min="0" max="1" step="0.05" {{disabled data.environment.darknessLock}}></range-picker>
</div>
<p class="notes">{{localize "SCENES.DarknessHint"}}</p>
</div>
<div class="form-group">
<label>{{localize "SCENES.ENVIRONMENT.DarknessLock"}}</label>
<input type="checkbox" name="environment.darknessLock" {{checked data.environment.darknessLock}}/>
<p class="notes">{{localize "SCENES.ENVIRONMENT.DarknessLockHint"}}</p>
</div>
</div>
<!-- Ambience and Atmosphere -->
{{> "templates/scene/parts/scene-ambience.html"}}
<!-- Form Submission -->
<footer class="sheet-footer">
<button type="reset" {{#unless isEnvironment}}class="hidden"{{/unless}}>
<i class="fas fa-undo"></i> {{ localize "SCENES.ENVIRONMENT.ResetEnvironment" }}
</button>
<button type="submit">
<i class="far fa-save"></i> {{ localize "SETTINGS.Save" }}
</button>
</footer>
</form>

View File

@@ -0,0 +1,64 @@
<form class="flexcol {{cssClasses}}" autocomplete="off">
<!-- Token Configuration Tabs -->
<nav class="sheet-tabs tabs" data-group="main" aria-role="{{localize 'SHEETS.FormNavLabel'}}">
<a class="item" data-tab="character"><i class="fas fa-user"></i> {{localize "TOKEN.HeaderIdentity"}}</a>
<a class="item" data-tab="vision"><i class="fas fa-eye"></i> {{localize "TOKEN.HeaderVision"}}</a>
<a class="item" data-tab="light"><i class="fas fa-lightbulb"></i> {{localize "TOKEN.HeaderLight"}}</a>
<a class="item" data-tab="resources"><i class="fas fa-heart"></i> {{localize "TOKEN.HeaderResources"}}</a>
</nav>
<!-- Token Character -->
<div class="tab" data-group="main" data-tab="character">
<div class="form-group">
<label>{{localize "TOKEN.CharShowNameplate"}}</label>
<select name="displayName" data-dtype="Number">
{{selectOptions displayModes selected=object.displayName }}
</select>
</div>
<div class="form-group">
<label>{{localize "TOKEN.Disposition"}}</label>
<select name="disposition" data-dtype="Number">
{{selectOptions dispositions selected=object.disposition }}
</select>
</div>
<div class="form-group">
<label>{{localize "TOKEN.LockRotation"}}</label>
<input type="checkbox" name="lockRotation" {{checked object.lockRotation}}/>
</div>
<hr>
<div class="form-group">
<label>{{localize "TOKEN.AppendNumber"}}</label>
<input type="checkbox" name="appendNumber" {{checked object.appendNumber}}/>
<p class="notes">{{localize "TOKEN.AppendNumberHint" name="Kobold"}}</p>
</div>
<div class="form-group">
<label>{{localize "TOKEN.PrependAdjective"}}</label>
<input type="checkbox" name="prependAdjective" {{checked object.prependAdjective}}/>
<p class="notes">{{localize "TOKEN.PrependAdjectiveHint" name="Kobold"}}</p>
</div>
</div>
<!-- Vision -->
{{> "templates/scene/parts/token-vision.html"}}
<!-- Light -->
{{> "templates/scene/parts/token-lighting.hbs"}}
<!-- Resource Bars -->
{{> "templates/scene/parts/token-resources.html"}}
<footer class="sheet-footer flexrow">
<button type="submit">
<i class="far fa-save"></i> {{localize "SETTINGS.Save"}}
</button>
<button type="button" data-action="reset">
<i class="fas fa-undo"></i> {{localize "SETTINGS.Reset"}}
</button>
</footer>
</form>

View File

@@ -0,0 +1,176 @@
<form class="flexcol" autocomplete="off">
<!-- Sheet Navigation Tabs -->
<nav class="sheet-tabs tabs" aria-role="{{localize 'SHEETS.FormNavLabel'}}">
{{#unless isDefault}}
<a class="item" data-tab="position"><i class="fas fa-map-marker-alt"></i> {{ localize "DRAWING.TabPosition" }}</a>
{{/unless}}
<a class="item" data-tab="lines"><i class="fas fa-paint-brush"></i> {{ localize "DRAWING.TabLines" }}</a>
<a class="item" data-tab="fill"><i class="fas fa-fill-drip"></i> {{ localize "DRAWING.TabFill" }}</a>
<a class="item" data-tab="text"><i class="fas fa-font"></i> {{ localize "DRAWING.TabText" }}</a>
</nav>
<!-- Position Tab -->
{{#unless isDefault}}
<div class="tab" data-tab="position">
<p class="notes">{{ localize "DRAWING.NotePosition" }}</p>
<div class="form-group">
<label>{{ localize "DRAWING.Author" }}</label>
<input type="text" name="author" value="{{author}}" disabled/>
</div>
<div class="form-group">
<label>{{ localize "XCoord" }} <span class="units">({{ localize "Pixels" }})</span></label>
{{numberInput object.x name="x" step=1}}
</div>
<div class="form-group">
<label>{{ localize "YCoord" }} <span class="units">({{ localize "Pixels" }})</span></label>
{{numberInput object.y name="y" step=1}}
</div>
<div class="form-group">
<label>{{ localize "DRAWING.Width" }} <span class="units">({{ localize "Pixels" }})</span></label>
{{numberInput object.shape.width name="shape.width" step="1"}}
</div>
<div class="form-group">
<label>{{ localize "DRAWING.Height" }} <span class="units">({{ localize "Pixels" }})</span></label>
{{numberInput object.shape.height name="shape.height" step="1"}}
</div>
<div class="form-group">
<label>{{ localize "DRAWING.Rotation" }} <span class="units">({{ localize "Degrees" }})</span></label>
{{numberInput object.rotation name="rotation" step=1}}
</div>
<div class="form-group">
<label>{{localize "Elevation"}} <span class="units">({{gridUnits}})</span></label>
{{numberInput object.elevation name="elevation" placeholder=gridUnits}}
</div>
<div class="form-group">
<label>{{ localize "Sort" }}</label>
{{numberInput object.sort name="sort" step=1}}
</div>
<hr>
<div class="form-group">
<label>{{ localize "DRAWING.Role" }}</label>
<select name="drawingRole">
{{selectOptions drawingRoles selected=currentRole localize=true}}
</select>
<p class="hint">{{ localize "DRAWING.RoleHint" }}</p>
</div>
</div>
{{/unless}}
<!-- Lines Tab -->
<div class="tab" data-tab="lines">
<p class="notes">{{ localize "DRAWING.NoteLines" }}</p>
<div class="form-group">
<label>{{ localize "DRAWING.LineWidth" }} <span class="units">({{ localize "Pixels" }})</span></label>
{{numberInput object.strokeWidth name="strokeWidth" step=1}}
</div>
<div class="form-group">
<label>{{ localize "DRAWING.StrokeColor" }}</label>
<div class="form-fields">
<color-picker name="strokeColor" value="{{object.strokeColor}}" placeholder="{{userColor}}"></color-picker>
</div>
</div>
<div class="form-group">
<label>{{ localize "DRAWING.LineOpacity" }}</label>
<div class="form-fields">
{{rangePicker name="strokeAlpha" value=object.strokeAlpha min="0" max="1" step="0.1"}}
</div>
</div>
<div class="form-group">
<label>{{ localize "DRAWING.SmoothingFactor" }}</label>
<div class="form-fields">
{{rangePicker name="bezierFactor" value=scaledBezierFactor min="0" max="1" step="0.1"}}
</div>
<p class="notes">{{ localize "DRAWING.SmoothingFactorHint" }}</p>
</div>
</div>
<!-- Fill Tab -->
<div class="tab" data-tab="fill">
<p class="notes">{{ localize "DRAWING.NoteFill" }}</p>
<div class="form-group">
<label>{{ localize "DRAWING.FillTypes" }}</label>
<select name="fillType" data-dtype="Number">
{{selectOptions fillTypes selected=object.fillType localize=true}}
</select>
</div>
<div class="form-group">
<label>{{ localize "DRAWING.FillColor" }}</label>
<div class="form-fields">
<color-picker name="fillColor" value="{{object.fillColor}}" placeholder="{{userColor}}"></color-picker>
</div>
</div>
<div class="form-group">
<label>{{ localize "DRAWING.FillOpacity" }}</label>
<div class="form-fields">
{{rangePicker name="fillAlpha" value=object.fillAlpha min="0" max="1" step="0.1"}}
</div>
</div>
<div class="form-group">
<label>{{ localize "DRAWING.FillTexture" }}</label>
<div class="form-fields">
<file-picker name="texture" type="image" value="{{object.texture}}"></file-picker>
</div>
</div>
</div>
<!-- Text Tab -->
<div class="tab" data-tab="text">
<p class="notes">{{ localize "DRAWING.NoteText" }}</p>
<div class="form-group">
<label>{{ localize "DRAWING.TextLabel" }}</label>
<input type="text" name="text" value="{{object.text}}"/>
</div>
<div class="form-group">
<label>{{ localize "DRAWING.FontFamily" }}</label>
<select name="fontFamily">
{{selectOptions fontFamilies selected=object.fontFamily}}
</select>
</div>
<div class="form-group">
<label>{{ localize "DRAWING.FontSize" }}</label>
{{numberInput object.fontSize name="fontSize" step=1}}
</div>
<div class="form-group">
<label>{{ localize "DRAWING.TextColor" }}</label>
<div class="form-fields">
<color-picker name="textColor" value="{{object.textColor}}" placeholder="#ffffff"></color-picker>
</div>
</div>
<div class="form-group">
<label>{{ localize "DRAWING.TextOpacity" }}</label>
<div class="form-fields">
{{rangePicker name="textAlpha" value=object.textAlpha min="0" max="1" step="0.1"}}
</div>
</div>
</div>
<!-- Sheet Footer -->
<footer class="sheet-footer flexrow">
{{#if options.configureDefault}}
<button type="reset" name="reset">
<i class="fas fa-undo"></i> {{ localize "DRAWING.SubmitReset" }}
</button>
{{/if}}
<button type="submit"><i class="far fa-save"></i> {{localize submitText}}</button>
</footer>
</form>

View File

@@ -0,0 +1,48 @@
<form autocomplete="off">
<p class="notes">{{localize "SCENES.GridConfigToolHint"}}</p>
<div class="form-group">
<label>{{localize "SCENES.GridType"}}</label>
<div class="form-fields">
<select name="grid.type" data-dtype="Number">
{{selectOptions gridTypes selected=scene.grid.type localize=true}}
</select>
</div>
</div>
<div class="form-group">
<label>{{ localize "SCENES.BackgroundScale" }}</label>
<div class="form-fields">
{{numberInput scale name="scale"}}
</div>
<p class="notes">{{localize "SCENES.BackgroundScaleHint"}}</p>
</div>
<div class="form-group">
<label>{{ localize "SCENES.GridSize" }}</label>
<div class="form-fields">
{{numberInput scene.grid.size name="grid.size" min=50 step=1}}
</div>
<p class="notes">{{ localize "SCENES.GridResizeHint" }}</p>
</div>
<div class="form-group">
<label>{{ localize "SCENES.GridPosition" }}</label>
<div class="form-fields">
<label>x</label>
{{numberInput scene.background.offsetX name="background.offsetX"}}
<label>y</label>
{{numberInput scene.background.offsetY name="background.offsetY"}}
</div>
<p class="notes">{{ localize "SCENES.GridPositionHint" }}</p>
</div>
<div class="form-group">
<button type="reset" name="reset">
<i class="fas fa-sync"></i> {{ localize "SCENES.GridReset" }}
</button>
<button type="submit">
<i class="fas fa-save"></i> {{ localize "SETTINGS.Save" }}
</button>
</div>
</form>

View File

@@ -0,0 +1,124 @@
<form autocomplete="off">
<div class="form-group">
<label>{{ localize "DOCUMENT.JournalEntry" }}</label>
<div class="form-fields">
<select name="entryId">
{{selectOptions entries selected=data.entryId valueAttr="id" labelAttr="name" blank=""}}
</select>
</div>
</div>
<div class="form-group">
<label>{{localize "JOURNALENTRYPAGE.Page"}}</label>
<div class="form-fields">
<select name="pageId">
{{selectOptions pages selected=data.pageId valueAttr="id" labelAttr="name" blank=""}}
</select>
</div>
</div>
<div class="form-group">
<label>{{ localize "NOTE.TextLabel" }}</label>
<div class="form-fields">
<input type="text" name="text" value="{{data.text}}" placeholder="{{label}}"/>
</div>
</div>
<div class="form-group">
<label>{{ localize "XCoord" }}</label>
<div class="form-fields">
{{numberInput data.x name="x"}}
</div>
</div>
<div class="form-group">
<label>{{ localize "YCoord" }}</label>
<div class="form-fields">
{{numberInput data.y name="y"}}
</div>
</div>
<div class="form-group">
<label>{{localize "Elevation"}} <span class="units">({{gridUnits}})</span></label>
{{numberInput data.elevation name="elevation" placeholder=gridUnits}}
</div>
<div class="form-group">
<label>{{ localize "Sort" }}</label>
{{numberInput data.sort name="sort" step=1}}
</div>
<div class="form-group">
<label>{{ localize "NOTE.Global" }}</label>
<div class="form-fields">
<input type="checkbox" name="global" {{checked data.global}}>
</div>
<p class="notes">{{ localize "NOTE.GlobalHint" }}</p>
</div>
<div class="form-group">
<label>{{ localize "NOTE.EntryIcon" }}</label>
<div class="form-fields">
<select name="icon.selected">
{{selectOptions icons selected=icon.selected valueAttr="src" labelAttr="label"}}
</select>
</div>
</div>
<div class="form-group">
<label>{{ localize "NOTE.CustomIcon" }}</label>
<div class="form-fields">
<file-picker name="icon.custom" type="image" value="{{icon.custom}}"></file-picker>
</div>
</div>
<div class="form-group">
<label>{{ localize "NOTE.IconSize" }} <span class="units">({{localize "Pixels"}})</span></label>
<div class="form-fields">
{{numberInput data.iconSize name="iconSize"}}
</div>
</div>
<div class="form-group">
<label>{{ localize "NOTE.IconTint" }}</label>
<div class="form-fields">
<color-picker name="texture.tint" value="{{data.texture.tint}}" placeholder="#ffffff"></color-picker>
</div>
</div>
<div class="form-group">
<label for="fontFamily">{{ localize "NOTE.FontFamily" }}</label>
<div class="form-fields">
<select name="fontFamily">
{{selectOptions fontFamilies selected=data.fontFamily}}
</select>
</div>
</div>
<div class="form-group">
<label>{{ localize "NOTE.FontSize" }}</label>
<div class="form-fields">
{{numberInput data.fontSize name="fontSize"}}
</div>
</div>
<div class="form-group">
<label for="textColor">{{ localize "NOTE.TextColor" }}</label>
<div class="form-fields">
<color-picker name="textColor" value="{{data.textColor}}" placeholder="#ffffff"></color-picker>
</div>
</div>
<div class="form-group">
<label>{{ localize "NOTE.AnchorPoint" }}</label>
<div class="form-fields">
<select name="textAnchor" data-dtype="Number">
{{selectOptions textAnchors selected=data.textAnchor}}
</select>
</div>
</div>
<button type="submit">
<i class="far fa-save"></i> {{ submitText }}
</button>
</form>

View File

@@ -0,0 +1,20 @@
<section class="tab standard-form scrollable {{tabs.advanced.cssClass}}"
data-tab="advanced" data-group="{{tabs.advanced.group}}">
{{#if isDarkness}}
<p class="hint">
<i class="fa-solid fa-exclamation-triangle"></i>
{{localize "AMBIENT_LIGHT.LABELS.darknessAdvancedWarning"}}
</p>
{{/if}}
<fieldset {{disabled isDarkness}}>
<legend>{{ localize "AMBIENT_LIGHT.SECTIONS.ADVANCED" }}</legend>
{{formGroup fields.vision value=source.vision}}
{{formGroup fields.config.fields.coloration value=source.config.coloration
choices=colorationTechniques valueAttr="id" labelAttr="label" localize=true}}
{{formGroup fields.config.fields.luminosity value=source.config.luminosity step=0.05}}
{{formGroup fields.config.fields.attenuation value=source.config.attenuation step=0.05}}
{{formGroup fields.config.fields.saturation value=source.config.saturation step=0.05}}
{{formGroup fields.config.fields.contrast value=source.config.contrast step=0.05}}
{{formGroup fields.config.fields.shadows value=source.config.shadows step=0.05}}
</fieldset>
</section>

View File

@@ -0,0 +1,12 @@
<section class="tab standard-form scrollable {{tabs.animation.cssClass}}"
data-tab="animation" data-group="{{tabs.animation.group}}">
<fieldset>
<legend>{{ localize "AMBIENT_LIGHT.SECTIONS.ANIMATION" }}</legend>
{{formGroup fields.config.fields.animation.fields.type value=source.config.animation.type
choices=lightAnimations labelAttr="label" blank="None" sort=true localize=true}}
{{formGroup fields.config.fields.animation.fields.speed value=source.config.animation.speed}}
{{formGroup fields.config.fields.animation.fields.reverse value=source.config.animation.reverse}}
{{formGroup fields.config.fields.animation.fields.intensity value=source.config.animation.intensity}}
</fieldset>
</section>

View File

@@ -0,0 +1,50 @@
<section class="tab standard-form scrollable {{tabs.basic.cssClass}}"
data-tab="basic" data-group="{{tabs.basic.group}}">
<fieldset>
<legend>{{ localize "AMBIENT_LIGHT.SECTIONS.PLACEMENT" }}</legend>
<div class="form-group slim">
<label>{{localize "Coordinates"}} <span class="units">({{localize "Pixels"}})</span></label>
<div class="form-fields">
<label>{{fields.x.label}}</label>
{{formInput fields.x value=source.x}}
<label>{{fields.y.label}}</label>
{{formInput fields.y value=source.y}}
</div>
</div>
{{formGroup fields.elevation value=source.elevation classes="slim" units=gridUnits}}
<div class="form-group slim">
<label>{{localize "AMBIENT_LIGHT.LABELS.radius"}} <span class="units">({{gridUnits}})</span></label>
<div class="form-fields">
<label>{{fields.config.fields.dim.label}}</label>
{{formInput fields.config.fields.dim value=source.config.dim}}
<label>{{fields.config.fields.bright.label}}</label>
{{formInput fields.config.fields.bright value=source.config.bright}}
</div>
<p class="hint">{{ localize 'AMBIENT_LIGHT.LABELS.radiusHint' }}</p>
</div>
{{formGroup fields.walls value=source.walls}}
{{formGroup fields.config.fields.angle value=source.config.angle step=1 units="Degrees"}}
{{formGroup fields.rotation value=source.rotation step=1 units="Degrees"}}
</fieldset>
<fieldset>
<legend>{{ localize "AMBIENT_LIGHT.SECTIONS.APPEARANCE" }}</legend>
{{formGroup fields.config.fields.negative value=source.config.negative}}
{{formGroup fields.config.fields.color value=source.config.color}}
{{formGroup fields.config.fields.alpha value=source.config.alpha step=0.05}}
<div class="form-group slim">
<label>{{fields.config.fields.darkness.label}}</label>
<div class="form-fields">
<label>{{fields.config.fields.darkness.fields.min.label}}</label>
{{formInput fields.config.fields.darkness.fields.min value=source.config.darkness.min placeholder="0"}}
<label>{{fields.config.fields.darkness.fields.max.label}}</label>
{{formInput fields.config.fields.darkness.fields.max value=source.config.darkness.max placeholder="1"}}
</div>
<p class="hint">{{fields.config.fields.darkness.hint}}</p>
</div>
</fieldset>
</section>

View File

@@ -0,0 +1,37 @@
<section class="tab region-{{tab.id}} flexcol {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}">
<header class="region-element region-behavior flexrow">
<div class="region-element-name">{{localize "REGION.Behavior"}}</div>
<div class="region-element-controls">
<a class="region-control" data-action="behaviorCreate"
data-tooltip="REGION.ACTIONS.behaviorCreate" aria-label="{{localize "REGION.ACTIONS.behaviorCreate"}}">
<i class="fa-solid fa-plus fa-fw"></i>
</a>
</div>
</header>
<div class="standard-form scrollable">
{{#each behaviors as |behavior|}}
<fieldset class="region-element region-behavior flexrow {{#if behavior.disabled}}inactive{{/if}}"
data-behavior-id="{{behavior.id}}" aria-label="{{behavior.name}}">
<a class="region-element-name" data-action="behaviorEdit">
<i class="{{behavior.typeIcon}} fa-fw" data-tooltip="{{behavior.typeLabel}}"></i>
{{behavior.name}}
</a>
<div class="region-element-controls">
<a class="control fa-solid {{#if behavior.disabled}}fa-toggle-off{{else}}fa-toggle-on{{/if}} fa-fw"
data-action="behaviorToggle"
{{#if behavior.disabled}}
data-tooltip="REGION.ACTIONS.behaviorEnable" aria-label="{{localize "REGION.ACTIONS.behaviorEnable"}}"
{{else}}
data-tooltip="REGION.ACTIONS.behaviorDisable" aria-label="{{localize "REGION.ACTIONS.behaviorDisable"}}"
{{/if}}
></a>
<a class="control fa-solid fa-edit fa-fw" data-action="behaviorEdit"
data-tooltip="REGION.ACTIONS.behaviorEdit" aria-label="{{localize "REGION.ACTIONS.behaviorEdit"}}"></a>
<a class="control fa-solid fa-trash fa-fw" data-action="behaviorDelete"
data-tooltip="REGION.ACTIONS.behaviorDelete" aria-label="{{localize "REGION.ACTIONS.behaviorDelete"}}"></a>
</div>
</fieldset>
{{/each}}
</div>
</section>

View File

@@ -0,0 +1,23 @@
<section class="tab region-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}">
{{formField fields.name value=source.name placeholder=source.name localize=true}}
{{formField fields.color value=source.color localize=true}}
<div class="form-group slim">
<label>{{localize "REGION.FIELDS.elevation.label"}}</label>
<div class="form-fields">
<label>{{localize "REGION.FIELDS.elevation.FIELDS.bottom.label"}}</label>
<input name="elevation.bottom" type="number" value="{{source.elevation.bottom}}"
class="placeholder-fa-solid" placeholder="&#xF068 &#xF534;" step="any"
data-tooltip="{{localize "REGION.FIELDS.elevation.FIELDS.bottom.hint"}}"
aria-label="{{localize "REGION.FIELDS.elevation.FIELDS.bottom.hint"}}">
<label>{{localize "REGION.FIELDS.elevation.FIELDS.top.label"}}</label>
<input name="elevation.top" type="number" value="{{source.elevation.top}}"
class="placeholder-fa-solid" placeholder="&#x002B &#xF534;" step="any"
data-tooltip="{{localize "REGION.FIELDS.elevation.FIELDS.top.hint"}}"
aria-label="{{localize "REGION.FIELDS.elevation.FIELDS.top.hint"}}">
</div>
<p class="hint">{{localize "REGION.FIELDS.elevation.hint"}}</p>
</div>
{{formField fields.visibility value=source.visibility localize=true}}
</section>

View File

@@ -0,0 +1,34 @@
<section class="tab region-{{tab.id}} flexcol {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}">
<header class="region-element region-shape flexrow">
<div class="region-element-name">{{localize "REGION.Shape"}}</div>
<div class="region-element-controls">
<a class="control" data-action="shapeCreateFromWalls"
data-tooltip="REGION.ACTIONS.shapeCreateFromWalls" aria-label="{{localize "REGION.ACTIONS.shapeCreateFromWalls"}}">
<i class="fa-solid fa-plus"></i><i class="fa-solid fa-block-brick fa-fw"></i>
</a>
</div>
</header>
<div class="standard-form scrollable">
{{#each source.shapes as |shape i|}}
<fieldset class="region-element region-shape flexrow" data-shape-index="{{i}}" aria-label="{{localize "REGION.Shape"}} {{i}}">
<span class="region-element-name">{{localize (concat "REGION.SHAPES." shape.type)}}</span>
<div class="region-element-controls">
<a class="control {{#if shape.hole}}fa-regular{{else}}fa-solid{{/if}} fa-circle fa-fw" data-action="shapeToggleHole"
{{#if shape.hole}}
data-tooltip="REGION.ACTIONS.shapeFillHole" aria-label="{{localize "REGION.ACTIONS.shapeFillHole"}}"
{{else}}
data-tooltip="REGION.ACTIONS.shapeMakeHole" aria-label="{{localize "REGION.ACTIONS.shapeMakeHole"}}"
{{/if}}
></a>
<a class="control fa-solid fa-arrow-up fa-fw" data-action="shapeMoveUp"
data-tooltip="REGION.ACTIONS.shapeMoveUp" aria-label="{{localize "REGION.ACTIONS.shapeMoveUp"}}"></a>
<a class="control fa-solid fa-arrow-down fa-fw" data-action="shapeMoveDown"
data-tooltip="REGION.ACTIONS.shapeMoveDown" aria-label="{{localize "REGION.ACTIONS.shapeMoveDown"}}"></a>
<a class="control fa-solid fa-trash fa-fw" data-action="shapeRemove"
data-tooltip="REGION.ACTIONS.shapeRemove" aria-label="{{localize "REGION.ACTIONS.shapeRemove"}}"></a>
</div>
</fieldset>
{{/each}}
</div>
</section>

View File

@@ -0,0 +1,145 @@
<div class="tab" data-group="main" data-tab="ambience">
<nav class="tabs sheet-tabs secondary-tabs" data-group="ambience" aria-role="{{localize 'LIGHT.NavLabel'}}">
<a class="item" data-tab="basic" data-group="ambience"><i class="fas fa-chart-simple"></i> {{ localize "SCENES.HeaderAmbienceBasic" }}</a>
<a class="item" data-tab="environment" data-group="ambience"><i class="fa-regular fa-face-clouds"></i> {{ localize "SCENES.ENVIRONMENT.HeaderLabel" }}</a>
</nav>
<div class="tab" data-group="ambience" data-tab="basic">
<div class="form-group">
<label>{{localize "SCENES.JournalEntry"}}</label>
<select name="journal">
{{ selectOptions journals selected=data.journal blank="" valueAttr="id" labelAttr="name"}}
</select>
<p class="notes">{{ localize "SCENES.JournalEntryHint" }}</p>
</div>
<div class="form-group">
<label>{{ localize "JOURNALENTRYPAGE.Page" }}</label>
<div class="form-fields">
<select name="journalEntryPage">
{{ selectOptions pages selected=data.journalEntryPage valueAttr="id" labelAttr="name" blank="" }}
</select>
</div>
</div>
<hr>
<div class="form-group">
<label>{{localize "SCENES.AudioPlaylist"}}</label>
<select name="playlist">
{{ selectOptions playlists selected=data.playlist blank="" valueAttr="id" labelAttr="name"}}
</select>
<p class="notes">{{ localize "SCENES.AudioPlaylistHint" }}</p>
</div>
<div class="form-group">
<label>{{localize "SCENES.PlaylistSound"}}</label>
<select name="playlistSound">
{{ selectOptions sounds selected=playlistSound blank="" valueAttr="id" labelAttr="name"}}
</select>
<p class="notes">{{ localize "SCENES.PlaylistSoundHint" }}</p>
</div>
<hr>
<div class="form-group">
<label>{{ localize "SCENES.WeatherEffect" }}</label>
<select name="weather">
{{ selectOptions weatherTypes selected=data.weather blank="" }}
</select>
<p class="notes">{{ localize "SCENES.WeatherEffectHint" }}</p>
</div>
</div>
<div class="tab" data-group="ambience" data-tab="environment">
<h3>{{localize "SCENES.ENVIRONMENT.BaseAmbience"}}</h3>
<div class="form-group">
<label>{{ localize "SCENES.ENVIRONMENT.Luminosity" }}</label>
<div class="form-fields">
{{ rangePicker name="environment.base.luminosity" value=data.environment.base.luminosity min="-1" max="1" step="0.05" }}
</div>
<p class="hint">{{ localize "SCENES.ENVIRONMENT.LuminosityHint" }}</p>
</div>
<div class="form-group">
<label>{{ localize "SCENES.ENVIRONMENT.Saturation" }}</label>
<div class="form-fields">
{{ rangePicker name="environment.base.saturation" value=data.environment.base.saturation min="-1" max="1" step="0.05" }}
</div>
<p class="hint">{{ localize "SCENES.ENVIRONMENT.SaturationHint" }}</p>
</div>
<div class="form-group">
<label>{{ localize "SCENES.ENVIRONMENT.Shadows" }}</label>
<div class="form-fields">
{{ rangePicker name="environment.base.shadows" value=data.environment.base.shadows min="0" max="1" step="0.05" }}
</div>
<p class="hint">{{ localize "SCENES.ENVIRONMENT.ShadowsHint" }}</p>
</div>
<div class="form-group">
<label>{{ localize "SCENES.ENVIRONMENT.Hue" }}</label>
<div class="form-fields">
<hue-slider name="environment.base.hue" value="{{data.environment.base.hue}}" {{ disabled baseHueSliderDisabled }}></hue-slider>
</div>
<p class="hint">{{ localize "SCENES.ENVIRONMENT.HueHint" }}</p>
</div>
<div class="form-group">
<label>{{ localize "SCENES.ENVIRONMENT.Intensity" }}</label>
<div class="form-fields">
{{ rangePicker name="environment.base.intensity" value=data.environment.base.intensity min="0" max="1" step="0.05" }}
</div>
<p class="hint">{{ localize "SCENES.ENVIRONMENT.IntensityHint" }}</p>
</div>
<div class="form-group">
<label>{{localize "SCENES.ENVIRONMENT.BlendAmbience"}}</label>
<input type="checkbox" name="environment.cycle" {{checked data.environment.cycle}}/>
<p class="notes">{{localize "SCENES.ENVIRONMENT.BlendAmbienceHint"}}</p>
</div>
<hr>
<h3>{{localize "SCENES.ENVIRONMENT.DarkAmbience"}}</h3>
<div class="form-group">
<label>{{ localize "SCENES.ENVIRONMENT.Luminosity" }}</label>
<div class="form-fields">
{{ rangePicker name="environment.dark.luminosity" value=data.environment.dark.luminosity min="-1" max="1" step="0.05" }}
</div>
<!-- <p class="hint">{{ localize "SCENES.ENVIRONMENT.LuminosityHint" }}</p> -->
</div>
<div class="form-group">
<label>{{ localize "SCENES.ENVIRONMENT.Saturation" }}</label>
<div class="form-fields">
{{ rangePicker name="environment.dark.saturation" value=data.environment.dark.saturation min="-1" max="1" step="0.05" }}
</div>
<!-- <p class="hint">{{ localize "SCENES.ENVIRONMENT.SaturationHint" }}</p> -->
</div>
<div class="form-group">
<label>{{ localize "SCENES.ENVIRONMENT.Shadows" }}</label>
<div class="form-fields">
{{ rangePicker name="environment.dark.shadows" value=data.environment.dark.shadows min="0" max="1" step="0.05" }}
</div>
<!-- <p class="hint">{{ localize "SCENES.ENVIRONMENT.ShadowsHint" }}</p> -->
</div>
<div class="form-group">
<label>{{ localize "SCENES.ENVIRONMENT.Hue" }}</label>
<div class="form-fields">
<hue-slider name="environment.dark.hue" value="{{data.environment.dark.hue}}" {{ disabled darknessHueSliderDisabled }}></hue-slider>
</div>
<!-- <p class="hint">{{ localize "SCENES.ENVIRONMENT.HueHint" }}</p> -->
</div>
<div class="form-group">
<label>{{ localize "SCENES.ENVIRONMENT.Intensity" }}</label>
<div class="form-fields">
{{ rangePicker name="environment.dark.intensity" value=data.environment.dark.intensity min="0" max="1" step="0.05" }}
</div>
<!-- <p class="hint">{{ localize "SCENES.ENVIRONMENT.IntensityHint" }}</p> -->
</div>
</div>
</div>

View File

@@ -0,0 +1,42 @@
<div class="tab" data-group="main" data-tab="light">
<nav class="tabs sheet-tabs secondary-tabs" data-group="light" aria-role="{{localize 'LIGHT.NavLabel'}}">
<a class="item" data-tab="basic" data-group="light"><i class="fas fa-lightbulb"></i> {{localize "AMBIENT_LIGHT.SECTIONS.BASIC"}}</a>
<a class="item" data-tab="animation" data-group="light"><i class="fas fa-play"></i> {{localize "AMBIENT_LIGHT.SECTIONS.ANIMATION"}}</a>
<a class="item" data-tab="advanced" data-group="light"><i class="fas fa-cogs"></i> {{localize "AMBIENT_LIGHT.SECTIONS.ADVANCED"}}</a>
</nav>
<div class="tab" data-group="light" data-tab="basic">
<div class="form-group slim">
<label>{{localize "AMBIENT_LIGHT.LABELS.radius"}} <span class="units">({{gridUnits}})</span></label>
<div class="form-fields">
<label>{{lightFields.dim.label}}</label>
{{formInput lightFields.dim value=object.light.dim}}
<label>{{lightFields.bright.label}}</label>
{{formInput lightFields.bright value=object.light.bright}}
</div>
<p class="hint">{{ localize 'AMBIENT_LIGHT.LABELS.radiusHint' }}</p>
</div>
{{formGroup lightFields.angle value=object.light.angle step=1 units="Degrees"}}
{{formGroup lightFields.color value=object.light.color}}
{{formGroup lightFields.alpha value=object.light.alpha step=0.05}}
</div>
<div class="tab" data-group="light" data-tab="animation">
{{formGroup lightFields.animation.fields.type value=object.light.animation.type
choices=lightAnimations labelAttr="label" blank="None" sort=true localize=true}}
{{formGroup lightFields.animation.fields.speed value=object.light.animation.speed}}
{{formGroup lightFields.animation.fields.reverse value=object.light.animation.reverse}}
{{formGroup lightFields.animation.fields.intensity value=object.light.animation.intensity}}
</div>
<div class="tab" data-group="light" data-tab="advanced">
{{formGroup lightFields.coloration value=object.light.coloration
choices=colorationTechniques valueAttr="id" labelAttr="label" localize=true}}
{{formGroup lightFields.luminosity value=object.light.luminosity step=0.05}}
{{formGroup lightFields.attenuation value=object.light.attenuation step=0.05}}
{{formGroup lightFields.saturation value=object.light.saturation step=0.05}}
{{formGroup lightFields.contrast value=object.light.contrast step=0.05}}
{{formGroup lightFields.shadows value=object.light.shadows step=0.05}}
</div>
</div>

View File

@@ -0,0 +1,50 @@
<div class="tab" data-group="main" data-tab="resources">
<div class="form-group">
<label>{{localize "TOKEN.ResourceDisplay"}}</label>
<div class="form-fields">
<select name="displayBars" data-dtype="Number">
{{selectOptions displayModes selected=object.displayBars}}
</select>
</div>
</div>
<div class="form-group">
<label>{{localize "TOKEN.ResourceBar1A"}}</label>
<div class="form-fields">
<select class="bar-attribute" name="bar1.attribute">
{{selectOptions barAttributes selected=bar1.attribute blank=(localize "None")}}
</select>
</div>
</div>
{{#unless isDefault}}
<div class="form-group">
<label>{{localize "TOKEN.ResourceBar1D"}}</label>
<div class="form-fields">
<input type="number" class="bar1-value" value="{{bar1.value}}" disabled>
<span class="sep">/</span>
<input type="number" class="bar1-max" value="{{bar1.max}}" disabled>
</div>
</div>
{{/unless}}
<div class="form-group">
<label>{{localize "TOKEN.ResourceBar2A"}}</label>
<div class="form-fields">
<select class="bar-attribute" name="bar2.attribute">
{{selectOptions barAttributes selected=bar2.attribute blank=(localize "None")}}
</select>
</div>
</div>
{{#unless isDefault}}
<div class="form-group">
<label>{{localize "TOKEN.ResourceBar2D"}}</label>
<div class="form-fields">
<input type="number" class="bar2-value" value="{{bar2.value}}" disabled>
<span class="sep">/</span>
<input type="number" class="bar2-max" value="{{bar2.max}}" disabled>
</div>
</div>
{{/unless}}
</div>

View File

@@ -0,0 +1,136 @@
<div class="tab" data-group="main" data-tab="vision">
<nav class="tabs sheet-tabs secondary-tabs" data-group="vision" aria-role="{{localize 'TOKEN.SightNavLabel'}}">
<a class="item" data-tab="basic" data-group="vision"><i class="fa-solid fa-eye"></i> {{localize "TOKEN.SightHeaderBasic"}}</a>
<a class="item" data-tab="detection" data-group="vision"><i class="fa-solid fa-radar"></i> {{localize "TOKEN.SightHeaderDetection"}}</a>
<a class="item" data-tab="advanced" data-group="vision"><i class="fa-solid fa-cogs"></i> {{localize "TOKEN.SightHeaderAdvanced"}}</a>
</nav>
<div class="tab" data-group="vision" data-tab="basic">
<div class="form-group">
<label>{{localize "TOKEN.VisionEnabled"}}</label>
<input type="checkbox" name="sight.enabled" {{checked object.sight.enabled}}>
<p class="hint">{{ localize 'TOKEN.VisionEnabledHint' }}</p>
</div>
<div class="form-group slim">
<label>{{localize "TOKEN.VisionRange"}} <span class="units">({{gridUnits}})</span></label>
<div class="form-fields">
<input name="sight.range" type="number" value="{{object.sight.range}}" class="placeholder-fa-solid" class="placeholder-fa-solid" placeholder="&#xF534;" min="0" step="any">
</div>
<p class="hint">{{ localize 'TOKEN.VisionRangeHint' }}</p>
</div>
<div class="form-group slim">
<label>{{localize "TOKEN.VisionAngle"}} <span class="units">({{localize "Degrees"}})</span></label>
<div class="form-fields">
{{numberInput object.sight.angle name="sight.angle" placeholder=(localize "Degrees")}}
</div>
<p class="hint">{{ localize 'TOKEN.VisionAngleHint' }}</p>
</div>
<div class="form-group">
<label>{{ localize "TOKEN.VisionMode"}}</label>
<div class="form-fields">
<select name="sight.visionMode">
{{selectOptions visionModes selected=object.sight.visionMode valueAttr="id" labelAttr="label"
localize=true}}
</select>
</div>
<p class="hint">{{ localize 'TOKEN.VisionModeHint' }}</p>
</div>
</div>
<div class="tab detection-modes" data-group="vision" data-tab="detection">
<header class="detection-mode">
<div class="detection-mode-id">{{localize "TOKEN.DetectionMode"}}</div>
<div class="detection-mode-range">{{localize "TOKEN.DetectionRange"}} <span class="units">({{gridUnits}})</span></div>
<div class="detection-mode-enabled">{{localize "TOKEN.DetectionEnabled"}}</div>
<div class="detection-mode-controls">
<a class="action-button" data-action="addDetectionMode" data-tooltip="TOKEN.DetectionAdd">
<i class="fa-solid fa-plus"></i>
</a>
</div>
</header>
{{#each preparedDetectionModes as |mode|}}
<fieldset class="detection-mode" disabled>
<div class="detection-mode-id">
<select disabled>
{{selectOptions ../detectionModes selected=mode.id blank=""
valueAttr="id" labelAttr="label" localize=true}}
</select>
</div>
<div class="detection-mode-range">
<input type="number" value="{{mode.range}}" class="placeholder-fa-solid" placeholder="&#xF534;" min="0" step="any" disabled>
</div>
<div class="detection-mode-enabled">
<input type="checkbox" {{checked mode.enabled}} disabled>
</div>
<div class="detection-mode-controls"></div>
</fieldset>
{{/each}}
{{#each object.detectionModes as |mode i|}}
<fieldset class="detection-mode" data-index="{{i}}">
<div class="detection-mode-id">
<select name="detectionModes.{{i}}.id">
{{selectOptions ../detectionModes selected=mode.id blank=""
valueAttr="id" labelAttr="label" localize=true}}
</select>
</div>
<div class="detection-mode-range">
<input name="detectionModes.{{i}}.range" type="number" value="{{mode.range}}" class="placeholder-fa-solid" placeholder="&#xF534;" min="0" step="any">
</div>
<div class="detection-mode-enabled">
<input name="detectionModes.{{i}}.enabled" type="checkbox" {{checked mode.enabled}}>
</div>
<div class="detection-mode-controls">
<a class="action-button" data-action="removeDetectionMode" data-tooltip="TOKEN.DetectionRemove">
<i class="fa-solid fa-times"></i>
</a>
</div>
</fieldset>
{{/each}}
</div>
<div class="tab" data-group="vision" data-tab="advanced">
<div class="form-group">
<label>{{ localize "TOKEN.VisionColor" }}</label>
<div class="form-fields">
<color-picker name="sight.color" value="{{object.sight.color}}"></color-picker>
</div>
</div>
<div class="form-group">
<label>{{ localize 'TOKEN.VisionAttenuation' }}</label>
<div class="form-fields">
{{rangePicker name="sight.attenuation" value=object.sight.attenuation min="0" max="1" step="0.05"}}
</div>
<p class="hint">{{ localize 'TOKEN.VisionAttenuationHint' }}</p>
</div>
<div class="form-group">
<label>{{ localize 'TOKEN.VisionBrightness' }}</label>
<div class="form-fields">
{{rangePicker name="sight.brightness" value=object.sight.brightness min="-1" max="1" step="0.05"}}
</div>
<p class="hint">{{ localize 'TOKEN.VisionBrightnessHint' }}</p>
</div>
<div class="form-group">
<label>{{ localize 'TOKEN.VisionSaturation' }}</label>
<div class="form-fields">
{{rangePicker name="sight.saturation" value=object.sight.saturation min="-1" max="1" step="0.05"}}
</div>
<p class="hint">{{ localize 'TOKEN.VisionSaturationHint' }}</p>
</div>
<div class="form-group">
<label>{{ localize 'TOKEN.VisionContrast' }}</label>
<div class="form-fields">
{{rangePicker name="sight.contrast" value=object.sight.contrast min="-1" max="1" step="0.05"}}
</div>
<p class="hint">{{ localize 'TOKEN.VisionContrastHint' }}</p>
</div>
</div>
</div>

View File

@@ -0,0 +1,30 @@
<div class="flexcol">
<div class="region-filters flexrow" aria-label="{{localize "REGION.LEGEND.filter"}}">
<input type="search" name="search" value="" autocomplete="off" placeholder="{{localize "REGION.LEGEND.filter"}}"
data-tooltip="{{localize "Name"}}" aria-label="{{localize "Name"}}">
<input name="elevationBottom" type="number" value="{{elevation.bottom}}" class="placeholder-fa-solid" placeholder="&#xF068 &#xF534;" step="any"
data-tooltip="{{localize "REGION.LEGEND.elevationBottom"}}" aria-label="{{localize "REGION.LEGEND.elevationBottom"}}">
<input name="elevationTop" type="number" value="{{elevation.top}}" class="placeholder-fa-solid" placeholder="&#x002B &#xF534;" step="any"
data-tooltip="{{localize "REGION.LEGEND.elevationTop"}}" aria-label="{{localize "REGION.LEGEND.elevationTop"}}">
<button type="button" class="icon fa-solid fa-plus" data-action="create" data-tooltip="REGION.LEGEND.create"></button>
</div>
<ol class="region-list flexcol scrollable">
{{#each regions as |region|}}
<li class="region flexrow {{#if region.controlled}}controlled{{/if}} {{#if region.hover}}hover{{/if}}" data-region-id="{{region.id}}"
aria-label="{{region.name}}">
<i class="region-color" style="background: {{region.color}}"></i>
<a class="region-name" data-action="control" aria-label="{{localize "REGION.LEGEND.control"}}">
{{region.name}}
</a>
{{#if region.empty}}<span class="region-meta">({{localize "REGION.LEGEND.empty"}})</span>{{/if}}
{{#if region.elevationLabel}}<span class="region-meta">{{{region.elevationLabel}}}</span>{{/if}}
{{#each region.buttons as |button|}}
<button type="button" class="icon" {{button.disabled}} data-action="{{button.action}}"
data-tooltip="{{button.tooltip}}" aria-label="{{button.tooltip}}">
<i class="fa-solid {{button.icon}} fa-fw"></i>
</button>
{{/each}}
</li>
{{/each}}
</ol>
</div>

View File

@@ -0,0 +1,80 @@
<form autocomplete="off">
<p class="notes">{{ localize "CONTROLS.MeasureConfigHint" }}</p>
<div class="form-group">
<label>{{ localize "CONTROLS.MeasureType" }}</label>
<select name="t">
{{selectOptions templateTypes selected=data.t localize=true}}
</select>
</div>
<div class="form-group">
<label>{{ localize "XCoord" }} <span class="units">({{ localize "Pixels" }})</span></label>
{{numberInput data.x name="x" step=1 placeholder="X"}}
</div>
<div class="form-group">
<label>{{ localize "YCoord" }} <span class="units">({{ localize "Pixels" }})</span></label>
{{numberInput data.y name="y" step=1 placeholder="Y"}}
</div>
<div class="form-group slim">
<label>{{localize "Elevation"}} <span class="units">({{gridUnits}})</span></label>
{{numberInput data.elevation name="elevation" placeholder=gridUnits}}
</div>
<div class="form-group">
<label>{{ localize "Sort" }}</label>
{{numberInput data.sort name="sort" step=1 placeholder=(localize "Sort")}}
</div>
<div class="form-group">
<label>{{ localize "Direction" }} <span class="units">({{ localize "Degrees" }})</span></label>
{{numberInput data.direction name="direction" placeholder=(localize "Direction")}}
</div>
<div class="form-group">
<label>{{ localize "Angle" }} <span class="units">({{ localize "Degrees" }})</span></label>
{{numberInput data.angle name="angle" placeholder=(localize "Angle")}}
</div>
<div class="form-group">
<label>{{ localize "Distance" }} <span class="units">({{gridUnits}})</span></label>
{{numberInput data.distance name="distance" placeholder=(localize "Distance") min=0}}
</div>
<div class="form-group">
<label>{{ localize "Width" }} <span class="units">({{gridUnits}})</span></label>
{{numberInput data.width name="width" placeholder=(localize "Width") min=0}}
</div>
<div class="form-group">
<label>{{ localize "TEMPLATE.BorderColor" }}</label>
<div class="form-fields">
<color-picker name="borderColor" value="{{data.borderColor}}" placeholder="#000000"></color-picker>
</div>
</div>
<div class="form-group">
<label>{{ localize "TEMPLATE.FillColor" }}</label>
<div class="form-fields">
<color-picker name="fillColor" value="{{data.fillColor}}" placeholder="{{userColor}}"></color-picker>
</div>
</div>
<div class="form-group">
<label>{{ localize "TEMPLATE.FillTexture" }}</label>
<div class="form-fields">
<file-picker name="texture" type="image" value="{{data.texture}}"></file-picker>
</div>
</div>
<div class="form-group">
<label>{{localize "Hidden"}}</label>
<input type="checkbox" name="hidden" {{checked data.hidden}}/>
</div>
<button type="submit">
<i class="far fa-save"></i> {{ localize submitText }}
</button>
</form>

View File

@@ -0,0 +1,165 @@
<form autocomplete="off">
<!-- Tile Configuration Tabs -->
<nav class="sheet-tabs tabs" aria-role="{{localize 'SHEETS.FormNavLabel'}}">
<a class="item" data-tab="basic"><i class="fas fa-cubes"></i> {{localize "TILE.BasicHeader" }}</a>
<a class="item" data-tab="overhead"><i class="fas fa-home"></i> {{ localize "TILE.OverheadHeader" }}</a>
<a class="item" data-tab="animation"><i class="fas fa-play"></i> {{ localize "TILE.AnimationHeader" }}</a>
</nav>
<!-- Basic Configuration Tab -->
<div class="tab" data-tab="basic">
<p class="notes">{{ localize "TILE.BasicHint" }}</p>
<div class="form-group">
<label>{{ localize "TILE.Image"}}</label>
<div class="form-fields">
<file-picker name="texture.src" type="imagevideo" value="{{data.texture.src}}"></file-picker>
</div>
</div>
<div class="form-group">
<label for="x">{{ localize "XCoord" }} <span class="units">({{ localize "Pixels" }})</span></label>
<div class="form-fields">
{{numberInput data.x name="x" step=1}}
</div>
</div>
<div class="form-group">
<label for="y">{{ localize "YCoord" }} <span class="units">({{ localize "Pixels" }})</span></label>
<div class="form-fields">
{{numberInput data.y name="y" step=1}}
</div>
</div>
<div class="form-group">
<label for="sort">{{ localize "Sort" }}</label>
<div class="form-fields">
{{numberInput data.sort name="sort" step=1}}
</div>
</div>
<div class="form-group">
<label for="width">{{ localize "Width" }} <span class="units">({{ localize "Pixels" }})</span></label>
<div class="form-fields">
{{numberInput data.width name="width" min=0 step=1}}
</div>
</div>
<div class="form-group">
<label for="height">{{ localize "Height" }} <span class="units">({{ localize "Pixels" }})</span></label>
<div class="form-fields">
{{numberInput data.height name="height" min=0 step=1}}
</div>
</div>
<div class="form-group slim">
<label>{{ localize "TILE.Scale" }} <span class="units">({{localize "Ratio"}})</span></label>
<div class="form-fields">
<label>{{ localize "TILE.ScaleX" }}</label>
{{numberInput data.texture.scaleX name="texture.scaleX"}}
<label>{{ localize "TILE.ScaleY" }}</label>
{{numberInput data.texture.scaleY name="texture.scaleY"}}
</div>
<p class="hint">{{ localize "TILE.ScaleHint" }}</p>
</div>
<div class="form-group">
<label for="height">{{ localize "Rotation" }} <span class="units">({{ localize "Degrees" }})</span></label>
<div class="form-fields">
{{numberInput data.rotation name="rotation"}}
</div>
</div>
<div class="form-group">
<label>{{ localize "TILE.Opacity" }}</label>
<div class="form-fields">
{{ rangePicker name="alpha" value=data.alpha min="0" max="1" step="0.05" }}
</div>
</div>
<div class="form-group">
<label>{{ localize "TILE.Tint" }}</label>
<div class="form-fields">
<color-picker name="texture.tint" value="{{data.texture.tint}}" placeholder="#ffffff"></color-picker>
</div>
</div>
</div>
<!-- Overhead Tab -->
<div class="tab" data-tab="overhead">
<p class="notes">{{ localize "TILE.OverheadHint" }}</p>
<div class="form-group slim">
<label>{{localize "Elevation"}} <span class="units">({{gridUnits}})</span></label>
<div class="form-fields">
{{numberInput data.elevation name="elevation" placeholder=gridUnits}}
</div>
</div>
<div class="form-group">
<label>{{localize "TILE.OcclusionMode"}}</label>
<div class="form-fields">
<select name="occlusion.mode" data-dtype="Number">
{{ selectOptions occlusionModes selected=data.occlusion.mode }}
</select>
</div>
</div>
<div class="form-group">
<label>{{localize "TILE.OcclusionAlpha"}}</label>
<div class="form-fields">
{{ rangePicker name="occlusion.alpha" value=data.occlusion.alpha min="0" max="1" step="0.05" }}
</div>
</div>
<div class="form-group">
<label>{{localize "TILE.RestrictsLight"}}</label>
<div class="form-fields">
<input type="checkbox" name="restrictions.light" {{ checked data.restrictions.light }}>
</div>
<p class="hint">{{ localize "TILE.RestrictsLightHint" }}</p>
</div>
<div class="form-group">
<label>{{localize "TILE.RestrictsWeather"}}</label>
<div class="form-fields">
<input type="checkbox" name="restrictions.weather" {{ checked data.restrictions.weather }}>
</div>
<p class="hint">{{ localize "TILE.RestrictsWeatherHint" }}</p>
</div>
</div>
<!-- Video Tab -->
<div class="tab" data-tab="animation">
<p class="notes">{{ localize "TILE.AnimationHint" }}</p>
<div class="form-group">
<label>{{localize "TILE.VideoLoop"}}</label>
<div class="form-fields">
<input type="checkbox" name="video.loop" {{ checked data.video.loop }}>
</div>
</div>
<div class="form-group">
<label>{{localize "TILE.VideoAutoplay"}}</label>
<div class="form-fields">
<input type="checkbox" name="video.autoplay" {{ checked data.video.autoplay }}>
</div>
</div>
<div class="form-group">
<label>{{localize "TILE.VideoVolume"}}</label>
<div class="form-fields">
{{ rangePicker name="video.volume" value=data.video.volume min="0" max="1" step="0.05" }}
</div>
</div>
</div>
<!-- Sheet Footer -->
<footer class="sheet-footer flexrow">
<button type="submit">
<i class="far fa-save"></i> {{submitText}}
</button>
</footer>
</form>

View File

@@ -0,0 +1,238 @@
<form class="flexcol {{cssClasses}}" autocomplete="off">
<!-- Token Configuration Tabs -->
<nav class="sheet-tabs tabs" data-group="main" aria-role="{{localize 'SHEETS.FormNavLabel'}}">
<a class="item" data-tab="character"><i class="fas fa-user"></i> {{localize "TOKEN.HeaderIdentity"}}</a>
<a class="item" data-tab="appearance"><i class="fas fa-expand"></i> {{localize "TOKEN.HeaderAppearance"}}</a>
<a class="item" data-tab="vision"><i class="fas fa-eye"></i> {{localize "TOKEN.HeaderVision"}}</a>
<a class="item" data-tab="light"><i class="fas fa-lightbulb"></i> {{localize "TOKEN.HeaderLight"}}</a>
<a class="item" data-tab="resources"><i class="fas fa-heart"></i> {{localize "TOKEN.HeaderResources"}}</a>
</nav>
<!-- Token Character -->
<div class="tab" data-group="main" data-tab="character">
<div class="form-group">
<label>{{localize "TOKEN.CharNameplate"}}</label>
<input type="text" name="name" placeholder="{{ localize 'Name' }}" value="{{object.name}}"/>
</div>
<div class="form-group">
<label>{{localize "TOKEN.CharShowNameplate"}}</label>
<select name="displayName" data-dtype="Number">
{{selectOptions displayModes selected=object.displayName }}
</select>
</div>
{{#unless isPrototype}}
<div class="form-group">
<label>{{localize "TOKEN.CharActor"}}</label>
<select class="actor-template" name="actorId">
{{selectOptions actors selected=object.actorId valueAttr="_id" labelAttr="name" blank=(localize 'None')}}
</select>
</div>
{{/unless}}
<div class="form-group">
<label>{{localize "TOKEN.CharLink"}}</label>
<input type="checkbox" name="actorLink" {{checked object.actorLink}}/>
</div>
{{#if isPrototype}}
<hr>
<div class="form-group">
<label>{{localize "TOKEN.AppendNumber"}}</label>
<input type="checkbox" name="appendNumber" {{checked object.appendNumber}}/>
<p class="notes">{{localize "TOKEN.AppendNumberHint" name=object.name}}</p>
</div>
<div class="form-group">
<label>{{localize "TOKEN.PrependAdjective"}}</label>
<input type="checkbox" name="prependAdjective" {{checked object.prependAdjective}}/>
<p class="notes">{{localize "TOKEN.PrependAdjectiveHint" name=object.name}}</p>
</div>
<hr>
{{/if}}
{{#unless isPrototype}}
<div class="form-group slim">
<label>{{localize "TOKEN.Coordinates"}} <span class="units">({{localize "Pixels"}})</span></label>
<div class="form-fields">
<label>X</label>
{{numberInput object.x name="x" step=1 disabled=(not isGM) placeholder=(localize "Pixels")}}
<label>Y</label>
{{numberInput object.y name="y" step=1 disabled=(not isGM) placeholder=(localize "Pixels")}}
</div>
</div>
<div class="form-group slim">
<label>{{localize "Elevation"}} <span class="units">({{gridUnits}})</span></label>
<div class="form-fields">
{{numberInput object.elevation name="elevation" placeholder=gridUnits}}
</div>
</div>
<div class="form-group slim">
<label>{{ localize "Sort" }}</label>
<div class="form-fields">
{{numberInput object.sort name="sort" step=1}}
</div>
</div>
{{/unless}}
<div class="form-group slim">
<label>{{localize "Rotation"}} <span class="units">({{localize "Degrees"}})</span></label>
<div class="form-fields">
<label>{{localize "TOKEN.Lock"}}</label>
<input type="checkbox" name="lockRotation" {{checked object.lockRotation}}/>
<label>{{localize "Rotation"}}</label>
{{numberInput object.rotation name="rotation" placeholder=(localize "Degrees")}}
</div>
</div>
<div class="form-group slim">
<label>{{localize "TOKEN.OcclusionRadius"}} <span class="units">({{gridUnits}})</span></label>
<div class="form-fields">
{{numberInput object.occludable.radius name="occludable.radius" placeholder=gridUnits min="0" step="any"}}
</div>
<p class="notes">{{localize "TOKEN.OcclusionRadiusHint" name=object.name}}</p>
</div>
<div class="form-group">
<label>{{localize "TOKEN.Disposition"}}</label>
<select name="disposition" data-dtype="Number">
{{selectOptions dispositions selected=object.disposition }}
</select>
</div>
</div>
<!-- Token Image -->
<div class="tab" data-group="main" data-tab="appearance">
<div class="form-group">
<label>{{localize "TOKEN.ImagePath"}}</label>
<div class="form-fields">
<file-picker name="texture.src" type="imagevideo" value="{{object.texture.src}}"></file-picker>
</div>
</div>
{{#if randomImgEnabled}}
<div class="form-group">
<label>{{localize "TOKEN.RandomImg"}}</label>
<input type="checkbox" name="randomImg" {{checked object.randomImg}}/>
</div>
{{else if hasAlternates}}
<div class="form-group">
<label>{{localize "TOKEN.ImageAlts"}}</label>
<select class="alternate-images" name="alternateImages">
{{selectOptions alternateImages selected=object.texture.src blank=""}}
</select>
</div>
{{/if}}
<div class="form-group slim">
<label>{{localize "TOKEN.Dimensions"}} <span class="units">({{localize "GridSpaces"}})</span></label>
<div class="form-fields">
<label>{{localize "Width"}}</label>
{{numberInput object.width name="width" placeholder=(localize "spaces")}}
<label>{{localize "Height"}}</label>
{{numberInput object.height name="height" placeholder=(localize "spaces")}}
</div>
<p class="hint">{{localize "TOKEN.DimensionsHint"}}</p>
</div>
{{#if showHexagonalShapes}}
<div class="form-group slim">
<label>{{localize "TOKEN.HexagonalShape"}}</label>
<div class="form-fields">
<select name="hexagonalShape">
{{selectOptions hexagonalShapes selected=object.hexagonalShape}}
</select>
</div>
<p class="hint">{{localize "TOKEN.HexagonalShapeHint"}}</p>
</div>
{{/if}}
<div class="form-group slim">
<label>{{localize "TOKEN.ImageFitMode"}}</label>
<div class="form-fields">
<select name="texture.fit">
{{selectOptions textureFitModes selected=object.texture.fit}}
</select>
</div>
<p class="hint">{{localize "TOKEN.ImageFitModeHint"}}</p>
</div>
<div class="form-group slim">
<label>{{localize "Anchor"}}</label>
<div class="form-fields">
<label>X</label>
{{numberInput object.texture.anchorX name="texture.anchorX" placeholder="0.5"}}
<label>Y</label>
{{numberInput object.texture.anchorY name="texture.anchorY" placeholder="0.5"}}
</div>
<p class="hint">{{localize "TOKEN.AnchorHint"}}</p>
</div>
<div class="form-group">
<label>{{localize "Scale"}} <span class="units">({{localize "Ratio"}})</span></label>
<div class="form-fields">
{{ rangePicker name="scale" value=scale min="0.2" max="3.0" step="0.1" }}
</div>
</div>
<div class="form-group slim">
<label>{{localize "TOKEN.Mirror"}}</label>
<div class="form-fields">
<label>{{localize "TOKEN.MirrorX"}}</label>
<input type="checkbox" name="mirrorX" {{checked mirrorX}}/>
<label>{{localize "TOKEN.MirrorY"}}</label>
<input type="checkbox" name="mirrorY" {{checked mirrorY}}/>
</div>
</div>
<div class="form-group">
<label>{{ localize "TOKEN.TintColor" }}</label>
<div class="form-fields">
<color-picker name="texture.tint" value="{{object.texture.tint}}" placeholder="#ffffff"></color-picker>
</div>
</div>
<div class="form-group">
<label>{{localize "TOKEN.Opacity"}}</label>
<div class="form-fields">
{{ rangePicker name="alpha" value=object.alpha min="0" max="1" step="0.05" }}
</div>
</div>
<fieldset>
<legend>{{localize "TOKEN.RING.SHEET.legend"}}</legend>
{{formField fields.ring.fields.enabled value=object.ring.enabled}}
{{formField fields.ring.fields.colors.fields.ring value=object.ring.colors.ring}}
{{formField fields.ring.fields.colors.fields.background value=object.ring.colors.background}}
{{formField fields.ring.fields.subject.fields.texture value=object.ring.subject.texture}}
{{formField fields.ring.fields.subject.fields.scale value=object.ring.subject.scale max=3 min=0.8 step=0.02}}
{{formField fields.ring.fields.effects value=object.ring.effects input=ringEffectsInput stacked=true}}
</fieldset>
</div>
<!-- Vision -->
{{> "templates/scene/parts/token-vision.html"}}
<!-- Light -->
{{> "templates/scene/parts/token-lighting.hbs"}}
<!-- Resource Bars -->
{{> "templates/scene/parts/token-resources.html"}}
<!-- Token Sheet Footer -->
<footer class="sheet-footer flexrow">
{{#if isPrototype}}
<button type="button" class="assign-token"><i class="fas fa-user"></i> {{localize "TOKEN.Assign"}}</button>
{{/if}}
<button type="submit">
<i class="far fa-save"></i> {{localize "TOKEN.Update"}}
</button>
</footer>
</form>

View File

@@ -0,0 +1,102 @@
<form autocomplete="off">
<p class="notes">{{localize "WALLS.Instructions"}}</p>
<div class="form-group">
<label>{{localize "WALLS.Coordinates"}}</label>
<div class="form-fields">
<input type="text" value="({{p0.x}}, {{p0.y}}) to ({{p1.x}}, {{p1.y}})" disabled/>
</div>
</div>
<div class="form-group">
<label>{{localize "WALLS.Movement"}}</label>
<div class="form-fields">
<select name="move" data-dtype="Number">
{{selectOptions moveTypes selected=source.move}}
</select>
</div>
</div>
<div class="form-group">
<label>{{localize "WALLS.Light"}}</label>
<div class="form-fields">
<select name="light" data-dtype="Number">
{{selectOptions senseTypes selected=source.light }}
</select>
<input class="proximity" type="number" name="threshold.light" placeholder="{{gridUnits}}" min="0"
value="{{source.threshold.light}}" step="any"/>
</div>
</div>
<div class="form-group">
<label>{{localize "WALLS.Sight"}}</label>
<div class="form-fields">
<select name="sight" data-dtype="Number">
{{selectOptions senseTypes selected=source.sight }}
</select>
<input class="proximity" type="number" name="threshold.sight" placeholder="{{gridUnits}}" min="0"
value="{{source.threshold.sight}}" step="any"/>
</div>
</div>
<div class="form-group">
<label>{{localize "WALLS.Sound"}}</label>
<div class="form-fields">
<select name="sound" data-dtype="Number">
{{selectOptions senseTypes selected=source.sound }}
</select>
<input class="proximity" type="number" name="threshold.sound" placeholder="{{gridUnits}}" min="0"
value="{{source.threshold.sound}}" step="any"/>
</div>
</div>
<div class="form-group">
<label>{{localize "WALLS.Direction"}}</label>
<div class="form-fields">
<select name="dir" data-dtype="Number">
{{selectOptions dirTypes selected=source.dir}}
</select>
</div>
</div>
<div class="form-group">
<label>{{localize "WALLS.ThresholdAttenuation"}} <i class="tip fas fa-info-circle" data-tooltip="WALLS.ThresholdAttenuationHint"></i></label>
<input type="checkbox" name="threshold.attenuation" {{checked source.threshold.attenuation}}/>
</div>
<div class="form-group">
<label>{{localize "WALLS.Door"}}</label>
<div class="form-fields">
<select name="door" data-dtype="Number">
{{selectOptions doorTypes selected=source.door}}
</select>
</div>
</div>
<fieldset class="door-options">
<legend>{{ localize "WALLS.DoorOptions" }}</legend>
<div class="form-group">
<label>{{ localize "WALLS.DoorState" }}</label>
<div class="form-fields">
<select name="ds" data-dtype="Number">
{{selectOptions doorStates selected=source.ds}}
</select>
</div>
</div>
<div class="form-group">
<label>{{ localize "WALLS.DoorSoundLabel" }}</label>
<div class="form-fields">
<select name="doorSound">
{{selectOptions doorSounds selected=source.doorSound labelAttr="label" blank="" localize=true}}
</select>
<i data-tooltip="{{localize 'Preview'}}" class="fas fa-play audio-preview"></i>
</div>
</div>
</fieldset>
<footer class="form-footer">
<button type="submit">
<i class="fa-solid fa-save"></i> {{localize "WALLS.Submit"}}
</button>
</footer>
</form>

View File

@@ -0,0 +1,130 @@
<form class="standard-form" autocomplete="off">
<p>{{localize "SETUP.ConfigurationWarning"}}</p>
<div class="form-group {{#if noAdminPW}}highlight{{/if}}">
<label>{{localize fields.adminPassword.label}}</label>
<div class="form-fields">
<input type="password" name="adminPassword" value="{{ config.adminPassword }}">
</div>
<p class="hint">{{localize fields.adminPassword.hint}}</p>
</div>
<div class="form-group">
<label>{{localize fields.dataPath.label}}</label>
<div class="form-fields">
<input type="text" name="dataPath" value="{{ config.dataPath }}">
</div>
<p class="hint">{{localize fields.dataPath.hint}}</p>
</div>
<div class="form-group">
<label>{{localize fields.telemetry.label}}</label>
<div class="form-fields">
<input type="checkbox" name="telemetry" {{checked config.telemetry}}>
</div>
<p class="hint">{{{localize fields.telemetry.hint}}}</p>
</div>
<div class="form-group">
<label>{{localize fields.cssTheme.label}}</label>
<div class="form-fields">
<select name="cssTheme">
{{selectOptions cssThemes selected=config.cssTheme localize=true}}
</select>
</div>
<p class="hint">{{{localize fields.cssTheme.hint}}}</p>
</div>
<div class="form-group">
<label>{{localize fields.world.label}}</label>
<div class="form-fields">
<select name="world">
{{selectOptions worlds selected=config.world valueAttr="id" labelAttr="title" blank=""}}
</select>
</div>
<p class="hint">{{localize fields.world.hint}}</p>
</div>
<div class="form-group">
<label>{{localize fields.language.label}}</label>
<div class="form-fields">
<select name="language">
{{selectOptions languages selected=config.language}}
</select>
</div>
<p class="hint">{{localize fields.language.hint}}</p>
</div>
<div class="form-group">
<label>{{localize fields.port.label}}</label>
<div class="form-fields">
{{numberInput config.port name="port" step=1}}
<label class="checkbox after">
{{localize "SETUP.UPNPLabel"}}
<input type="checkbox" name="upnp" {{checked config.upnp}}>
</label>
</div>
<p class="hint">{{localize fields.port.hint}}</p>
</div>
<div class="form-group">
<label>{{localize fields.compressStatic.label}}</label>
<div class="form-fields">
<input type="checkbox" name="compressStatic" {{checked config.compressStatic}}>
</div>
<p class="hint">{{localize fields.compressStatic.hint}}</p>
</div>
<div class="form-group">
<label>{{localize fields.compressSocket.label}}</label>
<div class="form-fields">
<input type="checkbox" name="compressSocket" {{checked config.compressSocket}}>
</div>
<p class="hint">{{localize fields.compressSocket.hint}}</p>
</div>
<div class="form-group">
<label>{{localize fields.deleteNEDB.label}}</label>
<div class="form-fields">
<input type="checkbox" name="deleteNEDB" {{checked config.deleteNEDB}}>
</div>
<p class="hint">{{localize fields.deleteNEDB.hint}}</p>
</div>
<div class="form-group">
<label>{{localize fields.hotReload.label}}</label>
<div class="form-fields">
<input type="checkbox" name="hotReload" {{checked config.hotReload}}>
</div>
<p class="hint">{{localize fields.hotReload.hint}}</p>
</div>
<div class="form-group ssl">
<label>{{localize "SETUP.SSLCert"}}</label>
<div class="form-fields flexcol">
<div class="form-fields">
<label>{{localize fields.sslCert.label}}</label>
<input type="text" name="sslCert" value="{{ config.sslCert }}">
</div>
<div class="form-fields">
<label>{{localize fields.sslKey.label}}</label>
<input type="text" name="sslKey" value="{{ config.sslKey }}">
</div>
</div>
<p class="hint">{{localize fields.sslCert.hint}}</p>
</div>
<div class="form-group">
<label>{{localize fields.awsConfig.label}}</label>
<div class="form-fields">
<input type="text" name="awsConfig" value="{{ config.awsConfig }}">
</div>
<p class="hint">{{localize fields.awsConfig.hint}}</p>
</div>
<footer class="form-footer">
<button type="submit" class="bright">
<i class="fas fa-save"></i><label>{{ localize "SETUP.SaveConfiguration" }}</label>
</button>
</footer>
</form>

View File

@@ -0,0 +1,48 @@
{{!----------- Outer Form ------------}}
<form class="flexcol">
{{!----------- Bulk Actions ------------}}
<nav class="bulk-actions flexrow" aria-label="{{ localize "SETUP.BACKUPS.BulkActions" }}">
<label class="checkbox">
<input type="checkbox" name="select-all" data-action="select-all">
{{ localize "SelectAll" }}
</label>
<a class="button" data-action="delete">{{ localize "DeleteSelected" }}</a>
</nav>
{{!----------- Backup List ------------}}
<div class="entry-list flexcol scrollable {{#if progress}}loading{{/if}}">
{{#if progress}}
<div class="progress">
<h3 class="divider">{{ localize progress.label }}</h3>
<i class="{{ progress.icon }}"></i>
</div>
{{/if}}
{{#each entries}}
<div class="flexrow checkbox-row" data-backup-id="{{ id }}">
<input type="checkbox" name="{{ id }}" aria-label="{{ title }}" {{ disabled inSnapshot }}
{{#if inSnapshot}}data-tooltip="SETUP.BACKUPS.CannotDeleteInSnapshot"{{/if}}>
<div class="entry flexcol">
<header class="entry-title">
<h3 class="ellipsis">{{ title }}</h3>
<button class="install fas fa-undo" type="button" data-action="restore"
{{#if noRestore}}disabled data-tooltip="SETUP.BACKUPS.CannotRestoreUnusable"{{/if}}>
<span>{{ localize "SETUP.BACKUPS.Restore" }}</span>
</button>
</header>
{{#if description}}<p class="entry-description ellipsis">{{ description }}</p>{{/if}}
<div class="entry-metadata tags flexrow">
{{#each tags}}
<span class="tag {{ type }}" {{#if tooltip}}data-tooltip="{{ tooltip }}"{{/if}}>
{{#if icon}}<i class="{{ icon }}"></i>{{/if}}
{{ label }}
</span>
{{/each}}
</div>
</div>
</div>
{{/each}}
</div>
</form>

View File

@@ -0,0 +1,101 @@
{{#*inline "entryPartial"}}
<div class="entry flexcol"
data-package-title="{{ title }}"
{{#if packageId}}data-package-id="{{ packageId }}"{{/if}}
{{#if packageType}}data-package-type="{{ packageType }}"{{/if}}
{{#if backupId}}data-backup-id="{{ backupId }}"{{/if}}
{{#if snapshotId}}data-snapshot-id="{{ snapshotId }}"{{/if}}>
<header class="entry-title">
<h3 class="ellipsis">{{ title }}</h3>
{{#unless snapshotId}}
<button class="install" type="button" data-action="manage">
<span>{{ localize "SETUP.BACKUPS.Manage" }}</span>
</button>
{{#if packageExists}}
<button class="create fas fa-floppy-disk" type="button" data-action="create">
<span>{{ localize "SETUP.BACKUPS.TakeBackup" }}</span>
</button>
{{/if}}
{{/unless}}
<button class="install fas fa-undo" type="button" data-action="restore"
{{#if noRestore}}disabled data-tooltip="SETUP.BACKUPS.CannotRestoreUnusable"{{/if}}>
<span>{{ localize restoreLabel }}</span>
</button>
</header>
{{#if description}}<p class="entry-description ellipsis">{{{ description }}}</p>{{/if}}
<div class="entry-metadata tags flexrow">
{{#each tags}}
<span class="tag {{ type }}" {{#if tooltip}}data-tooltip="{{ tooltip }}"{{/if}}>
{{#if icon}}<i class="{{ icon }}"></i>{{/if}}
{{ label }}
</span>
{{/each}}
</div>
</div>
{{/inline}}
{{!----------- Search Header ------------}}
<header class="search">
<label class="search">
<input name="filter" type="search" placeholder="{{ localize "SETUP.PackageName" }}" autocomplete="off"
autofocus>
</label>
</header>
{{!----------- Main Body ------------}}
<section class="body flexrow">
{{!----------- Left Column - Categories ------------}}
<nav class="categories flexcol" aria-label="{{ localize "SHEETS.FormNavLabel" }}">
<label>{{ localize "SETUP.BACKUPS.Categories" }}</label>
{{#each categories}}
<a class="control category {{#if active}}active{{/if}}" data-category="{{ id }}">
{{ label }}
<span class="count">[{{ count }}]</span>
</a>
{{/each}}
{{#if totalSize}}
<footer class="flexrow">
<strong>{{ localize "SETUP.BACKUPS.TotalSize" }}</strong>
{{ totalSize }}
</footer>
{{/if}}
</nav>
{{!----------- Right Column - Packages ------------}}
<form class="entries flexcol">
{{!----------- Bulk Actions ------------}}
{{#if hasBulkActions}}
<nav class="bulk-actions flexrow" aria-label="{{ localize "SETUP.BACKUPS.BulkActions" }}">
<label class="checkbox">
<input type="checkbox" name="select-all" data-action="select-all">
{{ localize "SelectAll" }}
</label>
<a class="button" data-action="delete">{{ localize "DeleteSelected" }}</a>
</nav>
{{/if}}
{{!----------- Packages List ------------}}
<div class="entry-list flexcol scrollable {{#if progress}}loading{{/if}}">
{{#if progress}}
<div class="progress">
<h3 class="divider">{{ localize progress.label }}</h3>
<i class="{{ progress.icon }}"></i>
</div>
{{/if}}
{{#each entries}}
{{#if @root.hasBulkActions}}
<div class="flexrow checkbox-row">
<input type="checkbox" name="{{ snapshotId }}" aria-label="{{ title }}">
{{> entryPartial}}
</div>
{{else}}
{{> entryPartial}}
{{/if}}
{{/each}}
</div>
</form>
</section>

View File

@@ -0,0 +1,96 @@
{{!----------- Search Header ------------}}
<header class="search">
<label class="search">
<input name="filter" type="search" placeholder="{{ "SETUP.PackageName" }}" autofocus autocomplete="off">
</label>
</header>
{{!----------- Main Body ------------}}
<section class="body flexrow">
{{!----------- Left Column - Categories ------------}}
<aside class="flexcol">
<nav class="categories flexcol" aria-label="{{ localize "SHEETS.FormNavLabel" }}">
<label>{{ localize "SETUP.PackageCategories" }}</label>
{{#each categories}}
<a class="control category {{#if active}}active{{/if}}" data-category="{{ id }}">
{{ label }}
<span class="count">[{{ count }}]</span>
</a>
{{/each}}
</nav>
<ul class="summary">
{{#each summary}}
<li class="{{ status }} {{#if (eq count 0)}}understated{{/if}}"
data-tooltip="{{ localize tooltip version=@root.version }}">
<i class="{{ icon }}"></i>
{{ localize label count=count }}
</li>
{{/each}}
</ul>
</aside>
{{!----------- Right Column - Packages ------------}}
<section class="entries flexcol">
{{!----------- Visibility Navigation ------------}}
<nav class="visibilities flexrow">
<label>{{ localize "SETUP.PackageFilter" }}</label>
{{#each filters.types}}
<a class="button visibility {{#if active}}active{{/if}}" data-visibility="{{ id }}">{{ localize label }}</a>
{{/each}}
<div class="visibility-toggle flexrow">
{{#each filters.compatibility}}
<a class="button visibility {{#if active}}active{{/if}}" data-compatibility="{{ id }}">
{{ localize label }}
</a>
{{/each}}
</div>
</nav>
{{!----------- Packages List ------------}}
<div class="entry-list flexcol scrollable {{#if progress}}loading{{/if}}">
{{#if progress}}
<div class="progress">
<h3 class="divider">{{ localize progress.label }}</h3>
<i class="{{ progress.icon }}"></i>
</div>
{{/if}}
{{#each entries}}
<div class="entry package flexcol" data-package-id="{{ id }}">
<header class="entry-title">
<h3 class="ellipsis">{{ title }}</h3>
{{#if hasLink}}
<a class="control website-link" data-tooltip="SETUP.ViewPackagePage"
aria-label="{{ localize "SETUP.ViewPackagePage" }}" rel="nofollow" target="_blank"
href="https://foundryvtt.com/packages/{{ id }}/">
<i class="fas fa-arrow-up-right-from-square"></i>
</a>
{{/if}}
{{#if changelog}}
<a class="control changelog-link" data-tooltip="SETUP.ViewPackageChangelog"
aria-label="{{ localize "SETUP.ViewPackageChangelog" }}" href="{{ changelog }}"
rel="nofollow" target="_blank">
<i class="fas fa-list-dropdown"></i>
</a>
{{/if}}
</header>
<p class="entry-description ellipsis">{{{ description }}}</p>
<div class="entry-metadata tags flexrow">
{{#if url}}
<a class="entry-url ellipsis" href="{{ url }}" title="{{ title }}" target="_blank">{{ url }}</a>
{{/if}}
{{#each tags}}
<span class="tag {{ type }}" {{#if tooltip}}data-tooltip="{{ tooltip }}"{{/if}}>
{{#if icon}}<i class="{{ icon }}"></i>{{/if}}
{{ label }}
</span>
{{/each}}
</div>
</div>
{{/each}}
</div>
</section>
</section>

View File

@@ -0,0 +1,65 @@
{{#*inline "dependencyPartial"}}
<div class="form-group">
<label class="checkbox">
<input type="checkbox" name="{{module.id}}" {{ checked this.checked }} {{ disabled required }}
data-tooltip="{{ module.note }}">
{{ module.title }}
</label>
</div>
{{#if this.reason}}<p class="notes">{{this.reason}}</p>{{/if}}
{{/inline}}
<form>
{{!-- Required Dependencies --}}
{{#if required.length}}
<p>{{ localize "MODMANAGE.DepRequiredEnable" }}</p>
{{#each required}}
{{> dependencyPartial}}
{{/each}}
{{/if}}
{{!-- Optional Dependencies --}}
{{#if optional.length}}
<p>
{{#if enabling}}
{{ localize "MODMANAGE.DepOptionalEnable" }}
{{else}}
{{ localize "MODMANAGE.DepDisable" }}
{{/if}}
</p>
{{#each optional}}
{{> dependencyPartial}}
{{/each}}
{{/if}}
{{#if (and optional.length subtypes)}}<hr>{{/if}}
{{!-- Module-Provided Sub-Types --}}
{{#if subtypes}}
<p>{{ localize "MODMANAGE.UnavailableDocuments" }}</p>
<p>{{{ subtypes }}}</p>
{{/if}}
<footer class="sheet-footer flexrow">
<button type="submit">
<i class="fas fa-check"></i>
{{#if enabling}}
{{ localize "Activate" }}
{{else}}
{{ localize "Deactivate" }}
{{/if}}
</button>
<button type="button" data-action="cancel">
<i class="fas fa-times"></i>
{{ localize "Cancel" }}
</button>
</footer>
</form>

View File

@@ -0,0 +1,49 @@
{{#*inline "autoInstallDependencyPartial"}}
<div class="form-group">
<label class="checkbox before">
<input type="checkbox" name="{{this.id}}" checked="checked" {{ disabled required }} data-tooltip="{{ this.note }}">
<a href="{{ this.url }}" title="{{ this.id }}" target="_blank">{{this.id}}{{#if this.version}} (ver. {{this.version}}){{/if}}</a>
{{#if this.reason}}<p class="hint">{{this.reason}}</p>{{/if}}
</label>
</div>
{{/inline}}
{{#*inline "manualInstallDependencyPartial"}}
<p><a href="{{ this.url }}" title="{{ this.id }}" target="_blank">{{this.id}}{{#if this.version}} (ver. {{this.version}}){{/if}}</a> - {{this.message}}</p>
{{/inline}}
<form>
<p>{{ hasDependenciesLabel }}</p>
<div class="dependencies-info flexrow">
<section class="automatic">
<p><b>{{ autoInstallLabel }}</b></p>
{{#if canInstallRequired.length}}
<p>{{localize "SETUP.PackageRequiredDependencies"}}</p>
{{#each canInstallRequired}}
{{> autoInstallDependencyPartial this}}
{{/each}}
{{/if}}
{{#if canInstallOptional.length}}
<p>{{localize "SETUP.PackageOptionalDependencies"}}</p>
{{#each canInstallOptional}}
{{> autoInstallDependencyPartial this}}
{{/each}}
{{/if}}
</section>
<section class="manual">
<p><b>{{ manualInstallLabel }}</b></p>
{{#if cantInstallRequired.length}}
<p>{{localize "SETUP.PackageRequiredDependencies"}}</p>
{{#each cantInstallRequired}}
{{> manualInstallDependencyPartial this}}
{{/each}}
{{/if}}
{{#if cantInstallOptional.length}}
<p>{{localize "SETUP.PackageOptionalDependencies"}}</p>
{{#each cantInstallOptional}}
{{> manualInstallDependencyPartial this}}
{{/each}}
{{/if}}
</section>
</div>
</form>

View File

@@ -0,0 +1,95 @@
{{!----------- Search Header ------------}}
<header class="search">
<label class="search">
<input name="filter" type="search" placeholder="{{ localize 'SETUP.PackageName' }}" autofocus
autocomplete="off" {{#if loading}}disabled{{/if}}>
</label>
</header>
{{!----------- Main Body ------------}}
<section class="body flexrow">
{{!----------- Left Column - Categories ------------}}
<nav class="categories flexcol" aria-label="{{localize 'SHEETS.FormNavLabel'}}">
<label>{{localize "SETUP.PackageCategories"}}</label>
{{#each categories}}
<a class="control category {{css}}" data-category="{{id}}">
{{label}}
<span class="count">[{{ count }}]</span>
</a>
{{/each}}
</nav>
{{!----------- Right Column - Packages ------------}}
<section class="entries flexcol">
{{!----------- Visibility Navigation ------------}}
<nav class="visibilities flexrow">
<label>{{ localize "SETUP.PackageFilter" }}</label>
{{#each visibility}}
<a class="button visibility{{ this.css }}" data-visibility="{{ this.id }}">{{ localize this.label }}</a>
{{/each}}
</nav>
{{!----------- Packages List ------------}}
<div class="entry-list flexcol scrollable {{#if progress}}loading{{/if}}">
{{#if progress}}
<div class="progress">
<h3 class="divider">{{ localize progress.label}}</h3>
<i class="{{progress.icon}}"></i>
</div>
{{/if}}
{{#each entries}}
<div class="entry package flexcol {{ this.cssClass }}" data-package-id="{{this.id}}">
<header class="entry-title">
<h3 class="ellipsis">{{this.title}}</h3>
<a class="control website-link"><i class="fa-solid fa-arrow-up-right-from-square"></i></a>
{{#if this.owned}}<i class="fas fa-unlock-alt"></i>{{/if}}
{{#unless this.installable}}<i class="fas fa-lock"></i>{{/unless}}
{{#if this.installed }}
<button class="install" type="button" disabled>
<i class="fas fa-check"></i>
<label>{{localize "SETUP.PackageInstalled"}}</label>
</button>
{{else if this.installable }}
<button class="install" type="button" data-manifest="{{ this.manifest }}">
<i class="fas fa-download"></i>
<label>{{localize "Install"}}</label>
</button>
{{ else }}
<button class="install" type="button" disabled>
<i class="fas fa-lock"></i>
<label>{{localize "SETUP.PackageNotOwned"}}</label>
</button>
{{/if}}
</header>
<p class="entry-description ellipsis">{{{this.description}}}</p>
<div class="entry-metadata tags flexrow">
<a class="entry-url ellipsis" href="{{ this.url }}" title="{{ this.title }}" target="_blank">{{this.url}}</a>
<span class="tag author">{{ this.author }}</span>
<span class="tag version">{{ localize "Version" }} {{ this.version }}</span>
</div>
</div>
{{/each}}
</div>
</section>
</section>
{{!----------- Install Footer ------------}}
<form class="install standard-form">
<div class="form-group">
<label class="hint">
{{~localize "SETUP.ManifestURL"~}}
<i class="fas fa-circle-info" data-tooltip="SETUP.InstallHint"></i>
</label>
<div class="form-fields">
<input type="text" name="manifestURL" placeholder="https://path/to/{{ packageType }}.json" required/>
<button type="submit" data-action="install-url">
<i class="fas fa-download"></i><label>{{ localize "Install" }}</label>
</button>
</div>
</div>
</form>

View File

@@ -0,0 +1,6 @@
<p>{{ localize "SETUP.ManifestUpdateAvailable" package=package }} </p>
<h4 style="font-weight: bold;">{{ localTitle }}</h4>
<p><a href="{{localManifest}}" title="{{ localTitle }}" target="_blank">{{localManifest}}</a></p>
<h4 style="font-weight: bold;">{{ remoteTitle }}</h4>
<p><a href="{{remoteManifest}}" title="{{ remoteTitle }}" target="_blank">{{remoteManifest}}</a></p>
<p>{{ localize "SETUP.SwapToTheUpdatedManifest" }}</p>

View File

@@ -0,0 +1,218 @@
<form class="standard-form" autocomplete="off">
<nav class="tabs">
<a class="item" data-tab="basics">
<i class="fas fa-user"></i> {{localize "PACKAGE.TabBasics"}}
</a>
<a class="item" data-tab="authors">
<i class="fas fa-user"></i> {{localize "PACKAGE.TabAuthors"}}
</a>
<a class="item" data-tab="packs">
<i class="fa-solid fa-book-atlas"></i> {{localize "PACKAGE.TabPacks"}}
</a>
<a class="item" data-tab="relationships">
<i class="fa-solid fa-circle-nodes"></i> {{localize "PACKAGE.TabRelationships"}}
</a>
</nav>
<div class="tab" data-tab="basics">
{{#if isCreation}}<p class="hint">{{localize "PACKAGE.ModuleCreateHint"}}</p>
{{else if module.manifest}}<p class="notification warning">{{localize "PACKAGE.ModuleEditWarning"}}</p>
{{else}}<p class="hint">{{localize "PACKAGE.ModuleEditHint"}}</p>{{/if}}
<div class="form-group">
<label>{{localize "PACKAGE.Title"}}</label>
<div class="form-fields">
<input type="text" name="title" value="{{module.title}}" data-slugify="id">
</div>
<p class="hint">{{localize "PACKAGE.TitleHint"}}</p>
</div>
<div class="form-group">
<label>{{localize "PACKAGE.Id"}}</label>
<div class="form-fields">
<input type="text" name="id" value="{{moduleId}}" placeholder="{{module.id}}"
{{#unless isCreation}}disabled{{/unless}}>
</div>
<p class="hint">{{localize "PACKAGE.IdHint"}}</p>
</div>
<div class="form-group">
<label>{{localize "PACKAGE.Version"}}</label>
<div class="form-fields">
<input type="text" name="version" value="{{module.version}}">
</div>
<p class="hint">{{localize "PACKAGE.VersionHint"}}</p>
</div>
<div class="form-group">
<label>{{localize "PACKAGE.URL"}}</label>
<div class="form-fields">
<input type="text" name="url" value="{{module.url}}">
</div>
<p class="hint">{{localize "PACKAGE.URLHint"}}</p>
</div>
<div class="form-group stacked">
<label>{{localize "PACKAGE.Description"}}</label>
<textarea name="description">{{{module.description}}}</textarea>
<p class="hint">{{localize "PACKAGE.DescriptionHint"}}</p>
</div>
<fieldset>
<legend>Compatibility</legend>
<div class="form-group">
<label>{{localize "PACKAGE.Compatibility.Minimum"}}</label>
<div class="form-fields">
<input type="text" name="compatibility.minimum" value="{{module.compatibility.minimum}}">
</div>
</div>
<div class="form-group">
<label>{{localize "PACKAGE.Compatibility.Verified"}}</label>
<div class="form-fields">
<input type="text" name="compatibility.verified" value="{{module.compatibility.verified}}">
</div>
</div>
<div class="form-group">
<label>{{localize "PACKAGE.Compatibility.Maximum"}}</label>
<div class="form-fields">
<input type="text" name="compatibility.maximum" value="{{module.compatibility.maximum}}">
</div>
</div>
<p class="hint">{{localize "PACKAGE.CompatibilityHint"}}</p>
</fieldset>
</div>
<div class="tab" data-tab="authors">
{{#each module.authors as |author i|}}
<fieldset class="author">
<div class="form-group">
<label>{{localize "PACKAGE.Author.Name"}}</label>
<div class="form-fields">
<input type="text" name="authors.{{i}}.name" value="{{author.name}}">
<button type="button" class="icon" data-action="authorDelete" data-index={{i}} data-tooltip="PACKAGE.Author.Remove">
<i class="fa-solid fa-user-minus"></i>
</button>
</div>
</div>
<div class="form-group">
<label>{{localize "PACKAGE.Author.Discord"}}</label>
<div class="form-fields">
<input type="text" name="authors.{{i}}.discord" value="{{author.discord}}">
</div>
</div>
<div class="form-group">
<label>{{localize "PACKAGE.Author.Email"}}</label>
<div class="form-fields">
<input type="text" name="authors.{{i}}.email" value="{{author.email}}">
</div>
</div>
<div class="form-group">
<label>{{localize "PACKAGE.Author.URL"}}</label>
<div class="form-fields">
<input type="text" name="authors.{{i}}.url" value="{{author.url}}">
</div>
</div>
</fieldset>
{{/each}}
<button type="button" data-action="authorAdd">
<i class="fa-solid fa-user-plus"></i>
<label>{{localize "PACKAGE.Author.Add"}}</label>
</button>
</div>
<div class="tab" data-tab="packs">
{{#each packs as |pack i|}}
<fieldset class="pack">
<div class="form-group">
<label>{{localize "PACKAGE.Compendium.Label"}}</label>
<div class="form-fields">
<input type="text" name="packs.{{i}}.label" value="{{pack.label}}" data-slugify="packs.{{i}}.name">
<button type="button" class="icon" data-action="packDelete" data-index={{i}} data-tooltip="PACKAGE.Compendium.Remove">
<i class="fa-solid fa-minus"></i>
</button>
</div>
</div>
<div class="form-group">
<label>{{localize "PACKAGE.Compendium.Name"}}</label>
<div class="form-fields">
<input type="text" name="packs.{{i}}.name" value="{{ifThen pack.creating "" pack.name}}"
placeholder="{{pack.name}}" {{#if pack.existing}}disabled{{/if}}>
</div>
<p class="hint">{{localize (ifThen pack.existing "PACKAGE.Compendium.NameDisabledHint" "PACKAGE.Compendium.NameHint")}}</p>
</div>
<div class="form-group">
<label>{{localize "PACKAGE.Compendium.Type"}}</label>
<div class="form-fields">
<select name="packs.{{i}}.type">
{{selectOptions @root.compendiumTypes selected=pack.type blank="" valueAttr="value"
labelAttr="label"}}
</select>
</div>
</div>
<div class="form-group">
<label>{{localize "PACKAGE.Compendium.System"}}</label>
<div class="form-fields">
<select name="packs.{{i}}.system">
{{selectOptions @root.relatedPackages.systems selected=pack.system blank=""}}
</select>
</div>
<p class="hint">{{localize "PACKAGE.Compendium.SystemHint"}}</p>
</div>
</fieldset>
{{/each}}
<button type="button" data-action="packAdd">
<i class="fa-solid fa-plus"></i>
<label>{{localize "PACKAGE.Compendium.Add"}}</label>
</button>
</div>
<div class="tab" data-tab="relationships">
{{#each relationships as |relationship i|}}
<input type="hidden" data-dtype="String" name="relationships.{{i}}._category" value="{{relationship.category}}">
<input type="hidden" data-dtype="Number" name="relationships.{{i}}._index" value="{{relationship.index}}">
<fieldset class="pack">
<div class="form-group">
<label>{{localize "PACKAGE.Relationship.Package"}}</label>
<div class="form-fields">
<select class="relationship" name="relationships.{{i}}.id" {{#if relationship.id}}disabled{{/if}}>
<option value=""></option>
<optgroup label="{{localize "PACKAGE.Type.systemPl"}}" data-category="system">
{{selectOptions @root.relatedPackages.systems selected=relationship.id}}
</optgroup>
<optgroup label="{{localize "PACKAGE.Type.modulePl"}}" data-category="module">
{{selectOptions @root.relatedPackages.modules selected=relationship.id}}
</optgroup>
</select>
<button type="button" class="icon" data-category="{{relationship.category}}" data-index="{{relationship.index}}"
data-action="relationshipDelete" data-tooltip="PACKAGE.Relationship.Remove">
<i class="fa-solid fa-minus"></i>
</button>
</div>
</div>
<div class="form-group">
<label>{{localize "PACKAGE.Relationship.Category"}}</label>
<div class="form-fields">
<select class="category" name="relationships.{{i}}.category">
{{selectOptions @root.relationshipCategories selected=relationship.category blank="" localize=true}}
</select>
</div>
</div>
</fieldset>
{{/each}}
<button type="button" data-action="relationshipAdd">
<i class="fa-solid fa-plus"></i>
<label>{{localize "PACKAGE.Relationship.Add"}}</label>
</button>
</div>
<footer class="form-footer">
<button type="submit" class="bright">
<i class="fa-solid fa-gear-code"></i>
<label>{{localize submitLabel}}</label>
</button>
</footer>
</form>

View File

@@ -0,0 +1,3 @@
<article class="scrollable">
{{{html}}}
</article>

View File

@@ -0,0 +1,22 @@
<form class="standard-form" method="post" autocomplete="off">
<h2 class="border">{{localize "EULA.Acknowledge"}}</h2>
<div class="form-group">
<div class="form-fields">
<label class="checkbox after">
{{localize "EULA.AgreeLabel"}}
<input id="eula-agree" type="checkbox" name="agree">
</label>
<p class="hint">{{localize "EULA.AgreeHint"}}</p>
</div>
</div>
<footer class="form-footer">
<button type="submit" id="sign" class="bright" name="accept" data-action="accept">
<i class="fa fa-check"></i>
<label>{{localize "EULA.Agree"}}</label>
</button>
<button type="submit" id="decline" name="decline" data-action="decline">
<i class="fa fa-times"></i>
<label>{{localize "EULA.Decline"}}</label>
</button>
</footer>
</form>

View File

@@ -0,0 +1,17 @@
<div class="application standard-form framed">
<h2 class="divider">{{ localize "JOIN.HeaderDetails" }}</h2>
<div class="form-group">
<label><i class="fas fa-clock"></i> {{ localize "JOIN.NextSession" }}<span id="next-tz">{{ nextTZ }}</span></label>
<div class="form-fields">
<span>{{nextTime}}</span>
</div>
</div>
<div class="form-group">
<label><i class="fas fa-users"></i> {{ localize "JOIN.CurrentPlayers" }}</label>
<div class="form-fields current-players">
<span class="count">{{ usersCurrent }}</span>
<span class="sep">/</span>
<span class="count">{{ usersMax }}</span>
</div>
</div>
</div>

View File

@@ -0,0 +1,27 @@
<form class="application standard-form framed" autocomplete="off">
<h2 class="divider">{{ localize "JOIN.HeaderJoin" }}</h2>
<div class="form-group">
<label class="icon" data-tooltip="{{ localize 'JOIN.SelectUser' }}"><i class="fas fa-user"></i></label>
<div class="form-fields">
<select name="userid">
<option value=""></option>
{{#each users}}
<option value="{{this.id}}" {{#if this.active}}disabled{{/if}}>{{this.name}}</option>
{{/each}}
</select>
</div>
</div>
<div class="form-group">
<label class="icon" data-tooltip="{{ localize 'JOIN.UserKey' }}"><i class="fas fa-key"></i></label>
<div class="form-fields">
<input type="password" name="password" placeholder="{{ localize "USERS.AccessKey" }}"
value="" autocomplete="off">
</div>
</div>
<footer class="form-footer">
<button type="submit" name="join" class="bright">
<i class="fas fa-check"></i>
<label>{{ localize "JOIN.HeaderJoin" }}</label>
</button>
</footer>
</form>

View File

@@ -0,0 +1,20 @@
<form class="application standard-form framed">
<h2 class="divider">{{ localize "GAME.ReturnSetup" }}</h2>
<div class="form-group">
{{#if isAdmin }}
<p class="hint">{{ localize "JOIN.AuthAdmin" }}</p>
{{else}}
<label class="icon" data-tooltip="{{ localize 'SETUP.AdminPasswordLabel' }}">
<i class="fas fa-key"></i>
</label>
<input type="password" name="adminPassword" value="" placeholder="{{ localize 'SETUP.AdminPasswordLabel' }}"
autocomplete="current-password">
{{/if}}
</div>
<footer class="form-footer">
<button type="submit" class="bright">
<i class="fas fa-lock"></i>
<label>{{ localize "GAME.ReturnSetup" }}</label>
</button>
</footer>
</form>

View File

@@ -0,0 +1,6 @@
<article class="application framed">
<h2 class="divider">{{ localize "JOIN.HeaderWorld" }}</h2>
<div id="world-description" class="scrollable">
{{{ world.description }}}
</div>
</article>

View File

@@ -0,0 +1,123 @@
{{! -------------------------------------------- }}
{{! World Details View }}
{{! -------------------------------------------- }}
{{#*inline "worlds"}}
<li class="package world" data-package-id="{{package.id}}">
<div class="status-icons">
{{#if package.favorite}}
<i class="favorite fa-solid fa-star" data-tooltip="{{localize "SETUP.FavoritePackage"}}"></i>
{{/if}}
<i class="lock fas fa-lock {{#unless package.locked}}hidden{{/unless}}"
data-tooltip="{{localize "SETUP.LockHint"}}"></i>
</div>
<div class="package-thumbnail">
<img class="thumbnail" data-src="{{package.thumb}}">
<h3 class="package-title">{{package.title}}</h3>
{{#if package.canPlay}}
<a class="control play" data-action="worldLaunch" data-tooltip="SETUP.WorldLaunch">
<i class="fal fa-play-circle"></i>
</a>
{{/if}}
</div>
<div class="package-content flexcol">
<div class="package-description scrollable">{{{package.description}}}</div>
<footer class="package-footer">
<div class="tags left">
{{#if package.lastPlayedLabel}}
<span class="tag">{{package.lastPlayedLabel}}</span>
{{/if}}
</div>
<div class="tags right">
<span class="tag {{package.systemBadge.type}}" data-tooltip="{{package.systemBadge.tooltip}}">
{{#if package.systemBadge.icon}}<i class="{{package.systemBadge.icon}}"></i>{{/if}}
{{package.systemBadge.label}}
</span>
{{> templates/setup/parts/package-tags.hbs package=this}}
</div>
</footer>
</div>
</li>
{{/inline}}
{{! -------------------------------------------- }}
{{! System Details View }}
{{! -------------------------------------------- }}
{{#*inline "systems"}}
<li class="package system" data-package-id="{{package.id}}">
<div class="status-icons">
{{#if package.favorite}}
<i class="favorite fa-solid fa-star" data-tooltip="{{localize "SETUP.FavoritePackage"}}"></i>
{{/if}}
<i class="lock fas fa-lock {{#unless package.locked}}hidden{{/unless}}"
data-tooltip="{{localize "SETUP.LockHint"}}"></i>
</div>
<div class="package-thumbnail">
<img class="thumbnail" data-src="{{package.thumb}}">
<h3 class="package-title">{{package.title}}</h3>
</div>
<div class="package-content flexcol">
<div class="package-description scrollable">{{{package.description}}}</div>
<footer class="package-footer">
<div class="tags left">
{{#unless package.locked}}
<a class="control package-update" data-action="updatePackage" data-tooltip="{{localize "SETUP.UpdatePerformIfAvailable"}}">
<i class="fas fa-sync-alt"></i>
</a>
<span class="tag update-status hidden">Updated</span>
{{/unless}}
</div>
<div class="tags right">
{{> templates/setup/parts/package-tags.hbs package=this}}
</div>
</footer>
</div>
</li>
{{/inline}}
{{! -------------------------------------------- }}
{{! Module Details View }}
{{! -------------------------------------------- }}
{{#*inline "modules"}}
<li class="package module" data-package-id="{{package.id}}">
<div class="status-icons">
{{#if package.favorite}}
<i class="favorite fa-solid fa-star" data-tooltip="{{localize "SETUP.FavoritePackage"}}"></i>
{{/if}}
<i class="lock fas fa-lock {{#unless package.locked}}hidden{{/unless}}"
data-tooltip="{{localize "SETUP.LockHint"}}"></i>
</div>
<div class="package-thumbnail">
<img class="thumbnail" data-src="{{package.thumb}}">
<h3 class="package-title">{{package.title}}</h3>
</div>
<div class="package-content flexcol">
<div class="package-description scrollable">{{{package.description}}}</div>
<footer class="package-footer">
<div class="tags left">
{{#unless package.locked}}
<a class="control package-update" data-action="updatePackage" data-tooltip="{{localize "SETUP.UpdatePerformIfAvailable"}}">
<i class="fas fa-sync-alt"></i>
</a>
<span class="tag update-status hidden">Updated</span>
{{/unless}}
</div>
<div class="tags right">
{{> templates/setup/parts/package-tags.hbs package=this}}
</div>
</footer>
</div>
</li>
{{/inline}}
{{! -------------------------------------------- }}
{{! Details View }}
{{! -------------------------------------------- }}
<ol id="{{type}}-list" class="package-list details scrollable">
{{#each packages as |package|}}
{{> (lookup .. "type") package=package}}
{{/each}}
</ol>

View File

@@ -0,0 +1,102 @@
{{! -------------------------------------------- }}
{{! World Thumbnail View }}
{{! -------------------------------------------- }}
{{#*inline "worlds"}}
<li class="package world" data-package-id="{{package.id}}">
<img class="thumbnail" data-src="{{package.thumb}}">
<div class="status-icons">
{{#if package.favorite}}
<i class="favorite fa-solid fa-star" data-tooltip="{{localize "SETUP.FavoritePackage"}}"></i>
{{/if}}
<i class="lock fas fa-lock {{#unless package.locked}}hidden{{/unless}}"
data-tooltip="{{localize "SETUP.LockHint"}}"></i>
</div>
<h3 class="package-title" data-tooltip="{{package.shortDesc}}" data-tooltip-direction="UP">{{package.title}}</h3>
{{#if package.canPlay}}
<a class="control play" data-action="worldLaunch" data-tooltip="SETUP.WorldLaunch">
<i class="fal fa-play-circle"></i>
</a>
{{/if}}
<div class="tags left">
{{#if package.lastPlayedLabel}}
<span class="tag">{{package.lastPlayedLabel}}</span>
{{/if}}
</div>
<div class="tags right">
<span class="tag {{package.systemBadge.type}}" data-tooltip="{{package.systemBadge.tooltip}}">
{{#if package.systemBadge.icon}}<i class="{{package.systemBadge.icon}}"></i>{{/if}}
{{package.systemBadge.label}}
</span>
{{> templates/setup/parts/package-tags.hbs package=this}}
</div>
</li>
{{/inline}}
{{! -------------------------------------------- }}
{{! System Thumbnail View }}
{{! -------------------------------------------- }}
{{#*inline "systems"}}
<li class="package system" data-package-id="{{package.id}}">
<img class="thumbnail" data-src="{{package.thumb}}">
<div class="status-icons">
{{#if package.favorite}}
<i class="favorite fa-solid fa-star" data-tooltip="{{localize "SETUP.FavoritePackage"}}"></i>
{{/if}}
<i class="lock fas fa-lock {{#unless package.locked}}hidden{{/unless}}"
data-tooltip="{{localize "SETUP.LockHint"}}"></i>
</div>
<h3 class="package-title" data-tooltip="{{package.shortDesc}}" data-tooltip-direction="UP">{{package.title}}</h3>
<div class="tags left">
{{#unless package.locked}}
<a class="control package-update" data-action="updatePackage" data-tooltip="{{localize "SETUP.UpdatePerformIfAvailable"}}">
<i class="fas fa-sync-alt"></i>
</a>
<span class="tag update-status hidden">Updated</span>
{{/unless}}
</div>
<div class="tags right">
{{> templates/setup/parts/package-tags.hbs package=this}}
</div>
</li>
{{/inline}}
{{! -------------------------------------------- }}
{{! Module Thumbnail View }}
{{! -------------------------------------------- }}
{{#*inline "modules"}}
<li class="package module" data-package-id="{{package.id}}">
<img class="thumbnail" data-src="{{package.thumb}}">
<div class="status-icons">
{{#if package.favorite}}
<i class="favorite fa-solid fa-star" data-tooltip="{{localize "SETUP.FavoritePackage"}}"></i>
{{/if}}
<i class="lock fas fa-lock {{#unless package.locked}}hidden{{/unless}}"
data-tooltip="{{localize "SETUP.LockHint"}}"></i>
</div>
<h3 class="package-title" data-tooltip="{{package.shortDesc}}" data-tooltip-direction="UP">{{package.title}}</h3>
<div class="tags left">
{{#unless package.locked}}
<a class="control package-update" data-action="updatePackage" data-tooltip="{{localize "SETUP.UpdatePerformIfAvailable"}}">
<i class="fas fa-sync-alt"></i>
</a>
<span class="tag update-status hidden">Updated</span>
{{/unless}}
</div>
<div class="tags right">
{{> templates/setup/parts/package-tags.hbs package=this}}
</div>
</li>
{{/inline}}
{{! -------------------------------------------- }}
{{! Thumbnail List }}
{{! -------------------------------------------- }}
<ol id="{{type}}-list" class="package-list gallery scrollable">
{{#each packages as |package|}}
{{> (lookup .. "type") package=package}}
{{/each}}
</ol>

View File

@@ -0,0 +1,18 @@
{{#if package.url}}
<span class="tag" data-tooltip="<a href='{{package.url}}' target='_blank'>{{package.url}}</a>" data-locked><i class="fas fa-circle-info"></i></span>
{{/if}}
{{#if package.authors}}
<span class="tag" data-tooltip="{{package.authors}}" data-locked><i class="fas fa-user"></i></span>
{{/if}}
{{#if package.packs}}
<span class="tag compendium" data-tooltip="{{localize 'PACKAGE.TagCompendium'}}"><i class="fas fa-book"></i></span>
{{/if}}
{{#if package.languages}}
<span class="tag languages" data-tooltip="{{localize 'PACKAGE.TagLocalization'}}"><i class="fas fa-language"></i></span>
{{/if}}
{{#if package.badge}}
<span class="tag {{badge.type}}" data-tooltip="{{badge.tooltip}}">
<i class="{{badge.icon}}"></i>
{{#if package.badge.label}}{{package.badge.label}}{{/if}}
</span>
{{/if}}

View File

@@ -0,0 +1,96 @@
{{! -------------------------------------------- }}
{{! World Tiles View }}
{{! -------------------------------------------- }}
{{#*inline "worlds"}}
<li class="package world" data-package-id="{{package.id}}">
<div class="status-icons">
{{#if package.favorite}}
<i class="favorite fa-solid fa-star" data-tooltip="{{localize "SETUP.FavoritePackage"}}"></i>
{{/if}}
<i class="lock fas fa-lock {{#unless package.locked}}hidden{{/unless}}"
data-tooltip="{{localize "SETUP.LockHint"}}"></i>
</div>
<h3 class="package-title ellipsis" data-tooltip="{{package.shortDesc}}" data-tooltip-direction="UP">{{package.title}}</h3>
<div class="tags left">
{{#if package.canPlay}}
<a class="control play" data-action="worldLaunch" data-tooltip="SETUP.WorldLaunch">
<i class="fal fa-play-circle"></i>
</a>
{{/if}}
</div>
<div class="tags right">
<span class="tag {{package.systemBadge.type}}" data-tooltip="{{package.systemBadge.tooltip}}">
{{#if package.systemBadge.icon}}<i class="{{package.systemBadge.icon}}"></i>{{/if}}
{{package.systemBadge.label}}
</span>
{{> templates/setup/parts/package-tags.hbs package=this}}
</div>
</li>
{{/inline}}
{{! -------------------------------------------- }}
{{! System Tiles View }}
{{! -------------------------------------------- }}
{{#*inline "systems"}}
<li class="package system" data-package-id="{{package.id}}">
<div class="status-icons">
{{#if package.favorite}}
<i class="favorite fa-solid fa-star" data-tooltip="{{localize "SETUP.FavoritePackage"}}"></i>
{{/if}}
<i class="lock fas fa-lock {{#unless package.locked}}hidden{{/unless}}"
data-tooltip="{{localize "SETUP.LockHint"}}"></i>
</div>
<h3 class="package-title ellipsis" data-tooltip="{{package.shortDesc}}" data-tooltip-direction="UP">{{package.title}}</h3>
<div class="tags left">
{{#unless package.locked}}
<a class="control package-update" data-action="updatePackage" data-tooltip="{{localize "SETUP.UpdatePerformIfAvailable"}}">
<i class="fas fa-sync-alt"></i>
</a>
<span class="tag update-status hidden">Updated</span>
{{/unless}}
</div>
<div class="tags right">
{{> templates/setup/parts/package-tags.hbs package=this}}
</div>
</li>
{{/inline}}
{{! -------------------------------------------- }}
{{! Module Tiles View }}
{{! -------------------------------------------- }}
{{#*inline "modules"}}
<li class="package module" data-package-id="{{package.id}}">
<div class="status-icons">
{{#if package.favorite}}
<i class="favorite fa-solid fa-star" data-tooltip="{{localize "SETUP.FavoritePackage"}}"></i>
{{/if}}
<i class="lock fas fa-lock {{#unless package.locked}}hidden{{/unless}}"
data-tooltip="{{localize "SETUP.LockHint"}}"></i>
</div>
<h3 class="package-title ellipsis" data-tooltip="{{package.shortDesc}}" data-tooltip-direction="UP">{{package.title}}</h3>
<div class="tags left">
{{#unless package.locked}}
<a class="control package-update" data-action="updatePackage" data-tooltip="{{localize "SETUP.UpdatePerformIfAvailable"}}">
<i class="fas fa-sync-alt"></i>
</a>
<span class="tag update-status hidden">Updated</span>
{{/unless}}
</div>
<div class="tags right">
{{> templates/setup/parts/package-tags.hbs package=this}}
</div>
</li>
{{/inline}}
{{! -------------------------------------------- }}
{{! Thumbnail List }}
{{! -------------------------------------------- }}
<ol id="{{type}}-list" class="package-list tiles scrollable">
{{#each packages as |package|}}
{{> (lookup .. "type") package=package}}
{{/each}}
</ol>

Some files were not shown because too many files have changed in this diff Show More