-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsvg.js
151 lines (139 loc) · 3.22 KB
/
svg.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
/**
* SVG Toolkit Alfred Workflow
* Author: Rick McGavin
*/
// Get svgo
const SVGO = require('svgo');
svgo = new SVGO({
plugins: [{
cleanupAttrs: true,
}, {
removeDoctype: true,
},{
removeXMLProcInst: true,
},{
removeComments: true,
},{
removeMetadata: true,
},{
removeTitle: true,
},{
removeDesc: true,
},{
removeUselessDefs: true,
},{
removeEditorsNSData: true,
},{
removeEmptyAttrs: true,
},{
removeHiddenElems: true,
},{
removeEmptyText: true,
},{
removeEmptyContainers: true,
},{
removeViewBox: false,
},{
cleanupEnableBackground: true,
},{
convertStyleToAttrs: true,
},{
convertColors: true,
},{
convertPathData: true,
},{
convertTransform: true,
},{
removeUnknownsAndDefaults: true,
},{
removeNonInheritableGroupAttrs: true,
},{
removeUselessStrokeAndFill: true,
},{
removeUnusedNS: true,
},{
cleanupIDs: true,
},{
cleanupNumericValues: true,
},{
moveElemsAttrsToGroup: true,
},{
moveGroupAttrsToElems: true,
},{
collapseGroups: true,
},{
removeRasterImages: false,
},{
mergePaths: true,
},{
convertShapeToPath: true,
},{
sortAttrs: true,
},{
removeDimensions: true,
},{
removeAttrs: {attrs: '(stroke|fill)'},
}]
});
// Get only the arguments passed in by the user
const passedArgs = process.argv.slice(2);
// Assign the value passed in by user to the query variable
const query = passedArgs[0];
// empty array to hold alfred objects
const items = [];
// create css property function
const createCssProperty = svg => {
return `background-image: url('data:image/svg+xml;utf8,${svg}');`;
};
// create aflred object function
const pushToItemsArray = (title, output) => {
const obj = {
title: title,
arg: output,
}
items.push(obj);
};
// compress svg
const compressSvg = query => {
svgo.optimize(query)
.then(result => {
const title = 'Compressed SVG';
pushToItemsArray(title, result.data);
});
}
// no encoded css property
const noEncodedCssProperty = query => {
const property = createCssProperty(query);
const title = 'No encoded CSS SVG';
pushToItemsArray(title, property);
};
// url encoded css property
const urlEncodedCssProperty = query => {
const encodedSvg = encodeURIComponent(query);
const property = createCssProperty(encodedSvg);
const title = 'URL Encoded CSS SVG';
pushToItemsArray(title, property);
}
// base64 encoded css property
const base64EncodedCssProperty = query => {
const buffer = new Buffer.from(query);
const encodedSvg = buffer.toString('base64');
const property = createCssProperty(encodedSvg);
const title = 'Base 64 Encoded CSS SVG';
pushToItemsArray(title, property);
}
// main functions to be called for the workflow
const init = () => {
compressSvg(query);
noEncodedCssProperty(query);
urlEncodedCssProperty(query);
base64EncodedCssProperty(query);
}
init();
// svgo is a promise that we need to wait for to send to alfred, so we use Promise.all
Promise.all([compressSvg]).then(() => {
// create object that hold the items array to send to alfred
const alfredObject = {items};
// Log to the console and send to alfred
console.log(JSON.stringify(alfredObject));
});