Merge branch 'master' of stigma.nowoczesnapolska.org.pl:platforma
[redakcja.git] / project / static / js / views / button_toolbar.js
1 /*globals View render_template scriptletCenter*/
2 var ButtonToolbarView = View.extend({
3     _className: 'ButtonToolbarView',
4     template: null,
5     buttons: null,
6   
7     init: function(element, model, parent, template) {
8         this._super(element, model, null);
9         this.parent = parent;
10         this.template = 'button-toolbar-view-template';
11     
12         this.model.addObserver(this, 'buttons', this.modelButtonsChanged.bind(this));
13         this.buttons = this.model.get('buttons');
14         this.model.load();
15         this.render();
16     },
17   
18     modelButtonsChanged: function(property, value) {
19         this.set('buttons', value);
20         this.render();
21     },
22   
23     render: function() {
24         $('.buttontoolbarview-tab', this.element).unbind('click.buttontoolbarview');
25         $('.buttontoolbarview-button', this.element).unbind('click.buttontoolbarview');
26         var self = this;
27     
28         this.element.html(render_template(this.template, this));
29     
30         $('.buttontoolbarview-tab', this.element).bind('click.buttontoolbarview', function() {
31             var groupIndex = $(this).attr('ui:groupindex');
32             $('.buttontoolbarview-group', self.element).each(function() {
33                 if ($(this).attr('ui:groupindex') == groupIndex) {
34                     $(this).show();
35                 } else {
36                     $(this).hide();
37                 }
38             });
39             $(self.element).trigger('resize');
40         });
41     
42         $('.buttontoolbarview-button', this.element).bind('click.buttontoolbarview', function(event) {
43             var groupIndex = parseInt($(this).attr('ui:groupindex'), 10);
44             var buttonIndex = parseInt($(this).attr('ui:buttonindex'), 10);
45             var button = self.get('buttons')[groupIndex].buttons[buttonIndex];
46             var scriptletId = button.scriptlet_id;
47             var params = eval('(' + button.params + ')'); // To nie powinno być potrzebne
48
49             console.log('Executing', scriptletId, 'with params', params);
50             try {
51                 scriptletCenter.scriptlets[scriptletId](self.parent, params);
52             } catch(e) {
53                 console.log("Scriptlet", scriptletId, "failed.");
54             }
55         });
56     
57         $(this.element).trigger('resize');
58     },
59   
60     dispose: function() {
61         $('.buttontoolbarview-tab', this.element).unbind('click.buttontoolbarview');
62         $('.buttontoolbarview-button', this.element).unbind('click.buttontoolbarview');
63         this._super();
64     }
65 });
66