UNPKG

wecui

Version:

一款基于Vue2.x版本的移动端web组件

75 lines (57 loc) 4.59 kB
var postcss = require('postcss'); var borderColor = /^(aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|currentColor|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|inherit|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|transparent|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen|#[0-9a-f]+|(color|hwb|hsla?|rgba?|var)\(.+\)|\*|\.+)$/i; var borderStyle = /^(inherit|dashed|dotted|double|groove|hidden|inherit|inset|none|outset|ridge|solid|var\(.+\)|\*|\.+)$/i; var borderWidth = /^(inherit|initial|normal|unset|[-+]?0|[-+]?[0-9]*\.?[0-9]+(%|ch|cm|em|ex|in|mm|pc|pt|px|rem|vh|vmax|vmin|vw)|(calc|var)\(.+\)|\*|\.+)$/i; var assign1to4 = function (edges, prop, decl) { if (!edges[0]) edges[0] = '*'; if (/^\.+$/.test(edges[1])) edges[1] = edges[Math.max(1 - edges[1].length, 0)]; if (/^\.+$/.test(edges[2])) edges[2] = edges[Math.max(2 - edges[2].length, 0)]; if (/^\.+$/.test(edges[3])) edges[3] = edges[Math.max(3 - edges[3].length, 0)]; if (!edges[1]) edges[1] = edges[0]; if (!edges[2]) edges[2] = edges[0]; if (!edges[3]) edges[3] = edges[1]; if (edges[0] !== '*' && edges[1] !== '*' && edges[2] !== '*' && edges[3] !== '*') { if (edges.length === 4 && edges[3] === edges[1]) edges.splice(3, 1); if (edges.length === 3 && edges[2] === edges[0]) edges.splice(2, 1); if (edges.length === 2 && edges[1] === edges[0]) edges.splice(1, 1); decl.cloneBefore({ prop: 'border-' + prop, value: edges.join(' ') }); } else { if (edges[0] !== '*') decl.cloneBefore({ prop: 'border-top-' + prop, value: edges[0] }); if (edges[1] !== '*') decl.cloneBefore({ prop: 'border-right-' + prop, value: edges[1] }); if (edges[2] !== '*') decl.cloneBefore({ prop: 'border-bottom-' + prop, value: edges[2] }); if (edges[3] !== '*') decl.cloneBefore({ prop: 'border-left-' + prop, value: edges[3] }); } }; module.exports = postcss.plugin('postcss-short-border', function (opts) { var prefix = opts && opts.prefix ? '-' + opts.prefix + '-' : ''; return function (css) { css.walkDecls(function (decl) { if (decl.prop === prefix + 'border') { var colors = []; var styles = []; var widths = []; var last = widths; if (prefix) decl.prop = 'border'; postcss.list.space(decl.value).forEach(function (value) { if (last.length < 4 && (last === widths ? borderWidth : last === styles ? borderStyle : borderColor).test(value)) last.push(value); else if (widths.length < 4 && borderWidth.test(value)) last = widths.push(value) && widths; else if (styles.length < 4 && borderStyle.test(value)) last = styles.push(value) && styles; else if (colors.length < 4 && borderColor.test(value)) last = colors.push(value) && colors; }); if (widths[0] === '*' || styles[0] === '*' || colors[0] === '*' || widths.length > 1 || styles.length > 1 || colors.length > 1) { assign1to4(widths, 'width', decl); assign1to4(styles, 'style', decl); assign1to4(colors, 'color', decl); decl.remove(); } } var index = [prefix + 'border-color', prefix + 'border-width', prefix + 'border-style'].indexOf(decl.prop); if (index !== -1) { var prop = ['color', 'width', 'style'][index]; if (prefix) decl.prop = 'border-' + prop; assign1to4(postcss.list.space(decl.value), prop, decl); decl.remove(); } }); }; });