123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 |
- /*!
- * Yox Flickr plugin
- * http://yoxigen.com/yoxview/
- *
- * Copyright (c) 2010 Yossi Kolesnicov
- *
- * Licensed under the MIT license.
- * http://www.opensource.org/licenses/mit-license.php
- *
- * Date: 17th July, 2010
- * Version : 1.6
- */
- function yox_flickr()
- {
- var $ = jQuery,
- flickrUrl = "http://www.flickr.com/",
- flickrApiUrl = "http://api.flickr.com/services/rest/",
- yoxviewFlickrApikey = "cd6c91f9721f34ead20e6ebe03dd5871",
- flickrUserIdRegex = /\d+@N\d+/,
- flickrUrlRegex = /http:\/\/(?:www\.)?flickr\.com\/(\w+)\/(?:([^\/]+)\/(?:(\w+)\/?(?:([^\/]+)\/?)?)?)?(?:\?(.*))?/,
- self = this,
- fixedOptions = {
- api_key: yoxviewFlickrApikey,
- format: 'json'
- };
-
- this.getImagesData = function(options, callback)
- {
- var defaults = {
- imageSize: "medium", // medium/large/original, for large, your images in Flickr must be 1280 in width or more. For original, you must allow originals to be downloaded
- thumbsize: "smallSquare",
- setThumbnail: true,
- setSinglePhotosetThumbnails: true,
- setTitle: true,
- method: 'flickr.photosets.getList',
- extras: 'description'
- };
-
- var requireLookup = true;
- var lookupData = {
- method: "flickr.urls.lookupUser",
- onData: function(data)
- {
- return {
- user_id: data.user.id,
- username: data.user.username._content
- };
- }
- };
-
- var fromDataUrl = {};
-
- if (options.dataUrl)
- {
- var urlMatch = options.dataUrl.match(flickrUrlRegex);
- var queryData;
- if (urlMatch[5])
- {
- queryData = Yox.queryToJson(urlMatch[5]);
- $.extend(fromDataUrl, queryData);
- }
- if (urlMatch && urlMatch.length > 1)
- {
- if (urlMatch[1] == "search")
- {
- fromDataUrl.method = "flickr.photos.search";
- fromDataUrl.text = queryData.q;
- if (queryData.w)
- {
- queryData.w = queryData.w.replace("%40", "@");
- if (queryData.w.match(flickrUserIdRegex))
- fromDataUrl.user_id = queryData.w;
- }
- if (!queryData || !queryData.sort)
- fromDataUrl.sort = "relevance";
-
- requireLookup = false;
- }
- else
- {
- switch(urlMatch[3])
- {
- case undefined:
- fromDataUrl.method = "flickr.people.getPublicPhotos";
- break;
- case "sets":
- $.extend(fromDataUrl, {
- method: urlMatch[4] || options.dataSourceOptions.photoset_id ? "flickr.photosets.getPhotos" : "flickr.photosets.getList",
- photoset_id: urlMatch[4]
- });
- break;
- case "galleries":
- $.extend(fromDataUrl, {
- method: urlMatch[4] ? "flickr.galleries.getPhotos" : "flickr.galleries.getList",
- gallery_id: urlMatch[4]
- });
- if (urlMatch[4])
- {
- requireLookup = true;
- lookupData = {
- method: "flickr.urls.lookupGallery",
- onData: function(data)
- {
- return {
- gallery_id: data.gallery.id,
- title: data.gallery.title
- };
- }
- };
- }
- break;
- case "collections":
- $.extend(fromDataUrl, {
- method: "flickr.collections.getTree",
- collection_id: urlMatch[4]
- });
- break;
- default:
- fromDataUrl.method = "flickr.photos.search";
- break;
- }
- $.extend(fromDataUrl, {
- username: urlMatch[2],
- type: urlMatch[3]
- });
- }
- }
- }
-
- var datasourceOptions = jQuery.extend({}, defaults, fromDataUrl, options.dataSourceOptions, fixedOptions);
-
- datasourceOptions.media = "photos";
- if (datasourceOptions.user && datasourceOptions.photoset_id)
- datasourceOptions.method = "flickr.photosets.getPhotos";
-
- var screenSize = screen.width > screen.height ? screen.width : screen.height;
-
- // Save resources for smaller screens:
- if (!datasourceOptions.imageSize || (screenSize.width <= 800 && datasourceOptions.imageSize != "medium"))
- datasourceOptions.imageSize = "medium";
-
- if (requireLookup)
- {
- $.jsonp({
- url: flickrApiUrl,
- async: false,
- dataType: 'jsonp',
- data: $.extend({ url: options.dataUrl, method: lookupData.method }, fixedOptions),
- callbackParameter: "jsoncallback",
- success: function(data)
- {
- $.extend(datasourceOptions, lookupData.onData(data));
- getData();
- }
- });
- }
- else
- getData();
-
- function getData()
- {
- var returnData = {};
-
- if (options.onLoadBegin)
- options.onLoadBegin();
-
- $.jsonp({
- url: flickrApiUrl,
- async: false,
- dataType: 'jsonp',
- data: datasourceOptions,
- callbackParameter: "jsoncallback",
- success: function(data)
- {console.log(data);
- returnData.images = self.getImagesDataFromJson(data, datasourceOptions);
-
- if (data.photosets || data.collections)
- $.extend(returnData, {
- createGroups: true
- });
-
- if (returnData.images.length > 0 && ((datasourceOptions.setThumbnail && !datasourceOptions.setSinglePhotosetThumbnails) || options.isSingleLink))
- {
- $.extend(returnData, {
- isGroup: true,
- link: getPhotosetUrl(data.photoset.owner, data.photoset.id),
- thumbnailSrc: options.isSingleLink ? undefined : getImageUrl(data.photoset.photo[0], flickrImageSizes[datasourceOptions.thumbsize]),
- title: "None"
- });
- }
-
- if (callback)
- callback(returnData);
-
- if (options.onLoadComplete)
- options.onLoadComplete();
- },
- error : function(xOptions, textStatus){
- if (options.onLoadError)
- options.onLoadError("Flickr plugin encountered an error while retrieving data");
- }
- });
- }
- }
-
-
- var flickrImageSizes = {
- smallSquare : "_s", // 75x75
- thumbnail : "_t", // 100px
- small : "_m", // 240px
- medium : "", // 500px
- large : "_b", // 1024px
- original : "_o"
- };
- function getImageUrl(photoData, size)
- {
- return "http://farm" + photoData.farm + ".static.flickr.com/" + photoData.server + "/" + (photoData.primary || photoData.id) + "_" + photoData.secret + size + ".jpg";
- }
- function getPhotosetUrl(userid, photosetId)
- {
- return prepareUrl(flickrUrl + "photos/" + userid + "/sets/" + photosetId + "/");
- }
- // makes sure a string can be used as a Flickr url
- function prepareUrl(url)
- {
- return url.replace(/\s/g, "_");
- }
- this.getImagesDataFromJson = function(data, datasourceOptions)
- {
- var isPhotos = data.photoset || data.photos;
- var photos;
- if (isPhotos)
- photos = data.photoset ? data.photoset.photo : data.photos.photo;
- else if (data.photosets)
- photos = data.photosets.photoset;
- else if (data.collections)
- photos = data.collections.collection[0].set;
-
- var imagesData = [];
- var inSet = data.photoset ? "/in/set-" + data.photoset.id : "";
-
- // Photos:
- if (photos)
- {
- var thumbSuffix = flickrImageSizes[datasourceOptions.thumbsize];
- var imageSuffix = flickrImageSizes[datasourceOptions.imageSize];
-
- jQuery.each(photos, function(i, photo){
- var imageData = {
- thumbnailSrc : getImageUrl(photo, thumbSuffix),
- link: prepareUrl(flickrUrl + "photos/" + (photo.owner || datasourceOptions.user_id) + "/" + photo.id + inSet),
- media: {
- src: getImageUrl(photo, imageSuffix),
- title: isPhotos ? photo.title : photo.title._content + (!isPhotos ? " (" + photo.photos + " images)" : ""),
- alt: photo.title._content || photo.title,
- description: photo.description ? photo.description._content : undefined
- }
- };
-
- if (!isPhotos)
- imageData.data = { photoset_id: photo.id };
-
- imagesData.push(imageData);
- });
- }
-
- return imagesData;
- }
- }
|