Initial
This commit is contained in:
106
resources/app/templates/adventure/exporter.html
Normal file
106
resources/app/templates/adventure/exporter.html
Normal 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>
|
||||
53
resources/app/templates/adventure/importer.html
Normal file
53
resources/app/templates/adventure/importer.html
Normal 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>
|
||||
12
resources/app/templates/app-window.html
Normal file
12
resources/app/templates/app-window.html
Normal 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>
|
||||
31
resources/app/templates/apps/compendium-art-config.hbs
Normal file
31
resources/app/templates/apps/compendium-art-config.hbs
Normal 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>
|
||||
45
resources/app/templates/apps/compendium.html
Normal file
45
resources/app/templates/apps/compendium.html
Normal 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>
|
||||
1
resources/app/templates/apps/documentation.html
Normal file
1
resources/app/templates/apps/documentation.html
Normal file
@@ -0,0 +1 @@
|
||||
<iframe id="docs" src="{{src}}" width="100%" height="100%"/>
|
||||
166
resources/app/templates/apps/filepicker.html
Normal file
166
resources/app/templates/apps/filepicker.html
Normal 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>
|
||||
21
resources/app/templates/apps/image-popout.html
Normal file
21
resources/app/templates/apps/image-popout.html
Normal 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>
|
||||
8
resources/app/templates/apps/import-data.html
Normal file
8
resources/app/templates/apps/import-data.html
Normal 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>
|
||||
40
resources/app/templates/apps/ownership.html
Normal file
40
resources/app/templates/apps/ownership.html
Normal 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>
|
||||
22
resources/app/templates/apps/permission-config.hbs
Normal file
22
resources/app/templates/apps/permission-config.hbs
Normal 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>
|
||||
26
resources/app/templates/apps/tour-step.html
Normal file
26
resources/app/templates/apps/tour-step.html
Normal 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>
|
||||
127
resources/app/templates/cards/card-config.html
Normal file
127
resources/app/templates/cards/card-config.html
Normal 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>
|
||||
|
||||
102
resources/app/templates/cards/cards-deck.html
Normal file
102
resources/app/templates/cards/cards-deck.html
Normal 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>
|
||||
|
||||
66
resources/app/templates/cards/cards-hand.html
Normal file
66
resources/app/templates/cards/cards-hand.html
Normal 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>
|
||||
|
||||
63
resources/app/templates/cards/cards-pile.html
Normal file
63
resources/app/templates/cards/cards-pile.html
Normal 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>
|
||||
38
resources/app/templates/cards/dialog-deal.html
Normal file
38
resources/app/templates/cards/dialog-deal.html
Normal 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>
|
||||
35
resources/app/templates/cards/dialog-draw.html
Normal file
35
resources/app/templates/cards/dialog-draw.html
Normal 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>
|
||||
35
resources/app/templates/cards/dialog-pass.html
Normal file
35
resources/app/templates/cards/dialog-pass.html
Normal 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>
|
||||
23
resources/app/templates/cards/dialog-play.html
Normal file
23
resources/app/templates/cards/dialog-play.html
Normal 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>
|
||||
16
resources/app/templates/dice/config.html
Normal file
16
resources/app/templates/dice/config.html
Normal 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>
|
||||
24
resources/app/templates/dice/roll-resolver.hbs
Normal file
24
resources/app/templates/dice/roll-resolver.hbs
Normal 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>
|
||||
10
resources/app/templates/dice/roll.html
Normal file
10
resources/app/templates/dice/roll.html
Normal 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>
|
||||
14
resources/app/templates/dice/table-result.html
Normal file
14
resources/app/templates/dice/table-result.html
Normal 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>
|
||||
25
resources/app/templates/dice/tooltip.html
Normal file
25
resources/app/templates/dice/tooltip.html
Normal 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}}
|
||||
14
resources/app/templates/generic/form-fields.hbs
Normal file
14
resources/app/templates/generic/form-fields.hbs
Normal 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>
|
||||
9
resources/app/templates/generic/form-footer.hbs
Normal file
9
resources/app/templates/generic/form-footer.hbs
Normal 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>
|
||||
8
resources/app/templates/generic/tab-navigation.hbs
Normal file
8
resources/app/templates/generic/tab-navigation.hbs
Normal 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>
|
||||
118
resources/app/templates/hud/camera-views.html
Normal file
118
resources/app/templates/hud/camera-views.html
Normal 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>
|
||||
5
resources/app/templates/hud/chat-bubble.html
Normal file
5
resources/app/templates/hud/chat-bubble.html
Normal file
@@ -0,0 +1,5 @@
|
||||
<div class="chat-bubble {{ cssClasses }}" data-token-id="{{ token.id }}">
|
||||
<div class="bubble-content">
|
||||
{{{ message }}}
|
||||
</div>
|
||||
</div>
|
||||
18
resources/app/templates/hud/controls.html
Normal file
18
resources/app/templates/hud/controls.html
Normal 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>
|
||||
11
resources/app/templates/hud/dialog.html
Normal file
11
resources/app/templates/hud/dialog.html
Normal 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>
|
||||
30
resources/app/templates/hud/drawing-hud.html
Normal file
30
resources/app/templates/hud/drawing-hud.html
Normal 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>
|
||||
40
resources/app/templates/hud/hotbar.html
Normal file
40
resources/app/templates/hud/hotbar.html
Normal 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>
|
||||
7
resources/app/templates/hud/hud.html
Normal file
7
resources/app/templates/hud/hud.html
Normal 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>
|
||||
12
resources/app/templates/hud/menu.html
Normal file
12
resources/app/templates/hud/menu.html
Normal 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>
|
||||
24
resources/app/templates/hud/navigation.html
Normal file
24
resources/app/templates/hud/navigation.html
Normal 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>
|
||||
4
resources/app/templates/hud/pause.html
Normal file
4
resources/app/templates/hud/pause.html
Normal 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>
|
||||
31
resources/app/templates/hud/tile-hud.html
Normal file
31
resources/app/templates/hud/tile-hud.html
Normal 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>
|
||||
65
resources/app/templates/hud/token-hud.html
Normal file
65
resources/app/templates/hud/token-hud.html
Normal 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>
|
||||
19
resources/app/templates/hud/toolclip.html
Normal file
19
resources/app/templates/hud/toolclip.html
Normal 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>
|
||||
52
resources/app/templates/journal/dialog-show.html
Normal file
52
resources/app/templates/journal/dialog-show.html
Normal 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>
|
||||
25
resources/app/templates/journal/insert-image.html
Normal file
25
resources/app/templates/journal/insert-image.html
Normal 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>
|
||||
21
resources/app/templates/journal/insert-link.html
Normal file
21
resources/app/templates/journal/insert-link.html
Normal 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>
|
||||
12
resources/app/templates/journal/insert-table.html
Normal file
12
resources/app/templates/journal/insert-table.html
Normal 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>
|
||||
7
resources/app/templates/journal/journal-page-toc.html
Normal file
7
resources/app/templates/journal/journal-page-toc.html
Normal 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>
|
||||
24
resources/app/templates/journal/page-image-edit.html
Normal file
24
resources/app/templates/journal/page-image-edit.html
Normal 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>
|
||||
9
resources/app/templates/journal/page-image-view.html
Normal file
9
resources/app/templates/journal/page-image-view.html
Normal 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>
|
||||
8
resources/app/templates/journal/page-markdown-edit.html
Normal file
8
resources/app/templates/journal/page-markdown-edit.html
Normal 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>
|
||||
16
resources/app/templates/journal/page-pdf-edit.html
Normal file
16
resources/app/templates/journal/page-pdf-edit.html
Normal 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>
|
||||
10
resources/app/templates/journal/page-pdf-view.html
Normal file
10
resources/app/templates/journal/page-pdf-view.html
Normal 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}}
|
||||
5
resources/app/templates/journal/page-text-edit.html
Normal file
5
resources/app/templates/journal/page-text-edit.html
Normal 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>
|
||||
8
resources/app/templates/journal/page-text-view.html
Normal file
8
resources/app/templates/journal/page-text-view.html
Normal 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>
|
||||
78
resources/app/templates/journal/page-video-edit.html
Normal file
78
resources/app/templates/journal/page-video-edit.html
Normal 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>
|
||||
23
resources/app/templates/journal/page-video-view.html
Normal file
23
resources/app/templates/journal/page-video-view.html
Normal 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}}
|
||||
5
resources/app/templates/journal/parts/page-footer.html
Normal file
5
resources/app/templates/journal/parts/page-footer.html
Normal 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>
|
||||
22
resources/app/templates/journal/parts/page-header.html
Normal file
22
resources/app/templates/journal/parts/page-header.html
Normal 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>
|
||||
|
||||
|
||||
72
resources/app/templates/journal/sheet.html
Normal file
72
resources/app/templates/journal/sheet.html
Normal 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>
|
||||
48
resources/app/templates/playlist/playlist-config.html
Normal file
48
resources/app/templates/playlist/playlist-config.html
Normal 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>
|
||||
44
resources/app/templates/playlist/sound-config.html
Normal file
44
resources/app/templates/playlist/sound-config.html
Normal 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>
|
||||
79
resources/app/templates/scene/ambient-sound-config.hbs
Normal file
79
resources/app/templates/scene/ambient-sound-config.hbs
Normal 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>
|
||||
270
resources/app/templates/scene/config.html
Normal file
270
resources/app/templates/scene/config.html
Normal 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>
|
||||
64
resources/app/templates/scene/default-token-config.html
Normal file
64
resources/app/templates/scene/default-token-config.html
Normal 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>
|
||||
176
resources/app/templates/scene/drawing-config.html
Normal file
176
resources/app/templates/scene/drawing-config.html
Normal 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>
|
||||
48
resources/app/templates/scene/grid-config.html
Normal file
48
resources/app/templates/scene/grid-config.html
Normal 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>
|
||||
124
resources/app/templates/scene/note-config.html
Normal file
124
resources/app/templates/scene/note-config.html
Normal 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>
|
||||
20
resources/app/templates/scene/parts/light-advanced.hbs
Normal file
20
resources/app/templates/scene/parts/light-advanced.hbs
Normal 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>
|
||||
12
resources/app/templates/scene/parts/light-animation.hbs
Normal file
12
resources/app/templates/scene/parts/light-animation.hbs
Normal 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>
|
||||
50
resources/app/templates/scene/parts/light-basic.hbs
Normal file
50
resources/app/templates/scene/parts/light-basic.hbs
Normal 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>
|
||||
37
resources/app/templates/scene/parts/region-behaviors.hbs
Normal file
37
resources/app/templates/scene/parts/region-behaviors.hbs
Normal 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>
|
||||
23
resources/app/templates/scene/parts/region-identity.hbs
Normal file
23
resources/app/templates/scene/parts/region-identity.hbs
Normal 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=" " 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="+ " 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>
|
||||
34
resources/app/templates/scene/parts/region-shapes.hbs
Normal file
34
resources/app/templates/scene/parts/region-shapes.hbs
Normal 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>
|
||||
145
resources/app/templates/scene/parts/scene-ambience.html
Normal file
145
resources/app/templates/scene/parts/scene-ambience.html
Normal 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>
|
||||
42
resources/app/templates/scene/parts/token-lighting.hbs
Normal file
42
resources/app/templates/scene/parts/token-lighting.hbs
Normal 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>
|
||||
50
resources/app/templates/scene/parts/token-resources.html
Normal file
50
resources/app/templates/scene/parts/token-resources.html
Normal 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>
|
||||
136
resources/app/templates/scene/parts/token-vision.html
Normal file
136
resources/app/templates/scene/parts/token-vision.html
Normal 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="" 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="" 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="" 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>
|
||||
30
resources/app/templates/scene/region-legend.hbs
Normal file
30
resources/app/templates/scene/region-legend.hbs
Normal 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=" " 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="+ " 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>
|
||||
80
resources/app/templates/scene/template-config.html
Normal file
80
resources/app/templates/scene/template-config.html
Normal 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>
|
||||
165
resources/app/templates/scene/tile-config.html
Normal file
165
resources/app/templates/scene/tile-config.html
Normal 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>
|
||||
238
resources/app/templates/scene/token-config.html
Normal file
238
resources/app/templates/scene/token-config.html
Normal 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>
|
||||
102
resources/app/templates/scene/wall-config.html
Normal file
102
resources/app/templates/scene/wall-config.html
Normal 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>
|
||||
130
resources/app/templates/setup/app-configuration.hbs
Normal file
130
resources/app/templates/setup/app-configuration.hbs
Normal 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>
|
||||
48
resources/app/templates/setup/backup-list.hbs
Normal file
48
resources/app/templates/setup/backup-list.hbs
Normal 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>
|
||||
101
resources/app/templates/setup/backup-manager.hbs
Normal file
101
resources/app/templates/setup/backup-manager.hbs
Normal 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>
|
||||
96
resources/app/templates/setup/compatibility-checker.hbs
Normal file
96
resources/app/templates/setup/compatibility-checker.hbs
Normal 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>
|
||||
65
resources/app/templates/setup/impacted-dependencies.html
Normal file
65
resources/app/templates/setup/impacted-dependencies.html
Normal 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>
|
||||
49
resources/app/templates/setup/install-dependencies.html
Normal file
49
resources/app/templates/setup/install-dependencies.html
Normal 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>
|
||||
95
resources/app/templates/setup/install-package.hbs
Normal file
95
resources/app/templates/setup/install-package.hbs
Normal 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>
|
||||
6
resources/app/templates/setup/manifest-update.html
Normal file
6
resources/app/templates/setup/manifest-update.html
Normal 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>
|
||||
218
resources/app/templates/setup/module-configuration.hbs
Normal file
218
resources/app/templates/setup/module-configuration.hbs
Normal 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>
|
||||
3
resources/app/templates/setup/parts/eula-content.hbs
Normal file
3
resources/app/templates/setup/parts/eula-content.hbs
Normal file
@@ -0,0 +1,3 @@
|
||||
<article class="scrollable">
|
||||
{{{html}}}
|
||||
</article>
|
||||
22
resources/app/templates/setup/parts/eula-form.hbs
Normal file
22
resources/app/templates/setup/parts/eula-form.hbs
Normal 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>
|
||||
17
resources/app/templates/setup/parts/join-details.hbs
Normal file
17
resources/app/templates/setup/parts/join-details.hbs
Normal 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>
|
||||
27
resources/app/templates/setup/parts/join-form.hbs
Normal file
27
resources/app/templates/setup/parts/join-form.hbs
Normal 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>
|
||||
20
resources/app/templates/setup/parts/join-setup.hbs
Normal file
20
resources/app/templates/setup/parts/join-setup.hbs
Normal 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>
|
||||
6
resources/app/templates/setup/parts/join-world.hbs
Normal file
6
resources/app/templates/setup/parts/join-world.hbs
Normal 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>
|
||||
123
resources/app/templates/setup/parts/package-details.hbs
Normal file
123
resources/app/templates/setup/parts/package-details.hbs
Normal 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>
|
||||
102
resources/app/templates/setup/parts/package-gallery.hbs
Normal file
102
resources/app/templates/setup/parts/package-gallery.hbs
Normal 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>
|
||||
18
resources/app/templates/setup/parts/package-tags.hbs
Normal file
18
resources/app/templates/setup/parts/package-tags.hbs
Normal 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}}
|
||||
96
resources/app/templates/setup/parts/package-tiles.hbs
Normal file
96
resources/app/templates/setup/parts/package-tiles.hbs
Normal 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
Reference in New Issue
Block a user