add(morgan)
This commit is contained in:
parent
007e27fc31
commit
ab61f3d4e9
16
morgan/404.html
Normal file
16
morgan/404.html
Normal file
@ -0,0 +1,16 @@
|
||||
<!DOCTYPE html>
|
||||
<html{if="$language !== 'auto'"} lang="{$language}"{/if}>
|
||||
<head>
|
||||
{include="includes"}
|
||||
</head>
|
||||
<body>
|
||||
<div id="pageheader">
|
||||
{include="page.header"}
|
||||
<div id="pageError" class="page-error-container center">
|
||||
<h2>{'Sorry, nothing to see here.'|t}</h2>
|
||||
<img src="{$asset_path}/img/sad_star.png#" alt="">
|
||||
<p>{$error_message}</p>
|
||||
</div>
|
||||
{include="page.footer"}
|
||||
</body>
|
||||
</html>
|
81
morgan/addlink.html
Normal file
81
morgan/addlink.html
Normal file
@ -0,0 +1,81 @@
|
||||
<!DOCTYPE html>
|
||||
<html{if="$language !== 'auto'"} lang="{$language}"{/if}>
|
||||
<head>
|
||||
{include="includes"}
|
||||
</head>
|
||||
<body>
|
||||
{include="page.header"}
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-1-3 pure-u-1-24"></div>
|
||||
<div id="addlink-form" class="page-form page-form-light pure-u-lg-1-3 pure-u-22-24">
|
||||
<h2 class="window-title">{"Shaare a new link"|t}</h2>
|
||||
<form method="GET" action="{$base_path}/admin/shaare" name="addform" class="addform">
|
||||
<div>
|
||||
<label for="shaare">{'URL or leave empty to post a note'|t}</label>
|
||||
<input type="text" name="post" id="shaare" class="autofocus">
|
||||
</div>
|
||||
<div>
|
||||
<input type="submit" value="{'Add link'|t}">
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="pure-g addlink-batch-show-more-block pure-u-0">
|
||||
<div class="pure-u-lg-1-3 pure-u-1-24"></div>
|
||||
<div class="pure-u-lg-1-3 pure-u-22-24 addlink-batch-show-more">
|
||||
<a href="#">{'BULK CREATION'|t} <i class="fa fa-plus-circle" aria-hidden="true"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="addlink-batch-form-block">
|
||||
{if="empty($async_metadata)"}
|
||||
<div class="pure-g pure-alert pure-alert-warning pure-alert-closable">
|
||||
<div class="pure-u-2-24"></div>
|
||||
<div class="pure-u-20-24">
|
||||
<p>
|
||||
{'Metadata asynchronous retrieval is disabled.'|t}
|
||||
{'We recommend that you enable the setting <em>general > enable_async_metadata</em> in your configuration file to use bulk link creation.'|t}
|
||||
</p>
|
||||
</div>
|
||||
<div class="pure-u-2-24">
|
||||
<i class="fa fa-times pure-alert-close"></i>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-1-3 pure-u-1-24"></div>
|
||||
<div id="batch-addlink-form" class="page-form page-form-light pure-u-lg-1-3 pure-u-22-24">
|
||||
<h2 class="window-title">{"Shaare multiple new links"|t}</h2>
|
||||
<form method="POST" action="{$base_path}/admin/shaare-batch" name="batch-addform" class="batch-addform">
|
||||
<div>
|
||||
<label for="urls">{'Add one URL per line to create multiple bookmarks.'|t}</label>
|
||||
<textarea name="urls" id="urls"></textarea>
|
||||
|
||||
<div>
|
||||
<label for="tags">{'Tags'|t}</label>
|
||||
</div>
|
||||
<div>
|
||||
<input type="text" name="tags" id="tags" class="lf_input"
|
||||
data-list="{loop="$tags"}{$key}, {/loop}" data-multiple data-autofirst autocomplete="off">
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<input type="hidden" name="private" value="0">
|
||||
<input type="checkbox" name="private" {if="$default_private_links"} checked="checked"{/if}>
|
||||
<label for="lf_private">{'Private'|t}</label>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<input type="hidden" name="token" value="{$token}">
|
||||
<input type="submit" value="{'Add links'|t}">
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{include="page.footer"}
|
||||
</body>
|
||||
</html>
|
28
morgan/changepassword.html
Normal file
28
morgan/changepassword.html
Normal file
@ -0,0 +1,28 @@
|
||||
<!DOCTYPE html>
|
||||
<html{if="$language !== 'auto'"} lang="{$language}"{/if}>
|
||||
<head>
|
||||
{include="includes"}
|
||||
</head>
|
||||
<body>
|
||||
{include="page.header"}
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-1-3 pure-u-1-24"></div>
|
||||
<div id="addlink-form" class="page-form page-form-light pure-u-lg-1-3 pure-u-22-24">
|
||||
<h2 class="window-title">{"Change password"|t}</h2>
|
||||
<form method="POST" action="{$base_path}/admin/password" name="changepasswordform" id="changepasswordform">
|
||||
<div>
|
||||
<input type="password" name="oldpassword" aria-label="{'Current password'|t}" placeholder="{'Current password'|t}" class="autofocus">
|
||||
</div>
|
||||
<div>
|
||||
<input type="password" name="setpassword" aria-label="{'New password'|t}" placeholder="{'New password'|t}">
|
||||
</div>
|
||||
<input type="hidden" name="token" value="{$token}">
|
||||
<div>
|
||||
<input type="submit" value="{'Change'|t}">
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{include="page.footer"}
|
||||
</body>
|
||||
</html>
|
64
morgan/changetag.html
Normal file
64
morgan/changetag.html
Normal file
@ -0,0 +1,64 @@
|
||||
<!DOCTYPE html>
|
||||
<html{if="$language !== 'auto'"} lang="{$language}"{/if}>
|
||||
<head>
|
||||
{include="includes"}
|
||||
</head>
|
||||
<body>
|
||||
{include="page.header"}
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-1-3 pure-u-1-24"></div>
|
||||
<div id="addlink-form" class="page-form page-form-light pure-u-lg-1-3 pure-u-22-24">
|
||||
<h2 class="window-title">{"Manage tags"|t}</h2>
|
||||
<form method="POST" action="{$base_path}/admin/tags" name="changetag" id="changetag">
|
||||
<div>
|
||||
<input type="text" name="fromtag" aria-label="{'Tag'|t}" placeholder="{'Tag'|t}" value="{$fromtag}"
|
||||
list="tagsList" autocomplete="off" class="awesomplete autofocus" data-minChars="1">
|
||||
<datalist id="tagsList">
|
||||
{loop="$tags"}<option>{$key}</option>{/loop}
|
||||
</datalist>
|
||||
</div>
|
||||
<div>
|
||||
<input type="text" name="totag" aria-label="{'New name'|t}" placeholder="{'New name'|t}"
|
||||
list="toTagsList" autocomplete="off" class="awesomplete" data-minChars="1">
|
||||
<datalist id="toTagsList">
|
||||
{loop="$tags"}<option>{$key}</option>{/loop}
|
||||
</datalist>
|
||||
</div>
|
||||
<div><i class="fa fa-info-circle" aria-hidden="true"></i> {'Case sensitive'|t}</div>
|
||||
<input type="hidden" name="token" value="{$token}">
|
||||
<div>
|
||||
<input type="submit" value="{'Rename tag'|t}" name="renametag">
|
||||
<input type="submit" value="{'Delete tag'|t}" name="deletetag"
|
||||
class="button button-red confirm-delete" data-type="tag">
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<p>{'You can also edit tags in the'|t} <a href="{$base_path}/tags/list?sort=usage">{'tag list'|t}</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-1-3 pure-u-1-24"></div>
|
||||
<div class="page-form page-form-light pure-u-lg-1-3 pure-u-22-24">
|
||||
<h2 class="window-title">{"Change tags separator"|t}</h2>
|
||||
<form method="POST" action="{$base_path}/admin/tags/change-separator" name="changeseparator" id="changeseparator">
|
||||
<p>
|
||||
{'Your current tag separator is'|t} <code>{$tags_separator}</code>{if="!empty($tags_separator_desc)"} ({$tags_separator_desc}){/if}.
|
||||
</p>
|
||||
<div>
|
||||
<input type="text" name="separator" placeholder="{'New separator'|t}"
|
||||
id="separator">
|
||||
</div>
|
||||
<input type="hidden" name="token" value="{$token}">
|
||||
<div>
|
||||
<input type="submit" value="{'Save'|t}" name="saveseparator">
|
||||
</div>
|
||||
<p>
|
||||
{'Note that hashtags won\'t fully work with a non-whitespace separator.'|t}
|
||||
</p>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{include="page.footer"}
|
||||
</body>
|
||||
</html>
|
325
morgan/configure.html
Normal file
325
morgan/configure.html
Normal file
@ -0,0 +1,325 @@
|
||||
<!DOCTYPE html>
|
||||
<html{if="$language !== 'auto'"} lang="{$language}"{/if}>
|
||||
<head>
|
||||
{include="includes"}
|
||||
</head>
|
||||
<body>
|
||||
{include="page.header"}
|
||||
|
||||
{$ratioLabel='5-12'}
|
||||
{$ratioLabelMobile='7-8'}
|
||||
{$ratioInput='7-12'}
|
||||
{$ratioInputMobile='1-8'}
|
||||
|
||||
<form method="POST" action="{$base_path}/admin/configure" name="configform" id="configform">
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-1-8 pure-u-1-24"></div>
|
||||
<div class="pure-u-lg-3-4 pure-u-22-24 page-form page-form-complete">
|
||||
<h2 class="window-title">{'Configure'|t}</h2>
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-{$ratioLabel} pure-u-1">
|
||||
<div class="form-label">
|
||||
<label for="title">
|
||||
<span class="label-name">Shaarli {'title'|t}</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-u-lg-7-12 pure-u-1">
|
||||
<div class="form-input">
|
||||
<input type="text" name="title" id="title" size="50" value="{$title}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-{$ratioLabel} pure-u-1">
|
||||
<div class="form-label">
|
||||
<label for="titleLink">
|
||||
<span class="label-name">{'Home link'|t}</span><br>
|
||||
<span class="label-desc">{'Default value'|t}: {$base_path}/</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-u-lg-{$ratioInput} pure-u-1">
|
||||
<div class="form-input">
|
||||
<input type="text" name="titleLink" id="titleLink" size="50" value="{$titleLink}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-{$ratioLabel} pure-u-1">
|
||||
<div class="form-label">
|
||||
<label for="titleLink">
|
||||
<span class="label-name">{'Themes'|t}</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-u-lg-{$ratioInput} pure-u-1">
|
||||
<div class="form-input">
|
||||
<select name="theme" id="theme" class="align">
|
||||
{loop="$theme_available"}
|
||||
<option value="{$value}"
|
||||
{if="$value===$theme"}
|
||||
selected="selected"
|
||||
{/if}
|
||||
>
|
||||
{$value|ucfirst}
|
||||
</option>
|
||||
{/loop}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-u-lg-{$ratioLabel} pure-u-1">
|
||||
<div class="form-label">
|
||||
<label for="formatter">
|
||||
<span class="label-name">{'Description formatter'|t}</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-u-lg-{$ratioInput} pure-u-1">
|
||||
<div class="form-input">
|
||||
<select name="formatter" id="formatter" class="align">
|
||||
{loop="$formatter_available"}
|
||||
<option value="{$value}"
|
||||
{if="$value===$formatter"}
|
||||
selected="selected"
|
||||
{/if}
|
||||
>
|
||||
{$value|ucfirst}
|
||||
</option>
|
||||
{/loop}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-{$ratioLabel} pure-u-1">
|
||||
<div class="form-label">
|
||||
<label for="language">
|
||||
<span class="label-name">{'Languages'|t}</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-u-lg-{$ratioInput} pure-u-1">
|
||||
<div class="form-input">
|
||||
<select name="language" id="language" class="align">
|
||||
{loop="$languages"}
|
||||
<option value="{$key}"
|
||||
{if="$key===$language"}
|
||||
selected="selected"
|
||||
{/if}
|
||||
>
|
||||
{$value}
|
||||
</option>
|
||||
{/loop}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-{$ratioLabel} pure-u-1 ">
|
||||
<div class="form-label">
|
||||
<label>
|
||||
<span class="label-name">{'Timezone'|t}</span><br>
|
||||
<span class="label-desc">{'Continent'|t} · {'City'|t}</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-u-lg-{$ratioInput} pure-u-1 ">
|
||||
<div class="form-input">
|
||||
<div class="timezone">
|
||||
<select id="continent" name="continent">
|
||||
{loop="$continents"}
|
||||
{if="$key !== 'selected'"}
|
||||
<option value="{$value}" {if="$continents.selected === $value"}selected{/if}>
|
||||
{$value}
|
||||
</option>
|
||||
{/if}
|
||||
{/loop}
|
||||
</select>
|
||||
<select id="city" name="city">
|
||||
{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 class="clear"></div>
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-{$ratioLabel} pure-u-{$ratioLabelMobile} ">
|
||||
<div class="form-label">
|
||||
<label for="disablesessionprotection">
|
||||
<span class="label-name">{'Disable session cookie hijacking protection'|t}</span><br>
|
||||
<span class="label-desc">
|
||||
{'Check this if you get disconnected or if your IP address changes often'|t}
|
||||
</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-u-lg-{$ratioInput} pure-u-{$ratioInputMobile} ">
|
||||
<div class="form-input">
|
||||
<input type="checkbox" name="disablesessionprotection" id="disablesessionprotection"
|
||||
{if="$session_protection_disabled"}checked{/if}>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-{$ratioLabel} pure-u-{$ratioLabelMobile} ">
|
||||
<div class="form-label">
|
||||
<label for="privateLinkByDefault">
|
||||
<span class="label-name">{'Private links by default'|t}</span><br>
|
||||
<span class="label-desc">{'All new links are private by default'|t}</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-u-lg-{$ratioInput} pure-u-{$ratioInputMobile} ">
|
||||
<div class="form-input">
|
||||
<input type="checkbox" name="privateLinkByDefault" id="privateLinkByDefault"
|
||||
{if="$private_links_default"}checked{/if}/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-{$ratioLabel} pure-u-{$ratioLabelMobile} ">
|
||||
<div class="form-label">
|
||||
<label for="enableRssPermalinks">
|
||||
<span class="label-name">{'RSS direct links'|t}</span><br>
|
||||
<span class="label-desc">{'Check this to use direct URL instead of permalink in feeds'|t}</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-u-lg-{$ratioInput} pure-u-{$ratioInputMobile} ">
|
||||
<div class="form-input">
|
||||
<input type="checkbox" name="enableRssPermalinks" id="enableRssPermalinks"
|
||||
{if="$enable_rss_permalinks"}checked{/if}/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-{$ratioLabel} pure-u-{$ratioLabelMobile}">
|
||||
<div class="form-label">
|
||||
<label for="hidePublicLinks">
|
||||
<span class="label-name">{'Hide public links'|t}</span><br>
|
||||
<span class="label-desc">{'Do not show any links if the user is not logged in'|t}</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-u-lg-{$ratioInput} pure-u-{$ratioInputMobile}">
|
||||
<div class="form-input">
|
||||
<input type="checkbox" name="hidePublicLinks" id="hidePublicLinks"
|
||||
{if="$hide_public_links"}checked{/if}/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-{$ratioLabel} pure-u-{$ratioLabelMobile}">
|
||||
<div class="form-label">
|
||||
<label for="updateCheck">
|
||||
<span class="label-name">{'Check for updates'|t}</span><br>
|
||||
<span class="label-desc">{'Notify me when a new release is ready'|t}</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-u-lg-{$ratioInput} pure-u-{$ratioInputMobile}">
|
||||
<div class="form-input">
|
||||
<input type="checkbox" name="updateCheck" id="updateCheck"
|
||||
{if="$enable_update_check"}checked{/if}/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-{$ratioLabel} pure-u-{$ratioLabelMobile}">
|
||||
<div class="form-label">
|
||||
<label for="retrieveDescription">
|
||||
<span class="label-name">{'Automatically retrieve description for new bookmarks'|t}</span><br>
|
||||
<span class="label-desc">{'Shaarli will try to retrieve the description from meta HTML headers'|t}</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-u-lg-{$ratioInput} pure-u-{$ratioInputMobile}">
|
||||
<div class="form-input">
|
||||
<input type="checkbox" name="retrieveDescription" id="retrieveDescription"
|
||||
{if="$retrieve_description"}checked{/if}/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-{$ratioLabel} pure-u-{$ratioLabelMobile}">
|
||||
<div class="form-label">
|
||||
<label for="enableApi">
|
||||
<span class="label-name">{'Enable REST API'|t}</span><br>
|
||||
<span class="label-desc">{'Allow third party software to use Shaarli such as mobile application'|t}</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-u-lg-{$ratioInput} pure-u-{$ratioInputMobile}">
|
||||
<div class="form-input">
|
||||
<input type="checkbox" name="enableApi" id="enableApi"
|
||||
{if="$api_enabled"}checked{/if}/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-{$ratioLabel} pure-u-1">
|
||||
<div class="form-label">
|
||||
<label for="apiSecret">
|
||||
<span class="label-name">{'REST API secret'|t}</span><br>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-u-lg-{$ratioLabel} pure-u-1">
|
||||
<div class="form-input">
|
||||
<input type="text" name="apiSecret" id="apiSecret" size="50" value="{$api_secret}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-{$ratioLabel} pure-u-{$ratioLabelMobile}">
|
||||
<div class="form-label">
|
||||
<label for="enableThumbnails">
|
||||
<span class="label-name">{'Enable thumbnails'|t}</span><br>
|
||||
<span class="label-desc">
|
||||
{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}
|
||||
</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-u-lg-{$ratioInput} pure-u-{$ratioInputMobile}">
|
||||
<div class="form-input">
|
||||
<select name="enableThumbnails" id="enableThumbnails" class="align">
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
<div class="center">
|
||||
<input type="submit" value="{'Save'|t}" name="save">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" name="token" value="{$token}">
|
||||
</form>
|
||||
|
||||
{include="page.footer"}
|
||||
</body>
|
||||
</html>
|
||||
|
1
morgan/css/markdown.min.css
vendored
Normal file
1
morgan/css/markdown.min.css
vendored
Normal file
@ -0,0 +1 @@
|
||||
.markdown p{margin:.75em 0}.markdown img{max-width:100%}.markdown h1,.markdown h2,.markdown h3,.markdown h4,.markdown h5,.markdown h6{font-weight:normal;font-style:normal;line-height:1em;margin:.75em 0}.markdown h4,.markdown h5,.markdown h6{font-weight:bold}.markdown h1{font-size:2.5em}.markdown h2{font-size:2em}.markdown h3{font-size:1.5em}.markdown h4{font-size:1.2em}.markdown h5{font-size:1em}.markdown h6{font-size:.9em}.markdown blockquote{color:#666;padding-left:3em;border-left:.5em #eee solid;margin:.75em 0}.markdown hr{display:block;height:2px;border:0;border-top:1px solid #aaa;border-bottom:1px solid #eee;margin:1em 0;padding:0}.markdown pre,.markdown code,.markdown kbd,.markdown samp{font-family:monospace,"courier new";font-size:.98em}.markdown pre{white-space:pre;white-space:pre-wrap;word-wrap:break-word}.markdown b,.markdown strong{font-weight:bold}.markdown dfn,.markdown em{font-style:italic}.markdown ins{background:#ff9;color:#000;text-decoration:none}.markdown mark{background:#ff0;color:#000;font-style:italic;font-weight:bold}.markdown sub,.markdown sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}.markdown sup{top:-0.5em}.markdown sub{bottom:-0.25em}.markdown ul,.markdown ol{margin:1em 0;padding:0 0 0 2em}.markdown li p:last-child{margin:0}.markdown dd{margin:0 0 0 2em}.markdown img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle}.markdown table{border-collapse:collapse;border-spacing:0}.markdown td{vertical-align:top}@media only screen and (min-width: 480px){.markdown{font-size:.9em}}@media only screen and (min-width: 768px){.markdown{font-size:1em}}#linklist .markdown li{padding:0;border:none;background:none}#linklist .markdown ul li{list-style:circle}#linklist .markdown ol li{list-style:decimal}.markdown table{padding:0}.markdown table tr{border-top:1px solid #ccc;background-color:#fff;margin:0;padding:0}.markdown table tr:nth-child(2n){background-color:#f8f8f8}.markdown table tr th{font-weight:bold;border:1px solid #ccc;text-align:left;margin:0;padding:6px 13px}.markdown table tr td{border:1px solid #ccc;text-align:left;margin:0;padding:6px 13px}.markdown table tr th :first-child,.markdown table tr td :first-child{margin-top:0}.markdown table tr th :last-child,table tr td :last-child{margin-bottom:0}.markdown pre{background-color:#eee;padding:4px 9px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;overflow:auto;box-shadow:0 -1px 0 #e5e5e5,0 0 1px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24)}.markdown pre code{color:#000;font-family:"Consolas","Monaco","Andale Mono",monospace;direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;line-height:1.7;font-size:11.5px;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}.markdown :not(pre) code{background-color:#eee;padding:1px 3px;border-radius:1px;box-shadow:0 -1px 0 #e5e5e5,0 0 1px rgba(0,0,0,.12),0 1px 1px rgba(0,0,0,.24)}#pageheader .md_help{color:#fff}#pageheader .md_help a{color:#d3d3d3;font-weight:bold;text-decoration:underline;background:none;box-shadow:none;padding:0;margin:0}#pageheader .md_help a:hover{color:#fff}
|
8125
morgan/css/shaarli.min.css
vendored
Normal file
8125
morgan/css/shaarli.min.css
vendored
Normal file
File diff suppressed because it is too large
Load Diff
132
morgan/daily.html
Normal file
132
morgan/daily.html
Normal file
@ -0,0 +1,132 @@
|
||||
<!DOCTYPE html>
|
||||
<html{if="$language !== 'auto'"} lang="{$language}"{/if}>
|
||||
<head>
|
||||
{include="includes"}
|
||||
</head>
|
||||
<body>
|
||||
{include="page.header"}
|
||||
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-1 pure-alert pure-alert-success tag-sort">
|
||||
<a href="{$base_path}/daily?day">{'Daily'|t}</a>
|
||||
<a href="{$base_path}/daily?week">{'Weekly'|t}</a>
|
||||
<a href="{$base_path}/daily?month">{'Monthly'|t}</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-1-6 pure-u-1-24"></div>
|
||||
<div class="pure-u-lg-2-3 pure-u-22-24 page-form page-visitor" id="daily">
|
||||
<h2 class="window-title">
|
||||
{$localizedType} Shaarli
|
||||
<a href="{$base_path}/daily-rss?{$type}"
|
||||
title="{function="t('1 RSS entry per :type', '', 1, 'shaarli', [':type' => t($type)])"}"
|
||||
>
|
||||
<i class="fa fa-rss"></i>
|
||||
</a>
|
||||
</h2>
|
||||
|
||||
<div id="plugin_zone_start_daily" class="plugin_zone">
|
||||
{loop="$plugin_start_zone"}
|
||||
{$value}
|
||||
{/loop}
|
||||
</div>
|
||||
|
||||
<div class="daily-about">
|
||||
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-1-3 pure-u-1 center">
|
||||
{if="$previousday"}
|
||||
<a href="{$base_path}/daily?{$type}={$previousday}">
|
||||
<i class="fa fa-arrow-left"></i>
|
||||
{function="t('Previous :type', '', 1, 'shaarli', [':type' => t($type)], true)"}
|
||||
</a>
|
||||
{/if}
|
||||
</div>
|
||||
<div class="daily-desc pure-u-lg-1-3 pure-u-1 center">
|
||||
{function="t('All links of one :type in a single page.', '', 1, 'shaarli', [':type' => t($type)])"}
|
||||
</div>
|
||||
<div class="pure-u-lg-1-3 pure-u-1 center">
|
||||
{if="$nextday"}
|
||||
<a href="{$base_path}/daily?{$type}={$nextday}">
|
||||
{function="t('Next :type', '', 1, 'shaarli', [':type' => t($type)], true)"}
|
||||
<i class="fa fa-arrow-right"></i>
|
||||
</a>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<h3 class="window-subtitle">
|
||||
{$dayDesc}
|
||||
</h3>
|
||||
|
||||
<div id="plugin_zone_about_daily" class="plugin_zone">
|
||||
{loop="$daily_about_plugin"}
|
||||
{$value}
|
||||
{/loop}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
{if="$linksToDisplay"}
|
||||
<div class="pure-g">
|
||||
{loop="$cols"}
|
||||
{if="isset($value[0])"}
|
||||
<div class="pure-u-lg-1-3 pure-u-1">
|
||||
{loop="value"}
|
||||
{$link=$value}
|
||||
<div class="daily-entry">
|
||||
<div class="daily-entry-title center">
|
||||
<a href="{$base_path}/shaare/{$link.shorturl}" title="{'Permalink'|t}">
|
||||
<i class="fa fa-link"></i>
|
||||
</a>
|
||||
<a href="{$link.real_url}">{$link.title}</a>
|
||||
</div>
|
||||
{if="$thumbnails_enabled && !empty($link.thumbnail)"}
|
||||
<div class="daily-entry-thumbnail">
|
||||
<img data-src="{$root_path}/{$link.thumbnail}#" class="b-lazy"
|
||||
src=""
|
||||
alt="thumbnail" width="{$thumbnails_width}" height="{$thumbnails_height}" />
|
||||
</div>
|
||||
{/if}
|
||||
<div class="daily-entry-description">{$link.formatedDescription}</div>
|
||||
{if="$link.tags"}
|
||||
<div class="daily-entry-tags center">
|
||||
{loop="link.taglist"}
|
||||
<span class="label label-tag">
|
||||
{$value}
|
||||
</span>
|
||||
{/loop}
|
||||
</div>
|
||||
{/if}
|
||||
<div class="dailyEntryFooter clear">
|
||||
{loop="$link.link_plugin"}
|
||||
{$value}
|
||||
{/loop}
|
||||
</div>
|
||||
</div>
|
||||
{/loop}
|
||||
</div>
|
||||
{/if}
|
||||
{/loop}
|
||||
</div>
|
||||
{else}
|
||||
<div class="dailyNoEntry">No articles on this day.</div>
|
||||
{/if}
|
||||
|
||||
<div class="clear"></div>
|
||||
|
||||
<div id="plugin_zone_end_picwall" class="plugin_zone">
|
||||
{loop="$plugin_end_zone"}
|
||||
{$value}
|
||||
{/loop}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{include="page.footer"}
|
||||
<script src="{$asset_path}/js/thumbnails.min.js?v={$version_hash}#"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
35
morgan/dailyrss.html
Normal file
35
morgan/dailyrss.html
Normal file
@ -0,0 +1,35 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rss version="2.0">
|
||||
<channel>
|
||||
<title>{$localizedType} - {$title}</title>
|
||||
<link>{$index_url}</link>
|
||||
<description>{function="t('All links of one :type in a single page.', '', 1, 'shaarli', [':type' => t($type)])"}</description>
|
||||
<language>{$language}</language>
|
||||
<copyright>{$index_url}</copyright>
|
||||
<generator>Shaarli</generator>
|
||||
|
||||
{loop="$days"}
|
||||
<item>
|
||||
<title>{$value.date_human} - {$title}</title>
|
||||
<guid>{$value.absolute_url}</guid>
|
||||
<link>{$value.absolute_url}</link>
|
||||
<pubDate>{$value.date_rss}</pubDate>
|
||||
<description><![CDATA[
|
||||
{loop="$value.links"}
|
||||
<h3><a href="{$value.url}">{$value.title}</a></h3>
|
||||
<small>
|
||||
{if="!$hide_timestamps"}{$value.created|format_date} — {/if}
|
||||
<a href="{$index_url}shaare/{$value.shorturl}">{'Permalink'|t}</a>
|
||||
{if="$value.tags"} — {$value.tags}{/if}
|
||||
<br>
|
||||
{$value.url}
|
||||
</small><br>
|
||||
{if="$value.thumbnail"}<img src="{$index_url}{$value.thumbnail}#" alt="thumbnail" />{/if}<br>
|
||||
{if="$value.description"}{$value.description}{/if}
|
||||
<br><hr>
|
||||
{/loop}
|
||||
]]></description>
|
||||
</item>
|
||||
{/loop}
|
||||
</channel>
|
||||
</rss><!-- Cached version of {$page_url} -->
|
33
morgan/editlink.batch.html
Normal file
33
morgan/editlink.batch.html
Normal file
@ -0,0 +1,33 @@
|
||||
<!DOCTYPE html>
|
||||
<html{if="$language !== 'auto'"} lang="{$language}"{/if}>
|
||||
<head>
|
||||
{include="includes"}
|
||||
</head>
|
||||
<body>
|
||||
<div class="dark-layer">
|
||||
<div class="screen-center">
|
||||
<div><span class="progressbar-current"></span> / <span class="progressbar-max"></span></div>
|
||||
<div class="progressbar">
|
||||
<div></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{include="page.header"}
|
||||
|
||||
<div class="center">
|
||||
<input type="submit" name="save_edit_batch" class="pure-button-shaarli" value="{'Save all'|t}">
|
||||
</div>
|
||||
|
||||
{loop="$links"}
|
||||
{$batchId=$key}
|
||||
{include="editlink"}
|
||||
{/loop}
|
||||
|
||||
<div class="center">
|
||||
<input type="submit" name="save_edit_batch" class="pure-button-shaarli" value="{'Save all'|t}">
|
||||
</div>
|
||||
|
||||
{include="page.footer"}
|
||||
{if="$async_metadata"}<script src="{$asset_path}/js/metadata.min.js?v={$version_hash}#"></script>{/if}
|
||||
<script src="{$asset_path}/js/shaare_batch.min.js?v={$version_hash}#"></script>
|
122
morgan/editlink.html
Normal file
122
morgan/editlink.html
Normal file
@ -0,0 +1,122 @@
|
||||
{$batchId=isset($batchId) ? $batchId : ''}
|
||||
{if="empty($batch_mode)"}
|
||||
<!DOCTYPE html>
|
||||
<html{if="$language !== 'auto'"} lang="{$language}"{/if}>
|
||||
<head>
|
||||
{include="includes"}
|
||||
</head>
|
||||
<body>
|
||||
{include="page.header"}
|
||||
{else}
|
||||
{ignore}Lil hack: when included in a loop in batch mode, `$value` is assigned by RainTPL with template vars.{/ignore}
|
||||
{function="extract($value) ? '' : ''"}
|
||||
{/if}
|
||||
<div id="editlinkform{$batchId}" class="edit-link-container" class="pure-g">
|
||||
<div class="pure-u-lg-1-5 pure-u-1-24"></div>
|
||||
<form method="post"
|
||||
name="linkform"
|
||||
action="{$base_path}/admin/shaare"
|
||||
class="page-form pure-u-lg-3-5 pure-u-22-24 page-form page-form-light"
|
||||
>
|
||||
{$asyncLoadClass=$link_is_new && $async_metadata && empty($link.title) ? 'loading-input' : ''}
|
||||
|
||||
<h2 class="window-title">
|
||||
{if="!$link_is_new"}{'Edit Shaare'|t}{else}{'New Shaare'|t}{/if}
|
||||
</h2>
|
||||
{if="isset($link.id)"}
|
||||
<input type="hidden" name="lf_id" value="{$link.id}">
|
||||
{/if}
|
||||
{if="!$link_is_new"}<div class="created-date">{'Created:'|t} {$link.created|format_date}</div>{/if}
|
||||
<div>
|
||||
<label for="lf_url{$batchId}">{'URL'|t}</label>
|
||||
</div>
|
||||
<div>
|
||||
<input type="text" name="lf_url" id="lf_url{$batchId}" value="{$link.url}" class="lf_input">
|
||||
</div>
|
||||
<div>
|
||||
<label for="lf_title{$batchId}">{'Title'|t}</label>
|
||||
</div>
|
||||
<div class="{$asyncLoadClass}">
|
||||
<input type="text" name="lf_title" id="lf_title{$batchId}" value="{$link.title}"
|
||||
class="lf_input {if="!$async_metadata"}autofocus{/if}"
|
||||
>
|
||||
<div class="icon-container">
|
||||
<i class="loader"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<label for="lf_description{$batchId}">{'Description'|t}</label>
|
||||
</div>
|
||||
<div class="{if="$retrieve_description"}{$asyncLoadClass}{/if}">
|
||||
<textarea name="lf_description" id="lf_description{$batchId}" class="autofocus">{$link.description}</textarea>
|
||||
<div class="icon-container">
|
||||
<i class="loader"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<label for="lf_tags{$batchId}">{'Tags'|t}</label>
|
||||
</div>
|
||||
<div class="{if="$retrieve_description"}{$asyncLoadClass}{/if}">
|
||||
<input type="text" name="lf_tags" id="lf_tags{$batchId}" value="{$link.tags}" class="lf_input autofocus"
|
||||
data-list="{loop="$tags"}{$key}, {/loop}" data-multiple data-autofirst autocomplete="off" >
|
||||
<div class="icon-container">
|
||||
<i class="loader"></i>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<input type="checkbox" name="lf_private" id="lf_private{$batchId}"
|
||||
{if="$link.private === true"}
|
||||
checked="checked"
|
||||
{/if}>
|
||||
<label for="lf_private{$batchId}">{'Private'|t}</label>
|
||||
</div>
|
||||
|
||||
{if="$formatter==='markdown'"}
|
||||
<div class="md_help">
|
||||
{'Description will be rendered with'|t}
|
||||
<a href="http://daringfireball.net/projects/markdown/syntax" title="{'Markdown syntax documentation'|t}">
|
||||
{'Markdown syntax'|t}
|
||||
</a>.
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div id="editlink-plugins">
|
||||
{loop="$edit_link_plugin"}
|
||||
{$value}
|
||||
{/loop}
|
||||
</div>
|
||||
|
||||
|
||||
<div class="submit-buttons center">
|
||||
{if="!empty($batch_mode)"}
|
||||
<a href="#" class="button button-grey" name="cancel-batch-link"
|
||||
title="{'Remove this bookmark from batch creation/modification.'}"
|
||||
>
|
||||
{'Cancel'|t}
|
||||
</a>
|
||||
{/if}
|
||||
<input type="submit" name="save_edit" class="" id="button-save-edit"
|
||||
value="{if="$link_is_new"}{'Save'|t}{else}{'Apply Changes'|t}{/if}">
|
||||
{if="!$link_is_new"}
|
||||
<a href="{$base_path}/admin/shaare/delete?id={$link.id}&token={$token}"
|
||||
title="" name="delete_link" class="button button-red confirm-delete">
|
||||
{'Delete'|t}
|
||||
</a>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<input type="hidden" name="token" value="{$token}">
|
||||
<input type="hidden" name="source" value="{$source}">
|
||||
{if="$http_referer"}
|
||||
<input type="hidden" name="returnurl" value="{$http_referer}">
|
||||
{/if}
|
||||
</form>
|
||||
</div>
|
||||
|
||||
{if="empty($batch_mode)"}
|
||||
{include="page.footer"}
|
||||
{if="$link_is_new && $async_metadata"}<script src="{$asset_path}/js/metadata.min.js?v={$version_hash}#"></script>{/if}
|
||||
</body>
|
||||
</html>
|
||||
{/if}
|
26
morgan/error.html
Normal file
26
morgan/error.html
Normal file
@ -0,0 +1,26 @@
|
||||
<!DOCTYPE html>
|
||||
<html{if="$language !== 'auto'"} lang="{$language}"{/if}>
|
||||
<head>
|
||||
{include="includes"}
|
||||
</head>
|
||||
<body>
|
||||
<div id="pageheader">
|
||||
{include="page.header"}
|
||||
<div id="pageError" class="page-error-container center">
|
||||
<h2>{$message}</h2>
|
||||
|
||||
<img src="{$asset_path}/img/sad_star.png#" alt="">
|
||||
|
||||
{if="!empty($text)"}
|
||||
<p>{$text}</p>
|
||||
{/if}
|
||||
|
||||
{if="!empty($stacktrace)"}
|
||||
<pre>
|
||||
{$stacktrace}
|
||||
</pre>
|
||||
{/if}
|
||||
</div>
|
||||
{include="page.footer"}
|
||||
</body>
|
||||
</html>
|
10
morgan/export.bookmarks.html
Normal file
10
morgan/export.bookmarks.html
Normal file
@ -0,0 +1,10 @@
|
||||
<!DOCTYPE NETSCAPE-Bookmark-file-1>
|
||||
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
|
||||
<!-- This is an automatically generated file.
|
||||
It will be read and overwritten.
|
||||
Do Not Edit! -->{ignore}The RainTPL loop is formatted to avoid generating extra newlines{/ignore}
|
||||
<TITLE>{$pagetitle}</TITLE>
|
||||
<H1>Shaarli export of {$selection} bookmarks on {$date}</H1>
|
||||
<DL><p>{loop="links"}{$private=intval($value.private)}
|
||||
<DT><A HREF="{$value.url}" ADD_DATE="{$value.timestamp}" {if="$value.updated_timestamp"}LAST_MODIFIED="{$value.updated_timestamp}" {/if}PRIVATE="{$private}" TAGS="{$value.taglist}">{$value.title}</A>{if="$value.description"}{$eol}<DD>{$value.description}{/if}{/loop}
|
||||
</DL><p>
|
67
morgan/export.html
Normal file
67
morgan/export.html
Normal file
@ -0,0 +1,67 @@
|
||||
<!DOCTYPE html>
|
||||
<html{if="$language !== 'auto'"} lang="{$language}"{/if}>
|
||||
<head>
|
||||
{include="includes"}
|
||||
</head>
|
||||
<body>
|
||||
{include="page.header"}
|
||||
|
||||
<form method="POST" action="{$base_path}/admin/export" name="exportform" id="exportform">
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-1-4 pure-u-1-24"></div>
|
||||
<div class="pure-u-lg-1-2 pure-u-22-24 page-form page-form-complete">
|
||||
<div>
|
||||
<h2 class="window-title">{"Export Database"|t}</h2>
|
||||
</div>
|
||||
<input type="hidden" name="token" value="{$token}">
|
||||
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-1-2 pure-u-1">
|
||||
<div class="form-label">
|
||||
<label><span class="label-name">{'Selection'|t}</span></label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-u-lg-1-2 pure-u-1">
|
||||
<div class="radio-buttons">
|
||||
<div>
|
||||
<input type="radio" name="selection" value="all" checked="checked">
|
||||
{'All'|t}
|
||||
</div>
|
||||
<div>
|
||||
<input type="radio" name="selection" value="private">
|
||||
{'Private'|t}
|
||||
</div>
|
||||
<div>
|
||||
<input type="radio" name="selection" value="public">
|
||||
{'Public'|t}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-1-2 pure-u-7-8">
|
||||
<div class="form-label">
|
||||
<label for="prepend_note_url">
|
||||
<span class="label-name">{'Prepend note permalinks with this Shaarli instance\'s URL'|t}</span><br>
|
||||
<span class="label-desc">{'Useful to import bookmarks in a web browser'|t}</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-u-lg-1-2 pure-u-1-8">
|
||||
<div class="form-input">
|
||||
<input type="checkbox" name="prepend_note_url" id="prepend_note_url">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="center">
|
||||
<input type="submit" value="{'Export'|t}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
{include="page.footer"}
|
||||
</body>
|
||||
</html>
|
42
morgan/feed.atom.html
Normal file
42
morgan/feed.atom.html
Normal file
@ -0,0 +1,42 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<feed xmlns="http://www.w3.org/2005/Atom">
|
||||
<title>{$pagetitle}</title>
|
||||
<subtitle>Shaared links</subtitle>
|
||||
{if="$show_dates"}
|
||||
<updated>{$last_update}</updated>
|
||||
{/if}
|
||||
<link rel="self" href="{$self_link}#" />
|
||||
<link rel="search" type="application/opensearchdescription+xml" href="{$index_url}open-search#"
|
||||
title="Shaarli search - {$shaarlititle}" />
|
||||
{loop="$feed_plugins_header"}
|
||||
{$value}
|
||||
{/loop}
|
||||
<author>
|
||||
<name>{$pagetitle}</name>
|
||||
<uri>{$index_url}</uri>
|
||||
</author>
|
||||
<id>{$index_url}</id>
|
||||
<generator>Shaarli</generator>
|
||||
{loop="$links"}
|
||||
<entry>
|
||||
<title>{$value.title}</title>
|
||||
{if="$usepermalinks"}
|
||||
<link href="{$value.guid}#" />
|
||||
{else}
|
||||
<link href="{$value.url}#" />
|
||||
{/if}
|
||||
<id>{$value.guid}</id>
|
||||
{if="$show_dates"}
|
||||
<published>{$value.pub_iso_date}</published>
|
||||
<updated>{$value.up_iso_date}</updated>
|
||||
{/if}
|
||||
<content type="html" xml:lang="{$language}"><![CDATA[{$value.description}]]></content>
|
||||
{loop="$value.taglist"}
|
||||
<category scheme="{$index_url}?searchtags=" term="{$value|strtolower}" label="{$value}" />
|
||||
{/loop}
|
||||
{loop="$value.feed_plugins"}
|
||||
{$value}
|
||||
{/loop}
|
||||
</entry>
|
||||
{/loop}
|
||||
</feed>
|
39
morgan/feed.rss.html
Normal file
39
morgan/feed.rss.html
Normal file
@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<channel>
|
||||
<title>{$pagetitle}</title>
|
||||
<link>{$index_url}</link>
|
||||
<description>Shaared links</description>
|
||||
<language>{$language}</language>
|
||||
<copyright>{$index_url}</copyright>
|
||||
<generator>Shaarli</generator>
|
||||
<atom:link rel="self" href="{$self_link}" />
|
||||
<atom:link rel="search" type="application/opensearchdescription+xml" href="{$index_url}open-search#"
|
||||
title="Shaarli search - {$shaarlititle}" />
|
||||
{loop="$feed_plugins_header"}
|
||||
{$value}
|
||||
{/loop}
|
||||
{loop="$links"}
|
||||
<item>
|
||||
<title>{$value.title}</title>
|
||||
<guid isPermaLink="{if="$usepermalinks"}true{else}false{/if}">{$value.guid}</guid>
|
||||
{if="$usepermalinks"}
|
||||
<link>{$value.guid}</link>
|
||||
{else}
|
||||
<link>{$value.url}</link>
|
||||
{/if}
|
||||
{if="$show_dates"}
|
||||
<pubDate>{$value.pub_iso_date}</pubDate>
|
||||
<atom:modified>{$value.up_iso_date}</atom:modified>
|
||||
{/if}
|
||||
<description><![CDATA[{$value.description}]]></description>
|
||||
{loop="$value.taglist"}
|
||||
<category domain="{$index_url}?searchtags=">{$value}</category>
|
||||
{/loop}
|
||||
{loop="$value.feed_plugins"}
|
||||
{$value}
|
||||
{/loop}
|
||||
</item>
|
||||
{/loop}
|
||||
</channel>
|
||||
</rss>
|
BIN
morgan/fonts/GeistMono-Bold.ttf
Normal file
BIN
morgan/fonts/GeistMono-Bold.ttf
Normal file
Binary file not shown.
BIN
morgan/fonts/GeistMono-Regular.ttf
Normal file
BIN
morgan/fonts/GeistMono-Regular.ttf
Normal file
Binary file not shown.
BIN
morgan/fonts/GeistMono-VariableFont_wght.ttf
Normal file
BIN
morgan/fonts/GeistMono-VariableFont_wght.ttf
Normal file
Binary file not shown.
BIN
morgan/fonts/Roboto-Bold.woff
Normal file
BIN
morgan/fonts/Roboto-Bold.woff
Normal file
Binary file not shown.
BIN
morgan/fonts/Roboto-Bold.woff2
Normal file
BIN
morgan/fonts/Roboto-Bold.woff2
Normal file
Binary file not shown.
BIN
morgan/fonts/Roboto-Regular.woff
Normal file
BIN
morgan/fonts/Roboto-Regular.woff
Normal file
Binary file not shown.
BIN
morgan/fonts/Roboto-Regular.woff2
Normal file
BIN
morgan/fonts/Roboto-Regular.woff2
Normal file
Binary file not shown.
BIN
morgan/fonts/forkawesome-webfont.eot
Normal file
BIN
morgan/fonts/forkawesome-webfont.eot
Normal file
Binary file not shown.
3232
morgan/fonts/forkawesome-webfont.svg
Normal file
3232
morgan/fonts/forkawesome-webfont.svg
Normal file
File diff suppressed because it is too large
Load Diff
After Width: | Height: | Size: 547 KiB |
BIN
morgan/fonts/forkawesome-webfont.ttf
Normal file
BIN
morgan/fonts/forkawesome-webfont.ttf
Normal file
Binary file not shown.
BIN
morgan/fonts/forkawesome-webfont.woff
Normal file
BIN
morgan/fonts/forkawesome-webfont.woff
Normal file
Binary file not shown.
BIN
morgan/fonts/forkawesome-webfont.woff2
Normal file
BIN
morgan/fonts/forkawesome-webfont.woff2
Normal file
Binary file not shown.
BIN
morgan/img/apple-touch-icon.png
Normal file
BIN
morgan/img/apple-touch-icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 18 KiB |
BIN
morgan/img/favicon.png
Normal file
BIN
morgan/img/favicon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 41 KiB |
BIN
morgan/img/sad_star.png
Normal file
BIN
morgan/img/sad_star.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.9 KiB |
86
morgan/import.html
Normal file
86
morgan/import.html
Normal file
@ -0,0 +1,86 @@
|
||||
<!DOCTYPE html>
|
||||
<html{if="$language !== 'auto'"} lang="{$language}"{/if}>
|
||||
<head>
|
||||
{include="includes"}
|
||||
</head>
|
||||
<body>
|
||||
{include="page.header"}
|
||||
|
||||
<form method="POST" action="{$base_path}/admin/import" enctype="multipart/form-data" name="uploadform" id="uploadform">
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-1-4 pure-u-1-24"></div>
|
||||
<div class="pure-u-lg-1-2 pure-u-22-24 page-form page-form-complete">
|
||||
<div>
|
||||
<h2 class="window-title">{"Import Database"|t}</h2>
|
||||
</div>
|
||||
|
||||
<input type="hidden" name="token" value="{$token}">
|
||||
<div class="center import-field-container" id="import-field">
|
||||
<input type="hidden" name="MAX_FILE_SIZE" value="{$maxfilesize}">
|
||||
<input type="file" name="filetoupload">
|
||||
<p><br>{'Maximum size allowed:'|t} <strong>{$maxfilesizeHuman}</strong></p>
|
||||
</div>
|
||||
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-1-3 pure-u-1">
|
||||
<div class="form-label">
|
||||
<label><span class="label-name">{'Visibility'|t}</span></label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-u-lg-2-3 pure-u-1">
|
||||
<div class="radio-buttons">
|
||||
<div>
|
||||
<input type="radio" name="privacy" value="default" checked="checked">
|
||||
{'Use values from the imported file, default to public'|t}
|
||||
</div>
|
||||
<div>
|
||||
<input type="radio" name="privacy" value="private">
|
||||
{'Import all bookmarks as private'|t}
|
||||
</div>
|
||||
<div>
|
||||
<input type="radio" name="privacy" value="public">
|
||||
{'Import all bookmarks as public'|t}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-1-3 pure-u-7-8">
|
||||
<div class="form-label">
|
||||
<label for="overwrite">
|
||||
<span class="label-name">{'Overwrite existing bookmarks'|t}</span><br>
|
||||
<span class="label-desc">{'Duplicates based on URL'|t}</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-u-lg-2-3 pure-u-1-8">
|
||||
<div class="form-input">
|
||||
<input type="checkbox" name="overwrite" id="overwrite">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-1-3 pure-u-1">
|
||||
<div class="form-label">
|
||||
<label for="default_tags"><span class="label-name">{'Add default tags'|t}</span></label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-u-lg-2-3 pure-u-1">
|
||||
<div class="form-input">
|
||||
<input type="text" name="default_tags" id="default_tags" aria-label="{'Tag'|t}" placeholder="{'Tag'|t}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="center">
|
||||
<input type="submit" name="import_file" value="{'Import'|t}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
{include="page.footer"}
|
||||
</body>
|
||||
</html>
|
41
morgan/includes.html
Normal file
41
morgan/includes.html
Normal file
@ -0,0 +1,41 @@
|
||||
<title>{$pagetitle}</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="format-detection" content="telephone=no" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="referrer" content="same-origin">
|
||||
<link rel="alternate" type="application/atom+xml" href="{$feedurl}feed/atom?{$searchcrits}#" title="ATOM Feed" />
|
||||
<link rel="alternate" type="application/rss+xml" href="{$feedurl}feed/rss?{$searchcrits}#" title="RSS Feed" />
|
||||
<link href="{$asset_path}/img/favicon.png#" rel="shortcut icon" type="image/png" />
|
||||
<link href="{$asset_path}/img/apple-touch-icon.png#" rel="apple-touch-icon" sizes="180x180" />
|
||||
<link type="text/css" rel="stylesheet" href="{$asset_path}/css/shaarli.min.css?v={$version_hash}#" />
|
||||
{if="strpos($formatter, 'markdown') !== false"}
|
||||
<link type="text/css" rel="stylesheet" href="{$asset_path}/css/markdown.min.css?v={$version_hash}#" />
|
||||
{/if}
|
||||
{loop="$plugins_includes.css_files"}
|
||||
<link type="text/css" rel="stylesheet" href="{$root_path}/{$value}?v={$version_hash}#"/>
|
||||
{/loop}
|
||||
{if="is_file('data/user.css')"}
|
||||
<link type="text/css" rel="stylesheet" href="{$root_path}/data/user.css#" />
|
||||
{/if}
|
||||
<link rel="search" type="application/opensearchdescription+xml" href="{$base_path}/open-search#"
|
||||
title="Shaarli search - {$shaarlititle}" />
|
||||
{if="$template === 'linklist' && ! empty($links) && count($links) === 1"}
|
||||
{$link=reset($links)}
|
||||
<meta property="og:title" content="{$link.title}" />
|
||||
<meta property="og:type" content="article" />
|
||||
<meta property="og:url" content="{$index_url}shaare/{$link.shorturl}" />
|
||||
{$ogDescription=isset($link.description_src) ? $link.description_src : $link.description}
|
||||
<meta property="og:description" content="{function="substr(strip_tags($ogDescription), 0, 300)"}" />
|
||||
{if="!empty($link.thumbnail)"}
|
||||
<meta property="og:image" content="{$index_url}{$link.thumbnail}" />
|
||||
{/if}
|
||||
{if="!$hide_timestamps || $is_logged_in"}
|
||||
<meta property="article:published_time" content="{$link.created->format(DateTime::ATOM)}" />
|
||||
{if="!empty($link.updated)"}
|
||||
<meta property="article:modified_time" content="{$link.updated->format(DateTime::ATOM)}" />
|
||||
{/if}
|
||||
{/if}
|
||||
{loop="link.taglist"}
|
||||
<meta property="article:tag" content="{$value}" />
|
||||
{/loop}
|
||||
{/if}
|
178
morgan/install.html
Normal file
178
morgan/install.html
Normal file
@ -0,0 +1,178 @@
|
||||
<!DOCTYPE html>
|
||||
<html{if="$language !== 'auto'"} lang="{$language}"{/if}>
|
||||
<head>
|
||||
{include="includes"}
|
||||
</head>
|
||||
<body>
|
||||
|
||||
{$ratioLabel='1-4'}
|
||||
{$ratioInput='3-4'}
|
||||
{$ratioLabelMobile='7-8'}
|
||||
{$ratioInputMobile='1-8'}
|
||||
|
||||
<form method="POST" action="{$base_path}/install" name="installform" id="installform">
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-1-6 pure-u-1-24"></div>
|
||||
<div class="pure-u-lg-2-3 pure-u-22-24 page-form page-form-complete">
|
||||
<h2 class="window-title">{'Install Shaarli'|t}</h2>
|
||||
|
||||
<div class="center">
|
||||
<p>{'It looks like it\'s the first time you run Shaarli. Please configure it.'|t}</p>
|
||||
</div>
|
||||
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-{$ratioLabel} pure-u-1">
|
||||
<div class="form-label">
|
||||
<label for="username">
|
||||
<span class="label-name">{'Username'|t}</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-u-lg-{$ratioInput} pure-u-1">
|
||||
<div class="form-input">
|
||||
<input type="text" name="setlogin" id="username" autocapitalize="off">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-{$ratioLabel} pure-u-1">
|
||||
<div class="form-label">
|
||||
<label for="password">
|
||||
<span class="label-name">{'Password'|t}</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-u-lg-{$ratioInput} pure-u-1">
|
||||
<div class="form-input">
|
||||
<input type="password" name="setpassword" id="password">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-{$ratioLabel} pure-u-1">
|
||||
<div class="form-label">
|
||||
<label for="title">
|
||||
<span class="label-name">{'Shaarli title'|t}</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-u-lg-{$ratioInput} pure-u-1">
|
||||
<div class="form-input">
|
||||
<input type="text" name="title" id="title" placeholder="{'My links'|t}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-{$ratioLabel} pure-u-1">
|
||||
<div class="form-label">
|
||||
<label for="language">
|
||||
<span class="label-name">{'Languages'|t}</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-u-lg-{$ratioInput} pure-u-1">
|
||||
<div class="form-input">
|
||||
<select name="language" id="language" class="align">
|
||||
{loop="$languages"}
|
||||
<option value="{$key}">
|
||||
{$value}
|
||||
</option>
|
||||
{/loop}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-{$ratioLabel} pure-u-1">
|
||||
<div class="form-label">
|
||||
<label>
|
||||
<span class="label-name">{'Timezone'|t}</span><br>
|
||||
<span class="label-desc">{'Continent'|t} · {'City'|t}</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-u-lg-{$ratioInput} pure-u-1">
|
||||
<div class="form-input">
|
||||
<div class="timezone">
|
||||
<select id="continent" name="continent">
|
||||
{loop="$continents"}
|
||||
{if="$key !== 'selected'"}
|
||||
<option value="{$value}" {if="$continents.selected === $value"}selected{/if}>
|
||||
{$value}
|
||||
</option>
|
||||
{/if}
|
||||
{/loop}
|
||||
</select>
|
||||
<select id="city" name="city">
|
||||
{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 class="pure-g">
|
||||
<div class="pure-u-lg-{$ratioLabel} pure-u-7-8">
|
||||
<div class="form-label">
|
||||
<label for="update">
|
||||
<span class="label-name">{'Check for updates'|t}</span><br>
|
||||
<span class="label-desc">
|
||||
{'Notify me when a new release is ready'|t}
|
||||
</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-u-lg-{$ratioInput} pure-u-1-8">
|
||||
<div class="form-input">
|
||||
<input type="checkbox" name="updateCheck" id="update" checked="checked">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-{$ratioLabel} pure-u-{$ratioLabelMobile}">
|
||||
<div class="form-label">
|
||||
<label for="enableApi">
|
||||
<span class="label-name">{'Enable REST API'|t}</span><br>
|
||||
<span class="label-desc">{'Allow third party software to use Shaarli such as mobile application'|t}</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-u-lg-{$ratioInput} pure-u-{$ratioInputMobile}">
|
||||
<div class="form-input">
|
||||
<input type="checkbox" name="enableApi" id="enableApi" checked />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="center">
|
||||
<input type="submit" value="{'Install'|t}" name="Save">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-1-6 pure-u-1-24"></div>
|
||||
<div class="pure-u-lg-2-3 pure-u-22-24 page-form page-form-complete">
|
||||
<h2 class="window-title">{'Server requirements'|t}</h2>
|
||||
|
||||
{include="server.requirements"}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{include="page.footer"}
|
||||
</body>
|
||||
</html>
|
0
morgan/js/markdown.min.js
vendored
Normal file
0
morgan/js/markdown.min.js
vendored
Normal file
2
morgan/js/metadata.min.js
vendored
Normal file
2
morgan/js/metadata.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
morgan/js/metadata.min.js.LICENSE.txt
Normal file
1
morgan/js/metadata.min.js.LICENSE.txt
Normal file
@ -0,0 +1 @@
|
||||
/*! https://mths.be/he v1.2.0 by @mathias | MIT license */
|
1
morgan/js/pluginsadmin.min.js
vendored
Normal file
1
morgan/js/pluginsadmin.min.js
vendored
Normal file
@ -0,0 +1 @@
|
||||
(()=>{function t(t){return function(t){if(Array.isArray(t))return r(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return r(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?r(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function r(t,r){(null==r||r>t.length)&&(r=t.length);for(var e=0,n=Array(r);e<r;e++)n[e]=t[e];return n}function e(t,r){var e=t.getAttribute("data-line");t.setAttribute("data-order",r),document.querySelector('[name="order_'.concat(e,'"]')).setAttribute("value",r)}function n(t,r){var n=parseInt(t,10)+r,a=document.querySelectorAll('[data-order="'.concat(t,'"]')),o=document.querySelectorAll('[data-order="'.concat(n,'"]'));r>0&&(a=[].slice.call(a).reverse());for(var i=0;i<a.length;i+=1){var c=o[0].parentNode;e(a[i],n),e(o[i],parseInt(t,10));var u=r<0?o[0]:o[o.length-1].nextSibling;c.insertBefore(a[i],u)}}t(document.querySelectorAll(".order")).forEach((function(t){t.addEventListener("click",(function(t){var r;t.preventDefault(),t.target.classList.contains("order-up")?0!==(r=parseInt(t.target.parentNode.parentNode.getAttribute("data-order"),10))&&n(r,-1):t.target.classList.contains("order-down")&&function(t){t!==parseInt(document.querySelector("[data-order]:last-child").getAttribute("data-order"),10)&&n(t,1)}(parseInt(t.target.parentNode.parentNode.getAttribute("data-order"),10))}))}))})();
|
1
morgan/js/shaare_batch.min.js
vendored
Normal file
1
morgan/js/shaare_batch.min.js
vendored
Normal file
@ -0,0 +1 @@
|
||||
(()=>{function e(e){return function(e){if(Array.isArray(e))return t(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,n){if(e){if("string"==typeof e)return t(e,n);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?t(e,n):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function t(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var n=function(t,n){var r=n.querySelectorAll('input[type="text"], textarea, input[type="checkbox"], input[type="hidden"]'),o=new FormData;return e(r).forEach((function(e){"checkbox"===e.getAttribute("type")?o.append(e.getAttribute("name"),e.checked):o.append(e.getAttribute("name"),e.value)})),new Promise((function(e,r){var c=new XMLHttpRequest;c.open("POST","".concat(t,"/admin/shaare")),c.onload=function(){200!==c.status?(alert("An error occurred. Return code: ".concat(c.status)),r()):(n.closest(".edit-link-container").remove(),e())},c.send(o)}))},r=function(e,t,n){null!=t&&0!==t.length||(window.location.href="".concat(e).concat(n))};!function(){var t=document.querySelector('input[name="js_base_path"]').value,o=function(){return document.querySelectorAll('form[name="linkform"]')},c=document.querySelectorAll('[name="cancel-batch-link"]');null!=c&&e(c).forEach((function(e){e.addEventListener("click",(function(e){e.preventDefault(),e.target.closest('form[name="linkform"]').remove(),r(t,o(),"/admin/add-shaare")}))}));var a=document.querySelectorAll('[name="save_edit"]');null!=a&&e(a).forEach((function(e){e.addEventListener("click",(function(e){e.preventDefault();var c=e.target.closest('form[name="linkform"]');n(t,c).then((function(){return r(t,o(),"/")}))}))}));var u=document.querySelectorAll('[name="save_edit_batch"]');null!=u&&e(u).forEach((function(r){r.addEventListener("click",(function(r){r.preventDefault();var c=e(o()),a=c.length,u=0,i=document.querySelector(".progressbar > div"),l=document.querySelector(".progressbar-current");document.querySelector(".dark-layer").style.display="block",document.querySelector(".progressbar-max").innerHTML=a,l.innerHTML=u;var f=[];c.forEach((function(e){f.push(n(t,e).then((function(){u+=1,i.style.width="".concat(100*u/a,"%"),l.innerHTML=u})))})),Promise.all(f).then((function(){window.location.href="".concat(t,"/")}))}))}));var i=document.querySelectorAll('[name="delete_link"]');null!=i&&e(i).forEach((function(e){e.addEventListener("click",(function(e){e.preventDefault();var n=e.target.closest('form[name="linkform"]');(function(e,t){return new Promise((function(n,r){var o=new XMLHttpRequest;o.open("GET","".concat(e.href,"&source=batch")),o.onload=function(){204!==o.status?(alert("An error occurred. Return code: ".concat(o.status)),r()):(t.closest(".edit-link-container").remove(),n())},o.send()}))})(e.target,n).then((function(){return r(t,o(),"/")}))}))}))}()})();
|
2
morgan/js/shaarli.min.js
vendored
Normal file
2
morgan/js/shaarli.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
morgan/js/shaarli.min.js.LICENSE.txt
Normal file
1
morgan/js/shaarli.min.js.LICENSE.txt
Normal file
@ -0,0 +1 @@
|
||||
/*! https://mths.be/he v1.2.0 by @mathias | MIT license */
|
2
morgan/js/thumbnails.min.js
vendored
Normal file
2
morgan/js/thumbnails.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
5
morgan/js/thumbnails.min.js.LICENSE.txt
Normal file
5
morgan/js/thumbnails.min.js.LICENSE.txt
Normal file
@ -0,0 +1,5 @@
|
||||
/*!
|
||||
hey, [be]Lazy.js - v1.8.2 - 2016.10.25
|
||||
A fast, small and dependency free lazy load script (https://github.com/dinbror/blazy)
|
||||
(c) Bjoern Klinggaard - @bklinggaard - http://dinbror.dk/blazy
|
||||
*/
|
1
morgan/js/thumbnails_update.min.js
vendored
Normal file
1
morgan/js/thumbnails_update.min.js
vendored
Normal file
@ -0,0 +1 @@
|
||||
(()=>{function e(t,n,r,o){var a=new XMLHttpRequest;a.open("PATCH","".concat(t,"/admin/shaare/").concat(n[r],"/update-thumbnail")),a.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),a.responseType="json",a.onload=function(){if(200!==a.status)alert("An error occurred. Return code: ".concat(a.status));else{var c=a.response;r+=1,o.progressBar.style.width="".concat(100*r/n.length,"%"),o.current.innerHTML=r,o.title.innerHTML=c.title,!1!==c.thumbnail&&(o.thumbnail.innerHTML='<img src="'.concat(t,"/").concat(c.thumbnail,'">')),r<n.length&&e(t,n,r,o)}},a.send()}e(document.querySelector('input[name="js_base_path"]').value,document.getElementsByName("ids")[0].value.split(","),0,{progressBar:document.querySelector(".progressbar > div"),current:document.querySelector(".progress-current"),thumbnail:document.querySelector(".thumbnail-placeholder"),title:document.querySelector(".thumbnail-link-title")})})();
|
324
morgan/linklist.html
Normal file
324
morgan/linklist.html
Normal file
@ -0,0 +1,324 @@
|
||||
<!DOCTYPE html>
|
||||
<html{if="$language !== 'auto'"} lang="{$language}"{/if}>
|
||||
<head>
|
||||
{include="includes"}
|
||||
</head>
|
||||
<body>
|
||||
{include="page.header"}
|
||||
|
||||
<div class="linkcount pure-u-0 pure-u-lg-visible">
|
||||
{if="!empty($linkcount)"}
|
||||
<span class="strong">{$linkcount}</span> {function="t('shaare', 'shaares', $linkcount)"}
|
||||
{if="$privateLinkcount>0"}
|
||||
<br><span class="strong">{$privateLinkcount}</span> {function="t('private link', 'private links', $privateLinkcount)"}
|
||||
{/if}
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<input type="hidden" name="token" value="{$token}">
|
||||
<div id="search-linklist" class="searchform-block search-linklist">
|
||||
|
||||
<form method="GET" class="pure-form searchform" name="searchform">
|
||||
<input type="text" name="searchterm" class="searchterm" aria-label="{'Search text'|t}" placeholder="{'Search text'|t}"
|
||||
{if="!empty($search_term)"}
|
||||
value="{$search_term}"
|
||||
{/if}
|
||||
>
|
||||
<input type="text" name="searchtags" class="searchtags" aria-label="{'Filter by tag'|t}" placeholder="{'Filter by tag'|t}"
|
||||
{if="!empty($search_tags)"}
|
||||
value="{$search_tags}"
|
||||
{/if}
|
||||
autocomplete="off" data-multiple data-autofirst data-minChars="1"
|
||||
data-list="{loop="$tags"}{$key}, {/loop}"
|
||||
>
|
||||
<button type="submit" class="search-button" aria-label="{'Search'|t}"><i class="fa fa-search" aria-hidden="true"></i></button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
{loop="$plugins_header.fields_toolbar"}
|
||||
<form
|
||||
{loop="$value.attr"}
|
||||
{$key}="{$value}"
|
||||
{/loop}>
|
||||
<div class="toolbar-plugin pure-u-lg-1">
|
||||
{loop="$value.inputs"}
|
||||
<input
|
||||
{loop="$value"}
|
||||
{$key}="{$value}"
|
||||
{/loop}>
|
||||
{/loop}
|
||||
</div>
|
||||
</form>
|
||||
{/loop}
|
||||
|
||||
<div id="linklist">
|
||||
<div id="link-count-block" class="pure-g link-count-block">
|
||||
<div class="pure-u-lg-2-24 pure-u-1-24"></div>
|
||||
<div id="link-count-content" class="pure-u-lg-20-24 pure-u-22-24">
|
||||
<div class="linkcount pure-u-lg-0 center">
|
||||
{if="!empty($linkcount)"}
|
||||
<span class="strong">{$linkcount}</span> {function="t('shaare', 'shaares', $linkcount)"}
|
||||
{if="$privateLinkcount>0"}
|
||||
· <span class="strong">{$privateLinkcount}</span> {function="t('private link', 'private links', $privateLinkcount)"}
|
||||
{/if}
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
{include="linklist.paging"}
|
||||
|
||||
<div id="plugin_zone_start_linklist" class="plugin_zone">
|
||||
{loop="$plugin_start_zone"}
|
||||
{$value}
|
||||
{/loop}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{if="count($links)==0"}
|
||||
<div id="search-result-block" class="pure-g pure-alert pure-alert-error search-result">
|
||||
<div class="pure-u-2-24"></div>
|
||||
<div id="search-result-content" class="pure-u-20-24">
|
||||
<div id="searchcriteria">{'Nothing found.'|t}</div>
|
||||
</div>
|
||||
</div>
|
||||
{elseif="!empty($search_term) or $search_tags !== '' or !empty($visibility) or $untaggedonly"}
|
||||
<div id="search-result-block" class="pure-g pure-alert pure-alert-success search-result">
|
||||
<div class="pure-u-2-24"></div>
|
||||
<div id="search-result-content" class="pure-u-20-24 search-result-main">
|
||||
{function="sprintf(t('%s result', '%s results', $result_count), $result_count)"}
|
||||
{if="!empty($search_term)"}
|
||||
{'for'|t} <em><strong>{$search_term}</strong></em>
|
||||
{/if}
|
||||
{if="!empty($search_tags)"}
|
||||
{$exploded_tags=tags_str2array($search_tags, $tags_separator)}
|
||||
{'tagged'|t}
|
||||
{loop="$exploded_tags"}
|
||||
<span class="label label-tag" title="{'Remove tag'|t}">
|
||||
<a href="{$base_path}/remove-tag/{function="$search_tags_url.$key1"}" aria-label="{'Remove tag'|t}">
|
||||
{$value}<span class="remove"><i class="fa fa-times" aria-hidden="true"></i></span>
|
||||
</a>
|
||||
</span>
|
||||
{/loop}
|
||||
{/if}
|
||||
{if="!empty($visibility)"}
|
||||
{'with status'|t}
|
||||
<span class="label label-private">
|
||||
{$visibility|t}
|
||||
</span>
|
||||
{/if}
|
||||
{if="$untaggedonly"}
|
||||
<span class="label label-private">
|
||||
{'without any tag'|t}
|
||||
</span>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div id="linklist-loop-block" class="pure-g">
|
||||
<div class="pure-u-lg-2-24 pure-u-1-24"></div>
|
||||
<div id="linklist-loop-content" class="pure-u-lg-20-24 pure-u-22-24">
|
||||
{ignore}Set translation here, for performances{/ignore}
|
||||
{$strPrivate=t('Private')}
|
||||
{$strEdit=t('Edit')}
|
||||
{$strDelete=t('Delete')}
|
||||
{$strFold=t('Fold')}
|
||||
{$strEdited=t('Edited: ')}
|
||||
{$strPermalink=t('Permalink')}
|
||||
{$strPermalinkLc=t('permalink')}
|
||||
{$strAddTag=t('Add tag')}
|
||||
{$strToggleSticky=t('Toggle sticky')}
|
||||
{$strSticky=t('Sticky')}
|
||||
{$strShaarePrivate=t('Share a private link')}
|
||||
{ignore}End of translations{/ignore}
|
||||
{loop="links"}
|
||||
<div class="anchor" id="{$value.shorturl}"></div>
|
||||
|
||||
<div class="linklist-item linklist-item{if="$value.class"} {$value.class}{/if}" data-id="{$value.id}">
|
||||
<div class="linklist-item-title">
|
||||
{if="$thumbnails_enabled && $value.thumbnail !== false"}
|
||||
<div
|
||||
class="linklist-item-thumbnail {if="$value.thumbnail === null"}hidden{/if}"
|
||||
style="width:{$thumbnails_width}px;height:{$thumbnails_height}px;"
|
||||
{if="$value.thumbnail === null"}data-async-thumbnail="1"{/if}
|
||||
>
|
||||
<div class="thumbnail">
|
||||
{ignore}RainTPL hack: put the 2 src on two different line to avoid path replace bug{/ignore}
|
||||
<a href="{$value.real_url}" aria-hidden="true" tabindex="-1">
|
||||
<img data-src="{$root_path}/{$value.thumbnail}#" class="b-lazy"
|
||||
src=""
|
||||
alt="" width="{$thumbnails_width}" height="{$thumbnails_height}" />
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="linklist-item-editbuttons">
|
||||
{if="$value.sticky"}
|
||||
<span class="label label-sticky">{$strSticky}</span>
|
||||
{/if}
|
||||
{if="$value.private"}
|
||||
<span class="label label-private">{$strPrivate}</span>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<h2>
|
||||
<a href="{$value.real_url}" class="linklist-real-url">
|
||||
{if="strpos($value.url, $value.shorturl) === false"}
|
||||
<i class="fa fa-external-link" aria-hidden="true"></i>
|
||||
{else}
|
||||
<i class="fa fa-sticky-note" aria-hidden="true"></i>
|
||||
{/if}
|
||||
|
||||
<span class="linklist-link">{$value.title_html}</span>
|
||||
</a>
|
||||
</h2>
|
||||
</div>
|
||||
|
||||
{if="$value.description"}
|
||||
<div class="linklist-item-description">
|
||||
{$value.description}
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="linklist-item-infos clear">
|
||||
{if="$value.tags"}
|
||||
<div class="linklist-item-tags">
|
||||
<i class="fa fa-tags" aria-hidden="true"></i>
|
||||
{$tag_counter=count($value.taglist)}
|
||||
{loop="value.taglist"}
|
||||
<span class="label label-tag" title="{$strAddTag}">
|
||||
<a href="{$base_path}/add-tag/{$value1.taglist_urlencoded.$key2}">{$value1.taglist_html.$key2}</a>
|
||||
</span>
|
||||
{if="$tag_counter - 1 != $counter"}·{/if}
|
||||
{/loop}
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="linklist-item-infos-date-url-block pure-g">
|
||||
<div class="linklist-item-infos-dateblock pure-u-lg-7-12 pure-u-1">
|
||||
{if="$is_logged_in"}
|
||||
<div class="linklist-item-infos-controls-group pure-u-0 pure-u-lg-visible">
|
||||
<span class="linklist-item-infos-controls-item ctrl-checkbox">
|
||||
<input type="checkbox" class="link-checkbox" value="{$value.id}">
|
||||
</span>
|
||||
<span class="linklist-item-infos-controls-item ctrl-edit">
|
||||
<a href="{$base_path}/admin/shaare/{$value.id}" aria-label="{$strEdit}" title="{$strEdit}"><i class="fa fa-pencil-square-o edit-link" aria-hidden="true"></i></a>
|
||||
</span>
|
||||
<span class="linklist-item-infos-controls-item ctrl-delete">
|
||||
<a href="{$base_path}/admin/shaare/delete?id={$value.id}&token={$token}" aria-label="{$strDelete}"
|
||||
title="{$strDelete}" class="delete-link pure-u-0 pure-u-lg-visible confirm-delete">
|
||||
<i class="fa fa-trash" aria-hidden="true"></i>
|
||||
</a>
|
||||
</span>
|
||||
<span class="linklist-item-infos-controls-item ctrl-pin">
|
||||
<a href="{$base_path}/admin/shaare/{$value.id}/pin?token={$token}"
|
||||
title="{$strToggleSticky}" aria-label="{$strToggleSticky}" class="pin-link {if="$value.sticky"}pinned-link{/if} pure-u-0 pure-u-lg-visible">
|
||||
<i class="fa fa-thumb-tack" aria-hidden="true"></i>
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
{else}
|
||||
{if="$value.sticky"}
|
||||
<div class="linklist-item-infos-controls-group pure-u-0 pure-u-lg-visible">
|
||||
<span class="linklist-item-infos-controls-item ctrl-pin">
|
||||
<span title="{$strSticky}" class="pin-link pinned-link pure-u-0 pure-u-lg-visible">
|
||||
<i class="fa fa-thumb-tack" aria-hidden="true"></i>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
{/if}
|
||||
{/if}
|
||||
<a href="{$base_path}/shaare/{$value.shorturl}" title="{$strPermalink}">
|
||||
{if="!$hide_timestamps || $is_logged_in"}
|
||||
{$updated=$value.updated_timestamp ? $strEdited. format_date($value.updated) : $strPermalink}
|
||||
<span class="linkdate" title="{$updated}">
|
||||
<i class="fa fa-clock-o" aria-hidden="true"></i>
|
||||
{$value.created|format_date}
|
||||
{if="$value.updated_timestamp"}*{/if}
|
||||
·
|
||||
</span>
|
||||
{/if}
|
||||
{$strPermalinkLc}
|
||||
</a>
|
||||
|
||||
{if="$is_logged_in && $value.private"}
|
||||
<a href="{$base_path}/admin/shaare/private/{$value.shorturl}?token={$token}" title="{$strShaarePrivate}">
|
||||
<i class="fa fa-share-alt"></i>
|
||||
</a>
|
||||
{/if}
|
||||
|
||||
<div class="pure-u-0 pure-u-lg-visible">
|
||||
{if="isset($value.link_plugin)"}
|
||||
·
|
||||
{$link_plugin_counter=count($value.link_plugin)}
|
||||
{loop="$value.link_plugin"}
|
||||
{$value}
|
||||
{if="$link_plugin_counter - 1 != $counter"}·{/if}
|
||||
{/loop}
|
||||
{/if}
|
||||
</div>
|
||||
</div><div
|
||||
{ignore}do not add space or line break between these div - Firefox issue{/ignore}
|
||||
class="linklist-item-infos-url pure-u-lg-5-12 pure-u-1">
|
||||
<a href="{$value.real_url}" aria-label="{$value.title}" title="{$value.title}">
|
||||
<i class="fa fa-link" aria-hidden="true"></i> {$value.url_html}
|
||||
</a>
|
||||
<div class="linklist-item-buttons pure-u-0 pure-u-lg-visible">
|
||||
<a href="#" aria-label="{$strFold}" title="{$strFold}" class="fold-button"><i class="fa fa-chevron-up" aria-hidden="true"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mobile-buttons pure-u-1 pure-u-lg-0">
|
||||
{if="isset($value.link_plugin)"}
|
||||
{$link_plugin_counter=count($value.link_plugin)}
|
||||
{loop="$value.link_plugin"}
|
||||
{$value}
|
||||
{if="$link_plugin_counter - 1 != $counter"}·{/if}
|
||||
{/loop}
|
||||
{/if}
|
||||
{if="$is_logged_in"}
|
||||
·
|
||||
<a href="{$base_path}/admin/shaare/delete?id={$value.id}&token={$token}" aria-label="{$strDelete}"
|
||||
title="{$strDelete}" class="delete-link confirm-delete">
|
||||
<i class="fa fa-trash" aria-hidden="true"></i>
|
||||
</a>
|
||||
·
|
||||
<a href="{$base_path}/admin/shaare/{$value.id}" aria-label="{$strEdit}" title="{$strEdit}">
|
||||
<i class="fa fa-pencil-square-o edit-link" aria-hidden="true"></i>
|
||||
</a>
|
||||
·
|
||||
<a href="{$base_path}/admin/shaare/{$value.id}/pin?token={$token}"
|
||||
aria-label="{$strToggleSticky}"
|
||||
title="{$strToggleSticky}"
|
||||
class="pin-link {if="$value.sticky"}pinned-link{/if}"
|
||||
>
|
||||
<i class="fa fa-thumb-tack" aria-hidden="true"></i>
|
||||
</a>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/loop}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="plugin_zone_end_linklist" class="plugin_zone">
|
||||
{loop="$plugin_end_zone"}
|
||||
{$value}
|
||||
{/loop}
|
||||
</div>
|
||||
|
||||
<div id="linklist-paging-bottom-block" class="pure-g link-count-block">
|
||||
<div class="pure-u-lg-2-24 pure-u-1-24"></div>
|
||||
<div id="linklist-paging-bottom-content" class="pure-u-lg-20-24 pure-u-22-24">
|
||||
{include="linklist.paging"}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{include="page.footer"}
|
||||
<script src="{$asset_path}/js/thumbnails.min.js?v={$version_hash}#"></script>
|
||||
{if="$is_logged_in && $async_metadata"}<script src="{$asset_path}/js/metadata.min.js?v={$version_hash}#"></script>{/if}
|
||||
</body>
|
||||
</html>
|
74
morgan/linklist.paging.html
Normal file
74
morgan/linklist.paging.html
Normal file
@ -0,0 +1,74 @@
|
||||
<div class="linklist-paging">
|
||||
<div class="paging pure-g">
|
||||
<div class="linklist-filters pure-u-1-3">
|
||||
<span class="linklist-filters-text pure-u-0 pure-u-lg-visible">
|
||||
{'Filters'|t}
|
||||
</span>
|
||||
{if="$is_logged_in"}
|
||||
<a href="{$base_path}/admin/visibility/private" aria-label="{'Only display private links'|t}" title="{'Only display private links'|t}"
|
||||
class="{if="$visibility==='private'"}filter-on{else}filter-off{/if}"
|
||||
><i class="fa fa-user-secret" aria-hidden="true"></i></a>
|
||||
<a href="{$base_path}/admin/visibility/public" aria-label="{'Only display public links'|t}" title="{'Only display public links'|t}"
|
||||
class="{if="$visibility==='public'"}filter-on{else}filter-off{/if}"
|
||||
><i class="fa fa-globe" aria-hidden="true"></i></a>
|
||||
{/if}
|
||||
<a href="{$base_path}/untagged-only" aria-label="{'Filter untagged links'|t}" title="{'Filter untagged links'|t}"
|
||||
class={if="$untaggedonly"}"filter-on"{else}"filter-off"{/if}
|
||||
><i class="fa fa-tag" aria-hidden="true"></i></a>
|
||||
{if="$is_logged_in"}
|
||||
<a href="#" aria-label="{'Select all'|t}" title="{'Select all'|t}"
|
||||
class="filter-off select-all-button pure-u-0 pure-u-lg-visible"
|
||||
><i class="fa fa-check-square-o" aria-hidden="true"></i></a>
|
||||
{/if}
|
||||
<a href="#" class="filter-off fold-all pure-u-lg-0" aria-label="{'Fold all'|t}" title="{'Fold all'|t}">
|
||||
<i class="fa fa-chevron-up" aria-hidden="true"></i>
|
||||
</a>
|
||||
{if="!empty($action_plugin)"}
|
||||
{loop="$action_plugin"}
|
||||
{$value.attr.class=isset($value.attr.class) ? $value.attr.class : ''}
|
||||
{$value.attr.class=!empty($value.on) ? $value.attr.class .' filter-on' : $value.attr.class .' filter-off'}
|
||||
<a
|
||||
{loop="$value.attr"}
|
||||
{$key}="{$value}"
|
||||
{/loop}>
|
||||
{$value.html}
|
||||
</a>
|
||||
{/loop}
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
|
||||
<div class="linklist-pages pure-u-1-3">
|
||||
{if="$next_page_url"}
|
||||
<a href="{$next_page_url}" class="paging_newer">
|
||||
<i class="fa fa-arrow-circle-left"></i>
|
||||
</a>
|
||||
{/if}
|
||||
{if="$page_max>1"}<span class="strong">{$page_current} / {$page_max}</span>{/if}
|
||||
{if="$previous_page_url"}
|
||||
<a href="{$previous_page_url}" class="paging_older">
|
||||
<i class="fa fa-arrow-circle-right"></i>
|
||||
</a>
|
||||
{/if}
|
||||
|
||||
</div>
|
||||
|
||||
<div class="linksperpage pure-u-1-3">
|
||||
<div class="pure-u-0 pure-u-lg-visible">{'Links per page'|t}</div>
|
||||
<a href="{$base_path}/links-per-page?nb=20"
|
||||
{if="$links_per_page == 20"}class="selected"{/if}>20</a>
|
||||
<a href="{$base_path}/links-per-page?nb=50"
|
||||
{if="$links_per_page == 50"}class="selected"{/if}>50</a>
|
||||
<a href="{$base_path}/links-per-page?nb=100"
|
||||
{if="$links_per_page == 100"}class="selected"{/if}>100</a>
|
||||
<form method="GET" class="pure-u-0 pure-u-lg-visible" action="{$base_path}/links-per-page">
|
||||
<input type="text" name="nb" placeholder="133"
|
||||
{if="$links_per_page != 20 && $links_per_page != 50 && $links_per_page != 100"}
|
||||
value="{$links_per_page}"{/if}>
|
||||
</form>
|
||||
<a href="#" class="filter-off fold-all pure-u-0 pure-u-lg-visible" aria-label="{'Fold all'|t}" title="{'Fold all'|t}">
|
||||
<i class="fa fa-chevron-up" aria-hidden="true"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
37
morgan/loginform.html
Normal file
37
morgan/loginform.html
Normal file
@ -0,0 +1,37 @@
|
||||
<!DOCTYPE html>
|
||||
<html{if="$language !== 'auto'"} lang="{$language}"{/if}>
|
||||
<head>
|
||||
{include="includes"}
|
||||
</head>
|
||||
<body>
|
||||
{include="page.header"}
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-1-3 pure-u-1-24"></div>
|
||||
<div id="login-form" class="page-form page-form-light pure-u-lg-1-3 pure-u-22-24 login-form-container">
|
||||
<form method="post" name="loginform">
|
||||
<h2 class="window-title">{'Login'|t}</h2>
|
||||
<div>
|
||||
<input type="text" name="login" aria-label="{'Username'|t}" placeholder="{'Username'|t}"
|
||||
{if="!empty($username)"}value="{$username}"{/if} class="autofocus" autocapitalize="off">
|
||||
</div>
|
||||
<div>
|
||||
<input type="password" name="password" aria-label="{'Password'|t}" placeholder="{'Password'|t}" class="autofocus">
|
||||
</div>
|
||||
<div class="remember-me">
|
||||
<input type="checkbox" name="longlastingsession" id="longlastingsessionform"
|
||||
{if="$remember_user_default"}checked="checked"{/if}>
|
||||
<label for="longlastingsessionform">{'Remember me'|t}</label>
|
||||
</div>
|
||||
<div>
|
||||
<input type="submit" value="{'Login'|t}" class="bigbutton">
|
||||
</div>
|
||||
<input type="hidden" name="token" value="{$token}">
|
||||
{if="$returnurl"}<input type="hidden" name="returnurl" value="{$returnurl}">{/if}
|
||||
</form>
|
||||
</div>
|
||||
<div class="pure-u-lg-1-3 pure-u-1-8"></div>
|
||||
</div>
|
||||
|
||||
{include="page.footer"}
|
||||
</body>
|
||||
</html>
|
45
morgan/opensearch.html
Normal file
45
morgan/opensearch.html
Normal file
@ -0,0 +1,45 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
|
||||
<ShortName>Shaarli search - {$pagetitle}</ShortName>
|
||||
<Description>Shaarli search - {$pagetitle}</Description>
|
||||
<Url type="text/html" template="{$serverurl}?searchterm={searchTerms}" />
|
||||
<Url type="application/atom+xml" template="{$serverurl}feed/atom?searchterm={searchTerms}"/>
|
||||
<Url type="application/rss+xml" template="{$serverurl}feed/rss?searchterm={searchTerms}"/>
|
||||
<InputEncoding>UTF-8</InputEncoding>
|
||||
<Developer>Shaarli Community - https://github.com/shaarli/Shaarli/</Developer>
|
||||
<Image width="16" height="16">data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABmJLR0QA/wD/AP+gvaeTAAAHRklE
|
||||
QVRIx5WWaWxU5xWG3++7986dfYYZb+MN2xiMDRiDFePUiQsNoiwpUNpAmhInJVEqpa0oQUlbJVKq
|
||||
olaiqpLKUtOKhAJRm1BKRVWctuykpFjAgPcFx/uMl5mxPTOeuXPv3O3rjyiV0lIpfX+dc36c55xf
|
||||
70vwP9TZ2fFpSQCwT5u6unX4f0QeNLx27RoMQwfRveTd11T23M+8S9w+Z3NRma1W4Hk6/nEimFpM
|
||||
Xnun9Xpmz1MPY+feOhBi/fwAAOjq7iJEqmQqCZf5i7NvyNZ/bJPYgAjCiJc2Zmhyw68SM/T1+NlK
|
||||
uf61BPoH+tHU1PT5ACMjI8RXvACvpZ5NT0+fmrG+2TKqtDLV0BgA2AUfXS3+UtfDX2ixCf73E+oA
|
||||
rat92CTkv9fRBwEkSaLDt/JZR/v0Q7qjb8dQ5hjSqmYSOCkzBbogL+ij2RN8bik9wK88Al9tH4tG
|
||||
ow88lvb19yEyPwfGGLq6OungYD9fUlosrqwoQVVVUeOU8qE/mU0ZTq6KNvreNort+5hugkayQUgY
|
||||
qQld/u6qnVRhkciscOdOkNy5E0RnZ+e/AbwsZxAaHyORZA+prW01CTlnGppOqAcwUnCmlDAkAyin
|
||||
Dapb2t7lNeRijpwvTGlJROXugoKS+upz/S19Kj9lJjxXGY1VU49tGevt7WOCSMHTeAXclePsQts9
|
||||
Jq9oLR7rPVkHxpUYkK2c07ZDiieRNcAx3ZlNphcnsxbiMuEsXFSTZpabp+VVS17UNSV/8n7+gN75
|
||||
+C1DM6VEjkgatiz/5IOCAheiUdeyr+198keKZXLzTKYjMDk/ZzGJhkV9AiPSdWaYIAY4U7TYNJMR
|
||||
pugMqgHcXTiJqDK8ycMv2+TPWyWtKFw3KEdtJxNz8u8+/PNYIqeUgY/Oz+Z7q5X3gtqvG7qip8yM
|
||||
HqdZg5kGgwGACoQQQkEMQ2DMIFnGE04xCRQTZFaexUT6jEEImJ2njjxx9fr13hfqfULTQ4apHept
|
||||
lxf4mrqS3Tek0w1toTc1K6WcXfAwnyWH8kSkIueEhdhNrzUAv16fSCUzNwR3vr/G2lKWojMqbxF4
|
||||
FWlLPDvBR+RBNpTsNqfkV7htuUe/UVq456qdzzvFh2KjdSH0I6ODs1ps9NHcw2jMfRYcEQyOCiox
|
||||
aWR0fOQWVLFNUuOnrXJxfIPnpXLRKzocLpsJanhUU/bfjJ4gfwm/ys3JGX1cuS3UBvauLa/MBe9z
|
||||
5c/xGRdSKpiVmhhN98JK/w4DGgg4uLh8u1NfPhWbmzszeH3G1rxv3dL7+qXyGaXHJi46s4QQophp
|
||||
TKSDkHWGlAqmGCbAGAUA3sY5LlRZv3w44Dhnm0iFzbnsGfJR5E+EEsppTBVXuBptL5b8YQMlwnO+
|
||||
Z2wtea4cl8Rc3KXJ4zShRm0CFaCaGhSDwGSMlbtLhSr7FnVhKhscC4+AO3L0x5PSFBdfE9i40SE6
|
||||
xLSWRCIbJ6phIqEysqvk+2aJ0vhB1NK353zyaL3GS76NgRbVYykkt2OXuaQqMwuxkk0FT+OJpS+z
|
||||
piXPRP1KzRvz4dRvO68PaWCMEQAIDcbqFiLJtyaSA/Ef3NnMGttgvHS7mUUWw7cTMemtY/cPsw3n
|
||||
oe2+4mGXpt7VGWPJ6zOn1V2Xfaz5AxgvBzexodmeGWmCbWWTDOGpSZIIqeAe2/IYvnXgWbomUj2T
|
||||
lNlwUP7bV64lzuRIeoodqDxi1OKRs/e0i08dH/6JPWtk6KKaZd3xj2jAXkY3BvZGK1xrhZvRNktP
|
||||
fNA0ubQrxyxV4jHpSkWoXJPKYqBetxeRpgsMWwE5b/bxaYxUDSWmzCLbStqQuy02LY4/cWLsqH8i
|
||||
HYNbyEeJczkJSzH2855DwsXp932F9hXEKQSQ1UHa568iRAa3uFyeNVolMBmeIrzT4cTXm37KMuvA
|
||||
xb8XXTqiDELRgKg8h/dGWwP9iSDaIzcYJSCbA/uNR3N2sNahV/hbsSA70vEdW66tCOOpj8FRkIgU
|
||||
Q5ybLUopiTzeTpFWUoTXdR3knwQMzLANOyQX50fWhDktLeAX3UcIA2EEQHPgi6TBsrWzaLGm7emC
|
||||
H7bY+GPlV6YumiEpDhslxGBgROApz+yyhROzduIEzwngDh48iD3jO0nBRAUUXtHcoq+ZWbI5EWWa
|
||||
WTieFjoKsaVoN92T88J4vlz+asXqpb+hEcdotbdueZ47vyiqhpA2UoRQwpoLtpNHxR0382jR8RzT
|
||||
k8xYMyCMMfR33Uc8rxdrA9tpuHPyS7pPOTRPZ1arepa4rUsybiWnnU9a39ZXxdur+XoGAGMdoXLi
|
||||
M789axnfNxDr8omiDcvF1f3OhPf18efjF/nfz6PGvv6zlrlwWwYBgcBZbKH4WKHODLHEURDxbHDF
|
||||
QWGePftHUlZWjsy8guYnH2EgwORfZ5cuavEqgGhLnL6+sycvRP1Fbux/fheIn3wCCN4N/qdPMwA4
|
||||
2fYOeoe7kc6kcfCbh8n+r7YwAOjs6QCl9DNx5t7dew+MOf8CcuqqoLxlhwgAAAAASUVORK5CYII=
|
||||
</Image>
|
||||
</OpenSearchDescription>
|
45
morgan/page.footer.html
Normal file
45
morgan/page.footer.html
Normal file
@ -0,0 +1,45 @@
|
||||
</main>
|
||||
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-2-24"></div>
|
||||
<footer id="footer" class="pure-u-20-24 footer-container" role="contentinfo">
|
||||
<i class="fa fa-shaarli" aria-hidden="true"></i>
|
||||
<strong><a href="https://github.com/shaarli/Shaarli">Shaarli</a></strong>
|
||||
{if="$is_logged_in===true"}
|
||||
{$version}
|
||||
{/if}
|
||||
·
|
||||
{'The personal, minimalist, super fast, database-free, bookmarking service'|t} {'by the Shaarli community'|t} ·
|
||||
<a href="{$root_path}/doc/html/index.html" rel="nofollow">{'Documentation'|t}</a>
|
||||
{loop="$plugins_footer.text"}
|
||||
{$value}
|
||||
{/loop}
|
||||
</footer>
|
||||
<div class="pure-u-2-24"></div>
|
||||
</div>
|
||||
|
||||
{loop="$plugins_footer.endofpage"}
|
||||
{$value}
|
||||
{/loop}
|
||||
|
||||
{loop="$plugins_footer.js_files"}
|
||||
<script src="{$root_path}/{$value}#"></script>
|
||||
{/loop}
|
||||
|
||||
<div id="js-translations" class="hidden" aria-hidden="true">
|
||||
<span id="translation-fold">{'Fold'|t}</span>
|
||||
<span id="translation-fold-all">{'Fold all'|t}</span>
|
||||
<span id="translation-expand">{'Expand'|t}</span>
|
||||
<span id="translation-expand-all">{'Expand all'|t}</span>
|
||||
<span id="translation-delete-link">{'Are you sure you want to delete this link?'|t}</span>
|
||||
<span id="translation-delete-tag">{'Are you sure you want to delete this tag?'|t}</span>
|
||||
<span id="translation-shaarli-desc">
|
||||
{'The personal, minimalist, super fast, database-free, bookmarking service'|t} {'by the Shaarli community'|t}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<input type="hidden" name="js_base_path" value="{$base_path}" />
|
||||
<input type="hidden" name="token" value="{$token}" id="token" />
|
||||
<input type="hidden" name="tags_separator" value="{$tags_separator}" id="tags_separator" />
|
||||
|
||||
<script src="{$asset_path}/js/shaarli.min.js?v={$version_hash}#"></script>
|
271
morgan/page.header.html
Normal file
271
morgan/page.header.html
Normal file
@ -0,0 +1,271 @@
|
||||
<div class="shaarli-menu pure-g" id="shaarli-menu">
|
||||
<div class="pure-u-lg-0 pure-u-1">
|
||||
<div class="pure-menu">
|
||||
<header role="banner">
|
||||
<a href="{$titleLink}" class="pure-menu-link shaarli-title" id="shaarli-title-mobile">
|
||||
<i class="fa fa-shaarli" aria-hidden="true"></i>
|
||||
{$shaarlititle}
|
||||
</a>
|
||||
</header>
|
||||
<a href="#" class="menu-toggle" id="menu-toggle" aria-label="{'Menu'|t}"><s class="bar" aria-hidden="true"></s><s class="bar" aria-hidden="true"></s></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-u-1">
|
||||
<div class="pure-menu menu-transform pure-menu-horizontal pure-g">
|
||||
<ul class="pure-menu-list pure-u-lg-5-6 pure-u-1">
|
||||
<li class="pure-menu-item pure-u-0 pure-u-lg-visible">
|
||||
<a href="{$titleLink}" class="pure-menu-link shaarli-title" id="shaarli-title-desktop">
|
||||
<i class="fa fa-shaarli" aria-hidden="true"></i>
|
||||
{$shaarlititle}
|
||||
</a>
|
||||
</li>
|
||||
{if="$is_logged_in || $openshaarli"}
|
||||
<li class="pure-menu-item">
|
||||
<a href="{$base_path}/admin/add-shaare" class="pure-menu-link" id="shaarli-menu-shaare">
|
||||
<i class="fa fa-plus" aria-hidden="true"></i> {'Shaare'|t}
|
||||
</a>
|
||||
</li>
|
||||
<li class="pure-menu-item" id="shaarli-menu-tools">
|
||||
<a href="{$base_path}/admin/tools" class="pure-menu-link">{'Tools'|t}</a>
|
||||
</li>
|
||||
{/if}
|
||||
<li class="pure-menu-item" id="shaarli-menu-tags">
|
||||
<a href="{$base_path}/tags/cloud" class="pure-menu-link">{'Tag cloud'|t}</a>
|
||||
</li>
|
||||
{if="$thumbnails_enabled"}
|
||||
<li class="pure-menu-item" id="shaarli-menu-picwall">
|
||||
<a href="{$base_path}/picture-wall?{function="ltrim($searchcrits, '&')"}" class="pure-menu-link">{'Picture wall'|t}</a>
|
||||
</li>
|
||||
{/if}
|
||||
<li class="pure-menu-item" id="shaarli-menu-daily">
|
||||
<a href="{$base_path}/daily" class="pure-menu-link">{'Daily'|t}</a>
|
||||
</li>
|
||||
<li class="pure-menu-item" id="shaarli-menu-blog">
|
||||
<a href="https://morgan.zoemp.be" class="pure-menu-link">Blog (EN)</a>
|
||||
</li>
|
||||
{loop="$plugins_header.buttons_toolbar"}
|
||||
<li class="pure-menu-item shaarli-menu-plugin">
|
||||
<a
|
||||
{$value.attr.class=isset($value.class) ? $value.attr.class . ' pure-menu-link' : 'pure-menu-link'}
|
||||
{loop="$value.attr"}
|
||||
{$key}="{$value}"
|
||||
{/loop}>
|
||||
{$value.html}
|
||||
</a>
|
||||
</li>
|
||||
{/loop}
|
||||
<li class="pure-menu-item pure-u-lg-0 shaarli-menu-mobile" id="shaarli-menu-mobile-rss">
|
||||
<a href="{$base_path}/feed/{$feed_type}?{$searchcrits}" class="pure-menu-link">{'RSS Feed'|t}</a>
|
||||
</li>
|
||||
{if="$is_logged_in"}
|
||||
<li class="pure-menu-item pure-u-lg-0 shaarli-menu-mobile" id="shaarli-menu-mobile-logout">
|
||||
<a href="{$base_path}/admin/logout" class="pure-menu-link">{'Logout'|t}</a>
|
||||
</li>
|
||||
{else}
|
||||
<li class="pure-menu-item pure-u-lg-0 shaarli-menu-mobile" id="shaarli-menu-mobile-login">
|
||||
<a href="{$base_path}/login" class="pure-menu-link">{'Login'|t}</a>
|
||||
</li>
|
||||
{/if}
|
||||
</ul>
|
||||
<div class="header-buttons pure-u-lg-1-6 pure-u-0 pure-u-lg-visible">
|
||||
<ul class="pure-menu-list">
|
||||
<li class="pure-menu-item" id="shaarli-menu-desktop-search">
|
||||
<a href="#" class="pure-menu-link subheader-opener"
|
||||
data-open-id="search"
|
||||
id="search-button" aria-label="{'Search'|t}" title="{'Search'|t}">
|
||||
<i class="fa fa-search" aria-hidden="true"></i>
|
||||
</a>
|
||||
</li>
|
||||
<li class="pure-menu-item" id="shaarli-menu-desktop-rss">
|
||||
<a href="{$base_path}/feed/{$feed_type}?{$searchcrits}" class="pure-menu-link" title="{'RSS Feed'|t}" aria-label="{'RSS Feed'|t}">
|
||||
<i class="fa fa-rss" aria-hidden="true"></i>
|
||||
</a>
|
||||
</li>
|
||||
{if="!$is_logged_in"}
|
||||
<li class="pure-menu-item" id="shaarli-menu-desktop-login">
|
||||
<a href="{$base_path}/login" class="pure-menu-link"
|
||||
data-open-id="header-login-form"
|
||||
id="login-button" aria-label="{'Login'|t}" title="{'Login'|t}">
|
||||
<i class="fa fa-user" aria-hidden="true"></i>
|
||||
</a>
|
||||
</li>
|
||||
{else}
|
||||
<li class="pure-menu-item" id="shaarli-menu-desktop-logout">
|
||||
<a href="{$base_path}/admin/logout" class="pure-menu-link" aria-label="{'Logout'|t}" title="{'Logout'|t}">
|
||||
<i class="fa fa-sign-out" aria-hidden="true"></i>
|
||||
</a>
|
||||
</li>
|
||||
{/if}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<main id="content" class="container" role="main">
|
||||
<div id="search" class="subheader-form searchform-block header-search">
|
||||
<form method="GET" class="pure-form searchform" name="searchform" action="{$base_path}/">
|
||||
<input type="text" id="searchform_value" name="searchterm" aria-label="{'Search text'|t}" placeholder="{'Search text'|t}"
|
||||
{if="!empty($search_term)"}
|
||||
value="{$search_term}"
|
||||
{/if}
|
||||
>
|
||||
<input type="text" name="searchtags" id="tagfilter_value" aria-label="{'Filter by tag'|t}" placeholder="{'Filter by tag'|t}"
|
||||
{if="!empty($search_tags)"}
|
||||
value="{$search_tags}"
|
||||
{/if}
|
||||
autocomplete="off" data-multiple data-autofirst data-minChars="1"
|
||||
data-list="{loop="$tags"}{$key}, {/loop}"
|
||||
>
|
||||
<button type="submit" class="search-button" aria-label="{'Search'|t}"><i class="fa fa-search" aria-hidden="true"></i></button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
{if="$is_logged_in && $template === 'linklist'"}
|
||||
<div id="actions" class="subheader-form">
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-1">
|
||||
<a href="" id="actions-delete" class="button">
|
||||
<i class="fa fa-trash" aria-hidden="true"></i>
|
||||
{'Delete'|t}
|
||||
</a>
|
||||
<a href="" class="actions-change-visibility button" data-visibility="public">
|
||||
<i class="fa fa-globe" aria-hidden="true"></i>
|
||||
{'Set public'|t}
|
||||
</a>
|
||||
<a href="" class="actions-change-visibility button" data-visibility="private">
|
||||
<i class="fa fa-user-secret" aria-hidden="true"></i>
|
||||
{'Set private'|t}
|
||||
</a>
|
||||
<a href="" class="subheader-opener button" data-open-id="bulk-tag-action-add">
|
||||
<i class="fa fa-tag" aria-hidden="true"></i>
|
||||
{'Add tags'|t}
|
||||
</a>
|
||||
<a href="" class="subheader-opener button" data-open-id="bulk-tag-action-delete">
|
||||
<i class="fa fa-window-close" aria-hidden="true"></i>
|
||||
{'Delete tags'|t}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{$addDelete=['add', 'delete']}
|
||||
{loop="$addDelete"}
|
||||
<div id="bulk-tag-action-{$value}" class="subheader-form">
|
||||
<form class="pure-g" action="{$base_path}/admin/shaare/update-tags" method="post">
|
||||
<div class="pure-u-1">
|
||||
<span>
|
||||
<input
|
||||
type="text" name="tag" class="autofocus"
|
||||
aria-label="{$value === 'add' ? t('Tag to add') : t('Tag to delete')}"
|
||||
placeholder="{$value === 'add' ? t('Tag to add') : t('Tag to delete')}"
|
||||
autocomplete="off" data-multiple data-autofirst data-minChars="1"
|
||||
data-list="{loop="$tags"}{$key}, {/loop}"
|
||||
>
|
||||
<input type="hidden" name="action" value="{$value}" />
|
||||
<input type="hidden" name="id" value="" />
|
||||
<input type="hidden" name="token" value="{$token}" />
|
||||
</span>
|
||||
<a href="" class="button action">
|
||||
<i class="fa fa-tag" aria-hidden="true"></i>
|
||||
{$value === 'add' ? t('Add tag') : t('Delete tag')}
|
||||
</a>
|
||||
<a href="" class="subheader-opener button cancel" data-open-id="actions">{'Cancel'|t}</a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
{/loop}
|
||||
{/if}
|
||||
|
||||
{if="!$is_logged_in"}
|
||||
<form method="post" name="loginform">
|
||||
<div class="subheader-form header-login-form" id="header-login-form">
|
||||
<input type="text" name="login" aria-label="{'Username'|t}" placeholder="{'Username'|t}" autocapitalize="off" >
|
||||
<input type="password" name="password" aria-label="{'Password'|t}" placeholder="{'Password'|t}" >
|
||||
<div class="remember-me">
|
||||
<input type="checkbox" name="longlastingsession" id="longlastingsession" checked>
|
||||
<label for="longlastingsession">{'Remember me'|t}</label>
|
||||
</div>
|
||||
<input type="hidden" name="token" value="{$token}">
|
||||
<input type="hidden" name="returnurl">
|
||||
<input type="submit" value="Login">
|
||||
</div>
|
||||
</form>
|
||||
{/if}
|
||||
{if="!empty($newVersion) || !empty($versionError)"}
|
||||
<div class="pure-g new-version-message pure-alert pure-alert-warning pure-alert-closable">
|
||||
<div class="pure-u-2-24"></div>
|
||||
{if="$newVersion"}
|
||||
<div class="pure-u-20-24">
|
||||
Shaarli {$newVersion}
|
||||
<a href="https://github.com/shaarli/Shaarli/releases">{'is available'|t}</a>.
|
||||
</div>
|
||||
{/if}
|
||||
{if="$versionError"}
|
||||
<div class="pure-u-20-24">
|
||||
{'Error'|t}: {$versionError}
|
||||
</div>
|
||||
{/if}
|
||||
<div class="pure-u-2-24">
|
||||
<i id="new-version-dismiss" class="fa fa-times pure-alert-close"></i>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{if="!empty($plugin_errors) && $is_logged_in"}
|
||||
<div class="pure-g new-version-message pure-alert pure-alert-error pure-alert-closable" id="shaarli-errors-alert">
|
||||
<div class="pure-u-2-24"></div>
|
||||
<div class="pure-u-20-24">
|
||||
{loop="plugin_errors"}
|
||||
<p>{$value}</p>
|
||||
{/loop}
|
||||
</div>
|
||||
<div class="pure-u-2-24">
|
||||
<i class="fa fa-times pure-alert-close"></i>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{if="!empty($global_errors)"}
|
||||
<div class="pure-g header-alert-message pure-alert pure-alert-error pure-alert-closable" id="shaarli-errors-alert">
|
||||
<div class="pure-u-2-24"></div>
|
||||
<div class="pure-u-20-24">
|
||||
{loop="$global_errors"}
|
||||
<p>{$value}</p>
|
||||
{/loop}
|
||||
</div>
|
||||
<div class="pure-u-2-24">
|
||||
<i class="fa fa-times pure-alert-close"></i>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{if="!empty($global_warnings)"}
|
||||
<div class="pure-g header-alert-message pure-alert pure-alert-warning pure-alert-closable" id="shaarli-warnings-alert">
|
||||
<div class="pure-u-2-24"></div>
|
||||
<div class="pure-u-20-24">
|
||||
{loop="global_warnings"}
|
||||
<p>{$value}</p>
|
||||
{/loop}
|
||||
</div>
|
||||
<div class="pure-u-2-24">
|
||||
<i class="fa fa-times pure-alert-close"></i>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{if="!empty($global_successes)"}
|
||||
<div class="pure-g header-alert-message new-version-message pure-alert pure-alert-success pure-alert-closable" id="shaarli-success-alert">
|
||||
<div class="pure-u-2-24"></div>
|
||||
<div class="pure-u-20-24">
|
||||
{loop="$global_successes"}
|
||||
<p>{$value}</p>
|
||||
{/loop}
|
||||
</div>
|
||||
<div class="pure-u-2-24">
|
||||
<i class="fa fa-times pure-alert-close"></i>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="clear"></div>
|
59
morgan/picwall.html
Normal file
59
morgan/picwall.html
Normal file
@ -0,0 +1,59 @@
|
||||
<!DOCTYPE html>
|
||||
<html{if="$language !== 'auto'"} lang="{$language}"{/if}>
|
||||
<head>
|
||||
{include="includes"}
|
||||
</head>
|
||||
<body>
|
||||
{include="page.header"}
|
||||
|
||||
{if="count($linksToDisplay)===0 && $is_logged_in"}
|
||||
<div class="pure-g pure-alert pure-alert-warning page-single-alert">
|
||||
<div class="pure-u-1 center">
|
||||
{'There is no cached thumbnail.'|t}
|
||||
<a href="{$base_path}/admin/thumbnails">{'Try to synchronize them.'|t}</a>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-1-6 pure-u-1-24"></div>
|
||||
<div class="pure-u-lg-2-3 pure-u-22-24 page-form page-visitor">
|
||||
{$countPics=count($linksToDisplay)}
|
||||
<h2 class="window-title">{'Picture Wall'|t} - {$countPics} {'pics'|t}</h2>
|
||||
|
||||
<div id="plugin_zone_start_picwall" class="plugin_zone">
|
||||
{loop="$plugin_start_zone"}
|
||||
{$value}
|
||||
{/loop}
|
||||
</div>
|
||||
|
||||
<div id="picwall-container" class="picwall-container" role="list">
|
||||
{loop="$linksToDisplay"}
|
||||
<div class="picwall-pictureframe" role="listitem">
|
||||
{ignore}RainTPL hack: put the 2 src on two different line to avoid path replace bug{/ignore}
|
||||
<img data-src="{$root_path}/{$value.thumbnail}#" class="b-lazy"
|
||||
src=""
|
||||
alt="" width="{$thumbnails_width}" height="{$thumbnails_height}" />
|
||||
<a href="{$value.real_url}"><span class="info">{$value.title}</span></a>
|
||||
{loop="$value.picwall_plugin"}
|
||||
{$value}
|
||||
{/loop}
|
||||
</div>
|
||||
{/loop}
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
|
||||
<div id="plugin_zone_end_picwall" class="plugin_zone">
|
||||
{loop="$plugin_end_zone"}
|
||||
{$value}
|
||||
{/loop}
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-u-lg-1-6 pure-u-1-24"></div>
|
||||
</div>
|
||||
|
||||
{include="page.footer"}
|
||||
<script src="{$asset_path}/js/thumbnails.min.js?v={$version_hash}#"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
183
morgan/pluginsadmin.html
Normal file
183
morgan/pluginsadmin.html
Normal file
@ -0,0 +1,183 @@
|
||||
<!DOCTYPE html>
|
||||
<html{if="$language !== 'auto'"} lang="{$language}"{/if}>
|
||||
<head>
|
||||
{include="includes"}
|
||||
</head>
|
||||
<body>
|
||||
{include="page.header"}
|
||||
|
||||
<noscript>
|
||||
<div class="pure-g new-version-message pure-alert pure-alert-warning">
|
||||
<div class="pure-u-2-24"></div>
|
||||
<div class="pure-u-20-24">
|
||||
{'You have to enable JavaScript to change plugin loading order.'|t}
|
||||
</div>
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
</noscript>
|
||||
|
||||
<form method="POST" action="{$base_path}/admin/plugins" name="pluginform" id="pluginform" class="pluginform-container">
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-1-8 pure-u-1-24"></div>
|
||||
<div class="pure-u-lg-3-4 pure-u-22-24 page-form page-form-complete">
|
||||
<h2 class="window-title">{'Plugin administration'|t}</h2>
|
||||
|
||||
<section id="enabled_plugins">
|
||||
<h3 class="window-subtitle">{'Enabled Plugins'|t}</h3>
|
||||
|
||||
<div>
|
||||
{if="count($enabledPlugins)==0"}
|
||||
<p class="center">{'No plugin enabled.'|t}</p>
|
||||
{else}
|
||||
<table id="plugin_table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="center">{'Enabled'|t}</th>
|
||||
<th>{'Name'|t}</th>
|
||||
<th><div class="pure-u-0 pure-u-lg-visible">{'Description'|t}</div></th>
|
||||
<th class="center">{'Order'|t}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{loop="$enabledPlugins"}
|
||||
<tr data-line="{$key}" data-order="{$counter}" class="main-row">
|
||||
<td class="center"><input type="checkbox" name="{$key}" id="{$key}" checked="checked"></td>
|
||||
<td class="center">
|
||||
<label for="{$key}"><strong>{function="str_replace('_', ' ', $key)"}</strong></label>
|
||||
</td>
|
||||
<td><div class="pure-u-0 pure-u-lg-visible"><label for="{$key}">{$value.description}</label></div></td>
|
||||
<td class="center">
|
||||
{if="count($enabledPlugins)>1"}
|
||||
<a href="#" class="order order-up">▲</a>
|
||||
<a href="#" class="order order-down">▼</a>
|
||||
{/if}
|
||||
<input type="hidden" name="order_{$key}" value="{$counter}">
|
||||
</td>
|
||||
</tr>
|
||||
<tr data-line="{$key}" data-order="{$counter}" class="pure-u-lg-0 mobile-row">
|
||||
<td colspan="4"><label for="{$key}">{$value.description}</label></td>
|
||||
</tr>
|
||||
{/loop}
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<th class="center">{'Enabled'|t}</th>
|
||||
<th>{'Name'|t}</th>
|
||||
<th><div class="pure-u-0 pure-u-lg-visible">{'Description'|t}</div></th>
|
||||
<th class="center">{'Order'|t}</th>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
{/if}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="disabled_plugins">
|
||||
<h3 class="window-subtitle">{'Disabled Plugins'|t}</h3>
|
||||
|
||||
<div>
|
||||
{if="count($disabledPlugins)==0"}
|
||||
<p class="center">{'No plugin disabled.'|t}</p>
|
||||
{else}
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="center">{'Enabled'|t}</th>
|
||||
<th>{'Name'|t}</th>
|
||||
<th><div class="pure-u-0 pure-u-lg-visible">{'Description'|t}</div></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{loop="$disabledPlugins"}
|
||||
<tr class="main-row">
|
||||
<td class="center"><input type="checkbox" name="{$key}" id="{$key}"></td>
|
||||
<td class="center">
|
||||
<label for="{$key}"><strong>{function="str_replace('_', ' ', $key)"}</strong></label>
|
||||
</td>
|
||||
<td><div class="pure-u-0 pure-u-lg-visible">
|
||||
<label for="{$key}">{$value.description}</label>
|
||||
</div></td>
|
||||
</tr>
|
||||
<tr class="pure-u-lg-0 mobile-row">
|
||||
<td colspan="3"><label for="{$key}">{$value.description}</label></td>
|
||||
</tr>
|
||||
{/loop}
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<th class="center">{'Enabled'|t}</th>
|
||||
<th>{'Name'|t}</th>
|
||||
<th><div class="pure-u-0 pure-u-lg-visible">{'Description'|t}</div></th>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
{/if}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="center more">
|
||||
{"More plugins available"|t}
|
||||
<a href="{$root_path}/doc/html/Community-and-related-software/#third-party-plugins">{"in the documentation"|t}</a>.
|
||||
</div>
|
||||
<div class="center">
|
||||
<input type="submit" value="{'Save'|t}" name="save">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" name="token" value="{$token}">
|
||||
</form>
|
||||
|
||||
<form action="{$base_path}/admin/plugins" method="POST">
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-1-8 pure-u-1-24"></div>
|
||||
<div class="pure-u-lg-3-4 pure-u-22-24 page-form page-form-light">
|
||||
<h2 class="window-title">{'Plugin configuration'|t}</h2>
|
||||
<section id="plugin_parameters">
|
||||
<div>
|
||||
{if="count($enabledPlugins)==0"}
|
||||
<p class="center">{'No plugin enabled.'|t}</p>
|
||||
{else}
|
||||
{$nbParameters=0}
|
||||
{loop="$enabledPlugins"}
|
||||
{$nbParameters=$nbParameters+count($value.parameters)}
|
||||
{if="count($value.parameters) > 0"}
|
||||
<div class="plugin_parameters">
|
||||
<h3 class="window-subtitle">{function="str_replace('_', ' ', $key)"}</h3>
|
||||
{loop="$value.parameters"}
|
||||
<div class="plugin_parameter">
|
||||
<p class="float_label">
|
||||
<label for="{$key}">
|
||||
<code>{$key}</code>
|
||||
{if="isset($value.desc)"}
|
||||
· {$value.desc}
|
||||
{/if}
|
||||
</label>
|
||||
</p>
|
||||
<div class="float_input">
|
||||
<input name="{$key}" value="{$value.value}" id="{$key}" type="text" />
|
||||
</div>
|
||||
</div>
|
||||
{/loop}
|
||||
</div>
|
||||
{/if}
|
||||
{/loop}
|
||||
{if="$nbParameters===0"}
|
||||
<p class="center">{'No parameter available.'|t}</p>
|
||||
{else}
|
||||
<div class="center">
|
||||
<input type="submit" name="parameters_form" value="{'Save'|t}"/>
|
||||
</div>
|
||||
{/if}
|
||||
{/if}
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" name="token" value="{$token}">
|
||||
</form>
|
||||
|
||||
{include="page.footer"}
|
||||
<script src="{$asset_path}/js/pluginsadmin.min.js?v={$version_hash}#"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
13
morgan/pluginscontent.html
Normal file
13
morgan/pluginscontent.html
Normal file
@ -0,0 +1,13 @@
|
||||
<!DOCTYPE html>
|
||||
<html{if="$language !== 'auto'"} lang="{$language}"{/if}>
|
||||
<head>
|
||||
{include="includes"}
|
||||
</head>
|
||||
<body>
|
||||
{include="page.header"}
|
||||
|
||||
{$content}
|
||||
|
||||
{include="page.footer"}
|
||||
</body>
|
||||
</html>
|
129
morgan/server.html
Normal file
129
morgan/server.html
Normal file
@ -0,0 +1,129 @@
|
||||
<!DOCTYPE html>
|
||||
<html{if="$language !== 'auto'"} lang="{$language}"{/if}>
|
||||
<head>
|
||||
{include="includes"}
|
||||
</head>
|
||||
<body>
|
||||
{include="page.header"}
|
||||
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-1-4 pure-u-1-24"></div>
|
||||
<div class="pure-u-lg-1-2 pure-u-22-24 page-form server-tables-page">
|
||||
<h2 class="window-title">{'Server administration'|t}</h2>
|
||||
|
||||
<h3 class="window-subtitle">{'General'|t}</h3>
|
||||
|
||||
<div class="pure-g server-row">
|
||||
<div class="pure-u-lg-1-2 pure-u-1 server-label">
|
||||
<p>{'Index URL'|t}</p>
|
||||
</div>
|
||||
<div class="pure-u-lg-1-2 pure-u-1">
|
||||
<p><a href="{$index_url}" title="{$pagetitle}">{$index_url}</a></p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-g server-row">
|
||||
<div class="pure-u-lg-1-2 pure-u-1 server-label">
|
||||
<p>{'Base path'|t}</p>
|
||||
</div>
|
||||
<div class="pure-u-lg-1-2 pure-u-1">
|
||||
<p>{$base_path}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-g server-row">
|
||||
<div class="pure-u-lg-1-2 pure-u-1 server-label">
|
||||
<p>{'Client IP'|t}</p>
|
||||
</div>
|
||||
<div class="pure-u-lg-1-2 pure-u-1">
|
||||
<p>{$client_ip}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-g server-row">
|
||||
<div class="pure-u-lg-1-2 pure-u-1 server-label">
|
||||
<p>{'Trusted reverse proxies'|t}</p>
|
||||
</div>
|
||||
<div class="pure-u-lg-1-2 pure-u-1">
|
||||
{if="count($trusted_proxies) > 0"}
|
||||
<p>
|
||||
{loop="$trusted_proxies"}
|
||||
{$value}<br>
|
||||
{/loop}
|
||||
</p>
|
||||
{else}
|
||||
<p>{'N/A'|t}</p>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{include="server.requirements"}
|
||||
|
||||
<h3 class="window-subtitle">{'Version'|t}</h3>
|
||||
|
||||
<div class="pure-g server-row">
|
||||
<div class="pure-u-lg-1-2 pure-u-1 server-label">
|
||||
<p>{'Current version'|t}</p>
|
||||
</div>
|
||||
<div class="pure-u-lg-1-2 pure-u-1">
|
||||
<p>{$current_version}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="pure-g server-row">
|
||||
<div class="pure-u-lg-1-2 pure-u-1 server-label">
|
||||
<p>{'Latest release'|t}</p>
|
||||
</div>
|
||||
<div class="pure-u-lg-1-2 pure-u-1">
|
||||
<p>
|
||||
<a href="{$release_url}" title="{'Visit releases page on Github'|t}">
|
||||
{$latest_version}
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h3 class="window-subtitle">{'Thumbnails'|t}</h3>
|
||||
|
||||
<div class="pure-g server-row">
|
||||
<div class="pure-u-lg-1-2 pure-u-1 server-label">
|
||||
<p>{'Thumbnails status'|t}</p>
|
||||
</div>
|
||||
<div class="pure-u-lg-1-2 pure-u-1">
|
||||
<p>
|
||||
{if="$thumbnails_mode==='all'"}
|
||||
{'All'|t}
|
||||
{elseif="$thumbnails_mode==='common'"}
|
||||
{'Only common media hosts'|t}
|
||||
{else}
|
||||
{'None'|t}
|
||||
{/if}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{if="$thumbnails_mode!=='none'"}
|
||||
<div class="center tools-item">
|
||||
<a href="{$base_path}/admin/thumbnails" title="{'Synchronize all link thumbnails'|t}">
|
||||
<span class="pure-button pure-u-lg-2-3 pure-u-3-4">{'Synchronize thumbnails'|t}</span>
|
||||
</a>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<h3 class="window-subtitle">{'Cache'|t}</h3>
|
||||
|
||||
<div class="center tools-item">
|
||||
<a href="{$base_path}/admin/clear-cache?type=main">
|
||||
<span class="pure-button pure-u-lg-2-3 pure-u-3-4">{'Clear main cache'|t}</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="center tools-item">
|
||||
<a href="{$base_path}/admin/clear-cache?type=thumbnails">
|
||||
<span class="pure-button pure-u-lg-2-3 pure-u-3-4">{'Clear thumbnails cache'|t}</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{include="page.footer"}
|
||||
|
||||
</body>
|
||||
</html>
|
68
morgan/server.requirements.html
Normal file
68
morgan/server.requirements.html
Normal file
@ -0,0 +1,68 @@
|
||||
<div class="server-tables">
|
||||
<h3 class="window-subtitle">{'Permissions'|t}</h3>
|
||||
|
||||
{if="count($permissions) > 0"}
|
||||
<p class="center">
|
||||
<i class="fa fa-close fa-color-red" aria-hidden="true"></i>
|
||||
{'There are permissions that need to be fixed.'|t}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
{loop="$permissions"}
|
||||
<div class="center">{$value}</div>
|
||||
{/loop}
|
||||
</p>
|
||||
{else}
|
||||
<p class="center">
|
||||
<i class="fa fa-check fa-color-green" aria-hidden="true"></i>
|
||||
{'All read/write permissions are properly set.'|t}
|
||||
</p>
|
||||
{/if}
|
||||
|
||||
<h3 class="window-subtitle">PHP</h3>
|
||||
|
||||
<p class="center">
|
||||
<strong>{'Running PHP'|t} {$php_version}</strong>
|
||||
{if="$php_has_reached_eol"}
|
||||
<i class="fa fa-circle fa-color-orange" aria-label="hidden"></i><br>
|
||||
{'End of life: '|t} {$php_eol}
|
||||
{else}
|
||||
<i class="fa fa-circle fa-color-green" aria-label="hidden"></i><br>
|
||||
{/if}
|
||||
</p>
|
||||
|
||||
<table class="center">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{'Extension'|t}</th>
|
||||
<th>{'Usage'|t}</th>
|
||||
<th>{'Status'|t}</th>
|
||||
<th>{'Loaded'|t}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{loop="$php_extensions"}
|
||||
<tr>
|
||||
<td>{$value.name}</td>
|
||||
<td>{$value.desc}</td>
|
||||
<td>{$value.required ? t('Required') : t('Optional')}</td>
|
||||
<td>
|
||||
{if="$value.loaded"}
|
||||
{$classLoaded="fa-color-green"}
|
||||
{$strLoaded=t('Loaded')}
|
||||
{else}
|
||||
{$strLoaded=t('Not loaded')}
|
||||
{if="$value.required"}
|
||||
{$classLoaded="fa-color-red"}
|
||||
{else}
|
||||
{$classLoaded="fa-color-orange"}
|
||||
{/if}
|
||||
{/if}
|
||||
|
||||
<i class="fa fa-circle {$classLoaded}" aria-label="{$strLoaded}" title="{$strLoaded}"></i>
|
||||
</td>
|
||||
</tr>
|
||||
{/loop}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
72
morgan/tag.cloud.html
Normal file
72
morgan/tag.cloud.html
Normal file
@ -0,0 +1,72 @@
|
||||
<!DOCTYPE html>
|
||||
<html{if="$language !== 'auto'"} lang="{$language}"{/if}>
|
||||
<head>
|
||||
{include="includes"}
|
||||
</head>
|
||||
<body>
|
||||
{include="page.header"}
|
||||
|
||||
{include="tag.sort"}
|
||||
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-1-6 pure-u-1-24"></div>
|
||||
<div class="pure-u-lg-2-3 pure-u-22-24 page-form page-visitor">
|
||||
{$countTags=count($tags)}
|
||||
<h2 class="window-title">{'Tag cloud'|t} - {$countTags} {'tags'|t}</h2>
|
||||
{if="!empty($search_tags)"}
|
||||
<p class="center">
|
||||
<a href="{$base_path}/?searchtags={$search_tags_url}" class="pure-button pure-button-shaarli">
|
||||
{'List all links with those tags'|t}
|
||||
</a>
|
||||
</p>
|
||||
{/if}
|
||||
|
||||
<div id="search-tagcloud" class="pure-g">
|
||||
<div class="pure-u-lg-1-4"></div>
|
||||
<div class="pure-u-1 pure-u-lg-1-2">
|
||||
<form method="GET">
|
||||
<input type="hidden" name="do" value="tagcloud">
|
||||
<input type="text" name="searchtags" aria-label="{'Filter by tag'|t}" placeholder="{'Filter by tag'|t}"
|
||||
{if="!empty($search_tags)"}
|
||||
value="{$search_tags}"
|
||||
{/if}
|
||||
autocomplete="off" data-multiple data-autofirst data-minChars="1"
|
||||
data-list="{loop="$tags"}{$key}, {/loop}"
|
||||
class="autofocus"
|
||||
>
|
||||
<button type="submit" class="search-button" aria-label="{'Search'|t}"><i class="fa fa-search" aria-hidden="true"></i></button>
|
||||
</form>
|
||||
</div>
|
||||
<div class="pure-u-lg-1-4"></div>
|
||||
</div>
|
||||
|
||||
<div id="plugin_zone_start_tagcloud" class="plugin_zone">
|
||||
{loop="$plugin_start_zone"}
|
||||
{$value}
|
||||
{/loop}
|
||||
</div>
|
||||
|
||||
<div id="cloudtag" class="cloudtag-container">
|
||||
{loop="tags"}
|
||||
<a href="{$base_path}/?searchtags={$tags_url.$key1}{$tags_separator|urlencode}{$search_tags_url}" style="font-size:{$value.size}em;">{$key}</a
|
||||
><a href="{$base_path}/add-tag/{$tags_url.$key1}" title="{'Filter by tag'|t}" class="count">{$value.count}</a>
|
||||
{loop="$value.tag_plugin"}
|
||||
{$value}
|
||||
{/loop}
|
||||
{/loop}
|
||||
</div>
|
||||
|
||||
<div id="plugin_zone_end_tagcloud" class="plugin_zone">
|
||||
{loop="$plugin_end_zone"}
|
||||
{$value}
|
||||
{/loop}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{include="tag.sort"}
|
||||
|
||||
{include="page.footer"}
|
||||
</body>
|
||||
</html>
|
||||
|
91
morgan/tag.list.html
Normal file
91
morgan/tag.list.html
Normal file
@ -0,0 +1,91 @@
|
||||
<!DOCTYPE html>
|
||||
<html{if="$language !== 'auto'"} lang="{$language}"{/if}>
|
||||
<head>
|
||||
{include="includes"}
|
||||
</head>
|
||||
<body>
|
||||
{include="page.header"}
|
||||
|
||||
{include="tag.sort"}
|
||||
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-1-6 pure-u-1-24"></div>
|
||||
<div class="pure-u-lg-2-3 pure-u-22-24 page-form page-visitor">
|
||||
{$countTags=count($tags)}
|
||||
<h2 class="window-title">{'Tag list'|t} - {$countTags} {'tags'|t}</h2>
|
||||
{if="!empty($search_tags)"}
|
||||
<p class="center">
|
||||
<a href="{$base_path}/?searchtags={$search_tags_url}" class="pure-button pure-button-shaarli">
|
||||
{'List all links with those tags'|t}
|
||||
</a>
|
||||
</p>
|
||||
{/if}
|
||||
|
||||
<div id="search-tagcloud" class="pure-g searchform-block search-tagcloud">
|
||||
<div class="pure-u-lg-1-4"></div>
|
||||
<div class="pure-u-1 pure-u-lg-1-2">
|
||||
<form method="GET">
|
||||
<input type="hidden" name="do" value="taglist">
|
||||
<input type="text" name="searchtags" aria-label="{'Filter by tag'|t}" placeholder="{'Filter by tag'|t}"
|
||||
{if="!empty($search_tags)"}
|
||||
value="{$search_tags}"
|
||||
{/if}
|
||||
autocomplete="off" data-multiple data-autofirst data-minChars="1"
|
||||
data-list="{loop="$tags"}{$key}, {/loop}"
|
||||
>
|
||||
<button type="submit" class="search-button" aria-label="{'Search'|t}"><i class="fa fa-search" aria-hidden="true"></i></button>
|
||||
</form>
|
||||
</div>
|
||||
<div class="pure-u-lg-1-4"></div>
|
||||
</div>
|
||||
|
||||
<div id="plugin_zone_start_tagcloud" class="plugin_zone">
|
||||
{loop="$plugin_start_zone"}
|
||||
{$value}
|
||||
{/loop}
|
||||
</div>
|
||||
|
||||
<div id="taglist" class="taglist-container">
|
||||
{loop="tags"}
|
||||
<div class="tag-list-item pure-g" data-tag="{$key}" data-tag-url="{$tags_url.$key1}">
|
||||
<div class="pure-u-1">
|
||||
{if="$is_logged_in===true"}
|
||||
<a href="#" class="delete-tag" aria-label="{'Delete'|t}"><i class="fa fa-trash" aria-hidden="true"></i></a>
|
||||
<a href="{$base_path}/admin/tags?fromtag={$tags_url.$key1}" class="rename-tag" aria-label="{'Rename tag'|t}">
|
||||
<i class="fa fa-pencil-square-o {$key}" aria-hidden="true"></i>
|
||||
</a>
|
||||
{/if}
|
||||
|
||||
<a href="{$base_path}/add-tag/{$tags_url.$key1}" title="{'Filter by tag'|t}" class="count">{$value}</a>
|
||||
<a href="{$base_path}/?searchtags={$tags_url.$key1} {$search_tags_url}" class="tag-link">{$key}</a>
|
||||
|
||||
{loop="$value.tag_plugin"}
|
||||
{$value}
|
||||
{/loop}
|
||||
</div>
|
||||
{if="$is_logged_in===true"}
|
||||
<div class="rename-tag-form pure-u-1">
|
||||
<input type="text" name="{$key}" value="{$key}" class="rename-tag-input" />
|
||||
<a href="#" class="validate-rename-tag"><i class="fa fa-check" aria-hidden="true"></i></a>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
{/loop}
|
||||
</div>
|
||||
|
||||
<div id="plugin_zone_end_tagcloud" class="plugin_zone">
|
||||
{loop="$plugin_end_zone"}
|
||||
{$value}
|
||||
{/loop}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{if="$is_logged_in===true"}
|
||||
<input type="hidden" name="taglist" value="{loop="$tags"}{$key} {/loop}"
|
||||
{/if}
|
||||
|
||||
{include="page.footer"}
|
||||
</body>
|
||||
</html>
|
||||
|
8
morgan/tag.sort.html
Normal file
8
morgan/tag.sort.html
Normal file
@ -0,0 +1,8 @@
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-1 pure-alert pure-alert-success tag-sort">
|
||||
{'Sort by:'|t}
|
||||
<a href="{$base_path}/tags/cloud">{'Cloud'|t}</a>
|
||||
<a href="{$base_path}/tags/list?sort=usage">{'Most used'|t}</a>
|
||||
<a href="{$base_path}/tags/list?sort=alpha">{'Alphabetical'|t}</a>
|
||||
</div>
|
||||
</div>
|
48
morgan/thumbnails.html
Normal file
48
morgan/thumbnails.html
Normal file
@ -0,0 +1,48 @@
|
||||
<!DOCTYPE html>
|
||||
<html{if="$language !== 'auto'"} lang="{$language}"{/if}>
|
||||
<head>
|
||||
{include="includes"}
|
||||
</head>
|
||||
<body>
|
||||
{include="page.header"}
|
||||
|
||||
<div class="pure-g thumbnails-page-container">
|
||||
<div class="pure-u-lg-1-3 pure-u-1-24"></div>
|
||||
<div class="pure-u-lg-1-3 pure-u-22-24 page-form page-form-light">
|
||||
<h2 class="window-title">{'Thumbnails update'|t}</h2>
|
||||
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-1-3 pure-u-1-24"></div>
|
||||
<div class="pure-u-lg-1-3 pure-u-22-24">
|
||||
<div class="thumbnail-placeholder" style="width: {$thumbnails_width}px; height: {$thumbnails_height}px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-1-12"></div>
|
||||
<div class="pure-u-5-6">
|
||||
<div class="thumbnail-link-title"></div>
|
||||
|
||||
<div class="progressbar">
|
||||
<div></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-1-3 pure-u-1-24"></div>
|
||||
<div class="pure-u-lg-1-3 pure-u-22-24">
|
||||
<div class="progress-counter">
|
||||
<span class="progress-current">0</span> / <span class="progress-total">{$ids|count}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<input type="hidden" name="ids" value="{function="implode(',', $ids)"}" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{include="page.footer"}
|
||||
<script src="{$asset_path}/js/thumbnails_update.min.js?v={$version_hash}#"></script>
|
||||
</body>
|
||||
</html>
|
137
morgan/tools.html
Normal file
137
morgan/tools.html
Normal file
@ -0,0 +1,137 @@
|
||||
<!DOCTYPE html>
|
||||
<html{if="$language !== 'auto'"} lang="{$language}"{/if}>
|
||||
<head>
|
||||
{include="includes"}
|
||||
</head>
|
||||
<body>
|
||||
{include="page.header"}
|
||||
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-1-3 pure-u-1-24"></div>
|
||||
<div class="pure-u-lg-1-3 pure-u-22-24 page-form page-form-light">
|
||||
<h2 class="window-title">{'Settings'|t}</h2>
|
||||
<div class="tools-item">
|
||||
<a href="{$base_path}/admin/configure" title="{'Change Shaarli settings: title, timezone, etc.'|t}">
|
||||
<span class="pure-button pure-u-lg-2-3 pure-u-3-4">{'Configure your Shaarli'|t}</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="tools-item">
|
||||
<a href="{$base_path}/admin/plugins" title="{'Enable, disable and configure plugins'|t}">
|
||||
<span class="pure-button pure-u-lg-2-3 pure-u-3-4">{'Plugin administration'|t}</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="tools-item">
|
||||
<a href="{$base_path}/admin/server"
|
||||
title="{'Check instance\'s server configuration'|t}">
|
||||
<span class="pure-button pure-u-lg-2-3 pure-u-3-4">{'Server administration'|t}</span>
|
||||
</a>
|
||||
</div>
|
||||
{if="!$openshaarli"}
|
||||
<div class="tools-item">
|
||||
<a href="{$base_path}/admin/password" title="{'Change your password'|t}">
|
||||
<span class="pure-button pure-u-lg-2-3 pure-u-3-4">{'Change password'|t}</span>
|
||||
</a>
|
||||
</div>
|
||||
{/if}
|
||||
<div class="tools-item">
|
||||
<a href="{$base_path}/admin/tags" title="{'Rename or delete a tag in all links'|t}">
|
||||
<span class="pure-button pure-u-lg-2-3 pure-u-3-4">{'Manage tags'|t}</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="tools-item">
|
||||
<a href="{$base_path}/admin/import"
|
||||
title="{'Import Netscape HTML bookmarks (as exported from Firefox, Chrome, Opera, delicious...)'|t}">
|
||||
<span class="pure-button pure-u-lg-2-3 pure-u-3-4">{'Import links'|t}</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="tools-item">
|
||||
<a href="{$base_path}/admin/export"
|
||||
title="{'Export Netscape HTML bookmarks (which can be imported in Firefox, Chrome, Opera, delicious...)'|t}">
|
||||
<span class="pure-button pure-u-lg-2-3 pure-u-3-4">{'Export database'|t}</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
{loop="$tools_plugin"}
|
||||
<div class="tools-item">
|
||||
{$value}
|
||||
</div>
|
||||
{/loop}
|
||||
</div>
|
||||
|
||||
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-1-3 pure-u-1-24"></div>
|
||||
<div class="pure-u-lg-1-3 pure-u-22-24 page-form page-form-light">
|
||||
<h2 class="window-title">{'Bookmarklets'|t}</h2>
|
||||
<p>
|
||||
{'Drag one of these button to your bookmarks toolbar or right-click it and "Bookmark This Link"'|t},
|
||||
{'then click on the bookmarklet in any page you want to share.'|t}
|
||||
</p>
|
||||
<div class="tools-item">
|
||||
<a title="{'Drag this link to your bookmarks toolbar or right-click it and Bookmark This Link'|t},
|
||||
{'then click ✚Shaare link button in any page you want to share'|t}"
|
||||
class="bookmarklet-link"
|
||||
href="javascript:(
|
||||
function(){
|
||||
var%20url%20=%20location.href;
|
||||
var%20title%20=%20document.title%20||%20url;
|
||||
var%20desc=document.getSelection().toString();
|
||||
if(desc.length>4000){
|
||||
desc=desc.substr(0,4000)+'...';
|
||||
alert('{function="str_replace(' ', '%20', t('The selected text is too long, it will be truncated.'))"}');
|
||||
}
|
||||
window.open(
|
||||
'{$pageabsaddr}admin/shaare?post='%20+%20encodeURIComponent(url)+
|
||||
'&title='%20+%20encodeURIComponent(title)+
|
||||
'&description='%20+%20encodeURIComponent(desc)+
|
||||
'&source=bookmarklet','_blank','menubar=no,height=800,width=600,toolbar=no,scrollbars=yes,status=no,dialog=1'
|
||||
);
|
||||
}
|
||||
)();">
|
||||
<span class="pure-button pure-u-lg-2-3 pure-u-3-4">✚ {'Shaare link'|t}</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="tools-item">
|
||||
<a title="{'Drag this link to your bookmarks toolbar or right-click it and Bookmark This Link'|t},
|
||||
{'Then click ✚Add Note button anytime to start composing a private Note (text post) to your Shaarli'|t}"
|
||||
class="bookmarklet-link"
|
||||
href="javascript:(
|
||||
function(){
|
||||
var%20desc=document.getSelection().toString();
|
||||
if(desc.length>4000){
|
||||
desc=desc.substr(0,4000)+'...';
|
||||
alert('{function="str_replace(' ', '%20', t('The selected text is too long, it will be truncated.'))"}');
|
||||
}
|
||||
window.open(
|
||||
'{$pageabsaddr}admin/shaare?private=1&post='+
|
||||
'&description='%20+%20encodeURIComponent(desc)+
|
||||
'&source=bookmarklet','_blank','menubar=no,height=800,width=600,toolbar=no,scrollbars=yes,status=no,dialog=1'
|
||||
);
|
||||
}
|
||||
)();">
|
||||
<span class="pure-button pure-u-lg-2-3 pure-u-3-4">✚ {'Add Note'|t}</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="pure-g">
|
||||
<div class="pure-u-lg-1-3 pure-u-1-24"></div>
|
||||
<div class="pure-u-lg-1-3 pure-u-22-24 page-form page-form-light">
|
||||
<h2 class="window-title">{'Third-party resources'|t}</h2>
|
||||
<div class="tools-item">
|
||||
<a href="https://shaarli.readthedocs.io/en/master/Community-and-related-software.html">
|
||||
<span class="pure-button pure-u-lg-2-3 pure-u-3-4">{'Community and related software'|t}</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{include="page.footer"}
|
||||
<input type="hidden" id="bookmarklet-alert"
|
||||
value="{'Drag this link to your bookmarks toolbar, or right-click it and choose Bookmark This Link'|t}">
|
||||
</body>
|
||||
</html>
|
Loading…
x
Reference in New Issue
Block a user