glance-dom
Version:
Glance DOM library
186 lines (164 loc) • 5.63 kB
JavaScript
;
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;
;