UNPKG

docx4js

Version:
131 lines (116 loc) 15.1 kB
"use strict"; var _cheerio = require("cheerio"); var _cheerio2 = _interopRequireDefault(_cheerio); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } _cheerio2.default.prototype.props = function () { var opt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; if (this.length == 0) return {}; var $ = this.constructor; var names = opt.names, _opt$nameFn = opt.nameFn, nameFn = _opt$nameFn === undefined ? function (a) { return names && names[a] || a; } : _opt$nameFn, _opt$__filter = opt.__filter, __filter = _opt$__filter === undefined ? '*' : _opt$__filter, _opt$tidy = opt.tidy, tidy = _opt$tidy === undefined ? function (a) { return a; } : _opt$tidy; var propsAttribs = function propsAttribs(attribs) { return Object.keys(attribs).filter(function (k) { return !k.startsWith("xmlns"); }).reduce(function (props, attribKey) { var value = attribs[attribKey]; attribKey = attribKey.split(":").pop(); var parsedValue = opt[attribKey] ? opt[attribKey](value) : value; if (parsedValue != undefined) { props[nameFn(attribKey)] = parsedValue; } return props; }, {}); }; var propsChild = function propsChild(node, parentProps, index) { var tagName = node.name.split(":").pop(); var parsed = opt[tagName] ? opt[tagName](node) : toJS(node); if (parsed != undefined) { var key = Array.isArray(parentProps) ? index : nameFn(tagName, node, parentProps); parentProps[key == "[]" ? tagName : key] = opt["tidy_" + tagName] ? opt["tidy_" + tagName](parsed) : parsed; } return parentProps; }; var toJS = function toJS(node, p) { var children = node.children, attribs = node.attribs, _node$name = node.name, name = _node$name === undefined ? "" : _node$name, _node$tagName = node.tagName, tagName = _node$tagName === undefined ? name.split(":").pop() : _node$tagName; return children.filter(function (a) { return a.name && $(a).is(__filter); }).reduce(function (parentProps, child, i) { return propsChild(child, parentProps, i); }, nameFn(tagName, node) === "[]" ? [] : propsAttribs(attribs)); }; var props = toJS(this[0]); return tidy ? tidy(props) : props; }; _cheerio2.default.prototype.forwardUntil = function (selector, filter) { var Empty = this.constructor.root().not(function (a) { return true; }); var $ = function $(n) { return Empty.not(function (a) { return true; }).add(n); }; var until = Empty, filtered = Empty; var next = this.get(0); var parentNext = function parentNext(node) { return node && node.parent && (node.parent.next || parentNext(node.parent)); }; var getNext = function getNext(node) { return node && (node.children && node.children[0] || node.next || parentNext(node)); }; while (next && (next = getNext(next))) { var $n = $(next); if ($n.is(selector)) { until = until.add(next); break; } else if (filter && $n.is(filter)) { filtered = filtered.add(next); } } return filter ? filtered : until; }; _cheerio2.default.prototype.backwardUntil = function (selector, filter) { var Empty = this.constructor.root().not(function (a) { return true; }); var $ = function $(n) { return Empty.not(function (a) { return true; }).add(n); }; var until = Empty, filtered = Empty; var prev = this.get(0); var parentPrev = function parentPrev(node) { return node && node.parent && (node.parent.prev || parentPrev(node.parent)); }; var getPrev = function getPrev(node) { return node && (node.children && node.children[node.children.length - 1] || node.prev || parentPrev(node)); }; while (prev && (prev = getPrev(prev))) { var $n = $(prev); if ($n.is(selector)) { until = until.add(prev); break; } else if (filter && $n.is(filter)) { filtered = filtered.add(next); } } return filter ? filtered : until; }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jaGVlcmlvLWZuLmpzIl0sIm5hbWVzIjpbInByb3RvdHlwZSIsInByb3BzIiwib3B0IiwibGVuZ3RoIiwiJCIsImNvbnN0cnVjdG9yIiwibmFtZXMiLCJuYW1lRm4iLCJhIiwiX19maWx0ZXIiLCJ0aWR5IiwicHJvcHNBdHRyaWJzIiwiT2JqZWN0Iiwia2V5cyIsImF0dHJpYnMiLCJmaWx0ZXIiLCJrIiwic3RhcnRzV2l0aCIsInJlZHVjZSIsImF0dHJpYktleSIsInZhbHVlIiwic3BsaXQiLCJwb3AiLCJwYXJzZWRWYWx1ZSIsInVuZGVmaW5lZCIsInByb3BzQ2hpbGQiLCJub2RlIiwicGFyZW50UHJvcHMiLCJpbmRleCIsInRhZ05hbWUiLCJuYW1lIiwicGFyc2VkIiwidG9KUyIsImtleSIsIkFycmF5IiwiaXNBcnJheSIsInAiLCJjaGlsZHJlbiIsImlzIiwiY2hpbGQiLCJpIiwiZm9yd2FyZFVudGlsIiwic2VsZWN0b3IiLCJFbXB0eSIsInJvb3QiLCJub3QiLCJhZGQiLCJuIiwidW50aWwiLCJmaWx0ZXJlZCIsIm5leHQiLCJnZXQiLCJwYXJlbnROZXh0IiwicGFyZW50IiwiZ2V0TmV4dCIsIiRuIiwiYmFja3dhcmRVbnRpbCIsInByZXYiLCJwYXJlbnRQcmV2IiwiZ2V0UHJldiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7Ozs7O0FBRUEsa0JBQVFBLFNBQVIsQ0FBa0JDLEtBQWxCLEdBQXdCLFlBQWdCO0FBQUEsUUFBUEMsR0FBTyx1RUFBSCxFQUFHOztBQUNwQyxRQUFHLEtBQUtDLE1BQUwsSUFBYSxDQUFoQixFQUNJLE9BQU8sRUFBUDtBQUNKLFFBQU1DLElBQUUsS0FBS0MsV0FBYjs7QUFIb0MsUUFJN0JDLEtBSjZCLEdBSStCSixHQUovQixDQUk3QkksS0FKNkI7QUFBQSxzQkFJK0JKLEdBSi9CLENBSXRCSyxNQUpzQjtBQUFBLFFBSXRCQSxNQUpzQiwrQkFJZjtBQUFBLGVBQUdELFNBQU9BLE1BQU1FLENBQU4sQ0FBUCxJQUFpQkEs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QVIsQ0FBZCxDQUFOLEVBQW1DO0FBQy9CLFlBQUlGLEtBQUduRCxFQUFFcUQsSUFBRixDQUFQO0FBQ0EsWUFBR0YsR0FBR2pCLEVBQUgsQ0FBTUksUUFBTixDQUFILEVBQW1CO0FBQ2ZNLG9CQUFNQSxNQUFNRixHQUFOLENBQVVXLElBQVYsQ0FBTjtBQUNBO0FBQ0gsU0FIRCxNQUdNLElBQUcxQyxVQUFVd0MsR0FBR2pCLEVBQUgsQ0FBTXZCLE1BQU4sQ0FBYixFQUEyQjtBQUM3QmtDLHVCQUFTQSxTQUFTSCxHQUFULENBQWFJLElBQWIsQ0FBVDtBQUNIO0FBQ0o7QUFDRCxXQUFPbkMsU0FBU2tDLFFBQVQsR0FBb0JELEtBQTNCO0FBQ0gsQ0FsQkQiLCJmaWxlIjoiY2hlZXJpby1mbi5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGVlcmlvIGZyb20gXCJjaGVlcmlvXCJcblxuY2hlZXJpby5wcm90b3R5cGUucHJvcHM9ZnVuY3Rpb24ob3B0PXt9KXtcbiAgICBpZih0aGlzLmxlbmd0aD09MClcbiAgICAgICAgcmV0dXJuIHt9XG4gICAgY29uc3QgJD10aGlzLmNvbnN0cnVjdG9yXG4gICAgY29uc3Qge25hbWVzLCBuYW1lRm49YT0+bmFtZXMmJm5hbWVzW2FdfHxhLF9fZmlsdGVyPScqJyx0aWR5PWE9PmF9PW9wdFxuXG4gICAgY29uc3QgcHJvcHNBdHRyaWJzPWF0dHJpYnM9Pk9iamVjdC5rZXlzKGF0dHJpYnMpXG4gICAgICAgIC5maWx0ZXIoaz0+IWsuc3RhcnRzV2l0aChcInhtbG5zXCIpKVxuICAgICAgICAucmVkdWNlKChwcm9wcyxhdHRyaWJLZXkpPT57XG4gICAgICAgICAgICBjb25zdCB2YWx1ZT1hdHRyaWJzW2F0dHJpYktleV1cbiAgICAgICAgICAgIGF0dHJpYktleT1hdHRyaWJLZXkuc3BsaXQoXCI6XCIpLnBvcCgpXG4gICAgICAgICAgICBjb25zdCBwYXJzZWRWYWx1ZT1vcHRbYXR0cmliS2V5XSA/IG9wdFthdHRyaWJLZXldKHZhbHVlKSA6IHZhbHVlXG4gICAgICAgICAgICBpZihwYXJzZWRWYWx1ZSE9dW5kZWZpbmVkKXtcbiAgICAgICAgICAgICAgICBwcm9wc1tuYW1lRm4oYXR0cmliS2V5KV09cGFyc2VkVmFsdWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwcm9wc1xuICAgICAgICB9LHt9KVxuXG5cdGNvbnN0IHByb3BzQ2hpbGQ9KG5vZGUscGFyZW50UHJvcHMsaW5kZXgpPT57XG4gICAgICAgIGNvbnN0IHRhZ05hbWU9bm9kZS5uYW1lLnNwbGl0KFwiOlwiKS5wb3AoKVxuICAgICAgICBjb25zdCBwYXJzZWQ9b3B0W3RhZ05hbWVdP29wdFt0YWdOYW1lXShub2RlKTp0b0pTKG5vZGUpXG4gICAgICAgIGlmKHBhcnNlZCE9dW5kZWZpbmVkKXtcbiAgICAgICAgICAgIGNvbnN0IGtleT0gQXJyYXkuaXNBcnJheShwYXJlbnRQcm9wcykgPyBpbmRleCA6IG5hbWVGbih0YWdOYW1lLG5vZGUscGFyZW50UHJvcHMpXG4gICAgICAgICAgICBwYXJlbnRQcm9wc1trZXk9PVwiW11cIj8gdGFnTmFtZSA6IGtleV09b3B0W2B0aWR5XyR7dGFnTmFtZX1gXSA/IG9wdFtgdGlkeV8ke3RhZ05hbWV9YF0ocGFyc2VkKSA6IHBhcnNlZFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJlbnRQcm9wc1xuICAgIH1cblxuICAgIGNvbnN0IHRvSlM9KG5vZGUscCk9PntcbiAgICAgICAgY29uc3R7Y2hpbGRyZW4sYXR0cmlicyxuYW1lPVwiXCIsdGFnTmFtZT1uYW1lLnNwbGl0KFwiOlwiKS5wb3AoKX09bm9kZVxuICAgICAgICByZXR1cm4gY2hpbGRyZW5cbiAgICAgICAgICAgIC5maWx0ZXIoYT0+YS5uYW1lICYmICQoYSkuaXMoX19maWx0ZXIpKVxuICAgICAgICAgICAgLnJlZHVjZShcbiAgICAgICAgICAgICAgICAocGFyZW50UHJvcHMsY2hpbGQsaSk9PnByb3BzQ2hpbGQoY2hpbGQscGFyZW50UHJvcHMsaSksXG4gICAgICAgICAgICAgICAgbmFtZUZuKHRhZ05hbWUsbm9kZSk9PT1cIltdXCIgPyBbXSA6IHByb3BzQXR0cmlicyhhdHRyaWJzKVxuICAgICAgICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IHByb3BzPXRvSlModGhpc1swXSlcblxuICAgIHJldHVybiB0aWR5ID8gdGlkeShwcm9wcykgOiBwcm9wc1xufVxuXG5jaGVlcmlvLnByb3RvdHlwZS5mb3J3YXJkVW50aWw9ZnVuY3Rpb24oc2VsZWN0b3IsZmlsdGVyKXtcbiAgICBjb25zdCBFbXB0eT10aGlzLmNvbnN0cnVjdG9yLnJvb3QoKS5ub3QoYT0+dHJ1ZSlcbiAgICBjb25zdCAkPW49PkVtcHR5Lm5vdChhPT50cnVlKS5hZGQobilcbiAgICBsZXQgdW50aWw9RW1wdHksIGZpbHRlcmVkPUVtcHR5XG5cbiAgICBsZXQgbmV4dD10aGlzLmdldCgwKVxuICAgIGNvbnN0IHBhcmVudE5leHQ9bm9kZT0+bm9kZSYmKG5vZGUucGFyZW50ICYmIChub2RlLnBhcmVudC5uZXh0IHx8IHBhcmVudE5leHQobm9kZS5wYXJlbnQpKSlcbiAgICBjb25zdCBnZXROZXh0PW5vZGU9Pm5vZGUgJiYgKChub2RlLmNoaWxkcmVuJiZub2RlLmNoaWxkcmVuWzBdKXx8bm9kZS5uZXh0fHxwYXJlbnROZXh0KG5vZGUpKVxuICAgIHdoaWxlKG5leHQgJiYgKG5leHQ9Z2V0TmV4dChuZXh0KSkpe1xuICAgICAgICBsZXQgJG49JChuZXh0KVxuICAgICAgICBpZigkbi5pcyhzZWxlY3Rvcikpe1xuICAgICAgICAgICAgdW50aWw9dW50aWwuYWRkKG5leHQpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICB9ZWxzZSBpZihmaWx0ZXIgJiYgJG4uaXMoZmlsdGVyKSl7XG4gICAgICAgICAgICBmaWx0ZXJlZD1maWx0ZXJlZC5hZGQobmV4dClcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmlsdGVyID8gZmlsdGVyZWQgOiB1bnRpbFxufVxuY2hlZXJpby5wcm90b3R5cGUuYmFja3dhcmRVbnRpbD1mdW5jdGlvbihzZWxlY3RvcixmaWx0ZXIpe1xuICAgIGNvbnN0IEVtcHR5PXRoaXMuY29uc3RydWN0b3Iucm9vdCgpLm5vdChhPT50cnVlKVxuICAgIGNvbnN0ICQ9bj0+RW1wdHkubm90KGE9PnRydWUpLmFkZChuKVxuICAgIGxldCB1bnRpbD1FbXB0eSwgZmlsdGVyZWQ9RW1wdHlcblxuICAgIGxldCBwcmV2PXRoaXMuZ2V0KDApXG4gICAgY29uc3QgcGFyZW50UHJldj1ub2RlPT5ub2RlICYmIChub2RlLnBhcmVudCAmJiAobm9kZS5wYXJlbnQucHJldiB8fCBwYXJlbnRQcmV2KG5vZGUucGFyZW50KSkpXG4gICAgY29uc3QgZ2V0UHJldj1ub2RlPT5ub2RlICYmICgobm9kZS5jaGlsZHJlbiYmbm9kZS5jaGlsZHJlbltub2RlLmNoaWxkcmVuLmxlbmd0aC0xXSl8fG5vZGUucHJldnx8cGFyZW50UHJldihub2RlKSlcbiAgICB3aGlsZShwcmV2ICYmIChwcmV2PWdldFByZXYocHJldikpKXtcbiAgICAgICAgbGV0ICRuPSQocHJldilcbiAgICAgICAgaWYoJG4uaXMoc2VsZWN0b3IpKXtcbiAgICAgICAgICAgIHVudGlsPXVudGlsLmFkZChwcmV2KVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgfWVsc2UgaWYoZmlsdGVyICYmICRuLmlzKGZpbHRlcikpe1xuICAgICAgICAgICAgZmlsdGVyZWQ9ZmlsdGVyZWQuYWRkKG5leHQpXG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlciA/IGZpbHRlcmVkIDogdW50aWxcbn1cbiJdfQ==