Compare commits
5 Commits
master
...
4e9fb52318
| Author | SHA1 | Date | |
|---|---|---|---|
| 4e9fb52318 | |||
| 850d2e7235 | |||
| 97645b3476 | |||
| ab914a391f | |||
| 842e02f4bb |
4
cli/cron.sh
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
wget -qO- https://spot.lutran.fr/index.php?a=update_project > /dev/null
|
||||||
|
|
||||||
|
#Crontab job: 0 * * * * . /var/www/spot/spot_cron.sh > /dev/null
|
||||||
@@ -14,7 +14,7 @@
|
|||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
"Franzz\\Spot\\": "inc/"
|
"Franzz\\Spot\\": "api/"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"settings.php"
|
"settings.php"
|
||||||
|
|||||||
@@ -36,18 +36,18 @@ class Converter extends PhpObject {
|
|||||||
|
|
||||||
public static function isGeoJsonValid($sCodeName) {
|
public static function isGeoJsonValid($sCodeName) {
|
||||||
$bResult = false;
|
$bResult = false;
|
||||||
$sGpxFilePath = Geo::getFilePath($sCodeName, Gpx::EXT);
|
$sGpxFilePath = Gpx::getFilePath($sCodeName);
|
||||||
$sGeoJsonFilePath = Geo::getFilePath($sCodeName, GeoJson::EXT);
|
$sGeoJsonFilePath = GeoJson::getFilePath($sCodeName);
|
||||||
|
|
||||||
//No need to generate if gpx is missing
|
//No need to generate if gpx is missing
|
||||||
if(!file_exists($sGpxFilePath) || file_exists($sGeoJsonFilePath) && filemtime($sGeoJsonFilePath) > filemtime(Geo::getFilePath($sCodeName, Gpx::EXT))) $bResult = true;
|
if(!file_exists($sGpxFilePath) || file_exists($sGeoJsonFilePath) && filemtime($sGeoJsonFilePath) > filemtime(Gpx::getFilePath($sCodeName))) $bResult = true;
|
||||||
return $bResult;
|
return $bResult;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class Geo extends PhpObject {
|
class Geo extends PhpObject {
|
||||||
|
|
||||||
const GEO_FOLDER = 'geo/';
|
const GEO_FOLDER = '../geo/';
|
||||||
const OPT_SIMPLE = 'simplification';
|
const OPT_SIMPLE = 'simplification';
|
||||||
|
|
||||||
protected $asTracks;
|
protected $asTracks;
|
||||||
@@ -55,12 +55,16 @@ class Geo extends PhpObject {
|
|||||||
|
|
||||||
public function __construct($sCodeName) {
|
public function __construct($sCodeName) {
|
||||||
parent::__construct(get_class($this), Settings::DEBUG, PhpObject::MODE_HTML);
|
parent::__construct(get_class($this), Settings::DEBUG, PhpObject::MODE_HTML);
|
||||||
$this->sFilePath = self::getFilePath($sCodeName, static::EXT);
|
$this->sFilePath = self::getFilePath($sCodeName);
|
||||||
$this->asTracks = array();
|
$this->asTracks = array();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getFilePath($sCodeName, $sExt) {
|
public static function getFilePath($sCodeName) {
|
||||||
return self::GEO_FOLDER.$sCodeName.$sExt;
|
return self::GEO_FOLDER.$sCodeName.static::EXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getDistFilePath($sCodeName) {
|
||||||
|
return 'geo/'.$sCodeName.static::EXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getLog() {
|
public function getLog() {
|
||||||
@@ -12,7 +12,7 @@ class Media extends PhpObject {
|
|||||||
const MEDIA_TABLE = 'medias';
|
const MEDIA_TABLE = 'medias';
|
||||||
|
|
||||||
//Media folders
|
//Media folders
|
||||||
const MEDIA_FOLDER = 'files/';
|
const MEDIA_FOLDER = '../files/';
|
||||||
const THUMB_FOLDER = self::MEDIA_FOLDER.'thumbs/';
|
const THUMB_FOLDER = self::MEDIA_FOLDER.'thumbs/';
|
||||||
|
|
||||||
const THUMB_MAX_WIDTH = 400;
|
const THUMB_MAX_WIDTH = 400;
|
||||||
@@ -144,8 +144,8 @@ class Project extends PhpObject {
|
|||||||
|
|
||||||
if($sCodeName != '' && !Converter::isGeoJsonValid($sCodeName)) Converter::convertToGeoJson($sCodeName);
|
if($sCodeName != '' && !Converter::isGeoJsonValid($sCodeName)) Converter::convertToGeoJson($sCodeName);
|
||||||
|
|
||||||
$asProject['geofilepath'] = Spot::addTimestampToFilePath(Geo::getFilePath($sCodeName, GeoJson::EXT));
|
$asProject['geofilepath'] = Spot::addTimestampToFilePath(GeoJson::getDistFilePath($sCodeName));
|
||||||
$asProject['gpxfilepath'] = Spot::addTimestampToFilePath(Geo::getFilePath($sCodeName, Gpx::EXT));
|
$asProject['gpxfilepath'] = Spot::addTimestampToFilePath(Gpx::getDistFilePath($sCodeName));
|
||||||
$asProject['codename'] = $sCodeName;
|
$asProject['codename'] = $sCodeName;
|
||||||
}
|
}
|
||||||
return $bSpecificProj?$asProject:$asProjects;
|
return $bSpecificProj?$asProject:$asProjects;
|
||||||
@@ -40,6 +40,8 @@ class Spot extends Main
|
|||||||
|
|
||||||
const DEFAULT_LANG = 'en';
|
const DEFAULT_LANG = 'en';
|
||||||
|
|
||||||
|
const MAIN_PAGE = 'index';
|
||||||
|
|
||||||
private Project $oProject;
|
private Project $oProject;
|
||||||
private Media $oMedia;
|
private Media $oMedia;
|
||||||
private User $oUser;
|
private User $oUser;
|
||||||
@@ -158,42 +160,42 @@ class Spot extends Main
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAppMainPage()
|
public function getAppParams() {
|
||||||
{
|
|
||||||
//Cache Page List
|
//Cache Page List
|
||||||
$asPages = array_diff($this->asMasks, array('email_update', 'email_conf'));
|
$asPages = array_diff($this->asMasks, array('email_update', 'email_conf'));
|
||||||
if(!$this->oUser->checkUserClearance(User::CLEARANCE_ADMIN)) {
|
if(!$this->oUser->checkUserClearance(User::CLEARANCE_ADMIN)) {
|
||||||
$asPages = array_diff($asPages, array('admin', 'upload'));
|
$asPages = array_diff($asPages, array('admin', 'upload'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$asGlobalVars = array(
|
||||||
|
'vars' => array(
|
||||||
|
'chunk_size' => self::FEED_CHUNK_SIZE,
|
||||||
|
'default_project_codename' => $this->oProject->getProjectCodeName(),
|
||||||
|
'projects' => $this->oProject->getProjects(),
|
||||||
|
'user' => $this->oUser->getUserInfo()
|
||||||
|
),
|
||||||
|
'consts' => array(
|
||||||
|
'server' => $this->asContext['serv_name'],
|
||||||
|
'modes' => Project::MODES,
|
||||||
|
'clearances' => User::CLEARANCES,
|
||||||
|
'default_timezone' => Settings::TIMEZONE
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
return self::getJsonResult(true, '', parent::getParams($asGlobalVars, self::MAIN_PAGE, $asPages));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAppMainPage()
|
||||||
|
{
|
||||||
return parent::getMainPage(
|
return parent::getMainPage(
|
||||||
|
self::MAIN_PAGE,
|
||||||
array(
|
array(
|
||||||
'vars' => array(
|
'language' => $this->oLang->getLanguage(),
|
||||||
'chunk_size' => self::FEED_CHUNK_SIZE,
|
'host_url' => $this->asContext['serv_name'],
|
||||||
'default_project_codename' => $this->oProject->getProjectCodeName(),
|
'filepath_css' => self::addTimestampToFilePath('spot.css'),
|
||||||
'projects' => $this->oProject->getProjects(),
|
'filepath_js' => self::addTimestampToFilePath('../dist/app.js')
|
||||||
'user' => $this->oUser->getUserInfo()
|
)
|
||||||
),
|
|
||||||
'consts' => array(
|
|
||||||
'server' => $this->asContext['serv_name'],
|
|
||||||
'modes' => Project::MODES,
|
|
||||||
'clearances' => User::CLEARANCES,
|
|
||||||
'default_timezone' => Settings::TIMEZONE
|
|
||||||
)
|
|
||||||
),
|
|
||||||
'index',
|
|
||||||
array(
|
|
||||||
'language' => $this->oLang->getLanguage(),
|
|
||||||
'host_url' => $this->asContext['serv_name'],
|
|
||||||
'filepath_css' => self::addTimestampToFilePath('style/spot.css'),
|
|
||||||
'filepath_js_d3' => self::addTimestampToFilePath('script/d3.min.js'),
|
|
||||||
'filepath_js_leaflet' => self::addTimestampToFilePath('script/leaflet.min.js'),
|
|
||||||
'filepath_js_jquery' => self::addTimestampToFilePath('script/jquery.min.js'),
|
|
||||||
'filepath_js_jquery_mods' => self::addTimestampToFilePath('script/jquery.mods.js'),
|
|
||||||
'filepath_js_spot' => self::addTimestampToFilePath('script/spot.js'),
|
|
||||||
'filepath_js_lightbox' => self::addTimestampToFilePath('script/lightbox.js')
|
|
||||||
),
|
|
||||||
$asPages
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
107
lib/index.php
Executable file
@@ -0,0 +1,107 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/* Requests Handler */
|
||||||
|
|
||||||
|
//Start buffering
|
||||||
|
ob_start();
|
||||||
|
|
||||||
|
//Run from /dist/
|
||||||
|
$oLoader = require __DIR__.'/../vendor/autoload.php';
|
||||||
|
|
||||||
|
use Franzz\Objects\ToolBox;
|
||||||
|
use Franzz\Objects\Main;
|
||||||
|
use Franzz\Spot\Spot;
|
||||||
|
use Franzz\Spot\User;
|
||||||
|
|
||||||
|
ToolBox::fixGlobalVars($argv ?? array());
|
||||||
|
|
||||||
|
//Available variables
|
||||||
|
$sAction = $_REQUEST['a'] ?? '';
|
||||||
|
$sTimezone = $_REQUEST['t'] ?? '';
|
||||||
|
$sName = $_GET['name'] ?? '';
|
||||||
|
$sContent = $_GET['content'] ?? '';
|
||||||
|
$iProjectId = $_REQUEST['id_project'] ?? 0 ;
|
||||||
|
$sField = $_REQUEST['field'] ?? '';
|
||||||
|
$oValue = $_REQUEST['value'] ?? '';
|
||||||
|
$iId = $_REQUEST['id'] ?? 0 ;
|
||||||
|
$sType = $_REQUEST['type'] ?? '';
|
||||||
|
$sEmail = $_REQUEST['email'] ?? '';
|
||||||
|
|
||||||
|
//Initiate class
|
||||||
|
$oSpot = new Spot(__FILE__, $sTimezone);
|
||||||
|
$oSpot->setProjectId($iProjectId);
|
||||||
|
|
||||||
|
$sResult = '';
|
||||||
|
if($sAction!='')
|
||||||
|
{
|
||||||
|
switch($sAction)
|
||||||
|
{
|
||||||
|
case 'params':
|
||||||
|
$sResult = $oSpot->getAppParams();
|
||||||
|
break;
|
||||||
|
case 'markers':
|
||||||
|
$sResult = $oSpot->getMarkers();
|
||||||
|
break;
|
||||||
|
case 'next_feed':
|
||||||
|
$sResult = $oSpot->getNextFeed($iId);
|
||||||
|
break;
|
||||||
|
case 'new_feed':
|
||||||
|
$sResult = $oSpot->getNewFeed($iId);
|
||||||
|
break;
|
||||||
|
case 'add_post':
|
||||||
|
$sResult = $oSpot->addPost($sName, $sContent);
|
||||||
|
break;
|
||||||
|
case 'subscribe':
|
||||||
|
$sResult = $oSpot->subscribe($sEmail, $sName);
|
||||||
|
break;
|
||||||
|
case 'unsubscribe':
|
||||||
|
$sResult = $oSpot->unsubscribe();
|
||||||
|
break;
|
||||||
|
case 'unsubscribe_email':
|
||||||
|
$sResult = $oSpot->unsubscribeFromEmail($iId);
|
||||||
|
break;
|
||||||
|
case 'update_project':
|
||||||
|
$sResult = $oSpot->updateProject();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
if($oSpot->checkUserClearance(User::CLEARANCE_ADMIN))
|
||||||
|
{
|
||||||
|
switch($sAction)
|
||||||
|
{
|
||||||
|
case 'upload':
|
||||||
|
$sResult = $oSpot->upload();
|
||||||
|
break;
|
||||||
|
case 'add_comment':
|
||||||
|
$sResult = $oSpot->addComment($iId, $sContent);
|
||||||
|
break;
|
||||||
|
case 'admin_new':
|
||||||
|
$sResult = $oSpot->createProject();
|
||||||
|
break;
|
||||||
|
case 'admin_get':
|
||||||
|
$sResult = $oSpot->getAdminSettings();
|
||||||
|
break;
|
||||||
|
case 'admin_set':
|
||||||
|
$sResult = $oSpot->setAdminSettings($sType, $iId, $sField, $oValue);
|
||||||
|
break;
|
||||||
|
case 'admin_del':
|
||||||
|
$sResult = $oSpot->delAdminSettings($sType, $iId);
|
||||||
|
break;
|
||||||
|
case 'generate_cron':
|
||||||
|
$sResult = $oSpot->genCronFile();
|
||||||
|
break;
|
||||||
|
case 'sql':
|
||||||
|
$sResult = $oSpot->getDbBuildScript();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$sResult = Main::getJsonResult(false, Main::NOT_FOUND);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else $sResult = Main::getJsonResult(false, Main::NOT_FOUND);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else $sResult = $oSpot->getAppMainPage();
|
||||||
|
|
||||||
|
$sDebug = ob_get_clean();
|
||||||
|
if(Settings::DEBUG && $sDebug!='') $oSpot->addUncaughtError($sDebug);
|
||||||
|
|
||||||
|
echo $sResult;
|
||||||
2
script/d3.min.js
vendored
2
script/jquery.min.js
vendored
23
script/leaflet.min.js
vendored
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 9.2 KiB After Width: | Height: | Size: 9.2 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 6.6 KiB |
|
Before Width: | Height: | Size: 821 B After Width: | Height: | Size: 821 B |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 6.7 KiB After Width: | Height: | Size: 6.7 KiB |
|
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 6.6 KiB |
|
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 8.5 KiB After Width: | Height: | Size: 8.5 KiB |
|
Before Width: | Height: | Size: 261 KiB After Width: | Height: | Size: 261 KiB |
|
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 5.2 KiB |
|
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 5.2 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 5.2 KiB |
@@ -1,5 +1,5 @@
|
|||||||
/*!
|
/*!
|
||||||
* Lightbox v2.11.3
|
* Lightbox v2.11.4
|
||||||
* by Lokesh Dhakar
|
* by Lokesh Dhakar
|
||||||
*
|
*
|
||||||
* More info:
|
* More info:
|
||||||
@@ -46,8 +46,6 @@
|
|||||||
fadeDuration: 600,
|
fadeDuration: 600,
|
||||||
fitImagesInViewport: true,
|
fitImagesInViewport: true,
|
||||||
imageFadeDuration: 600,
|
imageFadeDuration: 600,
|
||||||
// maxWidth: 800,
|
|
||||||
// maxHeight: 600,
|
|
||||||
positionFromTop: 50,
|
positionFromTop: 50,
|
||||||
resizeDuration: 700,
|
resizeDuration: 700,
|
||||||
showImageNumberLabel: true,
|
showImageNumberLabel: true,
|
||||||
@@ -62,10 +60,8 @@
|
|||||||
to prevent xss and other injection attacks.
|
to prevent xss and other injection attacks.
|
||||||
*/
|
*/
|
||||||
sanitizeTitle: false
|
sanitizeTitle: false
|
||||||
//ADDED-START
|
, hasVideo: true
|
||||||
, hasVideo: true
|
|
||||||
, onMediaChange: (oMedia) => {}
|
, onMediaChange: (oMedia) => {}
|
||||||
//ADDED-END
|
|
||||||
};
|
};
|
||||||
|
|
||||||
Lightbox.prototype.option = function(options) {
|
Lightbox.prototype.option = function(options) {
|
||||||
@@ -147,7 +143,6 @@
|
|||||||
</div>\
|
</div>\
|
||||||
').appendTo($('body'));
|
').appendTo($('body'));
|
||||||
|
|
||||||
|
|
||||||
// Cache jQuery objects
|
// Cache jQuery objects
|
||||||
this.$lightbox = $('#lightbox');
|
this.$lightbox = $('#lightbox');
|
||||||
this.$overlay = $('#lightboxOverlay');
|
this.$overlay = $('#lightboxOverlay');
|
||||||
@@ -156,7 +151,6 @@
|
|||||||
this.$image = this.$lightbox.find('.lb-image');
|
this.$image = this.$lightbox.find('.lb-image');
|
||||||
this.$nav = this.$lightbox.find('.lb-nav');
|
this.$nav = this.$lightbox.find('.lb-nav');
|
||||||
|
|
||||||
//ADDED-START
|
|
||||||
if(self.options.hasVideo) {
|
if(self.options.hasVideo) {
|
||||||
this.$video = $('<video class="lb-video" controls autoplay></video>');
|
this.$video = $('<video class="lb-video" controls autoplay></video>');
|
||||||
this.$image.after(this.$video);
|
this.$image.after(this.$video);
|
||||||
@@ -166,8 +160,7 @@
|
|||||||
bottom: parseInt(this.$video.css('border-bottom-width'), 10),
|
bottom: parseInt(this.$video.css('border-bottom-width'), 10),
|
||||||
left: parseInt(this.$video.css('border-left-width'), 10)
|
left: parseInt(this.$video.css('border-left-width'), 10)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
//ADDED-END
|
|
||||||
|
|
||||||
// Store css values for future lookup
|
// Store css values for future lookup
|
||||||
this.containerPadding = {
|
this.containerPadding = {
|
||||||
@@ -185,11 +178,8 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Attach event handlers to the newly minted DOM elements
|
// Attach event handlers to the newly minted DOM elements
|
||||||
//ADDED-START
|
this.$overlay.hide().add(this.$lightbox.find('.lb-dataContainer')).on('click', function() {
|
||||||
//this.$overlay.hide().on('click', function() {
|
self.end();
|
||||||
this.$overlay.hide().add(this.$lightbox.find('.lb-dataContainer')).on('click', function() {
|
|
||||||
//ADDED-END
|
|
||||||
self.end();
|
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -250,9 +240,13 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
this.$lightbox.find('.lb-loader, .lb-close').on('click', function() {
|
this.$lightbox.find('.lb-loader, .lb-close').on('click keyup', function(e) {
|
||||||
self.end();
|
// If mouse click OR 'enter' or 'space' keypress, close LB
|
||||||
return false;
|
if (
|
||||||
|
e.type === 'click' || (e.type === 'keyup' && (e.which === 13 || e.which === 32))) {
|
||||||
|
self.end();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -265,7 +259,6 @@
|
|||||||
|
|
||||||
this.sizeOverlay();
|
this.sizeOverlay();
|
||||||
|
|
||||||
//ADDED-START
|
|
||||||
//Manage Zoom Event
|
//Manage Zoom Event
|
||||||
this.$nav.mousewheel((e) => {
|
this.$nav.mousewheel((e) => {
|
||||||
var asImg = self.album[this.currentImageIndex];
|
var asImg = self.album[this.currentImageIndex];
|
||||||
@@ -324,7 +317,6 @@
|
|||||||
self.$image.css('--translate-x', fTransX + 'px');
|
self.$image.css('--translate-x', fTransX + 'px');
|
||||||
self.$image.css('--translate-y', fTransY + 'px');
|
self.$image.css('--translate-y', fTransY + 'px');
|
||||||
}
|
}
|
||||||
//ADDED-END
|
|
||||||
|
|
||||||
this.album = [];
|
this.album = [];
|
||||||
var imageNumber = 0;
|
var imageNumber = 0;
|
||||||
@@ -349,7 +341,7 @@
|
|||||||
// If image is part of a set
|
// If image is part of a set
|
||||||
$links = $($link.prop('tagName') + '[rel="' + $link.attr('rel') + '"]');
|
$links = $($link.prop('tagName') + '[rel="' + $link.attr('rel') + '"]');
|
||||||
for (var j = 0; j < $links.length; j = ++j) {
|
for (var j = 0; j < $links.length; j = ++j) {
|
||||||
this.addToAlbum($($links[j]));
|
this.addToAlbum($($links[j]));
|
||||||
if ($links[j] === $link[0]) {
|
if ($links[j] === $link[0]) {
|
||||||
imageNumber = j;
|
imageNumber = j;
|
||||||
}
|
}
|
||||||
@@ -358,14 +350,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Position Lightbox
|
// Position Lightbox
|
||||||
//ADDED-START
|
this.$lightbox.fadeIn(this.options.fadeDuration);
|
||||||
//var top = $window.scrollTop() + this.options.positionFromTop;
|
|
||||||
//var left = $window.scrollLeft();
|
|
||||||
this.$lightbox/*.css({
|
|
||||||
top: top + 'px',
|
|
||||||
left: left + 'px'
|
|
||||||
})*/.fadeIn(this.options.fadeDuration);
|
|
||||||
//ADDED-END
|
|
||||||
|
|
||||||
// Disable scrolling of the page while open
|
// Disable scrolling of the page while open
|
||||||
if (this.options.disableScrolling) {
|
if (this.options.disableScrolling) {
|
||||||
@@ -379,20 +364,18 @@
|
|||||||
this.album.push({
|
this.album.push({
|
||||||
alt: $link.attr('data-alt'),
|
alt: $link.attr('data-alt'),
|
||||||
link: $link.attr('href'),
|
link: $link.attr('href'),
|
||||||
title: $link.attr('data-title') || $link.attr('title')
|
title: $link.attr('data-title') || $link.attr('title'),
|
||||||
//ADDED-START
|
|
||||||
, orientation: $link.attr('data-orientation')
|
orientation: $link.attr('data-orientation'),
|
||||||
, type: $link.attr('data-type')
|
type: $link.attr('data-type'),
|
||||||
, id: $link.attr('data-id')
|
id: $link.attr('data-id'),
|
||||||
, $Media: $link.attr('data-type')=='video'?this.$video:this.$image
|
$Media: $link.attr('data-type')=='video'?this.$video:this.$image,
|
||||||
, width: $link.find('img').attr('width')
|
width: $link.find('img').attr('width'),
|
||||||
, height: $link.find('img').attr('height')
|
height: $link.find('img').attr('height'),
|
||||||
, set: $link.attr('data-lightbox') || $link.attr('rel')
|
set: $link.attr('data-lightbox') || $link.attr('rel')
|
||||||
//ADDED-END
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
//ADDED-START
|
|
||||||
Lightbox.prototype.getMaxSizes = function(iMediaWidth, iMediaHeight, sMediaType) {
|
Lightbox.prototype.getMaxSizes = function(iMediaWidth, iMediaHeight, sMediaType) {
|
||||||
var iWindowWidth = $(window).width();
|
var iWindowWidth = $(window).width();
|
||||||
var iWindowHeight = $(window).height();
|
var iWindowHeight = $(window).height();
|
||||||
@@ -473,20 +456,20 @@
|
|||||||
|
|
||||||
// Hide most UI elements in preparation for the animated resizing of the lightbox.
|
// Hide most UI elements in preparation for the animated resizing of the lightbox.
|
||||||
Lightbox.prototype.changeImage = function(imageNumber) {
|
Lightbox.prototype.changeImage = function(imageNumber) {
|
||||||
var self = this;
|
var self = this;
|
||||||
var filename = this.album[imageNumber].link;
|
var filename = this.album[imageNumber].link;
|
||||||
|
|
||||||
// Disable keyboard nav during transitions
|
// Disable keyboard nav during transitions
|
||||||
this.disableKeyboardNav();
|
this.disableKeyboardNav();
|
||||||
|
|
||||||
// Show loading state
|
// Show loading state
|
||||||
this.$overlay.fadeIn(this.options.fadeDuration);
|
this.$overlay.fadeIn(this.options.fadeDuration);
|
||||||
$('.lb-loader').fadeIn('slow');
|
$('.lb-loader').fadeIn('slow');
|
||||||
|
|
||||||
this.$lightbox.find('.lb-image, .lb-video, .lb-nav, .lb-prev, .lb-next, .lb-number, .lb-caption, .lb-close').hide();
|
this.$lightbox.find('.lb-image, .lb-video, .lb-nav, .lb-prev, .lb-next, .lb-number, .lb-caption, .lb-close').hide();
|
||||||
this.$image.css({'--scale': '1', '--translate-x': '0', '--translate-y': '0'});
|
this.$image.css({'--scale': '1', '--translate-x': '0', '--translate-y': '0'});
|
||||||
self.$lightbox.find('.lb-dataContainer').css({width:'200px', height:'30px'});
|
self.$lightbox.find('.lb-dataContainer').css({width:'200px', height:'30px'});
|
||||||
this.$outerContainer.addClass('animating');
|
this.$outerContainer.addClass('animating');
|
||||||
this.$container.removeClass('moveable moving');
|
this.$container.removeClass('moveable moving');
|
||||||
|
|
||||||
this.options.onMediaChange(self.album[imageNumber]);
|
this.options.onMediaChange(self.album[imageNumber]);
|
||||||
@@ -534,31 +517,19 @@
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.currentImageIndex = imageNumber;
|
this.currentImageIndex = imageNumber;
|
||||||
};
|
};
|
||||||
//ADDED-END
|
|
||||||
|
|
||||||
// Stretch overlay to fit the viewport
|
// Stretch overlay to fit the viewport
|
||||||
Lightbox.prototype.sizeOverlay = function(e) {
|
Lightbox.prototype.sizeOverlay = function(e) {
|
||||||
//var self = this;
|
/*
|
||||||
|
|
||||||
/*
|
|
||||||
We use a setTimeout 0 to pause JS execution and let the rendering catch-up.
|
We use a setTimeout 0 to pause JS execution and let the rendering catch-up.
|
||||||
Why do this? If the `disableScrolling` option is set to true, a class is added to the body
|
Why do this? If the `disableScrolling` option is set to true, a class is added to the body
|
||||||
tag that disables scrolling and hides the scrollbar. We want to make sure the scrollbar is
|
tag that disables scrolling and hides the scrollbar. We want to make sure the scrollbar is
|
||||||
hidden before we measure the document width, as the presence of the scrollbar will affect the
|
hidden before we measure the document width, as the presence of the scrollbar will affect the
|
||||||
number.
|
number.
|
||||||
*/
|
*/
|
||||||
//ADDED-START
|
if(e) {
|
||||||
/*
|
|
||||||
setTimeout(function() {
|
|
||||||
self.$overlay
|
|
||||||
.width($(document).width())
|
|
||||||
.height($(document).height());
|
|
||||||
|
|
||||||
}, 0);
|
|
||||||
*/
|
|
||||||
if(e) {
|
|
||||||
if(typeof oResizeTimer != 'undefined') clearTimeout(oResizeTimer);
|
if(typeof oResizeTimer != 'undefined') clearTimeout(oResizeTimer);
|
||||||
oResizeTimer = setTimeout(
|
oResizeTimer = setTimeout(
|
||||||
() => {
|
() => {
|
||||||
@@ -573,17 +544,16 @@
|
|||||||
},
|
},
|
||||||
200
|
200
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
//ADDED-END
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Animate the size of the lightbox to fit the image we are showing
|
// Animate the size of the lightbox to fit the image we are showing
|
||||||
// This method also shows the the image.
|
// This method also shows the the image.
|
||||||
//ADDED-START
|
//ADDED-START
|
||||||
//Lightbox.prototype.sizeContainer = function(imageWidth, imageHeight) {
|
//Lightbox.prototype.sizeContainer = function(imageWidth, imageHeight) {
|
||||||
Lightbox.prototype.sizeContainer = function(imageWidth, imageHeight, media) {
|
Lightbox.prototype.sizeContainer = function(imageWidth, imageHeight, media) {
|
||||||
media = media || 'image';
|
media = media || 'image';
|
||||||
//ADDED-END
|
//ADDED-END
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
var oldWidth = this.$outerContainer.outerWidth();
|
var oldWidth = this.$outerContainer.outerWidth();
|
||||||
@@ -597,19 +567,13 @@
|
|||||||
//ADDED-END
|
//ADDED-END
|
||||||
|
|
||||||
function postResize() {
|
function postResize() {
|
||||||
//ADDED-START
|
|
||||||
//self.$lightbox.find('.lb-dataContainer').width(newWidth);
|
|
||||||
if(self.$lightbox.hasClass('vertical')) self.$lightbox.find('.lb-dataContainer').width(newWidth);
|
if(self.$lightbox.hasClass('vertical')) self.$lightbox.find('.lb-dataContainer').width(newWidth);
|
||||||
else self.$lightbox.find('.lb-dataContainer').height(newHeight);
|
else self.$lightbox.find('.lb-dataContainer').height(newHeight);
|
||||||
//ADDED-END
|
|
||||||
self.$lightbox.find('.lb-prevLink').height(newHeight);
|
self.$lightbox.find('.lb-prevLink').height(newHeight);
|
||||||
self.$lightbox.find('.lb-nextLink').height(newHeight);
|
self.$lightbox.find('.lb-nextLink').height(newHeight);
|
||||||
|
|
||||||
// Set focus on one of the two root nodes so keyboard events are captured.
|
// Set focus on one of the two root nodes so keyboard events are captured.
|
||||||
//ADDED-START
|
self.$overlay.trigger('focus');
|
||||||
//self.$overlay.focus();
|
|
||||||
self.$overlay.trigger( 'focus' );
|
|
||||||
//ADDED-END
|
|
||||||
|
|
||||||
self.showImage();
|
self.showImage();
|
||||||
}
|
}
|
||||||
@@ -630,11 +594,8 @@
|
|||||||
Lightbox.prototype.showImage = function() {
|
Lightbox.prototype.showImage = function() {
|
||||||
this.$lightbox.find('.lb-loader').stop(true).hide();
|
this.$lightbox.find('.lb-loader').stop(true).hide();
|
||||||
|
|
||||||
//ADDED-START
|
|
||||||
//this.$lightbox.find('.lb-image').fadeIn(this.options.imageFadeDuration);
|
|
||||||
if(this.options.hasVideo && this.album[this.currentImageIndex].type == 'video') this.$lightbox.find('.lb-video').fadeIn(this.options.imageFadeDuration);
|
if(this.options.hasVideo && this.album[this.currentImageIndex].type == 'video') this.$lightbox.find('.lb-video').fadeIn(this.options.imageFadeDuration);
|
||||||
else this.$lightbox.find('.lb-image').fadeIn(this.options.imageFadeDuration);
|
else this.$lightbox.find('.lb-image').fadeIn(this.options.imageFadeDuration);
|
||||||
//ADDED-END
|
|
||||||
|
|
||||||
this.updateNav();
|
this.updateNav();
|
||||||
this.updateDetails();
|
this.updateDetails();
|
||||||
@@ -691,29 +652,10 @@
|
|||||||
$caption.text(this.album[this.currentImageIndex].title);
|
$caption.text(this.album[this.currentImageIndex].title);
|
||||||
} else {
|
} else {
|
||||||
$caption.html(this.album[this.currentImageIndex].title);
|
$caption.html(this.album[this.currentImageIndex].title);
|
||||||
}
|
}
|
||||||
//ADDED-START
|
|
||||||
//$caption.fadeIn('fast');
|
|
||||||
$caption.add(this.$lightbox.find('.lb-close')).fadeIn('fast');
|
$caption.add(this.$lightbox.find('.lb-close')).fadeIn('fast');
|
||||||
//ADDED-END
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//ADDED-START
|
|
||||||
/*
|
|
||||||
//ADDED-END
|
|
||||||
if (this.album.length > 1 && this.options.showImageNumberLabel) {
|
|
||||||
var labelText = this.imageCountLabel(this.currentImageIndex + 1, this.album.length);
|
|
||||||
//ADDED-START
|
|
||||||
//this.$lightbox.find('.lb-number').text(labelText).fadeIn('fast');
|
|
||||||
this.$lightbox.find('.lb-number').empty().append(labelText).fadeIn('fast');
|
|
||||||
//ADDED-END
|
|
||||||
} else {
|
|
||||||
this.$lightbox.find('.lb-number').hide();
|
|
||||||
}
|
|
||||||
//ADDED-START
|
|
||||||
*/
|
|
||||||
//ADDED-END
|
|
||||||
|
|
||||||
this.$outerContainer.removeClass('animating');
|
this.$outerContainer.removeClass('animating');
|
||||||
|
|
||||||
this.$lightbox.find('.lb-dataContainer').fadeIn(this.options.resizeDuration, function() {
|
this.$lightbox.find('.lb-dataContainer').fadeIn(this.options.resizeDuration, function() {
|
||||||
@@ -734,9 +676,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
Lightbox.prototype.enableKeyboardNav = function() {
|
Lightbox.prototype.enableKeyboardNav = function() {
|
||||||
//ADDED-START
|
this.disableKeyboardNav();
|
||||||
this.disableKeyboardNav();
|
|
||||||
//ADDED-END
|
|
||||||
this.$lightbox.on('keyup.keyboard', $.proxy(this.keyboardAction, this));
|
this.$lightbox.on('keyup.keyboard', $.proxy(this.keyboardAction, this));
|
||||||
this.$overlay.on('keyup.keyboard', $.proxy(this.keyboardAction, this));
|
this.$overlay.on('keyup.keyboard', $.proxy(this.keyboardAction, this));
|
||||||
};
|
};
|
||||||
@@ -775,19 +715,17 @@
|
|||||||
Lightbox.prototype.end = function() {
|
Lightbox.prototype.end = function() {
|
||||||
this.disableKeyboardNav();
|
this.disableKeyboardNav();
|
||||||
|
|
||||||
//ADDED-START
|
if(this.options.hasVideo) {
|
||||||
if(this.options.hasVideo) {
|
var $lbContainer = this.$lightbox.find('.lb-container');
|
||||||
var $lbContainer = this.$lightbox.find('.lb-container');
|
var $hasVideoNav = $lbContainer.hasClass('lb-video-nav');
|
||||||
var $hasVideoNav = $lbContainer.hasClass('lb-video-nav');
|
this.$video.attr('src', '');
|
||||||
this.$video.attr('src', '');
|
|
||||||
|
|
||||||
if($hasVideoNav) $lbContainer.removeClass('lb-video-nav');
|
if($hasVideoNav) $lbContainer.removeClass('lb-video-nav');
|
||||||
}
|
}
|
||||||
oSpot.flushHash();
|
oSpot.flushHash();
|
||||||
//ADDED-END
|
|
||||||
|
|
||||||
$(window).off('resize', this.sizeOverlay);
|
$(window).off('resize', this.sizeOverlay);
|
||||||
this.$nav.off('mousewheel');
|
this.$nav.off('mousewheel');
|
||||||
this.$lightbox.fadeOut(this.options.fadeDuration);
|
this.$lightbox.fadeOut(this.options.fadeDuration);
|
||||||
this.$overlay.fadeOut(this.options.fadeDuration);
|
this.$overlay.fadeOut(this.options.fadeDuration);
|
||||||
|
|
||||||
@@ -9,7 +9,7 @@ $stroke-width-mouse-focus : 1;
|
|||||||
$stroke-width-height-focus: 2;
|
$stroke-width-height-focus: 2;
|
||||||
$stroke-width-axis : 2;
|
$stroke-width-axis : 2;
|
||||||
|
|
||||||
@import 'leaflet/leaflet';
|
@import '../../node_modules/leaflet/dist/leaflet';
|
||||||
@import 'leaflet/leaflet_heightgraph';
|
@import 'leaflet/leaflet_heightgraph';
|
||||||
|
|
||||||
/* Leaflet fixes */
|
/* Leaflet fixes */
|
||||||
@@ -108,3 +108,7 @@ $stroke-width-axis : 2;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.leaflet-default-icon-path {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
@import 'lightbox/lightbox';
|
@import '../../node_modules/lightbox2/dist/css/lightbox.css';
|
||||||
|
|
||||||
@mixin lightbox-icon($icon) {
|
@mixin lightbox-icon($icon) {
|
||||||
background: none;
|
background: none;
|
||||||