@carrot-farm/mongsil-ui
Version:
react ui library
75 lines (74 loc) • 2.7 kB
JavaScript
/**
* 문자열을 grid areas에서 사용가능한 형태로 변형한다
*/
export var areasConvert = function (areas) {
var _a, _b;
var parse = function (arr, i, acc) {
if (i < arr.length) {
var cur = arr[i].trim();
var matched = cur.match(matchReg);
// # 지정된 형식의 row가 아닐경우
if (!matched) {
return parse(arr, i + 1, acc);
}
// # row 처리
var result = matched.map(function (a) {
var r = funcReg.exec(a);
// # 함수일 경우 처리
if (r) {
var name_1 = r[0].slice(0, r[0].indexOf('('));
var params = r[2].replace(/[()'"\s]/g, '').split(',');
return func.route(name_1, params);
}
return a;
});
return parse(arr, i + 1, acc + (i > 0 ? '\n' : '') + ("'" + result.join(' ') + "'"));
}
else {
// console.log('> done: \n', acc);
return acc;
}
};
var matchReg = /([0-9a-zA-Z_.]+(\(.*\))?)/g;
var funcReg = /([0-9a-zA-Z_]+(\(.*\)))/;
var func = {
repeat: function (count, str) {
var _count = Number(count);
var acc = '';
for (var i = 0; i < _count; i++) {
acc += i > 0 ? ' ' + str : str;
}
return acc;
},
route: function (name, params) {
if (name === 'repeat' && params && params.length > 0) {
return this.repeat(params[0], params[1]);
}
return '';
},
};
return parse((_b = (_a = areas.trim()) === null || _a === void 0 ? void 0 : _a.split('\n')) !== null && _b !== void 0 ? _b : [], 0, '');
};
export var breakPointsStringify = function (arr, defaultColumn) {
var recursive = function (arr, i, acc) {
// console.log('> ', arr);
if (i < arr.length) {
var _a = arr[i], width = _a.width, column = _a.column;
var st = 'clamp(';
var c = "100% / " + (column + 1) + " + 0.1%";
var w = "(" + width + "px - 100vw) * 1000";
var str = '';
if (i === 0) {
str += c + ", " + w + ", ";
}
else {
str += c + "), " + w + ", ";
}
return recursive(arr, i + 1, st + acc + str);
}
else {
return acc + ("100% / " + (defaultColumn ? defaultColumn + 1 : 2) + " + 0.1%)");
}
};
return recursive(arr.sort(function (a, b) { return (a.width > b.width ? -1 : 1); }), 0, '');
};