UNPKG

@moxtradeveloper/cordova-plugin-moxo

Version:

Plugin for adding Moxtra services to Cordova/PhoneGap Apps.

674 lines (613 loc) 28.3 kB
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>JSDoc: Source: moxtra.js</title> <script src="scripts/prettify/prettify.js"> </script> <script src="scripts/prettify/lang-css.js"> </script> <!--[if lt IE 9]> <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> </head> <body> <div id="main"> <h1 class="page-title">Source: moxtra.js</h1> <section> <article> <pre class="prettyprint source linenums"><code>var exec = require("cordova/exec"); var pluginName = 'Moxtra'; var helper = require("./Helper"); var mepwindowDiv = null; var getCallbackParameters = function (callback, params) { if (cordova.platformId === 'android') { params.unshift(callback?true:false); } return params; } /** @namespace */ var moxtra = { /** * Setup domain * Notice: This API MUST be invoked first before 'link' * * @param {string} baseDomain - Your server domain * @param {string} certOrgName - SSL cert organization name. Optional, default is null. * @param {string} certPublicKey - SSL cert public key. Optional, default is null. * certPublicKey sample: "-----BEGIN PUBLIC KEY-----\n * YOUR PUBLIC KEY * \n-----END PUBLIC KEY-----\n" * @param {boolean} ignoreBadCert Ignore bad SSL cert or not. Default is true. */ setupDomain : function(baseDomain, certOrgName, certPublicKey, ignoreBadCert) { cordova.exec(function () {}, function(){}, pluginName, 'setupDomain', [baseDomain, certOrgName, certPublicKey, ignoreBadCert]); }, /** * Link MEP account with the access token. * @param {string} accessToken - MEP login credential. * @param {function} success - Callback invoked when link succeed. * @param {function} failure - Callback invoked when link failed, with parameter like below: * { * "error_code":0 //error code * "error_message": 'No network' //Detail error message * } */ linkWithAccessToken : function(accessToken, success, failure) { cordova.exec(success, failure, pluginName, 'linkWithAccessToken', [accessToken]); }, /** * Show a MEP window * Display MEP on top of your screen, it includes four tabs: Conversations, Contacts, Calendar, Settings * This function will use existing window instance if has one, that means page won't reflect setting changes, eg.voice_message_enabled */ showMEPWindow : function() { cordova.exec(function () {}, function(){}, pluginName, 'showMEPWindow', []); }, /** * Show a lite MEP window * A lite MEP window only includes: Conversations * This function will use existing window instance if has one, that means page won't reflect setting changes, eg.voice_message_enabled */ showMEPWindowLite : function() { cordova.exec(function () {}, function(){}, pluginName, 'showMEPWindowLite', []); }, /** * Hide MEP window */ hideMEPWindow : function() { if (mepwindowDiv != null) { while(mepwindowDiv.parentNode) { helper.dettachTransparentClass(mepwindowDiv); mepwindowDiv = mepwindowDiv.parentNode; } } cordova.exec(function () {}, function(){}, pluginName, 'hideMEPWindow', []); mepwindowDiv = null; var style = document.getElementById('mepwindowcss'); if (style != null) { style.parentNode.removeChild(style); } }, /** * Destroy the MEP window. */ destroyMEPWindow : function() { if (mepwindowDiv != null) { while(mepwindowDiv.parentNode) { helper.dettachTransparentClass(mepwindowDiv); mepwindowDiv = mepwindowDiv.parentNode; } } cordova.exec(function () {}, function(){}, pluginName, 'destroyMEPWindow', []); mepwindowDiv = null; var style = document.getElementById('mepwindowcss'); if (style != null) { style.parentNode.removeChild(style); } }, /** * Show MEP window in a specific web element * This function will use existing window instance if has one, that means page won't reflect setting changes, eg.voice_message_enabled * @param {HTMLDivElement} div - The element where you want to embed MEP window, required to be transparent. * * */ showMEPWindowInDiv : function(div) { var top = 0, left = 0; var width = div.offsetWidth, height = div.offsetHeight; var element = div; mepwindowDiv = element; do { top += element.offsetTop || 0; left += element.offsetLeft || 0; element = element.offsetParent; } while(element); var style = document.createElement('style'); style.type = 'text/css'; style.innerHTML = '.mepwindow { background: transparent !important; }'; style.setAttribute('id', "mepwindowcss"); while (div.parentNode) { helper.attachTransparentClass(div,style) div = div.parentNode; } var rect={"x":left, "y":top, "width": width, "height":height} cordova.exec(function () {}, function(){}, pluginName, 'showMEPWindowInDiv', [rect,true]); }, /** * Show client dashboard window in a specific web element * This function will use existing window instance if has one, that means page won't reflect setting changes, eg.voice_message_enabled * Note: This function only works for client user since internal user doesn't have dashboard. * * @param {HTMLDivElement} div - The element where you want to embed MEP window, required to be transparent. */ showClientDashboardInDiv : function(div) { var top = 0, left = 0; var width = div.offsetWidth, height = div.offsetHeight; var element = div; mepwindowDiv = element; do { top += element.offsetTop || 0; left += element.offsetLeft || 0; element = element.offsetParent; } while(element); var style = document.createElement('style'); style.type = 'text/css'; style.innerHTML = '.mepwindow { background: transparent !important; }'; style.setAttribute('id', "mepwindowcss"); while (div.parentNode) { helper.attachTransparentClass(div,style) div = div.parentNode; } var rect={"x":left, "y":top, "width": width, "height":height} cordova.exec(function () {}, function(){}, pluginName, 'showClientDashboardInDiv', [rect]); }, /** * Make web element interactive when it is showing on MEP window * @param {HTMLDivElement} div - The element which needs to be interactive * */ makeDivInteractive:function(div) { var top = 0, left = 0; var width = div.offsetWidth, height = div.offsetHeight; var element = div; do { top += element.offsetTop || 0; left += element.offsetLeft || 0; element = element.offsetParent; } while(element); var rect={"x":left, "y":top, "width": width, "height":height} var divId = div.id || ""; cordova.exec(function () {}, function(){}, pluginName, 'makeDivInteractive', [rect, divId]); }, /** * Make web element noninteractive when it will be hidden or removed from MEP window. * IMPORTANT: This method is required to be triggered as a pair with makeDivInteractive, otherwise touch event on screen will be unpredictable. */ makeDivNoninteractive:function(div) { var divId = div.id || ""; cordova.exec(function () {}, function(){}, pluginName, 'makeDivNoninteractive', [divId]); }, /** * Open chat with chat ID and scroll to the specified feed if present. * * @param {string} chatID - The chat to open. * @param {string} feedSequence - The sequence of the scrolling target feed. * @param {function} success - Callback invoked when open succeed. * @param {function} failure - Callback invoked when open failed, with parameter like below: * { * "error_code":4 //error code * "error_message": 'no network' //Detail error message * } */ openChat : function(chatId, feedSequence, success, failure) { cordova.exec(success, failure, pluginName, 'openChat', [chatId, feedSequence]); }, /** * Show client live chat page * Note: This function only works for client user since internal user doesn't have live chat. * @param {options} reserved - Reserved parameter, you could pass null for now. * @param {function} success - Callback invoked when show succeed * @param {function} failure - Callback invoked when show failed, with parameter like below: * { * "error_code":4 //error code * "error_message": 'no network' //Detail error message * } */ openLiveChat: function(options, success, failure) { cordova.exec(success, failure, pluginName, 'openLiveChat', [options]); }, /** * Show client service reqeusts page * Note: This function only works for client user since internal user doesn't have service reqeusts. * @param {function} success - Callback invoked when show succeed * @param {function} failure - Callback invoked when show failed, with parameter like below: * { * "error_code":4 //error code * "error_message": 'no network' //Detail error message * } */ openServiceRequest: function(success, failure) { cordova.exec(success, failure, pluginName, 'openServiceRequest', []); }, /** * Start a meet with specific topic and members. Meeting screen will show up once meeting started succeed * * @param {string} topic - The meeting's topic, required * @param {array} uniqueIds - Unique id array of meeting members you intended to invite,optional. * @param {string} chatId - Id of the chat where you want to place meeting related messages, * @param {object} options - Additional options when start a meeting, optional. Supported key-values list below: * { * "auto_join_audio": true, //Boolean value, to join audio automaticaly or not, default is true. * "auto_start_video": true //Boolean value, to start video automaticaly or not, default is false. * } * @param {function} success - Callback invoked when start succeed, with parameter like below: * { * "session_id":"745831" //meeting session id * } * @param {function} failure - Callback invoked when start failed, with parameter like below: * { * "error_code":4 //error code * "error_message": 'no network' //Detail error message * } */ startMeet: function(topic, uniqueIds, chatId, options, success, failure) { cordova.exec(success, failure, pluginName, 'startMeet', [topic, uniqueIds, chatId, options]); }, /** * Start a meet with specific topic and members. Meeting screen will show up once meeting started succeed * * @param {string} topic - The meeting's topic, required * @param {array} uniqueIds - Unique id array of meeting members you intended to invite,optional * @param {string} chatId - Id of the chat where you want to place meeting related messages,optional. * @param {object} options - Additional options when schedule a meeting. Supported key-values list below: * { * "start_time": "1584693257208" //String value, planning meeting start time, required. * "end_time": "1584693557208" //String value, Planning meeting end time, required. * } * @param {function} success - Callback invoked when start succeed, with parameter like below: * { * "session_id":"745831" //meeting session id * } * @param {function} failure - Callback invoked when schedule failed, with parameter like below: * { * "error_code":4 //error code * "error_message": 'no network' //Detail error message * } */ scheduleMeet: function(topic, uniqueIds, chatId, options, success, failure) { cordova.exec(success, failure, pluginName, 'scheduleMeet', [topic, uniqueIds, chatId, options]); }, /** * Join a scheduled meeting as participant or start scheduled meeting as host. * @param {string} sessionId - The meeting's session id, required. * @param {function} success - Callback invoked when join succeed. * @param {function} failure - Callback invoked when join failed, with parameter like below: * { * "error_code":5 //error code * "error_message": 'object not found' //Detail error message * } */ joinMeet: function(sessionId, success, failure) { cordova.exec(success, failure, pluginName, 'joinMeet', [sessionId]); }, /** * Join a meeting anonymously. * @param {string} sessionId - The meeting's session id, required. * @param {object} options - Additional options when join a meeting anonymously. If currently there is a logged in user, options will be ignored. Supported key-values list below: * { * "display_name": "Kate Bell" //String value, as your name when join meeting , optional. * "email": "katebell@moxo.com" //String value, as your email when join meeting , optional. * } * @param {function} success - Callback invoked when join succeed. * @param {function} failure - Callback invoked when join failed, with parameter like below: * { * "error_code":5 //error code * "error_message": 'object not found' //Detail error message * } */ joinMeetAnonymously: function(sessionId, options, success, failure) { cordova.exec(success, failure, pluginName, 'joinMeetAnonymously', [sessionId,options]); }, /** * Get current user's unread messages count * @param {function} success - Callback invoked when get succeed, with an integer parameter which represents current unread messages count * @param {function} failure - Callback invoked when get failed, with parameter like below: * { * "error_code":3 //error code * "error_message": 'sdk not initialized' //Detail error message * } */ getUnreadMessageCount : function(success, failure) { cordova.exec(success, failure, pluginName, 'getUnreadMessageCount', []); }, /** * Register your device token for push notification * * @param {string} deviceToken - The device token. */ registerNotification : function(deviceToken) { cordova.exec(function () {}, function () {}, pluginName, 'registerNotification', [deviceToken]); }, /** * Verify notification is from MEP or not. * * @param {string} notificationPayload - The notification payload with json string format. * @param {function} callback - Callback that returns the notification is from mep or not, includes a boolean parameter. */ isMEPNotification : function(notificationPayload, callback) { cordova.exec(function (){callback(true);}, function () {callback(false);}, pluginName, 'isMEPNotification', [notificationPayload]); }, /** * Parse the notification to extract related info. * * @param {string} notificationPayload - The notification payload in json string format. * @param {function} success - Callback invoked when parsing succeed, with parameter like below: * { * //For chat: * "chat_id": "CBPErkesrtOeFfURA6gusJAD" * "feed_sequence": 191 * * //For meet: * "session_id": "255576178" * } * @param {function} failure - Callback invoked when parsing failed, with parameter like below: * { * "error_code": 0 * "error_message": "No network" //Detail error message * } */ parseRemoteNotification : function(notificationPayload, success, failure) { cordova.exec(success, failure, pluginName, 'parseRemoteNotification', [notificationPayload]); }, /** * Request MEP link state. * * @param {function} callback - Callback that returns the MEP is linked or not, includes a boolean parameter. */ isLinked : function(callback) { cordova.exec(function (){callback(true);}, function () {callback(false);}, pluginName, 'isLinked', []); }, /** * Unlink the account from the MEP service. */ unlink : function() { if (mepwindowDiv != null) { while(mepwindowDiv.parentNode) { helper.dettachTransparentClass(mepwindowDiv); mepwindowDiv = mepwindowDiv.parentNode; } } cordova.exec(function (){}, function () {}, pluginName, 'unlink', []); mepwindowDiv = null; }, /** * Set the callback when user log out. * Log out manually or kicked out by server, both cases will trigger the callback. * @param {function} callback - Would be invoked when user get logout. */ onLogout : function(callback) { cordova.exec(callback, callback, pluginName, 'onLogout', getCallbackParameters(callback, [])); }, /** * Set the callback when user clicked the join meeting button from timeline、calendar、 chat or ringer page * * @param {function} callback - Would be invoked when user clicked any join meeting button from timeline、calendar chat、or ringer page, with parameter like below: * { * "session_id": id of the meeting which user intend to join * } */ onJoinMeetButtonClicked : function(callback) { cordova.exec(callback, callback, pluginName, 'onJoinMeetButtonClicked', getCallbackParameters(callback, [])); }, /** * Set the callback when user clicked the call button from timeline、calendar or chat * * @param {function} callback - Would be invoked when user clicked any call button from timeline、calendar or chat, with parameter like below: * { * "chat_id": id of the chat where call button clicked if is triggered from chat page * "unique_ids": An array which includes all chat member's unique_id if is triggered from chat page * } */ onCallButtonClicked : function(callback) { cordova.exec(callback, callback, pluginName, 'onCallButtonClicked', getCallbackParameters(callback, [])); }, /** * Set the callback when user clicked the view button of meeting * * @param {function} callback - Would be invoked when user clicked view button of specific meeting, with parameter like below: * { * "session_id": id of the meeting which user intend to view * } */ onMeetViewButtonClicked : function(callback) { cordova.exec(callback, callback, pluginName, 'onMeetViewButtonClicked', getCallbackParameters(callback, [])); }, /** * Set the callback when user clicked the edit button of meeting * * @param {function} callback - Would be invoked when user clicked edit button of specific meeting, with parameter like below: * { * "session_id": id of the meeting which user intend to view * } */ onMeetEditButtonClicked : function(callback) { cordova.exec(callback, callback, pluginName, 'onMeetEditButtonClicked', getCallbackParameters(callback, [])); }, /** * Set the callback when user clicked the add member button inside the chat. * * @param {function} callback - Would be invoked when user clicked the add button, with parameter like below: * { * "chat_id": id of the chat where call button clicked * } */ onAddMemberInChatClicked : function(callback) { cordova.exec(callback, callback, pluginName, 'onAddMemberInChatClicked', getCallbackParameters(callback, [])); }, /** * Set the callback when user clicked the close button on top left of MEP window. If not set, sdk will do nothing. * * @param {function} callback - Would be invoked when user clicked the close button. */ onCloseButtonClicked : function(callback) { cordova.exec(callback, callback, pluginName, 'onCloseButtonClicked', getCallbackParameters(callback, [])); }, /** * Set the callback when user clicked the invite button in live meet. * If not set, the invite button will not show in live meet. * * @param {function} callback - Would be invoked when user clicked any invite button in live meet, with parameter like below: * { * "session_id": id of the meeting. * } */ onInviteButtonInLiveMeetClicked : function(callback) { cordova.exec(callback, callback, pluginName, 'onInviteButtonInLiveMeetClicked', getCallbackParameters(callback, [])); }, /** * Set the callback when unread messages count updated * * @param {function} callback - Would be invoked when user unread messages count updated, with an integer parameter which represents unread messages count post update */ onUnreadMessageCountUpdated : function(callback) { cordova.exec(callback, callback, pluginName, 'onUnreadMessageCountUpdated', getCallbackParameters(callback, [])); }, /** * Set the feature configuration. * * @param {Object} featureConfig - The feature configuration. * Below are the json key/default value/description list: * json key default value description * voice_message_enabled true Enable/Disable voice message feature. Default is enabled. */ setFeatureConfig : function(featureConfig) { cordova.exec(function() {}, function() {}, pluginName, 'setFeatureConfig', [featureConfig]); }, /** * For android only: switch main activity between other activities. * * @param {boolean} show - true to show main activity, and false to move main activity to background. */ switchMainPage: function(show) { cordova.exec(function() {}, function() {}, pluginName, 'switchMainPage', [show]); }, /** * Get current user's last active timestamp * @param {function} success - Callback invoked when get succeed, with an unix timestamp in milliseconds * @param {function} failure - Callback invoked when get failed, with parameter like below: * { * "error_code":3 //error code * "error_message": 'sdk not initialized' //Detail error message * } */ getLastActiveTimestamp: function(success, failure) { cordova.exec(success, failure, pluginName, 'getLastActiveTimestamp', []); }, /** * Set the callback when add user button in chat needs show/hide * * @param {function} callback - Would be invoked only when all pre-conditions satisfied. For example, the chat must be a group chat and current user has privilege to invite new member. And this callback MUST return a boolea value. * Parameter like below: * { * "chat_id": id of the chat where add user button in * } */ canAddUserInChat: function(callback) { if (callback != null) { cordova.exec(function(event) { var result = callback(event); cordova.exec(function () {}, function () {}, pluginName, 'setCanAddUserInChatResult', [result]); }, callback, pluginName, 'canAddUserInChat', getCallbackParameters(callback, [])); } else { cordova.exec(callback, callback, pluginName, 'canAddUserInChat', getCallbackParameters(callback, [])); } }, /** * Listen current user's unread messages per type. * @param {object} options - Additional options when get unread count message. Supported key-values list below: * { * "type": 5 //Which type of chat you intend to filter, 5 represents live chat, 6 represents service request. * } * @note This API only supports type 5(live chat) or type 6(service request) yet * @param {function} success - Callback invoked when get succeed, with an integer parameter which represents corresponding unread messages count * @param {function} failure - Callback invoked when get failed, with parameter like below: * { * "error_code":3 //error code * "error_message": 'sdk not initialized' //Detail error message * } */ getUnreadMessageCountWithOption : function(option, success, failure) { cordova.exec(success, failure, pluginName, 'getUnreadMessageCountWithOption', getCallbackParameters(success, [option])); }, /** * Show service request page in a specific web element * This function will use existing window instance if has one, that means page won't reflect setting changes, eg.voice_message_enabled * @param {HTMLDivElement} div - The element where you want to embed service request page, required to be transparent. * */ showServiceRequestInDiv : function(div) { var top = 0, left = 0; var width = div.offsetWidth, height = div.offsetHeight; var element = div; mepwindowDiv = element; do { top += element.offsetTop || 0; left += element.offsetLeft || 0; element = element.offsetParent; } while(element); var style = document.createElement('style'); style.type = 'text/css'; style.innerHTML = '.mepwindow { background: transparent !important; }'; style.setAttribute('id', "mepwindowcss"); while (div.parentNode) { helper.attachTransparentClass(div,style) div = div.parentNode; } var rect={"x":left, "y":top, "width": width, "height":height} cordova.exec(function () {}, function(){}, pluginName, 'showServiceRequestInDiv', [rect]); }, /** * Show live chat list page in a specific web element * This function will use existing window instance if has one, that means page won't reflect setting changes, eg.voice_message_enabled * @param {HTMLDivElement} div - The element where you want to embed live chat listpage, required to be transparent. * */ showLiveChatInDiv : function(div) { var top = 0, left = 0; var width = div.offsetWidth, height = div.offsetHeight; var element = div; mepwindowDiv = element; do { top += element.offsetTop || 0; left += element.offsetLeft || 0; element = element.offsetParent; } while(element); var style = document.createElement('style'); style.type = 'text/css'; style.innerHTML = '.mepwindow { background: transparent !important; }'; style.setAttribute('id', "mepwindowcss"); while (div.parentNode) { helper.attachTransparentClass(div,style) div = div.parentNode; } var rect={"x":left, "y":top, "width": width, "height":height} cordova.exec(function () {}, function(){}, pluginName, 'showLiveChatInDiv', [rect]); } }; module.exports = moxtra; </code></pre> </article> </section> </div> <nav> <h2><a href="index.html">Home</a></h2><h3>Namespaces</h3><ul><li><a href="moxtra.html">moxtra</a></li></ul> </nav> <br class="clear"> <footer> Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a> on Thu Jun 15 2023 17:05:16 GMT+0800 (中国标准时间) </footer> <script> prettyPrint(); </script> <script src="scripts/linenumber.js"> </script> </body> </html>