X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/0494b8d9b9bb03ab6c22b34dae81261e3cd7e3e6..7a654f8d43fdb43d78b63d90528bed6e86b608cc:/examples/app/feed-viewer/app/controller/Feeds.js diff --git a/examples/app/feed-viewer/app/controller/Feeds.js b/examples/app/feed-viewer/app/controller/Feeds.js new file mode 100644 index 00000000..663be990 --- /dev/null +++ b/examples/app/feed-viewer/app/controller/Feeds.js @@ -0,0 +1,119 @@ +Ext.define('FV.controller.Feeds', { + extend: 'Ext.app.Controller', + + stores: ['Feeds', 'Articles'], + models: ['Feed'], + views: ['feed.Add'], + + refs: [ + {ref: 'feedList', selector: 'feedlist'}, + {ref: 'feedData', selector: 'feedlist dataview'}, + {ref: 'feedShow', selector: 'feedshow'}, + {ref: 'feedForm', selector: 'feedwindow form'}, + {ref: 'feedCombo', selector: 'feedwindow combobox'}, + {ref: 'articleGrid', selector: 'articlegrid'}, + { + ref: 'feedWindow', + selector: 'feedwindow', + autoCreate: true, + xtype: 'feedwindow' + } + ], + + requires: ['FV.lib.FeedValidator'], + + // At this point things haven't rendered yet since init gets called on controllers before the launch function + // is executed on the Application + init: function() { + this.control({ + 'feedlist dataview': { + selectionchange: this.loadFeed + }, + 'feedlist button[action=add]': { + click: this.addFeed + }, + 'feedlist button[action=remove]': { + click: this.removeFeed + }, + 'feedwindow button[action=create]': { + click: this.createFeed + } + }); + }, + + onLaunch: function() { + var dataview = this.getFeedData(), + store = this.getFeedsStore(); + + dataview.bindStore(store); + dataview.getSelectionModel().select(store.getAt(0)); + }, + + /** + * Loads the given feed into the viewer + * @param {FV.model.feed} feed The feed to load + */ + loadFeed: function(selModel, selected) { + var grid = this.getArticleGrid(), + store = this.getArticlesStore(), + feed = selected[0]; + + if (feed) { + grid.enable(); + store.load({ + params: { + feed: feed.get('url') + } + }); + } + }, + + /** + * Shows the add feed dialog window + */ + addFeed: function() { + this.getFeedWindow().show(); + }, + + /** + * Removes the given feed from the Feeds store + * @param {FV.model.Feed} feed The feed to remove + */ + removeFeed: function() { + this.getFeedsStore().remove(this.getFeedData().getSelectionModel().getSelection()[0]); + }, + + /** + * @private + * Creates a new feed in the store based on a given url. First validates that the feed is well formed + * using FV.lib.FeedValidator. + * @param {String} name The name of the Feed to create + * @param {String} url The url of the Feed to create + */ + createFeed: function() { + var win = this.getFeedWindow(), + form = this.getFeedForm(), + combo = this.getFeedCombo(), + store = this.getFeedsStore(), + feed = this.getFeedModel().create({ + name: combo.getDisplayValue(), + url: combo.getValue() + }); + + form.setLoading({ + msg: 'Validating feed...' + }); + + FV.lib.FeedValidator.validate(feed, { + success: function() { + store.add(feed); + form.setLoading(false); + win.hide(); + }, + failure: function() { + form.setLoading(false); + form.down('[name=feed]').markInvalid('The URL specified is not a valid RSS2 feed.'); + } + }); + } +}); \ No newline at end of file