77
88 < head >
99 < meta charset =utf-8 >
10-
10+
1111 < title >
1212 Generate Certificate Chain
1313 </ title >
1919
2020 < link rel =icon type ='image/x-icon ' href ='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAMAAAAM7l6QAAABO1BMVEVHcEwAAABoQBqkcBqSXBGfaBGIUw52Sh6pchRxRBeveR2qbg+5p5FuQQ2baRFySB19SQyaaRjJtJFaMwt8Sg5mOxGZaBhxRh2TZhK4hiqucwrDkzy5hSyBWCqCVSX////8/f3s8PPf08X+/v/DomfLu53Nqmrdz7b79ujz9Pbn5+fx6NmhoaHHuKbNvaXu7u7Q0dH48uLd3d3069ysknLhzq+YmJjt0qHcyrD+y1r+vVDY2NjHxcPi4+Oxl3W+q5DFsJO1lmWmiWXAonG4nHHNzc3V1dWxsbH/2GT4r0u/v7/Wxa779uvr28Du5tmtj2W/nGLy47D733T7+O/8+/j48M6srKzo1LC3t7f43YTWx7PKpWLVuITe0bv51Wjo0K3syJ3ruXP4ymbhxpLzv2f37tjIrHqeflrQwKXcKNlbAAAAH3RSTlMAAaOYaW1hjXV+jV3+bh+YV6L+GGMipJUPm0Xe4+Lf7dZ8OwAAAWZJREFUKM+901lXgkAYgGErNcXSzKW9ocZSkATBrRB3zT0XJNdsr///CxplUczbei84nHnOB8MBDIb/aQO1ZvnQsjXP6fU6nfMzDLPYNT72ha5W+8Q0tu0n876VWqeYXeP8uDHx65uMLQv2D0fXK41OjuR5WyZf8zXq4XBAV/3NNGdjpvDd4gSeFQiw3KN8eWO6EGo1BbLK8DhahQQrymzSOMsRVJIVaJpMMlKfJugSS0x1XGXJ+z4Vi1ExSpLQgYnKbE6nQtkgJEmSF5hSVSoV+WKyyBA6BmB2YwBJWt1a1CjzTuTmIaisQRys8J7MuBoAYrgXgCCxxE14oUSAbrvTGfRUdiPONRfTsP1ULpcH3YRZno7kEC+mxfgt6vVDYZfjXDeNx+9Q7+GhW3ln1tSXPE3A2Za5l0qlEsdruwp7HGdNAFHKI3HT54YINEbzmctfpRbssW6jDhybS1ld679mtb/+c34AUBhYzLcT6lgAAAAASUVORK5CYII= '>
2121 < meta name =viewport content ='width=device-width, initial-scale=1 '>
22-
22+
2323 < script type ='application/ld+json '>
2424 {
2525 "@context" : "https://schema.org" ,
3535 "offers" : { "@type" :"Offer" , "price" :"0" , "priceCurrency" :"GBP" }
3636 }
3737 </ script >
38-
3938
40- < script src ='https://libs.ext-code.com/js/dom/component/component.js '> </ script >
41-
39+
40+ < script src ='https://libs.ext-code.com/js/dom/component/v3.0/component.js '> </ script >
41+
4242 < script init >
4343 console . clear ( ) ;
4444 console . log ( 'create-certificate-chain.html' ) ;
4545 console . log ( ) ;
4646 console . json = v => console . log ( JSON . stringify ( v , null , 4 ) ) ;
4747 var df = true , did = 'html'
4848 ;
49-
49+
5050 var ext ;
5151 var $ ;
5252 var datatype ;
5353 var menumod ;
5454 var keydown ;
55-
55+
5656 var hdr ;
5757
5858
5959 //:
6060
6161
6262 async function init ( ) {
63-
64-
63+
64+
6565 await load ( ) ;
66-
67-
66+
67+
6868 menu = menumod ( ) ;
69-
69+
7070 mod . base . add ( { ext, $, datatype, keydown, menu, menumod} ) ;
7171
72-
72+
7373 hdr = mod [ 'x509-hdr' ] ;
74-
75-
74+
75+
7676 hdr . initmod ( { ext, $, menu} ) ;
77-
77+
7878 await Promise . all ( [
7979 hdr . init ( ) ,
8080 ] ) ;
81-
82-
83-
81+
82+
83+
8484 initdom ( document . body ) ;
85-
86-
85+
86+
8787 } //init
88-
89-
88+
89+
9090( async ( ) => {
9191
9292 mod . stack . add ;
9393
9494 ( { ext} = await import ( 'https://libs.ext-code.com/js/io/ext-loader/ext-loader.m.js' ) ) ;
95-
95+
9696 var promise = ext . load . libs (
9797 'js/dom/$.js' ,
9898 'js/core/datatype.js' ,
9999 'js/dom/menumod/menumod.js' ,
100100 'js/dom/keydown/keydown.js' ,
101101 ) ;
102102 [ $ , datatype , menumod , keydown ] = await promise ;
103-
103+
104104 mod . stack . complete ;
105-
105+
106106} ) ( ) ;
107107
108108
109109 async function load ( ) {
110-
110+
111111 var txt = localStorage [ 'node-forge' ] ;
112112 if ( ! txt ) {
113113 var url = 'https://cdn.jsdelivr.net/npm/node-forge/+esm' ;
122122 pki = nodeforge . default . pki ;
123123
124124 } //load
125-
126-
127-
125+
126+
127+
128128 </ script >
129129
130130
131131 < style >
132-
132+
133133 html
134134 {height : 100% ;font-family : arial}
135135 body
136136 {height : calc (100% - 42px );margin : 20px ;display : flex;flex-direction : column}
137-
137+
138138 x509-hdr
139139 {margin-bottom : 20px }
140-
141-
142- .hdr
140+
141+
142+ .hdr
143143 {font-family : arial;position : relative;margin-top : 0 ;margin-bottom : 20px ;background : white;
144144 padding-bottom : 10px ;border-bottom : 3px solid lightblue}
145- .hdr-icon
145+ .hdr-icon
146146 {display : inline-block;text-align : center;background : whitesmoke;border-radius : 5px ;
147147 border : 1px solid lightgray;padding : 5px 3px 0px ;cursor : pointer;margin-right : 10px ;
148148 min-width : 50px }
149- .hdr-icon-img
149+ .hdr-icon-img
150150 {width : 25px ;height : 25px }
151- .hdr-icon-label
151+ .hdr-icon-label
152152 {margin : 2px 0 0 }
153- .hdr-title
153+ .hdr-title
154154 {position : absolute;left : 0 ;right : 0 ;z-index : 0 ;margin : 0 auto}
155155 .hdr-date
156156 {float : right}
157-
157+
158158 input
159159 {padding : 5px 10px ;font-size : 16px }
160160 # chain
161161 {}
162162 pre
163163 {flex : 1 ;border : 1px solid lightgray;padding : 10px }
164-
165-
164+
165+
166166 .visually-hidden
167167 {position : absolute !important ;width : 1px !important ;height : 1px !important ;padding : 0 !important ;margin : -1px !important ;overflow : hidden !important ;
168168 clip : rect (0 0 0 0 ) !important ;white-space : nowrap !important ;border : 0 !important }
169-
170-
169+
170+
171171 </ style >
172-
172+
173173 </ head >
174-
174+
175175 < body >
176-
176+
177177 < x509-hdr component =grp >
178178 < h1 class =visually-hidden >
179179 create certificate chain
@@ -183,9 +183,9 @@ <h1 class=visually-hidden>
183183 15 Nov 2025
184184 </ time >
185185 </ x509-hdr >
186-
187-
188- <!--
186+
187+
188+ <!--
189189 <div class=hdr>
190190 <a class=hdr-icon href='https://javascript-2020.github.io/'>
191191 <img class=hdr-icon-img src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAMAAAAM7l6QAAAAqFBMVEVHcEwjmpckopg9f3YxpJM6r5kjq58Nmp0Nn6QRoKExrpshnpgtoJUdoZwYnZ02spwYpaEmrZ8djpINn6Qtrp4inpcjqZ8SoqM3s5w0sp01spwrr58vr50oqpwdnpo0sZwtrJwUpKMMoaUtq50op5ssqpopppseqaM1sJwgpJ0NoaUSoaI3kYobqaMSpKQrr58PoaMVpaIOoKMLpKcXpaEkqp8Rm58YrKUL0CR4AAAAOHRSTlMACBkBCyinK59CQhUOLyKjqbUGpZgSYn6rp5WsekcmgkyWmCkmNB7AYTiuVgKuuo91i2PLn2lJ7kISMf4AAAElSURBVCjPrdPXloIwEAbgBDFKCRo6SO8lYEHd93+zxV7Zm2WuSL6Tk/MPEwBGLFH8SzFCeFiDXNeJ+7GtGds1D+ghDzzPzXX6xlJbq75s5KVLiJsSB76xIhd22Mz0pkyRnqzW2htD/SeUjL0EQKY60nqRvTLXGl64PR/SfDVxVvETZ123w8vN9Ur5YKUF4R9cd/WxqiePgCs3IMF1QXcVt6vK59tSqyjN4hwQbhS8mUuvWTLbwYtTQGhEjLHVPprv+4ztQ8AeRVn50uipBcXg/IPgfPaFF+z1axyeMEkcJwwdYHHZINQ02gALS49lJcQMci/COGzdue8apRQwNz4tYvM207JSRVEUhvtW6KeBIFVVbds07xPncZfCfWSK+UtNJ/9+VL/nTBuX7xjDZwAAAABJRU5ErkJggg==' />
@@ -219,8 +219,8 @@ <h1 class=visually-hidden>
219219
220220 < pre id =view >
221221 </ pre >
222-
223-
222+
223+
224224 </ body >
225225
226226
@@ -235,24 +235,24 @@ <h1 class=visually-hidden>
235235
236236 var btn = { } ;
237237
238-
238+
239239 //:
240240
241241
242242 function initdom ( rootnode ) {
243-
244-
243+
244+
245245 hdr . initdom ( ) ;
246-
246+
247247 var btns = $ ( '#btns' ) ;
248248
249249 $ ( btns , '#clear' ) . onclick = btn . clear ;
250250 $ ( btns , '#add' ) . onclick = btn . add ;
251251 $ ( btns , '#save' ) . onclick = btn . save ;
252-
253-
252+
253+
254254 chain = $ ( '#chain' ) ;
255-
255+
256256
257257 view = $ ( '#view' )
258258 view . replaceChildren ( ) ;
@@ -262,20 +262,20 @@ <h1 class=visually-hidden>
262262
263263 } //initdom
264264
265-
265+
266266 //:
267267
268268
269269 btn . clear = function ( ) {
270-
270+
271271 list = [ ] ;
272272 view . textContent = list . join ( '\n' ) ;
273273
274274 } //clear
275275
276276
277277 btn . add = async function ( ) {
278-
278+
279279 var txt = await load . file ( ) ;
280280 list . push ( txt ) ;
281281
@@ -285,7 +285,7 @@ <h1 class=visually-hidden>
285285
286286
287287 btn . save = function ( ) {
288-
288+
289289 var cert = list . join ( '\n' ) ;
290290 var blob = new Blob ( [ cert ] ) ;
291291 var url = window . URL . createObjectURL ( blob ) ;
@@ -299,7 +299,7 @@ <h1 class=visually-hidden>
299299
300300
301301 load . file = function ( ) {
302-
302+
303303 var resolve , promise = new Promise ( res => resolve = res ) ;
304304
305305 var input = document . createElement ( 'input' ) ;
@@ -311,7 +311,7 @@ <h1 class=visually-hidden>
311311
312312
313313 async function onchange ( ) {
314-
314+
315315 var txt = await input . files [ 0 ] . text ( ) ;
316316 resolve ( txt ) ;
317317
@@ -324,15 +324,15 @@ <h1 class=visually-hidden>
324324 } //display
325325
326326
327-
328-
327+
328+
329329
330330
331331
332332
333333 </ script >
334-
335-
334+
335+
336336</ html >
337337
338338
0 commit comments