diff --git a/css/mediarack.css b/css/mediarack.css index 88c8fb153d6ff2f952992a87e4c0295dec300c69..68c381f6f38495fbad5f97dd680d7ca42159472e 100644 --- a/css/mediarack.css +++ b/css/mediarack.css @@ -15,7 +15,7 @@ body { } .show { - margin-bottom: 50px; + margin-bottom: 25px !important; min-height: 200px; } diff --git a/index.php b/index.php index 6968f5f129a8f6c519b4ec53a4356a28139b8b07..e80a59674851055447481f5373644e638aca420b 100644 --- a/index.php +++ b/index.php @@ -11,21 +11,14 @@ include_once 'config.php'; <meta name="author" content=""> <link rel="shortcut icon" href="img/favicon.png"> <title>MediaRack</title> - <meta property="og:title" content="MediaRack" /> - <meta property="og:description" content="My TV Show and Movie library" /> - <meta property="og:type" content="website" /> - <meta property="og:url" content="http://<?php echo $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; ?>" /> - <meta property="og:image" content="http://<?php echo $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; ?>img/opengraph.jpg" /> - - <link href="css/bootstrap.min.css" rel="stylesheet"> - <link href="css/bootstrap-slate.min.css" rel="stylesheet"> - <link href="css/mediarack.css" rel="stylesheet"> - - <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries --> - <!--[if lt IE 9]> - <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script> - <script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script> - <![endif]--> + <meta property="og:title" content="MediaRack" /> + <meta property="og:description" content="My TV Show and Movie library" /> + <meta property="og:type" content="website" /> + <meta property="og:url" content="https://<?php echo $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; ?>" /> + <meta property="og:image" content="https://<?php echo $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; ?>img/opengraph.jpg" /> + <link href="css/bootstrap.min.css" rel="stylesheet"> + <link href="css/bootstrap-slate.min.css" rel="stylesheet"> + <link href="css/mediarack.css" rel="stylesheet"> </head> <body> @@ -108,9 +101,8 @@ include_once 'config.php'; <script src="js/jquery-1.10.2.min.js"></script> <script src="js/bootstrap.min.js"></script> <script src="js/jquery.jcarousel.min.js"></script> - <script src="js/jquery.lazyload.min.js"></script> - <script src="js/jquery.lazy.min.js"></script> - <script src="js/jquery.scrollstop.js"></script> + <script src="js/jquery.lazyload.js"></script> + <script src="js/jquery.scrollstop.min.js"></script> <script src="js/mediarack.js"></script> <!-- Piwik --> diff --git a/js/jquery.lazyload.js b/js/jquery.lazyload.js new file mode 100644 index 0000000000000000000000000000000000000000..ddabe6d5f47f05449d87f50379a30b46c7050c20 --- /dev/null +++ b/js/jquery.lazyload.js @@ -0,0 +1,246 @@ +/*! + * Lazy Load - jQuery plugin for lazy loading images + * + * Copyright (c) 2007-2015 Mika Tuupola + * + * Licensed under the MIT license: + * http://www.opensource.org/licenses/mit-license.php + * + * Project home: + * http://www.appelsiini.net/projects/lazyload + * + * Version: 1.9.7 + * + */ + +(function($, window, document, undefined) { + var $window = $(window); + + $.fn.lazyload = function(options) { + var elements = this; + var $container; + var settings = { + threshold : 0, + failure_limit : 0, + event : "scroll", + effect : "show", + container : window, + data_attribute : "original", + skip_invisible : false, + appear : null, + load : null, + error : null, + placeholder : "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" + }; + + function update() { + var counter = 0; + + elements.each(function() { + var $this = $(this); + if (settings.skip_invisible && !$this.is(":visible")) { + return; + } + if ($.abovethetop(this, settings) || + $.leftofbegin(this, settings)) { + /* Nothing. */ + } else if (!$.belowthefold(this, settings) && + !$.rightoffold(this, settings)) { + $this.trigger("appear"); + /* if we found an image we'll load, reset the counter */ + counter = 0; + } else { + if (++counter > settings.failure_limit) { + return false; + } + } + }); + + } + + if(options) { + /* Maintain BC for a couple of versions. */ + if (undefined !== options.failurelimit) { + options.failure_limit = options.failurelimit; + delete options.failurelimit; + } + if (undefined !== options.effectspeed) { + options.effect_speed = options.effectspeed; + delete options.effectspeed; + } + + $.extend(settings, options); + } + + /* Cache container as jQuery as object. */ + $container = (settings.container === undefined || + settings.container === window) ? $window : $(settings.container); + + /* Fire one scroll event per scroll. Not one scroll event per image. */ + if (0 === settings.event.indexOf("scroll")) { + $container.bind(settings.event, function() { + return update(); + }); + } + + this.each(function() { + var self = this; + var $self = $(self); + + self.loaded = false; + + /* If no src attribute given use data:uri. */ + if ($self.attr("src") === undefined || $self.attr("src") === false) { + if ($self.is("img")) { + $self.attr("src", settings.placeholder); + } + } + + /* When appear is triggered load original image. */ + $self.one("appear", function() { + if (!this.loaded) { + if (settings.appear) { + var elements_left = elements.length; + settings.appear.call(self, elements_left, settings); + } + $("<img />") + .bind("load", function() { + + var original = $self.attr("data-" + settings.data_attribute); + $self.hide(); + if ($self.is("img")) { + $self.attr("src", original); + } else { + $self.css("background-image", "url('" + original + "')"); + } + $self[settings.effect](settings.effect_speed); + + self.loaded = true; + + /* Remove image from array so it is not looped next time. */ + var temp = $.grep(elements, function(element) { + return !element.loaded; + }); + elements = $(temp); + + if (settings.load) { + var elements_left = elements.length; + settings.load.call(self, elements_left, settings); + } + }) + .bind("error", function() { + settings.error.call(self, settings); + }) + .attr("src", $self.attr("data-" + settings.data_attribute)); + } + }); + + /* When wanted event is triggered load original image */ + /* by triggering appear. */ + if (0 !== settings.event.indexOf("scroll")) { + $self.bind(settings.event, function() { + if (!self.loaded) { + $self.trigger("appear"); + } + }); + } + }); + + /* Check if something appears when window is resized. */ + $window.bind("resize", function() { + update(); + }); + + /* With IOS5 force loading images when navigating with back button. */ + /* Non optimal workaround. */ + if ((/(?:iphone|ipod|ipad).*os 5/gi).test(navigator.appVersion)) { + $window.bind("pageshow", function(event) { + if (event.originalEvent && event.originalEvent.persisted) { + elements.each(function() { + $(this).trigger("appear"); + }); + } + }); + } + + /* Force initial check if images should appear. */ + $(document).ready(function() { + update(); + }); + + return this; + }; + + /* Convenience methods in jQuery namespace. */ + /* Use as $.belowthefold(element, {threshold : 100, container : window}) */ + + $.belowthefold = function(element, settings) { + var fold; + + if (settings.container === undefined || settings.container === window) { + fold = (window.innerHeight ? window.innerHeight : $window.height()) + $window.scrollTop(); + } else { + fold = $(settings.container).offset().top + $(settings.container).height(); + } + + return fold <= $(element).offset().top - settings.threshold; + }; + + $.rightoffold = function(element, settings) { + var fold; + + if (settings.container === undefined || settings.container === window) { + fold = $window.width() + $window.scrollLeft(); + } else { + fold = $(settings.container).offset().left + $(settings.container).width(); + } + + return fold <= $(element).offset().left - settings.threshold; + }; + + $.abovethetop = function(element, settings) { + var fold; + + if (settings.container === undefined || settings.container === window) { + fold = $window.scrollTop(); + } else { + fold = $(settings.container).offset().top; + } + + return fold >= $(element).offset().top + settings.threshold + $(element).height(); + }; + + $.leftofbegin = function(element, settings) { + var fold; + + if (settings.container === undefined || settings.container === window) { + fold = $window.scrollLeft(); + } else { + fold = $(settings.container).offset().left; + } + + return fold >= $(element).offset().left + settings.threshold + $(element).width(); + }; + + $.inviewport = function(element, settings) { + return !$.rightoffold(element, settings) && !$.leftofbegin(element, settings) && + !$.belowthefold(element, settings) && !$.abovethetop(element, settings); + }; + + /* Custom selectors for your convenience. */ + /* Use as $("img:below-the-fold").something() or */ + /* $("img").filter(":below-the-fold").something() which is faster */ + + $.extend($.expr[":"], { + "below-the-fold" : function(a) { return $.belowthefold(a, {threshold : 0}); }, + "above-the-top" : function(a) { return !$.belowthefold(a, {threshold : 0}); }, + "right-of-screen": function(a) { return $.rightoffold(a, {threshold : 0}); }, + "left-of-screen" : function(a) { return !$.rightoffold(a, {threshold : 0}); }, + "in-viewport" : function(a) { return $.inviewport(a, {threshold : 0}); }, + /* Maintain BC for couple of versions. */ + "above-the-fold" : function(a) { return !$.belowthefold(a, {threshold : 0}); }, + "right-of-fold" : function(a) { return $.rightoffold(a, {threshold : 0}); }, + "left-of-fold" : function(a) { return !$.rightoffold(a, {threshold : 0}); } + }); + +})(jQuery, window, document); diff --git a/js/jquery.lazyload.min.js b/js/jquery.lazyload.min.js deleted file mode 100644 index 575abfb2b41bc4d07dc3e326efc38d63fda4d1be..0000000000000000000000000000000000000000 --- a/js/jquery.lazyload.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! Lazy Load 1.9.5 - MIT license - Copyright 2010-2015 Mika Tuupola */ -!function(a,b,c,d){var e=a(b);a.fn.lazyload=function(f){function g(){var b=0;i.each(function(){var c=a(this);if(!j.skip_invisible||c.is(":visible"))if(a.abovethetop(this,j)||a.leftofbegin(this,j));else if(a.belowthefold(this,j)||a.rightoffold(this,j)){if(++b>j.failure_limit)return!1}else c.trigger("appear"),b=0})}var h,i=this,j={threshold:0,failure_limit:0,event:"scroll",effect:"show",container:b,data_attribute:"original",skip_invisible:!1,appear:null,load:null,placeholder:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC"};return f&&(d!==f.failurelimit&&(f.failure_limit=f.failurelimit,delete f.failurelimit),d!==f.effectspeed&&(f.effect_speed=f.effectspeed,delete f.effectspeed),a.extend(j,f)),h=j.container===d||j.container===b?e:a(j.container),0===j.event.indexOf("scroll")&&h.bind(j.event,function(){return g()}),this.each(function(){var b=this,c=a(b);b.loaded=!1,(c.attr("src")===d||c.attr("src")===!1)&&c.is("img")&&c.attr("src",j.placeholder),c.one("appear",function(){if(!this.loaded){if(j.appear){var d=i.length;j.appear.call(b,d,j)}a("<img />").bind("load",function(){var d=c.attr("data-"+j.data_attribute);c.hide(),c.is("img")?c.attr("src",d):c.css("background-image","url('"+d+"')"),c[j.effect](j.effect_speed),b.loaded=!0;var e=a.grep(i,function(a){return!a.loaded});if(i=a(e),j.load){var f=i.length;j.load.call(b,f,j)}}).attr("src",c.attr("data-"+j.data_attribute))}}),0!==j.event.indexOf("scroll")&&c.bind(j.event,function(){b.loaded||c.trigger("appear")})}),e.bind("resize",function(){g()}),/(?:iphone|ipod|ipad).*os 5/gi.test(navigator.appVersion)&&e.bind("pageshow",function(b){b.originalEvent&&b.originalEvent.persisted&&i.each(function(){a(this).trigger("appear")})}),a(c).ready(function(){g()}),this},a.belowthefold=function(c,f){var g;return g=f.container===d||f.container===b?(b.innerHeight?b.innerHeight:e.height())+e.scrollTop():a(f.container).offset().top+a(f.container).height(),g<=a(c).offset().top-f.threshold},a.rightoffold=function(c,f){var g;return g=f.container===d||f.container===b?e.width()+e.scrollLeft():a(f.container).offset().left+a(f.container).width(),g<=a(c).offset().left-f.threshold},a.abovethetop=function(c,f){var g;return g=f.container===d||f.container===b?e.scrollTop():a(f.container).offset().top,g>=a(c).offset().top+f.threshold+a(c).height()},a.leftofbegin=function(c,f){var g;return g=f.container===d||f.container===b?e.scrollLeft():a(f.container).offset().left,g>=a(c).offset().left+f.threshold+a(c).width()},a.inviewport=function(b,c){return!(a.rightoffold(b,c)||a.leftofbegin(b,c)||a.belowthefold(b,c)||a.abovethetop(b,c))},a.extend(a.expr[":"],{"below-the-fold":function(b){return a.belowthefold(b,{threshold:0})},"above-the-top":function(b){return!a.belowthefold(b,{threshold:0})},"right-of-screen":function(b){return a.rightoffold(b,{threshold:0})},"left-of-screen":function(b){return!a.rightoffold(b,{threshold:0})},"in-viewport":function(b){return a.inviewport(b,{threshold:0})},"above-the-fold":function(b){return!a.belowthefold(b,{threshold:0})},"right-of-fold":function(b){return a.rightoffold(b,{threshold:0})},"left-of-fold":function(b){return!a.rightoffold(b,{threshold:0})}})}(jQuery,window,document); \ No newline at end of file diff --git a/js/jquery.scrollstop.js b/js/jquery.scrollstop.js deleted file mode 100644 index a0bb6371002f36c275d90ef0a78f4e951c1b36a4..0000000000000000000000000000000000000000 --- a/js/jquery.scrollstop.js +++ /dev/null @@ -1,72 +0,0 @@ -/* http://james.padolsey.com/javascript/special-scroll-events-for-jquery/ */ - -(function(){ - - var special = jQuery.event.special, - uid1 = "D" + (+new Date()), - uid2 = "D" + (+new Date() + 1); - - special.scrollstart = { - setup: function() { - - var timer, - handler = function(evt) { - - var _self = this, - _args = arguments; - - if (timer) { - clearTimeout(timer); - } else { - evt.type = "scrollstart"; - jQuery.event.dispatch.apply(_self, _args); - } - - timer = setTimeout( function(){ - timer = null; - }, special.scrollstop.latency); - - }; - - jQuery(this).bind("scroll", handler).data(uid1, handler); - - }, - teardown: function(){ - jQuery(this).unbind( "scroll", jQuery(this).data(uid1) ); - } - }; - - special.scrollstop = { - latency: 300, - setup: function() { - - var timer, - handler = function(evt) { - - var _self = this, - _args = arguments; - - if (timer) { - clearTimeout(timer); - } - - timer = setTimeout( function(){ - - timer = null; - evt.type = "scrollstop"; - jQuery.event.dispatch.apply(_self, _args); - - - }, special.scrollstop.latency); - - }; - - jQuery(this).bind("scroll", handler).data(uid2, handler); - - }, - teardown: function() { - jQuery(this).unbind( "scroll", jQuery(this).data(uid2) ); - } - }; - -})(); \ No newline at end of file diff --git a/js/jquery.scrollstop.min.js b/js/jquery.scrollstop.min.js new file mode 100644 index 0000000000000000000000000000000000000000..8b4a78156f314979af34d87be3cb79798495f659 --- /dev/null +++ b/js/jquery.scrollstop.min.js @@ -0,0 +1,2 @@ +/*! Lazy Load 1.9.7 - MIT license - Copyright 2010-2015 Mika Tuupola */ +!function(){var a=jQuery.event.special,b="D"+ +new Date,c="D"+(+new Date+1);a.scrollstart={setup:function(){var c,d=function(b){var d=this,e=arguments;c?clearTimeout(c):(b.type="scrollstart",jQuery.event.dispatch.apply(d,e)),c=setTimeout(function(){c=null},a.scrollstop.latency)};jQuery(this).bind("scroll",d).data(b,d)},teardown:function(){jQuery(this).unbind("scroll",jQuery(this).data(b))}},a.scrollstop={latency:300,setup:function(){var b,d=function(c){var d=this,e=arguments;b&&clearTimeout(b),b=setTimeout(function(){b=null,c.type="scrollstop",jQuery.event.dispatch.apply(d,e)},a.scrollstop.latency)};jQuery(this).bind("scroll",d).data(c,d)},teardown:function(){jQuery(this).unbind("scroll",jQuery(this).data(c))}}}(); \ No newline at end of file diff --git a/js/mediarack.js b/js/mediarack.js index be78ebe3e4ad797fc838644019b0f4b6fcf8a684..bb5f17a81d4cddfb658f5feeb5e42236704b81a2 100644 --- a/js/mediarack.js +++ b/js/mediarack.js @@ -59,9 +59,9 @@ function getLatest(type) { $.each(data, function (key, ep) { var ulLatestContainer = $("#latest"+type); if(type == 'Shows') { - var liLatestItem = $('<li><img src="'+cdn('show/'+escape(ep.show))+'/poster.jpg" /><div class="epLabel">'+ep.show+'<br />'+ep.episode+'<br />'+ep.airdate+'</div></li>'); + var liLatestItem = $('<li><img src="'+cdn('show/'+cleanname(ep.show)+'/poster.jpg')+'" /><div class="epLabel">'+ep.show+'<br />'+ep.episode+'<br />'+ep.airdate+'</div></li>'); }else{ - var liLatestItem = $('<li><img src="'+cdn('movie/'+escape(ep.movie))+'/poster.jpg" /><div class="epLabel">'+ep.movie+'</div></li>'); + var liLatestItem = $('<li><img src="'+cdn('movie/'+cleanname(ep.movie)+'/poster.jpg')+'" /><div class="epLabel">'+ep.movie+'</div></li>'); } ulLatestContainer.append(liLatestItem); }); @@ -127,8 +127,8 @@ function getShows() { } var divShowContainer = $('<div class="show panel panel-default" data-showid="'+show.id+'" id="show_'+show.id+'"></div>'); - var divShowHeader = $('<div class="showName panel-heading"><h2 class="panel-title text-center"><img class="showLogo lazy" style="min-height: 50px; height: 50px;" alt="'+show.name+'" data-original="'+cdn('show/'+escape(show.folder)+'/logo.png')+'" /></h2></div>'); - var divShowBody = $('<div class="panel-body lazy" data-original="'+cdn('show/'+escape(show.folder)+'/fanart.jpg')+'"></div>'); + var divShowHeader = $('<div class="showName panel-heading"><h2 class="panel-title text-center"><img class="showLogo lazy" style="min-height: 50px; height: 50px;" alt="'+show.name+'" data-original="'+cdn('show/'+cleanname(show.folder)+'/logo.png')+'" /></h2></div>'); + var divShowBody = $('<div class="panel-body lazy" data-original="'+cdn('show/'+cleanname(show.folder)+'/fanart.jpg')+'"></div>'); if(show.seasons[0].season == '0') { var countSeasons = show.seasons.length-1; @@ -140,7 +140,7 @@ function getShows() { countEpisodes = countEpisodes+season.count; }); var divShowFooter =$('<div class="panel-footer"><strong>Seasons:</strong> '+countSeasons+', <strong>Episodes:</strong> '+countEpisodes+' </div>'); - var divShowPoster = $('<div class="col-md-2 text-center posterContainer"><a href="#" class="thumbnail"><img id="poster_'+show.id+'" class="showPoster lazy" data-original="'+cdn('show/'+escape(show.folder)+'/poster.jpg')+'"/></a></div>'); + var divShowPoster = $('<div class="col-md-2 text-center posterContainer"><a href="#" class="thumbnail"><img id="poster_'+show.id+'" class="showPoster lazy" data-original="'+cdn('show/'+cleanname(show.folder)+'/poster.jpg')+'"/></a></div>'); var ulSeasons = $('<ul class="seasons col-md-10 list-group"></ul>'); $.each(show.seasons, function(key, season) { if (season.season == '0') { @@ -153,10 +153,10 @@ function getShows() { getEpisodes($(this).parent().parent().parent().data('showid'), $(this).data('season')); }); liSeason.hover(function() { - $("#poster_"+show.id).error(function() {$(this).attr('src', cdn('show/'+escape(show.folder)+'/poster.jpg'))}); - $("#poster_"+show.id).attr('src', cdn('show/'+escape(show.folder)+'/'+season.season+'/poster.jpg')); + $("#poster_"+show.id).error(function() {$(this).attr('src', cdn('show/'+cleanname(show.folder)+'/poster.jpg'))}); + $("#poster_"+show.id).attr('src', cdn('show/'+cleanname(show.folder)+'/'+season.season+'/poster.jpg')); }, function() { - $("#poster_"+show.id).attr('src', cdn('show/'+escape(show.folder)+'/poster.jpg')); + $("#poster_"+show.id).attr('src', cdn('show/'+cleanname(show.folder)+'/poster.jpg')); }); ulSeasons.append(liSeason); }); @@ -172,14 +172,21 @@ function getShows() { divShowContainer.append(divShowBody); divShowContainer.append(divShowFooter); divShows.append(divShowContainer); - $("#shows div.panel-body.lazy, #shows img.showPoster.lazy, #shows img.showLogo.lazy").lazyload({ + $("#shows div.panel-body.lazy, #shows img.showPoster.lazy").lazyload({ threshold: 1000 }); + $("#shows img.showLogo.lazy").lazyload({ + threshold: 1000, + error: function() { + var title = $(this).attr('alt'); + $(this).parent().html(title); + } + }); /* if(showOffset < showLimit) { - divShowHeader.find("img.showLogo").attr('src', cdn('show/'+escape(show.folder)+'/logo.png')).removeClass('lazy'); - divShowBody.css('background-image', 'url('+cdn('show/'+escape(show.folder)+'/fanart.jpg')+')').removeClass('lazy'); - divShowPoster.find("img.showPoster").attr('src', cdn('show/'+escape(show.folder)+'/poster.jpg')).removeClass('lazy'); + divShowHeader.find("img.showLogo").attr('src', cdn('show/'+cleanname(show.folder)+'/logo.png')).removeClass('lazy'); + divShowBody.css('background-image', 'url('+cdn('show/'+cleanname(show.folder)+'/fanart.jpg')+')').removeClass('lazy'); + divShowPoster.find("img.showPoster").attr('src', cdn('show/'+cleanname(show.folder)+'/poster.jpg')).removeClass('lazy'); } */ i++; @@ -250,10 +257,10 @@ function getMovies() { $("#movies div.panel-body.lazy, #movies img.moviePoster.lazy, #movies img.movieLogo.lazy").removeClass('lazy'); $.each(data, function (key, movie) { var divMovieContainer = $('<div class="movie panel panel-default" data-imdb="'+movie.imdb+'" id="movie_'+movie.imdb+'"></div>'); - var divMovieHeader = $('<div class="movieName panel-heading"><h2 class="panel-title text-center"><img class="movieLogo lazy" alt="'+movie.title+'" data-original="'+cdn('movie/'+escape(movie.folder)+'/logo.png')+'" /></h2></div>'); - var divMovieBody = $('<div class="panel-body lazy" data-original="'+cdn('movie/'+escape(movie.folder)+'/fanart.jpg')+'"></div>'); + var divMovieHeader = $('<div class="movieName panel-heading"><h2 class="panel-title text-center"><img class="movieLogo lazy" alt="'+movie.title+'" data-original="'+cdn('movie/'+cleanname(movie.folder)+'/logo.png')+'" /></h2></div>'); + var divMovieBody = $('<div class="panel-body lazy" data-original="'+cdn('movie/'+cleanname(movie.folder)+'/fanart.jpg')+'"></div>'); //divMovieBody.css('background-image', 'url('+cdn('img/no_fanart.jpg')); - var divMoviePoster = $('<div class="col-md-2 text-center"><a href="#" class="thumbnail"><img id="poster_'+movie.imdb+'" class="moviePoster lazy" data-original="'+cdn('movie/'+escape(movie.folder)+'/poster.jpg')+'" /></a></div>'); + var divMoviePoster = $('<div class="col-md-2 text-center"><a href="#" class="thumbnail"><img id="poster_'+movie.imdb+'" class="moviePoster lazy" data-original="'+cdn('movie/'+cleanname(movie.folder)+'/poster.jpg')+'" /></a></div>'); var divMoviePlot = $('<div class="moviePlot col-md-10 panel panel-default"><div class="panel-heading">'+movie.tagline+'</div><div class="panel-body">'+movie.plot+'</div></div>'); var divMovieFooter =$('<div class="panel-footer text-right">IMDB Rating: '+movie.rating+'</div>'); divMovieBody.append(divMoviePoster); @@ -268,14 +275,21 @@ function getMovies() { divMovieContainer.append(divMovieBody); divMovieContainer.append(divMovieFooter); divMovies.append(divMovieContainer); - $("#movies div.panel-body.lazy, #movies img.moviePoster.lazy, #movies img.movieLogo.lazy").lazyload({ + $("#movies div.panel-body.lazy, #movies img.moviePoster.lazy").lazyload({ threshold: 1000 - }); + }); + $("#movies img.movieLogo.lazy").lazyload({ + threshold: 1000, + error: function() { + var title = $(this).attr('alt'); + $(this).parent().html(title); + } + }); /* if(movieOffset < movieLimit) { - divMovieHeader.find("img.movieLogo").attr('src', cdn('movie/'+escape(movie.folder)+'/logo.png')).removeClass('lazy'); - divMovieBody.css('background-image', 'url('+cdn('movie/'+escape(movie.folder)+'/fanart.jpg')+')').removeClass('lazy'); - divMoviePoster.find("img.moviePoster").attr('src', cdn('movie/'+escape(movie.folder)+'/poster.jpg')).removeClass('lazy'); + divMovieHeader.find("img.movieLogo").attr('src', cdn('movie/'+cleanname(movie.folder)+'/logo.png')).removeClass('lazy'); + divMovieBody.css('background-image', 'url('+cdn('movie/'+cleanname(movie.folder)+'/fanart.jpg')+')').removeClass('lazy'); + divMoviePoster.find("img.moviePoster").attr('src', cdn('movie/'+cleanname(movie.folder)+'/poster.jpg')).removeClass('lazy'); } */ i++; @@ -297,3 +311,9 @@ function cdn(img) { } return img; } + +function cleanname(txt) { + // this breaks thumbnail generation, because the local folder can't be found anymore + //return txt.replace(/[^a-zA-Z0-9]/g, '_'); + return escape(txt); +} \ No newline at end of file