X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/0494b8d9b9bb03ab6c22b34dae81261e3cd7e3e6..7a654f8d43fdb43d78b63d90528bed6e86b608cc:/examples/app/feed-viewer/app/controller/Articles.js diff --git a/examples/app/feed-viewer/app/controller/Articles.js b/examples/app/feed-viewer/app/controller/Articles.js new file mode 100644 index 00000000..4ce4e8a1 --- /dev/null +++ b/examples/app/feed-viewer/app/controller/Articles.js @@ -0,0 +1,116 @@ +Ext.define('FV.controller.Articles', { + extend: 'Ext.app.Controller', + + stores: ['Articles'], + + models: ['Article'], + + views: ['article.Grid', 'article.Preview'], + + refs: [{ + ref: 'feedShow', + selector: 'feedshow' + }, { + ref: 'viewer', + selector: 'viewer' + }, { + ref: 'articlePreview', + selector: 'articlepreview' + }, { + ref: 'articleTab', + xtype: 'articlepreview', + closable: true, + forceCreate: true, + selector: 'articlepreview' + }], + + init: function() { + this.control({ + 'articlegrid': { + selectionchange: this.previewArticle + }, + 'articlegrid > tableview': { + itemdblclick: this.loadArticle, + refresh: this.selectArticle + }, + 'articlegrid button[action=openall]': { + click: this.openAllArticles + }, + 'articlepreview button[action=viewintab]': { + click: this.viewArticle + }, + 'articlepreview button[action=gotopost]': { + click: this.openArticle + } + }); + }, + + selectArticle: function(view) { + var first = this.getArticlesStore().getAt(0); + if (first) { + view.getSelectionModel().select(first); + } + }, + + /** + * Loads the given article into the preview panel + * @param {FV.model.Article} article The article to load + */ + previewArticle: function(grid, articles) { + var article = articles[0], + articlePreview = this.getArticlePreview(); + + if (article) { + articlePreview.article = article; + articlePreview.update(article.data); + } + }, + + openArticle: function(btn) { + window.open(btn.up('articlepreview').article.get('link')); + }, + + openAllArticles: function() { + var articles = [], + viewer = this.getViewer(); + + this.getArticlesStore().each(function(article) { + articles.push(this.loadArticle(null, article, true)); + }, this); + + viewer.add(articles); + viewer.setActiveTab(articles[articles.length-1]); + }, + + viewArticle: function(btn) { + this.loadArticle(null, btn.up('articlepreview').article); + }, + + /** + * Loads the given article into a new tab + * @param {FV.model.Article} article The article to load into a new tab + */ + loadArticle: function(view, article, preventAdd) { + var viewer = this.getViewer(), + title = article.get('title'), + articleId = article.id; + + tab = viewer.down('[articleId=' + articleId + ']'); + if (!tab) { + tab = this.getArticleTab(); + tab.down('button[action=viewintab]').destroy(); + } + + tab.setTitle(title); + tab.article = article; + tab.articleId = articleId; + tab.update(article.data); + + if (preventAdd !== true) { + viewer.add(tab); + viewer.setActiveTab(tab); + } + + return tab; + } +});