Akron | a6c32b9 | 2018-07-02 18:39:42 +0200 | [diff] [blame] | 1 | /** |
| 2 | * The plugin system is based |
| 3 | * on registered widgets (iframes) from |
| 4 | * foreign services. |
Akron | e1c27f6 | 2018-07-20 11:42:59 +0200 | [diff] [blame] | 5 | * The widget component represents a single iframe and is |
| 6 | * implemented as a view object. |
Akron | a6c32b9 | 2018-07-02 18:39:42 +0200 | [diff] [blame] | 7 | * |
| 8 | * @author Nils Diewald |
| 9 | */ |
| 10 | |
Akron | 22598cd | 2019-12-09 14:59:03 +0100 | [diff] [blame] | 11 | define(["view","plugin/service","util"], function (viewClass, serviceClass) { |
Akron | a6c32b9 | 2018-07-02 18:39:42 +0200 | [diff] [blame] | 12 | "use strict"; |
| 13 | |
| 14 | return { |
| 15 | |
| 16 | /** |
| 17 | * Create new widget |
| 18 | */ |
Akron | 7991b19 | 2018-07-09 17:28:43 +0200 | [diff] [blame] | 19 | create : function (name, src, id) { |
Akron | 22598cd | 2019-12-09 14:59:03 +0100 | [diff] [blame] | 20 | return Object.create(viewClass)._init(['widget']).upgradeTo(serviceClass)._init(name, src, id).upgradeTo(this)._init(); |
Akron | a6c32b9 | 2018-07-02 18:39:42 +0200 | [diff] [blame] | 21 | }, |
| 22 | |
Akron | e8e2c95 | 2018-07-04 13:43:12 +0200 | [diff] [blame] | 23 | // Initialize widget |
Akron | 22598cd | 2019-12-09 14:59:03 +0100 | [diff] [blame] | 24 | _init : function () { |
| 25 | this.isWidget = true; |
Akron | a6c32b9 | 2018-07-02 18:39:42 +0200 | [diff] [blame] | 26 | return this; |
| 27 | }, |
| 28 | |
| 29 | /** |
Akron | e1c27f6 | 2018-07-20 11:42:59 +0200 | [diff] [blame] | 30 | * The element of the widget as embedded in the view |
Akron | a6c32b9 | 2018-07-02 18:39:42 +0200 | [diff] [blame] | 31 | */ |
Akron | e1c27f6 | 2018-07-20 11:42:59 +0200 | [diff] [blame] | 32 | show : function () { |
Akron | a6c32b9 | 2018-07-02 18:39:42 +0200 | [diff] [blame] | 33 | |
Akron | 22598cd | 2019-12-09 14:59:03 +0100 | [diff] [blame] | 34 | if (this._load) |
| 35 | return this._load; |
Akron | 8d646d7 | 2018-07-08 13:45:53 +0200 | [diff] [blame] | 36 | |
Akron | 22598cd | 2019-12-09 14:59:03 +0100 | [diff] [blame] | 37 | let obj = this.load(); |
Akron | a6c32b9 | 2018-07-02 18:39:42 +0200 | [diff] [blame] | 38 | |
Akron | e1c27f6 | 2018-07-20 11:42:59 +0200 | [diff] [blame] | 39 | // Per default there should at least be a button |
| 40 | // for settings, if the plugin requires settings. |
| 41 | // Otherwise a button indicating this is a plugin |
| 42 | // is a nice idea as well. |
Akron | 22598cd | 2019-12-09 14:59:03 +0100 | [diff] [blame] | 43 | |
Akron | e1c27f6 | 2018-07-20 11:42:59 +0200 | [diff] [blame] | 44 | this.actions.add( |
| 45 | this.name, ['button-icon', 'plugin'], function (e) { |
Akron | 8d646d7 | 2018-07-08 13:45:53 +0200 | [diff] [blame] | 46 | |
Akron | e1c27f6 | 2018-07-20 11:42:59 +0200 | [diff] [blame] | 47 | // Temporary |
| 48 | window.alert("Basic information about this plugin"); |
Akron | 8d646d7 | 2018-07-08 13:45:53 +0200 | [diff] [blame] | 49 | }.bind(this)); |
| 50 | |
Akron | 22598cd | 2019-12-09 14:59:03 +0100 | [diff] [blame] | 51 | return obj; |
Akron | a6c32b9 | 2018-07-02 18:39:42 +0200 | [diff] [blame] | 52 | }, |
| 53 | |
| 54 | // Resize iframe |
| 55 | resize : function (data) { |
Akron | e1c27f6 | 2018-07-20 11:42:59 +0200 | [diff] [blame] | 56 | this.show().style.height = data.height + 'px'; |
Akron | a99315e | 2018-07-03 22:56:45 +0200 | [diff] [blame] | 57 | }, |
| 58 | |
Akron | 4a70387 | 2018-07-26 10:59:41 +0200 | [diff] [blame] | 59 | |
| 60 | // On closing the widget view |
| 61 | onClose : function () { |
| 62 | if (this._mgr) { |
Akron | 22598cd | 2019-12-09 14:59:03 +0100 | [diff] [blame] | 63 | this._mgr._closeService(this._id); |
Akron | 4a70387 | 2018-07-26 10:59:41 +0200 | [diff] [blame] | 64 | this._mgr = undefined; |
| 65 | }; |
Akron | a6c32b9 | 2018-07-02 18:39:42 +0200 | [diff] [blame] | 66 | } |
| 67 | } |
| 68 | }); |