blob: 64f0bc431487f5f473f154fa8035eaffd13ede9e [file] [log] [blame]
Akron479994e2018-07-02 13:21:44 +02001/**
2 * The plugin system is based
3 * on registered widgets (iframes) from foreign services.
4 * The client component is loaded independently
5 * in a plugin and communicates with the embedding
6 * KorAP service.
7 *
8 * @author Nils Diewald
9 */
10
Akrona6c32b92018-07-02 18:39:42 +020011/*
12* TODO:
13* Some methods require bidirectional
14* calling, like
15* - getKoralQuery()
16* this probably should be done using a callback,
17* like fetch({data}, function () {}, '*'), that will
18* add a unique ID to the message and will call on the cb
19* once the answer to that message arrives.
20*/
Akrona99315e2018-07-03 22:56:45 +020021/*
22 * When loading the script from a remote KorAP instance,
23 * demand using integrity check:
24 * https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity
25 */
Akrona6c32b92018-07-02 18:39:42 +020026
27var cs = document.currentScript;
28
Akron479994e2018-07-02 13:21:44 +020029(function () {
30 "use strict";
31
32 var obj = {
33
34 /**
35 * Create new plugin
36 */
37 create : function () {
38 return Object.create(this)._init();
39 },
40
41 /*
42 * Initialize plugin
43 */
44 _init : function () {
Akrona6c32b92018-07-02 18:39:42 +020045 this.widgetID = window.name;
46 this.server = cs.getAttribute('data-server') || '*';
Akron479994e2018-07-02 13:21:44 +020047 return this;
48 },
49
50 // Send a message
51 _sendMsg : function (data) {
Akrona6c32b92018-07-02 18:39:42 +020052 data["originID"] = this.widgetID;
Akron479994e2018-07-02 13:21:44 +020053
54 // TODO: This should send a correct origin
Akrona6c32b92018-07-02 18:39:42 +020055 window.parent.postMessage(data, this.server);
Akron479994e2018-07-02 13:21:44 +020056 },
57
58 /**
59 * Send a log message to the embedding KorAP
60 */
61 log : function (code, msg) {
62 this._sendMsg({
63 action : 'log',
64 code : code,
65 msg : msg
66 });
67 },
68
69 /**
70 * Send a resize command to the
71 * embedding KorAP
72 */
73 resize : function () {
Akron479994e2018-07-02 13:21:44 +020074 this._sendMsg({
75 'action' : 'resize',
Akrone8e2c952018-07-04 13:43:12 +020076 'height' : document.documentElement.scrollHeight
Akron479994e2018-07-02 13:21:44 +020077 });
78 }
79 };
80
81 // Create plugin on windows load
82 window.onload = function () {
83 window.KorAPlugin = window.KorAPlugin || obj.create();
Akrone8e2c952018-07-04 13:43:12 +020084 window.KorAPlugin.resize();
Akron479994e2018-07-02 13:21:44 +020085 };
86})();
87