/**
Application fonts list
@class RSSLinks
@constructor
@return {object} instantiated RSSLinks
**/
define(['jquery', 'backbone'], function ($, Backbone) {
/**
Custom event fired when a new RSS link selected
@event RSSLINK_CHANGED
@param {This} caller
@param {Self} context caller
@param {Event} rss link
@static
@final
**/
BB.EVENTS.RSSLINK_CHANGED = 'RSSLINK_CHANGED';
Backbone.SERVICES.RSS_LINKS = 'RSSLinks';
var RSSLinks = Backbone.StackView.Fader.extend({
/**
Constructor
@method initialize
**/
initialize: function () {
var self = this;
self.m_rssLinks = '<TextRss>' +
'<Rss label="Top Stories" url="http://rss.news.yahoo.com/rss/topstories"/>' +
'<Rss label="U.S. National" url="http://rss.news.yahoo.com/rss/us"/>' +
'<Rss label="Elections" url="http://rss.news.yahoo.com/rss/elections"/>' +
'<Rss label="Terrorism" url="http://rss.news.yahoo.com/rss/terrorism"/>' +
'<Rss label="World" url="http://rss.news.yahoo.com/rss/world"/>' +
'<Rss label="Mideast Conflict" url="http://rss.news.yahoo.com/rss/mideast"/>' +
'<Rss label="Iraq" url="http://rss.news.yahoo.com/rss/iraq"/>' +
'<Rss label="Politics" url="http://rss.news.yahoo.com/rss/politics"/>' +
'<Rss label="Business" url="http://rss.news.yahoo.com/rss/business"/>' +
'<Rss label="Technology" url="http://rss.news.yahoo.com/rss/tech"/>' +
'<Rss label="Sports" url="http://rss.news.yahoo.com/rss/sports"/>' +
'<Rss label="Entertainment" url="http://rss.news.yahoo.com/rss/entertainment"/>' +
'<Rss label="Health" url="http://rss.news.yahoo.com/rss/health"/>' +
'<Rss label="Odd News" url="http://rss.news.yahoo.com/rss/oddlyenough"/>' +
'<Rss label="Science" url="http://rss.news.yahoo.com/rss/science"/>' +
'<Rss label="Opinion/Editorial" url="http://rss.news.yahoo.com/rss/oped"/>' +
'<Rss label="Obituaries" url="http://rss.news.yahoo.com/rss/obits"/>' +
'<Rss label="Most Emailed" url="http://rss.news.yahoo.com/rss/mostemailed"/>' +
'<Rss label="Most Viewed" url="http://rss.news.yahoo.com/rss/mostviewed"/>' +
'<Rss label="Most Recommended" url="http://rss.news.yahoo.com/rss/highestrated"/>' +
'<Rss label="Custom" url=""/>' +
'</TextRss>';
self._populateRssLinks();
self._listenInputChange();
},
/**
When user changes a URL link for the feed, update the msdb
@method _listenInputChange
@return none
**/
_listenInputChange: function () {
var self = this;
// Text input change
var onChange = _.debounce(function (e) {
var text = $(e.target).val();
BB.comBroker.fire(BB.EVENTS.RSSLINK_CHANGED,self,self,text);
}, 150);
self.m_inputChangeHandler = $(Elements.RSS_LINK).on("input", onChange);
// drop selection box
$(Elements.RSS_SOURCE).on('change', function (e) {
var url = $("option:selected", e.target).val();
if (url==''){
$(Elements.RSS_LINK).val('');
$(Elements.RSS_LINK).fadeIn('fast');
} else {
$(Elements.RSS_LINK).fadeOut('fast');
}
onChange(e);
});
},
/**
Build list of available RSS links from embedded XML
@method _populateRssLinks
**/
_populateRssLinks: function(){
var self = this;
var snippet = '';
self.m_rssLinks = $($.parseXML(self.m_rssLinks)).find('Rss');
$.each(self.m_rssLinks,function(k,v){
snippet = snippet + '\n<option value="' + $(v).attr('url') + '">' + $(v).attr('label') + '</option>';
});
self.$el.append(snippet);
},
/**
Insert selected RSS URL and load appropriate select UI selection
@method setRssLink
@param {String} i_url
**/
setRssLink: function(i_url){
var self = this;
$(Elements.RSS_LINK).val(i_url);
var found = 0;
self.$el.children().each(function(k,v){
if ( $(v).val() == i_url){
$(v).prop('selected','selected');
found = 1;
return false;
}
});
if (found){
$(Elements.RSS_LINK).fadeOut('fast');
} else {
$("option:last",self.$el).prop("selected","selected");
$(Elements.RSS_LINK).fadeIn('fast');
}
}
});
return RSSLinks;
});