module.exports = postcss.plugin('postcss-rtlcss-combined', function (opts) { opts = opts || {}; var rtlify = postcssJs.sync([ rtlcss() ]); return function (css, result) { var ltr = postcssJs.objectify(css); var rtl = rtlify(ltr); var ltrOnly = differ(rtl, ltr); var rtlOnly = differ(ltr, rtl); var sources = []; if (ltrOnly == null) { sources.push({ src: ltr, plugin: prefixDir }); } else { var ltrNonOverridable = dedupe(prune(ltrOnly), prune(rtlOnly)); var bothAndLtrOverridable = differ(ltrNonOverridable, ltr); if(bothAndLtrOverridable != null) sources.push({ src: bothAndLtrOverridable, plugin: prefixDir }); sources.push({ src: ltrNonOverridable, plugin: prefixDir({ dir: 'ltr' }) }); sources.push({ src: rtlOnly, plugin: prefixDir({ dir: 'rtl' }) }); } var res = sources.map(function (obj) { return postcss(obj.plugin ? [obj.plugin] : []) .process(obj.src, { parser: postcssJs }); }); return new Promise(function (resolve) { Promise.all(res).then(function (values) { result.root = postcss.root(); var nodesBySelector = {}; values.forEach(function (v) { v.root.nodes.forEach(function(n) { if (!nodesBySelector[n._originalSelector]) { nodesBySelector[n._originalSelector] = []; } nodesBySelector[n._originalSelector].push(n); }); }); Object.keys(nodesBySelector).forEach(function(selector) { nodesBySelector[selector].forEach(function(node) { result.root.append(node); }); }); resolve(); }); }); }; });
hexo.extend.filter.register('after_render:css', function(css, data) { css = postcss.parse(css); css = postcssJs.objectify(css); var cssFlow = postcssJs.sync([ autoprefixer({ browsers: ['> 5%', 'last 3 versions', 'Firefox ESR', 'iOS >= 6', 'Android >= 4.0', 'ExplorerMobile >= 10'] }) ]); var result = cssFlow(css); return result.css; });