123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- '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,
- keepAriaAttrs: true,
- keepRoleAttr: false
- };
- var collections = require('./_collections'),
- elems = collections.elems,
- attrsGroups = collections.attrsGroups,
- elemsGroups = collections.elemsGroups,
- attrsGroupsDefaults = collections.attrsGroupsDefaults,
- attrsInheritable = collections.inheritableAttrs,
- applyGroups = collections.presentationNonInheritableGroupAttrs;
- 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]);
- });
- }
- }
- exports.fn = function(item, params) {
-
- if (item.isElem() && !item.prefix) {
- var elem = item.elem;
-
- if (
- params.unknownContent &&
- !item.isEmpty() &&
- elems[elem] &&
- elem !== 'foreignObject'
- ) {
- item.content.forEach(function(content, i) {
- if (
- content.isElem() &&
- !content.prefix &&
- (
- (
- elems[elem].content &&
- elems[elem].content.indexOf(content.elem) === -1
- ) ||
- (
- !elems[elem].content &&
- !elems[content.elem]
- )
- )
- ) {
- item.content.splice(i, 1);
- }
- });
- }
-
- 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) &&
- (!params.keepAriaAttrs || attr.name.indexOf('aria-') != 0) &&
- (!params.keepRoleAttr || attr.name != 'role')
- ) {
- if (
-
- (
- params.unknownAttrs &&
- elems[elem].attrs.indexOf(attr.name) === -1
- ) ||
-
- (
- params.defaultAttrs &&
- !item.hasAttr('id') &&
- elems[elem].defaults &&
- elems[elem].defaults[attr.name] === attr.value && (
- attrsInheritable.indexOf(attr.name) < 0 ||
- !item.parentNode.computedAttr(attr.name)
- )
- ) ||
-
- (
- params.uselessOverrides &&
- !item.hasAttr('id') &&
- applyGroups.indexOf(attr.name) < 0 &&
- attrsInheritable.indexOf(attr.name) > -1 &&
- item.parentNode.computedAttr(attr.name, attr.value)
- )
- ) {
- item.removeAttr(attr.name);
- }
- }
- });
- }
- }
- };
|