UNPKG

cordova-plugin-mas-core

Version:
220 lines (190 loc) 8.77 kB
/* * Copyright (c) 2016 CA, Inc. All rights reserved. * This software may be modified and distributed under the terms * of the MIT license. See the LICENSE file for details. * */ var MASPluginConstants = require("./MASPluginConstants"), MASPopup = require("./PopupUI"); /** * @class MASPluginUtils * @hideconstructor * @classdesc A static utility class that enables the developers (and internal plugin classes) to validate object sanctity, allows setting of popup styles, launch a HTML page and close it. * <table> * <tr bgcolor="#D3D3D3"><th>Sample API usage</th></tr> * <tr><td><i>var isObjectAlive = MASPluginUtils.isEmpty(obj);</i></td></tr> * </table> */ var MASPluginUtils = { popupStyle:MASPluginConstants.MASPopupStyle.MASPopupLoginStyle, /** * Utility Method to validates the passed-in object for null/empty or undefined state. The type of object can be anything i.e. object, string, null etc. * @memberOf MASPluginUtils * @param {*} val Object to be validated */ isEmpty: function(val) { return (typeof val === 'undefined' || !val || val == null); }, XHR: function(cfg){ var xhr, url = cfg.url, method = cfg.method || 'GET', success = cfg.success || function () {}, failure = cfg.failure || function () {}; try { xhr = new XMLHttpRequest(); }catch (e){ xhr = new ActiveXObject("Msxml2.XMLHTTP"); } xhr.onreadystatechange = function (){ if (xhr.readyState == 4){ if (xhr.status == 200) { success.call(null, xhr); }else{ failure.call(null, xhr); } } } xhr.open(method, url); xhr.send(null); }, onBackKeyPressEvent: function() { successHandler = function() { document.removeEventListener("backbutton", MASPluginUtils.onBackKeyPressEvent, false); }; return Cordova.exec(successHandler, function() {}, "MASPluginApplication", "enterpriseBrowserWebAppBackButtonHandler", []); }, /** * Utility method to set the popup style of the UI that the MAS PLugin loads in case of Authentication/OTP-Channel Selection/OTP verification etc. * @memberOf MASPluginUtils * @param {string} style The style string. See {@link MASPopupStyle} */ setPopUpStyle: function(style) { this.popupStyle = style; }, /** * Utility method to get the popup style for a UI. * @memberOf MASPluginUtils * @returns {string} The popup style. See {@link MASPopupStyle} */ getPopUpStyle: function(){ return this.popupStyle; }, createPopupDiv: function() { if (typeof document.getElementById('popup') !== 'undefined') { var iDiv = document.createElement('div'); iDiv.id = 'popup'; iDiv.className = 'popup-wrapper hide'; // Create the inner div before appending to the body var innerDiv1 = document.createElement('div'); innerDiv1.className = 'popup-content'; // The variable iDiv is still good... Just append to it. iDiv.appendChild(innerDiv1); // Create the inner div before appending to the body var innerDiv2 = document.createElement('div'); innerDiv2.className = 'popup-title'; // The variable iDiv is still good... Just append to it. innerDiv1.appendChild(innerDiv2); var button = document.createElement('button'); button.type = 'button'; button.className = 'popup-close'; button.hidden = true; innerDiv2.appendChild(button); // Create the inner div before appending to the body var innerDiv3 = document.createElement('div'); innerDiv3.id = 'popup-bdy'; innerDiv3.className = 'popup-body'; // The variable iDiv is still good... Just append to it. innerDiv1.appendChild(innerDiv3); // Then append the whole thing onto the body document.getElementsByTagName('body')[0].appendChild(iDiv); } }, /** * Utility Method to popup a UI from a local HTML resource * @memberOf MASPluginUtils * @param {string} url path/name to the local HTML page * @param {object} result An object which the native Mobile SDK returns, loaded with data related to Authentication or OTP details. * @param {function} popupafterclose A user defined function that would be called after the popup closes.Any cleaning to be done post closure. * @param {function} onload A user defined function that would be called when the popup UI loads. Any initialization can be done here. */ MASPopupUI: function(url, result, popupafterclose, onload) { if(!this.isEmpty(result)){ window.localStorage.setItem("masCallbackResult",JSON.stringify(result)); } if (typeof jQuery !== 'undefined' && typeof $.mobile !== 'undefined') { var onLoadMakePopUpVisible = function() { if(document.getElementById('popUp') !== null) { document.getElementById('popUp').hidden=false; } onload(); }; $('#popUp').remove(); const popupStyle = this.getPopUpStyle(); var template = "<div id='popUp' hidden data-role='popup' class='ui-content messagePopup' style='"+ popupStyle+"'>" + "</div>"; popupafterclose = popupafterclose ? popupafterclose : function() {}; $.mobile.activePage.append(template).trigger("create"); $('#popUp').load(url,onLoadMakePopUpVisible); $.mobile.activePage.find(".closePopup").bind("tap", function() { $.mobile.activePage.find(".messagePopup").popup("close"); }); $.mobile.activePage.find(".messagePopup").popup().popup("open").bind({ popupafterclose: function() { $('body').off('touchmove'); $(this).unbind("popupafterclose").remove(); popupafterclose(); } }); $(".messagePopup").on({ popupbeforeposition: function() { $('.ui-popup-screen').off(); } }); }else{ window.MASPopupUI.close(); document.getElementById('popup').remove(); this.createPopupDiv(); var popupEl = document.getElementById('popup'); var popupBody = document.getElementById('popup-bdy'); popupEl.style.backgroundColor = "white"; popupBody.style.backgroundColor = "white"; window.MASPopupUI = new Popup(popupEl, { width: window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth, height: window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight }); var xhr = new XMLHttpRequest(); xhr.onload = function () { popupBody.innerHTML = this.response; var s = popupBody.getElementsByTagName('script'); for (var i = 0; i < s.length ; i++) { var node=s[i], parent=node.parentElement, d = document.createElement('script'); d.async=node.async; d.type = node.type; if(typeof node.src !== 'undefined' && node.src !== ""){ d.src=node.src; } d.text = node.text; parent.insertBefore(d,node); parent.removeChild(node); } window.MASPopupUI.open(); onload(); }; xhr.open('GET', url, true); xhr.send(); } }, /** * Utility method to close the popup UI element. Developer can use this method to close the UI which is on top of the stack. * @memberOf MASPluginUtils */ closePopup: function() { if (typeof jQuery !== 'undefined' && typeof $.mobile !== 'undefined') { $.mobile.activePage.find(".messagePopup").popup("close"); } else { window.MASPopupUI.close(); document.getElementById('popup').remove(); } } }; module.exports = MASPluginUtils;