ACC SHELL
/*!
* 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;
}
}
ACC SHELL 2018