This method wraps each script with various <script></script>
tags. It's tuned for embedding HTML file into JSON metadata for NFT tokenURI()
method.
This method uses double URL encoded HTML and <script>
tags. This way, output doesn't need to be converted to base64.
Supported wrap options:
Copy // wrapType = 0
// Wrap URL Safe method doesn't support inline scripts.
// If you set wrapType to 0, ScrityBuilder will encode the
// given script in base64 and use wrapType 1 wrapping.
Copy // wrapType = 1
< script src = "data:text/javascript;base64,[SCRIPT]" ></ script >
// double URL encoded:
// %253Cscript%2520src%253D%2522data%253Atext%252Fjavascript%253Bbase64%252C [SCRIPT] %2522%253E%253C%252Fscript%253E
Copy // wrapType = 2
< script type = "text/javascript+gzip" src = "data:text/javascript;base64,[SCRIPT]" ></ script >
// double URL encoded:
// %253Cscript%2520type%253D%2522text%252Fjavascript%252Bgzip%2522%2520src%253D%2522data%253Atext%252Fjavascript%253Bbase64%252C [SCRIPT] %2522%253E%253C%252Fscript%253E
Copy // wrapType = 3
< script type = "text/javascript+png" src = "data:text/javascript;base64,[SCRIPT]" ></ script >
// double URL encoded:
// %253Cscript%2520type%253D%2522text%252Fjavascript%252Bpng%2522%2520src%253D%2522data%253Atext%252Fjavascript%253Bbase64%252C [SCRIPT] %2522%253E%253C%252Fscript%253E
Copy // wrapType = anything other than 0, 1, 2, 3
[wrapPrefix][ SCRIPT ][wrapSuffix]
// wrapPrefix and wrapSuffix should be double URL encoded
Example
Copy WrappedScriptRequest[] memory requests = new InlineScriptRequest[]( 5 );
requests[ 0 ].name = "rawScript" ;
requests[ 0 ].contractAddress = scriptyStorageContractAddress;
requests[ 0 ].wrapType = 0 ;
requests[ 1 ].name = "base64_encoded_script" ;
requests[ 1 ].contractAddress = scriptyStorageContractAddress;
requests[ 1 ].wrapType = 1 ;
requests[ 2 ].name = "base64_encoded_gzip_script" ;
requests[ 2 ].contractAddress = scriptyStorageContractAddress;
requests[ 2 ].wrapType = 2 ;
requests[ 3 ].name = "base64_encoded_png_script" ;
requests[ 3 ].contractAddress = scriptyStorageContractAddress;
requests[ 3 ].wrapType = 3 ;
requests[ 4 ].name = "script_with_custom_wrap" ;
requests[ 4 ].contractAddress = scriptyStorageContractAddress;
// double encoded:
// - <script type="text/javascript+png" src="data:image/png;base64,[script]"></script>
// - "></script>
requests[4].wrapPrefix = '%253Cscript%2520type%253D%2522text%252Fjavascript%252Bpng%2522%2520src%253D%2522data%253Aimage%252Fpng%253Bbase64%252C';
requests[ 4 ].wrapSuffix = '%2522%253E%253C%252Fscript%253E' ;
requests[ 4 ].wrapType = 4 ;
uint256 bufferSize = 100000 ;
bytes memory htmlFile = IScriptyBuilder (
scriptyBuilderAddress
). getHTMLWrappedURLSafe (requests , bufferSize);
( bufferSize
is set to 100000 as an example. In production, it's important to set an exact size. Please check here to learn more about buffer size.)
HTML file output:
Copy < html >
< body style = 'margin:0;' >
< script >[rawScript_not_encoded]</ script >
< script src = 'data:text/javascript;base64,[base64_encoded_script]' ></ script >
< script type = "text/javascript+gzip" src = "data:text/javascript;base64,[base64_encoded_gzip_script]" ></ script >
< script type = "text/javascript+png" src = "data:text/javascript;base64,[base64_encoded_png_script]" ></ script >
< script type = "module" >[script_with_custom_wrap]</ script >
</ body >
</ html >
Please note that when wrapType is 1 or 2, stored scripts should be in base64
format.