Baseline 2023
Newly available
importmap
ã®å¤ã <script>
è¦ç´ ã® type
屿§ã«è¨å®ããã¨ãè¦ç´ ã®æ¬ä½ãã¤ã³ãã¼ããããã§ãããã¨ã示ãã¾ãã
ã¤ã³ãã¼ããããã¯ãJavaScript ã¢ã¸ã¥ã¼ã«ãã¤ã³ãã¼ãããéã«ããã©ã¦ã¶ã¼ãã¢ã¸ã¥ã¼ã«æå®åã解決ããæ¹æ³ãéçºè
ãå¶å¾¡ã§ããããã«ããããã® JSON ãªãã¸ã§ã¯ãã§ããããã¯ãimport
æã import()
æ¼ç®åã§ã¢ã¸ã¥ã¼ã«æå®åã¨ãã¦ä½¿ç¨ãããããã¹ãã¨ãæå®åã解決ããã¨ãã«ããã¹ããç½®ãæãã対å¿ããå¤ã¨ã®éã®å¯¾å¿è¡¨ãæä¾ãã¾ãã JSON ãªãã¸ã§ã¯ãã¯ãJSON ã®ã¤ã³ãã¼ãããã表ç¾ã«é©åãã¦ããå¿
è¦ãããã¾ãã
ã¤ã³ãã¼ããããã¯ãéçã¤ã³ãã¼ããåçã¤ã³ãã¼ãã®ã¢ã¸ã¥ã¼ã«æå®åã解決ããããã«ä½¿ç¨ãããããããããå
ã§å®£è¨ãããæå®åã使ç¨ãã¦ã¢ã¸ã¥ã¼ã«ãã¤ã³ãã¼ããã <script>
è¦ç´ ã®åã«å®£è¨ããå¦çããå¿
è¦ãããã¾ãã ã¤ã³ãã¼ããããã¯ã import
æã¾ãã¯ææ¸å
ã®èªã¿è¾¼ã¾ããã¢ã¸ã¥ã¼ã«ç¨ã® import()
æ¼ç®åã«ããã®ã¢ã¸ã¥ã¼ã«æå®åã«ã®ã¿é©ç¨ããããã¨ã«æ³¨æãã¦ãã ããã <script>
è¦ç´ ã® src
屿§ã§æå®ããããã¹ããã¯ã¼ã«ã¼ã¾ãã¯ã¯ã¼ã¯ã¬ããã«èªã¿è¾¼ã¾ããã¢ã¸ã¥ã¼ã«ã«ã¯é©ç¨ããã¾ããã
詳ããæ å ±ã¯ãJavaScript ã¢ã¸ã¥ã¼ã«ã¬ã¤ãã®ã¤ã³ãã¼ããããã使ç¨ããã¢ã¸ã¥ã¼ã«ã®ã¤ã³ãã¼ãã®ç¯ãåç §ãã¦ãã ããã
æ§æ<script type="importmap">
// JSON ãªãã¸ã§ã¯ãå®ç¾©ã¤ã³ãã¼ã
</script>
src
ãasync
ãnomodule
ãdefer
ãcrossorigin
ãintegrity
ãreferrerpolicy
ã®å屿§ã¯æå®ãããã¨ã¯ã§ãã¾ããã
TypeError
ã¤ã³ãã¼ããããã®å®ç¾©ã JSON ãªãã¸ã§ã¯ãã§ãªããimportmap
ã®ãã¼ã¯å®ç¾©ããã¦ããããã®å¤ã JSON ãªãã¸ã§ã¯ãã§ãªããscopes
ã®ãã¼ã¯å®ç¾©ããã¦ãããããã®å¤ã JSON ãªãã¸ã§ã¯ãã§ãªãã
ãã©ã¦ã¶ã¼ã¯ãã¤ã³ãã¼ããããã® JSON ãã¤ã³ãã¼ããããã¹ãã¼ãã«é©åãã¦ããªãä»ã®å ´åãã³ã³ã½ã¼ã«è¦åãçæãã¾ãã
解説JavaScript ã¢ã¸ã¥ã¼ã«ãã¤ã³ãã¼ãããå ´åã¯ã import
æã¨ import()
æ¼ç®åã®ã©ã¡ãã§ãã£ã¦ããã¤ã³ãã¼ãããã¢ã¸ã¥ã¼ã«ã示ããã¢ã¸ã¥ã¼ã«æå®åããããã¾ãã ãã©ã¦ã¶ã¼ã¯ãã¢ã¸ã¥ã¼ã«ãã¤ã³ãã¼ãããããã«ããã®æå®åã絶対ç㪠URL ã«è§£æ±ºã§ããªããã°ãªãã¾ããã
ä¾ãã°ãæ¬¡ã®æã¯ã絶対 URL ã§ããã¢ã¸ã¥ã¼ã«æå®å "https://example.com/shapes/circle.js"
ããã³ãææ¸ã®ãã¼ã¹ URL ã«å¯¾ããç¸å¯¾ãã¹ã§ããã¢ã¸ã¥ã¼ã«æå®å "./modules/shapes/square.js"
ããè¦ç´ ãã¤ã³ãã¼ããã¾ãã
import { name as circleName } from "https://example.com/shapes/circle.js";
import { name as squareName, draw } from "./modules/shapes/square.js";
ã¤ã³ãã¼ããããã«ãããéçºè ã¯ã¢ã¸ã¥ã¼ã«æå®åã«ï¼ã»ã¨ãã©ï¼å¥½ããªããã¹ããæå®ãããã¨ãã§ãã¾ãã対å¿è¡¨ã¯ãã¢ã¸ã¥ã¼ã«æå®åã解決ãããã¨ãã«ããã¹ããç½®ãæããã対å¿ããå¤ãæä¾ãã¾ãã
ãã¢ã¢ã¸ã¥ã¼ã«ä¸è¨ã®ã¤ã³ãã¼ãããã㯠imports
ãã¼ãå®ç¾©ãã¦ãããcircle
㨠square
ã¨ããããããã£ãæã¤ãã¢ã¸ã¥ã¼ã«æå®ãããããæã¡ã¾ãã
<script type="importmap">
{
"imports": {
"circle": "https://example.com/shapes/circle.js",
"square": "./modules/shapes/square.js"
}
}
</script>
ãã®ã¤ã³ãã¼ããããã使ãã°ãä¸è¨ã¨åãã¢ã¸ã¥ã¼ã«ãã¤ã³ãã¼ããããã¨ãã§ãã¾ãããã¢ã¸ã¥ã¼ã«æå®åã«ã¯ããã¢ã¢ã¸ã¥ã¼ã«ãã使ç¨ãã¾ãã
import { name as circleName } from "circle";
import { name as squareName, draw } from "square";
ãã¹æ¥é è¾ã®ãããã³ã°
ã¢ã¸ã¥ã¼ã«æå®åã®ããããã¼ã¯ãã¢ã¸ã¥ã¼ã«æå®åã®ãã¹ã®æ¥é è¾ãå²ãå½ã¦ç´ãããã«ä½¿ç¨ãããã¨ãã§ãã¾ãã ãã®å ´åãããããã£ã¨å²ãå½ã¦ããããã¹ã¯ãã©ã¡ããæ«å°¾ã«ãã©ã¯ã¼ãã¹ã©ãã·ã¥ (/
) ãä¿æããå¿
è¦ããããã¨ã«æ³¨æãã¦ãã ããã
<script type="importmap">
{
"imports": {
"shapes/": "./modules/shapes/",
"other-shapes/": "https://example.com/modules/shapes/"
}
}
</script>
ããã¦ã次ã®ããã« circle ã¢ã¸ã¥ã¼ã«ãã¤ã³ãã¼ããããã¨ãã§ãã¾ããã
import { name as circleName } from "shapes/circle.js";
ã¢ã¸ã¥ã¼ã«æå®ããã対å¿è¡¨ã®ãã¼ã«å«ã¾ãããã¹
ã¢ã¸ã¥ã¼ã«æå®åã®ãã¼ã¯åä¸ã®åèªåï¼ãç´ ã®ååãï¼ã§ããå¿
è¦ã¯ããã¾ããã ã¾ãããã¹åºåãæåãå«ãããããã¹åºåãæåã§çµãã£ããã絶対 URL ã§ãã£ããã/
ã./
ã../
ã§å§ã¾ãç¸å¯¾ URL ãã¹ã§ãã£ãããããã¨ãå¯è½ã§ãã
{
"imports": {
"modules/shapes/": "./modules/src/shapes/",
"modules/square": "./modules/src/other/shapes/square.js",
"https://example.com/modules/square.js": "./modules/src/other/shapes/square.js",
"../modules/shapes/": "/modules/shapes/"
}
}
ã¢ã¸ã¥ã¼ã«æå®åãããã«ä¸è´ããå¯è½æ§ã®ããè¤æ°ã®ã¢ã¸ã¥ã¼ã«æå®åãã¼ãããå ´åãæã詳細ãªãã¼ï¼ã¤ã¾ããããé·ããã¹/å¤ãæã¤ãã®ï¼ã鏿ããã¾ãã
ã¢ã¸ã¥ã¼ã«æå®å ./foo/../js/app.js
ã¯ç
§åãããåã« ./js/app.js
ã«è§£æ±ºãããã§ãããã ããã¯ãã¢ã¸ã¥ã¼ã«æå®åã®ãã¼ã ./js/app.js
ã§ããã°ãããããã¾ã£ããåãã§ãªãã¨ãã¦ããã¢ã¸ã¥ã¼ã«æå®åã¨ä¸è´ãããã¨ãæå³ãã¦ãã¾ãã
scopes` ãã¼ã使ã£ã¦ãã¢ã¸ã¥ã¼ã«ãã¤ã³ãã¼ãããã¹ã¯ãªãããç¹å®ã® URL ãã¹ãæ ¼ç´ããå ´åã«ã®ã¿ä½¿ç¨ããã対å¿ä»ããæä¾ãããã¨ãã§ãã¾ãã èªã¿è¾¼ãã¹ã¯ãªããã® URL ãæå®ããããã¹ã«ä¸è´ããå ´åããã®ã¹ã³ã¼ãã«é¢é£ä»ãããããããã³ã°ã使ç¨ããã¾ãã ããã«ãããã¤ã³ãã¼ããè¡ãã³ã¼ãã«ãã£ã¦ç°ãªããã¼ã¸ã§ã³ã®ã¢ã¸ã¥ã¼ã«ã使ç¨ãããã¨ãã§ãã¾ãã
ä¾ãã°ãä¸è¨ã®ãããã¯ããã¼ãã£ã³ã°ã¢ã¸ã¥ã¼ã«ã® URL ã«ãã¹ãè¨è¼ããã¦ããå ´åã«ã®ã¿ãã¹ã³ã¼ãä»ãã®ãããã使ç¨ãã¾ãã "/modules/custom-shapes/" ã¨ãããã¹ãå«ã¾ãããã¼ãã£ã³ã°ã¢ã¸ã¥ã¼ã«ã®å ´åã®ã¿ãã¹ã³ã¼ãä»ããããã使ç¨ããã¾ãã
<script type="importmap">
{
"imports": {
"square": "./modules/shapes/square.js"
},
"scopes": {
"/modules/custom-shapes/": {
"square": "https://example.com/modules/shapes/square.js"
}
}
}
</script>
è¤æ°ã®ã¹ã³ã¼ãããªãã¡ã©ã¼ URL ã«ä¸è´ããå ´åãæã詳細ãªã¹ã³ã¼ããã¹ã使ç¨ããã¾ãï¼ã¹ã³ã¼ããã¼åã®ä¸ã§æãé·ãååã®ãã®ã使ç¨ããã¾ãï¼ã ãã©ã¦ã¶ã¼ã¯ãä¸è´ããæå®åããªãå ´åã¯æ¬¡ã«æã詳細ãªã¹ã³ã¼ããã¹ã«ä»£æ¿ãããæçµçã«ã¯ imports
ãã¼ã®ã¢ã¸ã¥ã¼ã«æå®åãããã«ä»£æ¿ããã¾ãã
integrity
ãã¼ã使ç¨ãã¦ãã¢ã¸ã¥ã¼ã«ã®æ´åæ§ã¡ã¿ãã¼ã¿ã«å²ãå½ã¦ãããããããæä¾ãããã¨ãã§ãã¾ãã ããã«ãã£ã¦ãåçã¾ãã¯éçã«ã¤ã³ãã¼ããããã¢ã¸ã¥ã¼ã«ã®æ´åæ§ã確ä¿ãããã¨ãã§ãã¾ãã ã¾ãã integrity
ã使ç¨ããã¨ãæä¸ä½ã¾ãã¯äºåèªã¿è¾¼ã¿ãããã¢ã¸ã¥ã¼ã«ã«ãããããã¾ã integrity
屿§ãè¨å®ãã¦ããªãå ´åã«åãã¦ãä»£æ¿ææ®µãæä¾ãããã¨ãã§ãã¾ãã
ãããã®ãã¼ã¯ã¢ã¸ã¥ã¼ã«ã® URL ã表ãã絶対ãã¹ã¾ãã¯ç¸å¯¾ãã¹ï¼/
ã./
ã../
ã®ããããã§å§ããï¼ã®ã©ã¡ãã«ããããã¨ãã§ãã¾ãã ãããå¤ã¯æ´åæ§ã¡ã¿ãã¼ã¿ã表ãã integrity
屿§å¤ã§ä½¿ç¨ããã¦ãããã®ã¨åãã§ãã
ä¾ãã°ãä¸è¨ã®ãããã§ã¯ã square.js
ã¢ã¸ã¥ã¼ã«ï¼ç´æ¥ï¼ã¨ãã®çã®æå®åï¼imports
ãã¼çµç±ã§ééçã«æå®ããããã®ï¼ã®æ´åæ§ã¡ã¿ãã¼ã¿ãå®ç¾©ãã¦ãã¾ãã
<script type="importmap">
{
"imports": {
"square": "./modules/shapes/square.js"
},
"integrity": {
"./modules/shapes/square.js": "sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC"
}
}
</script>
è¤æ°ã®ã¤ã³ãã¼ããããã®çµ±å
å é¨çã«ã¯ããã©ã¦ã¶ã¼ã¯åä¸ã®ã°ãã¼ãã«ã¤ã³ãã¼ãããã表ç¾ãç¶æãã¦ãã¾ããè¤æ°ã®ã¤ã³ãã¼ãããããææ¸å ã«å«ã¾ãã¦ããå ´åããããã®å 容ã¯ç»é²æã«ã°ãã¼ãã«ã¤ã³ãã¼ããããã«çµ±åããã¾ãã
ä¾ãã°ã次ã®ãã㪠2 ã¤ã®ã¤ã³ãã¼ããããããã£ãã¨ãã¾ãã
<script type="importmap">
{
"imports": {
"/app/": "./original-app/"
}
}
</script>
<script type="importmap">
{
"imports": {
"/app/helper": "./helper/index.mjs"
},
"scopes": {
"/js": {
"/app/": "./js-app/"
}
}
}
</script>
ãããã¯æ¬¡ã®åä¸ã®ã¤ã³ãã¼ããããã¨ç価ã§ãã
<script type="importmap">
{
"imports": {
"/app/": "./original-app/",
"/app/helper": "./helper/index.mjs"
},
"scopes": {
"/js": {
"/app/": "./js-app/"
}
}
}
</script>
äºåã«è§£æ±ºæ¸ã¿ã®ç»é²æ¸ã¿ãããå ã®ã¢ã¸ã¥ã¼ã«æå®åã¯åé¤ããã¾ãããããã®æå®åããã®å¾è§£æ±ºãããå ´åãåå解決ãããçµæã¨åãçµæãã«ãªãã¾ãã
ä¾ãã°ãã¢ã¸ã¥ã¼ã«æå®å /app/helper.js
ããã§ã«ãæ¬¡ã®æ°ããã¤ã³ãã¼ããããã®ããã«è§£æ±ºããã¦ããã¨ãã¾ãã
<script type="importmap">
{
"imports": {
"/app/helper.js": "./helper/index.mjs",
"lodash": "/node_modules/lodash-es/lodash.js"
}
}
</script>
ããã¯æ¬¡ã®ãã®ã¨åçã§ãã
<script type="importmap">
{
"imports": {
"lodash": "/node_modules/lodash-es/lodash.js"
}
}
</script>
/app/helper.js
ã®ã«ã¼ã«ã¯ç¡è¦ããããããã«ã¯å²ãå½ã¦ããã¾ããã§ããã
åæ§ã«ãã°ãã¼ãã«ãããã® URL ã«ãã§ã«å²ãå½ã¦ããã¦ããç»é²æ¸ã¿ãããã®ã¢ã¸ã¥ã¼ã«æå®åã¯åé¤ãããååå²ãå½ã¦ããããããã³ã°ãåªå ããã¾ãã
ä¾ãã°ã次㮠2 ã¤ã®ã¤ã³ãã¼ãããããããã¨ãã¾ãã
<script type="importmap">
{
"imports": {
"/app/helper": "./helper/index.mjs",
"lodash": "/node_modules/lodash-es/lodash.js"
}
}
</script>
<script type="importmap">
{
"imports": {
"/app/helper": "./main/helper/index.mjs"
}
}
</script>
次ã®åä¸ã®ã¤ã³ãã¼ããããã«ç¸å½ãã¾ãã
<script type="importmap">
{
"imports": {
"/app/helper": "./helper/index.mjs",
"lodash": "/node_modules/lodash-es/lodash.js"
}
}
</script>
/app/helper/
ã«ã¼ã«ã¯ 2 ã¤ç®ã®ãããããåé¤ããã¾ãã
ã¡ã¢: 対å¿ãã¦ããªããã©ã¦ã¶ã¼ï¼äºææ§ãã¼ã¿ã確èªãã¦ãã ããï¼ã§ã¯ãããªãã£ã«ã使ç¨ãã¦ã¢ã¸ã¥ã¼ã«è§£æ±ºã«é¢é£ãã課é¡ãé¿ãããã¨ãã§ãã¾ãã
JSON ã®ã¤ã³ãã¼ãããã表ç¾ä»¥ä¸ã¯ãã¤ã³ãã¼ããããã® JSON 表ç¾ã«é¢ãããå ¬å¼ãªãå®ç¾©ã§ãã
ã¤ã³ãã¼ããããã¯æå¹ãª JSON ãªãã¸ã§ã¯ãã§ãªããã°ãªããããªãã·ã§ã³ãã¼ã§ãã import
ãscope
ãintegrity
ã®ãããããå®ç¾©ãããã¨ãã§ãã¾ããã§ããããããã®ãã¼ã®å¤ã¯ãªãã¸ã§ã¯ãã§ãªããã°ãªããã空ã§ãæ§ãã¾ããã
imports
çç¥å¯
å¤ã¯ã¢ã¸ã¥ã¼ã«æå®åãããã§ã import
æã import()
æ¼ç®åã«ç¾ãããããããªãã¢ã¸ã¥ã¼ã«æå®åããã¹ãã¨ãæå®åã解決ãããã¨ãã«ãããç½®ãæããããã¹ãã¨ã®éã®ãããã³ã°ãæä¾ãããã®ã§ãã
ãã㯠scopes
ãã¹ã® URL ãä¸è´ããªãå ´åããä¸è´ãã scopes
ãã¹ã®ã¢ã¸ã¥ã¼ã«æå®åãããã«ã¢ã¸ã¥ã¼ã«æå®åã¨ä¸è´ãããã¼ãæ ¼ç´ããã¦ããªãå ´åã«ãä¸è´ããã¢ã¸ã¥ã¼ã«æå®åãæ¢ãããã«æ¤ç´¢ãããäºåçãªå¯¾å¿è¡¨ã«ãªãã¾ãã
<ã¢ã¸ã¥ã¼ã«æå®åããã>
ãã¢ã¸ã¥ã¼ã«æå®åããããã¯æå¹ãª JSON ãªãã¸ã§ã¯ãã§ããã¼ ã¯ã¢ã¸ã¥ã¼ã«ãã¤ã³ãã¼ãããéã«ã¢ã¸ã¥ã¼ã«æå®åå ã«åå¨ããå¯è½æ§ã®ããããã¹ãã対å¿ãã å¤ ã¯ã¢ã¸ã¥ã¼ã«æå®åãã¢ãã¬ã¹ã«è§£æ±ºããéã«ãã®ããã¹ããç½®ãæãã URL ããã¹ã§ãã
ã¢ã¸ã¥ã¼ã«æå®åãããã® JSON ãªãã¸ã§ã¯ãã¯ã以ä¸ã®æ¡ä»¶ãä¿æãã¾ãã
/
, ./
, ../
ã§å§ã¾ãæå¹ãª URL æååãå®ç¾©ããå¿
è¦ãããã¾ãã/
ã§çµãã£ã¦ããå ´åã対å¿ããå¤ã /
ã§çµãããªããã°ãªãã¾ããã æ«å°¾ã« /
ãæã¤ãã¼ã¯ãã¢ã¸ã¥ã¼ã«ã®ã¢ãã¬ã¹ãå²ãå½ã¦ãããï¼ã¾ãã¯åå²ãå½ã¦ãããï¼ã¨ãã®æ¥é è¾ã¨ãã¦ä½¿ç¨ãããã¨ãã§ãã¾ããintegrity
çç¥å¯
æå¹ãª JSON ãªãã¸ã§ã¯ããå®ç¾©ãããã¼ã«ã¯æå¹ãªçµ¶å¯¾ URL ã¾ãã¯ç¸å¯¾ URL ï¼/
ã./
ã../
ã®ããããã§å§ãããã®ï¼ãå«ã¾ãã¦ããæååãæå®ãã¾ãã 対å¿ããå¤ã¯æå¹ãªæ´åæ§ã¡ã¿ãã¼ã¿ã§ãã
ã¢ã¸ã¥ã¼ã«ãã¤ã³ãã¼ãã¾ãã¯äºåèªã¿è¾¼ã¿ããã¹ã¯ãªããã® URL ã integrity
ãªãã¸ã§ã¯ãã®ãã¼ã¨ç
§åãããå ´åããã§ã«æ´åæ§ã¡ã¿ãã¼ã¿ãæ·»ä»ããã¦ããªãéãã対å¿ããæ´åæ§ã¡ã¿ãã¼ã¿ãã¹ã¯ãªããã®ãã§ãããªãã·ã§ã³ã«é©ç¨ããã¾ãã
scopes
çç¥å¯
ã¹ã³ã¼ãã¯ãã¹åºæã®ã¢ã¸ã¥ã¼ã«æå®åããããå®ç¾©ããã¢ã¸ã¥ã¼ã«ãã¤ã³ãã¼ãããã³ã¼ãã®ãã¹ã«ä¾åãããããã®é¸æãå¯è½ã«ãã¾ãã
scopes ãªãã¸ã§ã¯ãã¯æå¹ãª JSON ãªãã¸ã§ã¯ãã§ãåããããã£ã¯ <scope key>
ã§ããã㯠URL ãã¹ã§ããã対å¿ããå¤ã¯ <ã¢ã¸ã¥ã¼ã«æå®åããã>
ã§ãã
ã¢ã¸ã¥ã¼ã«ãã¤ã³ãã¼ããã¦ããã¹ã¯ãªããã® URL ã <scope key>
ã®ãã¹ã«ä¸è´ããå ´åããã®ãã¼ã«é¢é£ä»ãããã <ã¢ã¸ã¥ã¼ã«æå®åããã>
ã®å¤ãæåã«æå®åãä¸è´ãããã©ãã調ã¹ã¾ãã ä¸è´ããã¹ã³ã¼ããã¼ãè¤æ°ããå ´åã¯ãæã詳細ãª/æ·±ãã¹ã³ã¼ããã¹ã«é¢é£ä»ããããå¤ããæåã«ä¸è´ããã¢ã¸ã¥ã¼ã«æå®åã§ãããã©ããã調ã¹ã¾ãã ä¸è´ããã¹ã³ã¼ãä»ãã¢ã¸ã¥ã¼ã«æå®åãããã®ãããã«ãä¸è´ããã¢ã¸ã¥ã¼ã«æå®åãã¼ããªãå ´åã«ã¯ãimports
ã«ãããã©ã¼ã«ããã¯ã¢ã¸ã¥ã¼ã«æå®åãããã使ç¨ããã¾ãã
ãªããã¹ã³ã¼ãã«ãã£ã¦ã¢ãã¬ã¹ã®è§£æ±ºæ¹æ³ãå¤ãããã¨ã¯ããã¾ãããç¸å¯¾ã¢ãã¬ã¹ã¯å¸¸ã«ã¤ã³ãã¼ããããã®ãã¼ã¹ URL ã«è§£æ±ºããã¾ãã
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4