@gregoriusrippenstein/node-red-contrib-introspection 0.2.5 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -155,21 +155,35 @@
155
155
  // inline image data. Image types supported: Jpeg, Png and Svg.
156
156
  var imageColl = doc.getElementsByTagName("image");
157
157
 
158
+ var imageCache = {};
159
+
158
160
  var getDataAndCallbackWhenDone = (elem, cntr, cb) => {
159
- var postfix = elem.getAttribute("xlink:href").substr(-4,4).toLowerCase();
161
+ var hrefSrc = elem.getAttribute("xlink:href");
162
+
163
+ var postfix = hrefSrc.substr(-4,4).toLowerCase();
164
+ var fileType = {
165
+ ".jpg": "jpeg",
166
+ "jpeg": "jpeg",
167
+ ".png": "png",
168
+ ".svg": "svg+xml",
169
+ };
170
+
171
+ if ( imageCache[hrefSrc] ) {
172
+ console.log( "FOUND " + hrefSrc + " in cache");
173
+ elem.setAttribute(
174
+ "xlink:href",
175
+ "data:image/" + fileType[postfix] + ";base64," + imageCache[hrefSrc]
176
+ );
177
+ return cb(cntr-1);
178
+ }
160
179
 
161
180
  switch(postfix){
162
181
  case ".jpg":
163
182
  case "jpeg":
164
183
  case ".png":
165
- var fileType = {
166
- ".jpg": "jpeg",
167
- "jpeg": "jpeg",
168
- ".png": "png"
169
- };
170
-
171
184
  var oReq = new XMLHttpRequest();
172
- oReq.open("GET", elem.getAttribute( "xlink:href" ), true);
185
+
186
+ oReq.open("GET", hrefSrc, true);
173
187
  oReq.responseType = "arraybuffer";
174
188
 
175
189
  var arrayBufferToBase64 = ( buffer ) => {
@@ -185,9 +199,11 @@
185
199
  oReq.onload = function (oEvent) {
186
200
  var arrayBuffer = oReq.response; // Note: not oReq.responseText
187
201
  if (arrayBuffer) {
188
- elem.setAttribute("xlink:href",
189
- "data:image/"+fileType[postfix]+";base64," +
190
- arrayBufferToBase64(arrayBuffer));
202
+ var b64Data = arrayBufferToBase64(arrayBuffer);
203
+ imageCache[hrefSrc] = b64Data;
204
+ elem.setAttribute(
205
+ "xlink:href", "data:image/"+fileType[postfix]+";base64,"+b64Data
206
+ );
191
207
  cb(cntr-1)
192
208
  } else {
193
209
  cb(cntr-1)
@@ -198,11 +214,12 @@
198
214
  break;
199
215
 
200
216
  case ".svg":
201
- $.get( elem.getAttribute( "xlink:href" ), function(data) {
217
+ $.get( hrefSrc, function(data) {
202
218
  const serializer = new XMLSerializer();
219
+ var b64Data = btoa(serializer.serializeToString(data));
220
+ imageCache[hrefSrc] = b64Data;
203
221
  elem.setAttribute( "xlink:href",
204
- "data:image/svg+xml;base64," +
205
- btoa(serializer.serializeToString(data)));
222
+ "data:image/svg+xml;base64," + b64Data);
206
223
  cb(cntr-1)
207
224
  });
208
225
  break;
@@ -211,8 +228,8 @@
211
228
 
212
229
  var cb = (cntr) => {
213
230
  if ( cntr < 0 ) {
214
- const serializer = new XMLSerializer();
215
- callbackWithSvgCode( serializer.serializeToString(doc) );
231
+ delete imageCache;
232
+ callbackWithSvgCode((new XMLSerializer()).serializeToString(doc));
216
233
  } else {
217
234
  getDataAndCallbackWhenDone( imageColl.item(cntr), cntr, cb );
218
235
  }
@@ -223,8 +240,8 @@
223
240
  imageColl.length-1,
224
241
  cb );
225
242
  } else {
226
- const serializer = new XMLSerializer();
227
- callbackWithSvgCode( serializer.serializeToString(doc) );
243
+ delete imageCache;
244
+ callbackWithSvgCode( (new XMLSerializer()).serializeToString(doc) );
228
245
  }
229
246
  };
230
247
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gregoriusrippenstein/node-red-contrib-introspection",
3
- "version": "0.2.5",
3
+ "version": "0.2.6",
4
4
  "keywords": [
5
5
  "node-red"
6
6
  ],