UNPKG

pogojs

Version:

Library to accompany the Pogo stack

512 lines (385 loc) 14.3 kB
(function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(); else if(typeof define === 'function' && define.amd) define([], factory); else if(typeof exports === 'object') exports["pogojs"] = factory(); else root["pogojs"] = factory(); })(this, function() { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { /******/ configurable: false, /******/ enumerable: true, /******/ get: getter /******/ }); /******/ } /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 5); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var hyphenToCamelCase = function hyphenToCamelCase(str) { return str.replace(/\b-([a-z])/g, function (all, char) { return char.toUpperCase(); }); }; exports.default = hyphenToCamelCase; /***/ }), /* 1 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var each = function each(array, func) { for (var i = 0; i < array.length; i++) { func(array[i], i); } }; exports.default = each; /***/ }), /* 2 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var pogoMap = {}; /** * Adds items to a function map * @param {Object} ...params - * @param {key} func - the function to be called * @param {key} type - the event type or 'immediate' to be called on load * @param {key} hook - the related `pogo-` class */ function register() { for (var _len = arguments.length, params = Array(_len), _key = 0; _key < _len; _key++) { params[_key] = arguments[_key]; } params.map(function (item) { var hook = item.hook, type = item.type, func = item.func; if (!pogoMap[hook]) pogoMap[hook] = []; pogoMap[hook].push({ func: func, type: type }); }); } function getMap() { return pogoMap; } exports.getMap = getMap; exports.register = register; /***/ }), /* 3 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.pogoState = exports.updatePogoState = exports.fetchPogoState = undefined; var _pogoStreams = __webpack_require__(4); function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } var pogoState = {}; function updatePogoState(newState) { Object.assign(pogoState, newState); _pogoStreams.publish.apply(undefined, _toConsumableArray(Object.keys(newState))); } function fetchPogoState(key) { return pogoState[key]; } exports.fetchPogoState = fetchPogoState; exports.updatePogoState = updatePogoState; exports.pogoState = pogoState; /***/ }), /* 4 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.unsubscribe = exports.subscribe = exports.publish = undefined; var _pogoState = __webpack_require__(3); var _arrayContainsFunction = __webpack_require__(9); var _arrayContainsFunction2 = _interopRequireDefault(_arrayContainsFunction); var _arrayContainsString = __webpack_require__(11); var _arrayContainsString2 = _interopRequireDefault(_arrayContainsString); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var subscribers = {}; var isAlreadySubscribed = function isAlreadySubscribed(stream, cb, callerId) { return (0, _arrayContainsString2.default)(subscribers[stream].callers, callerId) && (0, _arrayContainsFunction2.default)(subscribers[stream].callbacks, cb); }; function subscribe(streams, cb, callerId) { var subs = streams.trim().split(/\s+/); subs.map(function (stream) { subscribers[stream] = subscribers[stream] || { callbacks: [], callers: [] }; // Prevent functions being subscribed multiple times if (!isAlreadySubscribed(stream, cb, callerId)) { subscribers[stream].callers.push(callerId); subscribers[stream].callbacks.push(cb); } }); } function unsubscribe(stream, cb) { var subs = subscribers[stream].callers || []; subs.map(function (s, i) { if (subscribers[stream].callbacks[i] === cb) { subscribers[stream].callbacks[i].splice(i, 1); } }); } function publish() { for (var _len = arguments.length, streams = Array(_len), _key = 0; _key < _len; _key++) { streams[_key] = arguments[_key]; } streams.map(function (stream) { if (subscribers[stream]) { var callbacks = subscribers[stream].callbacks || []; callbacks.map(function (cb) { cb(_pogoState.pogoState[stream] || {}); }); } }); } exports.publish = publish; exports.subscribe = subscribe; exports.unsubscribe = unsubscribe; /***/ }), /* 5 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.unsubscribe = exports.updatePogoState = exports.subscribe = exports.register = exports.publish = exports.pogoState = exports.pogoset = exports.getMap = exports.fetchPogoState = exports.bind = undefined; var _pogoset = __webpack_require__(6); var _pogoset2 = _interopRequireDefault(_pogoset); var _pogoBind = __webpack_require__(8); var _pogoBind2 = _interopRequireDefault(_pogoBind); var _pogoMap = __webpack_require__(2); var _pogoState = __webpack_require__(3); var _pogoStreams = __webpack_require__(4); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } exports.bind = _pogoBind2.default; exports.fetchPogoState = _pogoState.fetchPogoState; exports.getMap = _pogoMap.getMap; exports.pogoset = _pogoset2.default; exports.pogoState = _pogoState.pogoState; exports.publish = _pogoStreams.publish; exports.register = _pogoMap.register; exports.subscribe = _pogoStreams.subscribe; exports.updatePogoState = _pogoState.updatePogoState; exports.unsubscribe = _pogoStreams.unsubscribe; /***/ }), /* 6 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _getCustomAttributeSet = __webpack_require__(7); var _getCustomAttributeSet2 = _interopRequireDefault(_getCustomAttributeSet); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * Creates `dataset` type functionality for `pogo-` attributes * @param {Node} el - the element to check for attributes * @return {Object} pogo attributes wiithin the element in camelcase with the prefix `pogo-` removed */ var pogoset = function pogoset(el) { return (0, _getCustomAttributeSet2.default)(el, 'pogo-'); }; exports.default = pogoset; /***/ }), /* 7 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _hyphenToCamelCase = __webpack_require__(0); var _hyphenToCamelCase2 = _interopRequireDefault(_hyphenToCamelCase); var _each = __webpack_require__(1); var _each2 = _interopRequireDefault(_each); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var getCustomAttributeSet = function getCustomAttributeSet(el) { var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; var attributeSet = {}; (0, _each2.default)(el.attributes, function (attribute) { var att = attribute.nodeName.toLowerCase(); if (att.length >= prefix.length && att.substring(0, prefix.length) === prefix) { attributeSet[(0, _hyphenToCamelCase2.default)(att.substring(prefix.length, att.length))] = attribute.nodeValue; } }); return attributeSet; }; exports.default = getCustomAttributeSet; /***/ }), /* 8 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _pogoMap = __webpack_require__(2); var _each = __webpack_require__(1); var _each2 = _interopRequireDefault(_each); var _hyphenToCamelCase = __webpack_require__(0); var _hyphenToCamelCase2 = _interopRequireDefault(_hyphenToCamelCase); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } var pogoMap = (0, _pogoMap.getMap)(); /** * Gets all `pogo-` classes and either binds events or triggers their initialisation functions by * checking them against the function map. * @param {Node} context [document] - The element to check for `pogo-` classes. */ function pogoBind() { var context = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : document; var pogoEls = context.querySelectorAll('[class*="pogo-"]'); var onloadFuncs = []; (0, _each2.default)(pogoEls, function (el) { var hooks = el.className.match(/pogo-[a-z\d-_]+/ig); hooks.map(function (hook) { var key = (0, _hyphenToCamelCase2.default)(hook.slice(5)); // removes `pogo-` if (pogoMap[key]) { pogoMap[key].map(function (item) { var type = item.type, func = item.func; if (type === 'immediate') { onloadFuncs = [].concat(_toConsumableArray(onloadFuncs), [func.bind(null, el, context)]); } else { el.addEventListener(type, func); } }); } }); }); // Remove and execute all functions that are supposed to trigger immediately onload // not just event bindings while (onloadFuncs.length > 0) { onloadFuncs.shift()(); } } exports.default = pogoBind; /***/ }), /* 9 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _functionsMatch = __webpack_require__(10); var _functionsMatch2 = _interopRequireDefault(_functionsMatch); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var arrayContainsFunction = function arrayContainsFunction(arr, func) { return arr.some(function (f) { return (0, _functionsMatch2.default)(f, func); }); }; exports.default = arrayContainsFunction; /***/ }), /* 10 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var functionsMatch = function functionsMatch(f1, f2) { return String(f1) === String(f2); }; exports.default = functionsMatch; /***/ }), /* 11 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _stringsMatch = __webpack_require__(12); var _stringsMatch2 = _interopRequireDefault(_stringsMatch); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var arrayContainsString = function arrayContainsString(arr, str) { return arr.some(function (s) { return (0, _stringsMatch2.default)(s, str); }); }; exports.default = arrayContainsString; /***/ }), /* 12 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var stringsMatch = function stringsMatch(str1, str2) { return str1.toUpperCase() === str2.toUpperCase(); }; exports.default = stringsMatch; /***/ }) /******/ ]); }); //# sourceMappingURL=index.umd.js.map