@pisell/layout
Version:
基于 Fusion 设计系统的自然布局体系
105 lines (99 loc) • 2.7 kB
JavaScript
;
exports.__esModule = true;
exports.getCurBreakPoint = getCurBreakPoint;
exports.getGapVal = getGapVal;
exports.getMaxNumberOfColumns = getMaxNumberOfColumns;
exports.isPresetSize = isPresetSize;
exports.isValidGap = isValidGap;
exports.wrapUnit = wrapUnit;
var _lodashEs = require("lodash-es");
var _constant = require("../common/constant");
/**
* 获取当前屏幕断点
* @param breakPoints
*/
function getCurBreakPoint(breakPoints) {
var screenWidths = [];
var tmpMap = {};
var availWidth = document.body.clientWidth;
breakPoints.forEach(function (bp) {
var width = bp.width;
screenWidths.push(width);
tmpMap[width] = bp;
});
screenWidths = screenWidths.sort(function (a, b) {
return a - b;
});
var len = screenWidths.length;
var ret = tmpMap[screenWidths[0]];
if (availWidth > screenWidths[len - 1]) {
ret = tmpMap[screenWidths[len - 1]];
} else {
for (var i = 1; i < len; i++) {
var breakPoint = tmpMap[screenWidths[i]];
if (screenWidths[i - 1] <= availWidth && availWidth < screenWidths[i]) {
ret = breakPoint;
}
}
}
return ret;
}
/**
* 获取最大断点列数
*/
function getMaxNumberOfColumns(breakPoints) {
if (breakPoints === void 0) {
breakPoints = _constant.DEFAULT_BREAK_POINTS;
}
var screenWidths = breakPoints.map(function (bp) {
return bp.width;
});
var maxWidth = Math.max.apply(Math, screenWidths);
var bp = breakPoints.find(function (breakPoint) {
return (breakPoint === null || breakPoint === void 0 ? void 0 : breakPoint.width) === maxWidth;
});
return (bp === null || bp === void 0 ? void 0 : bp.numberOfColumns) || 12;
}
/**
* 是否为标准的预设尺寸
* @param val
*/
function isPresetSize(val) {
return ['small', 'medium', 'large'].includes(val);
}
/**
* 为数值包裹自动单位
* eg:
* wrapUnit(2) -> 2px
* wrapUnit('2em') -> 2em
* @param value
* @param unit
*/
function wrapUnit(value, unit) {
if (unit === void 0) {
unit = 'px';
}
return (0, _lodashEs.isNumber)(value) ? "" + value + unit : value;
}
/**
* 是否为一个有效的 gap 值:
* eg: 0.9 / -9px / auto
* @param val
*/
function isValidGap(val) {
var gapValReg = /^-?[0-9]*\.?[0-9]+([a-z|A-z]*)$/;
return (0, _lodashEs.isNumber)(val) || (0, _lodashEs.isString)(val) && (gapValReg.test(val) || val === 'auto');
}
/**
* 获取最终的 gap 值
* @param contextGap 上下文中的 gap 值
* @param propGap 属性中定义的 gap 值
*/
function getGapVal(contextGap, propGap) {
if (isValidGap(propGap)) {
return wrapUnit(propGap);
} else if (isValidGap(contextGap)) {
return wrapUnit(contextGap);
}
return undefined;
}