UNPKG

baseframe-js

Version:

A suite of useful Javascript plugins and functions to help with Front-end Development on websites

128 lines (127 loc) 6.35 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.toUrl = exports.setHashVal = exports.set = exports.refresh = exports.print = exports.get = exports["default"] = void 0; var _cashDom = _interopRequireDefault(require("cash-dom")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } var EVENT_NAME = 'UrlState'; var urlStateMap = new Map([['search', new URLSearchParams(location.search.replace('?', ''))], ['hash', new URLSearchParams(location.hash.replace('#', ''))]]); var toUrl = exports.toUrl = function toUrl() { var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'replace'; var vals = ''; var hash = urlStateMap.get('hash').toString(); var search = urlStateMap.get('search').toString(); search !== '' ? vals += '?' + search : vals += location.href.split(/(\?|\#)/)[0]; if (hash !== '') vals += '#' + hash; // clean-up vals = vals.replace(/(\=\&)+/g, '&').replace(/\=$/, ''); state === "replace" ? history.replaceState(null, '', vals) : history.pushState(null, '', vals); }; var setHashVal = exports.setHashVal = function setHashVal(value, state) { var params = urlStateMap.get('hash'); var _iterator = _createForOfIteratorHelper(params.keys()), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var key = _step.value; params["delete"](key); } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } if (value !== null) params.set(value, ''); if (state) { toUrl(state); } }; var set = exports.set = function set(type, paramName, value, state) { if (type === 'hashVal') { console.warn("use 'setHashVal' method for setting only the hash val"); return; } var params = urlStateMap.get(type); if (value === null) { params.has(paramName) && params["delete"](paramName); } else { var isArray = Array.isArray(value); var adjustedVal = isArray ? "[".concat(value.join(','), "]") : value; params.set(paramName, adjustedVal); } if (state) { toUrl(state); } }; var get = exports.get = function get(type, paramName) { var params = urlStateMap.get(type); if (type === 'hashVal') { return location.hash.replace('#', ''); } if (params.has(paramName)) { var rawVal = params.get(paramName).trim(); if (rawVal.slice(0, 1) === '[' && rawVal.slice(-1) === ']') { var valSplits = rawVal.slice(1, -1).split(','); return valSplits.map(function (el) { return !/\D/.test(el) ? +el : el; }); } else { return rawVal; } } return null; }; var refresh = exports.refresh = function refresh() { var on = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; if (on) { (0, _cashDom["default"])(window).off("popstate.".concat(EVENT_NAME)).on("popstate.".concat(EVENT_NAME), function () { urlStateMap.set('search', new URLSearchParams(location.search.replace('?', ''))); urlStateMap.set('hash', new URLSearchParams(location.hash.replace('#', ''))); }); } else { (0, _cashDom["default"])(window).off("popstate.".concat(EVENT_NAME)); } }; // print URL params var print = exports.print = function print(type, options) { var params = urlStateMap.get(type), defaultOptions = { pattern: 'normal', brackets: true }, _Object$assign = Object.assign(defaultOptions, options), pattern = _Object$assign.pattern, brackets = _Object$assign.brackets, bkts = brackets ? '[]' : ''; if (pattern === 'repeat') { return _toConsumableArray(params.keys()).map(function (key) { var val = get(type, key); if (Array.isArray(val)) { return val.map(function (el) { return "".concat(key).concat(bkts, "=").concat(encodeURIComponent(el)); }).join('&'); } return "".concat(key, "=").concat(val); }).join('&'); } return params.toString(); }; // run refresh initially refresh(); var UrlState = { refresh: refresh, print: print, toUrl: toUrl, set: set, setHashVal: setHashVal, get: get }; var _default = exports["default"] = UrlState;