Initial
This commit is contained in:
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>
|
||||
12
resources/app/templates/setup/parts/setup-featured.hbs
Normal file
12
resources/app/templates/setup/parts/setup-featured.hbs
Normal 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>
|
||||
9
resources/app/templates/setup/parts/setup-menu.hbs
Normal file
9
resources/app/templates/setup/parts/setup-menu.hbs
Normal 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>
|
||||
15
resources/app/templates/setup/parts/setup-news.hbs
Normal file
15
resources/app/templates/setup/parts/setup-news.hbs
Normal 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>
|
||||
39
resources/app/templates/setup/parts/user-management-form.hbs
Normal file
39
resources/app/templates/setup/parts/user-management-form.hbs
Normal 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>
|
||||
25
resources/app/templates/setup/parts/user-management-user.hbs
Normal file
25
resources/app/templates/setup/parts/user-management-user.hbs
Normal 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>
|
||||
19
resources/app/templates/setup/setup-authentication.hbs
Normal file
19
resources/app/templates/setup/setup-authentication.hbs
Normal 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>
|
||||
149
resources/app/templates/setup/setup-packages.hbs
Normal file
149
resources/app/templates/setup/setup-packages.hbs
Normal 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>
|
||||
70
resources/app/templates/setup/setup-update.hbs
Normal file
70
resources/app/templates/setup/setup-update.hbs
Normal 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>
|
||||
38
resources/app/templates/setup/setup-warnings.hbs
Normal file
38
resources/app/templates/setup/setup-warnings.hbs
Normal 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>
|
||||
33
resources/app/templates/setup/update-notes.hbs
Normal file
33
resources/app/templates/setup/update-notes.hbs
Normal 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>
|
||||
29
resources/app/templates/setup/updated-packages.html
Normal file
29
resources/app/templates/setup/updated-packages.html
Normal 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>
|
||||
84
resources/app/templates/setup/world-config.hbs
Normal file
84
resources/app/templates/setup/world-config.hbs
Normal 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>
|
||||
Reference in New Issue
Block a user