diff options
| author | ruki <waruqi@gmail.com> | 2018-11-08 00:38:48 +0800 |
|---|---|---|
| committer | ruki <waruqi@gmail.com> | 2018-11-07 21:53:09 +0800 |
| commit | 26105034da4fcce7ac883c899d781f016559310d (patch) | |
| tree | c459a5dc4e3aa0972d9919033ece511ce76dd129 /node_modules/svgo/plugins/removeUnknownsAndDefaults.js | |
| parent | 2c77f00f1a7ecb6c8192f9c16d3b2001b254a107 (diff) | |
| download | xmake-docs-26105034da4fcce7ac883c899d781f016559310d.tar.gz xmake-docs-26105034da4fcce7ac883c899d781f016559310d.zip | |
switch to vuepress
Diffstat (limited to 'node_modules/svgo/plugins/removeUnknownsAndDefaults.js')
| -rw-r--r-- | node_modules/svgo/plugins/removeUnknownsAndDefaults.js | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/node_modules/svgo/plugins/removeUnknownsAndDefaults.js b/node_modules/svgo/plugins/removeUnknownsAndDefaults.js new file mode 100644 index 00000000..341b1fd7 --- /dev/null +++ b/node_modules/svgo/plugins/removeUnknownsAndDefaults.js @@ -0,0 +1,143 @@ +'use strict'; + +exports.type = 'perItem'; + +exports.active = true; + +exports.description = 'removes unknown elements content and attributes, removes attrs with default values'; + +exports.params = { + unknownContent: true, + unknownAttrs: true, + defaultAttrs: true, + uselessOverrides: true, + keepDataAttrs: true +}; + +var collections = require('./_collections'), + elems = collections.elems, + attrsGroups = collections.attrsGroups, + elemsGroups = collections.elemsGroups, + attrsGroupsDefaults = collections.attrsGroupsDefaults, + attrsInheritable = collections.inheritableAttrs; + +// collect and extend all references +for (var elem in elems) { + elem = elems[elem]; + + if (elem.attrsGroups) { + elem.attrs = elem.attrs || []; + + elem.attrsGroups.forEach(function(attrsGroupName) { + elem.attrs = elem.attrs.concat(attrsGroups[attrsGroupName]); + + var groupDefaults = attrsGroupsDefaults[attrsGroupName]; + + if (groupDefaults) { + elem.defaults = elem.defaults || {}; + + for (var attrName in groupDefaults) { + elem.defaults[attrName] = groupDefaults[attrName]; + } + } + }); + + } + + if (elem.contentGroups) { + elem.content = elem.content || []; + + elem.contentGroups.forEach(function(contentGroupName) { + elem.content = elem.content.concat(elemsGroups[contentGroupName]); + }); + } +} + +/** + * Remove unknown elements content and attributes, + * remove attributes with default values. + * + * @param {Object} item current iteration item + * @param {Object} params plugin params + * @return {Boolean} if false, item will be filtered out + * + * @author Kir Belevich + */ +exports.fn = function(item, params) { + + // elems w/o namespace prefix + if (item.isElem() && !item.prefix) { + + var elem = item.elem; + + // remove unknown element's content + if ( + params.unknownContent && + !item.isEmpty() && + elems[elem] && // make sure we know of this element before checking its children + elem !== 'foreignObject' // Don't check foreignObject + ) { + item.content.forEach(function(content, i) { + if ( + content.isElem() && + !content.prefix && + ( + ( + elems[elem].content && // Do we have a record of its permitted content? + elems[elem].content.indexOf(content.elem) === -1 + ) || + ( + !elems[elem].content && // we dont know about its permitted content + !elems[content.elem] // check that we know about the element at all + ) + ) + ) { + item.content.splice(i, 1); + } + }); + } + + // remove element's unknown attrs and attrs with default values + if (elems[elem] && elems[elem].attrs) { + + item.eachAttr(function(attr) { + + if ( + attr.name !== 'xmlns' && + (attr.prefix === 'xml' || !attr.prefix) && + (!params.keepDataAttrs || attr.name.indexOf('data-') != 0) + ) { + if ( + // unknown attrs + ( + params.unknownAttrs && + elems[elem].attrs.indexOf(attr.name) === -1 + ) || + // attrs with default values + ( + params.defaultAttrs && + elems[elem].defaults && + elems[elem].defaults[attr.name] === attr.value && ( + attrsInheritable.indexOf(attr.name) < 0 || + !item.parentNode.computedAttr(attr.name) + ) + ) || + // useless overrides + ( + params.uselessOverrides && + attr.name !== 'transform' && + attrsInheritable.indexOf(attr.name) > -1 && + item.parentNode.computedAttr(attr.name, attr.value) + ) + ) { + item.removeAttr(attr.name); + } + } + + }); + + } + + } + +}; |
