FeedWindow = function() {
this.feedUrl = new Ext.form.ComboBox({
id: 'feed-url',
fieldLabel: 'Enter the URL of the feed to add',
emptyText: 'http://example.com/blog/feed',
width: 450,
validationEvent: false,
validateOnBlur: false,
msgTarget: 'under',
triggerAction: 'all',
displayField: 'url',
mode: 'local',
listeners:{
valid: this.syncShadow,
invalid: this.syncShadow,
scope: this
},
tpl: new Ext.XTemplate(
''),
store: new Ext.data.ArrayStore({
fields: ['url', 'text'],
data : this.defaultFeeds
})
});
this.form = new Ext.FormPanel({
labelAlign:'top',
items:this.feedUrl,
border: false,
bodyStyle:'background:transparent;padding:10px;'
});
FeedWindow.superclass.constructor.call(this, {
title: 'Add Feed',
iconCls: 'feed-icon',
id: 'add-feed-win',
autoHeight: true,
width: 500,
resizable: false,
plain:true,
modal: true,
y: 100,
autoScroll: true,
closeAction: 'hide',
buttons:[{
text: 'Add Feed!',
handler: this.onAdd,
scope: this
},{
text: 'Cancel',
handler: this.hide.createDelegate(this, [])
}],
items: this.form
});
this.addEvents({add:true});
}
Ext.extend(FeedWindow, Ext.Window, {
defaultFeeds : [
['http://www.divergingpath.com/rss.cfm?mode=full', 'Aaron Conran\'s Blog'],
['http://feeds.yuiblog.com/YahooUserInterfaceBlog', 'Yahoo! UI Blog'],
['http://feeds.feedburner.com/jquery/', 'jQuery Blog'],
['http://sports.yahoo.com/nba/rss.xml', 'NBA News'],
['http://feeds.dzone.com/dzone/frontpage', 'DZone.com']
],
show : function(){
if(this.rendered){
this.feedUrl.setValue('');
}
FeedWindow.superclass.show.apply(this, arguments);
},
onAdd: function() {
this.el.mask('Validating Feed...', 'x-mask-loading');
var url = this.feedUrl.getValue();
Ext.Ajax.request({
url: 'feed-proxy.php',
params: {feed: url},
success: this.validateFeed,
failure: this.markInvalid,
scope: this,
feedUrl: url
});
},
markInvalid : function(){
this.feedUrl.markInvalid('The URL specified is not a valid RSS2 feed.');
this.el.unmask();
},
validateFeed : function(response, options){
var dq = Ext.DomQuery;
var url = options.feedUrl;
try{
var xml = response.responseXML;
var channel = xml.getElementsByTagName('channel')[0];
if(channel){
var text = dq.selectValue('title', channel, url);
var description = dq.selectValue('description', channel, 'No description available.');
this.el.unmask();
this.hide();
return this.fireEvent('validfeed', {
url: url,
text: text,
description: description
});
}
}catch(e){
}
this.markInvalid();
}
});