1 /* 
  2  * Timemap.js Copyright 2010 Nick Rabinowitz.
  3  * Licensed under the MIT License (see LICENSE.txt)
  4  */
  5 
  6 /**
  7  * @fileOverview
  8  * Flickr Loader
  9  *
 10  * @author Nick Rabinowitz (www.nickrabinowitz.com)
 11  */
 12  
 13 // for JSLint
 14 /*global TimeMap */
 15 
 16 /**
 17  * @class
 18  * Flickr loader: Load JSONP data from Flickr. 
 19  *
 20  * <p>This is a loader for Flickr data. You probably want to use it with a
 21  * URL for the Flickr Geo Feed API: <a href="http://www.flickr.com/services/feeds/geo/">http://www.flickr.com/services/feeds/geo/</a></p>
 22  *
 23  * <p>The loader takes a full URL, minus the JSONP callback function.</p>
 24  *
 25  * @augments TimeMap.loaders.jsonp
 26  * @requires loaders/json.js
 27  *
 28  * @example
 29 TimeMap.init({
 30     datasets: [
 31         {
 32             title: "Flickr Dataset",
 33             type: "flickr",
 34             options: {
 35                 // This is just the latest geotagged photo stream - try adding
 36                 // an "id" or "tag" or "photoset" parameter to get what you want
 37                 url: "http://www.flickr.com/services/feeds/geo/?format=json&jsoncallback="
 38             }
 39         }
 40     ],
 41     // etc...
 42 });
 43  * @see <a href="../../examples/pathlines.html">Flickr Pathlines Example</a>
 44  *
 45  * @param {Object} options          All options for the loader
 46  * @param {String} options.url          Full JSONP url of Flickr feed to load
 47  * @param {mixed} [options[...]]        Other options (see {@link TimeMap.loaders.jsonp})
 48  */
 49 TimeMap.loaders.flickr = function(options) {
 50     var loader = new TimeMap.loaders.jsonp(options);
 51     
 52     /**
 53      * Preload function for Flickr feeds
 54      * @name TimeMap.loaders.flickr#preload
 55      * @function
 56      * @parameter {Object} data     Data to preload
 57      * @return {Array} data         Array of item data
 58      */
 59     loader.preload = function(data) {
 60         return data["items"];
 61     };
 62     
 63     /**
 64      * Transform function for Flickr feeds
 65      * @name TimeMap.loaders.flickr#transform
 66      * @function
 67      * @parameter {Object} data     Data to transform
 68      * @return {Object} data        Transformed data for one item
 69      */
 70     loader.transform = function(data) {
 71         var item = {
 72             title: data.title,
 73             start: data.date_taken,
 74             point: {
 75                 lat: data.latitude,
 76                 lon: data.longitude
 77             },
 78             options: {
 79                 description: data.description
 80                     .replace(/>/g, ">")
 81                     .replace(/</g, "<")
 82                     .replace(/"/g, '"')
 83             }
 84         };
 85         if (options.transformFunction) {
 86             item = options.transformFunction(item);
 87         }
 88         return item;
 89     };
 90 
 91     return loader;
 92 };
 93