CI / build (push) Failing after 6m2s
Introduce a Node build system for minified CSS/JS with content hashes, add PWA support, i18n helpers, accessibility improvements, and more translatable strings. Move theme configuration from bookmarks to localStorage, add Playwright tests, and set up CI workflows.
217 lines
12 KiB
HTML
217 lines
12 KiB
HTML
<!DOCTYPE html>
|
|
<html{if="$language !== 'auto'"} lang="{$language}"{/if}>
|
|
<head>
|
|
{$pageName="configure"}
|
|
{include="includes"}
|
|
</head>
|
|
<body>
|
|
{include="page.header"}
|
|
<div class="container page-configure">
|
|
<div class="row">
|
|
<div class="col-md-8 col-md-offset-2">
|
|
<form method="POST" action="#" name="configform" id="configform">
|
|
<input type="hidden" name="token" value="{$token}"/>
|
|
|
|
<div class="card">
|
|
<div class="card-header">{'Configuration'|t}</div>
|
|
<div class="card-body">
|
|
<div class="form-group">
|
|
<label class="form-label" for="title">{'Shaarli title'|t}</label>
|
|
<input type="text" name="title" id="title" class="form-control" value="{$title}" />
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="form-label" for="titleLink">{'Home link'|t}</label>
|
|
<input type="text" name="titleLink" id="titleLink" class="form-control" value="{$titleLink}">
|
|
<div class="sublabel">{'Default value'|t}: {$base_path}/</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col-sm-6">
|
|
<div class="form-group">
|
|
<label class="form-label" for="theme">{'Theme'|t}</label>
|
|
<select name="theme" id="theme" class="form-control">
|
|
{loop="$theme_available"}
|
|
<option value="{$value}" {if="$value === $theme"}selected{/if}>
|
|
{$value|ucfirst}
|
|
</option>
|
|
{/loop}
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="col-sm-6">
|
|
<div class="form-group">
|
|
<label class="form-label" for="formatter">{'Description formatter'|t}</label>
|
|
<select name="formatter" id="formatter" class="form-control">
|
|
{loop="$formatter_available"}
|
|
<option value="{$value}" {if="$value === $formatter"}selected="selected"{/if}>
|
|
{$value|ucfirst}
|
|
</option>
|
|
{/loop}
|
|
</select>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="form-label" for="language">{'Language'|t}</label>
|
|
<select name="language" id="language" class="form-control">
|
|
{loop="$languages"}
|
|
<option value="{$key}" {if="$key === $language"}selected{/if}>
|
|
{$value|ucfirst}
|
|
</option>
|
|
{/loop}
|
|
</select>
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label class="form-label">{'Timezone'|t}</label>
|
|
<div class="row">
|
|
<div class="col-sm-6" id="timezone-continent">
|
|
<select name="continent" id="continent" class="form-control">
|
|
{loop="$continents"}
|
|
{if="$key !== 'selected'"}
|
|
<option value="{$value}" {if="$continents.selected === $value"}selected{/if}>
|
|
{$value}
|
|
</option>
|
|
{/if}
|
|
{/loop}
|
|
</select>
|
|
</div>
|
|
<div class="col-sm-6" id="timezone-city">
|
|
<select name="city" id="city" class="form-control">
|
|
{loop="$cities"}
|
|
{if="$key !== 'selected'"}
|
|
<option value="{$value.city}" {if="$cities.selected === $value.city"}selected{/if} data-continent="{$value.continent}">
|
|
{$value.city}
|
|
</option>
|
|
{/if}
|
|
{/loop}
|
|
</select>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="card">
|
|
<div class="card-header">{'Parameters'|t}</div>
|
|
<div class="card-body">
|
|
<!-- Session Protection -->
|
|
<div class="filter-toggle-row">
|
|
<div>
|
|
<div class="filter-toggle-label">{'Disable session cookie hijacking protection'|t}</div>
|
|
<div class="sublabel">{'Check this if you get disconnected or if your IP address changes often'|t}</div>
|
|
</div>
|
|
<label class="toggle-switch">
|
|
<input type="checkbox" name="disablesessionprotection" id="disablesessionprotection" {if="$session_protection_disabled"}checked{/if}/>
|
|
<span class="toggle-slider"></span>
|
|
</label>
|
|
</div>
|
|
|
|
<!-- Private Links -->
|
|
<div class="filter-toggle-row">
|
|
<div>
|
|
<div class="filter-toggle-label">{'Private links by default'|t}</div>
|
|
<div class="sublabel">{'All new links are private by default'|t}</div>
|
|
</div>
|
|
<label class="toggle-switch">
|
|
<input type="checkbox" name="privateLinkByDefault" id="privateLinkByDefault" {if="$private_links_default"}checked{/if}/>
|
|
<span class="toggle-slider"></span>
|
|
</label>
|
|
</div>
|
|
|
|
<!-- RSS Permalinks -->
|
|
<div class="filter-toggle-row">
|
|
<div>
|
|
<div class="filter-toggle-label">{'RSS direct links'|t}</div>
|
|
<div class="sublabel">{'Enabling it will show a permalink in the description.'|t}</div>
|
|
</div>
|
|
<label class="toggle-switch">
|
|
<input type="checkbox" name="enableRssPermalinks" id="enableRssPermalinks" {if="$enable_rss_permalinks"}checked{/if}/>
|
|
<span class="toggle-slider"></span>
|
|
</label>
|
|
</div>
|
|
|
|
<!-- Hide Public Links -->
|
|
<div class="filter-toggle-row">
|
|
<div>
|
|
<div class="filter-toggle-label">{'Hide public links'|t}</div>
|
|
<div class="sublabel">{'Do not show any links if the user is not logged in'|t}</div>
|
|
</div>
|
|
<label class="toggle-switch">
|
|
<input type="checkbox" name="hidePublicLinks" id="hidePublicLinks" {if="$hide_public_links"}checked{/if}/>
|
|
<span class="toggle-slider"></span>
|
|
</label>
|
|
</div>
|
|
|
|
<!-- Retrieve Description -->
|
|
<div class="filter-toggle-row">
|
|
<div>
|
|
<div class="filter-toggle-label">{'Automatically retrieve description'|t}</div>
|
|
<div class="sublabel">{'Shaarli will try to retrieve the description from meta HTML headers'|t}</div>
|
|
</div>
|
|
<label class="toggle-switch">
|
|
<input type="checkbox" name="retrieveDescription" id="retrieveDescription" {if="$retrieve_description"}checked{/if}/>
|
|
<span class="toggle-slider"></span>
|
|
</label>
|
|
</div>
|
|
|
|
<!-- Update Check -->
|
|
<div class="filter-toggle-row">
|
|
<div>
|
|
<div class="filter-toggle-label">{'Check updates'|t}</div>
|
|
<div class="sublabel">{'Notify me when a new release is ready'|t}</div>
|
|
</div>
|
|
<label class="toggle-switch">
|
|
<input type="checkbox" name="updateCheck" id="updateCheck" {if="$enable_update_check"}checked{/if}/>
|
|
<span class="toggle-slider"></span>
|
|
</label>
|
|
</div>
|
|
|
|
<!-- API -->
|
|
<div class="filter-toggle-row">
|
|
<div>
|
|
<div class="filter-toggle-label">{'Enable REST API'|t}</div>
|
|
<div class="sublabel">{'Allow third party software to use Shaarli'|t}</div>
|
|
</div>
|
|
<label class="toggle-switch">
|
|
<input type="checkbox" name="enableApi" id="enableApi" {if="$api_enabled"}checked{/if}/>
|
|
<span class="toggle-slider"></span>
|
|
</label>
|
|
</div>
|
|
|
|
<hr>
|
|
|
|
<div class="form-group">
|
|
<label class="form-label" for="apiSecret">{'API secret'|t}</label>
|
|
<input type="text" name="apiSecret" id="apiSecret" class="form-control" value="{$api_secret}" placeholder="Type a random string..." />
|
|
</div>
|
|
|
|
<hr>
|
|
|
|
<div class="form-group">
|
|
<label class="form-label" for="enableThumbnails">{'Enable thumbnails'|t}</label>
|
|
<select name="enableThumbnails" id="enableThumbnails" class="form-control">
|
|
<option value="all" {if="$thumbnails_mode=='all'"}selected{/if}>{'All'|t}</option>
|
|
<option value="common" {if="$thumbnails_mode=='common'"}selected{/if}>{'Only common media hosts'|t}</option>
|
|
<option value="none" {if="$thumbnails_mode=='none'"}selected{/if}>{'None'|t}</option>
|
|
</select>
|
|
<div class="sublabel">
|
|
{if="! $gd_enabled"}
|
|
{'You need to enable the extension <code>php-gd</code> to use thumbnails.'|t}
|
|
{elseif="$thumbnails_enabled"}
|
|
<a href="{$base_path}/admin/thumbnails">{'Synchronize thumbnails'|t}</a>
|
|
{/if}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="card-footer">
|
|
<button type="submit" name="Save" class="btn btn-primary">{'Save'|t}</button>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{include="page.footer"}
|
|
</body>
|
|
</html>
|