|
4 | 4 |
|
5 | 5 | <template shadowrootmode=open> |
6 | 6 |
|
| 7 | + <!-- |
7 | 8 | <link rel=stylesheet href='css/github-markdown-light.css'> |
| 9 | + --> |
8 | 10 | <!-- |
9 | 11 | <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/water.css@2/out/light.css"> |
10 | 12 | --> |
11 | 13 |
|
12 | | - <style> |
| 14 | + <style id=stylesheet> |
| 15 | + </style> |
13 | 16 |
|
| 17 | + <style> |
| 18 | + :host |
| 19 | + {display:flex;flex-direction:column;overflow:auto} |
| 20 | + |
14 | 21 | #root |
15 | | - {height:100%;display:flex;flex-direction:column;gap:5px} |
| 22 | + {flex:1;display:flex;flex-direction:column;gap:5px;overflow:auto} |
16 | 23 |
|
17 | 24 | #hdr |
18 | 25 | {display:flex} |
| 26 | + |
| 27 | + #npm |
| 28 | + {margin-right:20px;display:flex;align-items:center;gap:5px} |
| 29 | + |
| 30 | + #npm img |
| 31 | + {width:15px;height:15px} |
| 32 | + |
| 33 | + #standard |
| 34 | + {display:flex} |
| 35 | + |
19 | 36 | .radio |
20 | 37 | {border:1px solid lightgray;padding:2px 10px;border-radius:5px;cursor:pointer;display:flex;align-items:center} |
21 | 38 | .radio [type] |
22 | 39 | {margin-right:5px;cursor:pointer} |
23 | 40 |
|
24 | 41 |
|
25 | | - #output, web-editor |
26 | | - {height:100%;border:2px solid lightgray;box-sizing:border-box} |
| 42 | + #view |
| 43 | + {flex:1;overflow:auto;display:flex;flex-direction:column} |
| 44 | + |
| 45 | + |
| 46 | + #output, web-editor, #npm-output |
| 47 | + {flex:1;border:2px solid lightgray;box-sizing:border-box} |
| 48 | + |
27 | 49 | #output |
28 | 50 | {overflow:auto;padding:10px} |
29 | 51 |
|
| 52 | + #npm-output |
| 53 | + {overflow:auto;max-width: 820px;margin: 0 auto} |
| 54 | + |
| 55 | + |
30 | 56 | .spc |
31 | 57 | {flex:1} |
32 | 58 |
|
|
36 | 62 |
|
37 | 63 | <div id=hdr> |
38 | 64 |
|
39 | | - <span id=html class=radio> |
40 | | - <input type=checkbox checked> |
41 | | - allow-html |
42 | | - </span> |
43 | | - <span id=breaks class=radio> |
| 65 | + <div id=npm class=radio> |
44 | 66 | <input type=checkbox> |
45 | | - breaks |
46 | | - </span> |
47 | | - <span id=linkify class=radio> |
48 | | - <input type=checkbox checked> |
49 | | - linkify |
50 | | - </span> |
| 67 | + <img src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcBAMAAACAI8KnAAAALVBMVEXLAADKAADMERHVSkrURkb////eeXnghITfgIDstrbFAADJAADhiorPJCTVSUliGH6+AAAAUklEQVR4AWMgETAKQoEAmKvsAgVGYEnTUCgIFmBgYmAQgOtiAHERACdXSNkBmevi/AGZyxrwAU3v4OJ+gLACGP7DA8dZgOGeixEi6ECUAIlhDgBoOA7wXH0RDQAAAABJRU5ErkJggg=='> |
| 68 | + npm |
| 69 | + </div> |
| 70 | + |
| 71 | + <div id=standard> |
| 72 | + <span id=html class=radio> |
| 73 | + <input type=checkbox checked> |
| 74 | + allow-html |
| 75 | + </span> |
| 76 | + <span id=breaks class=radio> |
| 77 | + <input type=checkbox> |
| 78 | + breaks |
| 79 | + </span> |
| 80 | + <span id=linkify class=radio> |
| 81 | + <input type=checkbox checked> |
| 82 | + linkify |
| 83 | + </span> |
| 84 | + |
| 85 | + </div> |
51 | 86 |
|
52 | 87 | <span class=spc></span> |
53 | 88 |
|
|
62 | 97 |
|
63 | 98 | </div> |
64 | 99 |
|
65 | | - <div id=output class=markdown-body> |
66 | | - </div> |
| 100 | + <div id=view> |
67 | 101 |
|
68 | | - <web-editor component mode=html style='display:none'></web-editor> |
| 102 | + <div id=output class=markdown-body> |
| 103 | + </div> |
| 104 | + |
| 105 | + <div id=npm-output class='_6d9832ac _704c034e' style='display:none'> |
| 106 | + <div id=readme> |
| 107 | + </div> |
| 108 | + </div> |
| 109 | + |
| 110 | + <web-editor component mode=html style='display:none'> |
| 111 | + </web-editor> |
| 112 | + |
| 113 | + </div> |
69 | 114 |
|
70 | 115 | </div> |
71 | 116 |
|
|
97 | 142 | //vars:- |
98 | 143 |
|
99 | 144 | var md; |
| 145 | + var css = {}; |
100 | 146 |
|
101 | 147 | var cur = {}; |
102 | 148 | cur.mode = 'md'; |
103 | 149 | cur.txt = null; |
104 | 150 |
|
105 | 151 | var shadow; |
| 152 | + var standard; |
106 | 153 | var output; |
107 | 154 | var chk = {}; |
108 | 155 |
|
| 156 | + var npm_output; |
| 157 | + var npm_readme; |
| 158 | + |
109 | 159 | var editor; |
110 | 160 |
|
111 | 161 |
|
|
124 | 174 |
|
125 | 175 |
|
126 | 176 | var btn = {}; |
127 | | - var show = {}; |
128 | 177 |
|
129 | 178 |
|
130 | 179 | //: |
|
149 | 198 | function libs(){ |
150 | 199 |
|
151 | 200 | var resolve,promise=new Promise(res=>resolve=res); |
| 201 | + |
152 | 202 | var ct = 0; |
| 203 | + var total = 4; |
153 | 204 |
|
154 | 205 | var script = document.createElement('script'); |
155 | 206 | script.src = 'https://cdn.jsdelivr.net/npm/markdown-it/dist/markdown-it.min.js'; |
|
161 | 212 | script.onload = onload; |
162 | 213 | document.head.append(script); |
163 | 214 |
|
| 215 | + get('/css/npm.css').then(({txt='',error})=>(css.npm=txt,onload())); |
| 216 | + get('/css/github-markdown-light.css').then(({txt='',error})=>(css.github=txt,onload())); |
| 217 | + |
164 | 218 | return promise; |
165 | 219 |
|
166 | 220 |
|
167 | 221 | function onload(){ |
168 | 222 |
|
169 | 223 | ct++; |
170 | | - if(ct!=2)return; |
| 224 | + if(ct!=total)return; |
171 | 225 | resolve(); |
172 | 226 |
|
173 | 227 | }//onload |
174 | 228 |
|
175 | 229 | }//libs |
176 | 230 |
|
177 | 231 |
|
| 232 | + async function get(url){ |
| 233 | + |
| 234 | + var err; |
| 235 | + try{ |
| 236 | + |
| 237 | + var res = await fetch(url); |
| 238 | + |
| 239 | + }//try |
| 240 | + catch(err2){ |
| 241 | + |
| 242 | + err = err2; |
| 243 | + |
| 244 | + }//catch |
| 245 | + if(err){ |
| 246 | + var error = err.message; |
| 247 | + return {error} |
| 248 | + } |
| 249 | + if(!res.ok){ |
| 250 | + var error = await res.text(); |
| 251 | + return {error}; |
| 252 | + } |
| 253 | + |
| 254 | + var txt = await res.text(); |
| 255 | + return {txt}; |
| 256 | + |
| 257 | + }//get |
| 258 | + |
| 259 | + |
178 | 260 | //: |
179 | 261 |
|
180 | 262 |
|
|
183 | 265 | shadow = host.shadowRoot; |
184 | 266 |
|
185 | 267 | var hdr = $(shadow,'#hdr'); |
| 268 | + |
| 269 | + chk.npm = $.chkbox(shadow,'#npm',btn.npm); |
| 270 | + |
| 271 | + standard = $(hdr,'#standard'); |
| 272 | + |
186 | 273 | chk.html = $.chkbox(shadow,'#html'); |
187 | 274 | chk.breaks = $.chkbox(shadow,'#breaks'); |
188 | 275 | chk.linkify = $.chkbox(shadow,'#linkify'); |
| 276 | + |
189 | 277 | var group = $.chkbox.group(shadow,'#mode-md','#mode-html'); |
190 | 278 | group.callback = btn.mode; |
191 | 279 |
|
192 | 280 |
|
193 | 281 | output = $(shadow,'#output'); |
| 282 | + npm_output = $(shadow,'#npm-output'); |
| 283 | + npm_readme = $(shadow,'#readme'); |
194 | 284 |
|
195 | 285 |
|
196 | 286 | }//initdom |
|
199 | 289 | //: |
200 | 290 |
|
201 | 291 |
|
| 292 | + btn.npm = function(chk){ |
| 293 | + |
| 294 | + if(chk.checked){ |
| 295 | + standard.style.display = 'none'; |
| 296 | + }else{ |
| 297 | + standard.style.display = ''; |
| 298 | + } |
| 299 | + |
| 300 | + }//npm |
| 301 | + |
| 302 | + |
202 | 303 | btn.mode = function(chk,id){ |
203 | 304 | debug('btn.mode',id); |
204 | 305 | switch(id){ |
|
251 | 352 | } |
252 | 353 | cur.txt = txt; |
253 | 354 |
|
| 355 | + if(chk.npm.checked){ |
| 356 | + display.npm(txt); |
| 357 | + return; |
| 358 | + } |
| 359 | + |
254 | 360 | var opts = { |
255 | 361 | linkTarget : '_blank', |
256 | 362 | }; |
|
265 | 371 |
|
266 | 372 | display[cur.mode](html); |
267 | 373 |
|
268 | | - }//show |
| 374 | + }//display |
269 | 375 |
|
270 | 376 |
|
271 | 377 | display.md = function(html){ |
272 | 378 | debug('display.md'); |
| 379 | + show('output'); |
| 380 | + |
273 | 381 | output.innerHTML = html; |
274 | 382 |
|
275 | | - output.style.display = ''; |
276 | | - editor.__host.style.display = 'none'; |
| 383 | + $(shadow,'#stylesheet').textContent = css.github; |
| 384 | + |
277 | 385 |
|
278 | 386 | }//md |
279 | 387 |
|
280 | 388 |
|
| 389 | + display.npm = async function(txt){ |
| 390 | + debug('display.npm'); |
| 391 | + var html = await github_markdown(txt); |
| 392 | + |
| 393 | + npm_readme.innerHTML = html; |
| 394 | + |
| 395 | + $(shadow,'#stylesheet').textContent = css.npm; |
| 396 | + |
| 397 | + show('npm'); |
| 398 | + |
| 399 | + }//npm |
| 400 | + |
| 401 | + |
| 402 | + async function github_markdown(txt){ |
| 403 | + |
| 404 | + var body = txt; |
| 405 | + var res = await fetch('https://api.github.com/markdown/raw',{method:'post',body}); |
| 406 | + var txt = await res.text(); |
| 407 | + return txt; |
| 408 | + |
| 409 | + }//get |
| 410 | + |
| 411 | + |
281 | 412 | display.html = function(html){ |
282 | 413 | debug('display.html'); |
283 | 414 | editor.set(html); |
284 | 415 |
|
285 | | - output.style.display = 'none'; |
286 | | - editor.__host.style.display = ''; |
| 416 | + show('editor'); |
287 | 417 |
|
288 | 418 | }//html |
289 | 419 |
|
290 | 420 |
|
| 421 | + function show(id){ |
| 422 | + |
| 423 | + switch(id){ |
| 424 | + |
| 425 | + case 'output' : |
| 426 | + output.style.display = ''; |
| 427 | + npm_output.style.display = 'none'; |
| 428 | + editor.__host.style.display = 'none'; |
| 429 | + break; |
| 430 | + |
| 431 | + case 'npm' : |
| 432 | + output.style.display = 'none'; |
| 433 | + npm_output.style.display = ''; |
| 434 | + editor.__host.style.display = 'none'; |
| 435 | + break; |
| 436 | + |
| 437 | + case 'editor' : |
| 438 | + output.style.display = 'none'; |
| 439 | + npm_output.style.display = 'none'; |
| 440 | + editor.__host.style.display = ''; |
| 441 | + break; |
| 442 | + |
| 443 | + }//switch |
| 444 | + |
| 445 | + }//show |
| 446 | + |
| 447 | + |
291 | 448 | //: |
292 | 449 |
|
293 | 450 |
|
|
0 commit comments