pogojs
Version:
Library to accompany the Pogo stack
512 lines (385 loc) • 14.3 kB
JavaScript
(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__) {
;
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__) {
;
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__) {
;
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__) {
;
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__) {
;
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__) {
;
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__) {
;
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__) {
;
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__) {
;
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__) {
;
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__) {
;
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__) {
;
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__) {
;
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