From 8ff7185ff30edaded0aeb8a70ed44fda85795cce Mon Sep 17 00:00:00 2001 From: francois Date: Sun, 15 Apr 2018 14:59:39 +0200 Subject: [PATCH] add auto post loader --- inc/spot.php | 9 +++--- masks/messages.html | 78 +++++++++++++++++++++++++++++++++------------ style/spot.css | 2 +- style/spot.css.map | 2 +- style/spot.scss | 29 +++++++++-------- 5 files changed, 80 insertions(+), 40 deletions(-) diff --git a/inc/spot.php b/inc/spot.php index f73509d..f82b6ce 100755 --- a/inc/spot.php +++ b/inc/spot.php @@ -280,7 +280,7 @@ class Spot extends Main ksort($asFeed); //Split chunks - //$asFeed = array_slice($asFeed, $iChunk*self::FEED_CHUNK_SIZE, self::FEED_CHUNK_SIZE); + $asFeed = array_slice($asFeed, $iChunk*self::FEED_CHUNK_SIZE, self::FEED_CHUNK_SIZE); return self::getJsonResult(true, '', $asFeed); } @@ -304,10 +304,11 @@ class Spot extends Main { $iPicTimeStamp = $iPicTakenTimeStamp = $iPicFileTimeStamp = 0; $asExif = @exif_read_data($sPicPath, 0, true); + if(!$asExif) $asExif['FILE']['FileDateTime'] = filemtime($sPicPath); //Timestamps - if(!empty($asExif) && array_key_exists('DateTimeOriginal', $asExif['EXIF'])) $iPicTakenTimeStamp = strtotime($asExif['EXIF']['DateTimeOriginal']); - if(!empty($asExif) && array_key_exists('FileDateTime', $asExif['FILE'])) $iPicFileTimeStamp = $asExif['FILE']['FileDateTime']; + if(array_key_exists('EXIF', $asExif) && array_key_exists('DateTimeOriginal', $asExif['EXIF'])) $iPicTakenTimeStamp = strtotime($asExif['EXIF']['DateTimeOriginal']); + if(array_key_exists('FILE', $asExif) && array_key_exists('FileDateTime', $asExif['FILE'])) $iPicFileTimeStamp = $asExif['FILE']['FileDateTime']; //Merge timestamps $iPicTimeStamp = ($iPicTakenTimeStamp > 0)?$iPicTakenTimeStamp:$iPicFileTimeStamp; @@ -316,7 +317,7 @@ class Spot extends Main //if($iPicTimeStamp >= self::HONEYMOON_DATE_BEG && $iPicTimeStamp <= self::HONEYMOON_DATE_END) $iPicTimeStamp -= 60*60*(12+1); //timezone + daylight saving //Orientation - if(array_key_exists('Orientation', $asExif['IFD0'])) { + if(array_key_exists('IFD0', $asExif) && array_key_exists('Orientation', $asExif['IFD0'])) { switch($asExif['IFD0']['Orientation']) { case 1: $sRotate = '0'; break; //None diff --git a/masks/messages.html b/masks/messages.html index a662ad2..ea186f8 100755 --- a/masks/messages.html +++ b/masks/messages.html @@ -11,7 +11,7 @@
- +
@@ -20,12 +20,25 @@ oSpot.pageInit = function(asHash) { self.tmp('$Map', $('#map')); - $('#add_posts').click(updateFeed); + + //Add Loading + var asLoading = { + type: 'loading', + formatted_time: '', + relative_time: '', + displayed_id: 'Chargement...' + }; + getPost(asLoading).appendTo($('#loading')); + + //$('#add_posts').click(updateFeed); self.get('messages', function(oMessages){ //Build Feed + self.tmp('updatable', true); + self.tmp('out-of-data', 'boolean'); updateFeed(true); - //setInterval(updateFeed, 60 * 1000); //refresh every minute + self.tmp('simple-bar', new SimpleBar($('#posts')[0])); + self.tmp('simple-bar').getScrollElement().addEventListener('scroll', onFeedScroll); //Centering map var agCenter = {lat:0, lng:0}; @@ -209,29 +222,48 @@ function getBoundsZoomLevel(bounds, mapDim) { return Math.min(latZoom, lngZoom, ZOOM_MAX); } +function onFeedScroll(){ + var $Box = $(this); + var $BoxContent = $Box.find('.simplebar-content'); + if(($Box.scrollTop() + $(window).height()) / $BoxContent.height() >= 0.8) updateFeed(); +} + function updateFeed(bFirstChunk) { bFirstChunk = bFirstChunk || false; - var $Posts = $('#posts_list'); - if(bFirstChunk===true) - { - $Posts.empty(); - self.tmp('news_chunk', 0); + if(self.tmp('updatable')) { + if(!self.tmp('out-of-data') || bFirstChunk) { + var $Posts = $('#posts_list'); + if(bFirstChunk===true) { + $Posts.empty(); + self.tmp('news_chunk', 0); + } + + self.tmp('updatable', false); + $('#loading').fadeIn('fast'); + + self.get('feed', function(asData) { + + $.each(asData, function(iKey, asPost){ + getPost(asPost).appendTo($Posts); + }); + + //oSimpleBar.recalculate(); + + self.tmp('news_chunk', self.tmp('news_chunk') + 1); + self.tmp('out-of-data', Object.keys(asData).length != self.vars('chunk_size')); + self.tmp('updatable', true); + $('#loading').fadeOut('fast'); + }, { + 'chunk': self.tmp('news_chunk') + }); + } + } + else if(bFirstChunk) { //Delaying important data load + if(typeof oUpdateTimer != 'undefined') clearTimeout(oUpdateTimer); + oUpdateTimer = setTimeout(function(){updateFeed(true);}, 200); } - - self.get('feed', function(asData){ - - $.each(asData, function(iKey, asPost){ - getPost(asPost).appendTo($Posts); - }); - - if(bFirstChunk===true) oSimpleBar = new SimpleBar($('#posts')[0]); - //else oSimpleBar.recalculate(); - - self.tmp('news_chunk', self.tmp('news_chunk') + 1); - $('#next_posts').toggle(Object.keys(asData).length == self.vars('chunk_size')); - }, {'chunk':self.tmp('news_chunk')}); } function getPost(asPost) { @@ -275,6 +307,10 @@ function getPost(asPost) { .append($('