Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Lufi
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
40
Issues
40
List
Boards
Labels
Service Desk
Milestones
Merge Requests
3
Merge Requests
3
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Fiat Tux
Hat softwares
Lufi
Commits
ae8934c1
Commit
ae8934c1
authored
Oct 03, 2015
by
Luc Didry
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix
#2
Add share by mail page
parent
50aa763e
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
405 additions
and
27 deletions
+405
-27
cpanfile
cpanfile
+2
-0
cpanfile.snapshot
cpanfile.snapshot
+155
-0
lib/Lufi.pm
lib/Lufi.pm
+15
-1
lib/Lufi/Controller/Mail.pm
lib/Lufi/Controller/Mail.pm
+59
-0
lib/Lufi/I18N/en.po
lib/Lufi/I18N/en.po
+31
-15
lufi.conf.template
lufi.conf.template
+14
-2
public/js/lufi-up.js
public/js/lufi-up.js
+24
-5
templates/index.html.ep
templates/index.html.ep
+4
-1
templates/mail.html.ep
templates/mail.html.ep
+96
-0
templates/msg.html.ep
templates/msg.html.ep
+5
-3
No files found.
cpanfile
View file @
ae8934c1
...
...
@@ -2,8 +2,10 @@ requires "Mojolicious";
requires "ORLite";
requires "Mojolicious::Plugin::DebugDumperHelper";
requires 'Mojolicious::Plugin::I18N';
requires 'Mojolicious::Plugin::Mail';
requires 'EV';
requires 'Filesys::DiskUsage';
requires 'Switch';
requires 'Locale::Maketext';
requires 'Locale::Maketext::Extract';
requires 'Email::Valid';
cpanfile.snapshot
View file @
ae8934c1
...
...
@@ -153,6 +153,26 @@ DISTRIBUTIONS
Canary::Stability 0
ExtUtils::MakeMaker 6.52
common::sense 0
Email-Date-Format-1.005
pathname: R/RJ/RJBS/Email-Date-Format-1.005.tar.gz
provides:
Email::Date::Format 1.005
requirements:
Exporter 5.57
ExtUtils::MakeMaker 0
Time::Local 0
strict 0
warnings 0
Email-Valid-1.196
pathname: R/RJ/RJBS/Email-Valid-1.196.tar.gz
provides:
Email::Valid 1.196
requirements:
ExtUtils::MakeMaker 0
Mail::Address 0
Scalar::Util 0
Test::More 0
perl 5.006
File-Remove-1.52
pathname: A/AD/ADAMK/File-Remove-1.52.tar.gz
provides:
...
...
@@ -210,6 +230,87 @@ DISTRIBUTIONS
requirements:
ExtUtils::MakeMaker 6.30
Locale::Maketext 1.17
MIME-Charset-1.012
pathname: N/NE/NEZUMI/MIME-Charset-1.012.tar.gz
provides:
MIME::Charset 1.012
requirements:
CPAN 0
Encode 1.98
ExtUtils::MakeMaker 6.42
Test::More 0
perl 5.005
MIME-EncWords-1.014.3
pathname: N/NE/NEZUMI/MIME-EncWords-1.014.3.tar.gz
provides:
Encode::MIME::EncWords 0.03
MIME::EncWords 1.014003
requirements:
Encode 1.98
ExtUtils::MakeMaker 0
MIME::Base64 2.13
MIME::Charset v1.10.1
Test::More 0
MIME-Lite-3.030
pathname: R/RJ/RJBS/MIME-Lite-3.030.tar.gz
provides:
MIME::Lite 3.030
MIME::Lite::IO_Handle 3.030
MIME::Lite::IO_Scalar 3.030
MIME::Lite::IO_ScalarArray 3.030
MIME::Lite::SMTP 3.030
MailTool undef
requirements:
Email::Date::Format 1.000
ExtUtils::MakeMaker 0
File::Basename 0
File::Spec 0
MIME::Types 1.28
MIME-Types-2.11
pathname: M/MA/MARKOV/MIME-Types-2.11.tar.gz
provides:
MIME::Type 2.11
MIME::Types 2.11
MojoX::MIME::Types 2.11
requirements:
ExtUtils::MakeMaker 0
File::Basename 0
File::Spec 0
List::Util 0
Test::More 0.47
MailTools-2.14
pathname: M/MA/MARKOV/MailTools-2.14.tar.gz
provides:
Mail undef
Mail::Address 2.14
Mail::Cap 2.14
Mail::Field 2.14
Mail::Field::AddrList 2.14
Mail::Field::Date 2.14
Mail::Field::Generic 2.14
Mail::Filter 2.14
Mail::Header 2.14
Mail::Internet 2.14
Mail::Mailer 2.14
Mail::Mailer::qmail 2.14
Mail::Mailer::rfc822 2.14
Mail::Mailer::sendmail 2.14
Mail::Mailer::smtp 2.14
Mail::Mailer::smtp::pipe 2.14
Mail::Mailer::smtps 2.14
Mail::Mailer::smtps::pipe 2.14
Mail::Mailer::testfile 2.14
Mail::Mailer::testfile::pipe 2.14
Mail::Send 2.14
Mail::Util 2.14
requirements:
Date::Format 0
Date::Parse 0
ExtUtils::MakeMaker 0
IO::Handle 0
Net::Domain 1.05
Net::SMTP 1.03
Test::More 0
Module-Build-0.4214
pathname: L/LE/LEONT/Module-Build-0.4214.tar.gz
provides:
...
...
@@ -392,6 +493,17 @@ DISTRIBUTIONS
Mojolicious 5
Test::More 0
perl 5.010001
Mojolicious-Plugin-Mail-1.5
pathname: S/SH/SHARIFULN/Mojolicious-Plugin-Mail-1.5.tar.gz
provides:
Mojolicious::Plugin::Mail 1.5
requirements:
Encode 0
MIME::EncWords 0
MIME::Lite 3.027
Mojolicious 5
Test::More 0
perl 5.001001
ORLite-1.98
pathname: A/AD/ADAMK/ORLite-1.98.tar.gz
provides:
...
...
@@ -475,6 +587,49 @@ DISTRIBUTIONS
Test::Builder::Tester 1.02
Test::More 0
perl 5.006
TimeDate-2.30
pathname: G/GB/GBARR/TimeDate-2.30.tar.gz
provides:
Date::Format 2.24
Date::Format::Generic 2.24
Date::Language 1.10
Date::Language::Afar 0.99
Date::Language::Amharic 1.00
Date::Language::Austrian 1.01
Date::Language::Brazilian 1.01
Date::Language::Bulgarian 1.01
Date::Language::Chinese 1.00
Date::Language::Chinese_GB 1.01
Date::Language::Czech 1.01
Date::Language::Danish 1.01
Date::Language::Dutch 1.02
Date::Language::English 1.01
Date::Language::Finnish 1.01
Date::Language::French 1.04
Date::Language::Gedeo 0.99
Date::Language::German 1.02
Date::Language::Greek 1.00
Date::Language::Hungarian 1.01
Date::Language::Icelandic 1.01
Date::Language::Italian 1.01
Date::Language::Norwegian 1.01
Date::Language::Oromo 0.99
Date::Language::Romanian 1.01
Date::Language::Russian 1.01
Date::Language::Russian_cp1251 1.01
Date::Language::Russian_koi8r 1.01
Date::Language::Sidama 0.99
Date::Language::Somali 0.99
Date::Language::Spanish 1.00
Date::Language::Swedish 1.01
Date::Language::Tigrinya 1.00
Date::Language::TigrinyaEritrean 1.00
Date::Language::TigrinyaEthiopian 1.00
Date::Language::Turkish 1.0
Date::Parse 2.30
Time::Zone 2.24
requirements:
ExtUtils::MakeMaker 0
common-sense-3.74
pathname: M/ML/MLEHMANN/common-sense-3.74.tar.gz
provides:
...
...
lib/Lufi.pm
View file @
ae8934c1
...
...
@@ -17,12 +17,26 @@ sub startup {
token_length
=>
32
,
secret
=>
['
hfudsifdsih
'],
default_delay
=>
0
,
max_delay
=>
0
max_delay
=>
0
,
mail
=>
{
how
=>
'
sendmail
'
},
mail_sender
=>
'
no-reply@lufi.io
'
}
});
die
"
You need to provide a contact information in lufi.conf!
"
unless
(
defined
(
$config
->
{
contact
}));
# Mail config
my
$mail_config
=
{
type
=>
'
text/plain
',
encoding
=>
'
quoted-printable
',
how
=>
$self
->
config
('
mail
')
->
{'
how
'}
};
$mail_config
->
{
howargs
}
=
$self
->
config
('
mail
')
->
{'
howargs
'}
if
(
defined
$self
->
config
('
mail
')
->
{'
howargs
'});
$self
->
plugin
('
Mail
'
=>
$mail_config
);
# Internationalization
$self
->
plugin
('
I18N
');
...
...
lib/Lufi/Controller/Mail.pm
0 → 100644
View file @
ae8934c1
# vim:set sw=4 ts=4 sts=4 ft=perl expandtab:
package
Lufi::Controller::
Mail
;
use
Mojo::
Base
'
Mojolicious::Controller
';
use
Email::
Valid
;
sub
send_mail
{
my
$c
=
shift
;
my
$validation
=
$c
->
validation
;
return
$c
->
render
(
text
=>
'
Bad CSRF token!
',
status
=>
403
)
if
$validation
->
csrf_protect
->
has_error
('
csrf_token
');
my
$emails
=
$c
->
param
('
emails
');
$emails
=~
s/ //g
;
my
@a
=
split
('
,
',
$emails
);
my
@bad
;
my
@good
;
for
my
$email
(
@a
)
{
if
(
!
Email::
Valid
->
address
(
$email
))
{
push
@bad
,
$email
;
}
}
my
$msg
=
'';
if
(
scalar
(
@bad
))
{
$msg
.=
$c
->
l
('
The following email addresses are not valid: %1
',
join
('
,
',
@bad
))
.
"
\n
";
}
$msg
.=
$c
->
l
('
You must give email addresses.
')
.
"
\n
"
unless
(
scalar
(
@a
));
$msg
.=
$c
->
l
('
The email subject can
\'
t be empty.
')
.
"
\n
"
unless
(
$c
->
param
('
subject
'));
$msg
.=
$c
->
l
('
The email body can
\'
t be empty.
')
.
"
\n
"
unless
(
$c
->
param
('
body
'));
if
(
$msg
)
{
return
$c
->
render
(
template
=>
'
mail
',
msg
=>
$msg
,
values
=>
{
emails
=>
$emails
,
subject
=>
$c
->
param
('
subject
'),
body
=>
$c
->
param
('
body
')
}
)
}
$c
->
mail
(
from
=>
$c
->
config
('
mail_sender
'),
bcc
=>
$emails
,
subject
=>
$c
->
param
('
subject
'),
data
=>
$c
->
param
('
body
')
);
return
$c
->
render
(
template
=>
'
msg
',
msg_success
=>
$c
->
l
('
The mail has been sent.
')
);
}
1
;
lib/Lufi/I18N/en.po
View file @
ae8934c1
...
...
@@ -17,7 +17,7 @@ msgstr ""
#. ($delay)
#. (config('max_delay')
#: templates/index.html.ep:1
2 templates/index.html.ep:21 templates/index.html.ep:22
#: templates/index.html.ep:1
9 templates/index.html.ep:28 templates/index.html.ep:29
msgid "%1 days"
msgstr "%1 days"
...
...
@@ -25,19 +25,23 @@ msgstr "%1 days"
msgid "1 year"
msgstr ""
#: templates/index.html.ep:2
1
templates/index.html.ep:4
#: templates/index.html.ep:2
8
templates/index.html.ep:4
msgid "24 hours"
msgstr ""
#: templates/layouts/default.html.ep:
35
#: templates/layouts/default.html.ep:
41
msgid "About"
msgstr ""
#: templates/index.html.ep:
44
#: templates/index.html.ep:
51
msgid "Click to open the file browser"
msgstr ""
#: templates/index.html.ep:59
#: templates/index.html.ep:65
msgid "Copy all links to clipboard"
msgstr ""
#: templates/index.html.ep:66
msgid "Copy to clipboard"
msgstr ""
...
...
@@ -49,19 +53,23 @@ msgstr ""
msgid "Could not find the file. Are you sure of the URL?"
msgstr ""
#: templates/index.html.ep:
35
#: templates/index.html.ep:
42
msgid "Delete at first view?"
msgstr ""
#: templates/index.html.ep:6
0
#: templates/index.html.ep:6
7
msgid "Deletion link"
msgstr ""
#: templates/index.html.ep:58
#: templates/index.html.ep:69
msgid "Download"
msgstr ""
#: templates/index.html.ep:68
msgid "Download link"
msgstr ""
#: templates/index.html.ep:4
1
#: templates/index.html.ep:4
8
msgid "Drop files here"
msgstr ""
...
...
@@ -69,18 +77,22 @@ msgstr ""
msgid "File deleted"
msgstr ""
#: templates/index.html.ep:
57
#: templates/index.html.ep:
72
msgid "Hit Enter, then Ctrl+C to copy all the download links"
msgstr ""
#: templates/index.html.ep:
56
#: templates/index.html.ep:
71
msgid "Hit Enter, then Ctrl+C to copy the download link"
msgstr ""
#: templates/layouts/default.html.ep:
34
#: templates/layouts/default.html.ep:
40
msgid "My files"
msgstr ""
#: templates/index.html.ep:73
msgid "Send all links by email"
msgstr ""
#: lib/Lufi/Controller/Files.pm:169
msgid "The file has already been deleted"
msgstr ""
...
...
@@ -93,18 +105,22 @@ msgstr ""
msgid "Unable to get counter"
msgstr ""
#: templates/layouts/default.html.ep:3
3
#: templates/layouts/default.html.ep:3
9
msgid "Upload files"
msgstr ""
#: templates/index.html.ep:
49
#: templates/index.html.ep:
56
msgid "Uploaded files"
msgstr ""
#: templates/index.html.ep:70
msgid "You have attempted to leave this page. The upload will be canceled. Are you sure?"
msgstr ""
#: templates/index.html.ep:3
msgid "no time limit"
msgstr ""
#: templates/index.html.ep:4
2
#: templates/index.html.ep:4
9
msgid "or"
msgstr ""
lufi.conf.template
View file @
ae8934c1
...
...
@@ -37,7 +37,6 @@
# optional, no default
#broadcast_message => 'Maintenance',
# default time limit for files
# valid values are 0, 1, 7, 30 and 365
# optional, default is 0 (no limit)
...
...
@@ -62,4 +61,17 @@
# if set, the shortened URLs will use this domain
# optional
#fixed_domain => 'example.org',
};
\ No newline at end of file
# Mail configuration
# See https://metacpan.org/pod/Mojolicious::Plugin::Mail#EXAMPLES
# Optional, default to sendmail method with no arguments
#mail => {
# # Valid values are 'sendmail' and 'smtp'
# how => 'smtp',
# howargs => ['smtp.example.org']
#},
# Email sender address
# Optional, default to no-reply@lufi.io
#mail_sender => 'no-reply@lufi.io'
};
public/js/lufi-up.js
View file @
ae8934c1
...
...
@@ -33,9 +33,11 @@ function copyToClipboard(el) {
}
function
copyAllToClipboard
()
{
var
text
=
new
Array
();
document
.
getElementByClassName
(
'
link-input
'
).
forEach
(
function
(
e
,
index
,
array
)
{
text
.
push
(
e
.
value
);
});
var
a
=
document
.
getElementsByClassName
(
'
link-input
'
);
var
i
;
for
(
i
=
0
;
i
<
a
.
length
;
i
++
)
{
text
.
push
(
a
[
i
].
value
);
}
var
textArea
=
document
.
createElement
(
'
textarea
'
);
textArea
.
style
.
position
=
'
fixed
'
;
textArea
.
style
.
top
=
0
;
...
...
@@ -170,8 +172,9 @@ function updateProgressBar(data) {
if
(
j
+
1
===
parts
)
{
var
d
=
document
.
createElement
(
'
div
'
);
var
url
=
document
.
location
.
href
.
replace
(
/#$/
,
''
)
+
'
r/
'
+
short
+
'
#
'
+
key
;
var
del_url
=
document
.
location
.
href
.
replace
(
/#$/
,
''
)
+
'
d/
'
+
short
+
'
/
'
+
data
.
token
;
var
baseURL
=
document
.
location
.
href
.
replace
(
/#$/
,
''
);
var
url
=
baseURL
+
'
r/
'
+
short
+
'
#
'
+
key
;
var
del_url
=
baseURL
+
'
d/
'
+
short
+
'
/
'
+
data
.
token
;
d
.
innerHTML
=
'
<div class="form-group"><label class="sr-only" for="
'
+
short
+
'
">
'
...
...
@@ -207,6 +210,22 @@ function updateProgressBar(data) {
p2
.
remove
();
p1
.
appendChild
(
d
);
// Add copy all and mailto buttons
var
misc
=
document
.
getElementById
(
'
misc
'
);
if
(
misc
.
innerHTML
===
''
)
{
misc
.
innerHTML
=
'
<a href="#" onclick="copyAllToClipboard();" class="btn btn-info">
'
+
i18n
.
copyAll
+
'
</a> <a id="mailto" href="
'
+
baseURL
+
'
m?links=["
'
+
short
+
'
"]" class="btn btn-info">
'
+
i18n
.
mailTo
+
'
</a>
'
;
}
else
{
var
a
=
document
.
getElementsByClassName
(
'
link-input
'
);
var
l
=
new
Array
();
var
i
;
for
(
i
=
0
;
i
<
a
.
length
;
i
++
)
{
l
.
push
(
a
[
i
].
id
);
}
var
u
=
baseURL
+
'
m?links=
'
+
JSON
.
stringify
(
l
);
document
.
getElementById
(
'
mailto
'
).
href
=
u
;
}
// Add the file to localStorage
addItem
(
data
.
name
,
url
,
data
.
size
,
del_at_first_view
,
created_at
,
delay
,
data
.
short
,
data
.
token
);
i
++
;
...
...
templates/index.html.ep
View file @
ae8934c1
...
...
@@ -54,6 +54,7 @@
</div>
<div
id=
"results"
>
<h2><
%=
l
('
Uploaded
files
')
%
></h2>
<div
id=
"misc"
class=
"form-group"
></div>
<ul
class=
"list-group"
id=
"ul-results"
>
</ul>
</div>
...
...
@@ -61,13 +62,15 @@
%= javascript begin
var ws_url = '
<
%=
url_for
('
upload
')
-
>
to_abs() %>';
var i18n = {
copyAll: '
<
%=
l
('
Copy
all
links
to
clipboard
')
%
>
',
cpText: '
<
%=
l
('
Copy
to
clipboard
')
%
>
',
delText: '
<
%=
l
('
Deletion
link
')
%
>
',
delText:
'
<
%=
l
('
Deletion
link
')
%
>
',
dlText: '
<
%=
l
('
Download
link
')
%
>
',
download: '
<
%=
l
('
Download
')
%
>
',
confirmExit: '
<
%=
l
('
You
have
attempted
to
leave
this
page.
The
upload
will
be
canceled.
Are
you
sure
?')
%
>
',
hit: '
<
%=
l
('
Hit
Enter
,
then
Ctrl
+
C
to
copy
the
download
link
')
%
>
',
hits: '
<
%=
l
('
Hit
Enter
,
then
Ctrl
+
C
to
copy
all
the
download
links
')
%
>
',
mailTo: '
<
%=
l
('
Send
all
links
by
email
')
%
>
',
}
% end
%= javascript '/js/sjcl.js'
...
...
templates/mail.html.ep
0 → 100644
View file @
ae8934c1
% # vim:set sw=4 ts=4 sts=4 ft=html.epl expandtab:
<div
class=
"inner cover render"
>
% if (defined(stash('msg'))) {
<div
class=
"alert alert-warning"
><
%=
stash
('
msg
')
%
></div>
% }
<div
class=
"alert alert-info"
>
<p><
%=
l
('
If
you
send
the
mail
from
this
server
,
the
links
will
be
send
to
the
server
,
which
may
lower
your
privacy
protection.
')
%
></p>
</div>
<form
action=
"<%= url_for('m') %>"
method=
"post"
>
%= csrf_field
<div
class=
"form-group"
>
<label
for=
"emails"
><
%=
l
('
Comma-separated
email
addresses
')
%
></label>
% if (defined(stash('values'))) {
<input
type=
"text"
class=
"form-control"
id=
"emails"
name=
"emails"
placeholder=
"<%= l('Emails') %>"
value=
"<%== stash('values')->{emails} %>"
>
% } else {
<input
type=
"text"
class=
"form-control"
id=
"emails"
name=
"emails"
placeholder=
"<%= l('Emails') %>"
>
% }
</div>
<div
class=
"form-group"
>
<label
for=
"subject"
><
%=
l
('
Email
subject
')
%
></label>
% if (defined(stash('values'))) {
<input
type=
"text"
class=
"form-control"
id=
"subject"
name=
"subject"
value=
"<%= l('Here\'s some files') %>"
value=
"<%== stash('values')->{subject} %>"
>
% } else {
<input
type=
"text"
class=
"form-control"
id=
"subject"
name=
"subject"
value=
"<%= l('Here\'s some files') %>"
>
% }
</div>
<div
class=
"form-group"
>
<label
for=
"body"
><
%=
l
('
Email
body
')
%
></label>
<textarea
class=
"form-control"
id=
"body"
name=
"body"
rows=
"10"
>
% if (defined(stash('values'))) {
<
%==
stash
('
values
')
-
>
{body} %>
% }
</textarea>
</div>
<button
type=
"submit"
class=
"btn btn-info"
><
%=
l
('
Send
with
this
server
')
%
></button>
<a
href=
"#"
class=
"btn btn-primary"
id=
"mailto"
><
%=
l
('
Send
with
your
own
mail
software
')
%
></a>
</form>
</div>
%= javascript begin
function findItem(name) {
console.log(name);
var files = localStorage.getItem('files');
if (files === null) {
files = new Array();
} else {
files = JSON.parse(files);
}
var r = null;
var i;
for (i = 0; i
<
files.length
;
i
++)
{
if
(files[i].short =
==
name
)
{
return
files
[
i
];
}
}
}
function
updateMailtoLink
()
{
var
btn =
document.getElementById('mailto');
var
emails =
document.getElementById('emails');
var
subject =
document.getElementById('subject');
var
text =
document.getElementById('body');
btn.href =
'mailto:'
+
encodeURIComponent
(
emails.value
)+'?
subject=
'+encodeURIComponent(subject.value)+'
&
body=
'+encodeURIComponent(body.value);
}
function populateBody() {
var links = JSON.parse('
<%==
$
self-
>
param('links') %>');
var text = "
<
%==
l
('
Hello
,\
n
\
nHere
\'
s
some
files
I
want
to
share
with
you:
\
n
')
%
>
";
links.forEach(function(name, index, array) {
var item = findItem(name);
if (item !== null) {
var limit = (item.limit === 0) ? null : moment.unix(item.delay * 86400 + item.created_at).locale(window.navigator.language).format('LLLL');
text = text+'- '+item.name+'
<
%=
l
('
:
')
%
>
'+item.url;
if (limit !== null) {
text = text+"\n (
<
%=
l
('
deadline:
')
%
>
"+limit+')';
}
text = text+"\n";
}
});
text = text+"\n--\n
<
%=
l
('
Share
your
files
in
total
privacy
on
%1',
url_for
('/')
-
>
to_abs) %>";
tArea = document.getElementById('body').value = text;
updateMailtoLink();
}
document.addEventListener('DOMContentLoaded', function() {
% unless (defined(stash('msg')) || defined(stash('values'))) {
populateBody();
% }
var emails = document.getElementById('emails');
var subject = document.getElementById('subject');
var text = document.getElementById('body');
emails.addEventListener('change', updateMailtoLink);
subject.addEventListener('change', updateMailtoLink);
text.addEventListener('change', updateMailtoLink);
});
% end
%= javascript '/js/moment-with-locales.min.js'
templates/msg.html.ep
View file @
ae8934c1
% # vim:set sw=4 ts=4 sts=4 ft=html.epl expandtab:
<div
class=
"inner cover render"
>
% if (!defined($f)
&&
defined($msg)) {
<div
class=
"alert alert-warning"
><
%=
$
msg
%
></div>
% if (!defined(stash('f'))
&&
defined(stash('msg'))) {
<div
class=
"alert alert-warning"
><
%=
stash
('
msg
')
%
></div>
% } elsif (defined(stash('msg_success'))) {
<div
class=
"alert alert-success"
><
%=
stash
('
msg_success
')
%
></div>
% } else {
<h2><
%=
stash
('
f
')
-
>
filename %>
</h2>
<div
class=
"alert alert-info"
><
%=
$
msg
%
></div>
<div
class=
"alert alert-info"
><
%=
stash
('
msg
')
%
></div>
% }
</div>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment