@awesome-fe/translate
Version:
Translation utils
110 lines • 5.23 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.BaseNodeRenderer = void 0;
var match_some_1 = require("./utils/match-some");
var lodash_1 = require("lodash");
var BaseNodeRenderer = /** @class */ (function () {
function BaseNodeRenderer() {
this.ignoredAttributeNames = [];
this.globalIgnoredAttributeNames = ['attribute_entries', 'title', 'target'];
this.positionalAttributes = [];
this.inlineAttributeNames = [];
}
BaseNodeRenderer.prototype.isInlineAttribute = function (it) {
return (0, match_some_1.matchSome)(it.name, this.inlineAttributeNames);
};
BaseNodeRenderer.prototype.getAttributes = function (node) {
var _this = this;
var $$keys = node.attributes.$$keys;
var result = $$keys
.map(function ($$key) {
var _a;
if (typeof $$key === 'string') {
var position = (_a = _this.positionalAttributes.find(function (it) { return it.name === $$key; })) === null || _a === void 0 ? void 0 : _a.position;
return [
{ position: undefined, name: $$key, value: node.getAttribute($$key), negate: false },
position && { position: position, name: $$key, value: node.getAttribute($$key), negate: false },
];
}
var positionalAttribute = _this.positionalAttributes.find(function (it) { return it.position === $$key.key; });
if (positionalAttribute) {
var name = positionalAttribute.name;
// 由于 setAttribute 不会更改 $$keys 中的 value,因此这里要重新取一下属性值
var value = node.getAttribute(name);
return { position: $$key.key, name: name, value: value, negate: false };
}
else {
return { position: $$key.key, name: '1', value: $$key.value, negate: false };
}
})
.flat()
.filter(function (it) { return !!it; })
.filter(function (it) { return !(0, match_some_1.matchSome)(it.name, __spreadArray(__spreadArray([], _this.globalIgnoredAttributeNames, true), _this.ignoredAttributeNames, true)); });
var uniqAttributes = (0, lodash_1.uniqBy)(result, function (it) { return "".concat(it.position, "-").concat(it.name, "=").concat(it.value); });
return moveIdToFirst(uniqAttributes.filter(function (it) { return !correspondingPositionalExists(it, result); }));
};
BaseNodeRenderer.prototype.getDefaultAttributes = function (node) {
return {};
};
BaseNodeRenderer.prototype.getNonDefaultAttributes = function (node) {
var defaultAttributes = this.getDefaultAttributes(node);
return this.getAttributes(node).map(function (attr) {
if (defaultAttributes[attr.name] === attr.value) {
return;
}
else if (attr.name === 'options') {
return __assign(__assign({}, attr), { value: attr.value.split(',').map(function (subValue) { return subValue.trim(); })
.filter(function (it) { return defaultAttributes[attr.name] !== it; })
.join(',') });
}
else {
return attr;
}
}).filter(function (it) { return !!it; });
};
BaseNodeRenderer.prototype.getBlockAttributes = function (node) {
var _this = this;
return this.getNonDefaultAttributes(node).filter(function (it) { return !_this.isInlineAttribute(it); });
};
BaseNodeRenderer.prototype.getInlineAttributes = function (node) {
var _this = this;
return this.getNonDefaultAttributes(node).filter(function (it) { return _this.isInlineAttribute(it); });
};
return BaseNodeRenderer;
}());
exports.BaseNodeRenderer = BaseNodeRenderer;
function correspondingPositionalExists(attribute, existingAttributes) {
return !attribute.position && !!existingAttributes.find(function (it) {
return it.position && it.name === attribute.name && it.value === attribute.value;
});
}
function moveIdToFirst(attributes) {
var id = attributes.find(function (it) { return it.name === 'id'; });
if (!id) {
return attributes;
}
else {
return __spreadArray([id], attributes.filter(function (it) { return it !== id; }), true);
}
}
//# sourceMappingURL=base-node-renderer.js.map