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