/** * ajaxFeeder.js * @use 'GoogleAjaxFeedAPI - http://code.google.com/intl/ja/apis/ajaxfeeds/documentation/' & 'jQuery - http://jquery.com/' * * @version: 0.11 * @author: Takuma Ando * @created: Oct 4th, 2010 * @updated: Dec 29th, 2011 * @license: Dual licensed under the MIT and GPL licenses: * http://www.opensource.org/licenses/mit-license.php * http://www.gnu.org/licenses/gpl.html */ (function($){ $(function(){ $('.ajaxFeeder').each(function(){ var $feedWrapper = $(this); var denial = ($(this).children('.ajaxFeederDenial').length) ? $(this).children('.ajaxFeederDenial').eq(0).text() : ''; var feedsLength = $(this).children('.ajaxFeederFeed').length; var entries = []; var loadedFeeds = 0; $(this).children('.ajaxFeederFeed').each(function(index){ var entryLength = ($(this).get(0).className.match(/ajaxFeederEntryLength(\d+)/i)) ? RegExp.$1 - 0: 10; $.ajax({ url: 'http://ajax.googleapis.com/ajax/services/feed/load?q=' + encodeURIComponent($(this).text()) + '&v=1.0&num=' + entryLength, dataType: 'jsonp', success: function(json, status){ var feed = json.responseData.feed; for(var i = 0; i < feed.entries.length; i++){ if ( denial && feed.entries[i].title.indexOf(denial) != -1 ){ continue; } entries.push({ feedIndex: index, feedTitle: feed.title, feedLink: feed.link, title: feed.entries[i].title, link: feed.entries[i].link, publishedDate: (new Date(feed.entries[i].publishedDate)) ? new Date(feed.entries[i].publishedDate) : new Date(), content: feed.entries[i].content, contentSnippet: feed.entries[i].contentSnippet }); } loadedFeeds++; if ( feedsLength == loadedFeeds ){ showFeeds($feedWrapper, entries); } } }); $(this).remove(); }); }); }); function showFeeds($wrapper, entries){ var $container = $wrapper.find('.ajaxFeederContainer'); var $group = $container.find('.ajaxFeederGroup'); var isGrouped = ( $group.length ) ? true : false; var isMixed = $wrapper.hasClass('ajaxFeederMixFeeds'); var maxLength = ($container.get(0).className.match(/ajaxFeederMaxLength(\d+)/i)) ? RegExp.$1 - 0: entries.length; if ( isMixed ){ entries.sort(function(a, b){ return b.publishedDate.getTime() - a.publishedDate.getTime(); }); entries = entries.slice(0, maxLength); if ( isGrouped ) { var $clonedGroup = $group.clone().wrapAll('
'); $group.remove(); buildFeeds($container, $clonedGroup, entries); } else { var $clonedContainerChildren = $container.clone(); $container.empty(); buildFeeds($container, $clonedContainerChildren, entries); } } else { entries.sort(function(a, b){ return b.feedIndex - a.feedIndex; }); entries = entries.slice(0, maxLength); var index = entries[0].feedIndex; var setEntry = []; if ( isGrouped ) { var $clonedGroup = $group.clone().wrapAll('
'); $group.remove(); for(var i = 0; i < entries.length; i++){ if (entries[i].feedIndex != index ){ buildFeeds($container, $clonedGroup, setEntry); index = entries[i].feedIndex; setEntry = []; } setEntry.push(entries[i]); } buildFeeds($container, $clonedGroup, setEntry); } else { var $clonedContainerChildren = $container.clone(); $container.empty(); for(var i = 0; i < entries.length; i++){ if (entries[i].feedIndex != index ){ buildFeeds($container, $clonedContainerChildren, setEntry); index = entries[i].feedIndex; setEntry = []; } setEntry.push(entries[i]); } buildFeeds($container, $clonedContainerChildren, setEntry); } } } function buildFeeds($wrapper, $container, entries){ $wrapper.find('.ajaxFeederFeedTitle').text(entries[0].feedTitle); $wrapper.find('.ajaxFeederFeedLink').attr('href', entries[0].feedLink); for(var i = 0; i < entries.length; i++){ /*var en = ''; for(var prop in entries[i]){ en += prop + ': ' + entries[i][prop] + "\n"; }*/ var $clonedContainer = $container.clone(); $clonedContainer.find('.ajaxFeederFeedLink').attr('href', entries[i].feedLink); $clonedContainer.find('.ajaxFeederFeedTitle').text(entries[i].feedTitle); $clonedContainer.find('.ajaxFeederEntryLink').attr('href', entries[i].link); $clonedContainer.find('.ajaxFeederEntryDate').text(dateFormat(entries[i].publishedDate)); $clonedContainer.find('.ajaxFeederEntryTitle').text(entries[i].title); $clonedContainer.find('.ajaxFeederEntryContent').html(entries[i].content); $clonedContainer.find('.ajaxFeederEntryContentSnippet').html(entries[i].contentSnippet); var $snippet = $clonedContainer.find('.ajaxFeederEntryContentSnippet'); if ( $snippet.length > 0 ){ $snippet.get(0).className.match(/ajaxFeederSnippetSize(\d+)/i); var size = (RegExp.$1) ? RegExp.$1 - 0: null; var snippet = (size) ? entries[i].contentSnippet.substring(0, size) : entries[i].contentSnippet; $snippet.html(snippet); } //alert($clonedContainer.wrap('
').html()); $clonedContainer.children().appendTo($wrapper); } return $wrapper; } function dateFormat(dateText){ var date = new Date(dateText); var yy = ( date.getYear() > 1900 ) ? date.getYear() : date.getYear() + 1900; var mm = ( date.getMonth() + 1 >= 10 ) ? date.getMonth() + 1 : '0' + (date.getMonth() + 1); var dd = ( date.getDate() >= 10 ) ? date.getDate() : '0' + date.getDate(); return yy + '/' + mm + '/' + dd; } })(jQuery);