Support update of all items
This commit is contained in:
124
gaia/tracks.js
124
gaia/tracks.js
@@ -1,7 +1,7 @@
|
||||
// ==UserScript==
|
||||
// @name GaiaGps Track Colors Mass Updater
|
||||
// @description Add missing feature: Mass update of GaiaGps Track Colors
|
||||
// @version 1.0
|
||||
// @version 1.1
|
||||
// @grant none
|
||||
// @match https://www.gaiagps.com/datasummary/tracks/
|
||||
// @require https://ajax.googleapis.com/ajax/libs/jquery/3.5.0/jquery.min.js
|
||||
@@ -72,7 +72,7 @@ function wait(fIsFinished, fAction) {
|
||||
console.log('waiting for page to load');
|
||||
if(typeof oWaitTimer != "undefined") clearTimeout(oWaitTimer);
|
||||
if(fIsFinished()) fAction();
|
||||
else oWaitTimer = setTimeout(function(){wait(fIsFinished, fAction);}, 100);
|
||||
else { oWaitTimer = setTimeout(function(){wait(fIsFinished, fAction);}, 100); }
|
||||
}
|
||||
|
||||
function update(bWaited) {
|
||||
@@ -93,25 +93,36 @@ function update(bWaited) {
|
||||
var $Row = $(elem);
|
||||
var sTrackId = $Row.find('.col1 a.ng-binding').attr('href').split('/')[3];
|
||||
|
||||
if(!asTracks[sTrackId].post) {
|
||||
$.get({url:'https://www.gaiagps.com/api/objects/track/'+sTrackId+'/', id:sTrackId}).done(function(asTrack) {
|
||||
asTracks[this.id].post = asTrack;
|
||||
refreshRow($Row, this.id);
|
||||
setTrackInfo(sTrackId, function(oData){refreshRow(oData.row, oData.track.id);}, {row:$Row});
|
||||
});
|
||||
}
|
||||
else refreshRow($Row, sTrackId);
|
||||
|
||||
function setTrackInfo(sTrackId, fOnDone, oVars) {
|
||||
oVars = oVars || {};
|
||||
if(!asTracks[sTrackId].post) {
|
||||
$.get({url:'https://www.gaiagps.com/api/objects/track/'+sTrackId+'/', id:sTrackId})
|
||||
.done(function(asTrack) {
|
||||
asTracks[this.id].post = asTrack;
|
||||
oVars.track = asTracks[this.id];
|
||||
fOnDone(oVars);
|
||||
})
|
||||
.fail(function(){
|
||||
setTrackInfo(sTrackId, fOnDone, oVars);
|
||||
});
|
||||
}
|
||||
else {
|
||||
oVars.track = asTracks[sTrackId];
|
||||
fOnDone(oVars);
|
||||
}
|
||||
}
|
||||
|
||||
function refreshRow($Row, sTrackId) {
|
||||
|
||||
//Color
|
||||
var sColor = asTracks[sTrackId].post.features[0].properties.hexcolor;
|
||||
if(!sColor) sColor = 'rgb(0,0,0)';
|
||||
|
||||
//Add Color
|
||||
if(!$Row.find('.ngCell.col0-1.colt0-1').length) {
|
||||
|
||||
//Move Col1
|
||||
$Row.find('.colt1').width(iCol1Width - iColorColWidth);
|
||||
$Row.find('.col1').width(iCol1Width - iColorColWidth).css('left', (iCol1Left + iColorColWidth)+'px');
|
||||
@@ -119,7 +130,7 @@ function refreshRow($Row, sTrackId) {
|
||||
$Row.find('.ngCell.col0.colt0').after(
|
||||
$('<div>', {'class':'ngCell col0-1 colt0-1', 'style':'cursor: pointer; width:'+iColorColWidth+'px; left:'+iColorColLeft+'px;'})
|
||||
.data('color', sColor)
|
||||
.data('track-id', this.id)
|
||||
.data('track-id', sTrackId)
|
||||
.append($('<div>', {'class':'ngVerticalBar ngVerticalBarVisible', 'style':'height: '+iColorColHeight+'px;'}))
|
||||
.append($('<div>')
|
||||
.append($('<div>', {'style':'ngSelectionCell'})
|
||||
@@ -143,7 +154,7 @@ function refreshRow($Row, sTrackId) {
|
||||
}
|
||||
|
||||
function toggleSelector(bShow, $Track){
|
||||
bShow = bShow || !$Selector.is(':visible');
|
||||
bShow = (bShow == null)?(!$Selector.is(':visible')):bShow;
|
||||
$Selector.add($Background).toggle(bShow);
|
||||
if(bShow) {
|
||||
$Selector
|
||||
@@ -158,54 +169,97 @@ function toggleSelector(bShow, $Track){
|
||||
return bShow;
|
||||
}
|
||||
|
||||
function getTrackDOm(sTrackId) {
|
||||
var $Link = $('a[href="/datasummary/track/'+sTrackId+'/"]');
|
||||
return ($Link.length == 0)?null:$Link.parents('.ngRow').find('.ngCell.col0-1');
|
||||
}
|
||||
|
||||
function setColor(){
|
||||
var sColor = $(this).attr('data-value');
|
||||
|
||||
//List of tracks to change (selected checkboxes or just the one)
|
||||
var a$Tracks = [];
|
||||
if($Selector.data('track').data('track-id') == 'mass') a$Tracks = $('.ngGrid .ngViewport .ngRow .ngCell.col0 .ngSelectionCheckbox:checked').parents('.ngRow').find('.ngCell.col0-1').toArray();
|
||||
else a$Tracks.push($Selector.data('track'));
|
||||
a$Tracks = [];
|
||||
if($Selector.data('track').data('track-id') == 'mass') {
|
||||
if($('[ng-show="selectAllFromAllPages"]').is(':visible')) {
|
||||
for(i in asTracks) {
|
||||
var $Row = getTrackDOm(asTracks[i].id);
|
||||
if(!$Row) {
|
||||
$Row = $('<div>')
|
||||
.data('track-id', asTracks[i].id)
|
||||
.append($('<div>', {'class':'track-color'}));
|
||||
}
|
||||
|
||||
$.each(a$Tracks, function(iKey, oTrack){
|
||||
var $Track = $(oTrack);
|
||||
a$Tracks.push($Row);
|
||||
}
|
||||
}
|
||||
else { a$Tracks = $('.ngGrid .ngViewport .ngRow .ngCell.col0 .ngSelectionCheckbox:checked').parents('.ngRow').find('.ngCell.col0-1').toArray(); }
|
||||
}
|
||||
else { a$Tracks.push($Selector.data('track')); }
|
||||
|
||||
console.log('nb of tracks to modify: '+a$Tracks.length);
|
||||
|
||||
setTrackColor(sColor, 0);
|
||||
}
|
||||
|
||||
function setTrackColor(sColor, iIndex) {
|
||||
var $Track = $(a$Tracks[iIndex]);
|
||||
|
||||
//Ajax Loader
|
||||
$Track.find('.track-color').css('animation', 'rainbow 1s infinite');
|
||||
|
||||
var sTrackId = $Track.data('track-id');
|
||||
|
||||
asTracks[sTrackId].post.features[0].properties.color = sColor;
|
||||
asTracks[sTrackId].post.features[0].properties.hexcolor = sColor;
|
||||
setTrackInfo(
|
||||
sTrackId,
|
||||
function(oData){
|
||||
asTracks[oData.track.id].post.features[0].properties.color = oData.color;
|
||||
asTracks[oData.track.id].post.features[0].properties.hexcolor = oData.color;
|
||||
|
||||
var asPost = {
|
||||
type: asTracks[sTrackId].post.features[0].type,
|
||||
properties: asTracks[sTrackId].post.features[0].properties,
|
||||
geometry: asTracks[sTrackId].post.features[0].geometry,
|
||||
type: asTracks[oData.track.id].post.features[0].type,
|
||||
properties: asTracks[oData.track.id].post.features[0].properties,
|
||||
geometry: asTracks[oData.track.id].post.features[0].geometry,
|
||||
};
|
||||
|
||||
asPost.properties.localId = sTrackId;
|
||||
asPost.properties.localId = oData.track.id;
|
||||
|
||||
$.ajax({
|
||||
url: 'https://www.gaiagps.com/api/objects/track/'+sTrackId+'/',
|
||||
url: 'https://www.gaiagps.com/api/objects/track/'+oData.track.id+'/',
|
||||
type: 'PUT',
|
||||
contentType: 'application/json',
|
||||
data: JSON.stringify(asPost)
|
||||
data: JSON.stringify(asPost),
|
||||
id: oData.track.id
|
||||
})
|
||||
.done(function(asResult){
|
||||
$.ajax({url:'https://www.gaiagps.com/api/objects/track/'+sTrackId+'/'}).done(function(asTrack){
|
||||
asTracks[sTrackId].post = asTrack;
|
||||
$Track.find('.track-color').css({'background': asTrack.features[0].properties.hexcolor, 'animation':'none'});
|
||||
toggleSelector(false);
|
||||
});
|
||||
.done(function(){
|
||||
setTrackInfo(
|
||||
this.id,
|
||||
function(oData) {
|
||||
iIndex++;
|
||||
$('[ng-show="selectAllFromAllPages"]:visible').text(iIndex+'/'+a$Tracks.length);
|
||||
var $Track = getTrackDOm(oData.track.id);
|
||||
if($Track) {
|
||||
$Track.find('.track-color').css({'background': oData.color, 'animation':'none'});
|
||||
toggleSelector(false, $Track);
|
||||
}
|
||||
if(iIndex < a$Tracks.length) setTrackColor(oData.color, iIndex);
|
||||
},
|
||||
{color:oData.color, force_update:true}
|
||||
);
|
||||
})
|
||||
.fail(()=>{
|
||||
$Track.find('.track-color').css({'animation':'none'});
|
||||
});
|
||||
var $Track = getTrackDOm(oData.track.id);
|
||||
if($Track) $Track.find('.track-color').css({'animation':'none'});
|
||||
setTrackColor(oData.color, iIndex);
|
||||
});
|
||||
},
|
||||
{color:sColor}
|
||||
);
|
||||
}
|
||||
|
||||
var iColorColWidth = 50, iColorColHeight = 59;
|
||||
|
||||
//Tracks
|
||||
asTracks = {};
|
||||
$.ajax({url:'https://www.gaiagps.com/api/objects/track/?routepoints=false&show_archived=true&show_filed=true'}).done((asData) => {
|
||||
for(var i in asData) asTracks[asData[i].id] = asData[i];
|
||||
$.ajax({url:'https://www.gaiagps.com/api/objects/track/?routepoints=false&show_archived=false&show_filed=true'}).done((asData) => {
|
||||
for(var i in asData) { asTracks[asData[i].id] = asData[i]; }
|
||||
wait(function(){return ($('.ngViewport .ngRow').length > 0);}, init);
|
||||
});
|
||||
|
||||
@@ -591,11 +591,11 @@ class Gaia {
|
||||
//Waypoints
|
||||
for(var w in oGPX.waypoints) {
|
||||
oGPX.waypoints[w].filename = sFileName;
|
||||
var sWaypointName = oGPX.waypoints[w].name;
|
||||
/*var sWaypointName = oGPX.waypoints[w].name;
|
||||
if(sWaypointName.indexOf('Milestone - ') != -1 && sWaypointName.substr(-2) != '00') { //1 milestone every 100 miles
|
||||
this.feedback('info', 'Ignoring milestone waypoint "'+sWaypointName+'"');
|
||||
}
|
||||
else this.aoWaypoints.push(oGPX.waypoints[w]);
|
||||
else */this.aoWaypoints.push(oGPX.waypoints[w]);
|
||||
}
|
||||
|
||||
//Tracks
|
||||
@@ -648,11 +648,30 @@ class Gaia {
|
||||
let aoTrack = this.aoTracks[iIndex];
|
||||
this.feedback('info', 'Uploading track "'+aoTrack.name+'"');
|
||||
|
||||
//Set color
|
||||
//Set color: Convert Garmin Colors
|
||||
let sColor = '#4ABD32';
|
||||
switch(aoTrack.color) {
|
||||
case 'DarkBlue': sColor = '#2D3FC7'; break;
|
||||
case 'Magenta': sColor = '#B60DC3'; break;
|
||||
case 'DarkBlue': sColor = '#2D3FC7'; break; //Personal Color
|
||||
case 'Magenta': sColor = '#B60DC3'; break; //Personal Color
|
||||
|
||||
//Garmin Colors
|
||||
case 'Black': sColor = '#000000'; break;
|
||||
case 'DarkRed': sColor = '#F90553'; break;
|
||||
case 'DarkGreen': sColor = '#009B89'; break;
|
||||
case 'DarkYellow': sColor = '#DCEE0E'; break;
|
||||
//case 'DarkBlue': sColor = '#5E23CA'; break;
|
||||
case 'DarkMagenta': sColor = '#B60DC3'; break;
|
||||
case 'DarkCyan': sColor = '#00ACF8'; break;
|
||||
case 'LightGray': sColor = '#A4A4A4'; break;
|
||||
case 'DarkGray': sColor = '#577B8E'; break;
|
||||
case 'Red': sColor = '#F90553'; break;
|
||||
case 'Green': sColor = '#36C03B'; break;
|
||||
case 'Yellow': sColor = '#FFF011'; break;
|
||||
case 'Blue': sColor = '#2D3FC7'; break;
|
||||
//case 'Magenta': sColor = '#B60DC3'; break;
|
||||
case 'Cyan': sColor = '#00C3DD'; break;
|
||||
case 'White': sColor = '#FFFFFF'; break;
|
||||
case 'Transparent': sColor = '#784D3E'; break;
|
||||
}
|
||||
|
||||
//Add track points
|
||||
|
||||
Reference in New Issue
Block a user