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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,12 @@
<section class="application flexcol">
<h2 class="divider">{{localize "SETUP.FeaturedContent"}}</h2>
{{#if featured}}
<a id="featured-content" class="news flexcol" href="{{featured.url}}" target="_blank">
<img src="{{featured.image}}" alt="{{featured.title}}">
<h3 id="featured-content-title">{{featured.title}}</h3>
<p class="caption">{{{featured.caption}}}</p>
</a>
{{else}}
<p class="notification error">{{localize "SETUP.NoFeaturedContent"}}</p>
{{/if}}
</section>

View File

@@ -0,0 +1,9 @@
<div class="flexrow">
{{#each buttons as |b|}}
<button type="button" class="icon" data-action="{{b.action}}" data-tooltip="{{b.tooltip}}"
aria-label="{{b.tooltip}}">
<i class="{{b.icon}}"></i>
{{#if b.pip}}<span class="pip {{b.pip.type}}">{{b.pip.label}}</span>{{/if}}
</button>
{{/each}}
</div>

View File

@@ -0,0 +1,15 @@
<section class="application flexcol">
<h2 class="divider">{{localize "SETUP.News"}}</h2>
<div class="container">
<div id="news-articles" class="flexcol scrollable">
{{#each news as |news|}}
<a class="news flexcol" href="{{news.url}}" target="_blank">
<img src="{{news.image}}" alt="{{news.title}}">
<h3>{{news.title}}</h3>
</a>
{{else}}
<p class="notification error">{{localize "SETUP.NoFeaturedContent"}}</p>
{{/each}}
</div>
</div>
</section>

View File

@@ -0,0 +1,39 @@
<div class="standard-form">
<h2 class="border">{{ localize "USERS.ManageTitle" }}</h2>
<header class="player form-group">
<div>
<label>{{localize "USERS.UserName"}}</label>
</div>
<div>
<label>{{localize "USERS.AccessKey"}}</label>
</div>
<div class="role">
<label>{{localize "USERS.Role"}}</label>
</div>
<div class="controls"></div>
</header>
<ol id="player-list" class="scrollable">
{{#each users as |user idx|}}
{{> (lookup .. 'userTemplate') user=user roles=../roles}}
{{/each}}
</ol>
<footer class="form-footer">
<button type="button" data-action="createUser">
<i class="fas fa-user-plus"></i>
<label>{{ localize "USERS.Create" }}</label>
</button>
{{#if canConfigurePermissions}}
<button type="button" data-action="configurePermissions">
<i class="fas fa-cogs"></i>
<label>{{ localize "PERMISSION.Configure" }}</label>
</button>
{{/if}}
<button type="submit" class="bright">
<i class="fas fa-check"></i>
<label>{{ localize "USERS.Launch" }}</label>
</button>
</footer>
</div>

View File

@@ -0,0 +1,25 @@
<li class="player form-group" data-user-id="{{user._id}}">
<div>
<label class="username">
<input type="text" name="users.{{user._id}}.name" value="{{user.name}}" autocomplete="off"/>
</label>
</div>
<div class="flexrow">
<label class="password">
<input class="password" type="password" name="users.{{user._id}}.password" value="{{@root.passwordString}}" autocomplete="off"/>
</label>
<a class="control show" data-action="showPassword" data-tooltip="{{ localize "USERS.KeyShow" }}" hidden>
<i class="fa-solid fa-eye"></i>
</a>
</div>
<div>
<select name="users.{{user._id}}.role" data-dtype="Number">
{{selectOptions roles selected=user.role}}
</select>
</div>
<div class="controls flexrow">
<a class="control" data-action="deleteUser" data-tooltip="{{ localize 'USERS.Delete' }}">
<i class="fas fa-trash"></i>
</a>
</div>
</li>

View File

@@ -0,0 +1,19 @@
<form class="standard-form" method="post" autocomplete="off">
<h2 class="border">{{{ localize "SETUP.AdminAccess" }}}</h2>
<div class="form-group">
<label class="password">
<input id="key" name="adminPassword" type="password" value=""
placeholder="{{ localize 'SETUP.AdminPasswordLabel' }}"
autocomplete="current-password" autofocus>
</label>
<p class="hint">{{ localize "SETUP.AdminPasswordPrompt" }}</p>
<p class="hint">{{{ localize "SETUP.AdminPasswordForgot" }}}</p>
</div>
<footer class="form-footer">
<button type="submit" class="bright" name="action" value="adminAuth">
<i class="fa-solid fa-unlock-keyhole"></i><label>{{localize "SETUP.AdminLogIn"}}</label>
</button>
</footer>
</form>

View File

@@ -0,0 +1,149 @@
<section id="setup-packages" class="application framed">
{{! -------------------------------------------- }}
{{! Tab Navigation }}
{{! -------------------------------------------- }}
<nav class="tabs">
<h2 class="item divider active" data-tab="worlds">
<i class="fas {{@root.worlds.icon}} tab-icon"></i>
<span class="tab-title">{{localize "SETUP.Worlds"}}</span>
</h2>
<h2 class="item divider" data-tab="systems">
<i class="fas {{@root.systems.icon}} tab-icon"></i>
<span class="tab-title">{{localize "SETUP.Systems"}}</span>
</h2>
<h2 class="item divider" data-tab="modules">
<i class="fas {{@root.modules.icon}} tab-icon"></i>
<span class="tab-title">{{localize "SETUP.Modules"}}</span>
</h2>
</nav>
{{! -------------------------------------------- }}
{{! Worlds }}
{{! -------------------------------------------- }}
<section id="worlds" class="tab" data-tab="worlds" data-package-type="world">
<header class="controls flexrow">
<label class="filter search">
<input id="world-filter" type="search" value="" autocomplete="off"
placeholder="{{ localize 'SETUP.WorldFilter' }} ({{worlds.count}})">
</label>
<button type="button" data-action="installPackage">
<i class="fas fa-download"></i>
<label>{{localize "SETUP.InstallWorld"}}</label>
</button>
<button type="button" data-action="worldCreate">
<i class="fas {{@root.worlds.icon}}"></i>
<label>{{localize "SETUP.WorldCreate"}}</label>
</button>
<div class="view-modes">
{{#each viewModes as |mode|}}
<button class="view-mode icon {{#if (eq @root.worlds.viewMode mode.id)}}active{{/if}}" type="button"
data-action="viewMode" data-view-mode="{{mode.id}}" data-tooltip="{{mode.label}}">
<i class="{{mode.icon}}"></i>
</button>
{{/each}}
</div>
</header>
{{> (lookup worlds "template") type="worlds" packages=worlds.packages}}
<div class="no-results hidden"></div>
<div class="locked hidden">
<h3 class="divider"></h3>
<i class="fas fa-spinner fa-spin"></i>
</div>
{{#unless worlds.count}}
<div class="no-worlds">
<p>{{localize "SETUP.GettingStarted"}}</p>
<p>{{{localize "SETUP.NoWorldsMessage"}}} <a data-tour="creatingAWorld" title="{{ localize "TOURS.ShowMeHow" }}" class="launch-tour"><i class="fas fa-person-hiking"></i> {{ localize "TOURS.ShowMeHow" }}</a></p>
</div>
{{/unless}}
</section>
{{! -------------------------------------------- }}
{{! Systems }}
{{! -------------------------------------------- }}
<section id="systems" class="tab" data-tab="systems" data-package-type="system">
<header class="controls flexrow">
<label class="filter search">
<input id="system-filter" type="search" value="" autocomplete="off"
placeholder="{{ localize 'SETUP.SystemFilter' }} ({{systems.count}})">
</label>
<button type="button" data-action="installPackage">
<i class="fas fa-download"></i>
<label>{{localize "SETUP.InstallSystem"}}</label>
</button>
<button type="button" data-action="updateAll" {{ disabled systems.updatingAll }}>
<i class="{{#if systems.updatingAll}}fas fa-spinner fa-spin{{else}}fas fa-cloud-download{{/if}}"></i>
<label>{{localize "SETUP.UpdateAll"}}</label>
</button>
<div class="view-modes">
{{#each viewModes as |mode|}}
<button class="view-mode icon {{#if (eq @root.systems.viewMode mode.id)}}active{{/if}}" type="button"
data-action="viewMode" data-view-mode="{{mode.id}}" data-tooltip="{{mode.label}}">
<i class="{{mode.icon}}"></i>
</button>
{{/each}}
</div>
</header>
{{> (lookup systems "template") type="systems" packages=systems.packages}}
<div class="no-results hidden"></div>
<div class="locked hidden">
<h3 class="divider"></h3>
<i class="fas fa-spinner fa-spin"></i>
</div>
{{#unless systems.count}}
<div class="no-systems">
<p>{{localize "SETUP.GettingStarted"}}</p>
<p>{{{localize "SETUP.NoSystemsMessage"}}}
<a class="launch-tour" data-tour="installingASystem" data-tooltip="TOURS.ShowMeHow">
<i class="fas fa-person-hiking"></i>
{{ localize "TOURS.ShowMeHow" }}
</a>
</p>
</div>
{{/unless}}
</section>
{{! -------------------------------------------- }}
{{! Modules }}
{{! -------------------------------------------- }}
<section id="modules" class="tab" data-tab="modules" data-package-type="module">
<header class="controls flexrow">
<label class="filter search">
<input id="module-filter" type="search" value="" autocomplete="off"
placeholder="{{ localize 'SETUP.ModuleFilter' }} ({{modules.count}})">
</label>
<button type="button" data-action="installPackage">
<i class="fas fa-download"></i>
<label>{{localize "SETUP.InstallModule"}}</label>
</button>
<button type="button" data-action="updateAll" {{ disabled modules.updatingAll }}>
<i class="{{#if modules.updatingAll}}fas fa-spinner fa-spin{{else}}fas fa-cloud-download{{/if}}"></i>
<label>{{localize "SETUP.UpdateAll"}}</label>
</button>
<button id="moduleCreate" type="button" class="icon" data-action="moduleCreate" data-tooltip="PACKAGE.ModuleCreate">
<i class="fa-solid fa-gear-code"></i>
</button>
<div class="view-modes">
{{#each viewModes as |mode|}}
<button class="view-mode icon {{#if (eq @root.modules.viewMode mode.id)}}active{{/if}}" type="button"
data-action="viewMode" data-view-mode="{{mode.id}}" data-tooltip="{{mode.label}}">
<i class="{{mode.icon}}"></i>
</button>
{{/each}}
</div>
</header>
{{> (lookup modules "template") type="modules" packages=modules.packages}}
<div class="no-results hidden"></div>
<div class="locked hidden">
<h3 class="divider"></h3>
<i class="fas fa-spinner fa-spin"></i>
</div>
</section>
<div id="progress"></div>
</section>

View File

@@ -0,0 +1,70 @@
<form id="setup-update" class="application framed standard-form" method="POST" autocomplete="off">
<header class="form-header">
<h2 class="border">{{localize "SETTINGS.Update"}}</h2>
</header>
<section id="update-notifications">
<p>{{localize "SETUP.UpdateHint" }}</p>
{{#if coreUpdate}}
<p class="notification info">{{ coreUpdate }}</p>
{{/if}}
{{#unless canReachInternet}}
<p class="notification error">{{localize "SETUP.UpdateNoInternetError" }}</p>
{{/unless}}
{{#unless couldReachWebsite}}
<p class="notification error">{{localize "SETUP.UpdateWebsiteUnreachableError" }}</p>
{{/unless}}
{{#if slowResponse}}
<p class="notification warning">{{localize "SETUP.UpdateWebsiteSlowWarning" }}</p>
{{/if}}
</section>
<div class="form-group">
<label>{{ localize "SETUP.CurrentVersion" }}</label>
<div class="form-fields">
<input type="text" value="{{ release.display }} - Build {{release.build}}" disabled>
</div>
<p class="hint">{{ coreVersionHint }}</p>
</div>
<div class="form-group">
<label>{{ localize "SETUP.UpdateChannel" }}</label>
<div class="form-fields">
<select name="updateChannel">
{{selectOptions updateChannels selected=updateChannel localize=true}}
</select>
</div>
<p class="hint">{{localize "SETUP.UpdateChannelHint"}}</p>
</div>
<div id="update-channels">
{{#each updateChannelHints as |hint c| }}
<p class="notification channel-hint {{c}}">{{hint}}</p>
{{/each}}
</div>
<div class="form-group">
<label id="force-update" class="checkbox-label">{{ localize "SETUP.ForceUpdate" }}</label>
<div class="form-fields">
<input type="checkbox" name="forceUpdate">
</div>
<p class="hint">{{localize "SETUP.ForceUpdateHint"}}</p>
</div>
<div id="update-progress" class="progress-bar">
<div class="bar">
<span class="pct"></span>
</div>
</div>
<footer class="form-footer">
<button type="button" data-action="setup">
<i class="fa-solid fa-arrow-turn-down-left"></i>
{{localize "GAME.ReturnSetup"}}
</button>
<button id="update-core" class="bright" type="submit" value="updateCheck" {{#unless updateButtonEnabled}}disabled{{/unless}}>
<i class="fas fa-cloud-download-alt"></i>
<label>{{localize "SETUP.UpdateCheckFor"}}</label>
</button>
</footer>
</form>

View File

@@ -0,0 +1,38 @@
<div class="scrollable flexcol">
{{#each categories as |category packageType|}}
<section class="flexcol" data-package-type="{{packageType}}">
<h2 class="divider">{{localize category.label}}</h2>
{{#each category.packages as |package|}}
<div class="package flexcol" data-package-id="{{package.id}}" data-package-type="{{package.type}}">
<header class="flexrow">
{{#if package.name}}<h4 class="ellipsis">{{package.name}}</h4>{{/if}}
<span class="reference">{{package.id}}</span>
{{#if package.installed}}
<button type="button" class="icon fa-solid fa-arrow-turn-down-right" data-action="managePackage"
data-tooltip="SETUP.WarningsManage" aria-label="{{localize 'SETUP.WarningsManage'}}"></button>
{{else}}
<button type="button" class="icon fa-solid fa-trash" data-action="uninstallPackage"
data-tooltip="SETUP.Uninstall" aria-label="{{localize 'SETUP.Uninstall'}}"></button>
{{#if package.reinstallable}}
<button type="button" class="icon fa-solid fa-sync-alt" data-action="reinstallPackage"
data-tooltip="SETUP.Reinstall" aria-label="{{localize 'SETUP.Reinstall'}}"></button>
{{/if}}
{{/if}}
</header>
{{#if package.errors}}
<code class="errors">
{{~package.errors~}}
</code>
{{/if}}
{{#if package.warnings}}
<code class="warnings">
{{~package.warnings~}}
</code>
{{/if}}
</div>
{{/each}}
</section>
{{else}}
<p class="success">{{localize "SETUP.WarningsNone"}}</p>
{{/each}}
</div>

View File

@@ -0,0 +1,33 @@
<article class="scrollable">
{{{notes}}}
</article>
<footer class="sheet-footer">
{{#if requiresManualInstall}}
<p>{{{ localize "ERROR.UpdateRequiresManualInstall" version=version }}}</p>
<p>{{ localize "SETUP.UpdateNewGenerationHint" }}</p>
{{/if}}
<p>
{{{localize "SETUP.FullListOfReleaseNotes" url='<a href="https://foundryvtt.com/releases/" target="_blank">https://foundryvtt.com/releases/</a>'}}}
</p>
{{#if canCheckCompatibility}}
<p>{{ localize "SETUP.UpdatePreviewCompatibilityHint" version=version }}</p>
{{/if}}
<div class="flexrow buttons">
<button type="button" data-action="createSnapshot">
<i class="fas fa-camera-retro"></i>
<span>{{ localize "SETUP.BACKUPS.CreateSnapshot" }}</span>
</button>
{{#if canCheckCompatibility}}
<button type="button" data-action="checkCompatibility">
<i class="fas fa-code-branch"></i>
<span>{{ localize "SETUP.PreviewCompatibility" }}</span>
</button>
{{/if}}
{{#unless requiresManualInstall}}
<button type="button" class="bright" data-action="update">
<i class="fa fa-cloud-download-alt"></i>
<label>{{localize "SETUP.BeginDownload"}}</label>
</button>
{{/unless}}
</div>
</footer>

View File

@@ -0,0 +1,29 @@
<div class="updated-packages">
<div class="flexrow header">
<div class="package">{{ localize "SETUP.Package" }}</div>
<div class="action">{{ localize "Result" }}</div>
<div class="description">{{ localize "Description" }}</div>
</div>
{{#each changed}}
<div class="flexrow result">
<div class="package">
{{#if package.url}}
<a href="{{ package.url }}" target="_blank">{{ package.title }}</a>
{{else}}
{{ package.title }}
{{/if}}
</div>
<div class="action {{ actionClass }}"><i class="fas"></i> {{ action }}</div>
<div class="description">{{ description }}</div>
</div>
{{/each}}
{{#if incompatible}}
<hr>
<p>{{ localize "SETUP.PackageIncompatibleSystemsBulkPrompt" }}</p>
<ul>
{{#each incompatible}}
<li>{{{ this }}}</li>
{{/each}}
</ul>
{{/if}}
</div>

View File

@@ -0,0 +1,84 @@
<form class="standard-form" method="POST" autocomplete="off" enctype="multipart/form-data" novalidate>
<div class="form-group">
<label>{{ localize "WORLD.Title" }}</label>
<div class="form-fields">
<input type="text" name="title" value="{{world.title}}" placeholder="{{ localize "WORLD.Title" }}" required/>
</div>
</div>
{{#unless inWorld}}
<div class="form-group">
<label>{{ localize "WORLD.DataPath" }}</label>
<div class="form-fields">
<input type="text" name="path" value="Data/worlds/" disabled/>
<input type="text" name="id" value="{{world.id}}" placeholder="world-name" {{#if isCreate}}required{{else}}disabled{{/if}}/>
</div>
</div>
{{/unless}}
{{#unless inWorld}}
<div class="form-group">
<label>{{ localize "WORLD.GameSystem" }}</label>
<div class="form-fields">
<select name="system" {{#if isCreate}}required{{else}}disabled{{/if}}>
{{selectOptions systems selected=world.system blank="" valueAttr="id" labelAttr="title"}}
</select>
</div>
</div>
{{/unless}}
<div class="form-group banner-image">
<label>{{ localize "WORLD.BackgroundImage" }}</label>
<div class="form-fields">
<file-picker name="background" type="image" value="{{world.background}}"></file-picker>
</div>
</div>
<div class="form-group">
<label>{{ localize "WORLD.JoinTheme" }}</label>
<div class="form-fields">
<select name="joinTheme">
{{selectOptions themes selected=world.joinTheme localize=true}}
</select>
</div>
</div>
<div class="form-group">
<label>{{ localize "WORLD.NextSession" }}</label>
<div class="form-fields">
<input type="date" name="nextSession" value="{{ nextDate }}">
<input type="time" name="nextSession" value="{{ nextTime }}">
</div>
</div>
{{#if showEditFields}}
<div class="form-group">
<label>{{ localize "WORLD.ResetKeys" }}</label>
<div class="form-fields">
<input type="checkbox" name="resetKeys">
</div>
</div>
<div class="form-group">
<label data-tooltip="{{ localize 'WORLD.SafeModeHint' }}">
{{ localize "WORLD.LaunchSafeMode" }}
<a href="{{ worldKbUrl }}"><i class="fas fa-question-circle"></i></a>
</label>
<div class="form-fields">
<input type="checkbox" name="safeMode">
</div>
</div>
{{/if}}
<div class="form-group stacked">
<label class="world-desc">{{ localize "WORLD.Description" }}</label>
{{editor world.description target="description" button=false engine="prosemirror" collaborate=false}}
</div>
<footer class="form-footer">
<button type="submit" class="bright">
<i class="fas fa-globe"></i>
<span>{{submitText}}</span>
</button>
</footer>
</form>