UNPKG

wecui

Version:

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

84 lines (65 loc) 3.21 kB
'use strict'; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; var _postcss = require('postcss'); var _postcss2 = _interopRequireDefault(_postcss); var _utils = require('./utils'); var _utils2 = _interopRequireDefault(_utils); var _humps = require('humps'); var _humps2 = _interopRequireDefault(_humps); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } var ampInsertedNodes = {}; var unwrapAmp = function unwrapAmp(nodeSelector, node) { if (nodeSelector.indexOf('&:') >= 0 && node.name !== 'media') { return node.selectors.map(function (selector) { return nodeSelector.replace(/&/g, selector); }).join(','); } return nodeSelector; }; var getGlobalSelector = function getGlobalSelector(node) { if (node.parent && node.parent.type === 'atrule') { return node.parent.name + ' ' + node.parent.params + ' ' + node.selector; } else if (node.name === 'media') { return getGlobalSelector(node.parent); } return node.selector; }; var applyRuleSetToNode = function applyRuleSetToNode(ruleSet, node, currentAtRule) { Object.keys(ruleSet).forEach(function (prop) { var rule = ruleSet[prop]; if ((typeof rule === 'undefined' ? 'undefined' : _typeof(rule)) === 'object') { if (node.name !== 'media') { var extRule = _postcss2.default.rule({ selector: unwrapAmp(prop, node) }); applyRuleSetToNode(rule, extRule); var globalSelector = getGlobalSelector(node); node.parent.insertAfter(ampInsertedNodes[globalSelector] || node, extRule); ampInsertedNodes[globalSelector] = extRule; } else { var mediaNestedRule = _postcss2.default.parse(prop + ' ' + JSON.stringify(rule).replace(/"/g, '')); node.append(mediaNestedRule); } } else { if (currentAtRule) { node.insertBefore(currentAtRule, { prop: prop, value: rule }); } else { node.append({ prop: prop, value: rule }); } } }); }; module.exports = _postcss2.default.plugin('postcss-utils', function (opts) { var options = _extends({}, opts); return function (root) { root.walkAtRules(/^utils-/i, function (rule) { var ruleName = rule.name.trim().replace('utils-', ''); var ruleFun = _utils2.default[_humps2.default.camelize(ruleName)]; if (ruleFun) { var params = rule.params.trim() ? rule.params.trim().split(' ') : []; applyRuleSetToNode(ruleFun.apply(undefined, _toConsumableArray(params)), rule.parent, rule); rule.remove(); } }); }; });