| Index: third_party/WebKit/Source/devtools/scripts/spritesheet_assembler/SVGSpriteSheet.js
|
| diff --git a/third_party/WebKit/Source/devtools/scripts/spritesheet_assembler/SVGSpriteSheet.js b/third_party/WebKit/Source/devtools/scripts/spritesheet_assembler/SVGSpriteSheet.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..a5d99f9c2796a01cd4518464ae5141c81d284067
|
| --- /dev/null
|
| +++ b/third_party/WebKit/Source/devtools/scripts/spritesheet_assembler/SVGSpriteSheet.js
|
| @@ -0,0 +1,83 @@
|
| +var postsvg = require('postsvg');
|
| +var renameId = require('postsvg-rename-id');
|
| +
|
| +class SVGSpriteSheet {
|
| + /**
|
| + * @param {number} width
|
| + * @param {number} height
|
| + * @param {!Map<!SVGSprite, !{x: number, y: number}>} spritePositions
|
| + */
|
| + constructor(width, height, spritePositions) {
|
| + this._width = width;
|
| + this._height = height;
|
| + this._sprites = Array.from(spritePositions.keys());
|
| + this._positions = spritePositions;
|
| + }
|
| +
|
| + /**
|
| + * @return {number}
|
| + */
|
| + width() {
|
| + return this._width;
|
| + }
|
| +
|
| + /**
|
| + * @return {number}
|
| + */
|
| + height() {
|
| + return this._height;
|
| + }
|
| +
|
| + /**
|
| + * @return {!Array<!SVGSprite>}
|
| + */
|
| + sprites() {
|
| + return this._sprites;
|
| + }
|
| +
|
| + /**
|
| + * @param {!SVGSprite} sprite
|
| + * @return {!{x: number, y: number}}
|
| + */
|
| + spritePosition(sprite) {
|
| + console.assert(this._positions.has(sprite), 'sprite ' + sprite.filePath + ' has undefined position!');
|
| + return this._positions.get(sprite);
|
| + }
|
| +
|
| + /**
|
| + * @return {string}
|
| + */
|
| + svgText() {
|
| + if (this._svgText)
|
| + return this._svgText;
|
| +
|
| + var svgBody = '';
|
| + var spriteId = 0;
|
| + for (var sprite of this._sprites) {
|
| + var spriteSVG = sprite.content.trim();
|
| +
|
| + // Strip of <?xml> header, if any.
|
| + if (spriteSVG.startsWith('<?xml')) {
|
| + var headerIndexEnd = spriteSVG.indexOf('?>');
|
| + spriteSVG = spriteSVG.substring(headerIndexEnd + 2);
|
| + }
|
| +
|
| + // Rename sprite ids to avoid clashing.
|
| + spriteSVG = postsvg().use(renameId({pattern: 'sprite' + (++spriteId) + '_[id]'})).process(spriteSVG);
|
| +
|
| + // Wrap sprite to SVG container with proper position.
|
| + var position = this._positions.get(sprite);
|
| + var prefix = `<svg x="${position.x}" y="${position.y}" width="${sprite.width}" height="${sprite.height}">`;
|
| + var suffix = '</svg>';
|
| + spriteSVG = prefix + spriteSVG + suffix;
|
| +
|
| + svgBody += spriteSVG;
|
| + }
|
| +
|
| + var xmlHeader = '<?xml version="1.0" encoding="utf-8"?>';
|
| + var spriteSheetHeader = `<svg width="${this._width}" height="${this._height}" xmlns="http://www.w3.org/2000/svg">`;
|
| + return xmlHeader + spriteSheetHeader + svgBody + '</svg>';
|
| + }
|
| +};
|
| +
|
| +module.exports = SVGSpriteSheet;
|
|
|