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