UNPKG

glance-dom

Version:
186 lines (164 loc) 5.63 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _reduce = require('@arr/reduce'); var _reduce2 = _interopRequireDefault(_reduce); var _filter = require('@arr/filter'); var _filter2 = _interopRequireDefault(_filter); var _map = require('@arr/map'); var _map2 = _interopRequireDefault(_map); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var Extensions = function () { function Extensions() { var extensions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; _classCallCheck(this, Extensions); this.extensions = extensions; } _createClass(Extensions, [{ key: 'add', value: function add(extension) { this.extensions = this.extensions.concat(extension); } }, { key: 'getLocatorForLabel', value: function getLocatorForLabel(text) { var labels = Extensions.labels(this.extensions); var label = labels[text]; return label ? this.getLocator(label.locate || label) : function () { return []; }; } }, { key: 'getLocatorForOption', value: function getLocatorForOption(name, label) { var options = Extensions.options(this.extensions); var option = options[name]; return option ? this.getLocator(option.locate) : this.getDynamicLocator(name, label); } }, { key: 'getDynamicLocator', value: function getDynamicLocator(option, label) { var catchAlls = (0, _map2.default)((0, _filter2.default)(this.extensions, function (e) { return e.locator ? e.locator.check({ label: label, option: option }) : false; }), function (e) { return e.locator.locate; }); if (catchAlls.length > 0) { return function (data) { return (0, _reduce2.default)(catchAlls, function (result, locate) { return result.concat(locate(data)); }, []); }; } } }, { key: 'getLocator', value: function getLocator(locator) { if (Object.prototype.toString.call(locator) === '[object Array]') { return function (_ref) { var glanceDOM = _ref.glanceDOM; return (0, _reduce2.default)(locator, function (result, label) { return result.concat(glanceDOM(label), []); }, []); }; } else if (typeof locator === 'string') { return function (_ref2) { var glanceDOM = _ref2.glanceDOM; return glanceDOM(locator); }; } else if (typeof locator === 'function') { return locator; } return function () { return []; }; } }, { key: 'getFilterForOption', value: function getFilterForOption(name, label) { var options = Extensions.options(this.extensions); var option = options[name]; if (option) return typeof option === 'function' ? option : option.filter;else return this.getDynamicFilter(name, label); } }, { key: 'getDynamicFilter', value: function getDynamicFilter(option, label) { var catchAlls = (0, _map2.default)((0, _filter2.default)(this.extensions, function (e) { return e.filter ? e.filter.check({ label: label, option: option }) : false; }), function (e) { return e.filter.filter; }); if (catchAlls.length > 0) { return function (data) { return (0, _reduce2.default)(catchAlls, function (result, filter) { return result.concat(filter(data)); }, []); }; } } }, { key: 'getExtensions', value: function getExtensions() { return this.extensions; } }, { key: 'getLabels', value: function getLabels() { return Extensions.labels(this.extensions); } }, { key: 'getOptions', value: function getOptions() { return Extensions.options(this.extensions); } }, { key: 'getBeforeAllHooks', value: function getBeforeAllHooks() { return (0, _map2.default)((0, _filter2.default)(this.extensions, function (e) { return e.beforeAll; }), function (e) { return e.beforeAll; }); } }, { key: 'getAfterAllHooks', value: function getAfterAllHooks() { return (0, _map2.default)((0, _filter2.default)(this.extensions, function (e) { return e.afterAll; }), function (e) { return e.afterAll; }); } }], [{ key: 'labels', value: function labels(extensions) { return (0, _reduce2.default)((0, _filter2.default)(extensions, function (e) { return e.labels; }), function (l, e) { return _extends({}, l, e.labels); }, {}); } }, { key: 'options', value: function options(extensions) { return (0, _reduce2.default)((0, _filter2.default)(extensions, function (e) { return e.options; }), function (l, e) { return _extends({}, l, e.options); }, {}); } }]); return Extensions; }(); exports.default = Extensions; ;