@haiku/player
Version:
Haiku Player is a JavaScript library for building user interfaces
129 lines • 4.99 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var parseCssTransformString_1 = require("./../helpers/parseCssTransformString");
var visitManaTree_1 = require("./../helpers/visitManaTree");
var css_value_1 = require("./../vendor/css-value");
var ROOT_LOCATOR = '0';
var TRANSFORM_COMPONENT_WHITELIST = {
'rotation.x': true,
'rotation.y': true,
'rotation.z': true,
'rotation.w': true,
'scale.x': true,
'scale.y': true,
'scale.z': true,
'translation.x': true,
'translation.y': true,
'translation.z': true,
'mount.x': true,
'mount.y': true,
'mount.z': true,
'origin.x': true,
'origin.y': true,
'origin.z': true,
'align.x': true,
'align.y': true,
'align.z': true,
};
function determineSizingProp(sizeAxis, attributeValue) {
var parsedValues = css_value_1.default(attributeValue);
var parsedValue = parsedValues[0];
switch (parsedValue.unit) {
case '%':
return {
name: 'sizeProportional',
value: parsedValue.value / 100,
mode: 0,
};
case 'px':
return {
name: 'sizeAbsolute',
value: parsedValue.value,
mode: 1,
};
case '':
return {
name: 'sizeAbsolute',
value: parsedValue.value,
mode: 1,
};
default:
return false;
}
}
function convertManaLayout(mana) {
visitManaTree_1.default(ROOT_LOCATOR, mana, function (name, attributes, children, node, locator, parent, index) {
if (!name || !attributes) {
return void 0;
}
if (name.states) {
var width = name.states.width;
var height = name.states.height;
if (width && width.type === 'number') {
attributes['sizeAbsolute.x'] = width.value;
attributes['sizeMode.x'] = 1;
}
if (height && height.type === 'number') {
attributes['sizeAbsolute.y'] = height.value;
attributes['sizeMode.y'] = 1;
}
}
if (attributes.width !== undefined && attributes.width !== null) {
var widthProp = determineSizingProp('x', attributes.width);
if (widthProp) {
attributes[widthProp.name + '.x'] = widthProp.value;
attributes['sizeMode.x'] = widthProp.mode;
delete attributes.width;
}
}
if (attributes.height !== undefined && attributes.height !== null) {
var heightProp = determineSizingProp('y', attributes.height);
if (heightProp) {
attributes[heightProp.name + '.y'] = heightProp.value;
attributes['sizeMode.y'] = heightProp.mode;
delete attributes.height;
}
}
if (attributes.style && typeof attributes.style === 'object') {
if (attributes.style.width !== undefined &&
attributes.style.width !== null) {
var widthStyleProp = determineSizingProp('x', attributes.style.width);
if (widthStyleProp) {
attributes[widthStyleProp.name + '.x'] = widthStyleProp.value;
attributes['sizeMode.x'] = widthStyleProp.mode;
delete attributes.style.width;
}
}
if (attributes.style.height !== undefined &&
attributes.style.height !== null) {
var heightStyleProp = determineSizingProp('y', attributes.style.height);
if (heightStyleProp) {
attributes[heightStyleProp.name + '.y'] = heightStyleProp.value;
attributes['sizeMode.y'] = heightStyleProp.mode;
delete attributes.style.height;
}
}
}
if (attributes.transform !== undefined && attributes.transform !== null) {
var transformAttributes = parseCssTransformString_1.default(attributes.transform);
for (var transformAttributeName in transformAttributes) {
var transformValue = transformAttributes[transformAttributeName];
if (!TRANSFORM_COMPONENT_WHITELIST[transformAttributeName]) {
console.warn('Skipping transform attribute ' +
transformAttributeName +
' because it is not yet supported');
continue;
}
attributes[transformAttributeName] = transformValue;
}
delete attributes.transform;
if (node.elementName !== 'image') {
delete attributes.x;
delete attributes.y;
}
}
}, null, null);
return mana;
}
exports.default = convertManaLayout;
//# sourceMappingURL=convertManaLayout.js.map