Add Local Time Zone
This commit is contained in:
1 parent
6b3d637e64
commit
b398480c7f
19 files changed
+1731
-1595
No files matched your search
@@ -0,0 +1,50 @@
|
|||||||
|
ALTER TABLE medias ADD timezone CHAR(64) AFTER posted_on;
|
||||||
|
ALTER TABLE messages ADD timezone CHAR(64) AFTER site_time;
|
||||||
|
ALTER TABLE posts ADD timezone CHAR(64) AFTER site_time;
|
||||||
|
|
||||||
|
UPDATE messages
|
||||||
|
SET iso_time = DATE_FORMAT(CONVERT_TZ(iso_time,'+00:00','+02:00'), '%Y-%m-%dT%T+0200'),
|
||||||
|
led = led
|
||||||
|
WHERE id_feed = 2;
|
||||||
|
|
||||||
|
UPDATE messages
|
||||||
|
INNER JOIN feeds ON feeds.id_feed = messages.id_feed
|
||||||
|
INNER JOIN projects ON projects.id_project = feeds.id_project
|
||||||
|
SET messages.timezone = projects.timezone,
|
||||||
|
messages.led = messages.led;
|
||||||
|
|
||||||
|
UPDATE posts
|
||||||
|
SET timezone = 'Europe/Paris',
|
||||||
|
led = led;
|
||||||
|
|
||||||
|
UPDATE posts
|
||||||
|
INNER JOIN projects ON projects.id_project = posts.id_project
|
||||||
|
SET posts.id_user = 1,
|
||||||
|
posts.timezone = projects.timezone,
|
||||||
|
posts.led = posts.led
|
||||||
|
WHERE posts.name IN ('francois', 'françois','Francois', 'François', 'franzz');
|
||||||
|
|
||||||
|
UPDATE posts
|
||||||
|
SET timezone = 'Pacific/Auckland',
|
||||||
|
led = led
|
||||||
|
WHERE name = 'nz';
|
||||||
|
|
||||||
|
UPDATE posts
|
||||||
|
SET timezone = 'Atlantic/Madeira',
|
||||||
|
led = led
|
||||||
|
WHERE id_post IN (141, 142);
|
||||||
|
|
||||||
|
UPDATE medias
|
||||||
|
INNER JOIN projects ON projects.id_project = medias.id_project
|
||||||
|
SET medias.timezone = projects.timezone,
|
||||||
|
medias.led = medias.led;
|
||||||
|
|
||||||
|
UPDATE medias
|
||||||
|
SET timezone = 'Atlantic/Madeira',
|
||||||
|
taken_on = posted_on,
|
||||||
|
led = led
|
||||||
|
WHERE id_media IN (64, 65);
|
||||||
|
|
||||||
|
ALTER TABLE projects DROP COLUMN timezone;
|
||||||
|
|
||||||
|
UPDATE maps SET attribution = 'OpenTopoMap (CC-BY-SA)' WHERE id_map = 2;
|
||||||
+1
-1
@@ -35,7 +35,7 @@ class Email extends PhpObject {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Set Target User Info
|
* Set Target User Info
|
||||||
* @param array $asDests Contains: id_user, name, email, language, active
|
* @param array $asDests Contains: id_user, name, email, language, timezone, active
|
||||||
*/
|
*/
|
||||||
public function setDestInfo($asDests) {
|
public function setDestInfo($asDests) {
|
||||||
if(array_key_exists('email', $asDests)) $asDests = array($asDests);
|
if(array_key_exists('email', $asDests)) $asDests = array($asDests);
|
||||||
|
|||||||
+11
-7
@@ -90,7 +90,7 @@ class Feed extends PhpObject {
|
|||||||
|
|
||||||
public function getMessages($asActivePeriod = array()) {
|
public function getMessages($asActivePeriod = array()) {
|
||||||
$asInfo = array(
|
$asInfo = array(
|
||||||
'select' => array('id_message', 'ref_msg_id', 'type', 'latitude', 'longitude', 'site_time', 'unix_time'),
|
'select' => array('id_message', 'ref_msg_id', 'type', 'latitude', 'longitude', 'site_time', 'timezone', 'unix_time'),
|
||||||
'from' => self::MSG_TABLE,
|
'from' => self::MSG_TABLE,
|
||||||
'constraint'=> array(Db::getId(self::FEED_TABLE) => $this->getFeedId()),
|
'constraint'=> array(Db::getId(self::FEED_TABLE) => $this->getFeedId()),
|
||||||
'constOpe' => array(Db::getId(self::FEED_TABLE) => "="),
|
'constOpe' => array(Db::getId(self::FEED_TABLE) => "="),
|
||||||
@@ -163,7 +163,8 @@ class Feed extends PhpObject {
|
|||||||
'latitude' => $asMsg['latitude'],
|
'latitude' => $asMsg['latitude'],
|
||||||
'longitude' => $asMsg['longitude'],
|
'longitude' => $asMsg['longitude'],
|
||||||
'iso_time' => $asMsg['dateTime'], //ISO 8601 time (backup)
|
'iso_time' => $asMsg['dateTime'], //ISO 8601 time (backup)
|
||||||
'site_time' => date(Db::TIMESTAMP_FORMAT, $asMsg['unixTime']), //Conversion to Site Time (default timezone, see Settings::TIMEZONE)
|
'site_time' => date(Db::TIMESTAMP_FORMAT, $asMsg['unixTime']), //Conversion to Site Time
|
||||||
|
'timezone' => Spot::getTimeZoneFromDate($asMsg['dateTime']), //Local Time Zone
|
||||||
'unix_time' => $asMsg['unixTime'], //UNIX Time (backup)
|
'unix_time' => $asMsg['unixTime'], //UNIX Time (backup)
|
||||||
'content' => $asMsg['messageContent'],
|
'content' => $asMsg['messageContent'],
|
||||||
'battery_state' => $asMsg['batteryState']
|
'battery_state' => $asMsg['batteryState']
|
||||||
@@ -200,13 +201,16 @@ class Feed extends PhpObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function delete() {
|
public function delete() {
|
||||||
$sDesc = '';
|
$asResult = array();
|
||||||
if($this->getFeedId() > 0) {
|
if($this->getFeedId() > 0) {
|
||||||
$bSuccess = $this->oDb->deleteRow(self::FEED_TABLE, $this->getFeedId());
|
$asResult = array(
|
||||||
if(!$bSuccess) $sDesc = $this->oDb->getLastError();
|
'id' => $this->getFeedId(),
|
||||||
|
'del' => $this->oDb->deleteRow(self::FEED_TABLE, $this->getFeedId()),
|
||||||
|
'desc' => $this->oDb->getLastError()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
else $sDesc = 'Error while setting project: no Feed ID';
|
else $asResult = array('del'=>false, 'desc'=>'Error while setting project: no Feed ID');
|
||||||
|
|
||||||
return $sDesc;
|
return $asResult;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+38
-16
@@ -68,7 +68,7 @@ class Media extends PhpObject {
|
|||||||
if($bOwnMedia && empty($this->asMedia) || !$bOwnMedia && empty($this->asMedias)) {
|
if($bOwnMedia && empty($this->asMedia) || !$bOwnMedia && empty($this->asMedias)) {
|
||||||
if($this->oProject->getProjectId()) {
|
if($this->oProject->getProjectId()) {
|
||||||
$asParams = array(
|
$asParams = array(
|
||||||
'select' => array(Db::getId(self::MEDIA_TABLE), 'filename', 'taken_on', 'posted_on', 'rotate', 'type AS subtype', 'comment'),
|
'select' => array(Db::getId(self::MEDIA_TABLE), 'filename', 'taken_on', 'posted_on', 'timezone', 'rotate', 'type AS subtype', 'comment'),
|
||||||
'from' => self::MEDIA_TABLE,
|
'from' => self::MEDIA_TABLE,
|
||||||
'constraint'=> array(Db::getId(Project::PROJ_TABLE) => $this->oProject->getProjectId())
|
'constraint'=> array(Db::getId(Project::PROJ_TABLE) => $this->oProject->getProjectId())
|
||||||
);
|
);
|
||||||
@@ -109,13 +109,15 @@ class Media extends PhpObject {
|
|||||||
$asParams[] = $sMediaName;
|
$asParams[] = $sMediaName;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
//Add media to DB
|
|
||||||
$asMediaInfo = $this->getMediaInfoFromFile($sMediaName);
|
$asMediaInfo = $this->getMediaInfoFromFile($sMediaName);
|
||||||
|
|
||||||
|
//Converting times to DB Time Zone, by using date()
|
||||||
$asDbInfo = array(
|
$asDbInfo = array(
|
||||||
Db::getId(Project::PROJ_TABLE) => $this->oProject->getProjectId(),
|
Db::getId(Project::PROJ_TABLE) => $this->oProject->getProjectId(),
|
||||||
'filename' => $sMediaName,
|
'filename' => $sMediaName,
|
||||||
'taken_on' => ($asMediaInfo['taken_ts'] > 0)?date(Db::TIMESTAMP_FORMAT, $asMediaInfo['taken_ts']):0, //Site Time
|
'taken_on' => ($asMediaInfo['taken_ts'] > 0)?date(Db::TIMESTAMP_FORMAT, $asMediaInfo['taken_ts']):0,
|
||||||
'posted_on' => date(Db::TIMESTAMP_FORMAT, $asMediaInfo['file_ts']), //Site Time
|
'posted_on' => date(Db::TIMESTAMP_FORMAT, $asMediaInfo['file_ts']),
|
||||||
|
'timezone' => $asMediaInfo['timezone'],
|
||||||
'rotate' => $asMediaInfo['rotate'],
|
'rotate' => $asMediaInfo['rotate'],
|
||||||
'type' => $asMediaInfo['type']
|
'type' => $asMediaInfo['type']
|
||||||
);
|
);
|
||||||
@@ -152,7 +154,9 @@ class Media extends PhpObject {
|
|||||||
$sMediaPath = self::getMediaPath($sMediaName);
|
$sMediaPath = self::getMediaPath($sMediaName);
|
||||||
$sType = self::getMediaType($sMediaName);
|
$sType = self::getMediaType($sMediaName);
|
||||||
|
|
||||||
$iTimeStamp = $iTakenOn = $iPostedOn = 0;
|
$iTimeStamp = $iTakenOn = 0;
|
||||||
|
$iPostedOn = filemtime($sMediaPath);
|
||||||
|
$sTimeZone = date_default_timezone_get();
|
||||||
$sRotate = '0';
|
$sRotate = '0';
|
||||||
$sTakenOn = '';
|
$sTakenOn = '';
|
||||||
switch($sType) {
|
switch($sType) {
|
||||||
@@ -161,28 +165,44 @@ class Media extends PhpObject {
|
|||||||
$sParams = implode(' ', array(
|
$sParams = implode(' ', array(
|
||||||
'-loglevel error', //Remove comments
|
'-loglevel error', //Remove comments
|
||||||
'-select_streams v:0', //First video channel
|
'-select_streams v:0', //First video channel
|
||||||
'-show_entries stream_tags=rotate,creation_time', //filter tags :rotation & creation time only
|
'-show_entries '. //filter tags : Creation Time & Rotation
|
||||||
|
'format_tags=creation_time,com.apple.quicktime.creationdate'.':'.
|
||||||
|
'stream_tags=rotate,creation_time',
|
||||||
'-print_format json', //output format: json
|
'-print_format json', //output format: json
|
||||||
'-i' //input file
|
'-i' //input file
|
||||||
));
|
));
|
||||||
exec('ffprobe '.$sParams.' "'.$sMediaPath.'"', $asResult);
|
exec('ffprobe '.$sParams.' "'.$sMediaPath.'"', $asResult);
|
||||||
$asResult = json_decode(implode('', $asResult), true);
|
$asExif = json_decode(implode('', $asResult), true);
|
||||||
|
|
||||||
//Timestamps
|
//Taken On
|
||||||
$sTakenOn = date(Db::TIMESTAMP_FORMAT, strtotime($asResult['streams'][0]['tags']['creation_time']));
|
if(isset($asExif['format']['tags']['com.apple.quicktime.creationdate'])) {
|
||||||
$iPostedOn = filemtime($sMediaPath);
|
$sTakenOn = $asExif['format']['tags']['com.apple.quicktime.creationdate']; //contains Time Zone
|
||||||
|
$sTimeZone = Spot::getTimeZoneFromDate($sTakenOn) ?? $sTimeZone;
|
||||||
|
}
|
||||||
|
else $sTakenOn = $asExif['format']['tags']['creation_time'] ?? $asExif['streams'][0]['tags']['creation_time'];
|
||||||
|
|
||||||
//Orientation
|
//Orientation
|
||||||
if(isset($asResult['streams'][0]['tags']['rotate'])) $sRotate = $asResult['streams'][0]['tags']['rotate'];
|
if(isset($asExif['streams'][0]['tags']['rotate'])) $sRotate = $asExif['streams'][0]['tags']['rotate'];
|
||||||
break;
|
break;
|
||||||
case 'image':
|
case 'image':
|
||||||
$asExif = @exif_read_data($sMediaPath, 0, true);
|
$asExif = @exif_read_data($sMediaPath, 0, true);
|
||||||
if(!$asExif) $asExif['FILE']['FileDateTime'] = filemtime($sMediaPath);
|
|
||||||
|
|
||||||
//Timestamps
|
//Posted On
|
||||||
if(array_key_exists('EXIF', $asExif) && array_key_exists('DateTimeOriginal', $asExif['EXIF'])) $sTakenOn = $asExif['EXIF']['DateTimeOriginal'];
|
|
||||||
if(array_key_exists('FILE', $asExif) && array_key_exists('FileDateTime', $asExif['FILE'])) $iPostedOn = $asExif['FILE']['FileDateTime'];
|
if(array_key_exists('FILE', $asExif) && array_key_exists('FileDateTime', $asExif['FILE'])) $iPostedOn = $asExif['FILE']['FileDateTime'];
|
||||||
|
|
||||||
|
//Taken On & Timezone
|
||||||
|
if(array_key_exists('EXIF', $asExif)) {
|
||||||
|
if(array_key_exists('DateTimeOriginal', $asExif['EXIF'])) $sTakenOn = $asExif['EXIF']['DateTimeOriginal'];
|
||||||
|
|
||||||
|
/* Priorities:
|
||||||
|
* 1. OffsetTimeOriginal: timezone for DateTimeOriginal (exif version >= 2.31)
|
||||||
|
* 2. 0x9011: same as above, but unidentified
|
||||||
|
* 3. Timezone extracted from DateTimeOriginal
|
||||||
|
* 4. Uploader Browser Time Zone (PHP Default Time Zone)
|
||||||
|
*/
|
||||||
|
$sTimeZone = $asExif['EXIF']['OffsetTimeOriginal'] ?? $asExif['EXIF']['UndefinedTag:0x9011'] ?? Spot::getTimeZoneFromDate($sTakenOn) ?? $sTimeZone;
|
||||||
|
}
|
||||||
|
|
||||||
//Orientation
|
//Orientation
|
||||||
if(array_key_exists('IFD0', $asExif) && array_key_exists('Orientation', $asExif['IFD0'])) {
|
if(array_key_exists('IFD0', $asExif) && array_key_exists('Orientation', $asExif['IFD0'])) {
|
||||||
switch($asExif['IFD0']['Orientation'])
|
switch($asExif['IFD0']['Orientation'])
|
||||||
@@ -196,9 +216,10 @@ class Media extends PhpObject {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Media info do not have any TZ: Interpreting date time using project timezone (assuming all medias have been taken in this time zone)
|
//Assign the correct Time Zone to $sTakenOn if it is not already contained in it. Then get Unix Timestamp
|
||||||
|
//Time Zone (2nd parameter) will be ignored if already contained in $sTakenOn
|
||||||
if($sTakenOn != '') {
|
if($sTakenOn != '') {
|
||||||
$oTakenOn = new DateTime($sTakenOn, new DateTimeZone($this->oProject->getTimeZone()));
|
$oTakenOn = new DateTime($sTakenOn, new DateTimeZone($sTimeZone));
|
||||||
$iTakenOn = $oTakenOn->format('U');
|
$iTakenOn = $oTakenOn->format('U');
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -207,6 +228,7 @@ class Media extends PhpObject {
|
|||||||
|
|
||||||
return array(
|
return array(
|
||||||
'timestamp' => $iTimeStamp,
|
'timestamp' => $iTimeStamp,
|
||||||
|
'timezone' => $sTimeZone,
|
||||||
'taken_ts' => $iTakenOn,
|
'taken_ts' => $iTakenOn,
|
||||||
'file_ts' => $iPostedOn,
|
'file_ts' => $iPostedOn,
|
||||||
'rotate' => $sRotate,
|
'rotate' => $sRotate,
|
||||||
|
|||||||
+17
-18
@@ -66,7 +66,7 @@ class Project extends PhpObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function createProjectId() {
|
public function createProjectId() {
|
||||||
$this->setProjectId($this->oDb->insertRow(self::PROJ_TABLE, array('timezone'=>Settings::TIMEZONE)));
|
$this->setProjectId($this->oDb->insertRow(self::PROJ_TABLE, array('codename'=>'')));
|
||||||
return $this->getProjectId();
|
return $this->getProjectId();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -104,14 +104,6 @@ class Project extends PhpObject {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getTimeZone() {
|
|
||||||
return $this->asGeo['timezone'];
|
|
||||||
}
|
|
||||||
|
|
||||||
public function setTimeZone($sTimeZone) {
|
|
||||||
return $this->updateField('timezone', $sTimeZone);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getFeedIds() {
|
public function getFeedIds() {
|
||||||
return $this->oDb->selectColumn(
|
return $this->oDb->selectColumn(
|
||||||
Feed::FEED_TABLE,
|
Feed::FEED_TABLE,
|
||||||
@@ -129,8 +121,7 @@ class Project extends PhpObject {
|
|||||||
'name',
|
'name',
|
||||||
'active_from',
|
'active_from',
|
||||||
'active_to',
|
'active_to',
|
||||||
"IF(NOW() BETWEEN active_from AND active_to, 1, IF(NOW() < active_from, 0, 2)) AS mode",
|
"IF(NOW() BETWEEN active_from AND active_to, 1, IF(NOW() < active_from, 0, 2)) AS mode"
|
||||||
'timezone'
|
|
||||||
),
|
),
|
||||||
'from' => self::PROJ_TABLE
|
'from' => self::PROJ_TABLE
|
||||||
);
|
);
|
||||||
@@ -186,7 +177,7 @@ class Project extends PhpObject {
|
|||||||
$this->asActive = array('from'=>$asProject['active_from'], 'to'=>$asProject['active_to']);
|
$this->asActive = array('from'=>$asProject['active_from'], 'to'=>$asProject['active_to']);
|
||||||
$this->sCodeName = $asProject['codename'];
|
$this->sCodeName = $asProject['codename'];
|
||||||
$this->sName = $asProject['name'];
|
$this->sName = $asProject['name'];
|
||||||
$this->asGeo = array('geofile'=>$asProject['geofilepath'], 'gpxfile'=>$asProject['gpxfilepath'], 'timezone'=>$asProject['timezone']);
|
$this->asGeo = array('geofile'=>$asProject['geofilepath'], 'gpxfile'=>$asProject['gpxfilepath']);
|
||||||
}
|
}
|
||||||
else $this->addError('Error while setting project: no project ID');
|
else $this->addError('Error while setting project: no project ID');
|
||||||
}
|
}
|
||||||
@@ -199,13 +190,21 @@ class Project extends PhpObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function delete() {
|
public function delete() {
|
||||||
$sDesc = '';
|
$asResult = array();
|
||||||
if($this->getProjectId() > 0) {
|
if($this->getProjectId() > 0) {
|
||||||
$bSuccess = $this->oDb->deleteRow(self::PROJ_TABLE, $this->getProjectId());
|
$asFeedIds = $this->getFeedIds();
|
||||||
if(!$bSuccess) $sDesc = $this->oDb->getLastError();
|
foreach($asFeedIds as $iFeedId) {
|
||||||
}
|
$asResult['feed'][] = (new Feed($this->oDb, $iFeedId))->delete();
|
||||||
else $sDesc = 'Error while setting project: no project ID';
|
}
|
||||||
|
|
||||||
return $sDesc;
|
$asResult['project'][] = array(
|
||||||
|
'id' => $this->getProjectId(),
|
||||||
|
'del' => $this->oDb->deleteRow(self::PROJ_TABLE, $this->getProjectId()),
|
||||||
|
'desc' => $this->oDb->getLastError()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else $asResult['project'][] = array('del'=>false, 'desc'=>'Error while setting project: no project ID');
|
||||||
|
|
||||||
|
return $asResult;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+85
-36
@@ -1,17 +1,21 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/* Timezones
|
/* Timezones
|
||||||
|
* ---------
|
||||||
|
* Site Time: Time Zone in which the User is viewing the Site (default PHP/SQL Timezone)
|
||||||
|
* Local Time: Time Zone in which the Spot Owner is
|
||||||
|
*
|
||||||
* - Feeds (table `feeds`):
|
* - Feeds (table `feeds`):
|
||||||
* - last_update: timestamp in site time (see Settings::TIMEZONE)
|
* - last_update: timestamp in Site Time
|
||||||
* - Spot Messages (table `messages`):
|
* - Spot Messages (table `messages`):
|
||||||
* - unix_time: UNIX (int) in UTC
|
* - unix_time: UNIX (int) in UTC
|
||||||
* - site_time: timestamp in site time (see Settings::TIMEZONE)
|
* - site_time: timestamp in Site Time
|
||||||
* - iso_time: raw ISO 8601 in local timezone
|
* - iso_time: raw ISO 8601 in Local Time
|
||||||
* - Medias (table `medias`):
|
* - Medias (table `medias`):
|
||||||
* - posted_on: timestamp in site time (see Settings::TIMEZONE)
|
* - posted_on: timestamp in Site Time
|
||||||
* - taken_on: timestamp in site time (see Settings::TIMEZONE)
|
* - taken_on: timestamp in Site Time
|
||||||
* - Posts (table `posts`):
|
* - Posts (table `posts`):
|
||||||
* - site_time: timestamp in site time (see Settings::TIMEZONE)
|
* - site_time: timestamp in Site Time
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class Spot extends Main
|
class Spot extends Main
|
||||||
@@ -71,18 +75,24 @@ class Spot extends Main
|
|||||||
$this->oDb->install();
|
$this->oDb->install();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function syncPics() {
|
||||||
|
if(Settings::DEBUG) {
|
||||||
|
return (new Media($this->oDb, $this->oProject))->syncFileFolder();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected function getSqlOptions()
|
protected function getSqlOptions()
|
||||||
{
|
{
|
||||||
return array
|
return array
|
||||||
(
|
(
|
||||||
'tables' => array
|
'tables' => array
|
||||||
(
|
(
|
||||||
Feed::MSG_TABLE => array('ref_msg_id', Db::getId(Feed::FEED_TABLE), 'type', 'latitude', 'longitude', 'iso_time', 'site_time', 'unix_time', 'content', 'battery_state'),
|
Feed::MSG_TABLE => array('ref_msg_id', Db::getId(Feed::FEED_TABLE), 'type', 'latitude', 'longitude', 'iso_time', 'site_time', 'timezone', 'unix_time', 'content', 'battery_state'),
|
||||||
Feed::FEED_TABLE => array('ref_feed_id', Db::getId(Feed::SPOT_TABLE), Db::getId(Project::PROJ_TABLE), 'name', 'description', 'status', 'last_update'),
|
Feed::FEED_TABLE => array('ref_feed_id', Db::getId(Feed::SPOT_TABLE), Db::getId(Project::PROJ_TABLE), 'name', 'description', 'status', 'last_update'),
|
||||||
Feed::SPOT_TABLE => array('ref_spot_id', 'name', 'model'),
|
Feed::SPOT_TABLE => array('ref_spot_id', 'name', 'model'),
|
||||||
Project::PROJ_TABLE => array('name', 'codename', 'active_from', 'active_to', 'timezone'),
|
Project::PROJ_TABLE => array('name', 'codename', 'active_from', 'active_to'),
|
||||||
self::POST_TABLE => array(Db::getId(Project::PROJ_TABLE), Db::getId(User::USER_TABLE), 'name', 'content', 'site_time'),
|
self::POST_TABLE => array(Db::getId(Project::PROJ_TABLE), Db::getId(User::USER_TABLE), 'name', 'content', 'site_time', 'timezone'),
|
||||||
Media::MEDIA_TABLE => array(Db::getId(Project::PROJ_TABLE), 'filename', 'type', 'taken_on', 'posted_on', 'rotate', 'comment'),
|
Media::MEDIA_TABLE => array(Db::getId(Project::PROJ_TABLE), 'filename', 'type', 'taken_on', 'posted_on', 'timezone', 'rotate', 'comment'),
|
||||||
User::USER_TABLE => array('name', 'email', 'gravatar', 'language', 'timezone', 'active'),
|
User::USER_TABLE => array('name', 'email', 'gravatar', 'language', 'timezone', 'active'),
|
||||||
self::MAP_TABLE => array('codename', 'geo_name', 'min_zoom', 'max_zoom', 'attribution'),
|
self::MAP_TABLE => array('codename', 'geo_name', 'min_zoom', 'max_zoom', 'attribution'),
|
||||||
self::MAPPING_TABLE => array(Db::getId(self::MAP_TABLE) , Db::getId(Project::PROJ_TABLE))
|
self::MAPPING_TABLE => array(Db::getId(self::MAP_TABLE) , Db::getId(Project::PROJ_TABLE))
|
||||||
@@ -235,11 +245,11 @@ class Spot extends Main
|
|||||||
public function getMarkers()
|
public function getMarkers()
|
||||||
{
|
{
|
||||||
$asMessages = $this->getSpotMessages();
|
$asMessages = $this->getSpotMessages();
|
||||||
$bSuccess = !empty($this->getMedias('posted_on') + $asMessages + $this->getPosts());
|
$bEmptyProject = empty($this->getMedias('posted_on') + $asMessages + $this->getPosts());
|
||||||
$sDesc = $bSuccess?'':self::NO_DATA;
|
$sDesc = '';
|
||||||
|
|
||||||
//Add medias
|
//Add medias
|
||||||
if($bSuccess) {
|
if(!empty($asMessages)) {
|
||||||
$asMedias = $this->getMedias('taken_on');
|
$asMedias = $this->getMedias('taken_on');
|
||||||
|
|
||||||
//Assign medias to closest message
|
//Assign medias to closest message
|
||||||
@@ -264,10 +274,12 @@ class Spot extends Main
|
|||||||
$asLastUpdate = array();
|
$asLastUpdate = array();
|
||||||
$this->addTimeStamp($asLastUpdate, $this->oProject->getLastUpdate());
|
$this->addTimeStamp($asLastUpdate, $this->oProject->getLastUpdate());
|
||||||
|
|
||||||
return self::getJsonResult($bSuccess, $sDesc, array(
|
return self::getJsonResult(true, $sDesc, array(
|
||||||
'messages' => $asMessages,
|
'messages' => $asMessages,
|
||||||
'maps' => $this->oProject->getMaps(),
|
'maps' => $this->oProject->getMaps(),
|
||||||
'last_update' => $asLastUpdate));
|
'last_update' => $asLastUpdate,
|
||||||
|
'empty_project' => $bEmptyProject
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function subscribe($sEmail) {
|
public function subscribe($sEmail) {
|
||||||
@@ -315,7 +327,7 @@ class Spot extends Main
|
|||||||
$asMessage['lat_dms'] = self::decToDms($asMessage['latitude'], 'lat');
|
$asMessage['lat_dms'] = self::decToDms($asMessage['latitude'], 'lat');
|
||||||
$asMessage['lon_dms'] = self::decToDms($asMessage['longitude'], 'lon');
|
$asMessage['lon_dms'] = self::decToDms($asMessage['longitude'], 'lon');
|
||||||
|
|
||||||
$this->addTimeStamp($asMessage, $asMessage['unix_time']);
|
$this->addTimeStamp($asMessage, $asMessage['unix_time'], $asMessage['timezone']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -343,10 +355,14 @@ class Spot extends Main
|
|||||||
foreach($asMedias as $asMedia) {
|
foreach($asMedias as $asMedia) {
|
||||||
$sTimeRef = $asMedia[$sTimeRefField];
|
$sTimeRef = $asMedia[$sTimeRefField];
|
||||||
if($sTimeRef >= $this->oProject->getActivePeriod('from') && $sTimeRef <= $this->oProject->getActivePeriod('to')) {
|
if($sTimeRef >= $this->oProject->getActivePeriod('from') && $sTimeRef <= $this->oProject->getActivePeriod('to')) {
|
||||||
$asMedia['taken_on_formatted'] = $this->getTimeFormat(strtotime($asMedia['taken_on']));
|
$iTimeStampTakenOn = strtotime($asMedia['taken_on']);
|
||||||
$asMedia['posted_on_formatted'] = $this->getTimeFormat(strtotime($asMedia['posted_on']));
|
$iTimeStampPostedOn = strtotime($asMedia['posted_on']);
|
||||||
|
$asMedia['taken_on_formatted'] = $this->getTimeFormat($iTimeStampTakenOn);
|
||||||
|
$asMedia['taken_on_formatted_local'] = $this->getTimeFormat($iTimeStampTakenOn, $asMedia['timezone']);
|
||||||
|
$asMedia['posted_on_formatted'] = $this->getTimeFormat($iTimeStampPostedOn);
|
||||||
|
$asMedia['posted_on_formatted_local'] = $this->getTimeFormat($iTimeStampPostedOn, $asMedia['timezone']);
|
||||||
|
|
||||||
$this->addTimeStamp($asMedia, strtotime($sTimeRef));
|
$this->addTimeStamp($asMedia, strtotime($sTimeRef), $asMedia['timezone']);
|
||||||
$asValidMedias[] = $asMedia;
|
$asValidMedias[] = $asMedia;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -379,17 +395,18 @@ class Spot extends Main
|
|||||||
$asPost['formatted_name'] = Toolbox::mb_ucwords($asPost['name']);
|
$asPost['formatted_name'] = Toolbox::mb_ucwords($asPost['name']);
|
||||||
unset($asPost[Db::getId(User::USER_TABLE)]);
|
unset($asPost[Db::getId(User::USER_TABLE)]);
|
||||||
|
|
||||||
$this->addTimeStamp($asPost, $iUnixTimeStamp);
|
$this->addTimeStamp($asPost, $iUnixTimeStamp, $asPost['timezone']);
|
||||||
}
|
}
|
||||||
usort($asPosts, function($a, $b){return $a['unix_time'] > $b['unix_time'];});
|
usort($asPosts, function($a, $b){return $a['unix_time'] > $b['unix_time'];});
|
||||||
|
|
||||||
return $asPosts;
|
return $asPosts;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function addTimeStamp(&$asData, $iTime) {
|
private function addTimeStamp(&$asData, $iTime, $sTimeZone='') {
|
||||||
$asData['unix_time'] = (int) $iTime;
|
$asData['unix_time'] = (int) $iTime;
|
||||||
$asData['relative_time'] = Toolbox::getDateTimeDesc($iTime, $this->oLang->getLanguage());
|
$asData['relative_time'] = Toolbox::getDateTimeDesc($iTime, $this->oLang->getLanguage());
|
||||||
$asData['formatted_time'] = $this->getTimeFormat($iTime);
|
$asData['formatted_time'] = $this->getTimeFormat($iTime);
|
||||||
|
if($sTimeZone != '') $asData['formatted_time_local'] = $this->getTimeFormat($iTime, $sTimeZone);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getNewsFeed($iChunk=0, $bInternal=false)
|
public function getNewsFeed($iChunk=0, $bInternal=false)
|
||||||
@@ -446,7 +463,8 @@ class Spot extends Main
|
|||||||
Db::getId(Project::PROJ_TABLE) => $this->oProject->getProjectId(),
|
Db::getId(Project::PROJ_TABLE) => $this->oProject->getProjectId(),
|
||||||
'name' => mb_strtolower(trim($sName)),
|
'name' => mb_strtolower(trim($sName)),
|
||||||
'content' => trim($sPost),
|
'content' => trim($sPost),
|
||||||
'site_time' => date(Db::TIMESTAMP_FORMAT) //site time (Settings::TIMEZONE)
|
'site_time' => date(Db::TIMESTAMP_FORMAT), //Now in Site Time
|
||||||
|
'timezone' => date_default_timezone_get() //Site Time Zone
|
||||||
);
|
);
|
||||||
if($this->oUser->getUserId() > 0) $asData[Db::getId(User::USER_TABLE)] = $this->oUser->getUserId();
|
if($this->oUser->getUserId() > 0) $asData[Db::getId(User::USER_TABLE)] = $this->oUser->getUserId();
|
||||||
|
|
||||||
@@ -471,13 +489,19 @@ class Spot extends Main
|
|||||||
return self::getJsonResult($asResult['result'], $asResult['desc'], $asResult['data']);
|
return self::getJsonResult($asResult['result'], $asResult['desc'], $asResult['data']);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAdminSettings() {
|
public function getAdminSettings($sType='') {
|
||||||
$oFeed = new Feed($this->oDb);
|
$oFeed = new Feed($this->oDb);
|
||||||
$asData = array(
|
$asData = array(
|
||||||
'project' => $this->oProject->getProjects(),
|
'project' => $this->oProject->getProjects(),
|
||||||
'feed' => $oFeed->getFeeds(),
|
'feed' => $oFeed->getFeeds(),
|
||||||
'spot' => $oFeed->getSpots()
|
'spot' => $oFeed->getSpots()
|
||||||
);
|
);
|
||||||
|
|
||||||
|
foreach($asData['project'] as &$asProject) {
|
||||||
|
$asProject['active_from'] = substr($asProject['active_from'], 0, 10);
|
||||||
|
$asProject['active_to'] = substr($asProject['active_to'], 0, 10);
|
||||||
|
}
|
||||||
|
|
||||||
return self::getJsonResult(true, '', $asData);
|
return self::getJsonResult(true, '', $asData);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -502,30 +526,32 @@ class Spot extends Main
|
|||||||
case 'active_to':
|
case 'active_to':
|
||||||
$bSuccess = $oProject->setActivePeriod($sValue.' 23:59:59', 'to');
|
$bSuccess = $oProject->setActivePeriod($sValue.' 23:59:59', 'to');
|
||||||
break;
|
break;
|
||||||
case 'timezone':
|
default:
|
||||||
$bSuccess = $oProject->setTimeZone($sValue);
|
$sDesc = $this->oLang->getTranslation('unknown_field', $sField);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
$asResult = $oProject->getProject();
|
$asResult = $oProject->getProject();
|
||||||
|
$asResult['active_from'] = substr($asResult['active_from'], 0, 10);
|
||||||
|
$asResult['active_to'] = substr($asResult['active_to'], 0, 10);
|
||||||
break;
|
break;
|
||||||
case 'feed':
|
case 'feed':
|
||||||
case 'spot':
|
|
||||||
$oFeed = new Feed($this->oDb, $iId);
|
$oFeed = new Feed($this->oDb, $iId);
|
||||||
switch($sField) {
|
switch($sField) {
|
||||||
case 'ref_feed_id':
|
case 'ref_feed_id':
|
||||||
$bSuccess = $oFeed->setRefFeedId($sValue);
|
$bSuccess = $oFeed->setRefFeedId($sValue);
|
||||||
break;
|
break;
|
||||||
case 'spot_id':
|
case 'id_spot':
|
||||||
$bSuccess = $oFeed->setSpotId($sValue);
|
$bSuccess = $oFeed->setSpotId($sValue);
|
||||||
break;
|
break;
|
||||||
case 'project_id':
|
case 'id_project':
|
||||||
$bSuccess = $oFeed->setProjectId($sValue);
|
$bSuccess = $oFeed->setProjectId($sValue);
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
$sDesc = $this->oLang->getTranslation('unknown_field', $sField);
|
||||||
}
|
}
|
||||||
$asResult = $oFeed->getFeed();
|
$asResult = $oFeed->getFeed();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if(!$bSuccess) $sDesc = Mask::LANG_PREFIX.'error_commit_db';
|
if(!$bSuccess && $sDesc=='') $sDesc = Mask::LANG_PREFIX.'error_commit_db';
|
||||||
|
|
||||||
return self::getJsonResult($bSuccess, $sDesc, array($sType=>array($asResult)));
|
return self::getJsonResult($bSuccess, $sDesc, array($sType=>array($asResult)));
|
||||||
}
|
}
|
||||||
@@ -537,16 +563,18 @@ class Spot extends Main
|
|||||||
switch($sType) {
|
switch($sType) {
|
||||||
case 'project':
|
case 'project':
|
||||||
$oProject = new Project($this->oDb, $iId);
|
$oProject = new Project($this->oDb, $iId);
|
||||||
$sDesc = $oProject->delete();
|
$asResult = $oProject->delete();
|
||||||
|
$sDesc = $asResult['project'][0]['desc'];
|
||||||
break;
|
break;
|
||||||
case 'feed':
|
case 'feed':
|
||||||
$oFeed = new Feed($this->oDb, $iId);
|
$oFeed = new Feed($this->oDb, $iId);
|
||||||
$sDesc = $oFeed->delete();
|
$asResult = array('feed'=>array($oFeed->delete()));
|
||||||
|
$sDesc = $asResult['feed'][0]['desc'];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
$bSuccess = ($sDesc=='');
|
$bSuccess = ($sDesc=='');
|
||||||
|
|
||||||
return self::getJsonResult($bSuccess, $sDesc, array($sType=>array(array('id'=>$iId, 'del'=>$bSuccess))));
|
return self::getJsonResult($bSuccess, $sDesc, $asResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function createProject() {
|
public function createProject() {
|
||||||
@@ -586,9 +614,30 @@ class Spot extends Main
|
|||||||
return $iDegree.'°'.$iMinute."'".$fSecond.'"'.$sDirection;
|
return $iDegree.'°'.$iMinute."'".$fSecond.'"'.$sDirection;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getTimeFormat($iTime) {
|
public function getTimeFormat($iTime, $sTimeZone='') {
|
||||||
$sDate = date('d/m/Y', $iTime);
|
if($sTimeZone=='') $sTimeZone = date_default_timezone_get();
|
||||||
$sTime = date('H:i', $iTime);
|
|
||||||
|
$oDate = new DateTime('@'.$iTime);
|
||||||
|
$oDate->setTimezone(new DateTimeZone($sTimeZone));
|
||||||
|
|
||||||
|
$sDate = $oDate->format('d/m/Y');
|
||||||
|
$sTime = $oDate->format('H:i');
|
||||||
return $this->oLang->getTranslation('date_time', array($sDate, $sTime));
|
return $this->oLang->getTranslation('date_time', array($sDate, $sTime));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getTimeZoneFromDate($sDate) {
|
||||||
|
$sTimeZone = null;
|
||||||
|
|
||||||
|
preg_match('/(?<timezone>(\+|\-)\d{2}:?(\d{2}|))$/', $sDate, $asMatch);
|
||||||
|
if(array_key_exists('timezone', $asMatch)) {
|
||||||
|
$sTimeZone = $asMatch['timezone'];
|
||||||
|
|
||||||
|
//Complete short form: +12 => +1200
|
||||||
|
if(strlen($sTimeZone) == 3) $sTimeZone .= '00';
|
||||||
|
|
||||||
|
//Add colon: +1200 => +12:00
|
||||||
|
if(!strpos($sTimeZone, ':')) $sTimeZone = substr_replace($sTimeZone, ':', 3, 0);
|
||||||
|
}
|
||||||
|
return $sTimeZone;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+1467
-1450
File diff suppressed because it is too large.
Load diff
@@ -13,11 +13,11 @@ ToolBox::fixGlobalVars(isset($argv)?$argv:array());
|
|||||||
|
|
||||||
//Available variables
|
//Available variables
|
||||||
$sAction = isset($_REQUEST['a'])?$_REQUEST['a']:'';
|
$sAction = isset($_REQUEST['a'])?$_REQUEST['a']:'';
|
||||||
$sTimezone = isset($_REQUEST['t'])?$_REQUEST['t']:'';
|
$sTimezone = $_REQUEST['t'] ?? '';
|
||||||
$sName = isset($_GET['name'])?$_GET['name']:'';
|
$sName = isset($_GET['name'])?$_GET['name']:'';
|
||||||
$sContent = isset($_GET['content'])?$_GET['content']:'';
|
$sContent = isset($_GET['content'])?$_GET['content']:'';
|
||||||
$iChunk = isset($_GET['chunk'])?$_GET['chunk']:0;
|
$iChunk = isset($_GET['chunk'])?$_GET['chunk']:0;
|
||||||
$iProjectId = isset($_REQUEST['project_id'])?$_REQUEST['project_id']:0;
|
$iProjectId = $_REQUEST['id_project'] ?? 0;
|
||||||
$sField = isset($_REQUEST['field'])?$_REQUEST['field']:'';
|
$sField = isset($_REQUEST['field'])?$_REQUEST['field']:'';
|
||||||
$oValue = isset($_REQUEST['value'])?$_REQUEST['value']:'';
|
$oValue = isset($_REQUEST['value'])?$_REQUEST['value']:'';
|
||||||
$iId = isset($_REQUEST['id'])?$_REQUEST['id']:0;
|
$iId = isset($_REQUEST['id'])?$_REQUEST['id']:0;
|
||||||
|
|||||||
+8
-6
@@ -1,6 +1,7 @@
|
|||||||
locale = en_NZ
|
locale = en_NZ
|
||||||
page_og_desc = Keep contact with François when he is off hiking
|
page_og_desc = Keep contact with François when he is off hiking
|
||||||
error_commit_db = Issue committing to DB
|
error_commit_db = Issue committing to DB
|
||||||
|
unknown_field = Field "$0" is unknown
|
||||||
|
|
||||||
save = Save
|
save = Save
|
||||||
admin_save_success = Saved
|
admin_save_success = Saved
|
||||||
@@ -46,17 +47,21 @@ copy_to_clipboard = Copy direct link to clipboard
|
|||||||
link_copied = Link copied!
|
link_copied = Link copied!
|
||||||
|
|
||||||
city_time = $0 Time
|
city_time = $0 Time
|
||||||
|
local_time = $0 Local Time
|
||||||
|
your_time = $0 Your Time
|
||||||
|
date_time = $0 at $1
|
||||||
|
time_zone = Time Zone
|
||||||
|
|
||||||
project_id = Project ID
|
id_project = Project ID
|
||||||
project = Project
|
project = Project
|
||||||
projects = Projects
|
projects = Projects
|
||||||
mode = Mode
|
mode = Mode
|
||||||
code_name = Code name
|
code_name = Code name
|
||||||
start = Start
|
start = Start
|
||||||
end = End
|
end = End
|
||||||
feed_id = Feed ID
|
id_feed = Feed ID
|
||||||
ref_feed_id = Ref. Feed ID
|
ref_feed_id = Ref. Feed ID
|
||||||
spot_id = Spot ID
|
id_spot = Spot ID
|
||||||
name = Name
|
name = Name
|
||||||
status = Status
|
status = Status
|
||||||
last_update = Last Spot update
|
last_update = Last Spot update
|
||||||
@@ -64,9 +69,6 @@ ref_spot_id = Ref. Spot ID
|
|||||||
model = Model
|
model = Model
|
||||||
delete = Delete
|
delete = Delete
|
||||||
|
|
||||||
date_time = $0 at $1
|
|
||||||
time_zone = Time zone
|
|
||||||
|
|
||||||
unit_day = day
|
unit_day = day
|
||||||
unit_days = days
|
unit_days = days
|
||||||
unit_hour = h
|
unit_hour = h
|
||||||
|
|||||||
+8
-6
@@ -1,6 +1,7 @@
|
|||||||
locale = fr_FR
|
locale = fr_FR
|
||||||
page_og_desc = Gardez le contact avec François lorsqu'il part sur les chemins
|
page_og_desc = Gardez le contact avec François lorsqu'il part sur les chemins
|
||||||
error_commit_db = Error lors de la requête SQL
|
error_commit_db = Error lors de la requête SQL
|
||||||
|
unknown_field = Champ "$0" inconnu
|
||||||
|
|
||||||
save = Sauvegarder
|
save = Sauvegarder
|
||||||
admin_save_success = Sauvegardé
|
admin_save_success = Sauvegardé
|
||||||
@@ -46,17 +47,21 @@ copy_to_clipboard = Copie le lien dans le presse-papier
|
|||||||
link_copied = Lien copié !
|
link_copied = Lien copié !
|
||||||
|
|
||||||
city_time = heure de $0
|
city_time = heure de $0
|
||||||
|
local_time = $0 heure locale
|
||||||
|
your_time = $0 dans votre fuseau horaire
|
||||||
|
date_time = $0 à $1
|
||||||
|
time_zone = Fuseau horaire
|
||||||
|
|
||||||
project_id = ID projet
|
id_project = ID projet
|
||||||
project = Projet
|
project = Projet
|
||||||
projects = Projets
|
projects = Projets
|
||||||
mode = Mode
|
mode = Mode
|
||||||
code_name = Nom de code
|
code_name = Nom de code
|
||||||
start = Départ
|
start = Départ
|
||||||
end = Arrivée
|
end = Arrivée
|
||||||
feed_id = ID Feed
|
id_feed = ID Feed
|
||||||
ref_feed_id = ID Feed ref.
|
ref_feed_id = ID Feed ref.
|
||||||
spot_id = ID Spot
|
id_spot = ID Spot
|
||||||
name = Description
|
name = Description
|
||||||
status = Statut
|
status = Statut
|
||||||
last_update = Dernière maj depuis Spot
|
last_update = Dernière maj depuis Spot
|
||||||
@@ -64,9 +69,6 @@ ref_spot_id = ID Spot ref.
|
|||||||
model = Modèle
|
model = Modèle
|
||||||
delete = Supprimer
|
delete = Supprimer
|
||||||
|
|
||||||
date_time = $0 à $1
|
|
||||||
time_zone = Fuseau horaire
|
|
||||||
|
|
||||||
unit_day = jour
|
unit_day = jour
|
||||||
unit_days = jours
|
unit_days = jours
|
||||||
unit_hour = h
|
unit_hour = h
|
||||||
|
|||||||
+20
-15
@@ -4,13 +4,12 @@
|
|||||||
<table>
|
<table>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>[#]lang:project_id[#]</th>
|
<th>[#]lang:id_project[#]</th>
|
||||||
<th>[#]lang:project[#]</th>
|
<th>[#]lang:project[#]</th>
|
||||||
<th>[#]lang:mode[#]</th>
|
<th>[#]lang:mode[#]</th>
|
||||||
<th>[#]lang:code_name[#]</th>
|
<th>[#]lang:code_name[#]</th>
|
||||||
<th>[#]lang:start[#]</th>
|
<th>[#]lang:start[#]</th>
|
||||||
<th>[#]lang:end[#]</th>
|
<th>[#]lang:end[#]</th>
|
||||||
<th>[#]lang:time_zone[#]</th>
|
|
||||||
<th>[#]lang:delete[#]</th>
|
<th>[#]lang:delete[#]</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
@@ -23,10 +22,10 @@
|
|||||||
<table>
|
<table>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>[#]lang:feed_id[#]</th>
|
<th>[#]lang:id_feed[#]</th>
|
||||||
<th>[#]lang:ref_feed_id[#]</th>
|
<th>[#]lang:ref_feed_id[#]</th>
|
||||||
<th>[#]lang:spot_id[#]</th>
|
<th>[#]lang:id_spot[#]</th>
|
||||||
<th>[#]lang:project_id[#]</th>
|
<th>[#]lang:id_project[#]</th>
|
||||||
<th>[#]lang:name[#]</th>
|
<th>[#]lang:name[#]</th>
|
||||||
<th>[#]lang:status[#]</th>
|
<th>[#]lang:status[#]</th>
|
||||||
<th>[#]lang:last_update[#]</th>
|
<th>[#]lang:last_update[#]</th>
|
||||||
@@ -41,7 +40,7 @@
|
|||||||
<table>
|
<table>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>[#]lang:spot_id[#]</th>
|
<th>[#]lang:id_spot[#]</th>
|
||||||
<th>[#]lang:ref_spot_id[#]</th>
|
<th>[#]lang:ref_spot_id[#]</th>
|
||||||
<th>[#]lang:name[#]</th>
|
<th>[#]lang:name[#]</th>
|
||||||
<th>[#]lang:model[#]</th>
|
<th>[#]lang:model[#]</th>
|
||||||
@@ -71,35 +70,41 @@ oSpot.onFeedback = function(sType, sMsg, asContext) {
|
|||||||
|
|
||||||
function setProjects(asElemTypes) {
|
function setProjects(asElemTypes) {
|
||||||
var aoEvents = [{on:'change', callback:commit}, {on:'keyup', callback:waitAndCommit}];
|
var aoEvents = [{on:'change', callback:commit}, {on:'keyup', callback:waitAndCommit}];
|
||||||
|
var aoChangeEvent = [aoEvents[0]];
|
||||||
|
|
||||||
$.each(asElemTypes, function(sElemType, aoElems) {
|
$.each(asElemTypes, function(sElemType, aoElems) {
|
||||||
$.each(aoElems, function(iKey, oElem) {
|
$.each(aoElems, function(iKey, oElem) {
|
||||||
var sElemId = sElemType+'_'+oElem.id;
|
var sElemId = sElemType+'_'+oElem.id;
|
||||||
var bNew = ($('#'+sElemId).length == 0);
|
var bNew = ($('#'+sElemId).length == 0);
|
||||||
|
|
||||||
var $Elem = (bNew?$('<tr>', {'id': sElemId}):$('#'+sElemId).empty())
|
var $Elem = (bNew?$('<tr>', {'id': sElemId}):$('#'+sElemId))
|
||||||
.data('type', sElemType)
|
.data('type', sElemType)
|
||||||
.data('id', oElem.id)
|
.data('id', oElem.id);
|
||||||
.append($('<td>').text(oElem.id || ''));
|
|
||||||
|
|
||||||
if(oElem.del) $Elem.remove();
|
if(oElem.del) $Elem.remove();
|
||||||
|
else if(!bNew) {
|
||||||
|
$Elem.find('input').each(function(iKey, oInput){
|
||||||
|
var $Input = $(oInput);
|
||||||
|
if($Input.attr('name') in oElem && $Input.attr('type')!='date') $Input.val(oElem[$Input.attr('name')]);
|
||||||
|
});
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
|
$Elem.append($('<td>').text(oElem.id || ''));
|
||||||
switch(sElemType) {
|
switch(sElemType) {
|
||||||
case 'project':
|
case 'project':
|
||||||
$Elem
|
$Elem
|
||||||
.append($('<td>').addInput('text', 'name', oElem.name, aoEvents))
|
.append($('<td>').addInput('text', 'name', oElem.name, aoEvents))
|
||||||
.append($('<td>', {'class': 'mode'}).text(oElem.mode))
|
.append($('<td>', {'class': 'mode'}).text(oElem.mode))
|
||||||
.append($('<td>').addInput('text', 'codename', oElem.codename, aoEvents))
|
.append($('<td>').addInput('text', 'codename', oElem.codename, aoEvents))
|
||||||
.append($('<td>').addInput('date', 'active_from', oElem.active_from.substr(0, 10), aoEvents))
|
.append($('<td>').addInput('date', 'active_from', oElem.active_from, aoChangeEvent))
|
||||||
.append($('<td>').addInput('date', 'active_to', oElem.active_to.substr(0, 10), aoEvents))
|
.append($('<td>').addInput('date', 'active_to', oElem.active_to, aoChangeEvent))
|
||||||
.append($('<td>').addInput('text', 'timezone', oElem.timezone, aoEvents))
|
|
||||||
.append($('<td>').addButton('close fa-lg', '', 'del_proj', del));
|
.append($('<td>').addButton('close fa-lg', '', 'del_proj', del));
|
||||||
break;
|
break;
|
||||||
case 'feed':
|
case 'feed':
|
||||||
$Elem
|
$Elem
|
||||||
.append($('<td>').addInput('text', 'ref_feed_id', oElem.ref_feed_id, aoEvents))
|
.append($('<td>').addInput('text', 'ref_feed_id', oElem.ref_feed_id, aoEvents))
|
||||||
.append($('<td>').addInput('number', 'spot_id', oElem.id_spot, aoEvents))
|
.append($('<td>').addInput('number', 'id_spot', oElem.id_spot, aoEvents))
|
||||||
.append($('<td>').addInput('number', 'project_id', oElem.id_project, aoEvents))
|
.append($('<td>').addInput('number', 'id_project', oElem.id_project, aoEvents))
|
||||||
.append($('<td>').text(oElem.name))
|
.append($('<td>').text(oElem.name))
|
||||||
.append($('<td>').text(oElem.status))
|
.append($('<td>').text(oElem.status))
|
||||||
.append($('<td>').text(oElem.last_update))
|
.append($('<td>').text(oElem.last_update))
|
||||||
@@ -113,7 +118,7 @@ function setProjects(asElemTypes) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(bNew) $Elem.appendTo($('#'+sElemType+'s').find('table tbody'));
|
$Elem.appendTo($('#'+sElemType+'s').find('table tbody'));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
+16
-25
@@ -204,21 +204,13 @@ function initProject(sProjectCodeName, oFocusPost){
|
|||||||
//Page Title
|
//Page Title
|
||||||
self.setPageTitle(oSpot.vars(['project', 'name']));
|
self.setPageTitle(oSpot.vars(['project', 'name']));
|
||||||
|
|
||||||
//Timezone difference notice
|
|
||||||
var bSameTime = (
|
|
||||||
(new Date()).toLocaleString([], {timeZone: oSpot.consts.timezone}) ==
|
|
||||||
(new Date()).toLocaleString([], {timeZone: oSpot.vars(['project', 'timezone'])})
|
|
||||||
);
|
|
||||||
self.tmp('site_tz_notice', bSameTime?'':getTimeZoneDesc(oSpot.consts.timezone));
|
|
||||||
self.tmp('proj_tz_notice', bSameTime?'':getTimeZoneDesc(self.vars(['project', 'timezone'])));
|
|
||||||
|
|
||||||
//Load Track & Markers
|
//Load Track & Markers
|
||||||
$.when(
|
$.when(
|
||||||
//Markers: Spot Messages & Medias
|
//Markers: Spot Messages & Medias
|
||||||
self.get(
|
self.get(
|
||||||
'markers',
|
'markers',
|
||||||
function(){},
|
function(){},
|
||||||
{project_id: self.vars(['project', 'id'])},
|
{id_project: self.vars(['project', 'id'])},
|
||||||
function(e){console.log(e);}
|
function(e){console.log(e);}
|
||||||
),
|
),
|
||||||
//Project Geojson: Hike track
|
//Project Geojson: Hike track
|
||||||
@@ -230,7 +222,7 @@ function initProject(sProjectCodeName, oFocusPost){
|
|||||||
).done(function(aoMessages, aoTracks) {
|
).done(function(aoMessages, aoTracks) {
|
||||||
var asData = aoMessages[0]['data'];
|
var asData = aoMessages[0]['data'];
|
||||||
setMapLayers(asData['maps']);
|
setMapLayers(asData['maps']);
|
||||||
initSpotMessages(asData['messages'] || [], aoTracks[0], aoMessages[0]['desc']=='No Data');
|
initSpotMessages(asData['messages'] || [], aoTracks[0], asData['empty_project']);
|
||||||
updateSettingsPanel(asData['last_update']);
|
updateSettingsPanel(asData['last_update']);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -268,7 +260,7 @@ function initPosts() {
|
|||||||
updateFeed(true);
|
updateFeed(true);
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
project_id: self.vars(['project', 'id']),
|
id_project: self.vars(['project', 'id']),
|
||||||
name: $('#name').val(),
|
name: $('#name').val(),
|
||||||
content: $('#post').val()
|
content: $('#post').val()
|
||||||
}
|
}
|
||||||
@@ -590,10 +582,10 @@ function initSpotMessages(aoMessages, aoTracks, bNoFeed) {
|
|||||||
.append(oMsg.formatted_time+(self.vars(['project', 'mode'])==self.consts.modes.blog?' ('+oMsg.relative_time+')':'')));
|
.append(oMsg.formatted_time+(self.vars(['project', 'mode'])==self.consts.modes.blog?' ('+oMsg.relative_time+')':'')));
|
||||||
|
|
||||||
//Tooltip: Time Zone
|
//Tooltip: Time Zone
|
||||||
if(self.tmp('site_tz_notice')!='') {
|
if(oMsg.formatted_time_local != oMsg.formatted_time) {
|
||||||
$Tooltip.append($('<p>', {'class':'timezone'})
|
$Tooltip.append($('<p>', {'class':'timezone'})
|
||||||
.addIcon('fa-timezone fa-fw fa-lg')
|
.addIcon('fa-timezone fa-fw fa-lg')
|
||||||
.append(self.tmp('site_tz_notice')));
|
.append(oSpot.lang('local_time', oMsg.formatted_time_local)));
|
||||||
}
|
}
|
||||||
|
|
||||||
//Tooltip: Medias
|
//Tooltip: Medias
|
||||||
@@ -743,8 +735,8 @@ function updateFeed(bFirstChunk, bDiscrete, fCallback) {
|
|||||||
|
|
||||||
self.tmp('updatable', true);
|
self.tmp('updatable', true);
|
||||||
}, {
|
}, {
|
||||||
'project_id': self.vars(['project', 'id']),
|
id_project: self.vars(['project', 'id']),
|
||||||
'chunk': self.tmp('news_chunk')
|
chunk: self.tmp('news_chunk')
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -789,6 +781,8 @@ function getPost(asPost) {
|
|||||||
|
|
||||||
var sRelTime = (asPost.relative_time!='')?((self.vars('project') && self.vars(['project', 'mode'])==self.consts.modes.histo)?asPost.formatted_time.substr(0, 10):asPost.relative_time):'';
|
var sRelTime = (asPost.relative_time!='')?((self.vars('project') && self.vars(['project', 'mode'])==self.consts.modes.histo)?asPost.formatted_time.substr(0, 10):asPost.relative_time):'';
|
||||||
var sAbsTime = asPost.formatted_time;
|
var sAbsTime = asPost.formatted_time;
|
||||||
|
var sAbsTimeLocal = asPost.formatted_time_local;
|
||||||
|
var bTimeDiff = (sAbsTime && sAbsTimeLocal != sAbsTime);
|
||||||
var sType = asPost.subtype || asPost.type;
|
var sType = asPost.subtype || asPost.type;
|
||||||
var $Body = {};
|
var $Body = {};
|
||||||
|
|
||||||
@@ -800,7 +794,7 @@ function getPost(asPost) {
|
|||||||
.data('clicked', false)
|
.data('clicked', false)
|
||||||
.append($('<p>').addIcon('fa-coords', true).append(getGoogleMapsLink(asPost)))
|
.append($('<p>').addIcon('fa-coords', true).append(getGoogleMapsLink(asPost)))
|
||||||
.append($('<p>').addIcon('fa-time', true).append(sAbsTime))
|
.append($('<p>').addIcon('fa-time', true).append(sAbsTime))
|
||||||
.append((self.tmp('site_tz_notice')!='')?$('<p>').addIcon('fa-timezone', true).append(self.tmp('site_tz_notice')):'')
|
.append(bTimeDiff?$('<p>').addIcon('fa-timezone', true).append(oSpot.lang('local_time', sAbsTimeLocal)):'')
|
||||||
.append($('<a>', {'class':'drill'})
|
.append($('<a>', {'class':'drill'})
|
||||||
.append($('<img>', {'class':'staticmap', title: oSpot.lang('click_zoom'), src: getWmtsApiUrl('static', asPost.latitude, asPost.longitude, 13)}))
|
.append($('<img>', {'class':'staticmap', title: oSpot.lang('click_zoom'), src: getWmtsApiUrl('static', asPost.latitude, asPost.longitude, 13)}))
|
||||||
.append($('<span>', {'class': 'drill-icon fa-stack'})
|
.append($('<span>', {'class': 'drill-icon fa-stack'})
|
||||||
@@ -868,7 +862,7 @@ function getPost(asPost) {
|
|||||||
.addIcon('fa-'+sType)
|
.addIcon('fa-'+sType)
|
||||||
.append(asPost.displayed_id?' '+oSpot.lang('counter', asPost.displayed_id):'')
|
.append(asPost.displayed_id?' '+oSpot.lang('counter', asPost.displayed_id):'')
|
||||||
)
|
)
|
||||||
.append($('<span>', {'class':'time'}).hoverSwap(sRelTime, sAbsTime+((self.tmp('site_tz_notice')!='')?' ('+self.tmp('site_tz_notice')+')':''))))
|
.append($('<span>', {'class':'time', title:bTimeDiff?oSpot.lang('local_time', sAbsTimeLocal):''}).hoverSwap(sRelTime, bTimeDiff?oSpot.lang('your_time', sAbsTime):sAbsTime)))
|
||||||
.append($('<div>', {'class':'body'}).append($Body));
|
.append($('<div>', {'class':'body'}).append($Body));
|
||||||
|
|
||||||
if(bLink) {
|
if(bLink) {
|
||||||
@@ -894,22 +888,19 @@ function getWmtsApiUrl(sMapId, iLat, iLng, iZoom) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getMediaLink(asData, sType) {
|
function getMediaLink(asData, sType) {
|
||||||
|
var bTimeDiff = (asData.posted_on_formatted && asData.posted_on_formatted_local != asData.posted_on_formatted);
|
||||||
|
|
||||||
var $PostedOn =
|
var $PostedOn =
|
||||||
$('<span>', {'class': 'lb-caption-line', title: oSpot.lang(asData.subtype)+' '+oSpot.lang('add_on', asData.posted_on_formatted)})
|
$('<span>', {'class': 'lb-caption-line', title: bTimeDiff?oSpot.lang('local_time', asData.posted_on_formatted_local):''})
|
||||||
.addIcon('fa-upload fa-lg fa-fw', true)
|
.addIcon('fa-upload fa-lg fa-fw', true)
|
||||||
.append(asData.posted_on_formatted);
|
.append(asData.posted_on_formatted);
|
||||||
|
|
||||||
var $TakenOn = (asData.taken_on == '0000-00-00 00:00:00')?'':
|
var $TakenOn = (asData.taken_on == '0000-00-00 00:00:00')?'':
|
||||||
$('<span>', {'class': 'lb-caption-line', title: oSpot.lang(asData.subtype)+' '+oSpot.lang(asData.subtype+'_taken', asData.taken_on_formatted)})
|
$('<span>', {'class': 'lb-caption-line', title: bTimeDiff?oSpot.lang('local_time', asData.taken_on_formatted_local):''})
|
||||||
.addIcon('fa-'+asData.subtype+'-shot fa-lg fa-fw', true)
|
.addIcon('fa-'+asData.subtype+'-shot fa-lg fa-fw', true)
|
||||||
.append(asData.taken_on_formatted);
|
.append(asData.taken_on_formatted);
|
||||||
|
|
||||||
var $Timezone = (self.tmp('site_tz_notice') == '')?'':
|
var $Title = $('<div>').append(sType=='marker'?$TakenOn:$PostedOn).append(sType=='marker'?$PostedOn:$TakenOn);
|
||||||
$('<span>', {'class': 'lb-caption-line'})
|
|
||||||
.addIcon('fa-timezone fa-lg fa-fw', true)
|
|
||||||
.append(self.tmp('site_tz_notice'));
|
|
||||||
|
|
||||||
var $Title = $('<div>').append(sType=='marker'?$TakenOn:$PostedOn).append(sType=='marker'?$PostedOn:$TakenOn).append($Timezone);
|
|
||||||
var $Link =
|
var $Link =
|
||||||
$('<a>', {
|
$('<a>', {
|
||||||
'class': 'drill',
|
'class': 'drill',
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ oSpot.pageInit = function(asHash) {
|
|||||||
.attr('data-url', self.getActionLink('upload'))
|
.attr('data-url', self.getActionLink('upload'))
|
||||||
.fileupload({
|
.fileupload({
|
||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
|
formData: {t: self.consts.timezone},
|
||||||
acceptFileTypes: /(\.|\/)(gif|jpe?g|png|mov)$/i,
|
acceptFileTypes: /(\.|\/)(gif|jpe?g|png|mov)$/i,
|
||||||
done: function (e, asData) {
|
done: function (e, asData) {
|
||||||
$.each(asData.result.files, function(iKey, oFile) {
|
$.each(asData.result.files, function(iKey, oFile) {
|
||||||
|
|||||||
@@ -14,5 +14,5 @@
|
|||||||
* ECMA import/export
|
* ECMA import/export
|
||||||
* Reset zoom on image closing (lightbox)
|
* Reset zoom on image closing (lightbox)
|
||||||
* Add mail frequency slider
|
* Add mail frequency slider
|
||||||
* Replace Project Time Zone with browser Time Zone when uploading media?
|
|
||||||
* Use WMTS servers directly when not using Geo Caching Server
|
* Use WMTS servers directly when not using Geo Caching Server
|
||||||
|
* Allow HEIF picture format
|
||||||
@@ -4,8 +4,8 @@
|
|||||||
/* jQuery Iframe Transport Plugin - https://github.com/blueimp/jQuery-File-Upload/blob/master/js/jquery.iframe-transport.js */
|
/* jQuery Iframe Transport Plugin - https://github.com/blueimp/jQuery-File-Upload/blob/master/js/jquery.iframe-transport.js */
|
||||||
!function(e){"use strict";"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof exports?e(require("jquery")):e(window.jQuery)}(function(e){"use strict";var t=0,r=e,n="parseJSON";"JSON"in window&&"parse"in JSON&&(r=JSON,n="parse"),e.ajaxTransport("iframe",function(r){if(r.async){var n,a,o,i=r.initialIframeSrc||"javascript:false;";return{send:function(p,f){(n=e('<form style="display:none;"></form>')).attr("accept-charset",r.formAcceptCharset),o=/\?/.test(r.url)?"&":"?","DELETE"===r.type?(r.url=r.url+o+"_method=DELETE",r.type="POST"):"PUT"===r.type?(r.url=r.url+o+"_method=PUT",r.type="POST"):"PATCH"===r.type&&(r.url=r.url+o+"_method=PATCH",r.type="POST"),a=e('<iframe src="'+i+'" name="iframe-transport-'+(t+=1)+'"></iframe>').on("load",function(){var t,o=e.isArray(r.paramName)?r.paramName:[r.paramName];a.off("load").on("load",function(){var t;try{if(!(t=a.contents()).length||!t[0].firstChild)throw new Error}catch(e){t=void 0}f(200,"success",{iframe:t}),e('<iframe src="'+i+'"></iframe>').appendTo(n),window.setTimeout(function(){n.remove()},0)}),n.prop("target",a.prop("name")).prop("action",r.url).prop("method",r.type),r.formData&&e.each(r.formData,function(t,r){e('<input type="hidden"/>').prop("name",r.name).val(r.value).appendTo(n)}),r.fileInput&&r.fileInput.length&&"POST"===r.type&&(t=r.fileInput.clone(),r.fileInput.after(function(e){return t[e]}),r.paramName&&r.fileInput.each(function(t){e(this).prop("name",o[t]||r.paramName)}),n.append(r.fileInput).prop("enctype","multipart/form-data").prop("encoding","multipart/form-data"),r.fileInput.removeAttr("form")),window.setTimeout(function(){n.submit(),t&&t.length&&r.fileInput.each(function(r,n){var a=e(t[r]);e(n).prop("name",a.prop("name")).attr("form",a.attr("form")),a.replaceWith(n)})},0)}),n.append(a).appendTo(document.body)},abort:function(){a&&a.off("load").prop("src",i),n&&n.remove()}}}}),e.ajaxSetup({converters:{"iframe text":function(t){return t&&e(t[0].body).text()},"iframe json":function(t){return t&&r[n](e(t[0].body).text())},"iframe html":function(t){return t&&e(t[0].body).html()},"iframe xml":function(t){var r=t&&t[0];return r&&e.isXMLDoc(r)?r:e.parseXML(r.XMLDocument&&r.XMLDocument.xml||e(r.body).html())},"iframe script":function(t){return t&&e.globalEval(e(t[0].body).text())}}})});
|
!function(e){"use strict";"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof exports?e(require("jquery")):e(window.jQuery)}(function(e){"use strict";var t=0,r=e,n="parseJSON";"JSON"in window&&"parse"in JSON&&(r=JSON,n="parse"),e.ajaxTransport("iframe",function(r){if(r.async){var n,a,o,i=r.initialIframeSrc||"javascript:false;";return{send:function(p,f){(n=e('<form style="display:none;"></form>')).attr("accept-charset",r.formAcceptCharset),o=/\?/.test(r.url)?"&":"?","DELETE"===r.type?(r.url=r.url+o+"_method=DELETE",r.type="POST"):"PUT"===r.type?(r.url=r.url+o+"_method=PUT",r.type="POST"):"PATCH"===r.type&&(r.url=r.url+o+"_method=PATCH",r.type="POST"),a=e('<iframe src="'+i+'" name="iframe-transport-'+(t+=1)+'"></iframe>').on("load",function(){var t,o=e.isArray(r.paramName)?r.paramName:[r.paramName];a.off("load").on("load",function(){var t;try{if(!(t=a.contents()).length||!t[0].firstChild)throw new Error}catch(e){t=void 0}f(200,"success",{iframe:t}),e('<iframe src="'+i+'"></iframe>').appendTo(n),window.setTimeout(function(){n.remove()},0)}),n.prop("target",a.prop("name")).prop("action",r.url).prop("method",r.type),r.formData&&e.each(r.formData,function(t,r){e('<input type="hidden"/>').prop("name",r.name).val(r.value).appendTo(n)}),r.fileInput&&r.fileInput.length&&"POST"===r.type&&(t=r.fileInput.clone(),r.fileInput.after(function(e){return t[e]}),r.paramName&&r.fileInput.each(function(t){e(this).prop("name",o[t]||r.paramName)}),n.append(r.fileInput).prop("enctype","multipart/form-data").prop("encoding","multipart/form-data"),r.fileInput.removeAttr("form")),window.setTimeout(function(){n.submit(),t&&t.length&&r.fileInput.each(function(r,n){var a=e(t[r]);e(n).prop("name",a.prop("name")).attr("form",a.attr("form")),a.replaceWith(n)})},0)}),n.append(a).appendTo(document.body)},abort:function(){a&&a.off("load").prop("src",i),n&&n.remove()}}}}),e.ajaxSetup({converters:{"iframe text":function(t){return t&&e(t[0].body).text()},"iframe json":function(t){return t&&r[n](e(t[0].body).text())},"iframe html":function(t){return t&&e(t[0].body).html()},"iframe xml":function(t){var r=t&&t[0];return r&&e.isXMLDoc(r)?r:e.parseXML(r.XMLDocument&&r.XMLDocument.xml||e(r.body).html())},"iframe script":function(t){return t&&e.globalEval(e(t[0].body).text())}}})});
|
||||||
|
|
||||||
/* FileUpload - v10.20.0 - https://github.com/blueimp/jQuery-File-Upload/blob/master/js/jquery.fileupload.js */
|
/* jQuery-File-Upload - v10.31.0 - https://github.com/blueimp/jQuery-File-Upload/blob/master/js/jquery.fileupload.js */
|
||||||
!function(e){"use strict";"function"==typeof define&&define.amd?define(["jquery","jquery-ui/ui/widget"],e):"object"==typeof exports?e(require("jquery"),require("./vendor/jquery.ui.widget")):e(window.jQuery)}(function(e){"use strict";function t(t){var i="dragover"===t;return function(n){n.dataTransfer=n.originalEvent&&n.originalEvent.dataTransfer;var r=n.dataTransfer;r&&-1!==e.inArray("Files",r.types)&&!1!==this._trigger(t,e.Event(t,{delegatedEvent:n}))&&(n.preventDefault(),i&&(r.dropEffect="copy"))}}e.support.fileInput=!(new RegExp("(Android (1\\.[0156]|2\\.[01]))|(Windows Phone (OS 7|8\\.0))|(XBLWP)|(ZuneWP)|(WPDesktop)|(w(eb)?OSBrowser)|(webOS)|(Kindle/(1\\.0|2\\.[05]|3\\.0))").test(window.navigator.userAgent)||e('<input type="file"/>').prop("disabled")),e.support.xhrFileUpload=!(!window.ProgressEvent||!window.FileReader),e.support.xhrFormDataFileUpload=!!window.FormData,e.support.blobSlice=window.Blob&&(Blob.prototype.slice||Blob.prototype.webkitSlice||Blob.prototype.mozSlice),e.widget("blueimp.fileupload",{options:{dropZone:e(document),pasteZone:void 0,fileInput:void 0,replaceFileInput:!0,paramName:void 0,singleFileUploads:!0,limitMultiFileUploads:void 0,limitMultiFileUploadSize:void 0,limitMultiFileUploadSizeOverhead:512,sequentialUploads:!1,limitConcurrentUploads:void 0,forceIframeTransport:!1,redirect:void 0,redirectParamName:void 0,postMessage:void 0,multipart:!0,maxChunkSize:void 0,uploadedBytes:void 0,recalculateProgress:!0,progressInterval:100,bitrateInterval:500,autoUpload:!0,uniqueFilenames:void 0,messages:{uploadedBytes:"Uploaded bytes exceed file size"},i18n:function(t,i){return t=this.messages[t]||t.toString(),i&&e.each(i,function(e,i){t=t.replace("{"+e+"}",i)}),t},formData:function(e){return e.serializeArray()},add:function(t,i){if(t.isDefaultPrevented())return!1;(i.autoUpload||!1!==i.autoUpload&&e(this).fileupload("option","autoUpload"))&&i.process().done(function(){i.submit()})},processData:!1,contentType:!1,cache:!1,timeout:0},_specialOptions:["fileInput","dropZone","pasteZone","multipart","forceIframeTransport"],_blobSlice:e.support.blobSlice&&function(){return(this.slice||this.webkitSlice||this.mozSlice).apply(this,arguments)},_BitrateTimer:function(){this.timestamp=Date.now?Date.now():(new Date).getTime(),this.loaded=0,this.bitrate=0,this.getBitrate=function(e,t,i){var n=e-this.timestamp;return(!this.bitrate||!i||n>i)&&(this.bitrate=(t-this.loaded)*(1e3/n)*8,this.loaded=t,this.timestamp=e),this.bitrate}},_isXHRUpload:function(t){return!t.forceIframeTransport&&(!t.multipart&&e.support.xhrFileUpload||e.support.xhrFormDataFileUpload)},_getFormData:function(t){var i;return"function"===e.type(t.formData)?t.formData(t.form):e.isArray(t.formData)?t.formData:"object"===e.type(t.formData)?(i=[],e.each(t.formData,function(e,t){i.push({name:e,value:t})}),i):[]},_getTotal:function(t){var i=0;return e.each(t,function(e,t){i+=t.size||1}),i},_initProgressObject:function(t){var i={loaded:0,total:0,bitrate:0};t._progress?e.extend(t._progress,i):t._progress=i},_initResponseObject:function(e){var t;if(e._response)for(t in e._response)Object.prototype.hasOwnProperty.call(e._response,t)&&delete e._response[t];else e._response={}},_onProgress:function(t,i){if(t.lengthComputable){var n,r=Date.now?Date.now():(new Date).getTime();if(i._time&&i.progressInterval&&r-i._time<i.progressInterval&&t.loaded!==t.total)return;i._time=r,n=Math.floor(t.loaded/t.total*(i.chunkSize||i._progress.total))+(i.uploadedBytes||0),this._progress.loaded+=n-i._progress.loaded,this._progress.bitrate=this._bitrateTimer.getBitrate(r,this._progress.loaded,i.bitrateInterval),i._progress.loaded=i.loaded=n,i._progress.bitrate=i.bitrate=i._bitrateTimer.getBitrate(r,n,i.bitrateInterval),this._trigger("progress",e.Event("progress",{delegatedEvent:t}),i),this._trigger("progressall",e.Event("progressall",{delegatedEvent:t}),this._progress)}},_initProgressListener:function(t){var i=this,n=t.xhr?t.xhr():e.ajaxSettings.xhr();n.upload&&(e(n.upload).on("progress",function(e){var n=e.originalEvent;e.lengthComputable=n.lengthComputable,e.loaded=n.loaded,e.total=n.total,i._onProgress(e,t)}),t.xhr=function(){return n})},_deinitProgressListener:function(t){var i=t.xhr?t.xhr():e.ajaxSettings.xhr();i.upload&&e(i.upload).off("progress")},_isInstanceOf:function(e,t){return Object.prototype.toString.call(t)==="[object "+e+"]"},_getUniqueFilename:function(e,t){return t[e=String(e)]?(e=e.replace(/(?: \(([\d]+)\))?(\.[^.]+)?$/,function(e,t,i){return" ("+(t?Number(t)+1:1)+")"+(i||"")}),this._getUniqueFilename(e,t)):(t[e]=!0,e)},_initXHRData:function(t){var i,n=this,r=t.files[0],o=t.multipart||!e.support.xhrFileUpload,s="array"===e.type(t.paramName)?t.paramName[0]:t.paramName;t.headers=e.extend({},t.headers),t.contentRange&&(t.headers["Content-Range"]=t.contentRange),o&&!t.blob&&this._isInstanceOf("File",r)||(t.headers["Content-Disposition"]='attachment; filename="'+encodeURI(r.uploadName||r.name)+'"'),o?e.support.xhrFormDataFileUpload&&(t.postMessage?(i=this._geLine truncated
|
!function(e){"use strict";"function"==typeof define&&define.amd?define(["jquery","jquery-ui/ui/widget"],e):"object"==typeof exports?e(require("jquery"),require("./vendor/jquery.ui.widget")):e(window.jQuery)}(function(e){"use strict";function t(t){var i="dragover"===t;return function(r){r.dataTransfer=r.originalEvent&&r.originalEvent.dataTransfer;var n=r.dataTransfer;n&&-1!==e.inArray("Files",n.types)&&!1!==this._trigger(t,e.Event(t,{delegatedEvent:r}))&&(r.preventDefault(),i&&(n.dropEffect="copy"))}}var i;e.support.fileInput=!(new RegExp("(Android (1\\.[0156]|2\\.[01]))|(Windows Phone (OS 7|8\\.0))|(XBLWP)|(ZuneWP)|(WPDesktop)|(w(eb)?OSBrowser)|(webOS)|(Kindle/(1\\.0|2\\.[05]|3\\.0))").test(window.navigator.userAgent)||e('<input type="file"/>').prop("disabled")),e.support.xhrFileUpload=!(!window.ProgressEvent||!window.FileReader),e.support.xhrFormDataFileUpload=!!window.FormData,e.support.blobSlice=window.Blob&&(Blob.prototype.slice||Blob.prototype.webkitSlice||Blob.prototype.mozSlice),e.widget("blueimp.fileupload",{options:{dropZone:e(document),pasteZone:void 0,fileInput:void 0,replaceFileInput:!0,paramName:void 0,singleFileUploads:!0,limitMultiFileUploads:void 0,limitMultiFileUploadSize:void 0,limitMultiFileUploadSizeOverhead:512,sequentialUploads:!1,limitConcurrentUploads:void 0,forceIframeTransport:!1,redirect:void 0,redirectParamName:void 0,postMessage:void 0,multipart:!0,maxChunkSize:void 0,uploadedBytes:void 0,recalculateProgress:!0,progressInterval:100,bitrateInterval:500,autoUpload:!0,uniqueFilenames:void 0,messages:{uploadedBytes:"Uploaded bytes exceed file size"},i18n:function(t,i){return t=this.messages[t]||t.toString(),i&&e.each(i,function(e,i){t=t.replace("{"+e+"}",i)}),t},formData:function(e){return e.serializeArray()},add:function(t,i){if(t.isDefaultPrevented())return!1;(i.autoUpload||!1!==i.autoUpload&&e(this).fileupload("option","autoUpload"))&&i.process().done(function(){i.submit()})},processData:!1,contentType:!1,cache:!1,timeout:0},_promisePipe:(i=e.fn.jquery.split("."),Number(i[0])>1||Number(i[1])>7?"then":"pipe"),_specialOptions:["fileInput","dropZone","pasteZone","multipart","forceIframeTransport"],_blobSlice:e.support.blobSlice&&function(){return(this.slice||this.webkitSlice||this.mozSlice).apply(this,arguments)},_BitrateTimer:function(){this.timestamp=Date.now?Date.now():(new Date).getTime(),this.loaded=0,this.bitrate=0,this.getBitrate=function(e,t,i){var r=e-this.timestamp;return(!this.bitrate||!i||r>i)&&(this.bitrate=(t-this.loaded)*(1e3/r)*8,this.loaded=t,this.timestamp=e),this.bitrate}},_isXHRUpload:function(t){return!t.forceIframeTransport&&(!t.multipart&&e.support.xhrFileUpload||e.support.xhrFormDataFileUpload)},_getFormData:function(t){var i;return"function"===e.type(t.formData)?t.formData(t.form):e.isArray(t.formData)?t.formData:"object"===e.type(t.formData)?(i=[],e.each(t.formData,function(e,t){i.push({name:e,value:t})}),i):[]},_getTotal:function(t){var i=0;return e.each(t,function(e,t){i+=t.size||1}),i},_initProgressObject:function(t){var i={loaded:0,total:0,bitrate:0};t._progress?e.extend(t._progress,i):t._progress=i},_initResponseObject:function(e){var t;if(e._response)for(t in e._response)Object.prototype.hasOwnProperty.call(e._response,t)&&delete e._response[t];else e._response={}},_onProgress:function(t,i){if(t.lengthComputable){var r,n=Date.now?Date.now():(new Date).getTime();if(i._time&&i.progressInterval&&n-i._time<i.progressInterval&&t.loaded!==t.total)return;i._time=n,r=Math.floor(t.loaded/t.total*(i.chunkSize||i._progress.total))+(i.uploadedBytes||0),this._progress.loaded+=r-i._progress.loaded,this._progress.bitrate=this._bitrateTimer.getBitrate(n,this._progress.loaded,i.bitrateInterval),i._progress.loaded=i.loaded=r,i._progress.bitrate=i.bitrate=i._bitrateTimer.getBitrate(n,r,i.bitrateInterval),this._trigger("progress",e.Event("progress",{delegatedEvent:t}),i),this._trigger("progressall",e.Event("progressall",{delegatedEvent:t}),this._progress)}},_initProgressListener:function(t){var i=this,r=t.xhr?t.xhr():e.ajaxSettings.xhr();r.upload&&(e(r.upload).on("progress",function(e){var r=e.originalEvent;e.lengthComputable=r.lengthComputable,e.loaded=r.loaded,e.total=r.total,i._onProgress(e,t)}),t.xhr=function(){return r})},_deinitProgressListener:function(t){var i=t.xhr?t.xhr():e.ajaxSettings.xhr();i.upload&&e(i.upload).off("progress")},_isInstanceOf:function(e,t){return Object.prototype.toString.call(t)==="[object "+e+"]"},_getUniqueFilename:function(e,t){return t[e=String(e)]?(e=e.replace(/(?: \(([\d]+)\))?(\.[^.]+)?$/,function(e,t,i){return" ("+(t?Number(t)+1:1)+")"+(i||"")}),this._getUniqueFilename(e,t)):(t[e]=!0,e)},_initXHRData:function(t){var i,r=this,n=t.files[0],o=t.multipart||!e.support.xhrFileUpload,s="array"===e.type(t.paramName)?t.paramName[0]:t.paramName;t.headers=e.extend({},t.headers),t.contentRange&&(t.headers["Content-Range"]=t.contentRange),o&&!t.blob&&this._isInstanceOf("File",n)||(t.headers["Content-Disposition"]='attachment; filename="'+encodeULine truncated
|
||||||
|
|
||||||
/* SimpleBar - v5.2.1 - https://grsmto.github.io/simplebar - Under MIT License */
|
/* SimpleBar - v5.2.1 - https://grsmto.github.io/simplebar - Under MIT License */
|
||||||
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).SimpleBar=e()}(this,(function(){"use strict";var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function e(t,e){return t(e={exports:{}},e.exports),e.exports}var r,n,i,o="object",s=function(t){return t&&t.Math==Math&&t},a=s(typeof globalThis==o&&globalThis)||s(typeof window==o&&window)||s(typeof self==o&&self)||s(typeof t==o&&t)||Function("return this")(),c=function(t){try{return!!t()}catch(t){return!0}},l=!c((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})),u={}.propertyIsEnumerable,f=Object.getOwnPropertyDescriptor,h={f:f&&!u.call({1:2},1)?function(t){var e=f(this,t);return!!e&&e.enumerable}:u},d=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}},p={}.toString,v=function(t){return p.call(t).slice(8,-1)},g="".split,y=c((function(){return!Object("z").propertyIsEnumerable(0)}))?function(t){return"String"==v(t)?g.call(t,""):Object(t)}:Object,b=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t},m=function(t){return y(b(t))},x=function(t){return"object"==typeof t?null!==t:"function"==typeof t},E=function(t,e){if(!x(t))return t;var r,n;if(e&&"function"==typeof(r=t.toString)&&!x(n=r.call(t)))return n;if("function"==typeof(r=t.valueOf)&&!x(n=r.call(t)))return n;if(!e&&"function"==typeof(r=t.toString)&&!x(n=r.call(t)))return n;throw TypeError("Can't convert object to primitive value")},w={}.hasOwnProperty,O=function(t,e){return w.call(t,e)},_=a.document,S=x(_)&&x(_.createElement),A=function(t){return S?_.createElement(t):{}},k=!l&&!c((function(){return 7!=Object.defineProperty(A("div"),"a",{get:function(){return 7}}).a})),L=Object.getOwnPropertyDescriptor,M={f:l?L:function(t,e){if(t=m(t),e=E(e,!0),k)try{return L(t,e)}catch(t){}if(O(t,e))return d(!h.f.call(t,e),t[e])}},T=function(t){if(!x(t))throw TypeError(String(t)+" is not an object");return t},j=Object.defineProperty,R={f:l?j:function(t,e,r){if(T(t),e=E(e,!0),T(r),k)try{return j(t,e,r)}catch(t){}if("get"in r||"set"in r)throw TypeError("Accessors not supported");return"value"in r&&(t[e]=r.value),t}},W=l?function(t,e,r){return R.f(t,e,d(1,r))}:function(t,e,r){return t[e]=r,t},z=function(t,e){try{W(a,t,e)}catch(r){a[t]=e}return e},C=e((function(t){var e=a["__core-js_shared__"]||z("__core-js_shared__",{});(t.exports=function(t,r){return e[t]||(e[t]=void 0!==r?r:{})})("versions",[]).push({version:"3.2.1",mode:"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})})),N=C("native-function-to-string",Function.toString),I=a.WeakMap,D="function"==typeof I&&/native code/.test(N.call(I)),P=0,V=Math.random(),F=function(t){return"Symbol("+String(void 0===t?"":t)+")_"+(++P+V).toString(36)},B=C("keys"),H=function(t){return B[t]||(B[t]=F(t))},q={},$=a.WeakMap;if(D){var X=new $,Y=X.get,G=X.has,U=X.set;r=function(t,e){return U.call(X,t,e),e},n=function(t){return Y.call(X,t)||{}},i=function(t){return G.call(X,t)}}else{var Q=H("state");q[Q]=!0,r=function(t,e){return W(t,Q,e),e},n=function(t){return O(t,Q)?t[Q]:{}},i=function(t){return O(t,Q)}}var K={set:r,get:n,has:i,enforce:function(t){return i(t)?n(t):r(t,{})},getterFor:function(t){return function(e){var r;if(!x(e)||(r=n(e)).type!==t)throw TypeError("Incompatible receiver, "+t+" required");return r}}},J=e((function(t){var e=K.get,r=K.enforce,n=String(N).split("toString");C("inspectSource",(function(t){return N.call(t)})),(t.exports=function(t,e,i,o){var s=!!o&&!!o.unsafe,c=!!o&&!!o.enumerable,l=!!o&&!!o.noTargetGet;"function"==typeof i&&("string"!=typeof e||O(i,"name")||W(i,"name",e),r(i).source=n.join("string"==typeof e?e:"")),t!==a?(s?!l&&t[e]&&(c=!0):delete t[e],c?t[e]=i:W(t,e,i)):c?t[e]=i:z(e,i)})(Function.prototype,"toString",(function(){return"function"==typeof this&&e(this).source||N.call(this)}))})),Z=a,tt=function(t){return"function"==typeof t?t:void 0},et=function(t,e){return arguments.length<2?tt(Z[t])||tt(a[t]):Z[t]&&Z[t][e]||a[t]&&a[t][e]},rt=Math.ceil,nt=Math.floor,it=function(t){return isNaN(t=+t)?0:(t>0?nt:rt)(t)},ot=Math.min,st=function(t){return t>0?ot(it(t),9007199254740991):0},at=Math.max,ct=Math.min,lt=function(t){return function(e,r,n){var i,o=m(e),s=st(o.length),a=function(t,e){var r=it(t);return r<0?at(r+e,0):ct(r,e)}(n,s);if(t&&r!=r){for(;s>a;)if((i=o[a++])!=i)return!0}else for(;s>a;a++)if((t||a in o)&&o[a]===r)return t||a||0;return!t&&-1}},ut={includes:lt(!0),indexOf:lt(!1)}.indexOf,ft=function(t,e){var r,n=m(t),i=0,o=[];for(r in n)!O(q,r)&&O(n,r)&&o.push(r);for(;e.length>i;)O(n,r=e[i++])&&(~ut(o,r)||o.push(r));return o},ht=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],dt=ht.concat("length","prototype"),pt={f:Object.getOwnPropertyNames||function(t){return ft(t,dt)}},vt={f:Object.getOwnPropertySymbols},gt=Line truncated
|
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).SimpleBar=e()}(this,(function(){"use strict";var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function e(t,e){return t(e={exports:{}},e.exports),e.exports}var r,n,i,o="object",s=function(t){return t&&t.Math==Math&&t},a=s(typeof globalThis==o&&globalThis)||s(typeof window==o&&window)||s(typeof self==o&&self)||s(typeof t==o&&t)||Function("return this")(),c=function(t){try{return!!t()}catch(t){return!0}},l=!c((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})),u={}.propertyIsEnumerable,f=Object.getOwnPropertyDescriptor,h={f:f&&!u.call({1:2},1)?function(t){var e=f(this,t);return!!e&&e.enumerable}:u},d=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}},p={}.toString,v=function(t){return p.call(t).slice(8,-1)},g="".split,y=c((function(){return!Object("z").propertyIsEnumerable(0)}))?function(t){return"String"==v(t)?g.call(t,""):Object(t)}:Object,b=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t},m=function(t){return y(b(t))},x=function(t){return"object"==typeof t?null!==t:"function"==typeof t},E=function(t,e){if(!x(t))return t;var r,n;if(e&&"function"==typeof(r=t.toString)&&!x(n=r.call(t)))return n;if("function"==typeof(r=t.valueOf)&&!x(n=r.call(t)))return n;if(!e&&"function"==typeof(r=t.toString)&&!x(n=r.call(t)))return n;throw TypeError("Can't convert object to primitive value")},w={}.hasOwnProperty,O=function(t,e){return w.call(t,e)},_=a.document,S=x(_)&&x(_.createElement),A=function(t){return S?_.createElement(t):{}},k=!l&&!c((function(){return 7!=Object.defineProperty(A("div"),"a",{get:function(){return 7}}).a})),L=Object.getOwnPropertyDescriptor,M={f:l?L:function(t,e){if(t=m(t),e=E(e,!0),k)try{return L(t,e)}catch(t){}if(O(t,e))return d(!h.f.call(t,e),t[e])}},T=function(t){if(!x(t))throw TypeError(String(t)+" is not an object");return t},j=Object.defineProperty,R={f:l?j:function(t,e,r){if(T(t),e=E(e,!0),T(r),k)try{return j(t,e,r)}catch(t){}if("get"in r||"set"in r)throw TypeError("Accessors not supported");return"value"in r&&(t[e]=r.value),t}},W=l?function(t,e,r){return R.f(t,e,d(1,r))}:function(t,e,r){return t[e]=r,t},z=function(t,e){try{W(a,t,e)}catch(r){a[t]=e}return e},C=e((function(t){var e=a["__core-js_shared__"]||z("__core-js_shared__",{});(t.exports=function(t,r){return e[t]||(e[t]=void 0!==r?r:{})})("versions",[]).push({version:"3.2.1",mode:"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})})),N=C("native-function-to-string",Function.toString),I=a.WeakMap,D="function"==typeof I&&/native code/.test(N.call(I)),P=0,V=Math.random(),F=function(t){return"Symbol("+String(void 0===t?"":t)+")_"+(++P+V).toString(36)},B=C("keys"),H=function(t){return B[t]||(B[t]=F(t))},q={},$=a.WeakMap;if(D){var X=new $,Y=X.get,G=X.has,U=X.set;r=function(t,e){return U.call(X,t,e),e},n=function(t){return Y.call(X,t)||{}},i=function(t){return G.call(X,t)}}else{var Q=H("state");q[Q]=!0,r=function(t,e){return W(t,Q,e),e},n=function(t){return O(t,Q)?t[Q]:{}},i=function(t){return O(t,Q)}}var K={set:r,get:n,has:i,enforce:function(t){return i(t)?n(t):r(t,{})},getterFor:function(t){return function(e){var r;if(!x(e)||(r=n(e)).type!==t)throw TypeError("Incompatible receiver, "+t+" required");return r}}},J=e((function(t){var e=K.get,r=K.enforce,n=String(N).split("toString");C("inspectSource",(function(t){return N.call(t)})),(t.exports=function(t,e,i,o){var s=!!o&&!!o.unsafe,c=!!o&&!!o.enumerable,l=!!o&&!!o.noTargetGet;"function"==typeof i&&("string"!=typeof e||O(i,"name")||W(i,"name",e),r(i).source=n.join("string"==typeof e?e:"")),t!==a?(s?!l&&t[e]&&(c=!0):delete t[e],c?t[e]=i:W(t,e,i)):c?t[e]=i:z(e,i)})(Function.prototype,"toString",(function(){return"function"==typeof this&&e(this).source||N.call(this)}))})),Z=a,tt=function(t){return"function"==typeof t?t:void 0},et=function(t,e){return arguments.length<2?tt(Z[t])||tt(a[t]):Z[t]&&Z[t][e]||a[t]&&a[t][e]},rt=Math.ceil,nt=Math.floor,it=function(t){return isNaN(t=+t)?0:(t>0?nt:rt)(t)},ot=Math.min,st=function(t){return t>0?ot(it(t),9007199254740991):0},at=Math.max,ct=Math.min,lt=function(t){return function(e,r,n){var i,o=m(e),s=st(o.length),a=function(t,e){var r=it(t);return r<0?at(r+e,0):ct(r,e)}(n,s);if(t&&r!=r){for(;s>a;)if((i=o[a++])!=i)return!0}else for(;s>a;a++)if((t||a in o)&&o[a]===r)return t||a||0;return!t&&-1}},ut={includes:lt(!0),indexOf:lt(!1)}.indexOf,ft=function(t,e){var r,n=m(t),i=0,o=[];for(r in n)!O(q,r)&&O(n,r)&&o.push(r);for(;e.length>i;)O(n,r=e[i++])&&(~ut(o,r)||o.push(r));return o},ht=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],dt=ht.concat("length","prototype"),pt={f:Object.getOwnPropertyNames||function(t){return ft(t,dt)}},vt={f:Object.getOwnPropertySymbols},gt=Line truncated
|
||||||
|
|||||||
@@ -251,14 +251,6 @@ function setElem(aoAnchor, asPath, oValue)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getTimeZoneDesc(sTimeZoneName) {
|
|
||||||
if(sTimeZoneName.indexOf('/')==-1) return sTimeZoneName;
|
|
||||||
else {
|
|
||||||
var sCity = sTimeZoneName.split('/')[1].replace('_', ' ') || '';
|
|
||||||
return oSpot.lang('city_time', sCity);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$.prototype.addInput = function(sType, sName, sValue, aoEvents)
|
$.prototype.addInput = function(sType, sName, sValue, aoEvents)
|
||||||
{
|
{
|
||||||
aoEvents = aoEvents || [];
|
aoEvents = aoEvents || [];
|
||||||
|
|||||||
@@ -563,8 +563,10 @@ $legend-color: $post-color;
|
|||||||
}
|
}
|
||||||
|
|
||||||
#last_update {
|
#last_update {
|
||||||
|
position: absolute;
|
||||||
margin-top: -2em;
|
margin-top: -2em;
|
||||||
padding: 0 1rem;
|
padding: 0 1rem;
|
||||||
|
width: calc(100% - 2rem);
|
||||||
|
|
||||||
p {
|
p {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
@font-face{font-family:"Ubuntu";font-style:normal;font-weight:400;src:local("Ubuntu Regular"),local("Ubuntu-Regular"),url(https://fonts.gstatic.com/s/ubuntu/v13/4iCs6KVjbNBYlgoKcg72j00.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:400;src:local("Ubuntu Regular"),local("Ubuntu-Regular"),url(https://fonts.gstatic.com/s/ubuntu/v13/4iCs6KVjbNBYlgoKew72j00.woff2) format("woff2");unicode-range:U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:400;src:local("Ubuntu Regular"),local("Ubuntu-Regular"),url(https://fonts.gstatic.com/s/ubuntu/v13/4iCs6KVjbNBYlgoKcw72j00.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:400;src:local("Ubuntu Regular"),local("Ubuntu-Regular"),url(https://fonts.gstatic.com/s/ubuntu/v13/4iCs6KVjbNBYlgoKfA72j00.woff2) format("woff2");unicode-range:U+0370-03FF}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:400;src:local("Ubuntu Regular"),local("Ubuntu-Regular"),url(https://fonts.gstatic.com/s/ubuntu/v13/4iCs6KVjbNBYlgoKcQ72j00.woff2) format("woff2");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:400;src:local("Ubuntu Regular"),local("Ubuntu-Regular"),url(fonts/4iCs6KVjbNBYlgoKfw72.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:700;src:local("Ubuntu Bold"),local("Ubuntu-Bold"),url(https://fonts.gstatic.com/s/ubuntu/v13/4iCv6KVjbNBYlgoCxCvjvWyNL4U.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:700;src:local("Ubuntu Bold"),local("Ubuntu-Bold"),url(https://fonts.gstatic.com/s/ubuntu/v13/4iCv6KVjbNBYlgoCxCvjtGyNL4U.woff2) format("woff2");unicode-range:U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:700;src:local("Ubuntu Bold"),local("Ubuntu-Bold"),url(https://fonts.gstatic.com/s/ubuntu/v13/4iCv6KVjbNBYlgoCxCvjvGyNL4U.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:700;src:local("Ubuntu Bold"),local("Ubuntu-Bold"),url(https://fonts.gstatic.com/s/ubuntu/v13/4iCv6KVjbNBYlgoCxCvjs2yNL4U.woff2) format("woff2");unicode-range:U+0370-03FF}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:700;src:local("Ubuntu Bold"),local("Ubuntu-Bold"),url(https://fonts.gstatic.com/s/ubuntu/v13/4iCv6KVjbNBYlgoCxCvjvmyNL4U.woff2) format("woff2");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:700;src:local("Ubuntu Bold"),local("Ubuntu-Bold"),url(fonts/4iCv6KVjbNBYlgoCxCvjsGyN.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@-webkit-keyframes fadeIn{from{opacity:.3}}@-moz-keyframes fadeIn{from{opacity:.3}}@-ms-keyframes fadeIn{from{opacity:.3}}@-o-keyframes fadeIn{from{opacity:.3}}@keyframes fadeIn{from{opacity:.3}}.flicker,#projects #settings #settings-panel .settings-sections .settings-section.newsletter button#nl_btn.loading span,.lightbox .lb-cancel{-webkit-animation:fadeIn .5s infinite alternate;-moz-animation:fadeIn .5s infinite alternate;-ms-animation:fadeIn .5s infinite alternate;-o-animation:fadeIn .5s infinite alternate;animation:fadeIn .5s infinite alternate}@keyframes spotlogo{0%{transform:scale(1)}1.25%{transform:scale(1.2)}2.5%{transform:scale(1);transform:rotate(0deg)}5%{transform:rotate(360deg)}100%{transform:rotate(360deg)}}body,textarea,input,button{font-size:14px;font-family:"Ubuntu",sans-serif;margin:0}textarea{resize:none}button{cursor:pointer;font-weight:bold}input,textarea,button{border:none;padding:.5em 1em;border-radius:3px}.feedback p{margin:0 0 1em 0}.feedback p.error{color:red}.feedback p.warning{color:orange}.feedback p.success{color:green}/*!
|
@font-face{font-family:"Ubuntu";font-style:normal;font-weight:400;src:local("Ubuntu Regular"),local("Ubuntu-Regular"),url(https://fonts.gstatic.com/s/ubuntu/v13/4iCs6KVjbNBYlgoKcg72j00.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:400;src:local("Ubuntu Regular"),local("Ubuntu-Regular"),url(https://fonts.gstatic.com/s/ubuntu/v13/4iCs6KVjbNBYlgoKew72j00.woff2) format("woff2");unicode-range:U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:400;src:local("Ubuntu Regular"),local("Ubuntu-Regular"),url(https://fonts.gstatic.com/s/ubuntu/v13/4iCs6KVjbNBYlgoKcw72j00.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:400;src:local("Ubuntu Regular"),local("Ubuntu-Regular"),url(https://fonts.gstatic.com/s/ubuntu/v13/4iCs6KVjbNBYlgoKfA72j00.woff2) format("woff2");unicode-range:U+0370-03FF}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:400;src:local("Ubuntu Regular"),local("Ubuntu-Regular"),url(https://fonts.gstatic.com/s/ubuntu/v13/4iCs6KVjbNBYlgoKcQ72j00.woff2) format("woff2");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:400;src:local("Ubuntu Regular"),local("Ubuntu-Regular"),url(fonts/4iCs6KVjbNBYlgoKfw72.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:700;src:local("Ubuntu Bold"),local("Ubuntu-Bold"),url(https://fonts.gstatic.com/s/ubuntu/v13/4iCv6KVjbNBYlgoCxCvjvWyNL4U.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:700;src:local("Ubuntu Bold"),local("Ubuntu-Bold"),url(https://fonts.gstatic.com/s/ubuntu/v13/4iCv6KVjbNBYlgoCxCvjtGyNL4U.woff2) format("woff2");unicode-range:U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:700;src:local("Ubuntu Bold"),local("Ubuntu-Bold"),url(https://fonts.gstatic.com/s/ubuntu/v13/4iCv6KVjbNBYlgoCxCvjvGyNL4U.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:700;src:local("Ubuntu Bold"),local("Ubuntu-Bold"),url(https://fonts.gstatic.com/s/ubuntu/v13/4iCv6KVjbNBYlgoCxCvjs2yNL4U.woff2) format("woff2");unicode-range:U+0370-03FF}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:700;src:local("Ubuntu Bold"),local("Ubuntu-Bold"),url(https://fonts.gstatic.com/s/ubuntu/v13/4iCv6KVjbNBYlgoCxCvjvmyNL4U.woff2) format("woff2");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:700;src:local("Ubuntu Bold"),local("Ubuntu-Bold"),url(fonts/4iCv6KVjbNBYlgoCxCvjsGyN.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@-webkit-keyframes fadeIn{from{opacity:.3}}@-moz-keyframes fadeIn{from{opacity:.3}}@-ms-keyframes fadeIn{from{opacity:.3}}@-o-keyframes fadeIn{from{opacity:.3}}@keyframes fadeIn{from{opacity:.3}}.flicker,#projects #settings #settings-panel .settings-sections .settings-section.newsletter button#nl_btn.loading span,.lightbox .lb-cancel{-webkit-animation:fadeIn .5s infinite alternate;-moz-animation:fadeIn .5s infinite alternate;-ms-animation:fadeIn .5s infinite alternate;-o-animation:fadeIn .5s infinite alternate;animation:fadeIn .5s infinite alternate}@keyframes spotlogo{0%{transform:scale(1)}1.25%{transform:scale(1.2)}2.5%{transform:scale(1);transform:rotate(0deg)}5%{transform:rotate(360deg)}100%{transform:rotate(360deg)}}body,textarea,input,button{font-size:14px;font-family:"Ubuntu",sans-serif;margin:0}textarea{resize:none}button{cursor:pointer;font-weight:bold}input,textarea,button{border:none;padding:.5em 1em;border-radius:3px}.feedback p{margin:0 0 1em 0}.feedback p.error{color:red}.feedback p.warning{color:orange}.feedback p.success{color:green}/*!
|
||||||
* Font Awesome Pro 5.11.2 by @fontawesome - https://fontawesome.com
|
* Font Awesome Pro 5.11.2 by @fontawesome - https://fontawesome.com
|
||||||
* License - https://fontawesome.com/license (Commercial License)
|
* License - https://fontawesome.com/license (Commercial License)
|
||||||
*/@font-face{font-family:"Font Awesome 5 Pro";font-style:normal;font-weight:900;font-display:auto;src:url("fa/fonts/fa-solid-900.eot");src:url("fa/fonts/fa-solid-900.eot?#iefix") format("embedded-opentype"),url("fa/fonts/fa-solid-900.woff2") format("woff2"),url("fa/fonts/fa-solid-900.woff") format("woff"),url("fa/fonts/fa-solid-900.ttf") format("truetype"),url("fa/fonts/fa-solid-900.svg#fontawesome") format("svg")}.fa,.lightbox .lb-cancel,.lightbox .lb-dataContainer .lb-data .lb-closeContainer .lb-close,.lightbox .lb-outerContainer .lb-container .lb-nav a.lb-next,.lightbox .lb-outerContainer .lb-container .lb-nav a.lb-prev,.control-icon,.heightgraph.leaflet-control .heightgraph-close-icon,.leaflet-control.spot-control .heightgraph.leaflet-control .heightgraph-close-icon,.heightgraph.leaflet-control .leaflet-control.spot-control .heightgraph-close-icon,.heightgraph.leaflet-control .heightgraph-toggle .heightgraph-close-icon,.leaflet-control.spot-control .fa,.leaflet-control.spot-control .control-icon,.leaflet-control.spot-control .lightbox .lb-dataContainer .lb-data .lb-closeContainer .lb-close,.lightbox .lb-dataContainer .lb-data .lb-closeContainer .leaflet-control.spot-control .lb-close,.leaflet-control.spot-control .lightbox .lb-cancel,.lightbox .leaflet-control.spot-control .lb-cancel,.leaflet-control.spot-control .heightgraph-toggle-icon,.leaflet-control .heightgraph-toggle .fa,.leaflet-control .heightgraph-toggle .control-icon,.leaflet-control .heightgraph-toggle .lightbox .lb-dataContainer .lb-data .lb-closeContainer .lb-close,.lightbox .lb-dataContainer .lb-data .lb-closeContainer .leaflet-control .heightgraph-toggle .lb-close,.leaflet-control .heightgraph-toggle .lightbox .lb-cancel,.lightbox .leaflet-control .heightgraph-toggle .lb-cancel,.leaflet-control .heightgraph-toggle .heightgraph-toggle-icon,.leaflet-control.spot-control .heightgraph-toggle .lightbox .lb-cancel,.lightbox .leaflet-control.spot-control .heightgraph-toggle .lb-cancel,.leaflet-control.spot-control .lightbox .heightgraph-toggle .lb-cancel,.fas{font-family:"Font Awesome 5 Pro";font-weight:900}.fa,.lightbox .lb-cancel,.lightbox .lb-dataContainer .lb-data .lb-closeContainer .lb-close,.lightbox .lb-outerContainer .lb-container .lb-nav a.lb-next,.lightbox .lb-outerContainer .lb-container .lb-nav a.lb-prev,.control-icon,.heightgraph.leaflet-control .heightgraph-close-icon,.leaflet-control.spot-control .heightgraph.leaflet-control .heightgraph-close-icon,.heightgraph.leaflet-control .leaflet-control.spot-control .heightgraph-close-icon,.heightgraph.leaflet-control .heightgraph-toggle .heightgraph-close-icon,.leaflet-control.spot-control .fa,.leaflet-control.spot-control .control-icon,.leaflet-control.spot-control .lightbox .lb-dataContainer .lb-data .lb-closeContainer .lb-close,.lightbox .lb-dataContainer .lb-data .lb-closeContainer .leaflet-control.spot-control .lb-close,.leaflet-control.spot-control .lightbox .lb-cancel,.lightbox .leaflet-control.spot-control .lb-cancel,.leaflet-control.spot-control .heightgraph-toggle-icon,.leaflet-control .heightgraph-toggle .fa,.leaflet-control .heightgraph-toggle .control-icon,.leaflet-control .heightgraph-toggle .lightbox .lb-dataContainer .lb-data .lb-closeContainer .lb-close,.lightbox .lb-dataContainer .lb-data .lb-closeContainer .leaflet-control .heightgraph-toggle .lb-close,.leaflet-control .heightgraph-toggle .lightbox .lb-cancel,.lightbox .leaflet-control .heightgraph-toggle .lb-cancel,.leaflet-control .heightgraph-toggle .heightgraph-toggle-icon,.leaflet-control.spot-control .heightgraph-toggle .lightbox .lb-cancel,.lightbox .leaflet-control.spot-control .heightgraph-toggle .lb-cancel,.leaflet-control.spot-control .lightbox .heightgraph-toggle .lb-cancel,.fas,.far,.fal,.fad,.fab{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg,.lightbox .lb-dataContainer .lb-data .lb-closeContainer .lb-close{font-size:1.3333333333em;line-height:.75em;vertical-align:-0.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.lightbox .fa-pull-left.lb-cancel,.lightbox .lb-dataContainer .lb-data .lb-closeContainer .fa-pull-left.lb-close,.lightbox .lb-outerContainer .lb-container .lb-nav a.fa-pull-left.lb-next,.lightbox .lb-outerContainer .lb-container .lb-nav a.fa-pull-left.lb-prev,.fa-pull-left.control-icon,.heightgraph.leaflet-coLine truncated
|
*/@font-face{font-family:"Font Awesome 5 Pro";font-style:normal;font-weight:900;font-display:auto;src:url("fa/fonts/fa-solid-900.eot");src:url("fa/fonts/fa-solid-900.eot?#iefix") format("embedded-opentype"),url("fa/fonts/fa-solid-900.woff2") format("woff2"),url("fa/fonts/fa-solid-900.woff") format("woff"),url("fa/fonts/fa-solid-900.ttf") format("truetype"),url("fa/fonts/fa-solid-900.svg#fontawesome") format("svg")}.fa,.lightbox .lb-cancel,.lightbox .lb-dataContainer .lb-data .lb-closeContainer .lb-close,.lightbox .lb-outerContainer .lb-container .lb-nav a.lb-next,.lightbox .lb-outerContainer .lb-container .lb-nav a.lb-prev,.control-icon,.heightgraph.leaflet-control .heightgraph-close-icon,.leaflet-control.spot-control .heightgraph.leaflet-control .heightgraph-close-icon,.heightgraph.leaflet-control .leaflet-control.spot-control .heightgraph-close-icon,.heightgraph.leaflet-control .heightgraph-toggle .heightgraph-close-icon,.leaflet-control.spot-control .fa,.leaflet-control.spot-control .control-icon,.leaflet-control.spot-control .lightbox .lb-dataContainer .lb-data .lb-closeContainer .lb-close,.lightbox .lb-dataContainer .lb-data .lb-closeContainer .leaflet-control.spot-control .lb-close,.leaflet-control.spot-control .lightbox .lb-cancel,.lightbox .leaflet-control.spot-control .lb-cancel,.leaflet-control.spot-control .heightgraph-toggle-icon,.leaflet-control .heightgraph-toggle .fa,.leaflet-control .heightgraph-toggle .control-icon,.leaflet-control .heightgraph-toggle .lightbox .lb-dataContainer .lb-data .lb-closeContainer .lb-close,.lightbox .lb-dataContainer .lb-data .lb-closeContainer .leaflet-control .heightgraph-toggle .lb-close,.leaflet-control .heightgraph-toggle .lightbox .lb-cancel,.lightbox .leaflet-control .heightgraph-toggle .lb-cancel,.leaflet-control .heightgraph-toggle .heightgraph-toggle-icon,.leaflet-control.spot-control .heightgraph-toggle .lightbox .lb-cancel,.lightbox .leaflet-control.spot-control .heightgraph-toggle .lb-cancel,.leaflet-control.spot-control .lightbox .heightgraph-toggle .lb-cancel,.fas{font-family:"Font Awesome 5 Pro";font-weight:900}.fa,.lightbox .lb-cancel,.lightbox .lb-dataContainer .lb-data .lb-closeContainer .lb-close,.lightbox .lb-outerContainer .lb-container .lb-nav a.lb-next,.lightbox .lb-outerContainer .lb-container .lb-nav a.lb-prev,.control-icon,.heightgraph.leaflet-control .heightgraph-close-icon,.leaflet-control.spot-control .heightgraph.leaflet-control .heightgraph-close-icon,.heightgraph.leaflet-control .leaflet-control.spot-control .heightgraph-close-icon,.heightgraph.leaflet-control .heightgraph-toggle .heightgraph-close-icon,.leaflet-control.spot-control .fa,.leaflet-control.spot-control .control-icon,.leaflet-control.spot-control .lightbox .lb-dataContainer .lb-data .lb-closeContainer .lb-close,.lightbox .lb-dataContainer .lb-data .lb-closeContainer .leaflet-control.spot-control .lb-close,.leaflet-control.spot-control .lightbox .lb-cancel,.lightbox .leaflet-control.spot-control .lb-cancel,.leaflet-control.spot-control .heightgraph-toggle-icon,.leaflet-control .heightgraph-toggle .fa,.leaflet-control .heightgraph-toggle .control-icon,.leaflet-control .heightgraph-toggle .lightbox .lb-dataContainer .lb-data .lb-closeContainer .lb-close,.lightbox .lb-dataContainer .lb-data .lb-closeContainer .leaflet-control .heightgraph-toggle .lb-close,.leaflet-control .heightgraph-toggle .lightbox .lb-cancel,.lightbox .leaflet-control .heightgraph-toggle .lb-cancel,.leaflet-control .heightgraph-toggle .heightgraph-toggle-icon,.leaflet-control.spot-control .heightgraph-toggle .lightbox .lb-cancel,.lightbox .leaflet-control.spot-control .heightgraph-toggle .lb-cancel,.leaflet-control.spot-control .lightbox .heightgraph-toggle .lb-cancel,.fas,.far,.fal,.fad,.fab{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg,.lightbox .lb-dataContainer .lb-data .lb-closeContainer .lb-close{font-size:1.3333333333em;line-height:.75em;vertical-align:-0.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.lightbox .fa-pull-left.lb-cancel,.lightbox .lb-dataContainer .lb-data .lb-closeContainer .fa-pull-left.lb-close,.lightbox .lb-outerContainer .lb-container .lb-nav a.fa-pull-left.lb-next,.lightbox .lb-outerContainer .lb-container .lb-nav a.fa-pull-left.lb-prev,.fa-pull-left.control-icon,.heightgraph.leaflet-coLine truncated
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
{"version":3,"sourceRoot":"","sources":["_fonts.scss","_common.scss","fa/solid.scss","fa/_variables.scss","fa/_core.scss","fa/_larger.scss","fa/_fixed-width.scss","fa/_list.scss","fa/_bordered-pulled.scss","fa/_animated.scss","fa/_rotated-flipped.scss","fa/_mixins.scss","fa/_stacked.scss","_fa.scss","lightbox/_lightbox.scss","_lightbox.scss","_simplebar.scss","leaflet/_leaflet.scss","leaflet/_leaflet_heightgraph.scss","_leaflet.scss","_mask_project.scss","_mask_upload.scss","_mask_admin.scss","_mobile.scss"],"names":[],"mappings":"CAGA,WACE,qBACA,kBACA,gBACA,8IACA,iFAGF,WACE,qBACA,kBACA,gBACA,8IACA,yDAGF,WACE,qBACA,kBACA,gBACA,8IACA,0BAGF,WACE,qBACA,kBACA,gBACA,8IACA,0BAGF,WACE,qBACA,kBACA,gBACA,8IACA,2GAGF,WACE,qBACA,kBACA,gBACA,0GACA,yJAGF,WACE,qBACA,kBACA,gBACA,4IACA,iFAGF,WACE,qBACA,kBACA,gBACA,4IACA,yDAGF,WACE,qBACA,kBACA,gBACA,4IACA,0BAGF,WACE,qBACA,kBACA,gBACA,4IACA,0BAGF,WACE,qBACA,kBACA,gBACA,4IACA,2GAGF,WACE,qBACA,kBACA,gBACA,wGACA,yJC9FF,0BACE,iBAEF,uBACE,iBAEF,sBACE,iBAEF,qBACE,iBAEF,kBACE,iBAWF,6IAPC,kBAQoB,8BAPpB,eAOoB,8BANpB,cAMoB,8BALpB,aAKoB,8BAJpB,UAIoB,8BAgBrB,oBACI,GACI,mBAEJ,MACI,qBAEJ,KACI,mBACA,uBAEJ,GACI,yBAEJ,KACI,0BAMR,2BACC,eACA,gCACA,SAGD,SACC,YAGD,OACC,eACA,iBAGD,sBACC,YACA,iBACA,kBAMA,YACC,iBACA,kBACC,UAED,oBACC,aAED,oBACC,YCjGH;AAAA;AAAA;AAAA,GAMA,WACE,iCACA,kBACA,gBACA,aCLqB,KDMrB,qCACA,2RAOF,wmDAEE,iCACA,gBEnBF,4nDAME,kCACA,mCACA,qBACA,kBACA,oBACA,oBACA,cCXF,yEACE,yBACA,kBACA,yBAGF,OACE,gBAGF,OACE,iBAIA,OACE,cADF,OACE,cADF,OACE,cADF,OACE,cADF,OACE,cADF,OACE,cADF,OACE,cADF,OACE,cADF,OACE,cADF,QACE,eClBJ,OACE,kBACA,MHOqB,OIRvB,OACE,qBACA,kBACA,eAEA,4BAGF,OACE,UACA,kBACA,kBACA,MJLqB,IIMrB,oBCbF,WACE,wBACA,mBACA,yBAGF,yBACA,2BAOE,o0CACA,21CCfF,SACE,qCAGF,UACE,uCAGF,mBACE,GACE,uBAGF,KACE,0BCdJ,cCWE,sEACA,wBDXF,eCUE,sEACA,yBDVF,eCSE,sEACA,yBDRF,oBCYE,gFACA,uBDZF,kBCWE,gFACA,uBDXF,mDCUE,gFACA,wBDLA,oIAME,YElBJ,UACE,qBACA,WACA,gBACA,kBACA,sBACA,YAGF,0BAEE,OACA,kBACA,kBACA,WAGF,aACE,oBAGF,aACE,cAGF,YACE,MTpBqB,KUQtB,0kCACC,mBAED,8qCACC,kBAIF,koEACC,eACA,kBACA,iBACA,qBACA,WACA,gBAGA,qjEACC,WAKF,2BACA,uCACA,kCACA,yCACA,mCACA,iCACA,8BACA,mHACA,gCACA,iCACA,iCACA,gCAGA,w6DACA,kCACA,+BACA,6BACA,+BACA,+BACA,urFACA,+BAGA,w0DACA,6BACA,6BACA,6BACA,+BACA,kCACA,4BACA,8BACA,mCACA,mCACA,gHACA,8BACA,kCACA,kCACA,4BAGA,8BACA,olFAGA,0DACA,wmDACA,w+CACA,sGACA,gCAGA,2BC5FA,0BACE,gBAGF,iBACE,kBACA,MACA,OACA,aACA,sBACA,2DACA,WACA,aAGF,UACE,kBACA,OACA,WACA,cACA,kBACA,cACA,mBACA,aAGF,oBACE,cACA,YACA,kBACA,gBACA,kBAGA,sBAGF,gBACE,YAGF,mBACE,kBACA,QACA,YACA,aACA,cACA,kBAIA,sBAGF,yBACE,WACA,cACA,WAGF,WACE,kBACA,QACA,OACA,WACA,WACA,kBACA,cAGF,WACE,cACA,WACA,YACA,cACA,gDAGF,QACE,kBACA,MACA,OACA,YACA,WACA,WAGF,mBACE,OAGF,UACE,aACA,2GAGF,kBACE,YACA,eACA,cAGF,kBACE,UACA,OACA,WACA,sDACA,0DACA,UACA,+BACA,4BACA,0BACA,uBAGF,wBACE,4DACA,UAGF,kBACE,UACA,QACA,YACA,uDACA,0DACA,UACA,+BACA,4BACA,0BACA,uBAGF,wBACE,4DACA,UAGF,kBACE,cACA,gBACA,QACA,WACA,8BACA,+BAGF,wBACE,WACA,cACA,WAGF,SACE,cACA,WAGF,qBACE,UACA,WACA,gBACA,kBAGF,qBACE,eACA,iBACA,gBAGF,uBACE,WAGF,oBACE,cACA,WACA,mBACA,eACA,WAGF,mBACE,cACA,YACA,WACA,YACA,wDACA,iBACA,aACA,2DACA,WACA,+BACA,4BACA,0BACA,uBAGF,yBACE,eACA,4DACA,UCjMF,iBACC,SACA,QACA,aAGD,UACC,aACA,mBACA,uBACA,WACA,YAEA,mBACC,sBAEA,qCACC,WACA,YAGC,0DACC,eAEA,2EACC,kBAIF,iEACC,eAEA,2EACC,iBAML,qBACC,mBAEA,uCACC,YACA,YAGC,iEACC,cACA,eAGD,6EACC,eACA,WAMJ,6BACC,SACA,gBACA,sCAEA,2CACC,gBAEA,qDACC,6BACA,gBACA,YACA,iBACA,iBACA,WAEA,UACC,2FAKF,qDACC,uBAED,gEACC,SACA,yBAIA,0HACC,WACA,qBAEA,wIACC,kBACA,oBAIF,6DA3GH,gBACA,cA4GI,oEACC,SAIF,6DAlHH,gBACA,cAmHI,oEACC,UAOL,4BACC,SACA,UACA,cACA,gBAEA,qCACC,gBACA,aAEA,iDACC,WAEA,kEACC,eAGD,8EACC,aAGD,4DACC,wBAGF,wDACC,WACA,eACA,gBAEA,kEA1JH,gBACA,cA4JI,aACA,YACA,yBACA,kBAMJ,qBAtKA,gBACA,cAwKC,WC5KF,iBACE,kBACA,sBACA,eACA,2BACA,yBACA,uBAGF,mBACE,gBACA,cACA,eACA,kBACA,mBAGF,gBACE,kBACA,kBACA,gBACA,UACA,SACA,OACA,MACA,SACA,QACA,sBACA,uBACA,UAGF,kBACE,6BACA,8BACA,uBACA,kBACA,MACA,OACA,SACA,QACA,UACA,SACA,iCAGF,2BACE,kBACA,iCACA,kBACA,cACA,YACA,WACA,eACA,gBACA,qBACA,wBAGF,2FAEE,QACA,SAGF,mDAEE,YACA,cAGF,uBACE,gBACA,eACA,WACA,oBAGF,wCACE,8BACA,YACA,WACA,cACA,kBACA,WACA,eACA,gBACA,WACA,UACA,SACA,oBACA,kBACA,cACA,aAGF,gCACE,mBACA,cACA,UACA,kBACA,MACA,OACA,aACA,YACA,eACA,cACA,gBACA,oBACA,WAGF,iBACE,UACA,kBACA,QACA,SACA,oBACA,gBAGF,uDACE,oBACA,iBACA,yBAGF,qDACE,mBAGF,qBACE,kBACA,OACA,QACA,gBAGF,4BACE,kBACA,WACA,gBACA,kBACA,SACA,UACA,UACA,8BAGF,8CAEE,WACA,6BAGF,oCACE,MACA,WAGF,gEACE,QACA,WAGF,sCACE,OACA,YAGF,kEACE,YACA,SACA,UAGF,2DACE,WACA,OACA,QACA,WACA,aACA,eACA,WAIF,mEACE,WACA,OAGF,yBACE,cACA,eACA,UACA,kBACA,aACA,YACA,kBACA,kBAGF,0BACE,eACA,OACA,kBACA,kBACA,qBACA,wBC/MF,6LAUC,kBACA,OACA,MAED,mBACC,gBAED,0DAGC,yBACG,sBACK,iBACN,uBAGH,yBACC,uBAGD,8BACC,0CAGD,wCACC,aACA,cACA,6BAED,4CAEC,cAID,2PAMC,0BACA,2BAGD,sCACC,6BACA,yBAED,sCACC,4BAEA,kBACA,wBAED,yDACC,sBACA,kBAED,mBACC,wCAED,qBACC,gDAED,cACC,eACA,kBAED,qBACC,mBAED,kBACC,QACA,SACA,2BACK,sBACL,YAGD,0BACC,sBAGD,0BAEA,+BACA,kCACA,iCACA,iCACA,kCACA,gCAEA,qCACA,kCAEA,mBACC,UACA,WAED,MACC,2BACA,qBACA,kBAMD,iBACC,kBACA,YACA,8BACA,oBAELine truncated
|
{"version":3,"sourceRoot":"","sources":["_fonts.scss","_common.scss","fa/solid.scss","fa/_variables.scss","fa/_core.scss","fa/_larger.scss","fa/_fixed-width.scss","fa/_list.scss","fa/_bordered-pulled.scss","fa/_animated.scss","fa/_rotated-flipped.scss","fa/_mixins.scss","fa/_stacked.scss","_fa.scss","lightbox/_lightbox.scss","_lightbox.scss","_simplebar.scss","leaflet/_leaflet.scss","leaflet/_leaflet_heightgraph.scss","_leaflet.scss","_mask_project.scss","_mask_upload.scss","_mask_admin.scss","_mobile.scss"],"names":[],"mappings":"CAGA,WACE,qBACA,kBACA,gBACA,8IACA,iFAGF,WACE,qBACA,kBACA,gBACA,8IACA,yDAGF,WACE,qBACA,kBACA,gBACA,8IACA,0BAGF,WACE,qBACA,kBACA,gBACA,8IACA,0BAGF,WACE,qBACA,kBACA,gBACA,8IACA,2GAGF,WACE,qBACA,kBACA,gBACA,0GACA,yJAGF,WACE,qBACA,kBACA,gBACA,4IACA,iFAGF,WACE,qBACA,kBACA,gBACA,4IACA,yDAGF,WACE,qBACA,kBACA,gBACA,4IACA,0BAGF,WACE,qBACA,kBACA,gBACA,4IACA,0BAGF,WACE,qBACA,kBACA,gBACA,4IACA,2GAGF,WACE,qBACA,kBACA,gBACA,wGACA,yJC9FF,0BACE,iBAEF,uBACE,iBAEF,sBACE,iBAEF,qBACE,iBAEF,kBACE,iBAWF,6IAPC,kBAQoB,8BAPpB,eAOoB,8BANpB,cAMoB,8BALpB,aAKoB,8BAJpB,UAIoB,8BAgBrB,oBACI,GACI,mBAEJ,MACI,qBAEJ,KACI,mBACA,uBAEJ,GACI,yBAEJ,KACI,0BAMR,2BACC,eACA,gCACA,SAGD,SACC,YAGD,OACC,eACA,iBAGD,sBACC,YACA,iBACA,kBAMA,YACC,iBACA,kBACC,UAED,oBACC,aAED,oBACC,YCjGH;AAAA;AAAA;AAAA,GAMA,WACE,iCACA,kBACA,gBACA,aCLqB,KDMrB,qCACA,2RAOF,wmDAEE,iCACA,gBEnBF,4nDAME,kCACA,mCACA,qBACA,kBACA,oBACA,oBACA,cCXF,yEACE,yBACA,kBACA,yBAGF,OACE,gBAGF,OACE,iBAIA,OACE,cADF,OACE,cADF,OACE,cADF,OACE,cADF,OACE,cADF,OACE,cADF,OACE,cADF,OACE,cADF,OACE,cADF,QACE,eClBJ,OACE,kBACA,MHOqB,OIRvB,OACE,qBACA,kBACA,eAEA,4BAGF,OACE,UACA,kBACA,kBACA,MJLqB,IIMrB,oBCbF,WACE,wBACA,mBACA,yBAGF,yBACA,2BAOE,o0CACA,21CCfF,SACE,qCAGF,UACE,uCAGF,mBACE,GACE,uBAGF,KACE,0BCdJ,cCWE,sEACA,wBDXF,eCUE,sEACA,yBDVF,eCSE,sEACA,yBDRF,oBCYE,gFACA,uBDZF,kBCWE,gFACA,uBDXF,mDCUE,gFACA,wBDLA,oIAME,YElBJ,UACE,qBACA,WACA,gBACA,kBACA,sBACA,YAGF,0BAEE,OACA,kBACA,kBACA,WAGF,aACE,oBAGF,aACE,cAGF,YACE,MTpBqB,KUQtB,0kCACC,mBAED,8qCACC,kBAIF,koEACC,eACA,kBACA,iBACA,qBACA,WACA,gBAGA,qjEACC,WAKF,2BACA,uCACA,kCACA,yCACA,mCACA,iCACA,8BACA,mHACA,gCACA,iCACA,iCACA,gCAGA,w6DACA,kCACA,+BACA,6BACA,+BACA,+BACA,urFACA,+BAGA,w0DACA,6BACA,6BACA,6BACA,+BACA,kCACA,4BACA,8BACA,mCACA,mCACA,gHACA,8BACA,kCACA,kCACA,4BAGA,8BACA,olFAGA,0DACA,wmDACA,w+CACA,sGACA,gCAGA,2BC5FA,0BACE,gBAGF,iBACE,kBACA,MACA,OACA,aACA,sBACA,2DACA,WACA,aAGF,UACE,kBACA,OACA,WACA,cACA,kBACA,cACA,mBACA,aAGF,oBACE,cACA,YACA,kBACA,gBACA,kBAGA,sBAGF,gBACE,YAGF,mBACE,kBACA,QACA,YACA,aACA,cACA,kBAIA,sBAGF,yBACE,WACA,cACA,WAGF,WACE,kBACA,QACA,OACA,WACA,WACA,kBACA,cAGF,WACE,cACA,WACA,YACA,cACA,gDAGF,QACE,kBACA,MACA,OACA,YACA,WACA,WAGF,mBACE,OAGF,UACE,aACA,2GAGF,kBACE,YACA,eACA,cAGF,kBACE,UACA,OACA,WACA,sDACA,0DACA,UACA,+BACA,4BACA,0BACA,uBAGF,wBACE,4DACA,UAGF,kBACE,UACA,QACA,YACA,uDACA,0DACA,UACA,+BACA,4BACA,0BACA,uBAGF,wBACE,4DACA,UAGF,kBACE,cACA,gBACA,QACA,WACA,8BACA,+BAGF,wBACE,WACA,cACA,WAGF,SACE,cACA,WAGF,qBACE,UACA,WACA,gBACA,kBAGF,qBACE,eACA,iBACA,gBAGF,uBACE,WAGF,oBACE,cACA,WACA,mBACA,eACA,WAGF,mBACE,cACA,YACA,WACA,YACA,wDACA,iBACA,aACA,2DACA,WACA,+BACA,4BACA,0BACA,uBAGF,yBACE,eACA,4DACA,UCjMF,iBACC,SACA,QACA,aAGD,UACC,aACA,mBACA,uBACA,WACA,YAEA,mBACC,sBAEA,qCACC,WACA,YAGC,0DACC,eAEA,2EACC,kBAIF,iEACC,eAEA,2EACC,iBAML,qBACC,mBAEA,uCACC,YACA,YAGC,iEACC,cACA,eAGD,6EACC,eACA,WAMJ,6BACC,SACA,gBACA,sCAEA,2CACC,gBAEA,qDACC,6BACA,gBACA,YACA,iBACA,iBACA,WAEA,UACC,2FAKF,qDACC,uBAED,gEACC,SACA,yBAIA,0HACC,WACA,qBAEA,wIACC,kBACA,oBAIF,6DA3GH,gBACA,cA4GI,oEACC,SAIF,6DAlHH,gBACA,cAmHI,oEACC,UAOL,4BACC,SACA,UACA,cACA,gBAEA,qCACC,gBACA,aAEA,iDACC,WAEA,kEACC,eAGD,8EACC,aAGD,4DACC,wBAGF,wDACC,WACA,eACA,gBAEA,kEA1JH,gBACA,cA4JI,aACA,YACA,yBACA,kBAMJ,qBAtKA,gBACA,cAwKC,WC5KF,iBACE,kBACA,sBACA,eACA,2BACA,yBACA,uBAGF,mBACE,gBACA,cACA,eACA,kBACA,mBAGF,gBACE,kBACA,kBACA,gBACA,UACA,SACA,OACA,MACA,SACA,QACA,sBACA,uBACA,UAGF,kBACE,6BACA,8BACA,uBACA,kBACA,MACA,OACA,SACA,QACA,UACA,SACA,iCAGF,2BACE,kBACA,iCACA,kBACA,cACA,YACA,WACA,eACA,gBACA,qBACA,wBAGF,2FAEE,QACA,SAGF,mDAEE,YACA,cAGF,uBACE,gBACA,eACA,WACA,oBAGF,wCACE,8BACA,YACA,WACA,cACA,kBACA,WACA,eACA,gBACA,WACA,UACA,SACA,oBACA,kBACA,cACA,aAGF,gCACE,mBACA,cACA,UACA,kBACA,MACA,OACA,aACA,YACA,eACA,cACA,gBACA,oBACA,WAGF,iBACE,UACA,kBACA,QACA,SACA,oBACA,gBAGF,uDACE,oBACA,iBACA,yBAGF,qDACE,mBAGF,qBACE,kBACA,OACA,QACA,gBAGF,4BACE,kBACA,WACA,gBACA,kBACA,SACA,UACA,UACA,8BAGF,8CAEE,WACA,6BAGF,oCACE,MACA,WAGF,gEACE,QACA,WAGF,sCACE,OACA,YAGF,kEACE,YACA,SACA,UAGF,2DACE,WACA,OACA,QACA,WACA,aACA,eACA,WAIF,mEACE,WACA,OAGF,yBACE,cACA,eACA,UACA,kBACA,aACA,YACA,kBACA,kBAGF,0BACE,eACA,OACA,kBACA,kBACA,qBACA,wBC/MF,6LAUC,kBACA,OACA,MAED,mBACC,gBAED,0DAGC,yBACG,sBACK,iBACN,uBAGH,yBACC,uBAGD,8BACC,0CAGD,wCACC,aACA,cACA,6BAED,4CAEC,cAID,2PAMC,0BACA,2BAGD,sCACC,6BACA,yBAED,sCACC,4BAEA,kBACA,wBAED,yDACC,sBACA,kBAED,mBACC,wCAED,qBACC,gDAED,cACC,eACA,kBAED,qBACC,mBAED,kBACC,QACA,SACA,2BACK,sBACL,YAGD,0BACC,sBAGD,0BAEA,+BACA,kCACA,iCACA,iCACA,kCACA,gCAEA,qCACA,kCAEA,mBACC,UACA,WAED,MACC,2BACA,qBACA,kBAMD,iBACC,kBACA,YACA,8BACA,oBAELine truncated
|
||||||
Reference in new issue
Block a user