UNPKG

kyper-matter

Version:

Library to provide simple application functionality like authentication and local/session/token storage for Tesselate applications.

118 lines (109 loc) 3.52 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.isBrowser = isBrowser; exports.loadCss = loadCss; exports.loadJs = loadJs; exports.asyncLoadJs = asyncLoadJs; exports.getQueryParam = getQueryParam; var _logger = require('./logger'); var _logger2 = _interopRequireDefault(_logger); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * @description Checks to see if current context is a browser * @return {Boolean} */ function isBrowser() { return typeof window !== 'undefined' && typeof document !== 'undefined'; } /** * @description Appends given css source to DOM head. * @param {String} src - url src for css to append */ function loadCss(src) { if (!isBrowser()) { _logger2.default.error({ description: 'Load CSS only works within browsers.', func: 'loadCss', obj: 'dom' }); throw new Error('Document object is required to load assets.'); } var css = document.createElement('link'); css.rel = 'stylesheet'; css.type = 'text/css'; css.href = src; document.getElementsByTagName('head')[0].insertBefore(css, document.getElementsByTagName('head')[0].firstChild); _logger2.default.debug({ description: 'CSS was loaded into document.', element: css, func: 'loadCss', obj: 'dom' }); // Return link element return css; } /** * @description Appends given javascript source to DOM head. * @param {String} src - url src for javascript to append */ function loadJs(src) { if (!isBrowser()) { _logger2.default.error({ description: 'Document does not exsist to load assets into.', func: 'loadJs', obj: 'dom' }); throw new Error('Document object is required to load assets.'); } var js = window.document.createElement('script'); js.src = src; js.type = 'text/javascript'; window.document.getElementsByTagName('head')[0].appendChild(js); _logger2.default.debug({ description: 'JS was loaded into document.', element: js, func: 'loadJs', obj: 'dom' }); // Return script element return js; } /** * @description Appends given javascript source to DOM head. * @param {String} src - url src for javascript to append * */ function asyncLoadJs(src) { if (!isBrowser()) { _logger2.default.error({ description: 'Document does not exsist to load assets into.', func: 'asyncLoadJs', obj: 'dom' }); throw new Error('Document object is required to load assets.'); } var js = window.document.createElement('script'); js.src = src; js.type = 'text/javascript'; window.document.getElementsByTagName('head')[0].appendChild(js); _logger2.default.log({ description: 'JS was loaded into document.', element: js, func: 'asyncLoadJs', obj: 'dom' }); return new Promise(function (resolve) { window.setTimeout(resolve, 200); }); } /** * @description Get query param from current location/url * @param {String} name - Name of query parameter to get * */ function getQueryParam(name) { if (!isBrowser()) { _logger2.default.error({ description: 'Browser is required to get query params.', func: 'asyncLoadJs', obj: 'dom' }); throw new Error('Query parameters are only available within browsers.'); } name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]'); var regex = new RegExp('[\\?&]' + name + '=([^&#]*)'); var results = regex.exec(window.location.search); return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' ')); }