aboutsummaryrefslogtreecommitdiff
path: root/node_modules/svgo/plugins/moveGroupAttrsToElems.js
diff options
context:
space:
mode:
authorruki <waruqi@gmail.com>2018-11-08 00:38:48 +0800
committerruki <waruqi@gmail.com>2018-11-07 21:53:09 +0800
commit26105034da4fcce7ac883c899d781f016559310d (patch)
treec459a5dc4e3aa0972d9919033ece511ce76dd129 /node_modules/svgo/plugins/moveGroupAttrsToElems.js
parent2c77f00f1a7ecb6c8192f9c16d3b2001b254a107 (diff)
downloadxmake-docs-26105034da4fcce7ac883c899d781f016559310d.tar.gz
xmake-docs-26105034da4fcce7ac883c899d781f016559310d.zip
switch to vuepress
Diffstat (limited to 'node_modules/svgo/plugins/moveGroupAttrsToElems.js')
-rw-r--r--node_modules/svgo/plugins/moveGroupAttrsToElems.js63
1 files changed, 63 insertions, 0 deletions
diff --git a/node_modules/svgo/plugins/moveGroupAttrsToElems.js b/node_modules/svgo/plugins/moveGroupAttrsToElems.js
new file mode 100644
index 00000000..a966f882
--- /dev/null
+++ b/node_modules/svgo/plugins/moveGroupAttrsToElems.js
@@ -0,0 +1,63 @@
+'use strict';
+
+exports.type = 'perItem';
+
+exports.active = true;
+
+exports.description = 'moves some group attributes to the content elements';
+
+var collections = require('./_collections.js'),
+ pathElems = collections.pathElems.concat(['g', 'text']),
+ referencesProps = collections.referencesProps;
+
+/**
+ * Move group attrs to the content elements.
+ *
+ * @example
+ * <g transform="scale(2)">
+ * <path transform="rotate(45)" d="M0,0 L10,20"/>
+ * <path transform="translate(10, 20)" d="M0,10 L20,30"/>
+ * </g>
+ * ⬇
+ * <g>
+ * <path transform="scale(2) rotate(45)" d="M0,0 L10,20"/>
+ * <path transform="scale(2) translate(10, 20)" d="M0,10 L20,30"/>
+ * </g>
+ *
+ * @param {Object} item current iteration item
+ * @return {Boolean} if false, item will be filtered out
+ *
+ * @author Kir Belevich
+ */
+exports.fn = function(item) {
+
+ // move group transform attr to content's pathElems
+ if (
+ item.isElem('g') &&
+ item.hasAttr('transform') &&
+ !item.isEmpty() &&
+ !item.someAttr(function(attr) {
+ return ~referencesProps.indexOf(attr.name) && ~attr.value.indexOf('url(');
+ }) &&
+ item.content.every(function(inner) {
+ return inner.isElem(pathElems) && !inner.hasAttr('id');
+ })
+ ) {
+ item.content.forEach(function(inner) {
+ var attr = item.attr('transform');
+ if (inner.hasAttr('transform')) {
+ inner.attr('transform').value = attr.value + ' ' + inner.attr('transform').value;
+ } else {
+ inner.addAttr({
+ 'name': attr.name,
+ 'local': attr.local,
+ 'prefix': attr.prefix,
+ 'value': attr.value
+ });
+ }
+ });
+
+ item.removeAttr('transform');
+ }
+
+};