Fix in RAL.
[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).
43         bind('click.buttontoolbarview', this.buttonPressed.bind(this) );
44             
45         $(this.element).trigger('resize');
46     },
47
48     buttonPressed: function(event)
49     {
50         var target = event.target;
51         
52         var groupIndex = parseInt($(target).attr('ui:groupindex'), 10);
53         var buttonIndex = parseInt($(target).attr('ui:buttonindex'), 10);
54         var button = this.get('buttons')[groupIndex].buttons[buttonIndex];
55         var scriptletId = button.scriptlet_id;
56         var params = eval('(' + button.params + ')'); // To nie powinno być potrzebne
57
58         console.log('Executing', scriptletId, 'with params', params);
59         try {
60             scriptletCenter.scriptlets[scriptletId](this.parent, params);
61         } catch(e) {
62             console.log("Scriptlet", scriptletId, "failed.");
63         }
64
65     },
66   
67     dispose: function() {
68         $('.buttontoolbarview-tab', this.element).unbind('click.buttontoolbarview');
69         $('.buttontoolbarview-button', this.element).unbind('click.buttontoolbarview');
70         this._super();
71     }
72 });
73