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     // set ajax settings for loader
 53     loader.opts.jsonp = 'jsoncallback';
 54     
 55     /**
 56      * Preload function for Flickr feeds
 57      * @name TimeMap.loaders.flickr#preload
 58      * @function
 59      * @parameter {Object} data     Data to preload
 60      * @return {Array} data         Array of item data
 61      */
 62     loader.preload = function(data) {
 63         return data.items;
 64     };
 65     
 66     /**
 67      * Transform function for Flickr feeds
 68      * @name TimeMap.loaders.flickr#transform
 69      * @function
 70      * @parameter {Object} data     Data to transform
 71      * @return {Object} data        Transformed data for one item
 72      */
 73     loader.transform = function(data) {
 74         var item = {
 75             title: data.title,
 76             start: data.date_taken,
 77             point: {
 78                 lat: data.latitude,
 79                 lon: data.longitude
 80             },
 81             options: {
 82                 description: data.description
 83                     .replace(/>/g, ">")
 84                     .replace(/</g, "<")
 85                     .replace(/"/g, '"')
 86             }
 87         };
 88         if (options.transformFunction) {
 89             item = options.transformFunction(item);
 90         }
 91         return item;
 92     };
 93 
 94     return loader;
 95 };
 96