This commit is contained in:
Luc Didry 2015-10-04 19:44:51 +02:00
parent 2dfb0e5998
commit 60e157ff71
18 changed files with 282 additions and 134 deletions

View File

@ -217,19 +217,34 @@ sub get_counter {
my $short = $c->param('short'); my $short = $c->param('short');
my $token = $c->param('token'); my $token = $c->param('token');
my @records = LufiDB::Files->select('WHERE short = ? AND mod_token = ?', ($short, $token)); my @records = LufiDB::Files->select('WHERE short = ?', $short);
if (scalar(@records)) { if (scalar(@records)) {
return $c->render( if ($records[0]->mod_token eq $token) {
json => { return $c->render(
success => true, json => {
counter => $records[0]->counter success => true,
} short => $short,
); counter => $records[0]->counter,
deleted => ($records[0]->deleted) ? true : false
}
);
} else {
return $c->render(
json => {
success => false,
missing => false,
short => $short,
msg => $c->l('Unable to get counter for %1. The token is unvalid.', $short)
}
);
}
} else { } else {
return $c->render( return $c->render(
json => { json => {
success => false, success => false,
msg => $c->l('Unable to get counter for %1. The file does not exists.', $short) missing => true,
short => $short,
msg => $c->l('Unable to get counter for %1. The file does not exists. It will be removed from your localStorage.', $short)
} }
); );
} }

View File

@ -29,14 +29,10 @@ msgstr ""
msgid "24 hours" msgid "24 hours"
msgstr "" msgstr ""
#: templates/mail.html.ep:70 #: templates/mail.html.ep:69
msgid ":" msgid ":"
msgstr "" msgstr ""
#: templates/files.html.ep:84
msgid ": Error while trying to get the counter."
msgstr ""
#: templates/layouts/default.html.ep:41 #: templates/layouts/default.html.ep:41
msgid "About" msgid "About"
msgstr "" msgstr ""
@ -57,7 +53,7 @@ msgstr ""
msgid "Copy to clipboard" msgid "Copy to clipboard"
msgstr "" msgstr ""
#: lib/Lufi/Controller/Files.pm:267 #: lib/Lufi/Controller/Files.pm:282
msgid "Could not find the file. Are you sure of the URL and the token?" msgid "Could not find the file. Are you sure of the URL and the token?"
msgstr "" msgstr ""
@ -65,15 +61,15 @@ msgstr ""
msgid "Could not find the file. Are you sure of the URL?" msgid "Could not find the file. Are you sure of the URL?"
msgstr "" msgstr ""
#: templates/files.html.ep:15 #: templates/files.html.ep:16
msgid "Counter" msgid "Counter"
msgstr "" msgstr ""
#: templates/files.html.ep:16 templates/index.html.ep:52 #: templates/files.html.ep:17 templates/index.html.ep:52
msgid "Delete at first download?" msgid "Delete at first download?"
msgstr "" msgstr ""
#: templates/files.html.ep:19 templates/index.html.ep:79 #: templates/files.html.ep:20 templates/index.html.ep:79
msgid "Deletion link" msgid "Deletion link"
msgstr "" msgstr ""
@ -85,7 +81,7 @@ msgstr ""
msgid "Download" msgid "Download"
msgstr "" msgstr ""
#: templates/files.html.ep:14 templates/index.html.ep:80 #: templates/files.html.ep:15 templates/index.html.ep:80
msgid "Download link" msgid "Download link"
msgstr "" msgstr ""
@ -121,19 +117,19 @@ msgstr ""
msgid "Expiration:" msgid "Expiration:"
msgstr "" msgstr ""
#: templates/files.html.ep:18 #: templates/files.html.ep:19
msgid "Expires at" msgid "Expires at"
msgstr "" msgstr ""
#: lib/Lufi/Controller/Files.pm:251 #: lib/Lufi/Controller/Files.pm:266
msgid "File deleted" msgid "File deleted"
msgstr "" msgstr ""
#: templates/files.html.ep:13 #: templates/files.html.ep:14
msgid "File name" msgid "File name"
msgstr "" msgstr ""
#: templates/mail.html.ep:65 #: templates/mail.html.ep:64
msgid "Hello,\\n\\nHere's some files I want to share with you:\\n" msgid "Hello,\\n\\nHere's some files I want to share with you:\\n"
msgstr "" msgstr ""
@ -178,11 +174,11 @@ msgstr ""
msgid "No enough space available on the server for this file (size: %1)." msgid "No enough space available on the server for this file (size: %1)."
msgstr "" msgstr ""
#: templates/files.html.ep:34 templates/index.html.ep:86 #: templates/index.html.ep:86
msgid "No expiration delay" msgid "No expiration delay"
msgstr "" msgstr ""
#: templates/files.html.ep:6 #: templates/files.html.ep:7
msgid "Only the files sent with this browser will be listed here. The informations are stored in localStorage: if you delete your localStorage data, you'll loose this informations." msgid "Only the files sent with this browser will be listed here. The informations are stored in localStorage: if you delete your localStorage data, you'll loose this informations."
msgstr "" msgstr ""
@ -190,6 +186,10 @@ msgstr ""
msgid "Please wait while we are getting your file" msgid "Please wait while we are getting your file"
msgstr "" msgstr ""
#: templates/files.html.ep:6
msgid "Purge expired files from localStorage"
msgstr ""
#: templates/index.html.ep:85 #: templates/index.html.ep:85
msgid "Send all links by email" msgid "Send all links by email"
msgstr "" msgstr ""
@ -203,7 +203,7 @@ msgid "Send with your own mail software"
msgstr "" msgstr ""
#. (url_for('/') #. (url_for('/')
#: templates/mail.html.ep:78 #: templates/mail.html.ep:77
msgid "Share your files in total privacy on %1" msgid "Share your files in total privacy on %1"
msgstr "" msgstr ""
@ -223,7 +223,7 @@ msgstr ""
msgid "The email subject can't be empty." msgid "The email subject can't be empty."
msgstr "" msgstr ""
#: lib/Lufi/Controller/Files.pm:248 #: lib/Lufi/Controller/Files.pm:263
msgid "The file has already been deleted" msgid "The file has already been deleted"
msgstr "" msgstr ""
@ -241,15 +241,20 @@ msgid "This server sets limitations according to the file size. The expiration d
msgstr "" msgstr ""
#. ($short) #. ($short)
#: lib/Lufi/Controller/Files.pm:232 #: lib/Lufi/Controller/Files.pm:247
msgid "Unable to get counter for %1. The file does not exists." msgid "Unable to get counter for %1. The file does not exists. It will be removed from your localStorage."
msgstr ""
#. ($short)
#: lib/Lufi/Controller/Files.pm:237
msgid "Unable to get counter for %1. The token is unvalid."
msgstr "" msgstr ""
#: templates/layouts/default.html.ep:39 #: templates/layouts/default.html.ep:39
msgid "Upload files" msgid "Upload files"
msgstr "" msgstr ""
#: templates/files.html.ep:17 #: templates/files.html.ep:18
msgid "Uploaded at" msgid "Uploaded at"
msgstr "" msgstr ""
@ -288,7 +293,7 @@ msgstr ""
msgid "between %1 and %2, the file will be kept forever." msgid "between %1 and %2, the file will be kept forever."
msgstr "" msgstr ""
#: templates/mail.html.ep:72 #: templates/mail.html.ep:71
msgid "deadline: " msgid "deadline: "
msgstr "" msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
"PO-Revision-Date: 2015-10-04 16:33+0200\n" "PO-Revision-Date: 2015-10-04 19:44+0200\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
@ -19,7 +19,8 @@ msgstr ""
#. ($delay) #. ($delay)
#. (max_delay) #. (max_delay)
#: templates/index.html.ep:29 templates/index.html.ep:38 templates/index.html.ep:39 #: templates/index.html.ep:29 templates/index.html.ep:38
#: templates/index.html.ep:39
msgid "%1 days" msgid "%1 days"
msgstr "%1 jours" msgstr "%1 jours"
@ -31,11 +32,10 @@ msgstr "1 an"
msgid "24 hours" msgid "24 hours"
msgstr "24 heures" msgstr "24 heures"
#: templates/mail.html.ep:70 #: templates/mail.html.ep:69
msgid ":" msgid ":"
msgstr " :" msgstr " :"
#: templates/files.html.ep:84
msgid ": Error while trying to get the counter." msgid ": Error while trying to get the counter."
msgstr " : erreur en essayant de récupérer le compteur" msgstr " : erreur en essayant de récupérer le compteur"
@ -59,7 +59,7 @@ msgstr "Copier tous les liens dans le presse-papier"
msgid "Copy to clipboard" msgid "Copy to clipboard"
msgstr "Copier dans le presse-papier" msgstr "Copier dans le presse-papier"
#: lib/Lufi/Controller/Files.pm:267 #: lib/Lufi/Controller/Files.pm:282
msgid "Could not find the file. Are you sure of the URL and the token?" msgid "Could not find the file. Are you sure of the URL and the token?"
msgstr "Impossible de retrouver le fichier. Êtes-vous sûr de lURL et du jeton ?" msgstr "Impossible de retrouver le fichier. Êtes-vous sûr de lURL et du jeton ?"
@ -67,15 +67,15 @@ msgstr "Impossible de retrouver le fichier. Êtes-vous sûr de lURL et du jet
msgid "Could not find the file. Are you sure of the URL?" msgid "Could not find the file. Are you sure of the URL?"
msgstr "Impossible de retrouver le fichier. Êtes-vous sûr de lURL ?" msgstr "Impossible de retrouver le fichier. Êtes-vous sûr de lURL ?"
#: templates/files.html.ep:15 #: templates/files.html.ep:16
msgid "Counter" msgid "Counter"
msgstr "Compteur" msgstr "Compteur"
#: templates/files.html.ep:16 templates/index.html.ep:52 #: templates/files.html.ep:17 templates/index.html.ep:52
msgid "Delete at first download?" msgid "Delete at first download?"
msgstr "Supprimer après le premier téléchargement ?" msgstr "Supprimer après le premier téléchargement ?"
#: templates/files.html.ep:19 templates/index.html.ep:79 #: templates/files.html.ep:20 templates/index.html.ep:79
msgid "Deletion link" msgid "Deletion link"
msgstr "Lien de suppression" msgstr "Lien de suppression"
@ -87,7 +87,7 @@ msgstr "Ne vous inquiétez pas : si un utilisateur commence à télécharger le
msgid "Download" msgid "Download"
msgstr "Télécharger" msgstr "Télécharger"
#: templates/files.html.ep:14 templates/index.html.ep:80 #: templates/files.html.ep:15 templates/index.html.ep:80
msgid "Download link" msgid "Download link"
msgstr "Lien de téléchargement" msgstr "Lien de téléchargement"
@ -123,19 +123,19 @@ msgstr "Erreur : impossible de retrouver le fichier. Êtes-vous sûr de lURL
msgid "Expiration:" msgid "Expiration:"
msgstr "Expiration :" msgstr "Expiration :"
#: templates/files.html.ep:18 #: templates/files.html.ep:19
msgid "Expires at" msgid "Expires at"
msgstr "Expire le" msgstr "Expire le"
#: lib/Lufi/Controller/Files.pm:251 #: lib/Lufi/Controller/Files.pm:266
msgid "File deleted" msgid "File deleted"
msgstr "Fichier supprimé" msgstr "Fichier supprimé"
#: templates/files.html.ep:13 #: templates/files.html.ep:14
msgid "File name" msgid "File name"
msgstr "Nom du fichier" msgstr "Nom du fichier"
#: templates/mail.html.ep:65 #: templates/mail.html.ep:64
msgid "Hello,\\n\\nHere's some files I want to share with you:\\n" msgid "Hello,\\n\\nHere's some files I want to share with you:\\n"
msgstr "Bonjour,\\n\\nVoici quelques fichiers que je souhaite partager avec toi:\\n" msgstr "Bonjour,\\n\\nVoici quelques fichiers que je souhaite partager avec toi:\\n"
@ -180,15 +180,14 @@ msgstr "Mes fichiers"
msgid "No enough space available on the server for this file (size: %1)." msgid "No enough space available on the server for this file (size: %1)."
msgstr "Espace disque insuffisant sur le serveur pour ce fichier (taille du fichier: %1)." msgstr "Espace disque insuffisant sur le serveur pour ce fichier (taille du fichier: %1)."
#: templates/files.html.ep:34 templates/index.html.ep:86 #: templates/index.html.ep:86
msgid "No expiration delay" msgid "No expiration delay"
msgstr "Pas de délai dexpiration" msgstr "Pas de délai dexpiration"
#:
msgid "No limit" msgid "No limit"
msgstr "Aucune limite" msgstr "Aucune limite"
#: templates/files.html.ep:6 #: templates/files.html.ep:7
msgid "Only the files sent with this browser will be listed here. The informations are stored in localStorage: if you delete your localStorage data, you'll loose this informations." msgid "Only the files sent with this browser will be listed here. The informations are stored in localStorage: if you delete your localStorage data, you'll loose this informations."
msgstr "Seuls les fichiers envoyés depuis ce navigateur sont listés ici. Les informations sont stockées en localStorage : si vous supprimez vos données localStorage, vous perdrez ces informations." msgstr "Seuls les fichiers envoyés depuis ce navigateur sont listés ici. Les informations sont stockées en localStorage : si vous supprimez vos données localStorage, vous perdrez ces informations."
@ -196,6 +195,10 @@ msgstr "Seuls les fichiers envoyés depuis ce navigateur sont listés ici. Les i
msgid "Please wait while we are getting your file" msgid "Please wait while we are getting your file"
msgstr "Veuillez patienter pendant la récupération de votre fichier" msgstr "Veuillez patienter pendant la récupération de votre fichier"
#: templates/files.html.ep:6
msgid "Purge expired files from localStorage"
msgstr "Supprimer du localStorage les fichiers expirés"
#: templates/index.html.ep:85 #: templates/index.html.ep:85
msgid "Send all links by email" msgid "Send all links by email"
msgstr "Envoyer tous les liens par mail" msgstr "Envoyer tous les liens par mail"
@ -209,7 +212,7 @@ msgid "Send with your own mail software"
msgstr "Envoyer avec votre propre logiciel de mail" msgstr "Envoyer avec votre propre logiciel de mail"
#. (url_for('/') #. (url_for('/')
#: templates/mail.html.ep:78 #: templates/mail.html.ep:77
msgid "Share your files in total privacy on %1" msgid "Share your files in total privacy on %1"
msgstr "Partagez vos fichiers en toute confidentialité sur %1" msgstr "Partagez vos fichiers en toute confidentialité sur %1"
@ -229,7 +232,7 @@ msgstr "Le corps du mail ne peut être vide."
msgid "The email subject can't be empty." msgid "The email subject can't be empty."
msgstr "Le sujet du mail ne peut être vide." msgstr "Le sujet du mail ne peut être vide."
#: lib/Lufi/Controller/Files.pm:248 #: lib/Lufi/Controller/Files.pm:263
msgid "The file has already been deleted" msgid "The file has already been deleted"
msgstr "Le fichier a déjà été supprimé" msgstr "Le fichier a déjà été supprimé"
@ -246,16 +249,24 @@ msgstr "Le mail a été envoyé."
msgid "This server sets limitations according to the file size. The expiration delay of your file will be the minimum between what you choose and the following limitations:" msgid "This server sets limitations according to the file size. The expiration delay of your file will be the minimum between what you choose and the following limitations:"
msgstr "Ce serveur impose des limitations selon la taille des fichiers. Le délai dexpiration de votre fichier sera le minimum entre ce que vous avez choisi et les limites suivantes :" msgstr "Ce serveur impose des limitations selon la taille des fichiers. Le délai dexpiration de votre fichier sera le minimum entre ce que vous avez choisi et les limites suivantes :"
#. ($short)
#: lib/Lufi/Controller/Files.pm:232
msgid "Unable to get counter for %1. The file does not exists." msgid "Unable to get counter for %1. The file does not exists."
msgstr "Impossible de récupérer le compteur de %1. Le fichier nexiste pas." msgstr "Impossible de récupérer le compteur de %1. Le fichier nexiste pas."
#. ($short)
#: lib/Lufi/Controller/Files.pm:247
msgid "Unable to get counter for %1. The file does not exists. It will be removed from your localStorage."
msgstr "Impossible de récupérer le compteur pour %1. Le fichier n'existe pas. Il va être supprimé de votre localStorage."
#. ($short)
#: lib/Lufi/Controller/Files.pm:237
msgid "Unable to get counter for %1. The token is unvalid."
msgstr "Impossible de récupérer le compteur pour %1. Le jeton est invalide."
#: templates/layouts/default.html.ep:39 #: templates/layouts/default.html.ep:39
msgid "Upload files" msgid "Upload files"
msgstr "Envoyer des fichiers" msgstr "Envoyer des fichiers"
#: templates/files.html.ep:17 #: templates/files.html.ep:18
msgid "Uploaded at" msgid "Uploaded at"
msgstr "Envoyé le" msgstr "Envoyé le"
@ -294,7 +305,7 @@ msgstr "entre %1 et %2, le fichier sera conservé %3 jour(s) ;"
msgid "between %1 and %2, the file will be kept forever." msgid "between %1 and %2, the file will be kept forever."
msgstr "entre %1 et %2, le fichier sera conservé indéfiniment ;" msgstr "entre %1 et %2, le fichier sera conservé indéfiniment ;"
#: templates/mail.html.ep:72 #: templates/mail.html.ep:71
msgid "deadline: " msgid "deadline: "
msgstr "dernier délai pour télécharger : " msgstr "dernier délai pour télécharger : "

View File

@ -4,4 +4,5 @@
.icon-trash:before { content: '\e802'; } /* '' */ .icon-trash:before { content: '\e802'; } /* '' */
.icon-mail:before { content: '\e803'; } /* '' */ .icon-mail:before { content: '\e803'; } /* '' */
.icon-help-circled:before { content: '\e804'; } /* '' */ .icon-help-circled:before { content: '\e804'; } /* '' */
.icon-cancel:before { content: '\e805'; } /* '' */ .icon-cancel:before { content: '\e805'; } /* '' */
.icon-ok:before { content: '\e806'; } /* '' */

File diff suppressed because one or more lines are too long

View File

@ -4,4 +4,5 @@
.icon-trash { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } .icon-trash { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
.icon-mail { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } .icon-mail { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
.icon-help-circled { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } .icon-help-circled { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
.icon-cancel { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } .icon-cancel { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
.icon-ok { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }

View File

@ -15,4 +15,5 @@
.icon-trash { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } .icon-trash { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
.icon-mail { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } .icon-mail { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
.icon-help-circled { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } .icon-help-circled { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
.icon-cancel { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } .icon-cancel { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
.icon-ok { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }

View File

@ -1,10 +1,10 @@
@font-face { @font-face {
font-family: 'fontello'; font-family: 'fontello';
src: url('../font/fontello.eot?5451170'); src: url('../font/fontello.eot?88898605');
src: url('../font/fontello.eot?5451170#iefix') format('embedded-opentype'), src: url('../font/fontello.eot?88898605#iefix') format('embedded-opentype'),
url('../font/fontello.woff?5451170') format('woff'), url('../font/fontello.woff?88898605') format('woff'),
url('../font/fontello.ttf?5451170') format('truetype'), url('../font/fontello.ttf?88898605') format('truetype'),
url('../font/fontello.svg?5451170#fontello') format('svg'); url('../font/fontello.svg?88898605#fontello') format('svg');
font-weight: normal; font-weight: normal;
font-style: normal; font-style: normal;
} }
@ -14,7 +14,7 @@
@media screen and (-webkit-min-device-pixel-ratio:0) { @media screen and (-webkit-min-device-pixel-ratio:0) {
@font-face { @font-face {
font-family: 'fontello'; font-family: 'fontello';
src: url('../font/fontello.svg?5451170#fontello') format('svg'); src: url('../font/fontello.svg?88898605#fontello') format('svg');
} }
} }
*/ */
@ -59,4 +59,5 @@
.icon-trash:before { content: '\e802'; } /* '' */ .icon-trash:before { content: '\e802'; } /* '' */
.icon-mail:before { content: '\e803'; } /* '' */ .icon-mail:before { content: '\e803'; } /* '' */
.icon-help-circled:before { content: '\e804'; } /* '' */ .icon-help-circled:before { content: '\e804'; } /* '' */
.icon-cancel:before { content: '\e805'; } /* '' */ .icon-cancel:before { content: '\e805'; } /* '' */
.icon-ok:before { content: '\e806'; } /* '' */

75
public/font/README.txt Normal file
View File

@ -0,0 +1,75 @@
This webfont is generated by http://fontello.com open source project.
================================================================================
Please, note, that you should obey original font licences, used to make this
webfont pack. Details available in LICENSE.txt file.
- Usually, it's enough to publish content of LICENSE.txt file somewhere on your
site in "About" section.
- If your project is open-source, usually, it will be ok to make LICENSE.txt
file publically available in your repository.
- Fonts, used in Fontello, don't require a clickable link on your site.
But any kind of additional authors crediting is welcome.
================================================================================
Comments on archive content
---------------------------
- /font/* - fonts in different formats
- /css/* - different kinds of css, for all situations. Should be ok with
twitter bootstrap. Also, you can skip <i> style and assign icon classes
directly to text elements, if you don't mind about IE7.
- demo.html - demo file, to show your webfont content
- LICENSE.txt - license info about source fonts, used to build your one.
- config.json - keeps your settings. You can import it back into fontello
anytime, to continue your work
Why so many CSS files ?
-----------------------
Because we like to fit all your needs :)
- basic file, <your_font_name>.css - is usually enough, it contains @font-face
and character code definitions
- *-ie7.css - if you need IE7 support, but still don't wish to put char codes
directly into html
- *-codes.css and *-ie7-codes.css - if you like to use your own @font-face
rules, but still wish to benefit from css generation. That can be very
convenient for automated asset build systems. When you need to update font -
no need to manually edit files, just override old version with archive
content. See fontello source code for examples.
- *-embedded.css - basic css file, but with embedded WOFF font, to avoid
CORS issues in Firefox and IE9+, when fonts are hosted on the separate domain.
We strongly recommend to resolve this issue by `Access-Control-Allow-Origin`
server headers. But if you ok with dirty hack - this file is for you. Note,
that data url moved to separate @font-face to avoid problems with <IE9, when
string is too long.
- animate.css - use it to get ideas about spinner rotation animation.
Attention for server setup
--------------------------
You MUST setup server to reply with proper `mime-types` for font files -
otherwise some browsers will fail to show fonts.
Usually, `apache` already has necessary settings, but `nginx` and other
webservers should be tuned. Here is list of mime types for our file extensions:
- `application/vnd.ms-fontobject` - eot
- `application/x-font-woff` - woff
- `application/x-font-ttf` - ttf
- `image/svg+xml` - svg

Binary file not shown.

View File

@ -12,6 +12,7 @@
<glyph glyph-name="mail" unicode="&#xe803;" d="m0 28v644q0 8 2 18l460-460q39-39 95-39 55 0 94 39l460 460q2-9 2-18v-644q0-37-26-62t-62-26h-937q-36 0-62 26t-26 62z m63 728q13 4 25 4h937q12 0 25-4l-463-463q-13-12-31-12t-30 12z" horiz-adv-x="1113.3" /> <glyph glyph-name="mail" unicode="&#xe803;" d="m0 28v644q0 8 2 18l460-460q39-39 95-39 55 0 94 39l460 460q2-9 2-18v-644q0-37-26-62t-62-26h-937q-36 0-62 26t-26 62z m63 728q13 4 25 4h937q12 0 25-4l-463-463q-13-12-31-12t-30 12z" horiz-adv-x="1113.3" />
<glyph glyph-name="help-circled" unicode="&#xe804;" d="m500 82v107q0 8-5 13t-13 5h-107q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h107q8 0 13 5t5 13z m143 375q0 49-31 91t-77 65-95 23q-136 0-207-119-9-14 4-24l74-55q4-4 10-4 9 0 14 7 30 38 48 51 19 14 48 14 27 0 48-15t21-33q0-21-11-34t-38-25q-35-16-65-48t-29-70v-20q0-8 5-13t13-5h107q8 0 13 5t5 13q0 10 12 27t30 28q18 10 28 16t25 19 25 27 16 34 7 45z m214-107q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" /> <glyph glyph-name="help-circled" unicode="&#xe804;" d="m500 82v107q0 8-5 13t-13 5h-107q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h107q8 0 13 5t5 13z m143 375q0 49-31 91t-77 65-95 23q-136 0-207-119-9-14 4-24l74-55q4-4 10-4 9 0 14 7 30 38 48 51 19 14 48 14 27 0 48-15t21-33q0-21-11-34t-38-25q-35-16-65-48t-29-70v-20q0-8 5-13t13-5h107q8 0 13 5t5 13q0 10 12 27t30 28q18 10 28 16t25 19 25 27 16 34 7 45z m214-107q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
<glyph glyph-name="cancel" unicode="&#xe805;" d="m724 112q0-22-15-38l-76-76q-16-15-38-15t-38 15l-164 165-164-165q-16-15-38-15t-38 15l-76 76q-16 16-16 38t16 38l164 164-164 164q-16 16-16 38t16 38l76 76q16 16 38 16t38-16l164-164 164 164q16 16 38 16t38-16l76-76q15-15 15-38t-15-38l-164-164 164-164q15-15 15-38z" horiz-adv-x="785.7" /> <glyph glyph-name="cancel" unicode="&#xe805;" d="m724 112q0-22-15-38l-76-76q-16-15-38-15t-38 15l-164 165-164-165q-16-15-38-15t-38 15l-76 76q-16 16-16 38t16 38l164 164-164 164q-16 16-16 38t16 38l76 76q16 16 38 16t38-16l164-164 164 164q16 16 38 16t38-16l76-76q15-15 15-38t-15-38l-164-164 164-164q15-15 15-38z" horiz-adv-x="785.7" />
<glyph glyph-name="ok" unicode="&#xe806;" d="m932 534q0-22-15-38l-404-404-76-76q-16-15-38-15t-38 15l-76 76-202 202q-15 16-15 38t15 38l76 76q16 16 38 16t38-16l164-165 366 367q16 16 38 16t38-16l76-76q15-16 15-38z" horiz-adv-x="1000" />
</font> </font>
</defs> </defs>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Binary file not shown.

View File

@ -6,6 +6,12 @@
"units_per_em": 1000, "units_per_em": 1000,
"ascent": 850, "ascent": 850,
"glyphs": [ "glyphs": [
{
"uid": "12f4ece88e46abd864e40b35e05b11cd",
"css": "ok",
"code": 59398,
"src": "fontawesome"
},
{ {
"uid": "5211af474d3a9848f67f945e2ccaf143", "uid": "5211af474d3a9848f67f945e2ccaf143",
"css": "cancel", "css": "cancel",

View File

@ -58,6 +58,7 @@ function spawnWebsocket() {
if (data.msg !== undefined) { if (data.msg !== undefined) {
addAlert(data.msg); addAlert(data.msg);
window.onbeforeunload = null;
} else { } else {
var slice = JSON.parse(res.shift()); var slice = JSON.parse(res.shift());
var percent = Math.round(100 * (data.part + 1)/data.total); var percent = Math.round(100 * (data.part + 1)/data.total);

84
public/js/lufi-files.js Normal file
View File

@ -0,0 +1,84 @@
function delItem(name) {
var files = localStorage.getItem('files');
if (files === null) {
files = new Array();
} else {
files = JSON.parse(files);
}
var i;
for (i = 0; i < files.length; i++) {
if (files[i].short === name) {
files.splice(i, 1);
}
}
localStorage.setItem('files', JSON.stringify(files));
}
function purgeExpired() {
var files = JSON.parse(localStorage.getItem('files'));
files.forEach(function(element, index, array) {
var xhr = new XMLHttpRequest();
xhr.open('POST', counterURL);
xhr.onreadystatechange = function() {
if (xhr.readyState>3 && xhr.status==200) {
var data = JSON.parse(xhr.responseText);
if (data.success) {
if (data.deleted) {
document.getElementById('count-'+data.short).parentNode.remove();
delItem(data.short);
}
}
}
};
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.send('short='+element.short+'&token='+element.token);
});
}
function populateFilesTable() {
var files = JSON.parse(localStorage.getItem('files'));
files.reverse();
files.forEach(function(element, index, array) {
var del_view = (element.del_at_first_view) ? '<span class="icon icon-ok"></span>' : '<span class="icon icon-cancel"></span>';
var dlink = baseURL+'d/'+element.short+'/'+element.token;
var limit = (element.delay === 0) ? i18n.noExpiration : moment.unix(element.delay * 86400 + element.created_at).locale(window.navigator.language).format('LLLL');
var created_at = moment.unix(element.created_at).locale(window.navigator.language).format('LLLL');
var tr = document.createElement('tr');
tr.innerHTML = '<td class="text-left">'
+element.name
+'</td><td class="text-left">'
+'<a href="'+element.url+'" class="classic">'+element.url+'</a>'
+'</td><td id="count-'+element.short+'" class="text-center">'
+'</td><td class="text-center">'
+del_view
+'</td><td>'
+created_at
+'</td><td>'
+limit
+'</td><td class="text-left">'
+'<a href="'+dlink+'" class="classic">'+dlink+'</a>'
+'</td>';
document.getElementById('myfiles').appendChild(tr);
var xhr = new XMLHttpRequest();
xhr.open('POST', counterURL);
xhr.onreadystatechange = function() {
if (xhr.readyState>3 && xhr.status==200) {
var data = JSON.parse(xhr.responseText);
if (data.success) {
document.getElementById('count-'+data.short).innerHTML = data.counter;
} else {
alert(data.msg);
document.getElementById('count-'+data.short).parentNode.remove();
if (data.missing) {
delItem(data.short);
}
}
}
};
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.send('short='+element.short+'&token='+element.token);
});
}

View File

@ -3,6 +3,7 @@
<hr> <hr>
<p> <p>
<a href="#" onclick="purgeExpired();" class="pull-right btn btn-info btn-xs"><%= l('Purge expired files from localStorage') %></a>
<%= l('Only the files sent with this browser will be listed here. The informations are stored in localStorage: if you delete your localStorage data, you\'ll loose this informations.') %> <%= l('Only the files sent with this browser will be listed here. The informations are stored in localStorage: if you delete your localStorage data, you\'ll loose this informations.') %>
</p> </p>
@ -25,69 +26,14 @@
</div> </div>
%= javascript begin %= javascript begin
function populateFilesTable() { var baseURL = '<%== url_for('/')->to_abs() %>';
var files = JSON.parse(localStorage.getItem('files')); var counterURL = '<%== url_for('counter') %>';
files.reverse(); var i18n = {
files.forEach(function(element, index, array) { noExpiration: '<%== url_for('counter') %>',
var del_view = (element.del_at_first_view) ? '<span class="glyphicon glyphicon-ok"></span>' : '<span class="glyphicon glyphicon-remove"></span>'; };
var dlink = '<%== url_for('/')->to_abs() %>d/'+element.short+'/'+element.token; document.addEventListener('DOMContentLoaded', function() {
var limit = (element.delay === 0) ? '<%= l('No expiration delay') %>' : moment.unix(element.delay * 86400 + element.created_at).locale(window.navigator.language).format('LLLL'); populateFilesTable();
var created_at = moment.unix(element.created_at).locale(window.navigator.language).format('LLLL'); });
var tr = document.createElement('tr');
tr.innerHTML = '<td class="text-left">'
+element.name
+'</td><td class="text-left">'
+'<a href="'+element.url+'" class="classic">'+element.url+'</a>'
+'</td><td id="count-'+element.short+'" class="text-center">'
+'</td><td class="text-center">'
+del_view
+'</td><td>'
+created_at
+'</td><td>'
+limit
+'</td><td class="text-left">'
+'<a href="'+dlink+'" class="classic">'+dlink+'</a>'
+'</td>';
document.getElementById('myfiles').appendChild(tr);
var xhr = new XMLHttpRequest();
xhr.open('POST', '<%== url_for('counter') %>');
xhr.onreadystatechange = function() {
if (xhr.readyState>3 && xhr.status==200) {
var data = JSON.parse(xhr.responseText);
if (data.success) {
document.getElementById('count-'+element.short).innerHTML = data.counter;
} else {
alert(data.msg);
}
}
};
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.send('short='+element.short+'&token='+element.token);
/*$.ajax({
url : '<%== url_for('counter') %>',
type : 'POST',
data : {
'short': element.short,
'token': element.token
},
success: function(data) {
if (data.success) {
$('#count-'+element.id).text(data.counter);
} else {
alert(data.msg);
}
},
error: function() {
alert(element.filename+'<%= l(': Error while trying to get the counter.') %>');
}
});*/
});
}
document.addEventListener('DOMContentLoaded', function() {
populateFilesTable();
});
% end % end
%= javascript '/js/lufi-files.js'
%= javascript '/js/moment-with-locales.min.js' %= javascript '/js/moment-with-locales.min.js'

View File

@ -44,7 +44,6 @@
} else { } else {
files = JSON.parse(files); files = JSON.parse(files);
} }
var r = null;
var i; var i;
for (i = 0; i < files.length; i++) { for (i = 0; i < files.length; i++) {
if (files[i].short === name) { if (files[i].short === name) {