11 Commits

Author SHA1 Message Date
Luc Didry
8d20b3d934 🔖 — Bump version (0.17.0) 2023-12-30 09:12:51 +01:00
Luc Didry
9563e3a701 🔀 Merge remote-tracking branch 'origin/development' 2023-12-30 09:12:19 +01:00
Luc Didry
8f5b1df337 🩹 — Fix test configuration files 2023-12-30 09:07:17 +01:00
Luc Didry
e77943b1cc — Improve accessibility on index page 2023-12-30 09:04:32 +01:00
Luc Didry
0617683c63 — Mass delete button in "My images" page (#47) 2023-12-30 08:29:27 +01:00
Luc Didry
81701b6f60 — Ask for confirmation before deleting image on index page (#92) 2023-12-30 08:03:58 +01:00
Luc Didry
82f57fc72d — Allow to configure the directory where to store the images (#125) 2023-12-30 07:42:25 +01:00
Luc Didry
4de01f5f8b 🌐 — Correcting and improving pronunciation (fix #133) 2023-12-30 07:04:00 +01:00
Luc Didry
7e15ca9174 🔀 Merge remote-tracking branch 'nicofrand/master' into development 2023-12-30 06:45:35 +01:00
Luc Didry
5c0504d5d4 🐛 — AVIF format support (fix #137) 2023-12-30 06:43:51 +01:00
nicofrand
0080e26333 [themes/korrigan] Fix gallery's duplicated images 2023-12-29 11:04:43 +01:00
40 changed files with 645 additions and 240 deletions

View File

@@ -1,9 +1,16 @@
Revision history for Lutim
0.17.0 ????-??-??
0.18.0 ????-??-??
0.17.0 2023-12-30
- 🐛 — AVIF format support (#139)
- ✨ — Allow to configure the directory where to store the images (#125)
- ✨ — Ask for confirmation before deleting image on index page (#92)
- ✨ — Mass delete button in "My images" page (#47)
- ♿ — Improve accessibility on index page
0.16.0 2023-12-29
- ⬆️ UUpdate jQuery
- ⬆️ Update jQuery
- 💥 BREAKING CHANGE: no more twitter cards
- 🎨 — Use template literals in js
- 🐛 — Gallery, zip and random URLs are now updated when closing image dialog box

View File

@@ -109,6 +109,10 @@ sub startup {
$self->plugin('Lutim::Plugin::Helpers');
$self->plugin('Lutim::Plugin::Lang');
# Create directory if needed
mkdir($self->config('upload_dir'), 0700) unless (-d $self->config('upload_dir'));
die ('The upload directory ('.$self->config('upload_dir').') is not writable') unless (-w $self->config('upload_dir'));
# Minion
if ($config->{minion}->{enabled}) {
$self->config->{minion}->{dbtype} = 'sqlite' unless defined $config->{minion}->{dbtype};

View File

@@ -2,6 +2,7 @@
package Lutim::Controller::Image;
use Mojo::Asset::Memory;
use Mojo::Base 'Mojolicious::Controller';
use Mojo::File qw(path);
use Mojo::Util qw(url_escape url_unescape b64_encode encode);
use Mojo::JSON qw(true false);
use Lutim::DB::Image;
@@ -390,9 +391,6 @@ sub add {
my ($msg, $short, $real_short, $token, $thumb, $limit, $created);
# Check file type
if (index($mediatype, 'image/') >= 0) {
# Create directory if needed
mkdir('files', 0700) unless (-d 'files');
if ($c->req->is_limit_exceeded) {
$msg = $c->l('The file exceed the size limit (%1)', $c->req->max_message_size);
if (defined($c->param('format')) && $c->param('format') eq 'json') {
@@ -413,10 +411,12 @@ sub add {
# Save file and create record
my $filename = unidecode($upload->filename);
my $ext = ($filename =~ m/([^.]+)$/)[0];
my $path = 'files/'.$record->short.'.'.$ext;
my $path = path($c->config('upload_dir'), $record->short.'.'.$ext)->to_string;
my ($width, $height);
if ($im_loaded && $mediatype ne 'image/svg+xml' && $mediatype !~ m#image/(x-)?xcf# && $mediatype ne 'image/webp') { # ImageMagick don't work in Debian with svg (for now?)
if ($im_loaded && $mediatype ne 'image/svg+xml' # ImageMagick doesn't work with SVG, xcf or avif files
&& $mediatype !~ m#image/(x-)?xcf#
&& $mediatype ne 'image/avif') {
my $im = Image::Magick->new;
$im->BlobToImage($upload->slurp);
@@ -484,7 +484,9 @@ sub add {
}
unless (defined($keep_exif) && $keep_exif) {
if ($mediatype ne 'image/svg+xml' && $mediatype !~ m#image/(x-)?xcf# && $mediatype ne 'image/webp') {
# Exiftool cant process SVG or xcf files
if ($mediatype ne 'image/svg+xml'
&& $mediatype !~ m#image/(x-)?xcf#) {
# Remove the EXIF tags
my $data = new IO::Scalar \$upload->slurp();
my $et = Image::ExifTool->new;
@@ -642,7 +644,7 @@ sub short {
if ($image->mediatype eq 'image/gif') {
if (defined($image->width) && defined($image->height)) {
($width, $height) = ($image->width, $image->height);
} elsif ($im_loaded) {
} elsif ($im_loaded && $image->mediatype !~ m/xcf|avif/) {
my $upload = $c->decrypt($key, $image->path, $image->iv);
my $im = Image::Magick->new;
$im->BlobToImage($upload->slurp);

View File

@@ -23,6 +23,7 @@ our $default_config = {
watermark_enforce => 'none',
theme => 'default',
disable_api => 0,
upload_dir => 'files',
dbtype => 'sqlite',
db_path => 'lutim.db',
max_files_in_zip => 15,

View File

@@ -144,7 +144,7 @@ sub _render_file {
my $asset = Mojo::Asset::Memory->new;
$asset->add_chunk($cache->{asset});
if (defined $thumb && $im_loaded && $mediatype ne 'image/svg+xml' && $mediatype !~ m#image/(x-)?xcf# && $mediatype ne 'image/webp') { # ImageMagick don't work in Debian with svg (for now?)
if (defined $thumb && $im_loaded && $mediatype ne 'image/svg+xml' && $mediatype !~ m#image/(x-)?xcf# && $mediatype ne 'image/avif') { # ImageMagick don't work in Debian with svg (for now?)
my $im = Image::Magick->new;
$im->BlobToImage($asset->slurp);

View File

@@ -134,6 +134,15 @@
# optional, default is 0
#disable_api => 0,
# Define a path to the upload directory, where the uploaded images will be stored.
# You can define it relative to lutim directory or set an absolute path.
# The path is stored in database for each uploaded file, so youll need to do some
# SQL commands if you move the images in an other directory (if you keep the old directory
# where it was, you have nothing to do).
# Remember that it has to be in a directory writable by Lutim user
# optional, default is 'files'
#upload_dir => 'files',
# choose what database you want to use
# valid choices are sqlite and postgresql (all lowercase)
# optional, default is sqlite

View File

@@ -97,6 +97,29 @@
# optional, default is 0
#always_encrypt => 0,
# you can allow to use a watermark on the uploaded images (or enforce its use)
# define a path to the watermark image (provide an image with alpha channel)
# you can define the path relative to lutim directory or set an absolute path
# to disable the usage of a watermark, leave it blank or commented
# optional, no default
#watermark_path => '',
# the watermark can be a tiling one or a single one
# when using a small one, you can choose where to place it
# valid values are 'Center', 'North', 'NorthEast', 'East', 'SouthEast', 'South', 'SouthWest', 'West' and 'NorthWest' (case insensitive)
# optional, default is 'SouthEast'
#watermark_placement => 'SouthEast',
# choose which watermark (tiling, single or none) should be used by default
# valid values are 'tiling', 'single' or 'none' (case insensitive)
# optional, default is 'none'
#watermark_default => 'none',
# choose which watermark (tiling, single or none) should be enforced (users will always have a watermark and wont be able to disable it)
# valid values are 'tiling', 'single' or 'none' (case insensitive)
# optional, default is 'none'
#watermark_enforce => 'none',
# length of the image's delete token
# optional, default is 24
#token_length => 24,
@@ -107,6 +130,18 @@
# optional, defaut is /
#prefix => '/',
# if set to 1, Lutim will try to prevent its use without using the web interface
# optional, default is 0
#disable_api => 0,
# Define a path to the upload directory, where the uploaded images will be stored
# You can define it relative to lutim directory or set an absolute path
# The path is stored in database for each uploaded file, so youll need to do some
# SQL commands if you change the upload_dir after getting images uploaded.
# Remember that it has to be in a directory writable by Lutim user
# optional, default is 'files'
#upload_dir => 'files',
# choose what database you want to use
# valid choices are sqlite and postgresql (all lowercase)
# optional, default is sqlite
@@ -154,6 +189,29 @@
# }
#},
# set `ldap` if you want that only authenticated users can shorten URLs
# please note that everybody can still use shortend URLs
# optional, no default
#ldap => {
# uri => 'ldaps://ldap.example.org', # server URI
# user_tree => 'ou=users,dc=example,dc=org', # search base DN
# bind_dn => 'uid=ldap_user,ou=users,dc=example,dc=org', # search bind DN
# bind_pwd => 'secr3t', # search bind password
# user_attr => 'uid', # user attribute (uid, mail, sAMAccountName, etc.)
# user_filter => '(!(uid=ldap_user))', # user filter (to exclude some users, etc.)
#},
# set `htpasswd` if you want to use an htpasswd file instead of ldap
# create the file with `htpasswd -c lutim.passwd user`, update it with `htpasswd lutim.passwd user2`
# make sure that lutim can read the file!
# optional, no default
#htpasswd => 'lutim.passwd',
# if you've set ldap or htpasswd above, the session will last `session_duration` seconds before
# the user needs to reauthenticate
# optional, default is 3600
#session_duration => 3600,
# disable counters of images
# set to 1 to disable counters
# optional, counters are enabled by default
@@ -200,7 +258,7 @@
# optional, default is 0
#quiet_logs => 0,
# Content-Security-Policy header that will be sent by Lstu
# Content-Security-Policy header that will be sent by Lutim
# Set to '' to disable CSP header
# https://content-security-policy.com/ provides a good documentation about CSP.
# https://report-uri.com/home/generate provides a tool to generate a CSP header.
@@ -210,7 +268,7 @@
# the default value is good for `default` theme
#csp => "base-uri 'self'; connect-src 'self'; default-src 'none'; font-src 'self'; form-action 'self'; img-src 'self' data:; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'",
# X-Frame-Options header that will be sent by Lstu
# X-Frame-Options header that will be sent by Lutim
# Valid values are: 'DENY', 'SAMEORIGIN', 'ALLOW-FROM https://example.com/'
# Set to '' to disable X-Frame-Options header
# See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
@@ -219,18 +277,22 @@
# optional, default is 'DENY'
#x_frame_options => 'DENY',
# X-Content-Type-Options that will be sent by Lstu
# X-Content-Type-Options that will be sent by Lutim
# See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options
# Set to '' to disable X-Content-Type-Options header
# optional, default is 'nosniff'
#x_content_type_options => 'nosniff',
# X-XSS-Protection that will be sent by Lstu
# X-XSS-Protection that will be sent by Lutim
# See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection
# Set to '' to disable X-XSS-Protection header
# optional, default is '1; mode=block'
#x_xss_protection => '1; mode=block',
# if set, the uploaded images will use this domain
# optional
#fixed_domain => 'example.org',
##########################
# Lutim cron jobs settings
##########################

View File

@@ -97,6 +97,29 @@
# optional, default is 0
#always_encrypt => 0,
# you can allow to use a watermark on the uploaded images (or enforce its use)
# define a path to the watermark image (provide an image with alpha channel)
# you can define the path relative to lutim directory or set an absolute path
# to disable the usage of a watermark, leave it blank or commented
# optional, no default
#watermark_path => '',
# the watermark can be a tiling one or a single one
# when using a small one, you can choose where to place it
# valid values are 'Center', 'North', 'NorthEast', 'East', 'SouthEast', 'South', 'SouthWest', 'West' and 'NorthWest' (case insensitive)
# optional, default is 'SouthEast'
#watermark_placement => 'SouthEast',
# choose which watermark (tiling, single or none) should be used by default
# valid values are 'tiling', 'single' or 'none' (case insensitive)
# optional, default is 'none'
#watermark_default => 'none',
# choose which watermark (tiling, single or none) should be enforced (users will always have a watermark and wont be able to disable it)
# valid values are 'tiling', 'single' or 'none' (case insensitive)
# optional, default is 'none'
#watermark_enforce => 'none',
# length of the image's delete token
# optional, default is 24
#token_length => 24,
@@ -107,6 +130,18 @@
# optional, defaut is /
#prefix => '/',
# if set to 1, Lutim will try to prevent its use without using the web interface
# optional, default is 0
#disable_api => 0,
# Define a path to the upload directory, where the uploaded images will be stored
# You can define it relative to lutim directory or set an absolute path
# The path is stored in database for each uploaded file, so youll need to do some
# SQL commands if you change the upload_dir after getting images uploaded.
# Remember that it has to be in a directory writable by Lutim user
# optional, default is 'files'
#upload_dir => 'files',
# choose what database you want to use
# valid choices are sqlite and postgresql (all lowercase)
# optional, default is sqlite
@@ -154,6 +189,29 @@
# }
},
# set `ldap` if you want that only authenticated users can shorten URLs
# please note that everybody can still use shortend URLs
# optional, no default
#ldap => {
# uri => 'ldaps://ldap.example.org', # server URI
# user_tree => 'ou=users,dc=example,dc=org', # search base DN
# bind_dn => 'uid=ldap_user,ou=users,dc=example,dc=org', # search bind DN
# bind_pwd => 'secr3t', # search bind password
# user_attr => 'uid', # user attribute (uid, mail, sAMAccountName, etc.)
# user_filter => '(!(uid=ldap_user))', # user filter (to exclude some users, etc.)
#},
# set `htpasswd` if you want to use an htpasswd file instead of ldap
# create the file with `htpasswd -c lutim.passwd user`, update it with `htpasswd lutim.passwd user2`
# make sure that lutim can read the file!
# optional, no default
#htpasswd => 'lutim.passwd',
# if you've set ldap or htpasswd above, the session will last `session_duration` seconds before
# the user needs to reauthenticate
# optional, default is 3600
#session_duration => 3600,
# disable counters of images
# set to 1 to disable counters
# optional, counters are enabled by default
@@ -200,7 +258,7 @@
# optional, default is 0
#quiet_logs => 0,
# Content-Security-Policy header that will be sent by Lstu
# Content-Security-Policy header that will be sent by Lutim
# Set to '' to disable CSP header
# https://content-security-policy.com/ provides a good documentation about CSP.
# https://report-uri.com/home/generate provides a tool to generate a CSP header.
@@ -210,7 +268,7 @@
# the default value is good for `default` theme
#csp => "base-uri 'self'; connect-src 'self'; default-src 'none'; font-src 'self'; form-action 'self'; img-src 'self' data:; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'",
# X-Frame-Options header that will be sent by Lstu
# X-Frame-Options header that will be sent by Lutim
# Valid values are: 'DENY', 'SAMEORIGIN', 'ALLOW-FROM https://example.com/'
# Set to '' to disable X-Frame-Options header
# See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
@@ -219,18 +277,22 @@
# optional, default is 'DENY'
#x_frame_options => 'DENY',
# X-Content-Type-Options that will be sent by Lstu
# X-Content-Type-Options that will be sent by Lutim
# See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options
# Set to '' to disable X-Content-Type-Options header
# optional, default is 'nosniff'
#x_content_type_options => 'nosniff',
# X-XSS-Protection that will be sent by Lstu
# X-XSS-Protection that will be sent by Lutim
# See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection
# Set to '' to disable X-XSS-Protection header
# optional, default is '1; mode=block'
#x_xss_protection => '1; mode=block',
# if set, the uploaded images will use this domain
# optional
#fixed_domain => 'example.org',
##########################
# Lutim cron jobs settings
##########################

View File

@@ -97,6 +97,29 @@
# optional, default is 0
#always_encrypt => 0,
# you can allow to use a watermark on the uploaded images (or enforce its use)
# define a path to the watermark image (provide an image with alpha channel)
# you can define the path relative to lutim directory or set an absolute path
# to disable the usage of a watermark, leave it blank or commented
# optional, no default
#watermark_path => '',
# the watermark can be a tiling one or a single one
# when using a small one, you can choose where to place it
# valid values are 'Center', 'North', 'NorthEast', 'East', 'SouthEast', 'South', 'SouthWest', 'West' and 'NorthWest' (case insensitive)
# optional, default is 'SouthEast'
#watermark_placement => 'SouthEast',
# choose which watermark (tiling, single or none) should be used by default
# valid values are 'tiling', 'single' or 'none' (case insensitive)
# optional, default is 'none'
#watermark_default => 'none',
# choose which watermark (tiling, single or none) should be enforced (users will always have a watermark and wont be able to disable it)
# valid values are 'tiling', 'single' or 'none' (case insensitive)
# optional, default is 'none'
#watermark_enforce => 'none',
# length of the image's delete token
# optional, default is 24
#token_length => 24,
@@ -107,6 +130,18 @@
# optional, defaut is /
#prefix => '/',
# if set to 1, Lutim will try to prevent its use without using the web interface
# optional, default is 0
#disable_api => 0,
# Define a path to the upload directory, where the uploaded images will be stored
# You can define it relative to lutim directory or set an absolute path
# The path is stored in database for each uploaded file, so youll need to do some
# SQL commands if you change the upload_dir after getting images uploaded.
# Remember that it has to be in a directory writable by Lutim user
# optional, default is 'files'
#upload_dir => 'files',
# choose what database you want to use
# valid choices are sqlite and postgresql (all lowercase)
# optional, default is sqlite
@@ -200,7 +235,7 @@
# optional, default is 0
#quiet_logs => 0,
# Content-Security-Policy header that will be sent by Lstu
# Content-Security-Policy header that will be sent by Lutim
# Set to '' to disable CSP header
# https://content-security-policy.com/ provides a good documentation about CSP.
# https://report-uri.com/home/generate provides a tool to generate a CSP header.
@@ -210,7 +245,7 @@
# the default value is good for `default` theme
#csp => "base-uri 'self'; connect-src 'self'; default-src 'none'; font-src 'self'; form-action 'self'; img-src 'self' data:; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'",
# X-Frame-Options header that will be sent by Lstu
# X-Frame-Options header that will be sent by Lutim
# Valid values are: 'DENY', 'SAMEORIGIN', 'ALLOW-FROM https://example.com/'
# Set to '' to disable X-Frame-Options header
# See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
@@ -219,18 +254,22 @@
# optional, default is 'DENY'
#x_frame_options => 'DENY',
# X-Content-Type-Options that will be sent by Lstu
# X-Content-Type-Options that will be sent by Lutim
# See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options
# Set to '' to disable X-Content-Type-Options header
# optional, default is 'nosniff'
#x_content_type_options => 'nosniff',
# X-XSS-Protection that will be sent by Lstu
# X-XSS-Protection that will be sent by Lutim
# See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection
# Set to '' to disable X-XSS-Protection header
# optional, default is '1; mode=block'
#x_xss_protection => '1; mode=block',
# if set, the uploaded images will use this domain
# optional
#fixed_domain => 'example.org',
##########################
# Lutim cron jobs settings
##########################

View File

@@ -97,6 +97,29 @@
# optional, default is 0
#always_encrypt => 0,
# you can allow to use a watermark on the uploaded images (or enforce its use)
# define a path to the watermark image (provide an image with alpha channel)
# you can define the path relative to lutim directory or set an absolute path
# to disable the usage of a watermark, leave it blank or commented
# optional, no default
#watermark_path => '',
# the watermark can be a tiling one or a single one
# when using a small one, you can choose where to place it
# valid values are 'Center', 'North', 'NorthEast', 'East', 'SouthEast', 'South', 'SouthWest', 'West' and 'NorthWest' (case insensitive)
# optional, default is 'SouthEast'
#watermark_placement => 'SouthEast',
# choose which watermark (tiling, single or none) should be used by default
# valid values are 'tiling', 'single' or 'none' (case insensitive)
# optional, default is 'none'
#watermark_default => 'none',
# choose which watermark (tiling, single or none) should be enforced (users will always have a watermark and wont be able to disable it)
# valid values are 'tiling', 'single' or 'none' (case insensitive)
# optional, default is 'none'
#watermark_enforce => 'none',
# length of the image's delete token
# optional, default is 24
#token_length => 24,
@@ -107,6 +130,18 @@
# optional, defaut is /
#prefix => '/',
# if set to 1, Lutim will try to prevent its use without using the web interface
# optional, default is 0
#disable_api => 0,
# Define a path to the upload directory, where the uploaded images will be stored
# You can define it relative to lutim directory or set an absolute path
# The path is stored in database for each uploaded file, so youll need to do some
# SQL commands if you change the upload_dir after getting images uploaded.
# Remember that it has to be in a directory writable by Lutim user
# optional, default is 'files'
#upload_dir => 'files',
# choose what database you want to use
# valid choices are sqlite and postgresql (all lowercase)
# optional, default is sqlite
@@ -154,6 +189,29 @@
# }
#},
# set `ldap` if you want that only authenticated users can shorten URLs
# please note that everybody can still use shortend URLs
# optional, no default
#ldap => {
# uri => 'ldaps://ldap.example.org', # server URI
# user_tree => 'ou=users,dc=example,dc=org', # search base DN
# bind_dn => 'uid=ldap_user,ou=users,dc=example,dc=org', # search bind DN
# bind_pwd => 'secr3t', # search bind password
# user_attr => 'uid', # user attribute (uid, mail, sAMAccountName, etc.)
# user_filter => '(!(uid=ldap_user))', # user filter (to exclude some users, etc.)
#},
# set `htpasswd` if you want to use an htpasswd file instead of ldap
# create the file with `htpasswd -c lutim.passwd user`, update it with `htpasswd lutim.passwd user2`
# make sure that lutim can read the file!
# optional, no default
#htpasswd => 'lutim.passwd',
# if you've set ldap or htpasswd above, the session will last `session_duration` seconds before
# the user needs to reauthenticate
# optional, default is 3600
#session_duration => 3600,
# disable counters of images
# set to 1 to disable counters
# optional, counters are enabled by default
@@ -200,7 +258,7 @@
# optional, default is 0
#quiet_logs => 0,
# Content-Security-Policy header that will be sent by Lstu
# Content-Security-Policy header that will be sent by Lutim
# Set to '' to disable CSP header
# https://content-security-policy.com/ provides a good documentation about CSP.
# https://report-uri.com/home/generate provides a tool to generate a CSP header.
@@ -210,7 +268,7 @@
# the default value is good for `default` theme
#csp => "base-uri 'self'; connect-src 'self'; default-src 'none'; font-src 'self'; form-action 'self'; img-src 'self' data:; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'",
# X-Frame-Options header that will be sent by Lstu
# X-Frame-Options header that will be sent by Lutim
# Valid values are: 'DENY', 'SAMEORIGIN', 'ALLOW-FROM https://example.com/'
# Set to '' to disable X-Frame-Options header
# See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
@@ -219,18 +277,22 @@
# optional, default is 'DENY'
#x_frame_options => 'DENY',
# X-Content-Type-Options that will be sent by Lstu
# X-Content-Type-Options that will be sent by Lutim
# See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options
# Set to '' to disable X-Content-Type-Options header
# optional, default is 'nosniff'
#x_content_type_options => 'nosniff',
# X-XSS-Protection that will be sent by Lstu
# X-XSS-Protection that will be sent by Lutim
# See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection
# Set to '' to disable X-XSS-Protection header
# optional, default is '1; mode=block'
#x_xss_protection => '1; mode=block',
# if set, the uploaded images will use this domain
# optional
#fixed_domain => 'example.org',
##########################
# Lutim cron jobs settings
##########################

View File

@@ -97,6 +97,29 @@
# optional, default is 0
#always_encrypt => 0,
# you can allow to use a watermark on the uploaded images (or enforce its use)
# define a path to the watermark image (provide an image with alpha channel)
# you can define the path relative to lutim directory or set an absolute path
# to disable the usage of a watermark, leave it blank or commented
# optional, no default
#watermark_path => '',
# the watermark can be a tiling one or a single one
# when using a small one, you can choose where to place it
# valid values are 'Center', 'North', 'NorthEast', 'East', 'SouthEast', 'South', 'SouthWest', 'West' and 'NorthWest' (case insensitive)
# optional, default is 'SouthEast'
#watermark_placement => 'SouthEast',
# choose which watermark (tiling, single or none) should be used by default
# valid values are 'tiling', 'single' or 'none' (case insensitive)
# optional, default is 'none'
#watermark_default => 'none',
# choose which watermark (tiling, single or none) should be enforced (users will always have a watermark and wont be able to disable it)
# valid values are 'tiling', 'single' or 'none' (case insensitive)
# optional, default is 'none'
#watermark_enforce => 'none',
# length of the image's delete token
# optional, default is 24
#token_length => 24,
@@ -107,6 +130,18 @@
# optional, defaut is /
#prefix => '/',
# if set to 1, Lutim will try to prevent its use without using the web interface
# optional, default is 0
#disable_api => 0,
# Define a path to the upload directory, where the uploaded images will be stored
# You can define it relative to lutim directory or set an absolute path
# The path is stored in database for each uploaded file, so youll need to do some
# SQL commands if you change the upload_dir after getting images uploaded.
# Remember that it has to be in a directory writable by Lutim user
# optional, default is 'files'
#upload_dir => 'files',
# choose what database you want to use
# valid choices are sqlite and postgresql (all lowercase)
# optional, default is sqlite
@@ -154,6 +189,29 @@
# }
},
# set `ldap` if you want that only authenticated users can shorten URLs
# please note that everybody can still use shortend URLs
# optional, no default
#ldap => {
# uri => 'ldaps://ldap.example.org', # server URI
# user_tree => 'ou=users,dc=example,dc=org', # search base DN
# bind_dn => 'uid=ldap_user,ou=users,dc=example,dc=org', # search bind DN
# bind_pwd => 'secr3t', # search bind password
# user_attr => 'uid', # user attribute (uid, mail, sAMAccountName, etc.)
# user_filter => '(!(uid=ldap_user))', # user filter (to exclude some users, etc.)
#},
# set `htpasswd` if you want to use an htpasswd file instead of ldap
# create the file with `htpasswd -c lutim.passwd user`, update it with `htpasswd lutim.passwd user2`
# make sure that lutim can read the file!
# optional, no default
#htpasswd => 'lutim.passwd',
# if you've set ldap or htpasswd above, the session will last `session_duration` seconds before
# the user needs to reauthenticate
# optional, default is 3600
#session_duration => 3600,
# disable counters of images
# set to 1 to disable counters
# optional, counters are enabled by default
@@ -200,7 +258,7 @@
# optional, default is 0
#quiet_logs => 0,
# Content-Security-Policy header that will be sent by Lstu
# Content-Security-Policy header that will be sent by Lutim
# Set to '' to disable CSP header
# https://content-security-policy.com/ provides a good documentation about CSP.
# https://report-uri.com/home/generate provides a tool to generate a CSP header.
@@ -210,7 +268,7 @@
# the default value is good for `default` theme
#csp => "base-uri 'self'; connect-src 'self'; default-src 'none'; font-src 'self'; form-action 'self'; img-src 'self' data:; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'",
# X-Frame-Options header that will be sent by Lstu
# X-Frame-Options header that will be sent by Lutim
# Valid values are: 'DENY', 'SAMEORIGIN', 'ALLOW-FROM https://example.com/'
# Set to '' to disable X-Frame-Options header
# See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
@@ -219,18 +277,22 @@
# optional, default is 'DENY'
#x_frame_options => 'DENY',
# X-Content-Type-Options that will be sent by Lstu
# X-Content-Type-Options that will be sent by Lutim
# See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options
# Set to '' to disable X-Content-Type-Options header
# optional, default is 'nosniff'
#x_content_type_options => 'nosniff',
# X-XSS-Protection that will be sent by Lstu
# X-XSS-Protection that will be sent by Lutim
# See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection
# Set to '' to disable X-XSS-Protection header
# optional, default is '1; mode=block'
#x_xss_protection => '1; mode=block',
# if set, the uploaded images will use this domain
# optional
#fixed_domain => 'example.org',
##########################
# Lutim cron jobs settings
##########################

View File

@@ -97,6 +97,29 @@
# optional, default is 0
#always_encrypt => 0,
# you can allow to use a watermark on the uploaded images (or enforce its use)
# define a path to the watermark image (provide an image with alpha channel)
# you can define the path relative to lutim directory or set an absolute path
# to disable the usage of a watermark, leave it blank or commented
# optional, no default
#watermark_path => '',
# the watermark can be a tiling one or a single one
# when using a small one, you can choose where to place it
# valid values are 'Center', 'North', 'NorthEast', 'East', 'SouthEast', 'South', 'SouthWest', 'West' and 'NorthWest' (case insensitive)
# optional, default is 'SouthEast'
#watermark_placement => 'SouthEast',
# choose which watermark (tiling, single or none) should be used by default
# valid values are 'tiling', 'single' or 'none' (case insensitive)
# optional, default is 'none'
#watermark_default => 'none',
# choose which watermark (tiling, single or none) should be enforced (users will always have a watermark and wont be able to disable it)
# valid values are 'tiling', 'single' or 'none' (case insensitive)
# optional, default is 'none'
#watermark_enforce => 'none',
# length of the image's delete token
# optional, default is 24
#token_length => 24,
@@ -107,6 +130,18 @@
# optional, defaut is /
#prefix => '/',
# if set to 1, Lutim will try to prevent its use without using the web interface
# optional, default is 0
#disable_api => 0,
# Define a path to the upload directory, where the uploaded images will be stored
# You can define it relative to lutim directory or set an absolute path
# The path is stored in database for each uploaded file, so youll need to do some
# SQL commands if you change the upload_dir after getting images uploaded.
# Remember that it has to be in a directory writable by Lutim user
# optional, default is 'files'
#upload_dir => 'files',
# choose what database you want to use
# valid choices are sqlite and postgresql (all lowercase)
# optional, default is sqlite
@@ -200,7 +235,7 @@
# optional, default is 0
#quiet_logs => 0,
# Content-Security-Policy header that will be sent by Lstu
# Content-Security-Policy header that will be sent by Lutim
# Set to '' to disable CSP header
# https://content-security-policy.com/ provides a good documentation about CSP.
# https://report-uri.com/home/generate provides a tool to generate a CSP header.
@@ -210,7 +245,7 @@
# the default value is good for `default` theme
#csp => "base-uri 'self'; connect-src 'self'; default-src 'none'; font-src 'self'; form-action 'self'; img-src 'self' data:; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'",
# X-Frame-Options header that will be sent by Lstu
# X-Frame-Options header that will be sent by Lutim
# Valid values are: 'DENY', 'SAMEORIGIN', 'ALLOW-FROM https://example.com/'
# Set to '' to disable X-Frame-Options header
# See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
@@ -219,18 +254,22 @@
# optional, default is 'DENY'
#x_frame_options => 'DENY',
# X-Content-Type-Options that will be sent by Lstu
# X-Content-Type-Options that will be sent by Lutim
# See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options
# Set to '' to disable X-Content-Type-Options header
# optional, default is 'nosniff'
#x_content_type_options => 'nosniff',
# X-XSS-Protection that will be sent by Lstu
# X-XSS-Protection that will be sent by Lutim
# See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection
# Set to '' to disable X-XSS-Protection header
# optional, default is '1; mode=block'
#x_xss_protection => '1; mode=block',
# if set, the uploaded images will use this domain
# optional
#fixed_domain => 'example.org',
##########################
# Lutim cron jobs settings
##########################

View File

@@ -265,12 +265,8 @@ msgid "Is it really free (as in free beer)?"
msgstr "هل هو مجاني (كما في عبارة مشروب مجاني) ؟"
#: themes/default/templates/about.html.ep:21
msgid ""
"Juste like you pronounce the French word <a href=\"https://fr.wikipedia.org/"
"wiki/Lutin\">lutin</a> (/ly.tɛ̃/)."
msgstr ""
"يُنطق مِثل الكلمة الفرنسية <a href=\"https://fr.wikipedia.org/wiki/"
"Lutin\">lutin</a> (/ly.tɛ̃/)."
msgid "The way you pronounce the French word <a href=\"%1\">lutin</a> (/ly.tɛ̃/)."
msgstr "يُنطق مِثل الكلمة الفرنسية <a href=\"%1\">lutin</a> (/ly.tɛ̃/)."
#: themes/default/templates/index.html.ep:171 themes/default/templates/index.html.ep:202
msgid "Keep EXIF tags"

View File

@@ -264,12 +264,8 @@ msgid "Is it really free (as in free beer)?"
msgstr "Is es wirklich kostenlos?"
#: themes/default/templates/about.html.ep:21
msgid ""
"Juste like you pronounce the French word <a href=\"https://fr.wikipedia.org/"
"wiki/Lutin\">lutin</a> (/ly.tɛ̃/)."
msgstr ""
"Genauso wie das französische Wort <a href=\"https://fr.wikipedia.org/wiki/"
"Lutin\">lutin</a> (/ly.tɛ̃/)."
msgid "The way you pronounce the French word <a href=\"%1\">lutin</a> (/ly.tɛ̃/)."
msgstr "Genauso wie das französische Wort <a href=\"%1\">lutin</a> (/ly.tɛ̃/)."
#: themes/default/templates/index.html.ep:171 themes/default/templates/index.html.ep:202
msgid "Keep EXIF tags"

View File

@@ -18,7 +18,7 @@ msgstr ""
#. (30)
#. ($delay)
#. (config('max_delay')
#: lib/Lutim/Command/cron/stats.pm:156 lib/Lutim/Command/cron/stats.pm:157 lib/Lutim/Command/cron/stats.pm:170 lib/Lutim/Command/cron/stats.pm:171 lib/Lutim/Command/cron/stats.pm:187 lib/Lutim/Command/cron/stats.pm:188 themes/default/templates/myfiles.html.ep:24 themes/default/templates/myfiles.html.ep:33 themes/default/templates/myfiles.html.ep:34 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/for_my_delay.html.ep:14 themes/default/templates/partial/for_my_delay.html.ep:4 themes/default/templates/partial/lutim.js.ep:140 themes/default/templates/partial/lutim.js.ep:149 themes/default/templates/partial/lutim.js.ep:150 themes/default/templates/partial/raw.js.ep:23 themes/default/templates/partial/raw.js.ep:24 themes/default/templates/partial/raw.js.ep:6 themes/default/templates/partial/raw.js.ep:7 themes/default/templates/raw.html.ep:8 themes/default/templates/raw.html.ep:9
#: lib/Lutim/Command/cron/stats.pm:156 lib/Lutim/Command/cron/stats.pm:157 lib/Lutim/Command/cron/stats.pm:170 lib/Lutim/Command/cron/stats.pm:171 lib/Lutim/Command/cron/stats.pm:187 lib/Lutim/Command/cron/stats.pm:188 themes/default/templates/myfiles.html.ep:24 themes/default/templates/myfiles.html.ep:33 themes/default/templates/myfiles.html.ep:34 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/for_my_delay.html.ep:14 themes/default/templates/partial/for_my_delay.html.ep:4 themes/default/templates/partial/lutim.js.ep:129 themes/default/templates/partial/lutim.js.ep:138 themes/default/templates/partial/lutim.js.ep:139 themes/default/templates/partial/raw.js.ep:23 themes/default/templates/partial/raw.js.ep:24 themes/default/templates/partial/raw.js.ep:6 themes/default/templates/partial/raw.js.ep:7 themes/default/templates/raw.html.ep:8 themes/default/templates/raw.html.ep:9
msgid "%1 days"
msgstr "%1 days"
@@ -27,19 +27,19 @@ msgstr "%1 days"
msgid "%1 sent images on this instance from beginning."
msgstr "%1 sent images on this instance from beginning."
#: themes/default/templates/index.html.ep:228
#: themes/default/templates/index.html.ep:227
msgid "-or-"
msgstr "-or-"
#: lib/Lutim.pm:342 lib/Lutim/Command/cron/stats.pm:158 lib/Lutim/Command/cron/stats.pm:172 lib/Lutim/Command/cron/stats.pm:189 themes/default/templates/index.html.ep:5 themes/default/templates/myfiles.html.ep:5 themes/default/templates/partial/raw.js.ep:25 themes/default/templates/partial/raw.js.ep:8 themes/default/templates/raw.html.ep:10
#: lib/Lutim.pm:346 lib/Lutim/Command/cron/stats.pm:158 lib/Lutim/Command/cron/stats.pm:172 lib/Lutim/Command/cron/stats.pm:189 themes/default/templates/index.html.ep:5 themes/default/templates/myfiles.html.ep:5 themes/default/templates/partial/raw.js.ep:25 themes/default/templates/partial/raw.js.ep:8 themes/default/templates/raw.html.ep:10
msgid "1 year"
msgstr "1 year"
#: lib/Lutim.pm:341 lib/Lutim/Command/cron/stats.pm:155 lib/Lutim/Command/cron/stats.pm:169 lib/Lutim/Command/cron/stats.pm:186 themes/default/templates/index.html.ep:4 themes/default/templates/myfiles.html.ep:33 themes/default/templates/myfiles.html.ep:4 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/lutim.js.ep:149 themes/default/templates/partial/raw.js.ep:22 themes/default/templates/partial/raw.js.ep:5 themes/default/templates/raw.html.ep:7
#: lib/Lutim.pm:345 lib/Lutim/Command/cron/stats.pm:155 lib/Lutim/Command/cron/stats.pm:169 lib/Lutim/Command/cron/stats.pm:186 themes/default/templates/index.html.ep:4 themes/default/templates/myfiles.html.ep:33 themes/default/templates/myfiles.html.ep:4 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/lutim.js.ep:138 themes/default/templates/partial/raw.js.ep:22 themes/default/templates/partial/raw.js.ep:5 themes/default/templates/raw.html.ep:7
msgid "24 hours"
msgstr "24 hours"
#: themes/default/templates/partial/myfiles.js.ep:210
#: themes/default/templates/partial/myfiles.js.ep:245
msgid ": Error while trying to get the counter."
msgstr ": Error while trying to get the counter."
@@ -51,7 +51,7 @@ msgstr "About"
msgid "Active images"
msgstr "Active images"
#: lib/Lutim/Controller/Image.pm:329
#: lib/Lutim/Controller/Image.pm:346
msgid "An error occured while downloading the image."
msgstr "An error occured while downloading the image."
@@ -59,11 +59,15 @@ msgstr "An error occured while downloading the image."
msgid "Archives download"
msgstr "Archives download"
#: themes/default/templates/about.html.ep:44 themes/default/templates/myfiles.html.ep:129 themes/default/templates/stats.html.ep:25
#: themes/default/templates/partial/common.js.ep:145
msgid "Are you sure you want to delete the image ${short}?"
msgstr "Are you sure you want to delete the image ${short}?"
#: themes/default/templates/about.html.ep:44 themes/default/templates/myfiles.html.ep:130 themes/default/templates/stats.html.ep:25
msgid "Back to homepage"
msgstr "Back to homepage"
#: themes/default/templates/index.html.ep:231 themes/default/templates/index.html.ep:232
#: themes/default/templates/index.html.ep:230 themes/default/templates/index.html.ep:231
msgid "Click to open the file browser"
msgstr "Click to open the file browser"
@@ -83,15 +87,15 @@ msgstr "Contributors"
msgid "Copied to clipboard"
msgstr "Copied to clipboard"
#: themes/default/templates/partial/lutim.js.ep:215 themes/default/templates/partial/lutim.js.ep:278 themes/default/templates/partial/lutim.js.ep:364
#: themes/default/templates/partial/lutim.js.ep:206 themes/default/templates/partial/lutim.js.ep:267 themes/default/templates/partial/lutim.js.ep:354
msgid "Copy all view links to clipboard"
msgstr "Copy all view links to clipboard"
#: themes/default/templates/index.html.ep:105 themes/default/templates/index.html.ep:16 themes/default/templates/index.html.ep:32 themes/default/templates/index.html.ep:48 themes/default/templates/index.html.ep:81 themes/default/templates/index.html.ep:89 themes/default/templates/index.html.ep:97 themes/default/templates/myfiles.html.ep:66 themes/default/templates/myfiles.html.ep:82 themes/default/templates/myfiles.html.ep:98 themes/default/templates/partial/common.js.ep:186 themes/default/templates/partial/lutim.js.ep:106 themes/default/templates/partial/lutim.js.ep:121 themes/default/templates/partial/lutim.js.ep:80 themes/default/templates/partial/lutim.js.ep:92 themes/default/templates/partial/myfiles.js.ep:172
#: themes/default/templates/index.html.ep:104 themes/default/templates/index.html.ep:16 themes/default/templates/index.html.ep:32 themes/default/templates/index.html.ep:48 themes/default/templates/index.html.ep:80 themes/default/templates/index.html.ep:88 themes/default/templates/index.html.ep:96 themes/default/templates/myfiles.html.ep:66 themes/default/templates/myfiles.html.ep:82 themes/default/templates/myfiles.html.ep:98 themes/default/templates/partial/common.js.ep:209 themes/default/templates/partial/lutim.js.ep:110 themes/default/templates/partial/lutim.js.ep:70 themes/default/templates/partial/lutim.js.ep:82 themes/default/templates/partial/lutim.js.ep:96 themes/default/templates/partial/myfiles.js.ep:183
msgid "Copy to clipboard"
msgstr "Copy to clipboard"
#: themes/default/templates/myfiles.html.ep:117
#: themes/default/templates/myfiles.html.ep:118
msgid "Counter"
msgstr "Counter"
@@ -103,10 +107,14 @@ msgstr "Delay repartition chart for disabled images"
msgid "Delay repartition chart for enabled images"
msgstr "Delay repartition chart for enabled images"
#: themes/default/templates/index.html.ep:127 themes/default/templates/index.html.ep:159 themes/default/templates/index.html.ep:203 themes/default/templates/myfiles.html.ep:118 themes/default/templates/myfiles.html.ep:45 themes/default/templates/partial/lutim.js.ep:161
#: themes/default/templates/index.html.ep:126 themes/default/templates/index.html.ep:158 themes/default/templates/index.html.ep:202 themes/default/templates/myfiles.html.ep:119 themes/default/templates/myfiles.html.ep:45 themes/default/templates/partial/lutim.js.ep:150
msgid "Delete at first view?"
msgstr "Delete at first view?"
#: themes/default/templates/myfiles.html.ep:109
msgid "Delete selected images"
msgstr ""
#: lib/Lutim/Command/cron/stats.pm:152 themes/default/templates/raw.html.ep:4
msgid "Deleted images"
msgstr "Deleted images"
@@ -115,7 +123,7 @@ msgstr "Deleted images"
msgid "Deleted images in 30 days"
msgstr "Deleted images in 30 days"
#: themes/default/templates/index.html.ep:110 themes/default/templates/myfiles.html.ep:121 themes/default/templates/partial/common.js.ep:178 themes/default/templates/partial/common.js.ep:181
#: themes/default/templates/index.html.ep:109 themes/default/templates/myfiles.html.ep:122 themes/default/templates/partial/common.js.ep:195 themes/default/templates/partial/common.js.ep:200
msgid "Deletion link"
msgstr "Deletion link"
@@ -123,7 +131,7 @@ msgstr "Deletion link"
msgid "Download all images"
msgstr "Download all images"
#: themes/default/templates/index.html.ep:93 themes/default/templates/index.html.ep:95 themes/default/templates/partial/lutim.js.ep:102 themes/default/templates/partial/lutim.js.ep:98
#: themes/default/templates/index.html.ep:92 themes/default/templates/index.html.ep:94 themes/default/templates/partial/lutim.js.ep:88 themes/default/templates/partial/lutim.js.ep:92
msgid "Download link"
msgstr "Download link"
@@ -131,7 +139,7 @@ msgstr "Download link"
msgid "Download zip link"
msgstr "Download zip link"
#: themes/default/templates/index.html.ep:227
#: themes/default/templates/index.html.ep:226
msgid "Drag & drop images here"
msgstr "Drag & drop images here"
@@ -139,11 +147,11 @@ msgstr "Drag & drop images here"
msgid "Drag and drop an image in the appropriate area or use the traditional way to send files and Lutim will provide you four URLs. One to view the image, an other to directly download it, one you can use on social networks and a last to delete the image when you want."
msgstr "Drag and drop an image in the appropriate area or use the traditional way to send files and Lutim will provide you four URLs. One to view the image, an other to directly download it, one you can use on social networks and a last to delete the image when you want."
#: themes/default/templates/index.html.ep:162 themes/default/templates/index.html.ep:206
#: themes/default/templates/index.html.ep:161 themes/default/templates/index.html.ep:205
msgid "Encrypt the image (Lutim does not keep the key)."
msgstr "Encrypt the image (Lutim does not keep the key)."
#: themes/default/templates/partial/lutim.js.ep:45 themes/default/templates/partial/myfiles.js.ep:128
#: themes/default/templates/partial/lutim.js.ep:38 themes/default/templates/partial/myfiles.js.ep:129
msgid "Error while trying to modify the image."
msgstr "Error while trying to modify the image."
@@ -151,7 +159,7 @@ msgstr "Error while trying to modify the image."
msgid "Evolution of total files"
msgstr "Evolution of total files"
#: themes/default/templates/myfiles.html.ep:120
#: themes/default/templates/myfiles.html.ep:121
msgid "Expires at"
msgstr "Expires at"
@@ -159,7 +167,7 @@ msgstr "Expires at"
msgid "Export localStorage data"
msgstr "Export localStorage data"
#: themes/default/templates/myfiles.html.ep:115
#: themes/default/templates/myfiles.html.ep:116
msgid "File name"
msgstr "File name"
@@ -179,7 +187,7 @@ msgstr "Gallery link"
msgid "Hit Ctrl+C, then Enter to copy the short link"
msgstr "Hit Ctrl+C, then Enter to copy the short link"
#: themes/default/templates/layouts/default.html.ep:47
#: themes/default/templates/layouts/default.html.ep:44
msgid "Homepage"
msgstr "Homepage"
@@ -199,7 +207,7 @@ msgstr "How to report an image?"
msgid "If the files are deleted if you ask it while posting it, their SHA512 footprint are retained."
msgstr "If the files are deleted if you ask it while posting it, their SHA512 footprint are retained."
#: themes/default/templates/index.html.ep:188 themes/default/templates/index.html.ep:241
#: themes/default/templates/index.html.ep:187 themes/default/templates/index.html.ep:240
msgid "Image URL"
msgstr "Image URL"
@@ -207,11 +215,11 @@ msgstr "Image URL"
msgid "Image delay"
msgstr "Image delay"
#: themes/default/templates/partial/common.js.ep:157
#: themes/default/templates/partial/common.js.ep:172
msgid "Image deleted"
msgstr "Image deleted"
#: lib/Lutim/Controller/Image.pm:799
#: lib/Lutim/Controller/Image.pm:815
msgid "Image not found."
msgstr "Image not found."
@@ -239,11 +247,7 @@ msgstr "Is it really anonymous?"
msgid "Is it really free (as in free beer)?"
msgstr "Is it really free (as in free beer)?"
#: themes/default/templates/about.html.ep:21
msgid "Juste like you pronounce the French word <a href=\"https://fr.wikipedia.org/wiki/Lutin\">lutin</a> (/ly.tɛ̃/)."
msgstr "Juste like you pronounce the French word <a href=\"https://fr.wikipedia.org/wiki/Lutin\">lutin</a> (/ly.tɛ̃/)."
#: themes/default/templates/index.html.ep:165 themes/default/templates/index.html.ep:209
#: themes/default/templates/index.html.ep:164 themes/default/templates/index.html.ep:208
msgid "Keep EXIF tags"
msgstr "Keep EXIF tags"
@@ -251,7 +255,7 @@ msgstr "Keep EXIF tags"
msgid "Language"
msgstr "Language"
#: themes/default/templates/index.html.ep:130 themes/default/templates/index.html.ep:191 themes/default/templates/index.html.ep:244 themes/default/templates/partial/lutim.js.ep:165
#: themes/default/templates/index.html.ep:129 themes/default/templates/index.html.ep:190 themes/default/templates/index.html.ep:243 themes/default/templates/partial/lutim.js.ep:157
msgid "Let's go!"
msgstr "Let's go!"
@@ -259,7 +263,7 @@ msgstr "Let's go!"
msgid "License:"
msgstr "License:"
#: themes/default/templates/index.html.ep:101 themes/default/templates/index.html.ep:103 themes/default/templates/partial/lutim.js.ep:112 themes/default/templates/partial/lutim.js.ep:116
#: themes/default/templates/index.html.ep:100 themes/default/templates/index.html.ep:102 themes/default/templates/partial/lutim.js.ep:102 themes/default/templates/partial/lutim.js.ep:106
msgid "Link for share on social networks"
msgstr "Link for share on social networks"
@@ -283,11 +287,11 @@ msgstr "Lutim is a free (as in free beer) and anonymous image hosting service. I
msgid "Main developers"
msgstr "Main developers"
#: themes/default/templates/index.html.ep:85 themes/default/templates/index.html.ep:87 themes/default/templates/partial/lutim.js.ep:86 themes/default/templates/partial/lutim.js.ep:89
#: themes/default/templates/index.html.ep:84 themes/default/templates/index.html.ep:86 themes/default/templates/partial/lutim.js.ep:76 themes/default/templates/partial/lutim.js.ep:79
msgid "Markdown syntax"
msgstr "Markdown syntax"
#: themes/default/templates/partial/myfiles.js.ep:179
#: themes/default/templates/partial/myfiles.js.ep:200
msgid "Modify expiration delay"
msgstr "Modify expiration delay"
@@ -299,15 +303,15 @@ msgstr "My images"
msgid "Next (arrow right)"
msgstr "Next (arrow right)"
#: themes/default/templates/partial/myfiles.js.ep:120 themes/default/templates/partial/myfiles.js.ep:162
#: themes/default/templates/partial/myfiles.js.ep:121 themes/default/templates/partial/myfiles.js.ep:163
msgid "No limit"
msgstr "No limit"
#: themes/default/templates/index.html.ep:177 themes/default/templates/index.html.ep:221
#: themes/default/templates/index.html.ep:176 themes/default/templates/index.html.ep:220
msgid "No watermark"
msgstr "No watermark"
#: themes/default/templates/index.html.ep:190 themes/default/templates/index.html.ep:236
#: themes/default/templates/index.html.ep:189 themes/default/templates/index.html.ep:235
msgid "Only images are allowed"
msgstr "Only images are allowed"
@@ -352,7 +356,7 @@ msgstr "Raw stats"
msgid "Save changes"
msgstr "Save changes"
#: themes/default/templates/index.html.ep:183
#: themes/default/templates/index.html.ep:182
msgid "Send an image"
msgstr "Send an image"
@@ -360,19 +364,23 @@ msgstr "Send an image"
msgid "Signin"
msgstr "Signin"
#: themes/default/templates/index.html.ep:174 themes/default/templates/index.html.ep:218
#: themes/default/templates/index.html.ep:173 themes/default/templates/index.html.ep:217
msgid "Single watermark"
msgstr "Single watermark"
#: themes/default/templates/index.html.ep:145 themes/default/templates/partial/gallery.js.ep:211 themes/default/templates/partial/lutim.js.ep:176
#: themes/default/templates/index.html.ep:144 themes/default/templates/partial/gallery.js.ep:210 themes/default/templates/partial/lutim.js.ep:166
msgid "Something bad happened"
msgstr "Something bad happened"
#. ($c->config('contact')
#: lib/Lutim/Controller/Image.pm:806
#: lib/Lutim/Controller/Image.pm:822
msgid "Something went wrong when creating the zip file. Try again later or contact the administrator (%1)."
msgstr "Something went wrong when creating the zip file. Try again later or contact the administrator (%1)."
#: lib/Lutim/Controller/Image.pm:294
msgid "Sorry, the API is disabled"
msgstr "Sorry, the API is disabled"
#: themes/default/templates/about.html.ep:13
msgid "The IP address of the image's sender is retained for a delay which depends of the administrator's choice (for the official instance, which is located in France, it's one year)."
msgstr "The IP address of the image's sender is retained for a delay which depends of the administrator's choice (for the official instance, which is located in France, it's one year)."
@@ -381,7 +389,7 @@ msgstr "The IP address of the image's sender is retained for a delay which depen
msgid "The Lutim software is a <a href=\"http://en.wikipedia.org/wiki/Free_software\">free software</a>, which allows you to download and install it on you own server. Have a look at the <a href=\"https://www.gnu.org/licenses/agpl-3.0.html\">AGPL</a> to see what you can do."
msgstr "The Lutim software is a <a href=\"http://en.wikipedia.org/wiki/Free_software\">free software</a>, which allows you to download and install it on you own server. Have a look at the <a href=\"https://www.gnu.org/licenses/agpl-3.0.html\">AGPL</a> to see what you can do."
#: lib/Lutim/Controller/Image.pm:348
#: lib/Lutim/Controller/Image.pm:365
msgid "The URL is not valid."
msgstr "The URL is not valid."
@@ -393,19 +401,19 @@ msgstr "The automatic download process will open a tab in your browser for each
msgid "The data has been successfully imported."
msgstr "The data has been successfully imported."
#: lib/Lutim/Controller/Image.pm:160 lib/Lutim/Controller/Image.pm:228
#: lib/Lutim/Controller/Image.pm:161 lib/Lutim/Controller/Image.pm:229
msgid "The delete token is invalid."
msgstr "The delete token is invalid."
#. ($upload->filename)
#: lib/Lutim/Controller/Image.pm:531
#: lib/Lutim/Controller/Image.pm:547
msgid "The file %1 is not an image."
msgstr "The file %1 is not an image."
#. ($tx->res->max_message_size)
#. ($c->req->max_message_size)
#. (config('max_file_size')
#: lib/Lutim/Controller/Image.pm:312 lib/Lutim/Controller/Image.pm:381 themes/default/templates/partial/lutim.js.ep:249
#: lib/Lutim/Controller/Image.pm:329 lib/Lutim/Controller/Image.pm:395 themes/default/templates/partial/lutim.js.ep:239
msgid "The file exceed the size limit (%1)"
msgstr "The file exceed the size limit (%1)"
@@ -414,12 +422,12 @@ msgid "The graph's datas are not updated in real-time."
msgstr "The graph's datas are not updated in real-time."
#. ($image->filename)
#: lib/Lutim/Controller/Image.pm:230
#: lib/Lutim/Controller/Image.pm:231
msgid "The image %1 has already been deleted."
msgstr "The image %1 has already been deleted."
#. ($image->filename)
#: lib/Lutim/Controller/Image.pm:239 lib/Lutim/Controller/Image.pm:244
#: lib/Lutim/Controller/Image.pm:240 lib/Lutim/Controller/Image.pm:245
msgid "The image %1 has been successfully deleted"
msgstr "The image %1 has been successfully deleted"
@@ -431,20 +439,25 @@ msgstr "The images are encrypted on the server (Lutim does not keep the key)."
msgid "The images you post on Lutim can be stored indefinitely or be deleted at first view or after a delay selected from those proposed."
msgstr "The images you post on Lutim can be stored indefinitely or be deleted at first view or after a delay selected from those proposed."
#: lib/Lutim/Controller/Image.pm:168
#: lib/Lutim/Controller/Image.pm:169
msgid "The images delay has been successfully modified"
msgstr "The images delay has been successfully modified"
#: themes/default/templates/partial/gallery.js.ep:277
#. ('https://fr.wikipedia.org/wiki/Lutin')
#: themes/default/templates/about.html.ep:21
msgid "The way you pronounce the French word <a href=\"%1\">lutin</a> (/ly.tɛ̃/)."
msgstr "The way you pronounce the French word <a href=\"%1\">lutin</a> (/ly.tɛ̃/)."
#: themes/default/templates/partial/gallery.js.ep:271
msgid "There is XXXX image(s) in the gallery"
msgstr "There is XXXX image(s) in the gallery"
#. ($c->config->{contact})
#: lib/Lutim/Controller/Image.pm:528
#: lib/Lutim/Controller/Image.pm:544
msgid "There is no more available URL. Retry or contact the administrator. %1"
msgstr "There is no more available URL. Retry or contact the administrator. %1"
#: themes/default/templates/index.html.ep:171 themes/default/templates/index.html.ep:215
#: themes/default/templates/index.html.ep:170 themes/default/templates/index.html.ep:214
msgid "Tiling watermark"
msgstr "Tiling watermark"
@@ -460,7 +473,7 @@ msgstr "Toggle navigation"
msgid "Total"
msgstr "Total"
#: themes/default/templates/index.html.ep:72 themes/default/templates/partial/lutim.js.ep:17
#:
msgid "Tweet it!"
msgstr "Tweet it!"
@@ -469,15 +482,15 @@ msgid "Unable to copy to clipboard"
msgstr "Unable to copy to clipboard"
#. ($short)
#: lib/Lutim/Controller/Image.pm:108 lib/Lutim/Controller/Image.pm:202 lib/Lutim/Controller/Image.pm:273
#: lib/Lutim/Controller/Image.pm:109 lib/Lutim/Controller/Image.pm:203 lib/Lutim/Controller/Image.pm:274
msgid "Unable to find the image %1."
msgstr "Unable to find the image %1."
#: lib/Lutim/Controller/Image.pm:617 lib/Lutim/Controller/Image.pm:662 lib/Lutim/Controller/Image.pm:703 lib/Lutim/Controller/Image.pm:746 lib/Lutim/Controller/Image.pm:758 lib/Lutim/Controller/Image.pm:769 lib/Lutim/Controller/Image.pm:796 lib/Lutim/Plugin/Helpers.pm:89
#: lib/Lutim/Controller/Image.pm:633 lib/Lutim/Controller/Image.pm:678 lib/Lutim/Controller/Image.pm:719 lib/Lutim/Controller/Image.pm:762 lib/Lutim/Controller/Image.pm:774 lib/Lutim/Controller/Image.pm:785 lib/Lutim/Controller/Image.pm:812 lib/Lutim/Plugin/Helpers.pm:90
msgid "Unable to find the image: it has been deleted."
msgstr "Unable to find the image: it has been deleted."
#: lib/Lutim/Controller/Image.pm:145
#: lib/Lutim/Controller/Image.pm:146
msgid "Unable to get counter"
msgstr "Unable to get counter"
@@ -485,11 +498,11 @@ msgstr "Unable to get counter"
msgid "Unlike many image sharing services, you don't give us rights on uploaded images."
msgstr "Unlike many image sharing services, you don't give us rights on uploaded images."
#: themes/default/templates/index.html.ep:187 themes/default/templates/index.html.ep:239
#: themes/default/templates/index.html.ep:186 themes/default/templates/index.html.ep:238
msgid "Upload an image with its URL"
msgstr "Upload an image with its URL"
#: themes/default/templates/myfiles.html.ep:119
#: themes/default/templates/myfiles.html.ep:120
msgid "Uploaded at"
msgstr "Uploaded at"
@@ -498,11 +511,11 @@ msgid "Uploaded files by days"
msgstr "Uploaded files by days"
#. ($c->app->config('contact')
#: lib/Lutim/Plugin/Helpers.pm:222
#: lib/Lutim/Plugin/Helpers.pm:223
msgid "Uploading is currently disabled, please try later or contact the administrator (%1)."
msgstr "Uploading is currently disabled, please try later or contact the administrator (%1)."
#: themes/default/templates/index.html.ep:77 themes/default/templates/index.html.ep:79 themes/default/templates/myfiles.html.ep:116 themes/default/templates/partial/lutim.js.ep:72 themes/default/templates/partial/lutim.js.ep:76
#: themes/default/templates/index.html.ep:76 themes/default/templates/index.html.ep:78 themes/default/templates/myfiles.html.ep:117 themes/default/templates/partial/lutim.js.ep:62 themes/default/templates/partial/lutim.js.ep:66
msgid "View link"
msgstr "View link"
@@ -558,7 +571,7 @@ msgstr "arabic translation"
msgid "core developer"
msgstr "core developer"
#: lib/Lutim.pm:340 lib/Lutim/Command/cron/stats.pm:154 lib/Lutim/Command/cron/stats.pm:168 lib/Lutim/Command/cron/stats.pm:185 themes/default/templates/index.html.ep:3 themes/default/templates/myfiles.html.ep:3 themes/default/templates/partial/raw.js.ep:21 themes/default/templates/partial/raw.js.ep:4 themes/default/templates/raw.html.ep:6
#: lib/Lutim.pm:344 lib/Lutim/Command/cron/stats.pm:154 lib/Lutim/Command/cron/stats.pm:168 lib/Lutim/Command/cron/stats.pm:185 themes/default/templates/index.html.ep:3 themes/default/templates/myfiles.html.ep:3 themes/default/templates/partial/raw.js.ep:21 themes/default/templates/partial/raw.js.ep:4 themes/default/templates/raw.html.ep:6
msgid "no time limit"
msgstr "no time limit"

View File

@@ -256,12 +256,8 @@ msgid "Is it really free (as in free beer)?"
msgstr "¿Es realmente gratis?"
#: themes/default/templates/about.html.ep:21
msgid ""
"Juste like you pronounce the French word <a href=\"https://fr.wikipedia.org/"
"wiki/Lutin\">lutin</a> (/ly.tɛ̃/)."
msgstr ""
"Tal y como se pronuncia la palabra francesa <a href=\"https://fr.wikipedia."
"org/wiki/Lutin\">lutin</a> (/ly.tɛ̃/)."
msgid "The way you pronounce the French word <a href=\"%1\">lutin</a> (/ly.tɛ̃/)."
msgstr "Tal y como se pronuncia la palabra francesa <a href=\"%1\">lutin</a> (/ly.tɛ̃/)."
#: themes/default/templates/index.html.ep:171 themes/default/templates/index.html.ep:202
msgid "Keep EXIF tags"

View File

@@ -265,12 +265,8 @@ msgid "Is it really free (as in free beer)?"
msgstr "Cest vraiment gratuit ?"
#: themes/default/templates/about.html.ep:21
msgid ""
"Juste like you pronounce the French word <a href=\"https://fr.wikipedia.org/"
"wiki/Lutin\">lutin</a> (/ly.tɛ̃/)."
msgstr ""
"Comme on prononce <a href=\"https://fr.wikipedia.org/wiki/Lutin\">lutin</a> "
"(/ly.tɛ̃/)."
msgid "The way you pronounce the French word <a href=\"%1\">lutin</a> (/ly.tɛ̃/)."
msgstr "Comme on prononce <a href=\"%1\">lutin</a> (/ly.tɛ̃/)."
#: themes/default/templates/index.html.ep:171 themes/default/templates/index.html.ep:202
msgid "Keep EXIF tags"

View File

@@ -265,12 +265,8 @@ msgid "Is it really free (as in free beer)?"
msgstr "Cest vraiment gratuit ?"
#: themes/default/templates/about.html.ep:21
msgid ""
"Juste like you pronounce the French word <a href=\"https://fr.wikipedia.org/"
"wiki/Lutin\">lutin</a> (/ly.tɛ̃/)."
msgstr ""
"Comme on prononce <a href=\"https://fr.wikipedia.org/wiki/Lutin\">lutin</a> "
"(/ly.tɛ̃/)."
msgid "The way you pronounce the French word <a href=\"%1\">lutin</a> (/ly.tɛ̃/)."
msgstr "Comme on prononce <a href=\"%1\">lutin</a> (/ly.tɛ̃/)."
#: themes/default/templates/index.html.ep:171 themes/default/templates/index.html.ep:202
msgid "Keep EXIF tags"

View File

@@ -253,10 +253,8 @@ msgid "Is it really free (as in free beer)?"
msgstr "Je li se stvarno može besplatno koristiti?"
#: themes/default/templates/about.html.ep:21
msgid "Juste like you pronounce the French word <a href=\"https://fr.wikipedia.org/wiki/Lutin\">lutin</a> (/ly.tɛ̃/)."
msgstr ""
"Isto kao izgovaranje francuske riječi <a href=\"https://fr.wikipedia.org/"
"wiki/Lutin\">lutin</a> (/ly.tɛ̃/)."
msgid "The way you pronounce the French word <a href=\"%1\">lutin</a> (/ly.tɛ̃/)."
msgstr "Isto kao izgovaranje francuske riječi <a href=\"%1\">lutin</a> (/ly.tɛ̃/)."
#: themes/default/templates/index.html.ep:165 themes/default/templates/index.html.ep:209
msgid "Keep EXIF tags"

View File

@@ -256,12 +256,8 @@ msgid "Is it really free (as in free beer)?"
msgstr "Tényleg ingyenes?"
#: themes/default/templates/about.html.ep:21
msgid ""
"Juste like you pronounce the French word <a href=\"https://fr.wikipedia.org/"
"wiki/Lutin\">lutin</a> (/ly.tɛ̃/)."
msgstr ""
"Pont úgy, ahogy a francia <a href=\"https://fr.wikipedia.org/wiki/"
"Lutin\">lutin</a> szót (/ly.tɛ̃/)."
msgid "The way you pronounce the French word <a href=\"%1\">lutin</a> (/ly.tɛ̃/)."
msgstr "Pont úgy, ahogy a francia <a href=\"%1\">lutin</a> szót (/ly.tɛ̃/)."
#: themes/default/templates/index.html.ep:171 themes/default/templates/index.html.ep:202
msgid "Keep EXIF tags"

View File

@@ -258,12 +258,8 @@ msgid "Is it really free (as in free beer)?"
msgstr "È veramente gratuita (come in birra gratis)?"
#: themes/default/templates/about.html.ep:21
msgid ""
"Juste like you pronounce the French word <a href=\"https://fr.wikipedia.org/"
"wiki/Lutin\">lutin</a> (/ly.tɛ̃/)."
msgstr ""
"Come si pronuncia la parola francese <a href=\"https://fr.wikipedia.org/wiki/"
"Lutin\">lutin</a> (/ly.tɛ̃/)."
msgid "The way you pronounce the French word <a href=\"%1\">lutin</a> (/ly.tɛ̃/)."
msgstr "Come si pronuncia la parola francese <a href=\"%1\">lutin</a> (/ly.tɛ̃/)."
#: themes/default/templates/index.html.ep:171 themes/default/templates/index.html.ep:202
msgid "Keep EXIF tags"

View File

@@ -19,7 +19,7 @@ msgstr ""
#. (30)
#. ($delay)
#. (config('max_delay')
#: lib/Lutim/Command/cron/stats.pm:156 lib/Lutim/Command/cron/stats.pm:157 lib/Lutim/Command/cron/stats.pm:170 lib/Lutim/Command/cron/stats.pm:171 lib/Lutim/Command/cron/stats.pm:187 lib/Lutim/Command/cron/stats.pm:188 themes/default/templates/myfiles.html.ep:24 themes/default/templates/myfiles.html.ep:33 themes/default/templates/myfiles.html.ep:34 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/for_my_delay.html.ep:14 themes/default/templates/partial/for_my_delay.html.ep:4 themes/default/templates/partial/lutim.js.ep:140 themes/default/templates/partial/lutim.js.ep:149 themes/default/templates/partial/lutim.js.ep:150 themes/default/templates/partial/raw.js.ep:23 themes/default/templates/partial/raw.js.ep:24 themes/default/templates/partial/raw.js.ep:6 themes/default/templates/partial/raw.js.ep:7 themes/default/templates/raw.html.ep:8 themes/default/templates/raw.html.ep:9
#: lib/Lutim/Command/cron/stats.pm:156 lib/Lutim/Command/cron/stats.pm:157 lib/Lutim/Command/cron/stats.pm:170 lib/Lutim/Command/cron/stats.pm:171 lib/Lutim/Command/cron/stats.pm:187 lib/Lutim/Command/cron/stats.pm:188 themes/default/templates/myfiles.html.ep:24 themes/default/templates/myfiles.html.ep:33 themes/default/templates/myfiles.html.ep:34 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/for_my_delay.html.ep:14 themes/default/templates/partial/for_my_delay.html.ep:4 themes/default/templates/partial/lutim.js.ep:129 themes/default/templates/partial/lutim.js.ep:138 themes/default/templates/partial/lutim.js.ep:139 themes/default/templates/partial/raw.js.ep:23 themes/default/templates/partial/raw.js.ep:24 themes/default/templates/partial/raw.js.ep:6 themes/default/templates/partial/raw.js.ep:7 themes/default/templates/raw.html.ep:8 themes/default/templates/raw.html.ep:9
msgid "%1 days"
msgstr ""
@@ -28,19 +28,19 @@ msgstr ""
msgid "%1 sent images on this instance from beginning."
msgstr ""
#: themes/default/templates/index.html.ep:228
#: themes/default/templates/index.html.ep:227
msgid "-or-"
msgstr ""
#: lib/Lutim.pm:342 lib/Lutim/Command/cron/stats.pm:158 lib/Lutim/Command/cron/stats.pm:172 lib/Lutim/Command/cron/stats.pm:189 themes/default/templates/index.html.ep:5 themes/default/templates/myfiles.html.ep:5 themes/default/templates/partial/raw.js.ep:25 themes/default/templates/partial/raw.js.ep:8 themes/default/templates/raw.html.ep:10
#: lib/Lutim.pm:346 lib/Lutim/Command/cron/stats.pm:158 lib/Lutim/Command/cron/stats.pm:172 lib/Lutim/Command/cron/stats.pm:189 themes/default/templates/index.html.ep:5 themes/default/templates/myfiles.html.ep:5 themes/default/templates/partial/raw.js.ep:25 themes/default/templates/partial/raw.js.ep:8 themes/default/templates/raw.html.ep:10
msgid "1 year"
msgstr ""
#: lib/Lutim.pm:341 lib/Lutim/Command/cron/stats.pm:155 lib/Lutim/Command/cron/stats.pm:169 lib/Lutim/Command/cron/stats.pm:186 themes/default/templates/index.html.ep:4 themes/default/templates/myfiles.html.ep:33 themes/default/templates/myfiles.html.ep:4 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/lutim.js.ep:149 themes/default/templates/partial/raw.js.ep:22 themes/default/templates/partial/raw.js.ep:5 themes/default/templates/raw.html.ep:7
#: lib/Lutim.pm:345 lib/Lutim/Command/cron/stats.pm:155 lib/Lutim/Command/cron/stats.pm:169 lib/Lutim/Command/cron/stats.pm:186 themes/default/templates/index.html.ep:4 themes/default/templates/myfiles.html.ep:33 themes/default/templates/myfiles.html.ep:4 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/lutim.js.ep:138 themes/default/templates/partial/raw.js.ep:22 themes/default/templates/partial/raw.js.ep:5 themes/default/templates/raw.html.ep:7
msgid "24 hours"
msgstr ""
#: themes/default/templates/partial/myfiles.js.ep:210
#: themes/default/templates/partial/myfiles.js.ep:245
msgid ": Error while trying to get the counter."
msgstr ""
@@ -52,7 +52,7 @@ msgstr ""
msgid "Active images"
msgstr ""
#: lib/Lutim/Controller/Image.pm:329
#: lib/Lutim/Controller/Image.pm:346
msgid "An error occured while downloading the image."
msgstr ""
@@ -60,11 +60,15 @@ msgstr ""
msgid "Archives download"
msgstr ""
#: themes/default/templates/about.html.ep:44 themes/default/templates/myfiles.html.ep:129 themes/default/templates/stats.html.ep:25
#: themes/default/templates/partial/common.js.ep:145
msgid "Are you sure you want to delete the image ${short}?"
msgstr ""
#: themes/default/templates/about.html.ep:44 themes/default/templates/myfiles.html.ep:130 themes/default/templates/stats.html.ep:25
msgid "Back to homepage"
msgstr ""
#: themes/default/templates/index.html.ep:231 themes/default/templates/index.html.ep:232
#: themes/default/templates/index.html.ep:230 themes/default/templates/index.html.ep:231
msgid "Click to open the file browser"
msgstr ""
@@ -84,15 +88,15 @@ msgstr ""
msgid "Copied to clipboard"
msgstr ""
#: themes/default/templates/partial/lutim.js.ep:215 themes/default/templates/partial/lutim.js.ep:278 themes/default/templates/partial/lutim.js.ep:364
#: themes/default/templates/partial/lutim.js.ep:206 themes/default/templates/partial/lutim.js.ep:267 themes/default/templates/partial/lutim.js.ep:354
msgid "Copy all view links to clipboard"
msgstr ""
#: themes/default/templates/index.html.ep:105 themes/default/templates/index.html.ep:16 themes/default/templates/index.html.ep:32 themes/default/templates/index.html.ep:48 themes/default/templates/index.html.ep:81 themes/default/templates/index.html.ep:89 themes/default/templates/index.html.ep:97 themes/default/templates/myfiles.html.ep:66 themes/default/templates/myfiles.html.ep:82 themes/default/templates/myfiles.html.ep:98 themes/default/templates/partial/common.js.ep:186 themes/default/templates/partial/lutim.js.ep:106 themes/default/templates/partial/lutim.js.ep:121 themes/default/templates/partial/lutim.js.ep:80 themes/default/templates/partial/lutim.js.ep:92 themes/default/templates/partial/myfiles.js.ep:172
#: themes/default/templates/index.html.ep:104 themes/default/templates/index.html.ep:16 themes/default/templates/index.html.ep:32 themes/default/templates/index.html.ep:48 themes/default/templates/index.html.ep:80 themes/default/templates/index.html.ep:88 themes/default/templates/index.html.ep:96 themes/default/templates/myfiles.html.ep:66 themes/default/templates/myfiles.html.ep:82 themes/default/templates/myfiles.html.ep:98 themes/default/templates/partial/common.js.ep:209 themes/default/templates/partial/lutim.js.ep:110 themes/default/templates/partial/lutim.js.ep:70 themes/default/templates/partial/lutim.js.ep:82 themes/default/templates/partial/lutim.js.ep:96 themes/default/templates/partial/myfiles.js.ep:183
msgid "Copy to clipboard"
msgstr ""
#: themes/default/templates/myfiles.html.ep:117
#: themes/default/templates/myfiles.html.ep:118
msgid "Counter"
msgstr ""
@@ -104,10 +108,14 @@ msgstr ""
msgid "Delay repartition chart for enabled images"
msgstr ""
#: themes/default/templates/index.html.ep:127 themes/default/templates/index.html.ep:159 themes/default/templates/index.html.ep:203 themes/default/templates/myfiles.html.ep:118 themes/default/templates/myfiles.html.ep:45 themes/default/templates/partial/lutim.js.ep:161
#: themes/default/templates/index.html.ep:126 themes/default/templates/index.html.ep:158 themes/default/templates/index.html.ep:202 themes/default/templates/myfiles.html.ep:119 themes/default/templates/myfiles.html.ep:45 themes/default/templates/partial/lutim.js.ep:150
msgid "Delete at first view?"
msgstr ""
#: themes/default/templates/myfiles.html.ep:109
msgid "Delete selected images"
msgstr ""
#: lib/Lutim/Command/cron/stats.pm:152 themes/default/templates/raw.html.ep:4
msgid "Deleted images"
msgstr ""
@@ -116,7 +124,7 @@ msgstr ""
msgid "Deleted images in 30 days"
msgstr ""
#: themes/default/templates/index.html.ep:110 themes/default/templates/myfiles.html.ep:121 themes/default/templates/partial/common.js.ep:178 themes/default/templates/partial/common.js.ep:181
#: themes/default/templates/index.html.ep:109 themes/default/templates/myfiles.html.ep:122 themes/default/templates/partial/common.js.ep:195 themes/default/templates/partial/common.js.ep:200
msgid "Deletion link"
msgstr ""
@@ -124,7 +132,7 @@ msgstr ""
msgid "Download all images"
msgstr ""
#: themes/default/templates/index.html.ep:93 themes/default/templates/index.html.ep:95 themes/default/templates/partial/lutim.js.ep:102 themes/default/templates/partial/lutim.js.ep:98
#: themes/default/templates/index.html.ep:92 themes/default/templates/index.html.ep:94 themes/default/templates/partial/lutim.js.ep:88 themes/default/templates/partial/lutim.js.ep:92
msgid "Download link"
msgstr ""
@@ -132,7 +140,7 @@ msgstr ""
msgid "Download zip link"
msgstr ""
#: themes/default/templates/index.html.ep:227
#: themes/default/templates/index.html.ep:226
msgid "Drag & drop images here"
msgstr ""
@@ -140,11 +148,11 @@ msgstr ""
msgid "Drag and drop an image in the appropriate area or use the traditional way to send files and Lutim will provide you four URLs. One to view the image, an other to directly download it, one you can use on social networks and a last to delete the image when you want."
msgstr ""
#: themes/default/templates/index.html.ep:162 themes/default/templates/index.html.ep:206
#: themes/default/templates/index.html.ep:161 themes/default/templates/index.html.ep:205
msgid "Encrypt the image (Lutim does not keep the key)."
msgstr ""
#: themes/default/templates/partial/lutim.js.ep:45 themes/default/templates/partial/myfiles.js.ep:128
#: themes/default/templates/partial/lutim.js.ep:38 themes/default/templates/partial/myfiles.js.ep:129
msgid "Error while trying to modify the image."
msgstr ""
@@ -152,7 +160,7 @@ msgstr ""
msgid "Evolution of total files"
msgstr ""
#: themes/default/templates/myfiles.html.ep:120
#: themes/default/templates/myfiles.html.ep:121
msgid "Expires at"
msgstr ""
@@ -160,7 +168,7 @@ msgstr ""
msgid "Export localStorage data"
msgstr ""
#: themes/default/templates/myfiles.html.ep:115
#: themes/default/templates/myfiles.html.ep:116
msgid "File name"
msgstr ""
@@ -180,7 +188,7 @@ msgstr ""
msgid "Hit Ctrl+C, then Enter to copy the short link"
msgstr ""
#: themes/default/templates/layouts/default.html.ep:47
#: themes/default/templates/layouts/default.html.ep:44
msgid "Homepage"
msgstr ""
@@ -200,7 +208,7 @@ msgstr ""
msgid "If the files are deleted if you ask it while posting it, their SHA512 footprint are retained."
msgstr ""
#: themes/default/templates/index.html.ep:188 themes/default/templates/index.html.ep:241
#: themes/default/templates/index.html.ep:187 themes/default/templates/index.html.ep:240
msgid "Image URL"
msgstr ""
@@ -208,11 +216,11 @@ msgstr ""
msgid "Image delay"
msgstr ""
#: themes/default/templates/partial/common.js.ep:157
#: themes/default/templates/partial/common.js.ep:172
msgid "Image deleted"
msgstr ""
#: lib/Lutim/Controller/Image.pm:799
#: lib/Lutim/Controller/Image.pm:815
msgid "Image not found."
msgstr ""
@@ -240,11 +248,7 @@ msgstr ""
msgid "Is it really free (as in free beer)?"
msgstr ""
#: themes/default/templates/about.html.ep:21
msgid "Juste like you pronounce the French word <a href=\"https://fr.wikipedia.org/wiki/Lutin\">lutin</a> (/ly.tɛ̃/)."
msgstr ""
#: themes/default/templates/index.html.ep:165 themes/default/templates/index.html.ep:209
#: themes/default/templates/index.html.ep:164 themes/default/templates/index.html.ep:208
msgid "Keep EXIF tags"
msgstr ""
@@ -252,7 +256,7 @@ msgstr ""
msgid "Language"
msgstr ""
#: themes/default/templates/index.html.ep:130 themes/default/templates/index.html.ep:191 themes/default/templates/index.html.ep:244 themes/default/templates/partial/lutim.js.ep:165
#: themes/default/templates/index.html.ep:129 themes/default/templates/index.html.ep:190 themes/default/templates/index.html.ep:243 themes/default/templates/partial/lutim.js.ep:157
msgid "Let's go!"
msgstr ""
@@ -260,7 +264,7 @@ msgstr ""
msgid "License:"
msgstr ""
#: themes/default/templates/index.html.ep:101 themes/default/templates/index.html.ep:103 themes/default/templates/partial/lutim.js.ep:112 themes/default/templates/partial/lutim.js.ep:116
#: themes/default/templates/index.html.ep:100 themes/default/templates/index.html.ep:102 themes/default/templates/partial/lutim.js.ep:102 themes/default/templates/partial/lutim.js.ep:106
msgid "Link for share on social networks"
msgstr ""
@@ -284,11 +288,11 @@ msgstr ""
msgid "Main developers"
msgstr ""
#: themes/default/templates/index.html.ep:85 themes/default/templates/index.html.ep:87 themes/default/templates/partial/lutim.js.ep:86 themes/default/templates/partial/lutim.js.ep:89
#: themes/default/templates/index.html.ep:84 themes/default/templates/index.html.ep:86 themes/default/templates/partial/lutim.js.ep:76 themes/default/templates/partial/lutim.js.ep:79
msgid "Markdown syntax"
msgstr ""
#: themes/default/templates/partial/myfiles.js.ep:179
#: themes/default/templates/partial/myfiles.js.ep:200
msgid "Modify expiration delay"
msgstr ""
@@ -300,15 +304,15 @@ msgstr ""
msgid "Next (arrow right)"
msgstr ""
#: themes/default/templates/partial/myfiles.js.ep:120 themes/default/templates/partial/myfiles.js.ep:162
#: themes/default/templates/partial/myfiles.js.ep:121 themes/default/templates/partial/myfiles.js.ep:163
msgid "No limit"
msgstr ""
#: themes/default/templates/index.html.ep:177 themes/default/templates/index.html.ep:221
#: themes/default/templates/index.html.ep:176 themes/default/templates/index.html.ep:220
msgid "No watermark"
msgstr ""
#: themes/default/templates/index.html.ep:190 themes/default/templates/index.html.ep:236
#: themes/default/templates/index.html.ep:189 themes/default/templates/index.html.ep:235
msgid "Only images are allowed"
msgstr ""
@@ -353,7 +357,7 @@ msgstr ""
msgid "Save changes"
msgstr ""
#: themes/default/templates/index.html.ep:183
#: themes/default/templates/index.html.ep:182
msgid "Send an image"
msgstr ""
@@ -361,19 +365,23 @@ msgstr ""
msgid "Signin"
msgstr ""
#: themes/default/templates/index.html.ep:174 themes/default/templates/index.html.ep:218
#: themes/default/templates/index.html.ep:173 themes/default/templates/index.html.ep:217
msgid "Single watermark"
msgstr ""
#: themes/default/templates/index.html.ep:145 themes/default/templates/partial/gallery.js.ep:211 themes/default/templates/partial/lutim.js.ep:176
#: themes/default/templates/index.html.ep:144 themes/default/templates/partial/gallery.js.ep:210 themes/default/templates/partial/lutim.js.ep:166
msgid "Something bad happened"
msgstr ""
#. ($c->config('contact')
#: lib/Lutim/Controller/Image.pm:806
#: lib/Lutim/Controller/Image.pm:822
msgid "Something went wrong when creating the zip file. Try again later or contact the administrator (%1)."
msgstr ""
#: lib/Lutim/Controller/Image.pm:294
msgid "Sorry, the API is disabled"
msgstr ""
#: themes/default/templates/about.html.ep:13
msgid "The IP address of the image's sender is retained for a delay which depends of the administrator's choice (for the official instance, which is located in France, it's one year)."
msgstr ""
@@ -382,7 +390,7 @@ msgstr ""
msgid "The Lutim software is a <a href=\"http://en.wikipedia.org/wiki/Free_software\">free software</a>, which allows you to download and install it on you own server. Have a look at the <a href=\"https://www.gnu.org/licenses/agpl-3.0.html\">AGPL</a> to see what you can do."
msgstr ""
#: lib/Lutim/Controller/Image.pm:348
#: lib/Lutim/Controller/Image.pm:365
msgid "The URL is not valid."
msgstr ""
@@ -394,19 +402,19 @@ msgstr ""
msgid "The data has been successfully imported."
msgstr ""
#: lib/Lutim/Controller/Image.pm:160 lib/Lutim/Controller/Image.pm:228
#: lib/Lutim/Controller/Image.pm:161 lib/Lutim/Controller/Image.pm:229
msgid "The delete token is invalid."
msgstr ""
#. ($upload->filename)
#: lib/Lutim/Controller/Image.pm:531
#: lib/Lutim/Controller/Image.pm:547
msgid "The file %1 is not an image."
msgstr ""
#. ($tx->res->max_message_size)
#. ($c->req->max_message_size)
#. (config('max_file_size')
#: lib/Lutim/Controller/Image.pm:312 lib/Lutim/Controller/Image.pm:381 themes/default/templates/partial/lutim.js.ep:249
#: lib/Lutim/Controller/Image.pm:329 lib/Lutim/Controller/Image.pm:395 themes/default/templates/partial/lutim.js.ep:239
msgid "The file exceed the size limit (%1)"
msgstr ""
@@ -415,12 +423,12 @@ msgid "The graph's datas are not updated in real-time."
msgstr ""
#. ($image->filename)
#: lib/Lutim/Controller/Image.pm:230
#: lib/Lutim/Controller/Image.pm:231
msgid "The image %1 has already been deleted."
msgstr ""
#. ($image->filename)
#: lib/Lutim/Controller/Image.pm:239 lib/Lutim/Controller/Image.pm:244
#: lib/Lutim/Controller/Image.pm:240 lib/Lutim/Controller/Image.pm:245
msgid "The image %1 has been successfully deleted"
msgstr ""
@@ -432,20 +440,25 @@ msgstr ""
msgid "The images you post on Lutim can be stored indefinitely or be deleted at first view or after a delay selected from those proposed."
msgstr ""
#: lib/Lutim/Controller/Image.pm:168
#: lib/Lutim/Controller/Image.pm:169
msgid "The images delay has been successfully modified"
msgstr ""
#: themes/default/templates/partial/gallery.js.ep:277
#. ('https://fr.wikipedia.org/wiki/Lutin')
#: themes/default/templates/about.html.ep:21
msgid "The way you pronounce the French word <a href=\"%1\">lutin</a> (/ly.tɛ̃/)."
msgstr ""
#: themes/default/templates/partial/gallery.js.ep:271
msgid "There is XXXX image(s) in the gallery"
msgstr ""
#. ($c->config->{contact})
#: lib/Lutim/Controller/Image.pm:528
#: lib/Lutim/Controller/Image.pm:544
msgid "There is no more available URL. Retry or contact the administrator. %1"
msgstr ""
#: themes/default/templates/index.html.ep:171 themes/default/templates/index.html.ep:215
#: themes/default/templates/index.html.ep:170 themes/default/templates/index.html.ep:214
msgid "Tiling watermark"
msgstr ""
@@ -461,24 +474,20 @@ msgstr ""
msgid "Total"
msgstr ""
#: themes/default/templates/index.html.ep:72 themes/default/templates/partial/lutim.js.ep:17
msgid "Tweet it!"
msgstr ""
#: themes/default/templates/partial/common.js.ep:110 themes/default/templates/partial/common.js.ep:90
msgid "Unable to copy to clipboard"
msgstr ""
#. ($short)
#: lib/Lutim/Controller/Image.pm:108 lib/Lutim/Controller/Image.pm:202 lib/Lutim/Controller/Image.pm:273
#: lib/Lutim/Controller/Image.pm:109 lib/Lutim/Controller/Image.pm:203 lib/Lutim/Controller/Image.pm:274
msgid "Unable to find the image %1."
msgstr ""
#: lib/Lutim/Controller/Image.pm:617 lib/Lutim/Controller/Image.pm:662 lib/Lutim/Controller/Image.pm:703 lib/Lutim/Controller/Image.pm:746 lib/Lutim/Controller/Image.pm:758 lib/Lutim/Controller/Image.pm:769 lib/Lutim/Controller/Image.pm:796 lib/Lutim/Plugin/Helpers.pm:89
#: lib/Lutim/Controller/Image.pm:633 lib/Lutim/Controller/Image.pm:678 lib/Lutim/Controller/Image.pm:719 lib/Lutim/Controller/Image.pm:762 lib/Lutim/Controller/Image.pm:774 lib/Lutim/Controller/Image.pm:785 lib/Lutim/Controller/Image.pm:812 lib/Lutim/Plugin/Helpers.pm:90
msgid "Unable to find the image: it has been deleted."
msgstr ""
#: lib/Lutim/Controller/Image.pm:145
#: lib/Lutim/Controller/Image.pm:146
msgid "Unable to get counter"
msgstr ""
@@ -486,11 +495,11 @@ msgstr ""
msgid "Unlike many image sharing services, you don't give us rights on uploaded images."
msgstr ""
#: themes/default/templates/index.html.ep:187 themes/default/templates/index.html.ep:239
#: themes/default/templates/index.html.ep:186 themes/default/templates/index.html.ep:238
msgid "Upload an image with its URL"
msgstr ""
#: themes/default/templates/myfiles.html.ep:119
#: themes/default/templates/myfiles.html.ep:120
msgid "Uploaded at"
msgstr ""
@@ -499,11 +508,11 @@ msgid "Uploaded files by days"
msgstr ""
#. ($c->app->config('contact')
#: lib/Lutim/Plugin/Helpers.pm:222
#: lib/Lutim/Plugin/Helpers.pm:223
msgid "Uploading is currently disabled, please try later or contact the administrator (%1)."
msgstr ""
#: themes/default/templates/index.html.ep:77 themes/default/templates/index.html.ep:79 themes/default/templates/myfiles.html.ep:116 themes/default/templates/partial/lutim.js.ep:72 themes/default/templates/partial/lutim.js.ep:76
#: themes/default/templates/index.html.ep:76 themes/default/templates/index.html.ep:78 themes/default/templates/myfiles.html.ep:117 themes/default/templates/partial/lutim.js.ep:62 themes/default/templates/partial/lutim.js.ep:66
msgid "View link"
msgstr ""
@@ -559,7 +568,7 @@ msgstr ""
msgid "core developer"
msgstr ""
#: lib/Lutim.pm:340 lib/Lutim/Command/cron/stats.pm:154 lib/Lutim/Command/cron/stats.pm:168 lib/Lutim/Command/cron/stats.pm:185 themes/default/templates/index.html.ep:3 themes/default/templates/myfiles.html.ep:3 themes/default/templates/partial/raw.js.ep:21 themes/default/templates/partial/raw.js.ep:4 themes/default/templates/raw.html.ep:6
#: lib/Lutim.pm:344 lib/Lutim/Command/cron/stats.pm:154 lib/Lutim/Command/cron/stats.pm:168 lib/Lutim/Command/cron/stats.pm:185 themes/default/templates/index.html.ep:3 themes/default/templates/myfiles.html.ep:3 themes/default/templates/partial/raw.js.ep:21 themes/default/templates/partial/raw.js.ep:4 themes/default/templates/raw.html.ep:6
msgid "no time limit"
msgstr ""

View File

@@ -263,13 +263,8 @@ msgid "Is it really free (as in free beer)?"
msgstr "Es vertadièrament gratuit ?"
#: themes/default/templates/about.html.ep:21
msgid ""
"Juste like you pronounce the French word <a href=\"https://fr.wikipedia.org/"
"wiki/Lutin\">lutin</a> (/ly.tɛ̃/)."
msgstr ""
"Òm pronóncia coma en occitan lengadocian, LU-TI-N, amb una M finala que sona "
"N, o coma la paraula francesa <a href=\"https://fr.wikipedia.org/wiki/"
"Lutin\">lutin</a> (/ly.tɛ̃/)."
msgid "The way you pronounce the French word <a href=\"%1\">lutin</a> (/ly.tɛ̃/)."
msgstr "Òm pronóncia coma en occitan lengadocian, LU-TI-N, amb una M finala que sona N, o coma la paraula francesa <a href=\"%1\">lutin</a> (/ly.tɛ̃/)."
#: themes/default/templates/index.html.ep:171 themes/default/templates/index.html.ep:202
msgid "Keep EXIF tags"

View File

@@ -258,12 +258,8 @@ msgid "Is it really free (as in free beer)?"
msgstr "Это действительно бесплатно (as in free beer)?"
#: themes/default/templates/about.html.ep:21
msgid ""
"Juste like you pronounce the French word <a href=\"https://fr.wikipedia.org/"
"wiki/Lutin\">lutin</a> (/ly.tɛ̃/)."
msgstr ""
"Как французское слово <a href=\"https://fr.wikipedia.org/wiki/Lutin\">lutin</"
"a> (/ly.tɛ̃/)."
msgid "The way you pronounce the French word <a href=\"%1\">lutin</a> (/ly.tɛ̃/)."
msgstr "Как французское слово <a href=\"%1\">lutin</a> (/ly.tɛ̃/)."
#: themes/default/templates/index.html.ep:171 themes/default/templates/index.html.ep:202
msgid "Keep EXIF tags"

View File

@@ -244,10 +244,8 @@ msgid "Is it really free (as in free beer)?"
msgstr "Är det verkligen gratis?"
#: themes/default/templates/about.html.ep:21
msgid "Juste like you pronounce the French word <a href=\"https://fr.wikipedia.org/wiki/Lutin\">lutin</a> (/ly.tɛ̃/)."
msgstr ""
"Precis som du uttalar ordet <a href=\"https://fr.wikipedia.org/wiki/Lutin\""
">lutin</a> på franska ([ly.tɛ̃])."
msgid "The way you pronounce the French word <a href=\"%1\">lutin</a> (/ly.tɛ̃/)."
msgstr "Precis som du uttalar ordet <a href=\"%1\">lutin</a> på franska ([ly.tɛ̃])."
#: themes/default/templates/index.html.ep:165 themes/default/templates/index.html.ep:196
msgid "Keep EXIF tags"

File diff suppressed because one or more lines are too long

View File

@@ -134,3 +134,21 @@ h1.ellips {
overflow: hidden;
text-overflow: ellipsis;
}
/*
* a11y
*/
.navbar-default .navbar-brand,
.navbar-default .navbar-nav > li > a,
.navbar-default .navbar-text {
color: #555;
}
.navbar-default .navbar-nav > li > a:focus
.navbar-default .navbar-nav > li > a:hover {
color: #111;
}
.btn-primary {
background-color: #3c74c8;
}

View File

@@ -1 +1 @@
@-moz-keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-o-keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-ms-keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.animate-spin{-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear;display:inline-block}.uploader{border:2px dotted #a5a5c7;width:100%;color:#92aab0;text-align:center;vertical-align:middle;padding:30px 0;margin-bottom:10px;font-size:200%;cursor:default;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.uploader div.or{font-size:50%;font-weight:700;color:silver;padding:10px}@media (max-width:768px){.uploader div.browser label{max-width:95%}}@media (min-width:768px){.uploader div.browser label{width:300px}}.uploader div.browser label{background-color:#5a7bc2;color:#fff;padding:6px 0;font-size:40%;font-weight:700;cursor:pointer;border-radius:2px;position:relative;overflow:hidden;display:block;margin:20px auto 0;box-shadow:2px 2px 2px #888}.uploader div.browser span{cursor:pointer}.uploader div.browser input{position:absolute;top:0;right:0;margin:0;border:solid transparent;border-width:0 0 100px 200px;opacity:0;filter:alpha(opacity= 0);-o-transform:translate(250px,-50px) scale(1);-moz-transform:translate(-300px,0) scale(4);direction:ltr;cursor:pointer}.uploader div.browser label:hover{background-color:#427fed}@font-face{font-family:"markdown";src:url(../../font/markdown.eot?-6fnbp5);src:url(../../font/markdown.eot?#iefix-6fnbp5)format("embedded-opentype"),url(../../font/markdown.woff?-6fnbp5)format("woff"),url(../../font/markdown.ttf?-6fnbp5)format("truetype"),url(../../font/markdown.svg?-6fnbp5#markdown)format("svg");font-weight:400;font-style:normal}[class*=" markdown-"],[class^=markdown-]{font-family:"markdown";speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.markdown-mark:before{content:""}.markdown-mark-solid:before{content:""}
@-moz-keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-o-keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-ms-keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.animate-spin{-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear;display:inline-block}.uploader{border:2px dotted #a5a5c7;width:100%;color:#777;text-align:center;vertical-align:middle;padding:30px 0;margin-bottom:10px;font-size:200%;cursor:default;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.uploader div.or{font-size:50%;font-weight:700;color:#677;padding:10px}@media (max-width:768px){.uploader div.browser label{max-width:95%}}@media (min-width:768px){.uploader div.browser label{width:300px}}.uploader div.browser label{background-color:#416bc4;color:#fff;padding:6px 0;font-size:40%;font-weight:700;cursor:pointer;border-radius:2px;position:relative;overflow:hidden;display:block;margin:20px auto 0;box-shadow:2px 2px 2px #888}.uploader div.browser span{cursor:pointer}.uploader div.browser input{position:absolute;top:0;right:0;margin:0;border:solid transparent;border-width:0 0 100px 200px;opacity:0;filter:alpha(opacity= 0);-o-transform:translate(250px,-50px) scale(1);-moz-transform:translate(-300px,0) scale(4);direction:ltr;cursor:pointer}.uploader div.browser label:hover{background-color:#427fed}@font-face{font-family:"markdown";src:url(../../font/markdown.eot?-6fnbp5);src:url(../../font/markdown.eot?#iefix-6fnbp5)format("embedded-opentype"),url(../../font/markdown.woff?-6fnbp5)format("woff"),url(../../font/markdown.ttf?-6fnbp5)format("truetype"),url(../../font/markdown.svg?-6fnbp5#markdown)format("svg");font-weight:400;font-style:normal}[class*=" markdown-"],[class^=markdown-]{font-family:"markdown";speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.markdown-mark:before{content:""}.markdown-mark-solid:before{content:""}

View File

@@ -2,7 +2,7 @@
{
border: 2px dotted #A5A5C7;
width: 100%;
color: #92AAB0;
color: #777;
text-align: center;
vertical-align: middle;
padding: 30px 0px;
@@ -22,7 +22,7 @@
.uploader div.or {
font-size: 50%;
font-weight: bold;
color: #C0C0C0;
color: #677;
padding: 10px;
}
@@ -39,7 +39,7 @@
}
.uploader div.browser label {
background-color: #5a7bc2;
background-color: #416bc4;
padding: 5px 15px;
color: white;
padding: 6px 0px;

View File

@@ -110,6 +110,7 @@ $('document').ready(function() {
$('#import').on('change', function() { importStorage(this.files); })
$('#mod-delay').on('click', modifyDelay);
$('#check-all').on('click', checkAll)
$('#mass-delete').on('click', massDelete);
}
$('.copy-to-clipboard-link').on('click', clickOnCopyLink);
$('.copy-all-to-clipboard-link').on('click', copyAllToClipboard);

View File

@@ -18,7 +18,7 @@
<h4><%= l('How to report an image?') %></h4>
<p><%= l('Please contact the administrator: %1', config('contact')) %></p>
<h4><%= l('How do you pronounce Lutim?') %></h4>
<p><%== l('Juste like you pronounce the French word <a href="https://fr.wikipedia.org/wiki/Lutin">lutin</a> (/ly.tɛ̃/).') %></p>
<p><%== l('The way you pronounce the French word <a href="%1">lutin</a> (/ly.tɛ̃/).', 'https://fr.wikipedia.org/wiki/Lutin') %></p>
<h4><%= l('What about the software which provides the service?') %></h4>
<p><%== l('The Lutim software is a <a href="http://en.wikipedia.org/wiki/Free_software">free software</a>, which allows you to download and install it on you own server. Have a look at the <a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL</a> to see what you can do.') %></p>
<p><%== l('For more details, see the <a href="https://framagit.org/fiat-tux/hat-softwares/lutim">homepage of the project</a>.') %></p>

View File

@@ -180,7 +180,7 @@
</div>
<div class="form-group">
<label for="lutim-file"><%= l('Send an image') %></label>
<input type="file" name="file" id="lutim-file" accept="image/*">
<input type="file" name="file" id="lutim-file" accept="image/*,image/avif">
</div>
<div class="form-group">
<label for="lutim-file-url"><%= l('Upload an image with its URL') %></label>
@@ -228,7 +228,7 @@
<div class="browser">
<label>
<span><%= l('Click to open the file browser') %></span>
<input type="file" name="files[]" multiple="multiple" title='<%= l('Click to open the file browser') %>' accept="image/*">
<input type="file" name="files[]" multiple="multiple" title='<%= l('Click to open the file browser') %>' accept="image/*,image/avif">
</label>
</div>
</div>

View File

@@ -1,8 +1,10 @@
% # vim:set sw=4 ts=4 sts=4 ft=html.epl expandtab:
% use Mojo::Util qw(url_escape);
% my $url = url_for('/')->to_abs();
% my $lang = $self->languages;
% $lang =~ s/-(.*)/_\U$1/;
<!DOCTYPE html>
<html>
<html lang="<%= $lang %>">
<head>
<title>Lutim</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">

View File

@@ -106,6 +106,7 @@
<a href="#" id="json-export" class="btn btn-info"><%= l('Export localStorage data') %></a>
<a href="#" id="json-import" class="btn btn-info"><%= l('Import localStorage data') %></a>
<input type="file" class="hidden" id="import">
<a href="#" id="mass-delete" class="btn btn-info" disabled><%= l('Delete selected images') %></a>
</div>
<div class="table-responsive">
<table class="table table-hover">

View File

@@ -139,10 +139,25 @@ function clickOnCopyLink(e) {
e.preventDefault();
copyToClipboard($(this));
}
function delImageConfirm(e) {
e.preventDefault();
var short = $(this).attr('data-short');
if (confirm(`<%= l('Are you sure you want to delete the image ${short}?') %>`)) {
var token = $(this).attr('data-token');
var ext = $(this).attr('data-ext');
delImageRequest(short, token);
rmFromShortHash(`${short}.${ext}`);
rmFromZipHash(short);
rmFromRandomHash(short);
}
}
function delImage(e) {
e.preventDefault();
var short = $(this).attr('data-short');
var token = $(this).attr('data-token');
delImageRequest(short, token);
}
function delImageRequest(short, token) {
$.ajax({
url: `<%= url_for('/') %>d/${short}/${token}`,
method: 'GET',
@@ -162,10 +177,13 @@ function delImage(e) {
error: function() {
},
complete: function() {
if (typeof evaluateMassDelete === "function") {
evaluateMassDelete();
}
}
});
}
function link(url, dl, token, modify, only_url) {
function link(url, dl, token, modify, only_url, ext) {
if (token !== undefined) {
if (modify !== undefined && modify === true) {
return `<%== url_for('/m/')->to_abs() %>${url}/${token}`;
@@ -182,6 +200,7 @@ function link(url, dl, token, modify, only_url) {
title="<%= l('Deletion link') %>"
id="del-${url}"
data-short="${url}"
data-ext="${ext}"
data-token="${token}">
<span class="icon icon-trash"></span>
</a>

View File

@@ -114,7 +114,7 @@ function buildMessage(success, msg) {
</div>
<div class="form-group">
<div class="input-group col-sm-6 col-xs-12">
<span class="form-control-static">${link(msg.real_short, '', msg.token)}</span>
<span class="form-control-static">${link(msg.real_short, '', msg.token, false, false, msg.ext)}</span>
</div>
</div>
</form>
@@ -214,13 +214,7 @@ function bindddz(firstview, deleteday) {
rmFromZipHash(data.msg.short);
rmFromRandomHash(data.msg.short);
});
$(`#del-${data.msg.real_short}`).on('click', function(e) {
e.preventDefault();
rmFromShortHash(`${data.msg.short}.${data.msg.ext}`);
rmFromZipHash(data.msg.short);
rmFromRandomHash(data.msg.short);
});
$(`#del-${data.msg.real_short}`).on('click', delImage);
$(`#del-${data.msg.real_short}`).on('click', delImageConfirm);
if (data.success) {
addToShortHash(`${data.msg.short}.${data.msg.ext}`);
addToZipHash(data.msg.short);

View File

@@ -54,6 +54,7 @@ function itemExists(name) {
}
function onCheck(e) {
e.preventDefault();
evaluateMassDelete();
var short = $(this).data('short');
var ext = $(this).data('ext');
if ($(this).is(':checked')) {
@@ -212,6 +213,13 @@ function populateFilesTable() {
</tr>`;
$('#myfiles').append(tr);
$(`#del-${real_short}`).on('click', delImage);
$(`#del-${real_short}`).on('click', function(e) {
e.preventDefault();
rmFromShortHash(`${element.short}.${element.ext}`);
rmFromZipHash(element.short);
rmFromRandomHash(element.short);
});
$(`#edit-${real_short}`).on('click', editImage);
$.ajax({
@@ -241,3 +249,23 @@ function populateFilesTable() {
$('input.ckbx[type="checkbox"]').on('change', onCheck);
$('.copy-to-clipboard').on('click', copyLink);
}
function evaluateMassDelete() {
if ($('input.ckbx:checked').length > 0) {
$('#mass-delete').removeAttr('disabled');
$('#mass-delete').removeClass('disabled');
} else {
$('#mass-delete').attr('disabled');
$('#mass-delete').addClass('disabled');
}
}
function massDelete(event) {
event.preventDefault();
$('input.ckbx:checked').each(delIm);
}
function delIm() {
var short = $(this).attr('data-short');
$(`#del-${short}`).click();
}

View File

@@ -39,12 +39,14 @@
% }
% }
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
<span class="icon-language" aria-hidden="true" title="<%= l('Language') %>"></span><span class="caret"></span>
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
<i class="icon-language" aria-hidden="true" title="<%= l('Language') %>"></i>
<span class="sr-only"><%= l('Language') %></span>
<span class="caret"></span>
</a>
<ul class="dropdown-menu" role="menu">
% for my $i (@{$self->available_langs}) {
<li<%== ($i eq $lang) ? ' class="active"' : '' %>>
<li<%== ($i eq $lang) ? ' class="active"' : '' %> role="menuitem">
<a href="<%= url_for('lang', l => $i) %>" class="set-lang"><%= iso639_native_name($i) %></a>
</li>
% }

View File

@@ -181,7 +181,7 @@
</div>
<div class="form-group">
<label for="lutim-file"><%= l('Send an image') %></label>
<input type="file" name="file" id="lutim-file" accept="image/*">
<input type="file" name="file" id="lutim-file" accept="image/*,image/avif">
</div>
<div class="form-group">
<label for="lutim-file-url"><%= l('Upload an image with its URL') %></label>
@@ -231,7 +231,7 @@
<div class="browser">
<label class="btn">
<span><%= l('Click to open the file browser') %></span>
<input type="file" name="files[]" multiple="multiple" title='<%= l('Click to open the file browser') %>' accept="image/*">
<input type="file" name="files[]" multiple="multiple" title='<%= l('Click to open the file browser') %>' accept="image/*,image/avif">
</label>
</div>
</div>

View File

@@ -73,7 +73,7 @@ function buildMessage(success, msg) {
</div>
<div class="form-group">
<div class="input-group">
<span class="form-control-static">${link(msg.real_short, '', msg.token)}</span>
<span class="form-control-static">${link(msg.real_short, '', msg.token, false, false, msg.ext)}</span>
</div>
</div>
</form>
@@ -129,3 +129,13 @@ function buildMessage(success, msg) {
</div>`;
}
}
// Overwrite the function to edit the gallery selector: `.container .gallery` instead of `.gallery` as the page name is added
// to the body's classnames in this theme.
function appendToGallery(url, width, height) {
$('.container .gallery').append(`<figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="${url}" itemprop="contentUrl" data-size="${width}x${height}">
<img src="${url}?width=275" itemprop="thumbnail" alt="" class="img-responsive"/>
</a>
</figure>`);
}