GarminActivityFilter.js
Summary
This file contains a number of filters used to filter an array of Garmin.Activity.
Version: 1.0
Author: Bobby Yang bobby.yang.at.garmin.com
if (Garmin == undefined) var Garmin = {};
Garmin.BasicActivityFilter = function(userFilterLogic){};
Garmin.BasicActivityFilter = Class.create();
Garmin.BasicActivityFilter.prototype = {
initialize: function(userFilterLogic) {
this.activities = null;
this.filterQueue = null;
this.userFilterLogic = userFilterLogic;
},
run: function(activities, filterQueue) {
this.activities = activities;
if (filterQueue != null) {
if (filterQueue instanceof String) {
if (window[filterQueue] == null || !(window[filterQueue] instanceof Array)) {
window[filterQueue] = new Array();
}
this.filterQueue = window[filterQueue];
} else if (filterQueue instanceof Array) {
this.filterQueue = filterQueue;
}
}
if (this.filterQueue != null) {
this.filterQueue.push(this);
}
this._wait();
},
_wait: function() {
if (garminFilterQueue != null
&& garminFilterQueue.length > 0
&& garminFilterQueue[0] != this) {
setTimeout(function(){this._wait();}.bind(this), 500);
} else {
this._process();
}
},
_process: function() {
this.userFilterLogic(this.activities);
this._finish();
},
_finish: function() {
if (this.filterQueue != null) {
for (var i = 0; i < this.filterQueue.length; i++) {
if (this.filterQueue[i] == this) {
this.filterQueue.splice(i, 1);
break;
}
}
}
}
};
Garmin.AjaxActivityFilter = function(preAjaxFilterLogic, postAjaxFilterLogic, ajaxURL, ajaxOptions){};
Garmin.AjaxActivityFilter = Class.create();
Garmin.AjaxActivityFilter.prototype = Object.extend(new Garmin.BasicActivityFilter(), {
initialize: function(preAjaxFilterLogic, postAjaxFilterLogic, ajaxURL, ajaxOptions) {
this.activities = null;
this.ajaxRequest = null;
this.filterQueue = null;
this.preAjaxFilterLogic = preAjaxFilterLogic;
this.postAjaxFilterLogic = postAjaxFilterLogic;
this.ajaxURL = ajaxURL;
this.ajaxOptions = ajaxOptions;
},
_process: function() {
if (this.preAjaxFilterLogic != null) {
this.preAjaxFilterLogic(this.activities, this.ajaxOptions);
}
this.userAjaxComplete = this.ajaxOptions.onComplete;
this.userAjaxException = this.ajaxOptions.onException;
this.userAjaxFailure = this.ajaxOptions.onFailure;
this.userAjaxSuccess = this.ajaxOptions.onSuccess;
this.ajaxOptions.onComplete = this.onAjaxComplete.bind(this);
this.ajaxOptions.onException = this.onAjaxException.bind(this);
this.ajaxOptions.onFailure = this.onAjaxFailure.bind(this);
this.ajaxOptions.onSuccess = this.onAjaxSuccess.bind(this);
this.ajaxRequest = new Ajax.Request(this.ajaxURL, this.ajaxOptions);
},
onAjaxComplete: function(transport) {
if (this.userAjaxComplete != null) {
this.userAjaxComplete(transport);
}
this._finish();
},
onAjaxException: function(request, exception) {
if (this.userAjaxException != null) {
this.userAjaxException(transport);
}
this._finish();
},
onAjaxFailure: function(transport) {
if (this.userAjaxFailure != null) {
this.userAjaxFailure(transport);
}
},
onAjaxSuccess: function(transport) {
if (this.userAjaxSuccess != null) {
this.userAjaxSuccess(transport);
}
if (this.postAjaxFilterLogic != null) {
this.postAjaxFilterLogic(this.activities, transport.responseText, transport.responseXML);
}
}
});
Garmin.FilterCode = {
filterForRoute: function(activities) {
Garmin.FilterCode.filterForSeriesType(activities, [Garmin.Series.TYPES.route]);
},
filterForRouteAndHistory: function(activities) {
Garmin.FilterCode.filterForSeriesType(activities, [Garmin.Series.TYPES.history, Garmin.Series.TYPES.route]);
},
filterForHistory: function(activities) {
Garmin.FilterCode.filterForSeriesType(activities, [Garmin.Series.TYPES.history]);
},
filterForWaypoint: function(activities) {
Garmin.FilterCode.filterForSeriesType(activities, [Garmin.Series.TYPES.waypoint]);
},
filterForSeriesType: function(activities, seriesTypes) {
for (var i = activities.length; i > 0; i--) {
var series = activities[i-1].getSeries();
if (series.length > 0) {
var match = false;
for (var j = 0; j < series.length; j++) {
for (var k = 0; k < seriesTypes.length; k++) {
if (series[j].getSeriesType() == seriesTypes[k]) {
match = true;
break;
}
}
}
if (!match) {
activities.splice(i-1, 1);
}
}
}
}
};
Garmin.FILTERS = {
historyOnly: new Garmin.BasicActivityFilter(Garmin.FilterCode.filterForHistory),
routeOnly: new Garmin.BasicActivityFilter(Garmin.FilterCode.filterForRoute),
waypointOnly: new Garmin.BasicActivityFilter(Garmin.FilterCode.filterForWaypoint),
routeAndHistoryOnly: new Garmin.BasicActivityFilter(Garmin.FilterCode.filterForRouteAndHistory)
};
Documentation generated by
JSDoc on Wed Feb 27 11:54:53 2008