123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- // Handle messages coming from [Matrix] client if embedded as a [Widget] in some room.
- // [Matrix]: https://matrix.org/
- // [Widget]: https://docs.google.com/document/d/1uPF7XWY_dXTKVKV7jZQ2KmsI19wn9-kFRgQ1tFQP7wQ/edit
- class MatrixWidget {
- constructor () {
- this.widgetId = null
- window.addEventListener('message', this.onMessage.bind(this))
- }
- onMessage (event) {
- this.widgetId = this.widgetId || event.data.widgetId
- switch (event.data.api) {
- case 'fromWidget':
- break
- case 'toWidget':
- switch (event.data.action) {
- case 'capabilities':
- this.sendResponse(event, {
- capabilities: ['m.always_on_screen']
- })
- break
- }
- break
- default:
- break
- }
- }
- sendContentLoaded () {
- this.sendMessage({
- action: 'content_loaded'
- })
- }
- setAlwaysOnScreen (value) {
- // Extension of main spec, see https://github.com/matrix-org/matrix-doc/issues/1354
- this.sendMessage({
- action: 'set_always_on_screen',
- value: value, // once for spec compliance
- data: { value: value } // and once for Riot
- })
- }
- sendMessage (message) {
- if (!this.widgetId) return
- message.api = message.api || 'fromWidget'
- message.widgetId = message.widgetId || this.widgetId
- message.requestId = message.requestId || Math.random().toString(36)
- window.parent.postMessage(message, '*')
- }
- sendResponse (event, response) {
- event.data.response = response
- event.source.postMessage(event.data, event.origin)
- }
- }
- window.matrixWidget = new MatrixWidget()
|