jiti-meet/utils.js

65 lines
2.1 KiB
JavaScript

/* global config */
/**
* Defines some utility methods that are used before the other JS files are
* loaded.
*/
/**
* Builds and returns the room name.
*/
function getRoomName () { // eslint-disable-line no-unused-vars
var getroomnode = config.getroomnode;
var path = window.location.pathname;
var roomName;
// Determine the room node from the URL.
if (getroomnode && typeof getroomnode === 'function') {
// custom function might be responsible for doing the pushstate
roomName = getroomnode.call(config, path);
} else {
// Fall back to the default strategy of making assumptions about how the
// URL maps to the room (name). It currently assumes a deployment in
// which the last non-directory component of the path (name) is the
// room.
roomName
= path.substring(path.lastIndexOf('/') + 1).toLowerCase()
|| undefined;
}
return roomName;
}
/**
* Parses the parameters from the URL and returns them as a JS object.
* @param source {string} values - "hash"/"search" if "search" the parameters
* will parsed from location.search otherwise from location.hash
* @param dontParse if false or undefined some transformations
* (for parsing the value as JSON) are going to be executed
*/
// eslint-disable-next-line no-unused-vars
function getConfigParamsFromUrl(source, dontParse) {
var paramStr = (source === "search")? location.search : location.hash;
if (!paramStr)
return {};
paramStr = paramStr.substr(1);
var result = {};
paramStr.split("&").forEach(function (part) {
var item = part.split("=");
var value;
try {
value = (dontParse)? item[1] : JSON.parse(
decodeURIComponent(item[1]).replace(/\\&/, "&"));
} catch (e) {
console.warn("Failed to parse URL argument", e);
if(window.onerror)
window.onerror("Failed to parse URL argument", null, null,
null, e);
return;
}
result[item[0]] = value;
});
return result;
}