Upgrade to ExtJS 4.0.0 - Released 04/26/2011
[extjs.git] / examples / app / feed-viewer / app / controller / Articles.js
1 Ext.define('FV.controller.Articles', {
2     extend: 'Ext.app.Controller',
3
4     stores: ['Articles'],
5
6     models: ['Article'],
7
8     views: ['article.Grid', 'article.Preview'],
9
10     refs: [{
11         ref: 'feedShow',
12         selector: 'feedshow'
13     }, {
14         ref: 'viewer',
15         selector: 'viewer'
16     }, {
17         ref: 'articlePreview',
18         selector: 'articlepreview'
19     }, {
20         ref: 'articleTab',
21         xtype: 'articlepreview',
22         closable: true,
23         forceCreate: true,
24         selector: 'articlepreview'
25     }],
26
27     init: function() {
28         this.control({
29             'articlegrid': {
30                 selectionchange: this.previewArticle
31             },
32             'articlegrid > tableview': {
33                 itemdblclick: this.loadArticle,
34                 refresh: this.selectArticle
35             },
36             'articlegrid button[action=openall]': {
37                 click: this.openAllArticles
38             },
39             'articlepreview button[action=viewintab]': {
40                 click: this.viewArticle
41             },
42             'articlepreview button[action=gotopost]': {
43                 click: this.openArticle
44             }
45         });
46     },
47
48     selectArticle: function(view) {
49         var first = this.getArticlesStore().getAt(0);
50         if (first) {
51             view.getSelectionModel().select(first);
52         }
53     },
54
55     /**
56      * Loads the given article into the preview panel
57      * @param {FV.model.Article} article The article to load
58      */
59     previewArticle: function(grid, articles) {
60         var article = articles[0],
61             articlePreview = this.getArticlePreview();
62
63         if (article) {
64             articlePreview.article = article;
65                 articlePreview.update(article.data);
66         }
67     },
68
69     openArticle: function(btn) {
70         window.open(btn.up('articlepreview').article.get('link'));
71     },
72     
73     openAllArticles: function() {
74         var articles = [],
75             viewer = this.getViewer();
76             
77         this.getArticlesStore().each(function(article) {
78             articles.push(this.loadArticle(null, article, true));
79         }, this);
80         
81         viewer.add(articles);
82         viewer.setActiveTab(articles[articles.length-1]);
83     },
84
85     viewArticle: function(btn) {
86         this.loadArticle(null, btn.up('articlepreview').article);
87     },
88
89     /**
90      * Loads the given article into a new tab
91      * @param {FV.model.Article} article The article to load into a new tab
92      */
93     loadArticle: function(view, article, preventAdd) {
94         var viewer = this.getViewer(),
95             title = article.get('title'),
96             articleId = article.id;
97             
98         tab = viewer.down('[articleId=' + articleId + ']');
99         if (!tab) {
100             tab = this.getArticleTab();
101             tab.down('button[action=viewintab]').destroy();
102         }
103
104         tab.setTitle(title);
105         tab.article = article;
106         tab.articleId = articleId;
107         tab.update(article.data);
108
109         if (preventAdd !== true) {
110             viewer.add(tab);
111             viewer.setActiveTab(tab);            
112         }
113         
114         return tab;
115     }
116 });