From 125b28622fb55f6308fc1408aed034b55ea26a62 Mon Sep 17 00:00:00 2001 From: apfelmaennchen Date: Sat, 17 May 2008 09:23:59 +0000 Subject: [PATCH] needed for ywidget git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@4815 6c8d7289-2bf4-0310-a012-ef5d649a1542 --- htroot/yacy/ui/js/jquery.jfeed.js | 144 ++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 htroot/yacy/ui/js/jquery.jfeed.js diff --git a/htroot/yacy/ui/js/jquery.jfeed.js b/htroot/yacy/ui/js/jquery.jfeed.js new file mode 100644 index 000000000..5683687dd --- /dev/null +++ b/htroot/yacy/ui/js/jquery.jfeed.js @@ -0,0 +1,144 @@ +/* jFeed : jQuery feed parser plugin + * Copyright (C) 2007 Jean-François Hovinne - http://www.hovinne.com/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + */ + +jQuery.getFeed = function(options) { + + options = jQuery.extend({ + + url: null, + data: null, + success: null + + }, options); + + if(options.url) { + + $.ajax({ + type: 'GET', + url: options.url, + data: options.data, + dataType: 'xml', + success: function(xml) { + var feed = new JFeed(xml); + if(jQuery.isFunction(options.success)) options.success(feed); + } + }); + } +}; + +function JFeed(xml) { + if(xml) this.parse(xml); +}; + +JFeed.prototype = { + + type: '', + version: '', + title: '', + link: '', + description: '', + parse: function(xml) { + + if(jQuery('channel', xml).length == 1) { + + this.type = 'rss'; + var feedClass = new JRss(xml); + + } else if(jQuery('feed', xml).length == 1) { + + this.type = 'atom'; + var feedClass = new JAtom(xml); + } + + if(feedClass) jQuery.extend(this, feedClass); + } +}; + +function JFeedItem() {}; + +JFeedItem.prototype = { + + title: '', + link: '', + description: '', + updated: '', + id: '' +}; + +function JAtom(xml) { + this._parse(xml); +}; + +JAtom.prototype = { + + _parse: function(xml) { + + var channel = jQuery('feed', xml).eq(0); + + this.version = '1.0'; + this.title = jQuery(channel).find('title:first').text(); + this.link = jQuery(channel).find('link:first').attr('href'); + this.description = jQuery(channel).find('subtitle:first').text(); + this.language = jQuery(channel).attr('xml:lang'); + this.updated = jQuery(channel).find('updated:first').text(); + + this.items = new Array(); + + var feed = this; + + jQuery('entry', xml).each( function() { + + var item = new JFeedItem(); + + item.title = jQuery(this).find('title').eq(0).text(); + item.link = jQuery(this).find('link').eq(0).attr('href'); + item.description = jQuery(this).find('content').eq(0).text(); + item.updated = jQuery(this).find('updated').eq(0).text(); + item.id = jQuery(this).find('id').eq(0).text(); + + feed.items.push(item); + }); + } +}; + +function JRss(xml) { + this._parse(xml); +}; + +JRss.prototype = { + + _parse: function(xml) { + + if(jQuery('rss', xml).length == 0) this.version = '1.0'; + else this.version = jQuery('rss', xml).eq(0).attr('version'); + + var channel = jQuery('channel', xml).eq(0); + + this.title = jQuery(channel).find('title:first').text(); + this.link = jQuery(channel).find('link:first').text(); + this.description = jQuery(channel).find('description:first').text(); + this.language = jQuery(channel).find('language:first').text(); + this.updated = jQuery(channel).find('lastBuildDate:first').text(); + + this.items = new Array(); + + var feed = this; + + jQuery('item', xml).each( function() { + + var item = new JFeedItem(); + + item.title = jQuery(this).find('title').eq(0).text(); + item.link = jQuery(this).find('link').eq(0).text(); + item.description = jQuery(this).find('description').eq(0).text(); + item.updated = jQuery(this).find('pubDate').eq(0).text(); + item.id = jQuery(this).find('guid').eq(0).text(); + + feed.items.push(item); + }); + } +}; +