diff --git a/.gitignore b/.gitignore index b6a34db..19cc507 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ files/* templates/data.html.ep public/img/rezopole.png public/img/rezopole.xcf +public/packed/* diff --git a/README.md b/README.md index ac17343..10d31b6 100644 --- a/README.md +++ b/README.md @@ -107,6 +107,17 @@ Yup, that's all (Mojolicious magic), it will listen at "http://127.0.0.1:8080". For more options (interfaces, user, etc.), change the configuration in `lutim.conf` (have a look at http://mojolicio.us/perldoc/Mojo/Server/Hypnotoad#SETTINGS for the available options). +***Warning!!!*** + +If you want to update to Lutim **0.3**, from a previous version, you'll have to modify the database. + +``` +sqlite3 lutim.db +PRAGMA writable_schema = 1; +UPDATE SQLITE_MASTER SET SQL = 'CREATE TABLE lutim ( short TEXT PRIMARY KEY, path TEXT, footprint TEXT, enabled INTEGER, mediatype TEXT, filename TEXT, counter INTEGER, delete_at_first_view INTEGER, delete_at_day INTEGER, created_at INTEGER, created_by TEXT, last_access_at INTEGER, mod_token TEXT)' WHERE NAME = 'lutim'; +PRAGMA writable_schema = 0; +``` + ## Reverse proxy You can use a reverse proxy like Nginx or Varnish (or Apache with the mod\_proxy module). The web is full of tutos. diff --git a/cpanfile b/cpanfile index bbe371a..a5a9a32 100644 --- a/cpanfile +++ b/cpanfile @@ -3,6 +3,7 @@ requires 'IO::Socket::SSL'; requires 'Data::Validate::URI'; requires 'Mojolicious::Plugin::I18N'; requires 'Mojolicious::Plugin::ConfigHashMerge'; +requires 'Mojolicious::Plugin::AssetPack'; requires 'ORLite'; requires 'File::Type'; requires 'Text::Unidecode'; diff --git a/lib/Lutim.pm b/lib/Lutim.pm index 7c6bbfb..dbc03fe 100644 --- a/lib/Lutim.pm +++ b/lib/Lutim.pm @@ -13,6 +13,7 @@ sub startup { $self->{wait_for_it} = {}; $self->plugin('I18N'); + $self->plugin('AssetPack'); my $config = $self->plugin('ConfigHashMerge', { default => { @@ -279,6 +280,12 @@ sub startup { } ); + $self->asset('index.css' => 'css/bootstrap.min.css', 'css/fontello.css', 'css/animation.css', 'css/uploader.css', 'css/hennypenny.css', 'css/lutim.css'); + $self->asset('stats.css' => 'css/bootstrap.min.css', 'css/fontello.css', 'css/animation.css', 'css/morris-0.4.3.min.css', 'css/hennypenny.css', 'css/lutim.css'); + $self->asset('about.css' => 'css/bootstrap.min.css', 'css/fontello.css', 'css/animation.css', 'css/hennypenny.css', 'css/lutim.css'); + + $self->asset('index.js' => 'js/jquery-2.1.0.min.js', 'js/bootstrap.min.js', 'js/lutim.js', 'js/dmuploader.min.js'); + $self->asset('stats.js' => 'js/jquery-2.1.0.min.js', 'js/bootstrap.min.js', 'js/lutim.js', 'js/raphael-min.js', 'js/morris-0.4.3.min.js', 'js/stats.js'); $self->defaults(layout => 'default'); diff --git a/public/css/lutim.css b/public/css/lutim.css new file mode 100644 index 0000000..9929ca7 --- /dev/null +++ b/public/css/lutim.css @@ -0,0 +1,34 @@ +body { + padding-top: 40px; + padding-bottom: 40px; +} + +.container { + padding: 15px; + margin: 0 auto; +} + +.jsonly { + display: none; +} + +.thumbnail { + margin-right: 8px; +} + +.hennypenny { + font-family: 'Henny_Penny', cursive; + font-size: 42px; +} + +.logo { + margin-right: 10px; +} +label.always-encrypt { + display: none; +} +.link_nocol, +.link_nocol:hover{ + color: #000000; + text-decoration: none; +} diff --git a/public/js/bootstrap.min.js b/public/js/bootstrap.min.js index d3ec326..22cf62b 100644 --- a/public/js/bootstrap.min.js +++ b/public/js/bootstrap.min.js @@ -4,4 +4,4 @@ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ -+function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function f(){e.trigger("closed.bs.alert").remove()}var c=a(this),d=c.attr("data-target");d||(d=c.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,""));var e=a(d);b&&b.preventDefault(),e.length||(e=c.hasClass("alert")?c:c.parent()),e.trigger(b=a.Event("close.bs.alert"));if(b.isDefaultPrevented())return;e.removeClass("in"),a.support.transition&&e.hasClass("fade")?e.one(a.support.transition.end,f).emulateTransitionEnd(150):f()};var d=a.fn.alert;a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("bs.alert");e||d.data("bs.alert",e=new c(this)),typeof b=="string"&&e[b].call(d)})},a.fn.alert.Constructor=c,a.fn.alert.noConflict=function(){return a.fn.alert=d,this},a(document).on("click.bs.alert.data-api",b,c.prototype.close)}(jQuery),+function(a){"use strict";var b=function(b,c){this.options=c,this.$element=a(b),this.$backdrop=this.isShown=null,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};b.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},b.prototype.toggle=function(a){return this[this.isShown?"hide":"show"](a)},b.prototype.show=function(b){var c=this,d=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(d);if(this.isShown||d.isDefaultPrevented())return;this.isShown=!0,this.escape(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var d=a.support.transition&&c.$element.hasClass("fade");c.$element.parent().length||c.$element.appendTo(document.body),c.$element.show().scrollTop(0),d&&c.$element[0].offsetWidth,c.$element.addClass("in").attr("aria-hidden",!1),c.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:b});d?c.$element.find(".modal-dialog").one(a.support.transition.end,function(){c.$element.focus().trigger(e)}).emulateTransitionEnd(300):c.$element.focus().trigger(e)})},b.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b);if(!this.isShown||b.isDefaultPrevented())return;this.isShown=!1,this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one(a.support.transition.end,a.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal()},b.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]!==a.target&&!this.$element.has(a.target).length&&this.$element.focus()},this))},b.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",a.proxy(function(a){a.which==27&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},b.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.removeBackdrop(),a.$element.trigger("hidden.bs.modal")})},b.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},b.prototype.backdrop=function(b){var c=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var d=a.support.transition&&c;this.$backdrop=a(' @@ -128,7 +128,6 @@ -%= javascript 'js/dmuploader.min.js' %= javascript begin function link(url, dl) { if (dl !== '') { diff --git a/templates/layouts/default.html.ep b/templates/layouts/default.html.ep index 6980e1d..d8ac5af 100644 --- a/templates/layouts/default.html.ep +++ b/templates/layouts/default.html.ep @@ -12,56 +12,13 @@ - %= stylesheet 'css/bootstrap.min.css', media => 'screen' - %= stylesheet 'css/fontello.css' - %= stylesheet 'css/animation.css' % if (current_route 'index') { - %= stylesheet 'css/uploader.css' + %= asset 'index.css' % } elsif (current_route 'stats') { - %= stylesheet 'css/morris-0.4.3.min.css' + %= asset 'stats.css' +% } elsif (current_route 'about') { + %= asset 'about.css' % } - %= stylesheet 'css/hennypenny.css' - %= stylesheet begin - body { - padding-top: 40px; - padding-bottom: 40px; - } - - .container { - padding: 15px; - margin: 0 auto; - } - - .jsonly { - display: none; - } - - .thumbnail { - margin-right: 8px; - } - - .hennypenny { - font-family: 'Henny_Penny', cursive; - font-size: 42px; - } - - .logo { - margin-right: 10px; - } - -% if (config('always_encrypt')) { - label.always-encrypt { - display: none; - } -% } - % end - %= javascript 'js/jquery-2.1.0.min.js' - %= javascript 'js/bootstrap.min.js' - %= javascript begin - $('document').ready(function() { - $('.jsonly').show(); - }); - % end
@@ -97,6 +54,11 @@
<%= stash('stop_upload') %>
+% } +% if (current_route 'index') { + %= asset 'index.js' +% } elsif (current_route 'stats') { + %= asset 'stats.js' % } <%= content %>