Commit | Line | Data |
---|---|---|
eaaf73b0 | 1 | _kiwi.model.Applet = _kiwi.model.Panel.extend({\r |
19cc6364 D |
2 | initialize: function (attributes) {\r |
3 | // Temporary name\r | |
4 | var name = "applet_"+(new Date().getTime().toString()) + Math.ceil(Math.random()*100).toString();\r | |
eaaf73b0 | 5 | this.view = new _kiwi.view.Applet({model: this, name: name});\r |
19cc6364 D |
6 | \r |
7 | this.set({\r | |
8 | "name": name\r | |
9 | }, {"silent": true});\r | |
51ae0eb8 D |
10 | \r |
11 | // Holds the loaded applet\r | |
12 | this.loaded_applet = null;\r | |
19cc6364 D |
13 | },\r |
14 | \r | |
da848c4f | 15 | \r |
19cc6364 D |
16 | // Load an applet within this panel\r |
17 | load: function (applet_object, applet_name) {\r | |
18 | if (typeof applet_object === 'object') {\r | |
4baeda09 D |
19 | // Make sure this is a valid Applet\r |
20 | if (applet_object.get || applet_object.extend) {\r | |
21 | \r | |
22 | // Try find a title for the applet\r | |
247dd7ac | 23 | this.set('title', applet_object.get('title') || _kiwi.global.i18n.translate('client_models_applet_unknown').fetch());\r |
4baeda09 D |
24 | \r |
25 | // Update the tabs title if the applet changes it\r | |
26 | applet_object.bind('change:title', function (obj, new_value) {\r | |
27 | this.set('title', new_value);\r | |
28 | }, this);\r | |
29 | \r | |
30 | // If this applet has a UI, add it now\r | |
31 | this.view.$el.html('');\r | |
32 | if (applet_object.view) {\r | |
33 | this.view.$el.append(applet_object.view.$el);\r | |
34 | }\r | |
35 | \r | |
36 | // Keep a reference to this applet\r | |
37 | this.loaded_applet = applet_object;\r | |
1aed0c0b D |
38 | \r |
39 | this.loaded_applet.trigger('applet_loaded');\r | |
4baeda09 | 40 | }\r |
19cc6364 D |
41 | \r |
42 | } else if (typeof applet_object === 'string') {\r | |
43 | // Treat this as a URL to an applet script and load it\r | |
44 | this.loadFromUrl(applet_object, applet_name);\r | |
45 | }\r | |
4baeda09 D |
46 | \r |
47 | return this;\r | |
19cc6364 D |
48 | },\r |
49 | \r | |
da848c4f | 50 | \r |
19cc6364 D |
51 | loadFromUrl: function(applet_url, applet_name) {\r |
52 | var that = this;\r | |
53 | \r | |
247dd7ac | 54 | this.view.$el.html(_kiwi.global.i18n.translate('client_models_applet_loading').fetch());\r |
19cc6364 D |
55 | $script(applet_url, function () {\r |
56 | // Check if the applet loaded OK\r | |
eaaf73b0 | 57 | if (!_kiwi.applets[applet_name]) {\r |
247dd7ac | 58 | that.view.$el.html(_kiwi.global.i18n.translate('client_models_applet_notfound').fetch());\r |
19cc6364 D |
59 | return;\r |
60 | }\r | |
61 | \r | |
62 | // Load a new instance of this applet\r | |
eaaf73b0 | 63 | that.load(new _kiwi.applets[applet_name]());\r |
19cc6364 | 64 | });\r |
ea033d12 D |
65 | },\r |
66 | \r | |
da848c4f | 67 | \r |
ea033d12 D |
68 | close: function () {\r |
69 | this.view.$el.remove();\r | |
70 | this.destroy();\r | |
71 | \r | |
72 | this.view = undefined;\r | |
73 | \r | |
51ae0eb8 D |
74 | // Call the applets dispose method if it has one\r |
75 | if (this.loaded_applet && this.loaded_applet.dispose) {\r | |
76 | this.loaded_applet.dispose();\r | |
77 | }\r | |
78 | \r | |
ea033d12 | 79 | this.closePanel();\r |
425efe7a JA |
80 | },\r |
81 | \r | |
82 | isApplet: function () {\r | |
83 | return true;\r | |
19cc6364 | 84 | }\r |
da848c4f D |
85 | },\r |
86 | \r | |
87 | \r | |
88 | {\r | |
89 | // Load an applet type once only. If it already exists, return that\r | |
90 | loadOnce: function (applet_name) {\r | |
91 | \r | |
92 | // See if we have an instance loaded already\r | |
c966123a | 93 | var applet = _.find(_kiwi.app.panels('applets'), function(panel) {\r |
da848c4f D |
94 | // Ignore if it's not an applet\r |
95 | if (!panel.isApplet()) return;\r | |
96 | \r | |
97 | // Ignore if it doesn't have an applet loaded\r | |
98 | if (!panel.loaded_applet) return;\r | |
99 | \r | |
100 | if (panel.loaded_applet.get('_applet_name') === applet_name) {\r | |
101 | return true;\r | |
102 | }\r | |
103 | });\r | |
104 | \r | |
105 | if (applet) return applet;\r | |
106 | \r | |
107 | \r | |
108 | // If we didn't find an instance, load a new one up\r | |
109 | return this.load(applet_name);\r | |
110 | },\r | |
111 | \r | |
112 | \r | |
113 | load: function (applet_name) {\r | |
114 | var applet;\r | |
115 | \r | |
116 | // Find the applet within the registered applets\r | |
117 | if (!_kiwi.applets[applet_name]) return;\r | |
118 | \r | |
119 | // Create the applet and load the content\r | |
120 | applet = new _kiwi.model.Applet();\r | |
121 | applet.load(new _kiwi.applets[applet_name]({_applet_name: applet_name}));\r | |
122 | \r | |
123 | // Add it into the tab list\r | |
c966123a | 124 | _kiwi.app.applet_panels.add(applet);\r |
da848c4f D |
125 | \r |
126 | \r | |
127 | return applet;\r | |
128 | },\r | |
129 | \r | |
130 | \r | |
131 | register: function (applet_name, applet) {\r | |
132 | _kiwi.applets[applet_name] = applet;\r | |
133 | }\r | |
19cc6364 | 134 | }); |