Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
134 lines
3.6 KiB
JavaScript
Executable file
134 lines
3.6 KiB
JavaScript
Executable file
/* -*- Mode: js; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /
|
|
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
|
|
|
'use strict';
|
|
|
|
(function(exports) {
|
|
|
|
/**
|
|
* @class MobileIdDialog
|
|
* @param {options} object for attributes `onShow`, `onHide`.
|
|
* extends SystemDialog
|
|
*/
|
|
var MobileIdDialog = function MobileIdDialog(options) {
|
|
this.options = options || {};
|
|
// Render the dialog
|
|
this.render();
|
|
// Create the iframe on it with MobileID flow
|
|
this.createIframe();
|
|
// Publish that it's created
|
|
this.publish('created');
|
|
};
|
|
|
|
MobileIdDialog.prototype = Object.create(window.SystemDialog.prototype);
|
|
|
|
MobileIdDialog.prototype.customID = 'mobileid-dialog';
|
|
|
|
MobileIdDialog.prototype.DEBUG = false;
|
|
|
|
MobileIdDialog.prototype.panel = null;
|
|
MobileIdDialog.prototype.iframe = null;
|
|
|
|
MobileIdDialog.prototype.view = function mobileid_view() {
|
|
return '<div id="' + this.instanceID + '" role="dialog"></div>';
|
|
};
|
|
|
|
MobileIdDialog.prototype.createIframe =
|
|
function mobileid_getIFrame(onLoaded) {
|
|
this.iframe = document.createElement('iframe');
|
|
this.iframe.id = 'mobileid-iframe';
|
|
this.iframe.src = '/mobile_id/index.html';
|
|
this.iframe.style.width = '100%';
|
|
this.iframe.style.height = '100%';
|
|
this.getView().appendChild(this.iframe);
|
|
this.iframe.onload = function onLoaded() {
|
|
if (typeof this.options.onLoaded === 'function') {
|
|
this.options.onLoaded();
|
|
}
|
|
// We open with a transition
|
|
this.open(function onOpened() {
|
|
// Once the iframe is loaded, we send the params to render
|
|
this.dispatchEvent('shown');
|
|
}.bind(this));
|
|
}.bind(this);
|
|
|
|
return this.iframe;
|
|
};
|
|
|
|
MobileIdDialog.prototype.dispatchEvent =
|
|
function mobileid_dispatchEvent(eventName, params) {
|
|
if (!this.iframe) {
|
|
return;
|
|
}
|
|
|
|
var event = new CustomEvent(
|
|
eventName,
|
|
{
|
|
detail: params
|
|
}
|
|
);
|
|
this.iframe.contentWindow.dispatchEvent(event);
|
|
};
|
|
|
|
MobileIdDialog.prototype.getView = function mobileid_getIFrame() {
|
|
return document.getElementById(this.instanceID);
|
|
};
|
|
|
|
MobileIdDialog.prototype.open = function mobileid_open(onOpened) {
|
|
// Cache the main panel
|
|
this.panel = this.getView();
|
|
// Show it
|
|
this.show();
|
|
// If something should happen after the transition
|
|
// we add a listener
|
|
var onTransitionEnd = function onOpenedAnimation() {
|
|
this.panel.classList.remove('opening');
|
|
this.panel.removeEventListener('animationend', onTransitionEnd);
|
|
|
|
if (typeof onOpened === 'function') {
|
|
onOpened();
|
|
}
|
|
}.bind(this);
|
|
|
|
this.panel.addEventListener(
|
|
'animationend',
|
|
onTransitionEnd
|
|
);
|
|
// Add a transition to show it properly
|
|
this.panel.classList.add('opening');
|
|
};
|
|
|
|
MobileIdDialog.prototype.close = function mobileid_close(onClosed) {
|
|
var onTransitionEnd = function onClosedAnimation() {
|
|
this.panel.removeEventListener('animationend', onTransitionEnd);
|
|
this.panel.innerHTML = '';
|
|
this.panel.classList.remove('closing');
|
|
this.panel.classList.remove('opening');
|
|
this.reset();
|
|
|
|
if (typeof onClosed === 'function') {
|
|
onClosed();
|
|
}
|
|
|
|
this.hide();
|
|
}.bind(this);
|
|
|
|
this.panel.addEventListener(
|
|
'animationend',
|
|
onTransitionEnd
|
|
);
|
|
|
|
this.panel.classList.add('closing');
|
|
};
|
|
|
|
MobileIdDialog.prototype.reset = function mobileid_reset() {
|
|
if (!this.panel) {
|
|
return;
|
|
}
|
|
this.panel.parentNode.removeChild(this.panel);
|
|
this.panel = null;
|
|
};
|
|
|
|
exports.MobileIdDialog = MobileIdDialog;
|
|
|
|
}(window));
|