123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- /*!
- * Yox Picasa plugin
- * http://yoxigen.com/yoxview/
- *
- * Copyright (c) 2010 Yossi Kolesnicov
- *
- * Licensed under the MIT license.
- * http://www.opensource.org/licenses/mit-license.php
- *
- * Date: 13th November, 2010
- * Version : 1.55
- */
- function yox_picasa()
- {
- var $ = jQuery;
- var picasaRegex = /http:\/\/picasaweb\.google\.\w+\/([^\/#\?]+)\/?([^\/#\?]+)?(\?([^#]*))?/
- var self = this;
-
- this.getImagesData = function(options, callback)
- {
- var defaults = {
- url: "http://picasaweb.google.com/data/feed/api/",
- setThumbnail: true,
- setSingleAlbumThumbnails: true,
- setTitle: true, // Whether to add a header with user and/or album name before thumbnails
- alt: 'json',
- thumbsize: 64
- },
- picasaThumbnailSizes = [32, 48, 64, 72, 104, 144, 150, 160],
- picasaImgMaxSizes = [94, 110, 128, 200, 220, 288, 320, 400, 512, 576, 640, 720, 800, 912, 1024, 1152, 1280, 1440, 1600],
- fromDataUrl = {};
-
- function getFeedUrl()
- {
- var feedUrl = datasourceOptions.url;
- if (datasourceOptions.user && datasourceOptions.user != "lh")
- {
- feedUrl += "user/" + datasourceOptions.user;
- if (datasourceOptions.album)
- feedUrl += "/album/" + datasourceOptions.album;
- }
- else
- feedUrl += "all";
-
- return feedUrl;
- }
-
- function picasa_getMaxSize(size, sizesArray, roundSizeUp)
- {
- size = parseInt(size);
- for(var i=sizesArray.length - 1; i >= 0; i--)
- {
- var pSize = sizesArray[i];
- if (size >= pSize)
- return roundSizeUp
- ? i < sizesArray.length - 1 ? sizesArray[i + 1] : pSize
- : pSize;
- }
-
- return size;
- }
-
- function getImagesDataFromJson(data, kind)
- {
- var entry = data.feed.entry;
- var isAlbum = kind === "album";
- var imagesData = [];
- jQuery.each(data.feed.entry, function(i, image){
- var imageTitle = isAlbum ? image.title.$t + " (" + image.gphoto$numphotos.$t + " images)" : image.summary.$t;
-
- if (!datasourceOptions.filter || imageTitle.match(datasourceOptions.filter))
- {
- var mediaData = image.media$group.media$content[0];
- var imageData = {
- thumbnailSrc : image.media$group.media$thumbnail[1].url,
- link: image.link[1].href,
- media: {
- src: mediaData.url,
- title: imageTitle,
- alt: imageTitle,
- width: mediaData.width,
- height: mediaData.height
- }
- };
-
- if (isAlbum)
- imageData.data = { album: image.gphoto$name.$t };
-
- imagesData.push(imageData);
- }
- });
-
- if (fromDataUrl.filter)
- {
- var dataUrlObj = Yox.getUrlData(options.dataUrl);
- delete dataUrlObj.queryFields.filter;
- options.dataUrl = Yox.urlDataToPath(dataUrlObj);
- }
- if (options.dataSourceOptions && options.dataSourceOptions.filter)
- delete options.dataSourceOptions.filter;
-
- return imagesData;
- }
-
- if (options.dataUrl)
- {
- var urlMatch = options.dataUrl.match(picasaRegex);
- if (urlMatch && urlMatch.length > 1)
- {
- fromDataUrl.user = urlMatch[1];
- if (urlMatch[2])
- fromDataUrl.album = urlMatch[2]
- if (urlMatch[4])
- $.extend(fromDataUrl, Yox.queryToJson(urlMatch[4]));
- }
- }
-
- var datasourceOptions = jQuery.extend({}, defaults, fromDataUrl, options.dataSourceOptions);
-
- if (datasourceOptions.user && !datasourceOptions.album && !datasourceOptions.q)
- datasourceOptions.thumbsize = 104;
-
- // Picasa web uses 'tags', while the API uses 'tag':
- if (datasourceOptions.tags)
- datasourceOptions.tag = datasourceOptions.tags;
-
- if (datasourceOptions.album == "")
- delete datasourceOptions.album;
-
- var screenSize = screen.width > screen.height ? screen.width : screen.height;
- var unknownSize = datasourceOptions.imgmax && $.inArray(datasourceOptions.imgmax, picasaImgMaxSizes) == -1 ? datasourceOptions.imgmax : null;
-
- // Save resources for smaller screens:
- if (!datasourceOptions.imgmax || unknownSize || screenSize < datasourceOptions.imgmax)
- datasourceOptions.imgmax = picasa_getMaxSize(unknownSize || screenSize, picasaImgMaxSizes, datasourceOptions.roundSizeUp);
-
- if (datasourceOptions.filter){
- if (typeof datasourceOptions.filter === "string")
- datasourceOptions.filter = new RegExp(datasourceOptions.filter, "i");
- }
-
- var feedUrl = getFeedUrl(datasourceOptions);
- var returnData = {};
-
- if (options.onLoadBegin)
- options.onLoadBegin();
-
- $.jsonp({
- url: feedUrl,
- async: false,
- dataType: 'jsonp',
- data: datasourceOptions,
- callbackParameter: "callback",
- success: function(data)
- {console.log(data);
- if (!data.feed.entry || data.feed.entry.length == 0)
- {
- if (options.onNoData)
- options.onNoData();
-
- return;
- }
-
- var kind = data.feed.entry[0].category[0].term.match(/.*#(.*)/)[1]; // album or photo
- if (kind === "album")
- $.extend(returnData, {
- title: data.feed.title.$t,
- createGroups: true
- });
-
- returnData.images = getImagesDataFromJson(data, kind);
- if (data.feed.title)
- returnData.title = data.feed.title.$t;
-
- if (returnData.images.length > 0 && datasourceOptions.setThumbnail && !datasourceOptions.setSingleAlbumThumbnails)
- {
- $.extend(returnData, {
- isGroup: true,
- link: data.feed.link[1].href,
- thumbnailSrc: data.feed.icon.$t,
- title: data.feed.title.$t
- });
- }
-
- if (callback)
- callback(returnData);
-
- if (options.onLoadComplete)
- options.onLoadComplete();
- },
- error : function(xOptions, textStatus){
- if (options.onLoadError)
- options.onLoadError("Picasa plugin encountered an error while retrieving data");
- }
- });
- }
- }
|