@@ -285,6 +285,14 @@ const getValue = (element) => {
285
285
console . error ( 'getValue() error:' , error , element ) ;
286
286
}
287
287
288
+ let encode = element . getAttribute ( 'value-encode' )
289
+ if ( encode )
290
+ value = encodeValue ( value , encode )
291
+
292
+ let decode = element . getAttribute ( 'value-decode' )
293
+ if ( decode )
294
+ value = decodeValue ( value , decode )
295
+
288
296
let lowercase = element . getAttribute ( 'value-lowercase' )
289
297
if ( lowercase || lowercase === '' )
290
298
value = value . toLowerCase ( )
@@ -324,4 +332,58 @@ function regexParser(string) {
324
332
return { regex, replacement }
325
333
}
326
334
335
+ function encodeValue ( value , encodingType ) {
336
+ switch ( encodingType . toLowerCase ( ) ) {
337
+ case 'url' :
338
+ case 'uri' :
339
+ return encodeURI ( value . replace ( / / g, "%20" ) ) ;
340
+ case 'uri-component' :
341
+ return encodeURIComponent ( value . replace ( / / g, "%20" ) ) ;
342
+ case 'base64' :
343
+ case 'atob' :
344
+ const encoder = new TextEncoder ( ) ;
345
+ const uint8Array = encoder . encode ( value ) ;
346
+ return btoa ( String . fromCharCode ( ...uint8Array ) ) ;
347
+ case 'html-entities' :
348
+ return value . replace ( / [ \u00A0 - \u9999 < > \& ] / g, ( i ) => {
349
+ return `&#${ i . charCodeAt ( 0 ) } ;` ;
350
+ } ) ;
351
+ case 'json' :
352
+ return JSON . stringify ( value ) ;
353
+ default :
354
+ throw new Error ( `Unsupported encoding type: ${ encodingType } ` ) ;
355
+ }
356
+ }
357
+
358
+ function decodeValue ( value , decodingType ) {
359
+ switch ( decodingType . toLowerCase ( ) ) {
360
+ case 'url' :
361
+ case 'uri' :
362
+ return decodeURI ( value ) ;
363
+ case 'uri-component' :
364
+ return decodeURIComponent ( value ) ;
365
+ case 'base64' :
366
+ case 'btoa' : // New case for Base64 decoding (alias for 'base64')
367
+ try {
368
+ const decodedArray = Uint8Array . from ( atob ( value ) , ( c ) => c . charCodeAt ( 0 ) ) ;
369
+ const decoder = new TextDecoder ( ) ;
370
+ return decoder . decode ( decodedArray ) ;
371
+ } catch ( error ) {
372
+ throw new Error ( `Invalid Base64 string: ${ error . message } ` ) ;
373
+ }
374
+ case 'html-entities' :
375
+ const tempElement = document . createElement ( 'div' ) ;
376
+ tempElement . innerHTML = value ;
377
+ return tempElement . textContent ;
378
+ case 'json' :
379
+ try {
380
+ return JSON . parse ( value ) ;
381
+ } catch ( error ) {
382
+ throw new Error ( `Invalid JSON string: ${ error . message } ` ) ;
383
+ }
384
+ default :
385
+ throw new Error ( `Unsupported decoding type: ${ decodingType } ` ) ;
386
+ }
387
+ }
388
+
327
389
export { getValue , storage } ;
0 commit comments