Commit | Line | Data |
---|---|---|
22373da6 D |
1 | (function () { |
2 | var view = Backbone.View.extend({ | |
3 | events: { | |
4 | 'click .btn_save': 'onSave' | |
5 | }, | |
6 | ||
7 | initialize: function (options) { | |
8 | var that = this; | |
9 | this.$el = $($('#tmpl_script_editor').html()); | |
10 | ||
11 | this.model.on('applet_loaded', function () { | |
12 | that.$el.parent().css('height', '100%'); | |
bc63c7fb | 13 | $script(_kiwi.app.get('base_path') + '/assets/libs/ace/ace.js', function (){ that.createAce(); }); |
22373da6 D |
14 | }); |
15 | }, | |
16 | ||
17 | ||
18 | createAce: function () { | |
19 | var editor_id = 'editor_' + Math.floor(Math.random()*10000000).toString(); | |
20 | this.editor_id = editor_id; | |
21 | ||
22 | this.$el.find('.editor').attr('id', editor_id); | |
23 | ||
24 | this.editor = ace.edit(editor_id); | |
25 | this.editor.setTheme("ace/theme/monokai"); | |
26 | this.editor.getSession().setMode("ace/mode/javascript"); | |
27 | ||
28 | var script_content = _kiwi.global.settings.get('user_script') || ''; | |
29 | this.editor.setValue(script_content); | |
30 | }, | |
31 | ||
32 | ||
33 | onSave: function (event) { | |
34 | var script_content, user_fn; | |
35 | ||
36 | // Build the user script up with some pre-defined components | |
37 | script_content = 'var network = kiwi.components.Network();\n'; | |
38 | script_content += 'var input = kiwi.components.ControlInput();\n'; | |
39 | script_content += this.editor.getValue() + '\n'; | |
40 | ||
41 | // Add a dispose method to the user script for cleaning up | |
42 | script_content += 'this._dispose = function(){ network.off(); if(this.dispose) this.dispose(); }'; | |
43 | ||
44 | // Try to compile the user script | |
45 | try { | |
46 | user_fn = new Function(script_content); | |
47 | ||
48 | // Dispose any existing user script | |
49 | if (_kiwi.user_script && _kiwi.user_script._dispose) | |
50 | _kiwi.user_script._dispose(); | |
51 | ||
52 | // Create and run the new user script | |
53 | _kiwi.user_script = new user_fn(); | |
54 | ||
55 | } catch (err) { | |
56 | this.setStatus('Script error. ' + err.toString()); | |
57 | return; | |
58 | } | |
59 | ||
60 | // If we're this far, no errors occured. Save the user script | |
61 | _kiwi.global.settings.set('user_script', this.editor.getValue()); | |
62 | _kiwi.global.settings.save(); | |
63 | ||
64 | this.setStatus('Your script has been saved and is now active :)'); | |
65 | }, | |
66 | ||
67 | ||
68 | setStatus: function (status_text) { | |
69 | var $status = this.$el.find('.toolbar .status'); | |
70 | ||
71 | status_text = status_text || ''; | |
72 | $status.slideUp('fast', function() { | |
73 | $status.text(status_text); | |
74 | $status.slideDown(); | |
75 | }); | |
76 | } | |
77 | }); | |
78 | ||
79 | ||
80 | ||
81 | var applet = Backbone.Model.extend({ | |
82 | initialize: function () { | |
83 | var that = this; | |
84 | ||
85 | this.set('title', 'Script Editor'); | |
86 | this.view = new view({model: this}) | |
87 | ||
88 | } | |
89 | }); | |
90 | ||
91 | ||
92 | _kiwi.model.Applet.register('kiwi_script_editor', applet); | |
93 | //_kiwi.model.Applet.loadOnce('kiwi_script_editor'); | |
94 | })(); |