* * @param {*} css css文本内容 * @param {*} reg 匹配的正则 * @param {*} replaceFn 正则的替换函数 * @param {*} fallBackHandler 处理回落的正则和替换函数 * @param {} fallbackStrategy 策略
(css, reg, replaceFn, fallBackHandler = null, fallbackStrategy = 'enforce')
| 97 | * @param {} fallbackStrategy 策略 |
| 98 | */ |
| 99 | function cssReplaceVarValue(css, reg, replaceFn, fallBackHandler = null, fallbackStrategy = 'enforce') { |
| 100 | const replaceOriginValue = (reg,replaceFn,fallBackHandler,fallbackStrategy) => { |
| 101 | return { |
| 102 | postcssPlugin: 'postcss-plugin-replace-var-value', |
| 103 | Once(root, { result }) { |
| 104 | root.walkDecls(decl => { |
| 105 | if (decl.type !== 'comment' && decl.value && decl.value.match(reg)) { |
| 106 | var newDecl = decl.clone({ value: decl.value.replace(reg, replaceFn) }); |
| 107 | decl.replaceWith(newDecl); |
| 108 | if (fallBackHandler) { |
| 109 | var declPrev = newDecl.prev(); |
| 110 | var regFallback = fallBackHandler.reg; |
| 111 | var replaceFnFallBack = fallBackHandler.replaceFn; |
| 112 | if (declPrev && declPrev.type !== 'comment' && declPrev.value |
| 113 | && declPrev.toString() === decl.clone({ value: decl.value.replace(regFallback, replaceFnFallBack) }).toString()) { |
| 114 | if ('remove' === fallbackStrategy) { |
| 115 | declPrev.remove(); |
| 116 | } else { |
| 117 | declPrev.replaceWith(newDecl.clone({ value: newDecl.value.replace(regFallback, replaceFnFallBack) })); |
| 118 | if ('only' === fallbackStrategy) { |
| 119 | newDecl.remove(); |
| 120 | } |
| 121 | } |
| 122 | |
| 123 | } else { |
| 124 | if ('enforce' === fallbackStrategy || true === fallbackStrategy || 'only' === fallbackStrategy) { |
| 125 | newDecl.cloneBefore({ value: newDecl.value.replace(regFallback, replaceFnFallBack) }); |
| 126 | if ('only' === fallbackStrategy) { |
| 127 | newDecl.remove(); |
| 128 | } |
| 129 | } |
| 130 | } |
| 131 | } |
| 132 | } |
| 133 | }); |
| 134 | } |
| 135 | } |
| 136 | } |
| 137 | return postcss([replaceOriginValue(reg,replaceFn,fallBackHandler,fallbackStrategy)]).process(css).css; |
| 138 | } |
| 139 | |
| 140 | function process(source, map) { |
| 141 | this.cacheable && this.cacheable(); |
no test coverage detected