Sha256: ef08cbf0ffcf5d21cf04aa757f27ef32cff8df57ea37633c67f13d077aa07f52

Contents?: true

Size: 1.37 KB

Versions: 26

Compression:

Stored size: 1.37 KB

Contents

'use strict';

exports.type = 'perItem';

exports.active = true;

exports.description = 'Sorts children of <defs> to improve compression';

/**
 * Sorts children of defs in order to improve compression.
 * Sorted first by frequency then by element name length then by element name (to ensure grouping).
 *
 * @param {Object} item current iteration item
 * @return {Boolean} if false, item will be filtered out
 *
 * @author David Leston
 */
exports.fn = function(item) {

    if (item.isElem('defs')) {

        if (item.content) {
            var frequency = item.content.reduce(function (frequency, child) {
                if (child.elem in frequency) {
                    frequency[child.elem]++;
                } else {
                    frequency[child.elem] = 1;
                }
                return frequency;
            }, {});
            item.content.sort(function (a, b) {
                var frequencyComparison = frequency[b.elem] - frequency[a.elem];
                if (frequencyComparison !== 0 ) {
                    return frequencyComparison;
                }
                var lengthComparison = b.elem.length - a.elem.length;
                if (lengthComparison !== 0) {
                    return lengthComparison;
                }
                return a.elem != b.elem ? a.elem > b.elem ? -1 : 1 : 0;
            });
        }

        return true;
    }

};

Version data entries

26 entries across 25 versions & 8 rubygems

Version Path
optimacms-0.1.61 spec/dummy/node_modules/svgo/plugins/sortDefsChildren.js
disco_app-0.18.0 test/dummy/node_modules/svgo/plugins/sortDefsChildren.js
disco_app-0.18.2 test/dummy/node_modules/svgo/plugins/sortDefsChildren.js
disco_app-0.16.1 test/dummy/node_modules/svgo/plugins/sortDefsChildren.js
disco_app-0.15.2 test/dummy/node_modules/svgo/plugins/sortDefsChildren.js
disco_app-0.18.4 test/dummy/node_modules/svgo/plugins/sortDefsChildren.js
disco_app-0.18.1 test/dummy/node_modules/svgo/plugins/sortDefsChildren.js
disco_app-0.12.7.pre.puma.pre.3 test/dummy/node_modules/svgo/plugins/sortDefsChildren.js
disco_app-0.14.0 test/dummy/node_modules/svgo/plugins/sortDefsChildren.js
disco_app-0.13.6.pre.puma.pre.3 test/dummy/node_modules/svgo/plugins/sortDefsChildren.js
tang-0.2.1 spec/tang_app/node_modules/svgo/plugins/sortDefsChildren.js
groonga-client-model-6.0.0 test/apps/rails6.0.3.5/node_modules/svgo/plugins/sortDefsChildren.js
groonga-client-model-6.0.0 test/apps/rails6.1.3/node_modules/svgo/plugins/sortDefsChildren.js
ruby2js-4.0.4 lib/tasks/testrails/node_modules/svgo/plugins/sortDefsChildren.js
ruby2js-4.0.3 lib/tasks/testrails/node_modules/svgo/plugins/sortDefsChildren.js
tang-0.2.0 spec/tang_app/node_modules/svgo/plugins/sortDefsChildren.js
tang-0.1.0 spec/tang_app/node_modules/svgo/plugins/sortDefsChildren.js
tang-0.0.9 spec/tang_app/node_modules/svgo/plugins/sortDefsChildren.js
enju_library-0.3.8 spec/dummy/node_modules/svgo/plugins/sortDefsChildren.js
jester-data-8.0.0 node_modules/svgo/plugins/sortDefsChildren.js