diff --git a/index.php b/index.php index 0fa1ed5c..ade2ebed 100644 --- a/index.php +++ b/index.php @@ -30,6 +30,7 @@ + diff --git a/js/config.js b/js/config.js index 18948ad6..a8676bc6 100755 --- a/js/config.js +++ b/js/config.js @@ -32,10 +32,8 @@ var config = { 'I\'d like to kick you in the teeth, but why should I improve your looks?', 'If I had a face like yours. I\'d sue my parents!' ] + }, + news: { + feed: 'http://www.nytimes.com/services/xml/rss/nyt/HomePage.xml' } } - -// var feed = 'http://feeds.nos.nl/nosjournaal?format=rss'; -//var feed = 'http://www.nu.nl/feeds/rss/achterklap.rss'; -//var feed = 'http://www.nu.nl/feeds/rss/opmerkelijk.rss'; -var feed = 'http://www.nytimes.com/services/xml/rss/nyt/HomePage.xml'; diff --git a/js/main.js b/js/main.js index 54a1c958..df645416 100755 --- a/js/main.js +++ b/js/main.js @@ -26,9 +26,6 @@ function roundVal(temp) jQuery(document).ready(function($) { - var news = []; - var newsIndex = 0; - var eventList = []; var lastCompliment; @@ -180,31 +177,6 @@ jQuery(document).ready(function($) { weather.init(); - (function fetchNews() { - $.feedToJson({ - feed: feed, - success: function(data){ - news = []; - for (var i in data.item) { - var item = data.item[i]; - news.push(item.title); - } - } - }); - setTimeout(function() { - fetchNews(); - }, 60000); - })(); - - (function showNews() { - var newsItem = news[newsIndex]; - $('.news').updateWithText(newsItem,2000); - - newsIndex--; - if (newsIndex < 0) newsIndex = news.length - 1; - setTimeout(function() { - showNews(); - }, 5500); - })(); + news.init(); }); diff --git a/js/news/news.js b/js/news/news.js new file mode 100644 index 00000000..3b29a457 --- /dev/null +++ b/js/news/news.js @@ -0,0 +1,123 @@ +// A lot of this code is from the original feedToJson function that was included with this project +// The new code allows for multiple feeds to be used but a bunch of variables and such have literally been copied and pasted into this code and some help from here: http://jsfiddle.net/BDK46/ +// The original version can be found here: http://airshp.com/2011/jquery-plugin-feed-to-json/ +var news = { + feed: config.news.feed || null, + newsLocation: '.news', + newsItems: [], + seenNewsItem: [], + _yqURL: 'http://query.yahooapis.com/v1/public/yql', + _yqlQS: '?format=json&q=select%20*%20from%20rss%20where%20url%3D', + _cacheBuster: Math.floor((new Date().getTime()) / 1200 / 1000), + _failedAttempts: 0, + fetchInterval: config.news.fetchInterval || 60000, + updateInterval: config.news.interval || 5500, + fadeInterval: 2000, + intervalId: null, + fetchNewsIntervalId: null +} + +news.buildQueryString = function (feed) { + + return this._yqURL + this._yqlQS + '\'' + encodeURIComponent(feed) + '\''; + +} + +news.fetchNews = function () { + + // Reset the news feed + this.newsItems = []; + + this.feed.forEach(function (_curr) { + + var _yqUrlString = this.buildQueryString(_curr); + this.fetchFeed(_yqUrlString); + + }.bind(this)); + +} + +news.fetchFeed = function (yqUrl) { + + $.ajax({ + type: 'GET', + datatype:'jsonp', + url: yqUrl, + success: function (data) { + + this.parseFeed(data.query.results.item); + + }.bind(this), + error: function () { + + } + }); + +} + +news.parseFeed = function (data) { + + var _rssItems = []; + + for (var i = 0, count = data.length; i < count; i++) { + + _rssItems.push(data[i].title); + + } + + this.newsItems = this.newsItems.concat(_rssItems); + + return true; + +} + +news.showNews = function () { + + // If all items have been seen, swap seen to unseen + if (this.newsItems.length === 0 && this.seenNewsItem.length !== 0) { + + if (this._failedAttempts === 20) { + console.error('Failed to show a news story 20 times, stopping any attempts'); + return false; + } + + this._failedAttempts++; + + setTimeout(function () { + this.showNews(); + }.bind(this), 30000); + + } else if (this.newsItems.length === 0 && this.seenNewsItem.length !== 0) { + this.newsItems = this.seenNewsItem.splice(0); + } + + var _location = Math.floor(Math.random() * this.newsItems.length); + + var _item = news.newsItems.splice(_location, 1)[0]; + + this.seenNewsItem.push(_item); + + $(this.newsLocation).updateWithText(_item, this.fadeInterval); + +} + +news.init = function () { + + if (this.feed === null || this.feed instanceof Array) { + return false; + } else if (typeof this.feed === 'string') { + this.feed = [this.feed]; + } + + this.fetchNews(); + this.showNews(); + + this.fetchNewsIntervalId = setInterval(function () { + this.fetchNews() + }.bind(this), this.fetchInterval) + + this.intervalId = setInterval(function () { + this.showNews(); + }.bind(this), this.updateInterval); + +} \ No newline at end of file