├── html5.org ├── robots.txt ├── favicon.ico ├── tools │ ├── icons │ │ ├── gecko │ │ ├── opera │ │ ├── chrome │ │ ├── webkit │ │ ├── google-gears │ │ ├── internet-explorer │ │ ├── .htaccess │ │ ├── browsers │ │ ├── conformance-checkers │ │ ├── authors │ │ └── tools │ └── .htaccess ├── .htaccess └── index.htm ├── test ├── .gitignore ├── package.json ├── build.mjs ├── blog.mjs ├── hsts.mjs ├── wiki.mjs ├── x-headers.mjs ├── cors.mjs ├── caching.mjs ├── certs.mjs ├── content-type.mjs └── redirects.mjs ├── debian ├── marquee │ ├── 01-certbot │ ├── scripts │ │ └── fdupes │ ├── nginx │ │ ├── sites │ │ │ ├── idea.whatwg.org.conf │ │ │ ├── spec.whatwg.org.conf │ │ │ ├── fs.spec.whatwg.org.conf │ │ │ ├── svn.whatwg.org.conf │ │ │ ├── dom.spec.whatwg.org.conf │ │ │ ├── specs.whatwg.org.conf │ │ │ ├── www.whatwg.org.conf │ │ │ ├── xhr.spec.whatwg.org.conf │ │ │ ├── books.idea.whatwg.org.conf │ │ │ ├── c.whatwg.org.conf │ │ │ ├── compat.spec.whatwg.org.conf │ │ │ ├── fetch.spec.whatwg.org.conf │ │ │ ├── help.whatwg.org.conf │ │ │ ├── infra.spec.whatwg.org.conf │ │ │ ├── quirks.spec.whatwg.org.conf │ │ │ ├── webidl.spec.whatwg.org.conf │ │ │ ├── console.spec.whatwg.org.conf │ │ │ ├── figures.idea.whatwg.org.conf │ │ │ ├── storage.spec.whatwg.org.conf │ │ │ ├── streams.spec.whatwg.org.conf │ │ │ ├── mimesniff.spec.whatwg.org.conf │ │ │ ├── testutils.spec.whatwg.org.conf │ │ │ ├── compression.spec.whatwg.org.conf │ │ │ ├── cookiestore.spec.whatwg.org.conf │ │ │ ├── fullscreen.spec.whatwg.org.conf │ │ │ ├── urlpattern.spec.whatwg.org.conf │ │ │ ├── websockets.spec.whatwg.org.conf │ │ │ ├── xn--7ca.whatwg.org.conf │ │ │ ├── books.spec.whatwg.org.conf │ │ │ ├── developer.whatwg.org.conf │ │ │ ├── validator.whatwg.org.conf │ │ │ ├── webvtt.spec.whatwg.org.conf │ │ │ ├── developers.whatwg.org.conf │ │ │ ├── domparsing.spec.whatwg.org.conf │ │ │ ├── figures.spec.whatwg.org.conf │ │ │ ├── html-differences.whatwg.org.conf │ │ │ ├── notifications.spec.whatwg.org.conf │ │ │ ├── mediasession.spec.whatwg.org.conf │ │ │ ├── websocket.spec.whatwg.org.conf │ │ │ ├── javascript.spec.whatwg.org.conf │ │ │ ├── n.whatwg.org.conf │ │ │ ├── images.whatwg.org.conf │ │ │ ├── encoding.spec.whatwg.org.conf │ │ │ ├── resources.whatwg.org.conf │ │ │ ├── lists.whatwg.org.conf │ │ │ ├── url.spec.whatwg.org.conf │ │ │ ├── forums.whatwg.org.conf │ │ │ ├── whatwg.org.conf │ │ │ └── html.spec.whatwg.org.conf │ │ └── conf │ │ │ ├── cache.conf │ │ │ ├── http.conf │ │ │ ├── whatwg-headers.conf │ │ │ └── whatwg.conf │ ├── README.md │ ├── 03-fdupes │ ├── 02-nginx-sites │ ├── 00-nginx-conf │ └── DOMAINS ├── common │ ├── 05-dhparam │ ├── scripts │ │ ├── README.md │ │ ├── certbot-renewal-hooks-deploy-nginx │ │ └── certbot │ ├── 00-upgrade │ ├── 03-unattended-upgrades │ ├── 06-swap │ ├── 02-mail │ ├── 01-adduser │ └── 04-ssh └── README.md ├── .github ├── dependabot.yml └── workflows │ └── test.yml ├── README.md ├── digitalocean ├── README.md ├── build.yaml ├── participate.yaml ├── blog.yaml └── wiki.yaml └── LICENSE /html5.org/robots.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | package-lock.json 3 | -------------------------------------------------------------------------------- /debian/marquee/01-certbot: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | 3 | ../common/scripts/certbot DOMAINS 4 | -------------------------------------------------------------------------------- /html5.org/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/whatwg/misc-server/HEAD/html5.org/favicon.ico -------------------------------------------------------------------------------- /debian/common/05-dhparam: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | 3 | openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048 4 | -------------------------------------------------------------------------------- /debian/common/scripts/README.md: -------------------------------------------------------------------------------- 1 | These scripts are invoked from other scripts, don't run them directly. 2 | -------------------------------------------------------------------------------- /debian/common/scripts/certbot-renewal-hooks-deploy-nginx: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | 3 | systemctl reload nginx 4 | -------------------------------------------------------------------------------- /html5.org/tools/icons/gecko: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/whatwg/misc-server/HEAD/html5.org/tools/icons/gecko -------------------------------------------------------------------------------- /html5.org/tools/icons/opera: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/whatwg/misc-server/HEAD/html5.org/tools/icons/opera -------------------------------------------------------------------------------- /html5.org/tools/icons/chrome: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/whatwg/misc-server/HEAD/html5.org/tools/icons/chrome -------------------------------------------------------------------------------- /html5.org/tools/icons/webkit: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/whatwg/misc-server/HEAD/html5.org/tools/icons/webkit -------------------------------------------------------------------------------- /html5.org/tools/icons/google-gears: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/whatwg/misc-server/HEAD/html5.org/tools/icons/google-gears -------------------------------------------------------------------------------- /debian/marquee/scripts/fdupes: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | 3 | sudo --user deploy fdupes --recurse --linkhard --noprompt /var/www/ 4 | -------------------------------------------------------------------------------- /html5.org/tools/icons/internet-explorer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/whatwg/misc-server/HEAD/html5.org/tools/icons/internet-explorer -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: npm 4 | directory: /test 5 | schedule: 6 | interval: monthly 7 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/idea.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name idea.whatwg.org; 3 | root /var/www/idea.whatwg.org; 4 | 5 | include /etc/nginx/whatwg.conf; 6 | } 7 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/spec.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name spec.whatwg.org; 3 | root /var/www/spec.whatwg.org; 4 | 5 | include /etc/nginx/whatwg.conf; 6 | } 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | This repository hosts miscellaneous resources spread among html5.org and whatwg.org domains. Improvements welcome. These resources are not automatically synchronized so take care. 2 | -------------------------------------------------------------------------------- /debian/common/00-upgrade: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | 3 | apt update -y 4 | apt upgrade -y 5 | apt autoremove -y 6 | 7 | echo "Etc/UTC" > /etc/timezone 8 | dpkg-reconfigure -f noninteractive tzdata 9 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/fs.spec.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name fs.spec.whatwg.org; 3 | root /var/www/fs.spec.whatwg.org; 4 | 5 | include /etc/nginx/whatwg.conf; 6 | } 7 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/svn.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name svn.whatwg.org; 3 | 4 | include /etc/nginx/whatwg.conf; 5 | 6 | return 301 https://github.com/whatwg; 7 | } 8 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/dom.spec.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name dom.spec.whatwg.org; 3 | root /var/www/dom.spec.whatwg.org; 4 | 5 | include /etc/nginx/whatwg.conf; 6 | } 7 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/specs.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name specs.whatwg.org; 3 | 4 | include /etc/nginx/whatwg.conf; 5 | 6 | return 301 https://spec.whatwg.org/; 7 | } 8 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/www.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name www.whatwg.org; 3 | 4 | include /etc/nginx/whatwg.conf; 5 | 6 | return 301 https://whatwg.org$request_uri; 7 | } 8 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/xhr.spec.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name xhr.spec.whatwg.org; 3 | root /var/www/xhr.spec.whatwg.org; 4 | 5 | include /etc/nginx/whatwg.conf; 6 | } 7 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/books.idea.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name books.idea.whatwg.org; 3 | root /var/www/books.idea.whatwg.org; 4 | 5 | include /etc/nginx/whatwg.conf; 6 | } 7 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/c.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name c.whatwg.org; 3 | 4 | include /etc/nginx/whatwg.conf; 5 | 6 | return 301 https://html.spec.whatwg.org$request_uri; 7 | } 8 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/compat.spec.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name compat.spec.whatwg.org; 3 | root /var/www/compat.spec.whatwg.org; 4 | 5 | include /etc/nginx/whatwg.conf; 6 | } 7 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/fetch.spec.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name fetch.spec.whatwg.org; 3 | root /var/www/fetch.spec.whatwg.org; 4 | 5 | include /etc/nginx/whatwg.conf; 6 | } 7 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/help.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name help.whatwg.org; 3 | 4 | include /etc/nginx/whatwg.conf; 5 | 6 | return 301 https://html.spec.whatwg.org/dev/; 7 | } 8 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/infra.spec.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name infra.spec.whatwg.org; 3 | root /var/www/infra.spec.whatwg.org; 4 | 5 | include /etc/nginx/whatwg.conf; 6 | } 7 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/quirks.spec.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name quirks.spec.whatwg.org; 3 | root /var/www/quirks.spec.whatwg.org; 4 | 5 | include /etc/nginx/whatwg.conf; 6 | } 7 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/webidl.spec.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name webidl.spec.whatwg.org; 3 | root /var/www/webidl.spec.whatwg.org; 4 | 5 | include /etc/nginx/whatwg.conf; 6 | } 7 | -------------------------------------------------------------------------------- /test/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "dependencies": { 4 | "mocha": "^11.0.1" 5 | }, 6 | "scripts": { 7 | "test": "mocha --timeout=10000 --retries=3 *.mjs" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/console.spec.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name console.spec.whatwg.org; 3 | root /var/www/console.spec.whatwg.org; 4 | 5 | include /etc/nginx/whatwg.conf; 6 | } 7 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/figures.idea.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name figures.idea.whatwg.org; 3 | root /var/www/figures.idea.whatwg.org; 4 | 5 | include /etc/nginx/whatwg.conf; 6 | } 7 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/storage.spec.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name storage.spec.whatwg.org; 3 | root /var/www/storage.spec.whatwg.org; 4 | 5 | include /etc/nginx/whatwg.conf; 6 | } 7 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/streams.spec.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name streams.spec.whatwg.org; 3 | root /var/www/streams.spec.whatwg.org; 4 | 5 | include /etc/nginx/whatwg.conf; 6 | } 7 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/mimesniff.spec.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name mimesniff.spec.whatwg.org; 3 | root /var/www/mimesniff.spec.whatwg.org; 4 | 5 | include /etc/nginx/whatwg.conf; 6 | } 7 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/testutils.spec.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name testutils.spec.whatwg.org; 3 | root /var/www/testutils.spec.whatwg.org; 4 | 5 | include /etc/nginx/whatwg.conf; 6 | } 7 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/compression.spec.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name compression.spec.whatwg.org; 3 | root /var/www/compression.spec.whatwg.org; 4 | 5 | include /etc/nginx/whatwg.conf; 6 | } 7 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/cookiestore.spec.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name cookiestore.spec.whatwg.org; 3 | root /var/www/cookiestore.spec.whatwg.org; 4 | 5 | include /etc/nginx/whatwg.conf; 6 | } 7 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/fullscreen.spec.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name fullscreen.spec.whatwg.org; 3 | root /var/www/fullscreen.spec.whatwg.org; 4 | 5 | include /etc/nginx/whatwg.conf; 6 | } 7 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/urlpattern.spec.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name urlpattern.spec.whatwg.org; 3 | root /var/www/urlpattern.spec.whatwg.org; 4 | 5 | include /etc/nginx/whatwg.conf; 6 | } 7 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/websockets.spec.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name websockets.spec.whatwg.org; 3 | root /var/www/websockets.spec.whatwg.org; 4 | 5 | include /etc/nginx/whatwg.conf; 6 | } 7 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/xn--7ca.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name xn--7ca.whatwg.org; 3 | 4 | include /etc/nginx/whatwg.conf; 5 | 6 | return 301 https://html.spec.whatwg.org$request_uri; 7 | } 8 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/books.spec.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name books.spec.whatwg.org; 3 | 4 | include /etc/nginx/whatwg.conf; 5 | 6 | return 302 https://books.idea.whatwg.org$request_uri; 7 | } 8 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/developer.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name developer.whatwg.org; 3 | 4 | include /etc/nginx/whatwg.conf; 5 | 6 | return 301 https://html.spec.whatwg.org/dev$request_uri; 7 | } 8 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/validator.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name validator.whatwg.org; 3 | 4 | include /etc/nginx/whatwg.conf; 5 | 6 | return 301 https://whatwg.org/validator$request_uri; 7 | } 8 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/webvtt.spec.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name webvtt.spec.whatwg.org; 3 | 4 | include /etc/nginx/whatwg.conf; 5 | 6 | return 302 https://w3c.github.io/webvtt$request_uri; 7 | } 8 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/developers.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name developers.whatwg.org; 3 | 4 | include /etc/nginx/whatwg.conf; 5 | 6 | return 301 https://html.spec.whatwg.org/dev$request_uri; 7 | } 8 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/domparsing.spec.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name domparsing.spec.whatwg.org; 3 | 4 | include /etc/nginx/whatwg.conf; 5 | 6 | return 302 https://w3c.github.io/DOM-Parsing/; 7 | } 8 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/figures.spec.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name figures.spec.whatwg.org; 3 | 4 | include /etc/nginx/whatwg.conf; 5 | 6 | return 302 https://figures.idea.whatwg.org$request_uri; 7 | } 8 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/html-differences.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name html-differences.whatwg.org; 3 | 4 | include /etc/nginx/whatwg.conf; 5 | 6 | return 301 https://html.spec.whatwg.org/dev/; 7 | } 8 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/notifications.spec.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name notifications.spec.whatwg.org; 3 | root /var/www/notifications.spec.whatwg.org; 4 | 5 | include /etc/nginx/whatwg.conf; 6 | } 7 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/mediasession.spec.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name mediasession.spec.whatwg.org; 3 | 4 | include /etc/nginx/whatwg.conf; 5 | 6 | return 302 https://w3c.github.io/mediasession/; 7 | } 8 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/websocket.spec.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name websocket.spec.whatwg.org; 3 | 4 | include /etc/nginx/whatwg.conf; 5 | 6 | return 301 https://websockets.spec.whatwg.org$request_uri; 7 | } 8 | -------------------------------------------------------------------------------- /debian/marquee/nginx/conf/cache.conf: -------------------------------------------------------------------------------- 1 | # cache static resources (fonts and images) for 7 days 2 | 3 | map $sent_http_content_type $expires { 4 | default off; 5 | ~font 7d; 6 | ~image/ 7d; 7 | } 8 | 9 | expires $expires; 10 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/javascript.spec.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name javascript.spec.whatwg.org; 3 | 4 | include /etc/nginx/whatwg.conf; 5 | 6 | return 302 https://github.com/tc39/ecma262/labels/web%20reality; 7 | } 8 | -------------------------------------------------------------------------------- /debian/common/03-unattended-upgrades: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | 3 | apt install -y unattended-upgrades 4 | dpkg-reconfigure unattended-upgrades 5 | cat >> /etc/apt/apt.conf.d/50unattended-upgrades < 2 | ForceType image/png 3 | 4 | 5 | ForceType image/svg+xml 6 | 7 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/images.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name images.whatwg.org; 3 | root /var/www/images.whatwg.org; 4 | 5 | include /etc/nginx/whatwg.conf; 6 | 7 | location / { 8 | default_type image/png; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /debian/marquee/README.md: -------------------------------------------------------------------------------- 1 | marquee hosts simple static sites. 2 | 3 | Repos that deploy to this server: 4 | - https://github.com/whatwg/whatwg.org/blob/main/resources.whatwg.org/build/deploy.sh (used by many specs) 5 | - https://github.com/whatwg/whatwg.org/blob/main/deploy.sh 6 | -------------------------------------------------------------------------------- /debian/common/06-swap: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | 3 | # https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-ubuntu-14-04 4 | dd if=/dev/zero of=/swapfile bs=1M count=2048 5 | chmod 600 /swapfile 6 | mkswap /swapfile 7 | swapon /swapfile 8 | echo "/swapfile none swap sw 0 0" >> /etc/fstab 9 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/encoding.spec.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name encoding.spec.whatwg.org; 3 | root /var/www/encoding.spec.whatwg.org; 4 | 5 | include /etc/nginx/whatwg.conf; 6 | 7 | location = /index-gbk.txt { 8 | return 410; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /html5.org/tools/.htaccess: -------------------------------------------------------------------------------- 1 | 2 | SetHandler cgi-script 3 | 4 | Redirect 410 /tools/web-forms-tracker 5 | Redirect 410 /tools/web-workers-tracker 6 | Redirect 410 /tools/parser-tracker 7 | Redirect 301 /tools/specification-diff https://html5.org/tools/web-apps-tracker 8 | -------------------------------------------------------------------------------- /debian/marquee/03-fdupes: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | 3 | # build and install fdupes with --linkhard support (not in debian package) 4 | apt install -y make gcc 5 | git clone https://github.com/tobiasschulz/fdupes tmp 6 | cd tmp 7 | make install 8 | cd .. 9 | rm -rf tmp 10 | apt remove -y make gcc 11 | apt autoremove -y 12 | -------------------------------------------------------------------------------- /debian/marquee/02-nginx-sites: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | 3 | rm -f /etc/nginx/sites-enabled/* 4 | cp nginx/sites/*.conf /etc/nginx/sites-available/ 5 | 6 | for domain in `cat DOMAINS`; do 7 | ln -s /etc/nginx/sites-available/$domain.conf /etc/nginx/sites-enabled/ 8 | done 9 | 10 | nginx -t 11 | systemctl reload-or-restart nginx.service 12 | -------------------------------------------------------------------------------- /debian/marquee/nginx/conf/http.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80 default_server; 3 | listen [::]:80 default_server; 4 | root /var/www/http; 5 | location ^~ /.well-known/acme-challenge/ { 6 | default_type application/jose+json; 7 | } 8 | location / { 9 | return 301 https://$host$request_uri; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /test/build.mjs: -------------------------------------------------------------------------------- 1 | import assert from 'assert'; 2 | 3 | describe('build', function() { 4 | specify('/version', async function() { 5 | const response = await fetch('https://build.whatwg.org/version'); 6 | assert.strictEqual(response.status, 200); 7 | const text = await response.text(); 8 | assert(text.length > 0); 9 | }); 10 | }); 11 | -------------------------------------------------------------------------------- /html5.org/.htaccess: -------------------------------------------------------------------------------- 1 | AddDefaultCharset utf-8 2 | Options -Indexes 3 | DirectoryIndex index.htm index.xht 4 | Redirect /complete https://html.spec.whatwg.org/ 5 | Redirect /spec https://html.spec.whatwg.org/multipage/ 6 | 7 | RewriteEngine On 8 | RewriteRule ^r/(\d+)$ /tools/web-apps-tracker?to=$1 9 | RewriteCond %{QUERY_STRING} & 10 | RewriteRule ^(.*) - [F] 11 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/resources.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name resources.whatwg.org; 3 | root /var/www/resources.whatwg.org; 4 | 5 | include /etc/nginx/whatwg.conf; 6 | 7 | location = /logo-mime.png { 8 | return 301 /logo-mimesniff.png; 9 | } 10 | location = /logo-mime.svg { 11 | return 301 /logo-mimesniff.svg; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /debian/common/02-mail: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | 3 | apt install -y exim4 s-nail 4 | echo "$(hostname)" > /etc/mailname 5 | sed -i "s/^\(dc_eximconfig_configtype\)=.*/\1='internet'/;s/^\(dc_other_hostnames\)=.*/\1='$(hostname)'/" /etc/exim4/update-exim4.conf.conf 6 | update-exim4.conf 7 | service exim4 restart 8 | echo admin@whatwg.org > ~/.forward 9 | echo | mail -s "$(hostname) test mail" root 10 | -------------------------------------------------------------------------------- /debian/marquee/nginx/conf/whatwg-headers.conf: -------------------------------------------------------------------------------- 1 | # These headers should be kept (mostly) in sync with 2 | # https://github.com/whatwg/participate.whatwg.org and 3 | # https://github.com/whatwg/blog.whatwg.org. 4 | add_header Access-Control-Allow-Origin "*" always; 5 | add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always; 6 | add_header X-Content-Type-Options "nosniff" always; 7 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/lists.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name lists.whatwg.org; 3 | root /var/www/lists.whatwg.org; 4 | 5 | include /etc/nginx/whatwg.conf; 6 | 7 | location ~ ^/listinfo.cgi/?$ { 8 | return 301 /; 9 | } 10 | 11 | location ~ ^/htdig.cgi(/(.*))?$ { 12 | return 301 /pipermail/$2; 13 | } 14 | 15 | default_type text/html; 16 | 17 | error_page 404 /404; 18 | } 19 | -------------------------------------------------------------------------------- /test/blog.mjs: -------------------------------------------------------------------------------- 1 | import assert from 'assert'; 2 | 3 | describe('blog', function() { 4 | // regression test for https://github.com/whatwg/meta/issues/59 5 | specify('Sunsetting the JavaScript Standard', async function() { 6 | const response = await fetch('https://blog.whatwg.org/javascript'); 7 | assert.strictEqual(response.status, 200); 8 | const text = await response.text(); 9 | // if it's broken it won't include the author 10 | assert(text.includes('Mathias Bynens')); 11 | }); 12 | }); 13 | -------------------------------------------------------------------------------- /debian/marquee/00-nginx-conf: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | 3 | apt install -y nginx 4 | apt install -y libnginx-mod-http-fancyindex 5 | 6 | rm -f /etc/nginx/conf.d/* 7 | rm -f /etc/nginx/sites-enabled/* 8 | 9 | cp nginx/conf/http.conf /etc/nginx/conf.d/ 10 | cp nginx/conf/cache.conf /etc/nginx/conf.d/ 11 | cp nginx/conf/whatwg.conf /etc/nginx/ 12 | cp nginx/conf/whatwg-headers.conf /etc/nginx/ 13 | 14 | mkdir -p /var/www/http/.well-known/acme-challenge 15 | 16 | chown -R deploy:deploy /var/www 17 | rm -rf /var/www/html 18 | 19 | nginx -t 20 | systemctl reload-or-restart nginx.service 21 | -------------------------------------------------------------------------------- /debian/common/01-adduser: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | 3 | adduser --gecos "" --disabled-password deploy || : 4 | 5 | cat ADMINS | while read user key; do 6 | adduser --gecos "" --disabled-password $user || continue 7 | 8 | # ssh 9 | mkdir /home/$user/.ssh/ 10 | chmod 0700 /home/$user/.ssh/ 11 | echo $key > /home/$user/.ssh/authorized_keys 12 | chmod 0600 /home/$user/.ssh/authorized_keys 13 | chown -R $user:$user /home/$user/.ssh/ 14 | 15 | # sudo 16 | echo "$user ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/$user 17 | chmod 0440 /etc/sudoers.d/$user 18 | done 19 | -------------------------------------------------------------------------------- /digitalocean/README.md: -------------------------------------------------------------------------------- 1 | This is the configuration for services running on [DigitalOcean's App Platform](https://www.digitalocean.com/products/app-platform/). 2 | 3 | The configuration is deployed manually with these steps: 4 | 5 | 1. Replace `__PRIVATE_CONFIG_JSON__` in `participate.yaml` with the actual JSON, as a base64-encoded string. 6 | 1. Replace `__MEDIAWIKI_SECRET_KEY__` and `__RECAPTCHA_SECRET_KEY__` in `wiki.yaml` with the actual values. 7 | 1. Run `doctl apps list` to get the ID of the apps. 8 | 1. For each app in [`participate`, `build`, `blog`, `wiki`]: 9 | 1. Run `doctl apps update $ID --spec=$APP.yaml` 10 | -------------------------------------------------------------------------------- /debian/common/04-ssh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | 3 | apt install -y openssh-server 4 | 5 | read -p "ssh password login will be disabled, press enter to continue" 6 | 7 | cat > /etc/ssh/sshd_config < 2 | -------------------------------------------------------------------------------- /test/hsts.mjs: -------------------------------------------------------------------------------- 1 | import assert from 'assert'; 2 | 3 | const HOSTNAMES = [ 4 | // not an exhaustive list, just enough to catch accidental removal 5 | 'whatwg.org', 6 | 'blog.whatwg.org', 7 | 'dom.spec.whatwg.org', 8 | 'participate.whatwg.org', 9 | 'resources.whatwg.org', 10 | 'spec.whatwg.org', 11 | 'wiki.whatwg.org', 12 | ]; 13 | 14 | describe('strict-transport-security header', function() { 15 | for (const hostname of HOSTNAMES) { 16 | specify(hostname, async function() { 17 | // redirecting is a failure since we might then test the wrong server 18 | const response = await fetch(`https://${hostname}/`, { redirect: 'manual' }); 19 | assert.strictEqual(response.status, 200); 20 | let value = response.headers.get('strict-transport-security'); 21 | assert.strictEqual(value, 'max-age=63072000; includeSubDomains; preload'); 22 | }); 23 | } 24 | }); 25 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/forums.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name forums.whatwg.org; 3 | root /var/www/forums.whatwg.org; 4 | 5 | include /etc/nginx/whatwg.conf; 6 | 7 | location / { 8 | index index.php; 9 | } 10 | 11 | location = / { 12 | return 301 /bb3/; 13 | } 14 | 15 | location ~ \.php { 16 | default_type text/html; 17 | 18 | # Strip &sid=... from the query string if present. 19 | if ($args ~ ^(.*?)&?sid=[a-z0-9]*$) { 20 | set $stripped $1$2; 21 | rewrite ^(.*)$ $1?$stripped? permanent; 22 | } 23 | 24 | # For requests with a query component, first look for a file with the 25 | # query string appended, then without. For viewtopic.php?p=120, look for 26 | # viewtopic.php__p=120, then viewtopic.php. __ is used because question 27 | # marks aren't allowed in filenames on Windows. 28 | try_files "${uri}__${args}" $uri =404; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /test/wiki.mjs: -------------------------------------------------------------------------------- 1 | import assert from 'assert'; 2 | 3 | describe('wiki', function() { 4 | specify('main page', async function() { 5 | const response = await fetch('https://wiki.whatwg.org/wiki/Main_Page'); 6 | assert.strictEqual(response.status, 200); 7 | const text = await response.text(); 8 | // the main page should link to the FAQ 9 | assert(text.includes('https://whatwg.org/faq')); 10 | assert(!text.includes('This site is experiencing technical difficulties')); 11 | }); 12 | 13 | specify('history', async function() { 14 | const response = await fetch('https://wiki.whatwg.org/index.php?title=IRC&action=history'); 15 | assert.strictEqual(response.status, 200); 16 | const text = await response.text(); 17 | // history pages should have a certain title and buttons 18 | assert(text.includes('IRC: Revision history')); 19 | assert(text.includes('value="Compare selected revisions"')); 20 | assert(!text.includes('This site is experiencing technical difficulties')); 21 | }); 22 | }); 23 | -------------------------------------------------------------------------------- /test/x-headers.mjs: -------------------------------------------------------------------------------- 1 | import assert from 'assert'; 2 | 3 | const TEST_DATA = [ 4 | // not an exhaustive list, just enough to catch accidental removal 5 | ['whatwg.org', 'nosniff', null], 6 | ['blog.whatwg.org', 'nosniff', 'sameorigin'], 7 | ['dom.spec.whatwg.org', 'nosniff', null], 8 | ['participate.whatwg.org', 'nosniff', 'deny'], 9 | ['resources.whatwg.org', 'nosniff', null], 10 | ['spec.whatwg.org', 'nosniff', null], 11 | ['wiki.whatwg.org', 'nosniff', 'sameorigin'], 12 | ]; 13 | 14 | describe('x-* headers', function() { 15 | for (const [hostname, cto, xfo] of TEST_DATA) { 16 | specify(hostname, async function() { 17 | // redirecting is a failure since we might then test the wrong server 18 | const response = await fetch(`https://${hostname}/`, { redirect: 'manual' }); 19 | assert.strictEqual(response.status, 200); 20 | assert.strictEqual(response.headers.get('x-content-type-options'), cto); 21 | assert.strictEqual(response.headers.get('x-frame-options'), xfo); 22 | // Expect no x-xss-protection header 23 | assert.strictEqual(response.headers.get('x-xss-protection'), null); 24 | }); 25 | } 26 | }); 27 | -------------------------------------------------------------------------------- /html5.org/tools/icons/conformance-checkers: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /test/cors.mjs: -------------------------------------------------------------------------------- 1 | import assert from 'assert'; 2 | 3 | const CORS_TESTS = [ 4 | // not an exhaustive list of domains, just enough to catch accidental removal 5 | 'https://dom.spec.whatwg.org/', 6 | 'https://html.spec.whatwg.org/', 7 | 'https://resources.whatwg.org/', 8 | 'https://whatwg.org/', 9 | ]; 10 | 11 | const NO_CORS_TESTS = [ 12 | // domains for which it's probably a mistake to have CORS headers 13 | 'https://blog.whatwg.org/', 14 | 'https://participate.whatwg.org/', 15 | 'https://wiki.whatwg.org/', 16 | ]; 17 | 18 | function test(url, expected) { 19 | specify(url, async function() { 20 | // redirecting is a failure since we might then test the wrong server 21 | const response = await fetch(url, { redirect: 'manual' }); 22 | assert.strictEqual(response.status, 200); 23 | assert.strictEqual(response.headers.get('access-control-allow-origin'), expected); 24 | }); 25 | } 26 | 27 | describe('access-control-allow-origin header', function() { 28 | describe('URLs with header', function() { 29 | for (const url of CORS_TESTS) { 30 | test(url, '*'); 31 | } 32 | }); 33 | describe('URLs without header', function() { 34 | for (const url of NO_CORS_TESTS) { 35 | test(url, null); 36 | } 37 | }); 38 | }); 39 | -------------------------------------------------------------------------------- /digitalocean/blog.yaml: -------------------------------------------------------------------------------- 1 | # https://www.digitalocean.com/docs/app-platform/references/app-specification-reference/ 2 | domains: 3 | - domain: blog.whatwg.org 4 | type: PRIMARY 5 | zone: whatwg.org 6 | name: blog 7 | region: nyc 8 | services: 9 | - dockerfile_path: Dockerfile 10 | envs: 11 | - key: WORDPRESS_DB_HOST 12 | scope: RUN_TIME 13 | value: ${whatwg-db.HOSTNAME}:${whatwg-db.PORT} 14 | - key: WORDPRESS_DB_NAME 15 | scope: RUN_TIME 16 | value: ${whatwg-db.DATABASE} 17 | - key: WORDPRESS_DB_USER 18 | scope: RUN_TIME 19 | value: ${whatwg-db.USERNAME} 20 | - key: WORDPRESS_DB_PASSWORD 21 | scope: RUN_TIME 22 | value: ${whatwg-db.PASSWORD} 23 | - key: WORDPRESS_EXTRA_CONFIG 24 | scope: RUN_TIME 25 | value: | 26 | define('DB_CHARSET', 'utf8mb4'); 27 | github: 28 | branch: main 29 | deploy_on_push: true 30 | repo: whatwg/blog.whatwg.org 31 | health_check: 32 | http_path: /feed-autodiscovery 33 | http_port: 80 34 | instance_count: 1 35 | instance_size_slug: basic-xs 36 | name: blog 37 | routes: 38 | - path: / 39 | databases: 40 | - cluster_name: whatwg-db 41 | db_name: whatblogdb 42 | db_user: whatbloguser 43 | engine: MYSQL 44 | name: whatwg-db 45 | production: true 46 | version: "8" 47 | -------------------------------------------------------------------------------- /debian/marquee/DOMAINS: -------------------------------------------------------------------------------- 1 | whatwg.org 2 | books.idea.whatwg.org 3 | books.spec.whatwg.org 4 | c.whatwg.org 5 | compat.spec.whatwg.org 6 | compression.spec.whatwg.org 7 | console.spec.whatwg.org 8 | cookiestore.spec.whatwg.org 9 | developer.whatwg.org 10 | developers.whatwg.org 11 | dom.spec.whatwg.org 12 | domparsing.spec.whatwg.org 13 | encoding.spec.whatwg.org 14 | fetch.spec.whatwg.org 15 | figures.idea.whatwg.org 16 | figures.spec.whatwg.org 17 | forums.whatwg.org 18 | fs.spec.whatwg.org 19 | fullscreen.spec.whatwg.org 20 | help.whatwg.org 21 | html-differences.whatwg.org 22 | html.spec.whatwg.org 23 | idea.whatwg.org 24 | images.whatwg.org 25 | infra.spec.whatwg.org 26 | javascript.spec.whatwg.org 27 | lists.whatwg.org 28 | mediasession.spec.whatwg.org 29 | mimesniff.spec.whatwg.org 30 | n.whatwg.org 31 | notifications.spec.whatwg.org 32 | quirks.spec.whatwg.org 33 | resources.whatwg.org 34 | spec.whatwg.org 35 | specs.whatwg.org 36 | storage.spec.whatwg.org 37 | streams.spec.whatwg.org 38 | svn.whatwg.org 39 | testutils.spec.whatwg.org 40 | url.spec.whatwg.org 41 | urlpattern.spec.whatwg.org 42 | validator.whatwg.org 43 | webidl.spec.whatwg.org 44 | websockets.spec.whatwg.org 45 | websocket.spec.whatwg.org 46 | webvtt.spec.whatwg.org 47 | www.whatwg.org 48 | xhr.spec.whatwg.org 49 | xn--7ca.whatwg.org 50 | -------------------------------------------------------------------------------- /html5.org/index.htm: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | html5.org — HTML revisited 6 | 14 | 15 | 16 |

html5.org

17 |

HTML5 is the latest version of HTML and XHTML. The 18 | HTML Standard defines a 19 | single language that can be written in HTML and XML. It attempts to 20 | solve issues found in previous iterations of HTML and addresses the 21 | needs of Web Applications, an area previously not adequately covered by 22 | HTML.

23 |

Here are several resources worth exploring:

24 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /digitalocean/wiki.yaml: -------------------------------------------------------------------------------- 1 | # https://www.digitalocean.com/docs/app-platform/references/app-specification-reference/ 2 | domains: 3 | - domain: wiki.whatwg.org 4 | type: PRIMARY 5 | zone: whatwg.org 6 | name: wiki 7 | region: nyc 8 | services: 9 | - dockerfile_path: Dockerfile 10 | envs: 11 | - key: MEDIAWIKI_DB_SERVER 12 | scope: RUN_TIME 13 | value: ${whatwg-db.HOSTNAME}:${whatwg-db.PORT} 14 | - key: MEDIAWIKI_DB_NAME 15 | scope: RUN_TIME 16 | value: ${whatwg-db.DATABASE} 17 | - key: MEDIAWIKI_DB_USER 18 | scope: RUN_TIME 19 | value: ${whatwg-db.USERNAME} 20 | - key: MEDIAWIKI_DB_PASSWORD 21 | scope: RUN_TIME 22 | value: ${whatwg-db.PASSWORD} 23 | - key: MEDIAWIKI_SECRET_KEY 24 | scope: RUN_TIME 25 | type: SECRET 26 | value: __MEDIAWIKI_SECRET_KEY__ 27 | - key: RECAPTCHA_SECRET_KEY 28 | scope: RUN_TIME 29 | type: SECRET 30 | value: __RECAPTCHA_SECRET_KEY__ 31 | github: 32 | branch: main 33 | deploy_on_push: true 34 | repo: whatwg/wiki.whatwg.org 35 | health_check: 36 | http_path: /wiki/What_you_can_do 37 | http_port: 80 38 | instance_count: 1 39 | instance_size_slug: basic-s 40 | name: wiki 41 | routes: 42 | - path: / 43 | databases: 44 | - cluster_name: whatwg-db 45 | db_name: mediawiki 46 | db_user: mediawiki 47 | engine: MYSQL 48 | name: whatwg-db 49 | production: true 50 | version: "8" 51 | -------------------------------------------------------------------------------- /test/caching.mjs: -------------------------------------------------------------------------------- 1 | import assert from 'assert'; 2 | 3 | const CACHE_TESTS = [ 4 | 'https://html.spec.whatwg.org/fonts/Essays1743.ttf', 5 | 'https://html.spec.whatwg.org/images/abstract.jpeg', 6 | 'https://html.spec.whatwg.org/images/wolf.jpg', 7 | 'https://images.whatwg.org/abstract.png', 8 | 'https://images.whatwg.org/content-venn.svg', 9 | 'https://images.whatwg.org/logo', 10 | 'https://images.whatwg.org/robots.jpeg', 11 | 'https://resources.whatwg.org/browser-logos/bb.jpg', 12 | 'https://resources.whatwg.org/browser-logos/edge.svg', 13 | 'https://resources.whatwg.org/fonts/SourceSansPro-Regular.woff', 14 | 'https://resources.whatwg.org/fonts/SourceSansPro-Regular.woff2', 15 | 'https://resources.whatwg.org/logo.png', 16 | ]; 17 | 18 | const NO_CACHE_TESTS = [ 19 | 'https://html.spec.whatwg.org/multipage/', 20 | 'https://images.whatwg.org/README.txt', 21 | 'https://resources.whatwg.org/standard.css', 22 | ]; 23 | 24 | function test(url, expected) { 25 | specify(url, async function() { 26 | // redirecting is a failure since we might then test the wrong server 27 | const response = await fetch(url, { redirect: 'manual' }); 28 | assert.strictEqual(response.status, 200); 29 | assert.strictEqual(response.headers.get('cache-control'), expected); 30 | }); 31 | } 32 | 33 | describe('caching', function() { 34 | describe('URLs with cache-control header', function() { 35 | for (const url of CACHE_TESTS) { 36 | test(url, 'max-age=604800'); // 7 days 37 | } 38 | }); 39 | describe('URLs without cache-control', function() { 40 | for (const url of NO_CACHE_TESTS) { 41 | test(url, null); 42 | } 43 | }); 44 | }); 45 | -------------------------------------------------------------------------------- /html5.org/tools/icons/authors: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /debian/marquee/nginx/conf/whatwg.conf: -------------------------------------------------------------------------------- 1 | listen 443 ssl http2; 2 | listen [::]:443 ssl http2; 3 | 4 | ssl_certificate /etc/letsencrypt/live/whatwg.org/fullchain.pem; 5 | ssl_certificate_key /etc/letsencrypt/live/whatwg.org/privkey.pem; 6 | ssl_session_cache shared:SSL:50m; 7 | ssl_session_timeout 1d; 8 | ssl_session_tickets off; # https://github.com/mozilla/server-side-tls/issues/135 9 | 10 | ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 11 | 12 | ssl_prefer_server_ciphers on; 13 | 14 | ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS'; 15 | 16 | ssl_dhparam /etc/ssl/certs/dhparam.pem; 17 | 18 | gzip on; 19 | gzip_disable "msie6"; 20 | 21 | gzip_vary on; 22 | gzip_proxied any; 23 | gzip_comp_level 6; 24 | gzip_buffers 16 8k; 25 | gzip_http_version 1.1; 26 | gzip_types text/plain text/css application/json text/xml application/xml image/svg+xml application/xml+rss text/javascript; 27 | 28 | include whatwg-headers.conf; 29 | 30 | fancyindex on; 31 | fancyindex_exact_size off; 32 | fancyindex_css_href "https://resources.whatwg.org/nginx-fancyindex-whatwg.css"; 33 | 34 | location /commit-snapshots { 35 | fancyindex_default_sort date_desc; 36 | } 37 | 38 | location /review-drafts { 39 | fancyindex_default_sort name_desc; 40 | } 41 | 42 | include mime.types; # prevents adding types from clobbering all other defaults 43 | types { 44 | application/x-gzip gz tgz; 45 | font/ttf ttf; # https://www.iana.org/assignments/media-types/font/ttf 46 | font/woff2 woff2; # https://www.iana.org/assignments/media-types/font/woff2 47 | text/cache-manifest appcache; 48 | text/javascript map; 49 | text/plain md sh; 50 | video/ogg ogv; # https://www.iana.org/assignments/media-types/video/ogg 51 | } 52 | 53 | location ~* \.js$ { 54 | types { } 55 | # Note: charset=utf-8 need to be repeated here, it's not redundant. 56 | default_type "text/javascript; charset=utf-8"; 57 | } 58 | 59 | charset utf-8; 60 | -------------------------------------------------------------------------------- /test/certs.mjs: -------------------------------------------------------------------------------- 1 | import https from 'https'; 2 | 3 | // Let's Encrypt should renew when 30 days remain, so if it's less than 25 4 | // something is wrong with certificate automation. 5 | const MIN_DAYS = 25; 6 | 7 | const DOMAINS = [ 8 | 'blog.whatwg.org', 9 | 'books.idea.whatwg.org', 10 | 'books.spec.whatwg.org', 11 | 'build.whatwg.org', 12 | 'c.whatwg.org', 13 | 'compat.spec.whatwg.org', 14 | 'compression.spec.whatwg.org', 15 | 'console.spec.whatwg.org', 16 | 'cookiestore.spec.whatwg.org', 17 | 'developer.whatwg.org', 18 | 'developers.whatwg.org', 19 | 'dom.spec.whatwg.org', 20 | 'domparsing.spec.whatwg.org', 21 | 'encoding.spec.whatwg.org', 22 | 'fetch.spec.whatwg.org', 23 | 'figures.idea.whatwg.org', 24 | 'figures.spec.whatwg.org', 25 | 'forums.whatwg.org', 26 | 'fs.spec.whatwg.org', 27 | 'fullscreen.spec.whatwg.org', 28 | 'help.whatwg.org', 29 | 'html-differences.whatwg.org', 30 | 'html.spec.whatwg.org', 31 | 'lists.whatwg.org', 32 | 'idea.whatwg.org', 33 | 'images.whatwg.org', 34 | 'infra.spec.whatwg.org', 35 | 'javascript.spec.whatwg.org', 36 | 'mediasession.spec.whatwg.org', 37 | 'mimesniff.spec.whatwg.org', 38 | 'n.whatwg.org', 39 | 'notifications.spec.whatwg.org', 40 | 'quirks.spec.whatwg.org', 41 | 'participate.whatwg.org', 42 | 'resources.whatwg.org', 43 | 'spec.whatwg.org', 44 | 'specs.whatwg.org', 45 | 'storage.spec.whatwg.org', 46 | 'streams.spec.whatwg.org', 47 | 'svn.whatwg.org', 48 | 'testutils.spec.whatwg.org', 49 | 'url.spec.whatwg.org', 50 | 'urlpattern.spec.whatwg.org', 51 | 'validator.whatwg.org', 52 | 'webidl.spec.whatwg.org', 53 | 'websocket.spec.whatwg.org', 54 | 'websockets.spec.whatwg.org', 55 | 'webvtt.spec.whatwg.org', 56 | 'whatwg.org', 57 | 'wiki.whatwg.org', 58 | 'www.whatwg.org', 59 | 'xhr.spec.whatwg.org', 60 | 'xn--7ca.whatwg.org', 61 | ]; 62 | 63 | function getCertificate(hostname) { 64 | return new Promise((resolve, reject) => { 65 | const options = { 66 | hostname: hostname, 67 | // Use a new agent every time, as getPeerCertificate() can return an 68 | // empty object if the connection is reused. (Maybe a bug, unclear.) 69 | agent: new https.Agent, 70 | }; 71 | const req = https.request(options, res => { 72 | resolve(res.connection.getPeerCertificate()); 73 | }); 74 | req.on('error', err => reject(err)); 75 | req.end(); 76 | }); 77 | } 78 | 79 | describe('certificate expiry date', function() { 80 | const now = Date.now(); 81 | 82 | for (const domain of DOMAINS) { 83 | specify(domain, async function() { 84 | const cert = await getCertificate(domain); 85 | const valid_to = Date.parse(cert.valid_to); 86 | if (!isFinite(valid_to)) { 87 | throw new Error(`invalid cert expiry date: ${cert.valid_to}`); 88 | } 89 | const days_left = (valid_to - now) / (24 * 3600 * 1000); 90 | if (days_left < MIN_DAYS) { 91 | throw new Error(`cert expires in less than ${MIN_DAYS} days: ${cert.valid_to}`); 92 | } 93 | }); 94 | } 95 | }); 96 | -------------------------------------------------------------------------------- /html5.org/tools/icons/tools: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name whatwg.org; 3 | root /var/www/whatwg.org; 4 | 5 | include /etc/nginx/whatwg.conf; 6 | 7 | error_page 404 /404; 8 | error_page 410 /410; 9 | 10 | # There are many files with no extension, and a lot of default_type 11 | # directives to get it right. The default is text/html. 12 | default_type text/html; 13 | 14 | location = /status-2008-12 { 15 | default_type text/plain; 16 | } 17 | location ~ ^/specs/web-forms/.*/xforms-implementation-diagram$ { 18 | default_type image/png; 19 | } 20 | location ~ ^/specs/web-forms/.*/sample- { 21 | default_type image/png; 22 | } 23 | location /style/ { 24 | default_type text/css; 25 | } 26 | 27 | # 301/302 redirects 28 | location ~ ^/(domparsing|dp)$ { 29 | return 301 https://domparsing.spec.whatwg.org/; 30 | } 31 | location ~ ^/(dom|d)$ { 32 | return 301 https://dom.spec.whatwg.org/; 33 | } 34 | location ~ ^/(encoding|e)$ { 35 | return 301 https://encoding.spec.whatwg.org/; 36 | } 37 | location ~ ^/(fetch|cors)$ { 38 | return 301 https://fetch.spec.whatwg.org/; 39 | } 40 | location ~ ^/(fullscreen|fs|f)$ { 41 | return 301 https://fullscreen.spec.whatwg.org/; 42 | } 43 | location ~ ^/(html|HTML)5?(/(.*))?$ { 44 | return 301 https://html.spec.whatwg.org/multipage/$3; 45 | } 46 | location ~ ^/(javascript|js|j)$ { 47 | return 301 https://javascript.spec.whatwg.org/; 48 | } 49 | location ~ ^/(mimesniff|m)$ { 50 | return 301 https://mimesniff.spec.whatwg.org/; 51 | } 52 | location ~ ^/(notifications|n)$ { 53 | return 301 https://notifications.spec.whatwg.org/; 54 | } 55 | location ~ ^/(quirks|q)$ { 56 | return 301 https://quirks.spec.whatwg.org/; 57 | } 58 | location ~ ^/(url|u)$ { 59 | return 301 https://url.spec.whatwg.org/; 60 | } 61 | location ~ ^/(xhr|x)$ { 62 | return 301 https://xhr.spec.whatwg.org/; 63 | } 64 | location ~ ^/C(/(.*))?$ { 65 | return 301 https://html.spec.whatwg.org/multipage/$2; 66 | } 67 | location ~ ^/c(/(.*))?$ { 68 | return 301 https://html.spec.whatwg.org/$2; 69 | } 70 | location ~ ^/current-work(/(.*))?$ { 71 | return 301 https://spec.whatwg.org/$2; 72 | } 73 | location ~ ^/(demos/(date|multiform|repeat)-01/.*)$ { 74 | return 301 https://github.com/whatwg/whatwg.org/tree/417c7bf7a19375c4fbf4a68146153a6baeadecdb/$1; 75 | } 76 | location ~ ^/demos/canvas(/(.*))?$ { 77 | return 301 https://html.spec.whatwg.org/demos/canvas/$2; 78 | } 79 | location ~ ^/demos/offline/clock(/live-demo)?(/(.*))?$ { 80 | return 301 https://html.spec.whatwg.org/demos/offline/clock/$3; 81 | } 82 | location ~ ^/demos/workers(/(.*))?$ { 83 | return 301 https://html.spec.whatwg.org/demos/workers/$2; 84 | } 85 | location ~ ^/images(/(.*))?$ { 86 | return 302 https://images.whatwg.org/$2; 87 | } 88 | location = /irc { 89 | return 301 https://whatwg.org/chat; 90 | } 91 | location = /link-fixup.js { 92 | return 301 https://html.spec.whatwg.org/multipage/link-fixup.js; 93 | } 94 | location = /mailing-list) { 95 | return 301 https://whatwg.org/mailing-list; 96 | } 97 | location = /mailing-list { 98 | return 301 https://lists.whatwg.org/; 99 | } 100 | location = /newbug { 101 | return 302 https://github.com/whatwg/html/issues/new/choose; 102 | } 103 | location = /pdf { 104 | return 301 https://html.spec.whatwg.org/print.pdf; 105 | } 106 | location = /position-paper { 107 | return 301 https://www.w3.org/2004/04/webapps-cdf-ws/papers/opera.html; 108 | } 109 | location = /specs { 110 | return 301 https://spec.whatwg.org/; 111 | } 112 | location = /specs/ { 113 | return 301 https://spec.whatwg.org/; 114 | } 115 | location ~ ^/specs/html5(/(.*))?$ { 116 | return 301 https://html.spec.whatwg.org/multipage/$2; 117 | } 118 | location ~ ^/specs/url/current-work(/(.*))?$ { 119 | return 301 https://url.spec.whatwg.org/$2; 120 | } 121 | location /specs/vocabs { 122 | return 301 https://html.spec.whatwg.org/multipage/microdata.html; 123 | } 124 | location ~ ^/specs/web-apps/2007-10-26/multipage/images(/(.*))?$ { 125 | return 301 /specs/web-apps/2007-10-26/images/$2; 126 | } 127 | location = /specs/web-apps/current-work/complete.html { 128 | return 301 https://html.spec.whatwg.org/; 129 | } 130 | location ~ ^/specs/web-apps/current-work/complete(/(.*))?$ { 131 | return 301 https://html.spec.whatwg.org/multipage/$2; 132 | } 133 | location = /specs/web-apps/current-work/html-a4.pdf { 134 | return 301 https://html.spec.whatwg.org/print.pdf; 135 | } 136 | location = /specs/web-apps/current-work/html-letter.pdf { 137 | return 301 https://html.spec.whatwg.org/print.pdf; 138 | } 139 | location = /specs/web-apps/current-work/html5-a4.pdf { 140 | return 301 https://html.spec.whatwg.org/print.pdf; 141 | } 142 | location = /specs/web-apps/current-work/html5-letter.pdf { 143 | return 301 https://html.spec.whatwg.org/print.pdf; 144 | } 145 | location = /specs/web-apps/current-work/webrtc.html { 146 | return 301 https://w3c.github.io/webrtc-pc/; 147 | } 148 | location = /specs/web-apps/current-work/websrt.html { 149 | return 301 https://w3c.github.io/webvtt/; 150 | } 151 | location = /specs/web-apps/current-work/webvtt.html { 152 | return 301 https://w3c.github.io/webvtt/; 153 | } 154 | location ~ ^/specs/web-apps/current-work(/(.*))?$ { 155 | return 301 https://html.spec.whatwg.org/$2; 156 | } 157 | location ~ ^/specs/web-apps/html5(/(.*))?$ { 158 | return 301 https://html.spec.whatwg.org/multipage/$2; 159 | } 160 | location /specs/web-forms/tests { 161 | return 301 https://github.com/w3c/web-platform-tests; 162 | } 163 | location /specs/web-socket-protocol { 164 | return 301 https://tools.ietf.org/html/rfc6455; 165 | } 166 | location = /specs/web-workers/current-work/ { 167 | return 301 https://html.spec.whatwg.org/multipage/workers.html; 168 | } 169 | location = /wf2 { 170 | return 301 "https://html.spec.whatwg.org/multipage/#forms"; 171 | } 172 | location = /ws { 173 | return 301 "https://html.spec.whatwg.org/multipage/#network"; 174 | } 175 | location = /ww { 176 | return 301 "https://html.spec.whatwg.org/multipage/#workers"; 177 | } 178 | 179 | # 410 Gone resources 180 | location = /issues { 181 | return 410; 182 | } 183 | location = /charter.pl { 184 | return 410; 185 | } 186 | location = /mailing-list.pl { 187 | return 410; 188 | } 189 | } 190 | -------------------------------------------------------------------------------- /test/content-type.mjs: -------------------------------------------------------------------------------- 1 | import assert from 'assert'; 2 | 3 | const EXTENSION_TESTS = [ 4 | ['https://resources.whatwg.org/standard.css', 'text/css'], 5 | ['https://whatwg.org/style/shared.css', 'text/css'], 6 | ['https://whatwg.org/specs/web-workers/current-work/rationale.html', 'text/html; charset=utf-8'], 7 | ['https://html.spec.whatwg.org/images/abstract.jpeg', 'image/jpeg'], 8 | ['https://resources.whatwg.org/browser-logos/bb.jpg', 'image/jpeg'], 9 | ['https://resources.whatwg.org/file-issue.js', 'text/javascript; charset=utf-8'], 10 | ['https://resources.whatwg.org/biblio.json', 'application/json'], 11 | ['https://streams.spec.whatwg.org/demos/resources/web-animations.min.js.map', 'text/javascript'], // TODO: charset=utf-8 12 | ['https://resources.whatwg.org/README.md', 'text/plain; charset=utf-8'], 13 | ['https://resources.whatwg.org/logo.png', 'image/png'], 14 | ['https://resources.whatwg.org/build/deploy.sh', 'text/plain; charset=utf-8'], 15 | ['https://resources.whatwg.org/logo.svg', 'image/svg+xml'], 16 | ['https://whatwg.org/robots.txt', 'text/plain; charset=utf-8'], 17 | ['https://resources.whatwg.org/fonts/SourceSansPro-Regular.woff', 'application/font-woff'], 18 | ['https://resources.whatwg.org/fonts/SourceSansPro-Regular.woff2', 'font/woff2'], 19 | ]; 20 | 21 | const WITHOUT_EXTENSION_TESTS = [ 22 | ['https://images.whatwg.org/CFC', 'image/png'], 23 | ['https://images.whatwg.org/CFI', 'image/png'], 24 | ['https://images.whatwg.org/REC', 'image/png'], 25 | ['https://images.whatwg.org/WD', 'image/png'], 26 | ['https://images.whatwg.org/icon', 'image/png'], 27 | ['https://images.whatwg.org/icon-white', 'image/png'], 28 | ['https://images.whatwg.org/logo', 'image/png'], 29 | ['https://images.whatwg.org/logo-white', 'image/png'], 30 | ['https://images.whatwg.org/spinner', 'image/png'], 31 | ['https://images.whatwg.org/tabs-left', 'image/png'], 32 | ['https://images.whatwg.org/tabs-right', 'image/png'], 33 | ['https://n.whatwg.org/formdata', 'text/plain; charset=utf-8'], 34 | ['https://n.whatwg.org/work', 'text/plain; charset=utf-8'], 35 | ['https://whatwg.org/404', 'text/html; charset=utf-8'], 36 | ['https://whatwg.org/410', 'text/html; charset=utf-8'], 37 | ['https://whatwg.org/charter', 'text/html; charset=utf-8'], 38 | ['https://whatwg.org/code-of-conduct', 'text/html; charset=utf-8'], 39 | ['https://whatwg.org/faq', 'text/html; charset=utf-8'], 40 | ['https://whatwg.org/news/future-of-html', 'text/html; charset=utf-8'], 41 | ['https://whatwg.org/news/start', 'text/html; charset=utf-8'], 42 | ['https://whatwg.org/news/web-forms-call-for-comments-1', 'text/html; charset=utf-8'], 43 | ['https://whatwg.org/news/web-forms-call-for-comments-2', 'text/html; charset=utf-8'], 44 | ['https://whatwg.org/news/web-forms-call-for-comments-3', 'text/html; charset=utf-8'], 45 | ['https://whatwg.org/news/web-forms-call-for-comments-4', 'text/html; charset=utf-8'], 46 | ['https://whatwg.org/specs/web-apps/2006-01-01/diff-2005-09-01', 'text/html; charset=utf-8'], 47 | ['https://whatwg.org/specs/web-forms/2004-06-27-call-for-comments/sample-datetime-ui-1', 'image/png'], 48 | ['https://whatwg.org/specs/web-forms/2004-06-27-call-for-comments/sample-datetime-ui-2', 'image/png'], 49 | ['https://whatwg.org/specs/web-forms/2004-06-27-call-for-comments/sample-datetime-ui-3', 'image/png'], 50 | ['https://whatwg.org/specs/web-forms/2004-06-27-call-for-comments/sample-multiple-editable-ui', 'image/png'], 51 | ['https://whatwg.org/specs/web-forms/2004-06-27-call-for-comments/xforms-implementation-diagram', 'image/png'], 52 | ['https://whatwg.org/specs/web-forms/2004-12-10-call-for-comments/diff-2004-06-27-call-for-comments', 'text/html; charset=utf-8'], 53 | ['https://whatwg.org/specs/web-forms/2004-12-10-call-for-comments/sample-autocompletion-ui-1', 'image/png'], 54 | ['https://whatwg.org/specs/web-forms/2004-12-10-call-for-comments/sample-autocompletion-ui-2', 'image/png'], 55 | ['https://whatwg.org/specs/web-forms/2004-12-10-call-for-comments/sample-datetime-ui-1', 'image/png'], 56 | ['https://whatwg.org/specs/web-forms/2004-12-10-call-for-comments/sample-datetime-ui-2', 'image/png'], 57 | ['https://whatwg.org/specs/web-forms/2004-12-10-call-for-comments/sample-datetime-ui-3', 'image/png'], 58 | ['https://whatwg.org/specs/web-forms/2004-12-10-call-for-comments/sample-multiple-editable-ui', 'image/png'], 59 | ['https://whatwg.org/specs/web-forms/2004-12-10-call-for-comments/xforms-implementation-diagram', 'image/png'], 60 | ['https://whatwg.org/specs/web-forms/2005-01-28-call-for-comments/diff-2004-06-27-call-for-comments', 'text/html; charset=utf-8'], 61 | ['https://whatwg.org/specs/web-forms/2005-01-28-call-for-comments/diff-2004-12-10-call-for-comments', 'text/html; charset=utf-8'], 62 | ['https://whatwg.org/specs/web-forms/2005-01-28-call-for-comments/sample-autocompletion-ui-1', 'image/png'], 63 | ['https://whatwg.org/specs/web-forms/2005-01-28-call-for-comments/sample-autocompletion-ui-2', 'image/png'], 64 | ['https://whatwg.org/specs/web-forms/2005-01-28-call-for-comments/sample-datetime-ui-1', 'image/png'], 65 | ['https://whatwg.org/specs/web-forms/2005-01-28-call-for-comments/sample-datetime-ui-2', 'image/png'], 66 | ['https://whatwg.org/specs/web-forms/2005-01-28-call-for-comments/sample-datetime-ui-3', 'image/png'], 67 | ['https://whatwg.org/specs/web-forms/2005-01-28-call-for-comments/sample-multiple-editable-ui', 'image/png'], 68 | ['https://whatwg.org/specs/web-forms/2005-01-28-call-for-comments/xforms-implementation-diagram', 'image/png'], 69 | ['https://whatwg.org/specs/web-forms/2005-02-07-submission/diff-2005-01-28-call-for-comments', 'text/html; charset=utf-8'], 70 | ['https://whatwg.org/specs/web-forms/2005-02-07-submission/sample-autocompletion-ui-1', 'image/png'], 71 | ['https://whatwg.org/specs/web-forms/2005-02-07-submission/sample-autocompletion-ui-2', 'image/png'], 72 | ['https://whatwg.org/specs/web-forms/2005-02-07-submission/sample-datetime-ui-1', 'image/png'], 73 | ['https://whatwg.org/specs/web-forms/2005-02-07-submission/sample-datetime-ui-2', 'image/png'], 74 | ['https://whatwg.org/specs/web-forms/2005-02-07-submission/sample-datetime-ui-3', 'image/png'], 75 | ['https://whatwg.org/specs/web-forms/2005-02-07-submission/sample-multiple-editable-ui', 'image/png'], 76 | ['https://whatwg.org/specs/web-forms/2005-02-07-submission/submission', 'text/html; charset=utf-8'], 77 | ['https://whatwg.org/specs/web-forms/2005-02-07-submission/xforms-implementation-diagram', 'image/png'], 78 | ['https://whatwg.org/specs/web-forms/2005-04-11-call-for-comments/diff-2004-06-27-call-for-comments', 'text/html; charset=utf-8'], 79 | ['https://whatwg.org/specs/web-forms/2005-04-11-call-for-comments/diff-2004-12-10-call-for-comments', 'text/html; charset=utf-8'], 80 | ['https://whatwg.org/specs/web-forms/2005-04-11-call-for-comments/diff-2005-01-28-call-for-comments', 'text/html; charset=utf-8'], 81 | ['https://whatwg.org/specs/web-forms/2005-04-11-call-for-comments/sample-autocompletion-ui-1', 'image/png'], 82 | ['https://whatwg.org/specs/web-forms/2005-04-11-call-for-comments/sample-autocompletion-ui-2', 'image/png'], 83 | ['https://whatwg.org/specs/web-forms/2005-04-11-call-for-comments/sample-datetime-ui-1', 'image/png'], 84 | ['https://whatwg.org/specs/web-forms/2005-04-11-call-for-comments/sample-datetime-ui-2', 'image/png'], 85 | ['https://whatwg.org/specs/web-forms/2005-04-11-call-for-comments/sample-datetime-ui-3', 'image/png'], 86 | ['https://whatwg.org/specs/web-forms/2005-04-11-call-for-comments/sample-multiple-editable-ui', 'image/png'], 87 | ['https://whatwg.org/specs/web-forms/2005-04-11-call-for-comments/xforms-implementation-diagram', 'image/png'], 88 | ['https://whatwg.org/specs/web-forms/2005-07-03/diff-2005-01-28-call-for-comments', 'text/html; charset=utf-8'], 89 | ['https://whatwg.org/specs/web-forms/2005-07-03/diff-2005-04-11-call-for-comments', 'text/html; charset=utf-8'], 90 | ['https://whatwg.org/specs/web-forms/2005-07-03/sample-autocompletion-ui-1', 'image/png'], 91 | ['https://whatwg.org/specs/web-forms/2005-07-03/sample-autocompletion-ui-2', 'image/png'], 92 | ['https://whatwg.org/specs/web-forms/2005-07-03/sample-datetime-ui-1', 'image/png'], 93 | ['https://whatwg.org/specs/web-forms/2005-07-03/sample-datetime-ui-2', 'image/png'], 94 | ['https://whatwg.org/specs/web-forms/2005-07-03/sample-datetime-ui-3', 'image/png'], 95 | ['https://whatwg.org/specs/web-forms/2005-07-03/sample-multiple-editable-ui', 'image/png'], 96 | ['https://whatwg.org/specs/web-forms/2005-07-03/xforms-implementation-diagram', 'image/png'], 97 | ['https://whatwg.org/specs/web-forms/2005-09-01/diff-2005-04-11-call-for-comments', 'text/html; charset=utf-8'], 98 | ['https://whatwg.org/specs/web-forms/2005-09-01/diff-2005-07-03', 'text/html; charset=utf-8'], 99 | ['https://whatwg.org/specs/web-forms/2005-09-01/sample-autocompletion-ui-1', 'image/png'], 100 | ['https://whatwg.org/specs/web-forms/2005-09-01/sample-autocompletion-ui-2', 'image/png'], 101 | ['https://whatwg.org/specs/web-forms/2005-09-01/sample-datetime-ui-1', 'image/png'], 102 | ['https://whatwg.org/specs/web-forms/2005-09-01/sample-datetime-ui-2', 'image/png'], 103 | ['https://whatwg.org/specs/web-forms/2005-09-01/sample-datetime-ui-3', 'image/png'], 104 | ['https://whatwg.org/specs/web-forms/2005-09-01/sample-multiple-editable-ui', 'image/png'], 105 | ['https://whatwg.org/specs/web-forms/2005-09-01/xforms-implementation-diagram', 'image/png'], 106 | ['https://whatwg.org/specs/web-forms/current-work/diff-2005-01-28-call-for-comments', 'text/html; charset=utf-8'], 107 | ['https://whatwg.org/specs/web-forms/current-work/diff-2005-04-11-call-for-comments', 'text/html; charset=utf-8'], 108 | ['https://whatwg.org/specs/web-forms/current-work/diff-2005-07-03', 'text/html; charset=utf-8'], 109 | ['https://whatwg.org/specs/web-forms/current-work/diff-2005-09-01', 'text/html; charset=utf-8'], 110 | ['https://whatwg.org/specs/web-forms/current-work/header-w3c', 'text/html; charset=utf-8'], 111 | ['https://whatwg.org/specs/web-forms/current-work/header-whatwg', 'text/html; charset=utf-8'], 112 | ['https://whatwg.org/specs/web-forms/current-work/sample-autocompletion-ui-1', 'image/png'], 113 | ['https://whatwg.org/specs/web-forms/current-work/sample-autocompletion-ui-2', 'image/png'], 114 | ['https://whatwg.org/specs/web-forms/current-work/sample-datetime-ui-1', 'image/png'], 115 | ['https://whatwg.org/specs/web-forms/current-work/sample-datetime-ui-2', 'image/png'], 116 | ['https://whatwg.org/specs/web-forms/current-work/sample-datetime-ui-3', 'image/png'], 117 | ['https://whatwg.org/specs/web-forms/current-work/sample-multiple-editable-ui', 'image/png'], 118 | ['https://whatwg.org/specs/web-forms/current-work/xforms-implementation-diagram', 'image/png'], 119 | ['https://whatwg.org/status-2008-12', 'text/plain; charset=utf-8'], 120 | ['https://whatwg.org/style/specification', 'text/css'], 121 | ['https://whatwg.org/working-mode', 'text/html; charset=utf-8'], 122 | ]; 123 | 124 | function test([url, expected]) { 125 | specify(url, async function() { 126 | // redirecting is a failure since we might then test the wrong server 127 | const response = await fetch(url, { redirect: 'manual' }); 128 | assert.strictEqual(response.status, 200); 129 | assert.strictEqual(response.headers.get('content-type'), expected); 130 | }); 131 | } 132 | 133 | describe('content-type header', function() { 134 | describe('URLs with extension', function() { 135 | EXTENSION_TESTS.map(test); 136 | }); 137 | describe('URLs without extension', function() { 138 | WITHOUT_EXTENSION_TESTS.map(test); 139 | }); 140 | }); 141 | -------------------------------------------------------------------------------- /test/redirects.mjs: -------------------------------------------------------------------------------- 1 | import assert from 'assert'; 2 | 3 | // arrays of [url to fetch, HTTP status, location header, keep /foo?] 4 | 5 | const HTTP_TESTS = [ 6 | // http -> https redirects 7 | ['http://blog.whatwg.org/', 301, 'https://blog.whatwg.org/', 'keep'], 8 | ['http://books.idea.whatwg.org/', 301, 'https://books.idea.whatwg.org/', 'keep'], 9 | ['http://books.spec.whatwg.org/', 301, 'https://books.spec.whatwg.org/', 'keep'], 10 | ['http://c.whatwg.org/', 301, 'https://c.whatwg.org/', 'keep'], 11 | ['http://compat.spec.whatwg.org/', 301, 'https://compat.spec.whatwg.org/', 'keep'], 12 | ['http://console.spec.whatwg.org/', 301, 'https://console.spec.whatwg.org/', 'keep'], 13 | ['http://developer.whatwg.org/', 301, 'https://developer.whatwg.org/', 'keep'], 14 | ['http://developers.whatwg.org/', 301, 'https://developers.whatwg.org/', 'keep'], 15 | ['http://dom.spec.whatwg.org/', 301, 'https://dom.spec.whatwg.org/', 'keep'], 16 | ['http://domparsing.spec.whatwg.org/', 301, 'https://domparsing.spec.whatwg.org/', 'keep'], 17 | ['http://encoding.spec.whatwg.org/', 301, 'https://encoding.spec.whatwg.org/', 'keep'], 18 | ['http://fetch.spec.whatwg.org/', 301, 'https://fetch.spec.whatwg.org/', 'keep'], 19 | ['http://figures.idea.whatwg.org/', 301, 'https://figures.idea.whatwg.org/', 'keep'], 20 | ['http://figures.spec.whatwg.org/', 301, 'https://figures.spec.whatwg.org/', 'keep'], 21 | ['http://forums.whatwg.org/', 301, 'https://forums.whatwg.org/', 'keep'], 22 | ['http://fullscreen.spec.whatwg.org/', 301, 'https://fullscreen.spec.whatwg.org/', 'keep'], 23 | ['http://help.whatwg.org/', 301, 'https://help.whatwg.org/', 'keep'], 24 | ['http://html-differences.whatwg.org/', 301, 'https://html-differences.whatwg.org/', 'keep'], 25 | ['http://html.spec.whatwg.org/', 301, 'https://html.spec.whatwg.org/', 'keep'], 26 | ['http://idea.whatwg.org/', 301, 'https://idea.whatwg.org/', 'keep'], 27 | ['http://images.whatwg.org/', 301, 'https://images.whatwg.org/', 'keep'], 28 | ['http://infra.spec.whatwg.org/', 301, 'https://infra.spec.whatwg.org/', 'keep'], 29 | ['http://javascript.spec.whatwg.org/', 301, 'https://javascript.spec.whatwg.org/', 'keep'], 30 | ['http://lists.whatwg.org/', 301, 'https://lists.whatwg.org/', 'keep'], 31 | ['http://mediasession.spec.whatwg.org/', 301, 'https://mediasession.spec.whatwg.org/', 'keep'], 32 | ['http://mimesniff.spec.whatwg.org/', 301, 'https://mimesniff.spec.whatwg.org/', 'keep'], 33 | ['http://n.whatwg.org/', 301, 'https://n.whatwg.org/', 'keep'], 34 | ['http://notifications.spec.whatwg.org/', 301, 'https://notifications.spec.whatwg.org/', 'keep'], 35 | ['http://participate.whatwg.org/', 301, 'https://participate.whatwg.org/', 'keep'], 36 | ['http://quirks.spec.whatwg.org/', 301, 'https://quirks.spec.whatwg.org/', 'keep'], 37 | ['http://resources.whatwg.org/', 301, 'https://resources.whatwg.org/', 'keep'], 38 | ['http://spec.whatwg.org/', 301, 'https://spec.whatwg.org/', 'keep'], 39 | ['http://specs.whatwg.org/', 301, 'https://specs.whatwg.org/', 'keep'], 40 | ['http://storage.spec.whatwg.org/', 301, 'https://storage.spec.whatwg.org/', 'keep'], 41 | ['http://streams.spec.whatwg.org/', 301, 'https://streams.spec.whatwg.org/', 'keep'], 42 | ['http://svn.whatwg.org/', 301, 'https://svn.whatwg.org/', 'keep'], 43 | ['http://url.spec.whatwg.org/', 301, 'https://url.spec.whatwg.org/', 'keep'], 44 | ['http://validator.whatwg.org/', 301, 'https://validator.whatwg.org/', 'keep'], 45 | ['http://webvtt.spec.whatwg.org/', 301, 'https://webvtt.spec.whatwg.org/', 'keep'], 46 | ['http://whatwg.org/', 301, 'https://whatwg.org/', 'keep'], 47 | ['http://whatwg.org/c', 301, 'https://whatwg.org/c', 'keep'], 48 | ['http://wiki.whatwg.org/', 301, 'https://wiki.whatwg.org/', 'keep'], 49 | ['http://www.whatwg.org/', 301, 'https://www.whatwg.org/', 'keep'], 50 | ['http://xhr.spec.whatwg.org/', 301, 'https://xhr.spec.whatwg.org/', 'keep'], 51 | ['http://xn--7ca.whatwg.org/', 301, 'https://xn--7ca.whatwg.org/', 'keep'], 52 | ]; 53 | 54 | const HTTPS_TESTS = [ 55 | ['https://books.spec.whatwg.org/', 302, 'https://books.idea.whatwg.org/', 'keep'], 56 | ['https://c.whatwg.org/', 301, 'https://html.spec.whatwg.org/', 'keep'], 57 | ['https://developer.whatwg.org/', 301, 'https://html.spec.whatwg.org/dev/', 'keep'], 58 | ['https://developers.whatwg.org/', 301, 'https://html.spec.whatwg.org/dev/', 'keep'], 59 | ['https://domparsing.spec.whatwg.org/', 302, 'https://w3c.github.io/DOM-Parsing/', 'drop'], 60 | ['https://encoding.spec.whatwg.org/index-gbk.txt', 410], 61 | ['https://figures.spec.whatwg.org/', 302, 'https://figures.idea.whatwg.org/', 'keep'], 62 | ['https://forums.whatwg.org/', 301, 'https://forums.whatwg.org/bb3/'], 63 | ['https://forums.whatwg.org/bb3/viewtopic.php?f=3&p=8538&sid=1cb9e434c59258d940d476648b0301df', 301, 'https://forums.whatwg.org/bb3/viewtopic.php?f=3&p=8538'], 64 | ['https://help.whatwg.org/', 301, 'https://html.spec.whatwg.org/dev/', 'drop'], 65 | ['https://html-differences.whatwg.org/', 301, 'https://html.spec.whatwg.org/dev/', 'drop'], 66 | ['https://html.spec.whatwg.org/C', 301, 'https://html.spec.whatwg.org/multipage/', 'keep'], 67 | ['https://html.spec.whatwg.org/complete', 301, 'https://html.spec.whatwg.org/', 'keep'], 68 | ['https://html.spec.whatwg.org/complete.html', 301, 'https://html.spec.whatwg.org/'], 69 | ['https://html.spec.whatwg.org/demos/offline/clock/clock.html', 301, 'https://html.spec.whatwg.org/demos/offline/clock/clock2.html'], 70 | ['https://html.spec.whatwg.org/demos/workers/stocks/', 301, 'https://github.com/whatwg/html/tree/1332efd5e4c27ae859bf2316c6b477d77cf93716/demos/workers/stocks/', 'keep'], 71 | ['https://html.spec.whatwg.org/images/content-venn.png', 301, 'https://html.spec.whatwg.org/images/content-venn.svg'], 72 | ['https://html.spec.whatwg.org/images/contextmenu-collapsed.png', 410], 73 | ['https://html.spec.whatwg.org/images/contextmenu-expanded.png', 410], 74 | ['https://html.spec.whatwg.org/images/parsing-model-overview.png', 301, 'https://html.spec.whatwg.org/images/parsing-model-overview.svg'], 75 | ['https://html.spec.whatwg.org/images/sample-email-1.png', 301, 'https://html.spec.whatwg.org/images/sample-email-1.svg'], 76 | ['https://html.spec.whatwg.org/images/sample-email-2.png', 301, 'https://html.spec.whatwg.org/images/sample-email-2.svg'], 77 | ['https://html.spec.whatwg.org/images/sample-url.png', 301, 'https://html.spec.whatwg.org/images/sample-url.svg'], 78 | ['https://html.spec.whatwg.org/index', 301, 'https://html.spec.whatwg.org/'], 79 | ['https://html.spec.whatwg.org/multipage/embedded-content-0.html', 301, 'https://html.spec.whatwg.org/multipage/embedded-content.html'], 80 | ['https://html.spec.whatwg.org/multipage/entities.json', 301, 'https://html.spec.whatwg.org/entities.json'], 81 | ['https://html.spec.whatwg.org/multipage/images/', 301, 'https://html.spec.whatwg.org/images/'], 82 | ['https://html.spec.whatwg.org/multipage/link-fixup.js', 301, 'https://html.spec.whatwg.org/link-fixup.js'], 83 | ['https://html.spec.whatwg.org/multipage/scripting-1.html', 301, 'https://html.spec.whatwg.org/multipage/scripting.html'], 84 | ['https://html.spec.whatwg.org/multipage/section-sql.html', 410], 85 | ['https://html.spec.whatwg.org/multipage/tabular-data.html', 301, 'https://html.spec.whatwg.org/multipage/tables.html'], 86 | ['https://html.spec.whatwg.org/multipage/websockets', 301, 'https://websockets.spec.whatwg.org/', 'keep'], 87 | ['https://javascript.spec.whatwg.org/', 302, 'https://github.com/tc39/ecma262/labels/web%20reality', 'drop'], 88 | ['https://lists.whatwg.org/htdig.cgi', 301, 'https://lists.whatwg.org/pipermail/', 'keep'], 89 | ['https://lists.whatwg.org/listinfo.cgi', 301, 'https://lists.whatwg.org/'], 90 | ['https://mediasession.spec.whatwg.org/', 302, 'https://w3c.github.io/mediasession/', 'drop'], 91 | ['https://resources.whatwg.org/logo-mime.png', 301, 'https://resources.whatwg.org/logo-mimesniff.png'], 92 | ['https://resources.whatwg.org/logo-mime.svg', 301, 'https://resources.whatwg.org/logo-mimesniff.svg'], 93 | ['https://specs.whatwg.org/', 301, 'https://spec.whatwg.org/', 'drop'], 94 | ['https://svn.whatwg.org/', 301, 'https://github.com/whatwg', 'drop'], 95 | ['https://url.spec.whatwg.org/interop/', 410], 96 | ['https://url.spec.whatwg.org/reference-implementation/', 410], 97 | ['https://url.spec.whatwg.org/reference-implementation/liveview.html', 301, 'https://quuz.org/url/liveview.html'], 98 | ['https://url.spec.whatwg.org/reference-implementation/liveview2.html', 301, 'https://quuz.org/url/liveview2.html'], 99 | ['https://url.spec.whatwg.org/reference-implementation/liveview3.html', 301, 'https://quuz.org/url/liveview3.html'], 100 | ['https://url.spec.whatwg.org/reference-implementation/uri-validate.html', 301, 'https://quuz.org/url/uri-validate.html'], 101 | ['https://validator.whatwg.org/', 301, 'https://whatwg.org/validator/', 'keep'], 102 | ['https://websocket.spec.whatwg.org/', 301, 'https://websockets.spec.whatwg.org/', 'keep'], 103 | ['https://webvtt.spec.whatwg.org/', 302, 'https://w3c.github.io/webvtt/', 'keep'], 104 | ['https://whatwg.org/C', 301, 'https://html.spec.whatwg.org/multipage/', 'keep'], 105 | ['https://whatwg.org/HTML', 301, 'https://html.spec.whatwg.org/multipage/', 'keep'], 106 | ['https://whatwg.org/HTML5', 301, 'https://html.spec.whatwg.org/multipage/', 'keep'], 107 | ['https://whatwg.org/c', 301, 'https://html.spec.whatwg.org/', 'keep'], 108 | ['https://whatwg.org/charter.pl', 410], 109 | ['https://whatwg.org/cors', 301, 'https://fetch.spec.whatwg.org/'], 110 | ['https://whatwg.org/current-work', 301, 'https://spec.whatwg.org/', 'keep'], 111 | ['https://whatwg.org/d', 301, 'https://dom.spec.whatwg.org/'], 112 | ['https://whatwg.org/demos/canvas/', 301, 'https://html.spec.whatwg.org/demos/canvas/', 'keep'], 113 | ['https://whatwg.org/demos/date-01/', 301, 'https://github.com/whatwg/whatwg.org/tree/417c7bf7a19375c4fbf4a68146153a6baeadecdb/demos/date-01/', 'keep'], 114 | ['https://whatwg.org/demos/multiform-01/', 301, 'https://github.com/whatwg/whatwg.org/tree/417c7bf7a19375c4fbf4a68146153a6baeadecdb/demos/multiform-01/', 'keep'], 115 | ['https://whatwg.org/demos/offline/clock/', 301, 'https://html.spec.whatwg.org/demos/offline/clock/', 'keep'], 116 | ['https://whatwg.org/demos/offline/clock/live-demo/', 301, 'https://html.spec.whatwg.org/demos/offline/clock/', 'keep'], 117 | ['https://whatwg.org/demos/repeat-01/', 301, 'https://github.com/whatwg/whatwg.org/tree/417c7bf7a19375c4fbf4a68146153a6baeadecdb/demos/repeat-01/', 'keep'], 118 | ['https://whatwg.org/demos/workers/', 301, 'https://html.spec.whatwg.org/demos/workers/', 'keep'], 119 | ['https://whatwg.org/dom', 301, 'https://dom.spec.whatwg.org/'], 120 | ['https://whatwg.org/domparsing', 301, 'https://domparsing.spec.whatwg.org/'], 121 | ['https://whatwg.org/dp', 301, 'https://domparsing.spec.whatwg.org/'], 122 | ['https://whatwg.org/e', 301, 'https://encoding.spec.whatwg.org/'], 123 | ['https://whatwg.org/encoding', 301, 'https://encoding.spec.whatwg.org/'], 124 | ['https://whatwg.org/f', 301, 'https://fullscreen.spec.whatwg.org/'], 125 | ['https://whatwg.org/fetch', 301, 'https://fetch.spec.whatwg.org/'], 126 | ['https://whatwg.org/fs', 301, 'https://fullscreen.spec.whatwg.org/'], 127 | ['https://whatwg.org/fullscreen', 301, 'https://fullscreen.spec.whatwg.org/'], 128 | ['https://whatwg.org/html', 301, 'https://html.spec.whatwg.org/multipage/', 'keep'], 129 | ['https://whatwg.org/html5', 301, 'https://html.spec.whatwg.org/multipage/', 'keep'], 130 | ['https://whatwg.org/images', 302, 'https://images.whatwg.org/'], 131 | ['https://whatwg.org/images/', 302, 'https://images.whatwg.org/', 'keep'], 132 | ['https://whatwg.org/issues', 410], 133 | ['https://whatwg.org/j', 301, 'https://javascript.spec.whatwg.org/'], 134 | ['https://whatwg.org/javascript', 301, 'https://javascript.spec.whatwg.org/'], 135 | ['https://whatwg.org/js', 301, 'https://javascript.spec.whatwg.org/'], 136 | ['https://whatwg.org/link-fixup.js', 301, 'https://html.spec.whatwg.org/multipage/link-fixup.js'], 137 | ['https://whatwg.org/m', 301, 'https://mimesniff.spec.whatwg.org/'], 138 | ['https://whatwg.org/mailing-list)', 301, 'https://whatwg.org/mailing-list'], 139 | ['https://whatwg.org/mailing-list', 301, 'https://lists.whatwg.org/'], 140 | ['https://whatwg.org/mailing-list.pl', 410], 141 | ['https://whatwg.org/mimesniff', 301, 'https://mimesniff.spec.whatwg.org/'], 142 | ['https://whatwg.org/n', 301, 'https://notifications.spec.whatwg.org/'], 143 | ['https://whatwg.org/newbug', 302, 'https://github.com/whatwg/html/issues/new/choose'], 144 | ['https://whatwg.org/notifications', 301, 'https://notifications.spec.whatwg.org/'], 145 | ['https://whatwg.org/pdf', 301, 'https://html.spec.whatwg.org/print.pdf'], 146 | ['https://whatwg.org/position-paper', 301, 'https://www.w3.org/2004/04/webapps-cdf-ws/papers/opera.html'], 147 | ['https://whatwg.org/q', 301, 'https://quirks.spec.whatwg.org/'], 148 | ['https://whatwg.org/quirks', 301, 'https://quirks.spec.whatwg.org/'], 149 | ['https://whatwg.org/specs', 301, 'https://spec.whatwg.org/'], 150 | ['https://whatwg.org/specs/', 301, 'https://spec.whatwg.org/'], 151 | ['https://whatwg.org/specs/foo', 404, null], 152 | ['https://whatwg.org/specs/html5', 301, 'https://html.spec.whatwg.org/multipage/', 'keep'], 153 | ['https://whatwg.org/specs/url/current-work', 301, 'https://url.spec.whatwg.org/', 'keep'], 154 | ['https://whatwg.org/specs/vocabs', 301, 'https://html.spec.whatwg.org/multipage/microdata.html', 'drop'], 155 | ['https://whatwg.org/specs/web-apps/2007-10-26/multipage/images/', 301, 'https://whatwg.org/specs/web-apps/2007-10-26/images/', 'keep'], 156 | ['https://whatwg.org/specs/web-apps/current-work', 301, 'https://html.spec.whatwg.org/'], 157 | ['https://whatwg.org/specs/web-apps/current-work/', 301, 'https://html.spec.whatwg.org/', 'keep'], 158 | ['https://whatwg.org/specs/web-apps/current-work/complete.html', 301, 'https://html.spec.whatwg.org/'], 159 | ['https://whatwg.org/specs/web-apps/current-work/complete/', 301, 'https://html.spec.whatwg.org/multipage/', 'keep'], 160 | ['https://whatwg.org/specs/web-apps/current-work/html-a4.pdf', 301, 'https://html.spec.whatwg.org/print.pdf'], 161 | ['https://whatwg.org/specs/web-apps/current-work/html-letter.pdf', 301, 'https://html.spec.whatwg.org/print.pdf'], 162 | ['https://whatwg.org/specs/web-apps/current-work/html5-a4.pdf', 301, 'https://html.spec.whatwg.org/print.pdf'], 163 | ['https://whatwg.org/specs/web-apps/current-work/html5-letter.pdf', 301, 'https://html.spec.whatwg.org/print.pdf'], 164 | ['https://whatwg.org/specs/web-apps/current-work/multipage/', 301, 'https://html.spec.whatwg.org/multipage/', 'keep'], 165 | ['https://whatwg.org/specs/web-apps/current-work/webrtc.html', 301, 'https://w3c.github.io/webrtc-pc/'], 166 | ['https://whatwg.org/specs/web-apps/current-work/websrt.html', 301, 'https://w3c.github.io/webvtt/'], 167 | ['https://whatwg.org/specs/web-apps/current-work/webvtt.html', 301, 'https://w3c.github.io/webvtt/'], 168 | ['https://whatwg.org/specs/web-apps/html5', 301, 'https://html.spec.whatwg.org/multipage/', 'keep'], 169 | ['https://whatwg.org/specs/web-forms/tests', 301, 'https://github.com/w3c/web-platform-tests', 'drop'], 170 | ['https://whatwg.org/specs/web-socket-protocol', 301, 'https://tools.ietf.org/html/rfc6455', 'drop'], 171 | ['https://whatwg.org/specs/web-workers/current-work/', 301, 'https://html.spec.whatwg.org/multipage/workers.html'], 172 | ['https://whatwg.org/u', 301, 'https://url.spec.whatwg.org/'], 173 | ['https://whatwg.org/url', 301, 'https://url.spec.whatwg.org/'], 174 | ['https://whatwg.org/wf2', 301, 'https://html.spec.whatwg.org/multipage/#forms'], 175 | ['https://whatwg.org/ws', 301, 'https://html.spec.whatwg.org/multipage/#network'], 176 | ['https://whatwg.org/ww', 301, 'https://html.spec.whatwg.org/multipage/#workers'], 177 | ['https://whatwg.org/x', 301, 'https://xhr.spec.whatwg.org/'], 178 | ['https://whatwg.org/xhr', 301, 'https://xhr.spec.whatwg.org/'], 179 | ['https://www.whatwg.org/', 301, 'https://whatwg.org/', 'keep'], 180 | ['https://xn--7ca.whatwg.org/', 301, 'https://html.spec.whatwg.org/', 'keep'], 181 | ]; 182 | 183 | function test(url, status, location) { 184 | specify(url, async function() { 185 | const response = await fetch(url, { redirect: 'manual' }); 186 | assert.strictEqual(response.status, status); 187 | assert.strictEqual(response.headers.get('location'), location); 188 | }); 189 | } 190 | 191 | function appendFoo(url) { 192 | if (url.endsWith('/')) { 193 | return url + 'foo'; 194 | } 195 | return url + '/foo'; 196 | } 197 | 198 | function generateTests([url, status, location, trailing]) { 199 | test(url, status, location || null); 200 | if (trailing !== undefined) { 201 | assert(trailing === 'keep' || trailing === 'drop'); 202 | test(appendFoo(url), status, 203 | trailing === 'keep' ? appendFoo(location) : location); 204 | } 205 | } 206 | 207 | describe('redirects', function() { 208 | describe('HTTP (to HTTPS)', function() { 209 | HTTP_TESTS.map(generateTests); 210 | }); 211 | 212 | describe('HTTPS (the good stuff)', function() { 213 | HTTPS_TESTS.map(generateTests); 214 | }); 215 | }); 216 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright © WHATWG (Apple, Google, Mozilla, Microsoft). 2 | 3 | This work is licensed under a Creative Commons Attribution 4.0 International 4 | License. To the extent portions of it are incorporated into source code, 5 | such portions in the source code are licensed under the BSD 3-Clause License instead. 6 | 7 | - - - - 8 | 9 | Creative Commons Attribution 4.0 International Public License 10 | 11 | By exercising the Licensed Rights (defined below), You accept and agree 12 | to be bound by the terms and conditions of this Creative Commons 13 | Attribution 4.0 International Public License ("Public License"). To the 14 | extent this Public License may be interpreted as a contract, You are 15 | granted the Licensed Rights in consideration of Your acceptance of 16 | these terms and conditions, and the Licensor grants You such rights in 17 | consideration of benefits the Licensor receives from making the 18 | Licensed Material available under these terms and conditions. 19 | 20 | 21 | Section 1 -- Definitions. 22 | 23 | a. Adapted Material means material subject to Copyright and Similar 24 | Rights that is derived from or based upon the Licensed Material 25 | and in which the Licensed Material is translated, altered, 26 | arranged, transformed, or otherwise modified in a manner requiring 27 | permission under the Copyright and Similar Rights held by the 28 | Licensor. For purposes of this Public License, where the Licensed 29 | Material is a musical work, performance, or sound recording, 30 | Adapted Material is always produced where the Licensed Material is 31 | synched in timed relation with a moving image. 32 | 33 | b. Adapter's License means the license You apply to Your Copyright 34 | and Similar Rights in Your contributions to Adapted Material in 35 | accordance with the terms and conditions of this Public License. 36 | 37 | c. Copyright and Similar Rights means copyright and/or similar rights 38 | closely related to copyright including, without limitation, 39 | performance, broadcast, sound recording, and Sui Generis Database 40 | Rights, without regard to how the rights are labeled or 41 | categorized. For purposes of this Public License, the rights 42 | specified in Section 2(b)(1)-(2) are not Copyright and Similar 43 | Rights. 44 | 45 | d. Effective Technological Measures means those measures that, in the 46 | absence of proper authority, may not be circumvented under laws 47 | fulfilling obligations under Article 11 of the WIPO Copyright 48 | Treaty adopted on December 20, 1996, and/or similar international 49 | agreements. 50 | 51 | e. Exceptions and Limitations means fair use, fair dealing, and/or 52 | any other exception or limitation to Copyright and Similar Rights 53 | that applies to Your use of the Licensed Material. 54 | 55 | f. Licensed Material means the artistic or literary work, database, 56 | or other material to which the Licensor applied this Public 57 | License. 58 | 59 | g. Licensed Rights means the rights granted to You subject to the 60 | terms and conditions of this Public License, which are limited to 61 | all Copyright and Similar Rights that apply to Your use of the 62 | Licensed Material and that the Licensor has authority to license. 63 | 64 | h. Licensor means the individual(s) or entity(ies) granting rights 65 | under this Public License. 66 | 67 | i. Share means to provide material to the public by any means or 68 | process that requires permission under the Licensed Rights, such 69 | as reproduction, public display, public performance, distribution, 70 | dissemination, communication, or importation, and to make material 71 | available to the public including in ways that members of the 72 | public may access the material from a place and at a time 73 | individually chosen by them. 74 | 75 | j. Sui Generis Database Rights means rights other than copyright 76 | resulting from Directive 96/9/EC of the European Parliament and of 77 | the Council of 11 March 1996 on the legal protection of databases, 78 | as amended and/or succeeded, as well as other essentially 79 | equivalent rights anywhere in the world. 80 | 81 | k. You means the individual or entity exercising the Licensed Rights 82 | under this Public License. Your has a corresponding meaning. 83 | 84 | 85 | Section 2 -- Scope. 86 | 87 | a. License grant. 88 | 89 | 1. Subject to the terms and conditions of this Public License, 90 | the Licensor hereby grants You a worldwide, royalty-free, 91 | non-sublicensable, non-exclusive, irrevocable license to 92 | exercise the Licensed Rights in the Licensed Material to: 93 | 94 | a. reproduce and Share the Licensed Material, in whole or 95 | in part; and 96 | 97 | b. produce, reproduce, and Share Adapted Material. 98 | 99 | 2. Exceptions and Limitations. For the avoidance of doubt, where 100 | Exceptions and Limitations apply to Your use, this Public 101 | License does not apply, and You do not need to comply with 102 | its terms and conditions. 103 | 104 | 3. Term. The term of this Public License is specified in Section 105 | 6(a). 106 | 107 | 4. Media and formats; technical modifications allowed. The 108 | Licensor authorizes You to exercise the Licensed Rights in 109 | all media and formats whether now known or hereafter created, 110 | and to make technical modifications necessary to do so. The 111 | Licensor waives and/or agrees not to assert any right or 112 | authority to forbid You from making technical modifications 113 | necessary to exercise the Licensed Rights, including 114 | technical modifications necessary to circumvent Effective 115 | Technological Measures. For purposes of this Public License, 116 | simply making modifications authorized by this Section 2(a) 117 | (4) never produces Adapted Material. 118 | 119 | 5. Downstream recipients. 120 | 121 | a. Offer from the Licensor -- Licensed Material. Every 122 | recipient of the Licensed Material automatically 123 | receives an offer from the Licensor to exercise the 124 | Licensed Rights under the terms and conditions of this 125 | Public License. 126 | 127 | b. No downstream restrictions. You may not offer or impose 128 | any additional or different terms or conditions on, or 129 | apply any Effective Technological Measures to, the 130 | Licensed Material if doing so restricts exercise of the 131 | Licensed Rights by any recipient of the Licensed 132 | Material. 133 | 134 | 6. No endorsement. Nothing in this Public License constitutes or 135 | may be construed as permission to assert or imply that You 136 | are, or that Your use of the Licensed Material is, connected 137 | with, or sponsored, endorsed, or granted official status by, 138 | the Licensor or others designated to receive attribution as 139 | provided in Section 3(a)(1)(A)(i). 140 | 141 | b. Other rights. 142 | 143 | 1. Moral rights, such as the right of integrity, are not 144 | licensed under this Public License, nor are publicity, 145 | privacy, and/or other similar personality rights; however, to 146 | the extent possible, the Licensor waives and/or agrees not to 147 | assert any such rights held by the Licensor to the limited 148 | extent necessary to allow You to exercise the Licensed 149 | Rights, but not otherwise. 150 | 151 | 2. Patent and trademark rights are not licensed under this 152 | Public License. 153 | 154 | 3. To the extent possible, the Licensor waives any right to 155 | collect royalties from You for the exercise of the Licensed 156 | Rights, whether directly or through a collecting society 157 | under any voluntary or waivable statutory or compulsory 158 | licensing scheme. In all other cases the Licensor expressly 159 | reserves any right to collect such royalties. 160 | 161 | 162 | Section 3 -- License Conditions. 163 | 164 | Your exercise of the Licensed Rights is expressly made subject to the 165 | following conditions. 166 | 167 | a. Attribution. 168 | 169 | 1. If You Share the Licensed Material (including in modified 170 | form), You must: 171 | 172 | a. retain the following if it is supplied by the Licensor 173 | with the Licensed Material: 174 | 175 | i. identification of the creator(s) of the Licensed 176 | Material and any others designated to receive 177 | attribution, in any reasonable manner requested by 178 | the Licensor (including by pseudonym if 179 | designated); 180 | 181 | ii. a copyright notice; 182 | 183 | iii. a notice that refers to this Public License; 184 | 185 | iv. a notice that refers to the disclaimer of 186 | warranties; 187 | 188 | v. a URI or hyperlink to the Licensed Material to the 189 | extent reasonably practicable; 190 | 191 | b. indicate if You modified the Licensed Material and 192 | retain an indication of any previous modifications; and 193 | 194 | c. indicate the Licensed Material is licensed under this 195 | Public License, and include the text of, or the URI or 196 | hyperlink to, this Public License. 197 | 198 | 2. You may satisfy the conditions in Section 3(a)(1) in any 199 | reasonable manner based on the medium, means, and context in 200 | which You Share the Licensed Material. For example, it may be 201 | reasonable to satisfy the conditions by providing a URI or 202 | hyperlink to a resource that includes the required 203 | information. 204 | 205 | 3. If requested by the Licensor, You must remove any of the 206 | information required by Section 3(a)(1)(A) to the extent 207 | reasonably practicable. 208 | 209 | 4. If You Share Adapted Material You produce, the Adapter's 210 | License You apply must not prevent recipients of the Adapted 211 | Material from complying with this Public License. 212 | 213 | 214 | Section 4 -- Sui Generis Database Rights. 215 | 216 | Where the Licensed Rights include Sui Generis Database Rights that 217 | apply to Your use of the Licensed Material: 218 | 219 | a. for the avoidance of doubt, Section 2(a)(1) grants You the right 220 | to extract, reuse, reproduce, and Share all or a substantial 221 | portion of the contents of the database; 222 | 223 | b. if You include all or a substantial portion of the database 224 | contents in a database in which You have Sui Generis Database 225 | Rights, then the database in which You have Sui Generis Database 226 | Rights (but not its individual contents) is Adapted Material; and 227 | 228 | c. You must comply with the conditions in Section 3(a) if You Share 229 | all or a substantial portion of the contents of the database. 230 | 231 | For the avoidance of doubt, this Section 4 supplements and does not 232 | replace Your obligations under this Public License where the Licensed 233 | Rights include other Copyright and Similar Rights. 234 | 235 | 236 | Section 5 -- Disclaimer of Warranties and Limitation of Liability. 237 | 238 | a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE 239 | EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS 240 | AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF 241 | ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, 242 | IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, 243 | WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR 244 | PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, 245 | ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT 246 | KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT 247 | ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. 248 | 249 | b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE 250 | TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, 251 | NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, 252 | INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, 253 | COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR 254 | USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN 255 | ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR 256 | DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR 257 | IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. 258 | 259 | c. The disclaimer of warranties and limitation of liability provided 260 | above shall be interpreted in a manner that, to the extent 261 | possible, most closely approximates an absolute disclaimer and 262 | waiver of all liability. 263 | 264 | 265 | Section 6 -- Term and Termination. 266 | 267 | a. This Public License applies for the term of the Copyright and 268 | Similar Rights licensed here. However, if You fail to comply with 269 | this Public License, then Your rights under this Public License 270 | terminate automatically. 271 | 272 | b. Where Your right to use the Licensed Material has terminated under 273 | Section 6(a), it reinstates: 274 | 275 | 1. automatically as of the date the violation is cured, provided 276 | it is cured within 30 days of Your discovery of the 277 | violation; or 278 | 279 | 2. upon express reinstatement by the Licensor. 280 | 281 | For the avoidance of doubt, this Section 6(b) does not affect any 282 | right the Licensor may have to seek remedies for Your violations 283 | of this Public License. 284 | 285 | c. For the avoidance of doubt, the Licensor may also offer the 286 | Licensed Material under separate terms or conditions or stop 287 | distributing the Licensed Material at any time; however, doing so 288 | will not terminate this Public License. 289 | 290 | d. Sections 1, 5, 6, 7, and 8 survive termination of this Public 291 | License. 292 | 293 | 294 | Section 7 -- Other Terms and Conditions. 295 | 296 | a. The Licensor shall not be bound by any additional or different 297 | terms or conditions communicated by You unless expressly agreed. 298 | 299 | b. Any arrangements, understandings, or agreements regarding the 300 | Licensed Material not stated herein are separate from and 301 | independent of the terms and conditions of this Public License. 302 | 303 | 304 | Section 8 -- Interpretation. 305 | 306 | a. For the avoidance of doubt, this Public License does not, and 307 | shall not be interpreted to, reduce, limit, restrict, or impose 308 | conditions on any use of the Licensed Material that could lawfully 309 | be made without permission under this Public License. 310 | 311 | b. To the extent possible, if any provision of this Public License is 312 | deemed unenforceable, it shall be automatically reformed to the 313 | minimum extent necessary to make it enforceable. If the provision 314 | cannot be reformed, it shall be severed from this Public License 315 | without affecting the enforceability of the remaining terms and 316 | conditions. 317 | 318 | c. No term or condition of this Public License will be waived and no 319 | failure to comply consented to unless expressly agreed to by the 320 | Licensor. 321 | 322 | d. Nothing in this Public License constitutes or may be interpreted 323 | as a limitation upon, or waiver of, any privileges and immunities 324 | that apply to the Licensor or You, including from the legal 325 | processes of any jurisdiction or authority. 326 | 327 | - - - - 328 | 329 | BSD 3-Clause License 330 | 331 | Redistribution and use in source and binary forms, with or without 332 | modification, are permitted provided that the following conditions are met: 333 | 334 | 1. Redistributions of source code must retain the above copyright notice, this 335 | list of conditions and the following disclaimer. 336 | 337 | 2. Redistributions in binary form must reproduce the above copyright notice, 338 | this list of conditions and the following disclaimer in the documentation 339 | and/or other materials provided with the distribution. 340 | 341 | 3. Neither the name of the copyright holder nor the names of its 342 | contributors may be used to endorse or promote products derived from 343 | this software without specific prior written permission. 344 | 345 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 346 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 347 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 348 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 349 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 350 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 351 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 352 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 353 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 354 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 355 | 356 | - - - - 357 | -------------------------------------------------------------------------------- /debian/marquee/nginx/sites/html.spec.whatwg.org.conf: -------------------------------------------------------------------------------- 1 | server { 2 | server_name html.spec.whatwg.org; 3 | root /var/www/html.spec.whatwg.org; 4 | 5 | include /etc/nginx/whatwg.conf; 6 | 7 | error_page 404 /404.html; 8 | 9 | # PDF headers 10 | location = /print.pdf { 11 | add_header Content-Disposition "inline; filename=html-standard.pdf"; 12 | } 13 | 14 | ## Redirects ## 15 | 16 | # Previously-generated filenames for /multipage/ that do not redirect via script: 17 | location = /multipage/embedded-content-0.html { 18 | return 301 /multipage/embedded-content.html; 19 | } 20 | location = /multipage/scripting-1.html { 21 | return 301 /multipage/scripting.html; 22 | } 23 | location = /multipage/tabular-data.html { 24 | return 301 /multipage/tables.html; 25 | } 26 | location = /multipage/web-sockets.html { 27 | return 301 https://websockets.spec.whatwg.org/; 28 | } 29 | location = /multipage/window-object.html { 30 | return 301 /multipage/nav-history-apis.html; 31 | } 32 | location = /multipage/origin.html { 33 | return 301 /multipage/browsers.html; 34 | } 35 | location = /multipage/history.html { 36 | return 301 /multipage/browsing-the-web.html; 37 | } 38 | 39 | # Intentionally deleted previously-generated filenames for /multipage/: 40 | location = /multipage/section-sql.html { 41 | return 410; 42 | } 43 | 44 | # Images for now-deleted features: 45 | location = /images/contextmenu-collapsed.png { 46 | return 410; 47 | } 48 | location = /images/contextmenu-expanded.png { 49 | return 410; 50 | } 51 | 52 | # Images converted to svg: 53 | location = /images/content-venn.png { 54 | return 301 /images/content-venn.svg; 55 | } 56 | location = /images/parsing-model-overview.png { 57 | return 301 /images/parsing-model-overview.svg; 58 | } 59 | location = /images/sample-email-1.png { 60 | return 301 /images/sample-email-1.svg; 61 | } 62 | location = /images/sample-email-2.png { 63 | return 301 /images/sample-email-2.svg; 64 | } 65 | location = /images/sample-url.png { 66 | return 301 /images/sample-url.svg; 67 | } 68 | 69 | # Deleted demo using CGI: 70 | location ~ ^/(demos/workers/stocks/.*)$ { 71 | return 301 https://github.com/whatwg/html/tree/1332efd5e4c27ae859bf2316c6b477d77cf93716/$1; 72 | } 73 | 74 | # Misc 301 redirects: 75 | location = /complete.html { 76 | return 301 /; 77 | } 78 | location ~ ^/complete(/(.*))?$ { 79 | return 301 /$2; 80 | } 81 | location = /index { 82 | return 301 /; 83 | } 84 | location ~ ^/C(/(.*))?$ { 85 | return 301 /multipage/$2; 86 | } 87 | location = /multipage/entities.json { 88 | return 301 /entities.json; 89 | } 90 | location ~ ^/multipage/images(/(.*))?$ { 91 | return 301 /images/$2; 92 | } 93 | location = /multipage/link-fixup.js { 94 | return 301 /link-fixup.js; 95 | } 96 | location ~ ^/multipage/websockets(/(.*))?$ { 97 | return 301 https://websockets.spec.whatwg.org/$2; 98 | } 99 | location = /demos/offline/clock/clock.html { 100 | return 301 /demos/offline/clock/clock2.html; 101 | } 102 | 103 | # Mostly for redirects originating from http://w3c.github.io/html/ 104 | location = /acknowledgements.html { 105 | return 301 /multipage/acknowledgements.html; 106 | } 107 | location = /a.html { 108 | return 301 /multipage/text-level-semantics.html; 109 | } 110 | location = /apis-in-html-documents.html { 111 | return 301 /multipage/dynamic-markup-insertion.html; 112 | } 113 | location = /article.html { 114 | return 301 /multipage/sections.html; 115 | } 116 | location = /association-of-controls-and-forms.html { 117 | return 301 /multipage/form-control-infrastructure.html; 118 | } 119 | location = /attributes-common-to-form-controls.html { 120 | return 301 /multipage/form-control-infrastructure.html; 121 | } 122 | location = /attributes-common-to-ins-and-del-elements.html { 123 | return 301 /multipage/edits.html; 124 | } 125 | location = /attributes-common-to-td-and-th-elements.html { 126 | return 301 /multipage/tables.html; 127 | } 128 | location = /b.html { 129 | return 301 /multipage/text-level-semantics.html; 130 | } 131 | location = /browsers.html { 132 | return 301 /multipage/browsers.html; 133 | } 134 | location = /browsing-the-web.html { 135 | return 301 /multipage/browsing-the-web.html; 136 | } 137 | location = /canvas.html { 138 | return 301 /multipage/canvas.html; 139 | } 140 | location = /changes.html { 141 | return 301 /multipage/introduction.html; 142 | } 143 | location = /commands.html { 144 | return 301 /multipage/interactive-elements.html; 145 | } 146 | location = /common-dom-interfaces.html { 147 | return 301 /multipage/common-dom-interfaces.html; 148 | } 149 | location = /common-idioms.html { 150 | return 301 /multipage/semantics-other.html; 151 | } 152 | location = /common-idioms-without-dedicated-elements.html { 153 | return 301 /multipage/semantics-other.html; 154 | } 155 | location = /common-input-element-apis.html { 156 | return 301 /multipage/input.html; 157 | } 158 | location = /common-input-element-attributes.html { 159 | return 301 /multipage/input.html; 160 | } 161 | location = /common-microsyntaxes.html { 162 | return 301 /multipage/common-microsyntaxes.html; 163 | } 164 | location = /comms.html { 165 | return 301 /multipage/comms.html; 166 | } 167 | location = /constraints.html { 168 | return 301 /multipage/form-control-infrastructure.html; 169 | } 170 | location = /content-models.html { 171 | return 301 /multipage/dom.html; 172 | } 173 | location = /converting-html-to-other-formats.html { 174 | return 301 /multipage/microdata.html; 175 | } 176 | location = /custom-elements.html { 177 | return 301 /multipage/custom-elements.html; 178 | } 179 | location = /dimension-attributes.html { 180 | return 301 /multipage/embedded-content-other.html; 181 | } 182 | location = /disabled-elements.html { 183 | return 301 /multipage/semantics-other.html; 184 | } 185 | location = /dnd.html { 186 | return 301 /multipage/dnd.html; 187 | } 188 | location = /document-metadata.html { 189 | return 301 /multipage/semantics.html; 190 | } 191 | location = /dom.html { 192 | return 301 /multipage/dom.html; 193 | } 194 | location = /dynamic-markup-insertion.html { 195 | return 301 /multipage/dynamic-markup-insertion.html; 196 | } 197 | location = /editing.html { 198 | return 301 /multipage/interaction.html; 199 | } 200 | location = /editing-apis.html { 201 | return 301 /multipage/interaction.html; 202 | } 203 | location = /edits.html { 204 | return 301 /multipage/edits.html; 205 | } 206 | location = /edits-and-lists.html { 207 | return 301 /multipage/edits.html; 208 | } 209 | location = /element-definitions.html { 210 | return 301 /multipage/dom.html; 211 | } 212 | location = /elements.html { 213 | return 301 /multipage/dom.html; 214 | } 215 | location = /embedded-content-0.html { 216 | return 301 /multipage/embedded-content.html; 217 | } 218 | location = /embedded-content-1.html { 219 | return 301 /multipage/embedded-content.html; 220 | } 221 | location = /embedded-content.html { 222 | return 301 /multipage/embedded-content.html; 223 | } 224 | location = /embedded-content-other.html { 225 | return 301 /multipage/embedded-content-other.html; 226 | } 227 | location = /form-control-infrastructure.html { 228 | return 301 /multipage/form-control-infrastructure.html; 229 | } 230 | location = /form-elements.html { 231 | return 301 /multipage/form-elements.html; 232 | } 233 | location = /form-submission.html { 234 | return 301 /multipage/form-control-infrastructure.html; 235 | } 236 | location = /forms.html { 237 | return 301 /multipage/forms.html; 238 | } 239 | location = /fullindex.html { 240 | return 301 /multipage/indices.html; 241 | } 242 | location = /global-attributes.html { 243 | return 301 /multipage/dom.html; 244 | } 245 | location = /grouping-content.html { 246 | return 301 /multipage/grouping-content.html; 247 | } 248 | location = /headings-and-sections.html { 249 | return 301 /multipage/sections.html; 250 | } 251 | location = /history.html { 252 | return 301 /multipage/browsing-the-web.html; 253 | } 254 | location = /the-hr-element.html { 255 | return 301 /multipage/grouping-content.html; 256 | } 257 | location = /iana.html { 258 | return 301 /multipage/iana.html; 259 | } 260 | location = /iana-considerations.html { 261 | return 301 /multipage/iana.html; 262 | } 263 | location = /idl-index.html { 264 | return 301 /multipage/indices.html; 265 | } 266 | location = /iframe-embed-object.html { 267 | return 301 /multipage/iframe-embed-object.html; 268 | } 269 | location = /imagebitmap-and-animations.html { 270 | return 301 /multipage/imagebitmap-and-animations.html; 271 | } 272 | location = /image-maps.html { 273 | return 301 /multipage/image-maps.html; 274 | } 275 | location = /images.html { 276 | return 301 /multipage/images.html; 277 | } 278 | location = /indices.html { 279 | return 301 /multipage/indices.html; 280 | } 281 | location = /infrastructure.html { 282 | return 301 /multipage/infrastructure.html; 283 | } 284 | location = /input.html { 285 | return 301 /multipage/input.html; 286 | } 287 | location = /interaction.html { 288 | return 301 /multipage/interaction.html; 289 | } 290 | location = /interactions-with-xpath-and-xslt.html { 291 | return 301 /multipage/infrastructure.html; 292 | } 293 | location = /interactive-elements.html { 294 | return 301 /multipage/interactive-elements.html; 295 | } 296 | location = /introduction.html { 297 | return 301 /multipage/introduction.html; 298 | } 299 | location = /links.html { 300 | return 301 /multipage/links.html; 301 | } 302 | location = /main.html { 303 | return 301 /multipage/grouping-content.html; 304 | } 305 | location = /matching-html-elements-using-selectors.html { 306 | return 301 /multipage/semantics-other.html; 307 | } 308 | location = /mathml.html { 309 | return 301 /multipage/embedded-content.html; 310 | } 311 | location = /media.html { 312 | return 301 /multipage/media.html; 313 | } 314 | location = /media-elements.html { 315 | return 301 /multipage/media.html; 316 | } 317 | location = /microdata.html { 318 | return 301 /multipage/microdata.html; 319 | } 320 | location = /microdata/master/Overview.html { 321 | return 301 /multipage/microdata.html; 322 | } 323 | location = /named-character-references.html { 324 | return 301 /multipage/named-characters.html; 325 | } 326 | location = /named-characters.html { 327 | return 301 /multipage/named-characters.html; 328 | } 329 | location = /network.html { 330 | return 301 https://websockets.spec.whatwg.org/; 331 | } 332 | location = /number-state.html { 333 | return 301 /multipage/input.html; 334 | } 335 | location = /obsolete.html { 336 | return 301 /multipage/obsolete.html; 337 | } 338 | location = /offline.html { 339 | return 301 /multipage/offline.html; 340 | } 341 | location = /origin.html { 342 | return 301 /multipage/browsers.html; 343 | } 344 | location = /origin-0.html { 345 | return 301 /multipage/browsers.html; 346 | } 347 | location = /overview.html { 348 | return 301 /multipage/; 349 | } 350 | location = /Overview.html { 351 | return 301 /multipage/; 352 | } 353 | location = /parsing.html { 354 | return 301 /multipage/parsing.html; 355 | } 356 | location = /property-index.html { 357 | return 301 /multipage/indices.html; 358 | } 359 | location = /references.html { 360 | return 301 /multipage/references.html; 361 | } 362 | location = /rendering.html { 363 | return 301 /multipage/rendering.html; 364 | } 365 | location = /requirements-relating-to-bidirectional-algorithm-formatting-characters.html { 366 | return 301 /multipage/dom.html; 367 | } 368 | location = /scripting-1.html { 369 | return 301 /multipage/scripting.html; 370 | } 371 | location = /scripting.html { 372 | return 301 /multipage/scripting.html; 373 | } 374 | location = /sec-forms.html { 375 | return 301 /multipage/forms.html; 376 | } 377 | location = /section-index.html { 378 | return 301 /multipage/indices.html; 379 | } 380 | location = /sections.html { 381 | return 301 /multipage/sections.html; 382 | } 383 | location = /selectors.html { 384 | return 301 /multipage/semantics-other.html; 385 | } 386 | location = /semantics.html { 387 | return 301 /multipage/semantics.html; 388 | } 389 | location = /semantics-embedded-content.html { 390 | return 301 /multipage/embedded-content.html; 391 | } 392 | location = /semantics-other.html { 393 | return 301 /multipage/semantics-other.html; 394 | } 395 | location = /semantics-scripting.html { 396 | return 301 /multipage/scripting.html; 397 | } 398 | location = /server-sent-events.html { 399 | return 301 /multipage/server-sent-events.html; 400 | } 401 | location = /single-page.html { 402 | return 301 /; 403 | } 404 | location = /spec.html { 405 | return 301 /multipage/; 406 | } 407 | location = /states-of-the-type-attribute.html { 408 | return 301 /multipage/input.html; 409 | } 410 | location = /structured-data.html { 411 | return 301 /multipage/structured-data.html; 412 | } 413 | location = /svg-0.html { 414 | return 301 /multipage/embedded-content.html; 415 | } 416 | location = /system-state-and-capabilities.html { 417 | return 301 /multipage/system-state.html; 418 | } 419 | location = /system-state.html { 420 | return 301 /multipage/system-state.html; 421 | } 422 | location = /syntax.html { 423 | return 301 /multipage/syntax.html; 424 | } 425 | location = /tabular-data.html { 426 | return 301 /multipage/tables.html; 427 | } 428 | location = /tables.html { 429 | return 301 /multipage/tables.html; 430 | } 431 | location = /textFieldSelection.html { 432 | return 301 /multipage/form-control-infrastructure.html; 433 | } 434 | location = /textfieldselection.html { 435 | return 301 /multipage/form-control-infrastructure.html; 436 | } 437 | location = /text-level-semantics.html { 438 | return 301 /multipage/text-level-semantics.html; 439 | } 440 | location = /textlevel-semantics.html { 441 | return 301 /multipage/text-level-semantics.html; 442 | } 443 | location = /the-a-element.html { 444 | return 301 /multipage/text-level-semantics.html; 445 | } 446 | location = /the-abbr-element.html { 447 | return 301 /multipage/text-level-semantics.html; 448 | } 449 | location = /the-address-element.html { 450 | return 301 /multipage/sections.html; 451 | } 452 | location = /the-area-element.html { 453 | return 301 /multipage/image-maps.html; 454 | } 455 | location = /the-article-element.html { 456 | return 301 /multipage/sections.html; 457 | } 458 | location = /the-aside-element.html { 459 | return 301 /multipage/sections.html; 460 | } 461 | location = /the-audio-element.html { 462 | return 301 /multipage/media.html; 463 | } 464 | location = /the-b-element.html { 465 | return 301 /multipage/text-level-semantics.html; 466 | } 467 | location = /the-base-element.html { 468 | return 301 /multipage/semantics.html; 469 | } 470 | location = /the-blockquote-element.html { 471 | return 301 /multipage/grouping-content.html; 472 | } 473 | location = /the-bdi-element.html { 474 | return 301 /multipage/text-level-semantics.html; 475 | } 476 | location = /the-bdo-element.html { 477 | return 301 /multipage/text-level-semantics.html; 478 | } 479 | location = /the-body-element.html { 480 | return 301 /multipage/sections.html; 481 | } 482 | location = /the-br-element.html { 483 | return 301 /multipage/text-level-semantics.html; 484 | } 485 | location = /the-button-element.html { 486 | return 301 /multipage/form-elements.html; 487 | } 488 | location = /the-canvas-element.html { 489 | return 301 /multipage/canvas.html; 490 | } 491 | location = /the-caption-element.html { 492 | return 301 /multipage/tables.html; 493 | } 494 | location = /the-cite-element.html { 495 | return 301 /multipage/text-level-semantics.html; 496 | } 497 | location = /the-code-element.html { 498 | return 301 /multipage/text-level-semantics.html; 499 | } 500 | location = /the-col-element.html { 501 | return 301 /multipage/tables.html; 502 | } 503 | location = /the-colgroup-element.html { 504 | return 301 /multipage/tables.html; 505 | } 506 | location = /the-command-element.html { 507 | return 301 /multipage/obsolete.html; 508 | } 509 | location = /the-datalist-element.html { 510 | return 301 /multipage/form-elements.html; 511 | } 512 | location = /the-dd-element.html { 513 | return 301 /multipage/grouping-content.html; 514 | } 515 | location = /the-del-element.html { 516 | return 301 /multipage/edits.html; 517 | } 518 | location = /the-details-element.html { 519 | return 301 /multipage/interactive-elements.html; 520 | } 521 | location = /the-div-element.html { 522 | return 301 /multipage/grouping-content.html; 523 | } 524 | location = /the-dl-element.html { 525 | return 301 /multipage/grouping-content.html; 526 | } 527 | location = /the-dfn-element.html { 528 | return 301 /multipage/text-level-semantics.html; 529 | } 530 | location = /the-dt-element.html { 531 | return 301 /multipage/grouping-content.html; 532 | } 533 | location = /the-embed-element.html { 534 | return 301 /multipage/iframe-embed-object.html; 535 | } 536 | location = /the-em-element.html { 537 | return 301 /multipage/text-level-semantics.html; 538 | } 539 | location = /the-end.html { 540 | return 301 /multipage/parsing.html; 541 | } 542 | location = /fetching-resources.html { 543 | return 301 /multipage/urls-and-fetching.html; 544 | } 545 | location = /the-fieldset-element.html { 546 | return 301 /multipage/form-elements.html; 547 | } 548 | location = /the-figcaption-element.html { 549 | return 301 /multipage/grouping-content.html; 550 | } 551 | location = /the-figure-element.html { 552 | return 301 /multipage/grouping-content.html; 553 | } 554 | location = /the-footer-element.html { 555 | return 301 /multipage/sections.html; 556 | } 557 | location = /the-form-element.html { 558 | return 301 /multipage/forms.html; 559 | } 560 | location = /the-h1-h2-h3-h4-h5-and-h6-elements.html { 561 | return 301 /multipage/sections.html; 562 | } 563 | location = /the-head-element.html { 564 | return 301 /multipage/semantics.html; 565 | } 566 | location = /the-header-element.html { 567 | return 301 /multipage/sections.html; 568 | } 569 | location = /the-hgroup-element.html { 570 | return 301 /multipage/sections.html; 571 | } 572 | location = /the-html-element.html { 573 | return 301 /multipage/semantics.html; 574 | } 575 | location = /the-i-element.html { 576 | return 301 /multipage/text-level-semantics.html; 577 | } 578 | location = /the-iframe-element.html { 579 | return 301 /multipage/iframe-embed-object.html; 580 | } 581 | location = /the-img-element.html { 582 | return 301 /multipage/embedded-content-other.html; 583 | } 584 | location = /the-input-element.html { 585 | return 301 /multipage/input.html; 586 | } 587 | location = /the-ins-element.html { 588 | return 301 /multipage/edits.html; 589 | } 590 | location = /the-kbd-element.html { 591 | return 301 /multipage/text-level-semantics.html; 592 | } 593 | location = /the-keygen-element.html { 594 | return 301 /multipage/obsolete.html; 595 | } 596 | location = /the-label-element.html { 597 | return 301 /multipage/forms.html; 598 | } 599 | location = /the-legend-element.html { 600 | return 301 /multipage/form-elements.html; 601 | } 602 | location = /the-li-element.html { 603 | return 301 /multipage/grouping-content.html; 604 | } 605 | location = /the-link-element.html { 606 | return 301 /multipage/semantics.html; 607 | } 608 | location = /the-map-element.html { 609 | return 301 /multipage/image-maps.html; 610 | } 611 | location = /the-mark-element.html { 612 | return 301 /multipage/text-level-semantics.html; 613 | } 614 | location = /the-menu-element.html { 615 | return 301 /multipage/grouping-content.html; 616 | } 617 | location = /the-meta-element.html { 618 | return 301 /multipage/semantics.html; 619 | } 620 | location = /the-meter-element.html { 621 | return 301 /multipage/form-elements.html; 622 | } 623 | location = /the-nav-element.html { 624 | return 301 /multipage/sections.html; 625 | } 626 | location = /the-noscript-element.html { 627 | return 301 /multipage/scripting.html; 628 | } 629 | location = /the-object-element.html { 630 | return 301 /multipage/iframe-embed-object.html; 631 | } 632 | location = /the-ol-element.html { 633 | return 301 /multipage/grouping-content.html; 634 | } 635 | location = /the-optgroup-element.html { 636 | return 301 /multipage/form-elements.html; 637 | } 638 | location = /the-option-element.html { 639 | return 301 /multipage/form-elements.html; 640 | } 641 | location = /the-output-element.html { 642 | return 301 /multipage/form-elements.html; 643 | } 644 | location = /the-p-element.html { 645 | return 301 /multipage/grouping-content.html; 646 | } 647 | location = /the-param-element.html { 648 | return 301 /multipage/iframe-embed-object.html; 649 | } 650 | location = /the-pre-element.html { 651 | return 301 /multipage/grouping-content.html; 652 | } 653 | location = /the-progress-element.html { 654 | return 301 /multipage/form-elements.html; 655 | } 656 | location = /the-q-element.html { 657 | return 301 /multipage/text-level-semantics.html; 658 | } 659 | location = /the-root-element.html { 660 | return 301 /multipage/semantics.html; 661 | } 662 | location = /the-rp-element.html { 663 | return 301 /multipage/text-level-semantics.html; 664 | } 665 | location = /the-rt-element.html { 666 | return 301 /multipage/text-level-semantics.html; 667 | } 668 | location = /the-ruby-element.html { 669 | return 301 /multipage/text-level-semantics.html; 670 | } 671 | location = /the-s-element.html { 672 | return 301 /multipage/text-level-semantics.html; 673 | } 674 | location = /the-samp-element.html { 675 | return 301 /multipage/text-level-semantics.html; 676 | } 677 | location = /the-script-element.html { 678 | return 301 /multipage/scripting.html; 679 | } 680 | location = /the-section-element.html { 681 | return 301 /multipage/sections.html; 682 | } 683 | location = /the-select-element.html { 684 | return 301 /multipage/form-elements.html; 685 | } 686 | location = /the-small-element.html { 687 | return 301 /multipage/text-level-semantics.html; 688 | } 689 | location = /the-source-element.html { 690 | return 301 /multipage/embedded-content.html; 691 | } 692 | location = /the-span-element.html { 693 | return 301 /multipage/text-level-semantics.html; 694 | } 695 | location = /the-strong-element.html { 696 | return 301 /multipage/text-level-semantics.html; 697 | } 698 | location = /the-style-element.html { 699 | return 301 /multipage/semantics.html; 700 | } 701 | location = /the-sub-and-sup-elements.html { 702 | return 301 /multipage/text-level-semantics.html; 703 | } 704 | location = /the-summary-element.html { 705 | return 301 /multipage/interactive-elements.html; 706 | } 707 | location = /the-tbody-element.html { 708 | return 301 /multipage/tables.html; 709 | } 710 | location = /the-textarea-element.html { 711 | return 301 /multipage/form-elements.html; 712 | } 713 | location = /the-table-element.html { 714 | return 301 /multipage/tables.html; 715 | } 716 | location = /the-td-element.html { 717 | return 301 /multipage/tables.html; 718 | } 719 | location = /the-tfoot-element.html { 720 | return 301 /multipage/tables.html; 721 | } 722 | location = /the-th-element.html { 723 | return 301 /multipage/tables.html; 724 | } 725 | location = /the-thead-element.html { 726 | return 301 /multipage/tables.html; 727 | } 728 | location = /the-time-element.html { 729 | return 301 /multipage/text-level-semantics.html; 730 | } 731 | location = /the-title-element.html { 732 | return 301 /multipage/semantics.html; 733 | } 734 | location = /the-tr-element.html { 735 | return 301 /multipage/tables.html; 736 | } 737 | location = /the-track-element.html { 738 | return 301 /multipage/media.html; 739 | } 740 | location = /the-u-element.html { 741 | return 301 /multipage/text-level-semantics.html; 742 | } 743 | location = /the-ul-element.html { 744 | return 301 /multipage/grouping-content.html; 745 | } 746 | location = /the-var-element.html { 747 | return 301 /multipage/text-level-semantics.html; 748 | } 749 | location = /the-video-element.html { 750 | return 301 /multipage/media.html; 751 | } 752 | location = /the-wbr-element.html { 753 | return 301 /multipage/text-level-semantics.html; 754 | } 755 | location = /the-xhtml-syntax.html { 756 | return 301 /multipage/xhtml.html; 757 | } 758 | location = /timers.html { 759 | return 301 /multipage/timers-and-user-prompts.html; 760 | } 761 | location = /timers-and-user-prompts.html { 762 | return 301 /multipage/timers-and-user-prompts.html; 763 | } 764 | location = /toc-status.html { 765 | return 301 /multipage/; 766 | } 767 | location = /tokenization.html { 768 | return 301 /multipage/parsing.html; 769 | } 770 | location = /tree-construction.html { 771 | return 301 /multipage/parsing.html; 772 | } 773 | location = /urls.html { 774 | return 301 /multipage/urls-and-fetching.html; 775 | } 776 | location = /urls-and-fetching.html { 777 | return 301 /multipage/urls-and-fetching.html; 778 | } 779 | location = /user-prompts.html { 780 | return 301 /multipage/user-prompts.html; 781 | } 782 | location = /video.html { 783 | return 301 /multipage/media.html; 784 | } 785 | location = /video-conferencing-and-peer-to-peer-communication.html { 786 | return 301 https://w3c.github.io/webrtc-pc/; 787 | } 788 | location = /wai-aria.html { 789 | return 301 /multipage/dom.html; 790 | } 791 | location = /webappapis.html { 792 | return 301 /multipage/webappapis.html; 793 | } 794 | location = /web-messaging.html { 795 | return 301 /multipage/web-messaging.html; 796 | } 797 | location = /web-sockets.html { 798 | return 301 https://websockets.spec.whatwg.org/; 799 | } 800 | location = /webstorage.html { 801 | return 301 /multipage/webstorage.html; 802 | } 803 | location = /window-object.html { 804 | return 301 /multipage/nav-history-apis.html; 805 | } 806 | location = /workers.html { 807 | return 301 /multipage/workers.html; 808 | } 809 | location = /xhtml.html { 810 | return 301 /multipage/xhtml.html; 811 | } 812 | 813 | # Multipage; mostly for redirects from W3C TR/html and other older forks 814 | location = /multipage/a.html { 815 | return 301 /multipage/text-level-semantics.html; 816 | } 817 | location = /multipage/a-map-element.html { 818 | return 301 /multipage/text-level-semantics.html; 819 | } 820 | location = /multipage/abbr.html { 821 | return 301 /multipage/text-level-semantics.html; 822 | } 823 | location = /multipage/acknowledgments.html { 824 | return 301 /multipage/acknowledgements.html; 825 | } 826 | location = /multipage/address.html { 827 | return 301 /multipage/sections.html; 828 | } 829 | location = /multipage/alt.html { 830 | return 301 /multipage/images.html; 831 | } 832 | location = /multipage/apis-in-html-documents.html { 833 | return 301 /multipage/dynamic-markup-insertion.html; 834 | } 835 | location = /multipage/area.html { 836 | return 301 /multipage/image-maps.html; 837 | } 838 | location = /multipage/aside.html { 839 | return 301 /multipage/sections.html; 840 | } 841 | location = /multipage/association-of-controls-and-forms.html { 842 | return 301 /multipage/form-control-infrastructure.html; 843 | } 844 | location = /multipage/attributes.html { 845 | return 301 /multipage/dom.html; 846 | } 847 | location = /multipage/attributes-common-to-form-controls.html { 848 | return 301 /multipage/form-control-infrastructure.html; 849 | } 850 | location = /multipage/attributes-common-to-td-and-th-elements.html { 851 | return 301 /multipage/tables.html; 852 | } 853 | location = /multipage/audio.html { 854 | return 301 /multipage/media.html; 855 | } 856 | location = /multipage/b.html { 857 | return 301 /multipage/text-level-semantics.html; 858 | } 859 | location = /multipage/base.html { 860 | return 301 /multipage/semantics.html; 861 | } 862 | location = /multipage/bdi.html { 863 | return 301 /multipage/text-level-semantics.html; 864 | } 865 | location = /multipage/bdo.html { 866 | return 301 /multipage/text-level-semantics.html; 867 | } 868 | location = /multipage/blockquote.html { 869 | return 301 /multipage/grouping-content.html; 870 | } 871 | location = /multipage/body.html { 872 | return 301 /multipage/sections.html; 873 | } 874 | location = /multipage/br.html { 875 | return 301 /multipage/text-level-semantics.html; 876 | } 877 | location = /multipage/button.html { 878 | return 301 /multipage/form-elements.html; 879 | } 880 | location = /multipage/button.button.html { 881 | return 301 /multipage/form-elements.html; 882 | } 883 | location = /multipage/button.reset.html { 884 | return 301 /multipage/form-elements.html; 885 | } 886 | location = /multipage/button.submit.html { 887 | return 301 /multipage/form-elements.html; 888 | } 889 | location = /multipage/caption.html { 890 | return 301 /multipage/tables.html; 891 | } 892 | location = /multipage/changes.html { 893 | return 301 /multipage/introduction.html; 894 | } 895 | location = /multipage/cite.html { 896 | return 301 /multipage/text-level-semantics.html; 897 | } 898 | location = /multipage/code.html { 899 | return 301 /multipage/text-level-semantics.html; 900 | } 901 | location = /multipage/col.html { 902 | return 301 /multipage/tables.html; 903 | } 904 | location = /multipage/colgroup.html { 905 | return 301 /multipage/tables.html; 906 | } 907 | location = /multipage/command.html { 908 | return 301 /multipage/obsolete.html; 909 | } 910 | location = /multipage/command.checkbox.html { 911 | return 301 /multipage/obsolete.html; 912 | } 913 | location = /multipage/command.command.html { 914 | return 301 /multipage/obsolete.html; 915 | } 916 | location = /multipage/command.radio.html { 917 | return 301 /multipage/obsolete.html; 918 | } 919 | location = /multipage/commands.html { 920 | return 301 /multipage/interactive-elements.html; 921 | } 922 | location = /multipage/common-idioms.html { 923 | return 301 /multipage/semantics-other.html; 924 | } 925 | location = /multipage/common-idioms-without-dedicated-elements.html { 926 | return 301 /multipage/semantics-other.html; 927 | } 928 | location = /multipage/common-input-element-apis.html { 929 | return 301 /multipage/input.html; 930 | } 931 | location = /multipage/common-input-element-attributes.html { 932 | return 301 /multipage/input.html; 933 | } 934 | location = /multipage/common-models.html { 935 | return 301 /multipage/dom.html; 936 | } 937 | location = /multipage/constraints.html { 938 | return 301 /multipage/form-control-infrastructure.html; 939 | } 940 | location = /multipage/content-models.html { 941 | return 301 /multipage/dom.html; 942 | } 943 | location = /multipage/converting-html-to-other-formats.html { 944 | return 301 /multipage/microdata.html; 945 | } 946 | location = /multipage/datalist.html { 947 | return 301 /multipage/form-elements.html; 948 | } 949 | location = /multipage/datatypes.html { 950 | return 301 /multipage/common-microsyntaxes.html; 951 | } 952 | location = /multipage/dd.html { 953 | return 301 /multipage/grouping-content.html; 954 | } 955 | location = /multipage/del.html { 956 | return 301 /multipage/edits.html; 957 | } 958 | location = /multipage/details.html { 959 | return 301 /multipage/interactive-elements.html; 960 | } 961 | location = /multipage/dfn.html { 962 | return 301 /multipage/text-level-semantics.html; 963 | } 964 | location = /multipage/dimension-attributes.html { 965 | return 301 /multipage/embedded-content-other.html; 966 | } 967 | location = /multipage/disabled-elements.html { 968 | return 301 /multipage/semantics-other.html; 969 | } 970 | location = /multipage/div.html { 971 | return 301 /multipage/grouping-content.html; 972 | } 973 | location = /multipage/document-metadata.html { 974 | return 301 /multipage/semantics.html; 975 | } 976 | location = /multipage/dl.html { 977 | return 301 /multipage/grouping-content.html; 978 | } 979 | location = /multipage/documents.html { 980 | return 301 /multipage/dom.html; 981 | } 982 | location = /multipage/dt.html { 983 | return 301 /multipage/grouping-content.html; 984 | } 985 | location = /multipage/editing.html { 986 | return 301 /multipage/interaction.html; 987 | } 988 | location = /multipage/editing-apis.html { 989 | return 301 /multipage/interaction.html; 990 | } 991 | location = /multipage/elements.html { 992 | return 301 /multipage/dom.html; 993 | } 994 | location = /multipage/elements-by-function.html { 995 | return 301 /multipage/indices.html; 996 | } 997 | location = /multipage/em.html { 998 | return 301 /multipage/text-level-semantics.html; 999 | } 1000 | location = /multipage/embed.html { 1001 | return 301 /multipage/iframe-embed-object.html; 1002 | } 1003 | location = /multipage/embedded0.html { 1004 | return 301 /multipage/embedded-content.html; 1005 | } 1006 | location = /multipage/embedded-content-1.html { 1007 | return 301 /multipage/embedded-content.html; 1008 | } 1009 | location = /multipage/fetching-resources.html { 1010 | return 301 /multipage/urls-and-fetching.html; 1011 | } 1012 | location = /multipage/fieldset.html { 1013 | return 301 /multipage/form-elements.html; 1014 | } 1015 | location = /multipage/figure.html { 1016 | return 301 /multipage/grouping-content.html; 1017 | } 1018 | location = /multipage/footer.html { 1019 | return 301 /multipage/sections.html; 1020 | } 1021 | location = /multipage/form.html { 1022 | return 301 /multipage/forms.html; 1023 | } 1024 | location = /multipage/form-submission.html { 1025 | return 301 /multipage/form-control-infrastructure.html; 1026 | } 1027 | location = /multipage/fullindex.html { 1028 | return 301 /multipage/indices.html; 1029 | } 1030 | location = /multipage/global-attributes.html { 1031 | return 301 /multipage/dom.html; 1032 | } 1033 | location = /multipage/h1.html { 1034 | return 301 /multipage/sections.html; 1035 | } 1036 | location = /multipage/h2.html { 1037 | return 301 /multipage/sections.html; 1038 | } 1039 | location = /multipage/h3.html { 1040 | return 301 /multipage/sections.html; 1041 | } 1042 | location = /multipage/h4.html { 1043 | return 301 /multipage/sections.html; 1044 | } 1045 | location = /multipage/h5.html { 1046 | return 301 /multipage/sections.html; 1047 | } 1048 | location = /multipage/h6.html { 1049 | return 301 /multipage/sections.html; 1050 | } 1051 | location = /multipage/header.html { 1052 | return 301 /multipage/sections.html; 1053 | } 1054 | location = /multipage/head.html { 1055 | return 301 /multipage/semantics.html; 1056 | } 1057 | location = /multipage/headings-and-sections.html { 1058 | return 301 /multipage/sections.html; 1059 | } 1060 | location = /multipage/hgroup.html { 1061 | return 301 /multipage/sections.html; 1062 | } 1063 | location = /multipage/hr.html { 1064 | return 301 /multipage/grouping-content.html; 1065 | } 1066 | location = /multipage/html.html { 1067 | return 301 /multipage/semantics.html; 1068 | } 1069 | location = /multipage/idl-index.html { 1070 | return 301 /multipage/indices.html; 1071 | } 1072 | location = /multipage/iframe.html { 1073 | return 301 /multipage/iframe-embed-object.html; 1074 | } 1075 | location = /multipage/imagebitmap-and-animations.html.html { 1076 | return 301 /multipage/imagebitmap-and-animations.html; 1077 | } 1078 | location = /multipage/img.html { 1079 | return 301 /multipage/embedded-content.html; 1080 | } 1081 | location = /multipage/input.button.html { 1082 | return 301 /multipage/input.html; 1083 | } 1084 | location = /multipage/input.checkbox.html { 1085 | return 301 /multipage/input.html; 1086 | } 1087 | location = /multipage/input.color.html { 1088 | return 301 /multipage/input.html; 1089 | } 1090 | location = /multipage/input.date.html { 1091 | return 301 /multipage/input.html; 1092 | } 1093 | location = /multipage/input.datetime.html { 1094 | return 301 /multipage/input.html; 1095 | } 1096 | location = /multipage/input.datetime-local.html { 1097 | return 301 /multipage/input.html; 1098 | } 1099 | location = /multipage/input.email.html { 1100 | return 301 /multipage/input.html; 1101 | } 1102 | location = /multipage/input.file.html { 1103 | return 301 /multipage/input.html; 1104 | } 1105 | location = /multipage/input.hidden.html { 1106 | return 301 /multipage/input.html; 1107 | } 1108 | location = /multipage/input.image.html { 1109 | return 301 /multipage/input.html; 1110 | } 1111 | location = /multipage/input.month.html { 1112 | return 301 /multipage/input.html; 1113 | } 1114 | location = /multipage/input.number.html { 1115 | return 301 /multipage/input.html; 1116 | } 1117 | location = /multipage/input.password.html { 1118 | return 301 /multipage/input.html; 1119 | } 1120 | location = /multipage/input.range.html { 1121 | return 301 /multipage/input.html; 1122 | } 1123 | location = /multipage/input.radio.html { 1124 | return 301 /multipage/input.html; 1125 | } 1126 | location = /multipage/input.reset.html { 1127 | return 301 /multipage/input.html; 1128 | } 1129 | location = /multipage/input.search.html { 1130 | return 301 /multipage/input.html; 1131 | } 1132 | location = /multipage/input.submit.html { 1133 | return 301 /multipage/input.html; 1134 | } 1135 | location = /multipage/input.tel.html { 1136 | return 301 /multipage/input.html; 1137 | } 1138 | location = /multipage/input.text.html { 1139 | return 301 /multipage/input.html; 1140 | } 1141 | location = /multipage/input.time.html { 1142 | return 301 /multipage/input.html; 1143 | } 1144 | location = /multipage/input.url.html { 1145 | return 301 /multipage/input.html; 1146 | } 1147 | location = /multipage/input.week.html { 1148 | return 301 /multipage/input.html; 1149 | } 1150 | location = /multipage/ins.html { 1151 | return 301 /multipage/edits.html; 1152 | } 1153 | location = /multipage/interactions-with-xpath-and-xslt.html { 1154 | return 301 /multipage/infrastructure.html; 1155 | } 1156 | location = /multipage/intro.html { 1157 | return 301 /multipage/introduction.html; 1158 | } 1159 | location = /multipage/kbd.html { 1160 | return 301 /multipage/text-level-semantics.html; 1161 | } 1162 | location = /multipage/keygen.html { 1163 | return 301 /multipage/obsolete.html; 1164 | } 1165 | location = /multipage/label.html { 1166 | return 301 /multipage/forms.html; 1167 | } 1168 | location = /multipage/legend.html { 1169 | return 301 /multipage/form-elements.html; 1170 | } 1171 | location = /multipage/li.html { 1172 | return 301 /multipage/grouping-content.html; 1173 | } 1174 | location = /multipage/link.html { 1175 | return 301 /multipage/semantics.html; 1176 | } 1177 | location = /multipage/main.html { 1178 | return 301 /multipage/grouping-content.html; 1179 | } 1180 | location = /multipage/map.html { 1181 | return 301 /multipage/image-maps.html; 1182 | } 1183 | location = /multipage/mark.html { 1184 | return 301 /multipage/text-level-semantics.html; 1185 | } 1186 | location = /multipage/matching-html-elements-using-selectors.html { 1187 | return 301 /multipage/semantics-other.html; 1188 | } 1189 | location = /multipage/mathml.html { 1190 | return 301 /multipage/embedded-content.html; 1191 | } 1192 | location = /multipage/media-elements.html { 1193 | return 301 /multipage/media.html; 1194 | } 1195 | location = /multipage/menu.html { 1196 | return 301 /multipage/grouping-content.html; 1197 | } 1198 | location = /multipage/meta.html { 1199 | return 301 /multipage/semantics.html; 1200 | } 1201 | location = /multipage/meta.charset.html { 1202 | return 301 /multipage/semantics.html; 1203 | } 1204 | location = /multipage/meta.http-equiv.content-language.html { 1205 | return 301 /multipage/semantics.html; 1206 | } 1207 | location = /multipage/meta.http-equiv.content-type.html { 1208 | return 301 /multipage/semantics.html; 1209 | } 1210 | location = /multipage/meta.http-equiv.default-style.html { 1211 | return 301 /multipage/semantics.html; 1212 | } 1213 | location = /multipage/meta.http-equiv.refresh.html { 1214 | return 301 /multipage/semantics.html; 1215 | } 1216 | location = /multipage/meta.name.html { 1217 | return 301 /multipage/semantics.html; 1218 | } 1219 | location = /multipage/meter.html { 1220 | return 301 /multipage/form-elements.html; 1221 | } 1222 | location = /multipage/multipage/obsolete.html { 1223 | return 301 /multipage/obsolete.html; 1224 | } 1225 | location = /multipage/named-character-references.html { 1226 | return 301 /multipage/named-characters.html; 1227 | } 1228 | location = /multipage/named.html { 1229 | return 301 /multipage/named-characters.html; 1230 | } 1231 | location = /multipage/nav.html { 1232 | return 301 /multipage/sections.html; 1233 | } 1234 | location = /multipage/network.html { 1235 | return 301 https://websockets.spec.whatwg.org/; 1236 | } 1237 | location = /multipage/noscript.html { 1238 | return 301 /multipage/scripting.html; 1239 | } 1240 | location = /multipage/number-state.html { 1241 | return 301 /multipage/input.html; 1242 | } 1243 | location = /multipage/object.html { 1244 | return 301 /multipage/iframe-embed-object.html; 1245 | } 1246 | location = /multipage/obsolete-features.html { 1247 | return 301 /multipage/obsolete.html; 1248 | } 1249 | location = /multipage/ol.html { 1250 | return 301 /multipage/grouping-content.html; 1251 | } 1252 | location = /multipage/optgroup.html { 1253 | return 301 /multipage/form-elements.html; 1254 | } 1255 | location = /multipage/option.html { 1256 | return 301 /multipage/form-elements.html; 1257 | } 1258 | location = /multipage/origin-0.html { 1259 | return 301 /multipage/browsers.html; 1260 | } 1261 | location = /multipage/output.html { 1262 | return 301 /multipage/form-elements.html; 1263 | } 1264 | location = /multipage/overview.html { 1265 | return 301 /multipage/; 1266 | } 1267 | location = /multipage/Overview.html { 1268 | return 301 /multipage/; 1269 | } 1270 | location = /multipage/p.html { 1271 | return 301 /multipage/grouping-content.html; 1272 | } 1273 | location = /multipage/param.html { 1274 | return 301 /multipage/iframe-embed-object.html; 1275 | } 1276 | location = /multipage/pre.html { 1277 | return 301 /multipage/grouping-content.html; 1278 | } 1279 | location = /multipage/q.html { 1280 | return 301 /multipage/text-level-semantics.html; 1281 | } 1282 | location = /multipage/progress.html { 1283 | return 301 /multipage/form-elements.html; 1284 | } 1285 | location = /multipage/property-index.html { 1286 | return 301 /multipage/indices.html; 1287 | } 1288 | location = /multipage/rp.html { 1289 | return 301 /multipage/text-level-semantics.html; 1290 | } 1291 | location = /multipage/rt.html { 1292 | return 301 /multipage/text-level-semantics.html; 1293 | } 1294 | location = /multipage/ruby.html { 1295 | return 301 /multipage/text-level-semantics.html; 1296 | } 1297 | location = /multipage/s.html { 1298 | return 301 /multipage/text-level-semantics.html; 1299 | } 1300 | location = /multipage/samp.html { 1301 | return 301 /multipage/text-level-semantics.html; 1302 | } 1303 | location = /multipage/script.html { 1304 | return 301 /multipage/scripting.html; 1305 | } 1306 | location = /multipage/sec-forms.html { 1307 | return 301 /multipage/forms.html; 1308 | } 1309 | location = /multipage/section.html { 1310 | return 301 /multipage/sections.html; 1311 | } 1312 | location = /multipage/section-browser.html { 1313 | return 301 /multipage/browsers.html; 1314 | } 1315 | location = /multipage/section-conformance.html { 1316 | return 301 /multipage/infrastructure.html; 1317 | } 1318 | location = /multipage/section-contenteditable.html { 1319 | return 301 /multipage/interaction.html; 1320 | } 1321 | location = /multipage/section-crossDocumentMessages.html { 1322 | return 301 /multipage/web-messaging.html; 1323 | } 1324 | location = /multipage/section-embedded.html { 1325 | return 301 /multipage/embedded-content.html; 1326 | } 1327 | location = /multipage/section-grouping.html { 1328 | return 301 /multipage/grouping-content.html; 1329 | } 1330 | location = /multipage/section-index.html { 1331 | return 301 /multipage/indices.html; 1332 | } 1333 | location = /multipage/section-interactive-elements.html { 1334 | return 301 /multipage/interactive-elements.html; 1335 | } 1336 | location = /multipage/section-links.html { 1337 | return 301 /multipage/links.html; 1338 | } 1339 | location = /multipage/section-origin.html { 1340 | return 301 /multipage/browsers.html; 1341 | } 1342 | location = /multipage/section-parsing.html { 1343 | return 301 /multipage/parsing.html; 1344 | } 1345 | location = /multipage/section-scripting.html { 1346 | return 301 /multipage/scripting.html; 1347 | } 1348 | location = /multipage/section-sections.html { 1349 | return 301 /multipage/sections.html; 1350 | } 1351 | location = /multipage/section-server-sent-events.html { 1352 | return 301 /multipage/server-sent-events.html; 1353 | } 1354 | location = /multipage/section-structured.html { 1355 | return 301 /multipage/structured-data.html; 1356 | } 1357 | location = /multipage/section-the-canvas.html { 1358 | return 301 /multipage/canvas.html; 1359 | } 1360 | location = /multipage/section-tree-construction.html { 1361 | return 301 /multipage/parsing.html; 1362 | } 1363 | location = /multipage/section-video.html { 1364 | return 301 /multipage/media.html; 1365 | } 1366 | location = /multipage/section-writing0.html { 1367 | return 301 /multipage/syntax.html; 1368 | } 1369 | location = /multipage/section-writing.html { 1370 | return 301 /multipage/syntax.html; 1371 | } 1372 | location = /multipage/select.html { 1373 | return 301 /multipage/form-elements.html; 1374 | } 1375 | location = /multipage/selectors.html { 1376 | return 301 /multipage/semantics-other.html; 1377 | } 1378 | location = /multipage/semantics-embedded-content.html { 1379 | return 301 /multipage/embedded-content.html; 1380 | } 1381 | location = /multipage/semantics-scripting.html { 1382 | return 301 /multipage/scripting.html; 1383 | } 1384 | location = /multipage/serializing-html-fragments.html { 1385 | return 301 /multipage/parsing.html; 1386 | } 1387 | location = /multipage/shadow-dom.html { 1388 | return 301 https://dom.spec.whatwg.org/; 1389 | } 1390 | location = /multipage/single-page.html { 1391 | return 301 /; 1392 | } 1393 | location = /multipage/span.html { 1394 | return 301 /multipage/text-level-semantics.html; 1395 | } 1396 | location = /multipage/spec.html { 1397 | return 301 /multipage/; 1398 | } 1399 | location = /multipage/small.html { 1400 | return 301 /multipage/text-level-semantics.html; 1401 | } 1402 | location = /multipage/source.html { 1403 | return 301 /multipage/embedded-content.html; 1404 | } 1405 | location = /multipage/states-of-the-type-attribute.html { 1406 | return 301 /multipage/input.html; 1407 | } 1408 | location = /multipage/strong.html { 1409 | return 301 /multipage/text-level-semantics.html; 1410 | } 1411 | location = /multipage/structured.html { 1412 | return 301 /multipage/structured-data.html; 1413 | } 1414 | location = /multipage/structured-client-side-storage.html { 1415 | return 301 /multipage/webstorage.html; 1416 | } 1417 | location = /multipage/style.html { 1418 | return 301 /multipage/semantics.html; 1419 | } 1420 | location = /multipage/sub.html { 1421 | return 301 /multipage/text-level-semantics.html; 1422 | } 1423 | location = /multipage/sup.html { 1424 | return 301 /multipage/text-level-semantics.html; 1425 | } 1426 | location = /multipage/summary.html { 1427 | return 301 /multipage/interactive-elements.html; 1428 | } 1429 | location = /multipage/system-state-and-capabilities.html { 1430 | return 301 /multipage/system-state.html; 1431 | } 1432 | location = /multipage/table.html { 1433 | return 301 /multipage/tables.html; 1434 | } 1435 | location = /multipage/tabular.html { 1436 | return 301 /multipage/tables.html; 1437 | } 1438 | location = /multipage/tbody.html { 1439 | return 301 /multipage/tables.html; 1440 | } 1441 | location = /multipage/td.html { 1442 | return 301 /multipage/tables.html; 1443 | } 1444 | location = /multipage/tfoot.html { 1445 | return 301 /multipage/tables.html; 1446 | } 1447 | location = /multipage/terminology.html { 1448 | return 301 /multipage/infrastructure.html; 1449 | } 1450 | location = /multipage/textarea.html { 1451 | return 301 /multipage/form-elements.html; 1452 | } 1453 | location = /multipage/textFieldSelection.html { 1454 | return 301 /multipage/form-control-infrastructure.html; 1455 | } 1456 | location = /multipage/textlevel-semantics.html { 1457 | return 301 /multipage/text-level-semantics.html; 1458 | } 1459 | location = /multipage/th.html { 1460 | return 301 /multipage/tables.html; 1461 | } 1462 | location = /multipage/thead.html { 1463 | return 301 /multipage/tables.html; 1464 | } 1465 | location = /multipage/the-a-element.html { 1466 | return 301 /multipage/text-level-semantics.html; 1467 | } 1468 | location = /multipage/the-abbr-element.html { 1469 | return 301 /multipage/text-level-semantics.html; 1470 | } 1471 | location = /multipage/the-article-element.html { 1472 | return 301 /multipage/sections.html; 1473 | } 1474 | location = /multipage/the-aside-element.html { 1475 | return 301 /multipage/sections.html; 1476 | } 1477 | location = /multipage/the-audio-element.html { 1478 | return 301 /multipage/media.html; 1479 | } 1480 | location = /multipage/the-b-element.html { 1481 | return 301 /multipage/text-level-semantics.html; 1482 | } 1483 | location = /multipage/the-bdi-element.html { 1484 | return 301 /multipage/text-level-semantics.html; 1485 | } 1486 | location = /multipage/the-blockquote-element.html { 1487 | return 301 /multipage/grouping-content.html; 1488 | } 1489 | location = /multipage/the-body-element.html { 1490 | return 301 /multipage/sections.html; 1491 | } 1492 | location = /multipage/the-br-element.html { 1493 | return 301 /multipage/text-level-semantics.html; 1494 | } 1495 | location = /multipage/the-button-element.html { 1496 | return 301 /multipage/form-elements.html; 1497 | } 1498 | location = /multipage/the-canvas.html { 1499 | return 301 /multipage/canvas.html; 1500 | } 1501 | location = /multipage/the-canvas-element.html { 1502 | return 301 /multipage/canvas.html; 1503 | } 1504 | location = /multipage/the-caption-element.html { 1505 | return 301 /multipage/tables.html; 1506 | } 1507 | location = /multipage/the-cite-element.html { 1508 | return 301 /multipage/text-level-semantics.html; 1509 | } 1510 | location = /multipage/the-code-element.html { 1511 | return 301 /multipage/text-level-semantics.html; 1512 | } 1513 | location = /multipage/the-command-element.html { 1514 | return 301 /multipage/obsolete.html; 1515 | } 1516 | location = /multipage/the-datalist-element.html { 1517 | return 301 /multipage/form-elements.html; 1518 | } 1519 | location = /multipage/the-dd-element.html { 1520 | return 301 /multipage/grouping-content.html; 1521 | } 1522 | location = /multipage/the-dfn-element.html { 1523 | return 301 /multipage/text-level-semantics.html; 1524 | } 1525 | location = /multipage/the-dl-element.html { 1526 | return 301 /multipage/grouping-content.html; 1527 | } 1528 | location = /multipage/the-embed-element.html { 1529 | return 301 /multipage/iframe-embed-object.html; 1530 | } 1531 | location = /multipage/the-end.html { 1532 | return 301 /multipage/parsing.html; 1533 | } 1534 | location = /multipage/the-footer-element.html { 1535 | return 301 /multipage/sections.html; 1536 | } 1537 | location = /multipage/the-form-element.html { 1538 | return 301 /multipage/forms.html; 1539 | } 1540 | location = /multipage/the-h1-h2-h3-h4-h5-and-h6-elements.html { 1541 | return 301 /multipage/sections.html; 1542 | } 1543 | location = /multipage/the-head-element.html { 1544 | return 301 /multipage/semantics.html; 1545 | } 1546 | location = /multipage/the-header-element.html { 1547 | return 301 /multipage/sections.html; 1548 | } 1549 | location = /multipage/the-hr-element.html { 1550 | return 301 /multipage/grouping-content.html; 1551 | } 1552 | location = /multipage/the-html-element.html { 1553 | return 301 /multipage/semantics.html; 1554 | } 1555 | location = /multipage/the-i-element.html { 1556 | return 301 /multipage/text-level-semantics.html; 1557 | } 1558 | location = /multipage/the-iframe-element.html { 1559 | return 301 /multipage/iframe-embed-object.html; 1560 | } 1561 | location = /multipage/the-img-element.html { 1562 | return 301 /multipage/embedded-content.html; 1563 | } 1564 | location = /multipage/the-input-element.html { 1565 | return 301 /multipage/input.html; 1566 | } 1567 | location = /multipage/the-kbd-element.html { 1568 | return 301 /multipage/text-level-semantics.html; 1569 | } 1570 | location = /multipage/the-label-element.html { 1571 | return 301 /multipage/forms.html; 1572 | } 1573 | location = /multipage/the-link-element.html { 1574 | return 301 /multipage/semantics.html; 1575 | } 1576 | location = /multipage/the-map-element.html { 1577 | return 301 /multipage/image-maps.html; 1578 | } 1579 | location = /multipage/the-mark-element.html { 1580 | return 301 /multipage/text-level-semantics.html; 1581 | } 1582 | location = /multipage/the-li-element.html { 1583 | return 301 /multipage/grouping-content.html; 1584 | } 1585 | location = /multipage/the-menu-element.html { 1586 | return 301 /multipage/grouping-content.html; 1587 | } 1588 | location = /multipage/the-meta-element.html { 1589 | return 301 /multipage/semantics.html; 1590 | } 1591 | location = /multipage/the-meter-element.html { 1592 | return 301 /multipage/form-elements.html; 1593 | } 1594 | location = /multipage/the-nav-element.html { 1595 | return 301 /multipage/sections.html; 1596 | } 1597 | location = /multipage/the-object-element.html { 1598 | return 301 /multipage/iframe-embed-object.html; 1599 | } 1600 | location = /multipage/the-optgroup-element.html { 1601 | return 301 /multipage/form-elements.html; 1602 | } 1603 | location = /multipage/the-option-element.html { 1604 | return 301 /multipage/form-elements.html; 1605 | } 1606 | location = /multipage/the-p-element.html { 1607 | return 301 /multipage/grouping-content.html; 1608 | } 1609 | location = /multipage/the-progress-element.html { 1610 | return 301 /multipage/form-elements.html; 1611 | } 1612 | location = /multipage/the-root.html { 1613 | return 301 /multipage/semantics.html; 1614 | } 1615 | location = /multipage/the-rt-element.html { 1616 | return 301 /multipage/text-level-semantics.html; 1617 | } 1618 | location = /multipage/the-ruby-element.html { 1619 | return 301 /multipage/text-level-semantics.html; 1620 | } 1621 | location = /multipage/the-samp-element.html { 1622 | return 301 /multipage/text-level-semantics.html; 1623 | } 1624 | location = /multipage/the-pre-element.html { 1625 | return 301 /multipage/grouping-content.html; 1626 | } 1627 | location = /multipage/the-script-element.html { 1628 | return 301 /multipage/scripting.html; 1629 | } 1630 | location = /multipage/the-section-element.html { 1631 | return 301 /multipage/sections.html; 1632 | } 1633 | location = /multipage/the-select-element.html { 1634 | return 301 /multipage/form-elements.html; 1635 | } 1636 | location = /multipage/the-source-element.html { 1637 | return 301 /multipage/embedded-content.html; 1638 | } 1639 | location = /multipage/the-strong-element.html { 1640 | return 301 /multipage/text-level-semantics.html; 1641 | } 1642 | location = /multipage/the-style-element.html { 1643 | return 301 /multipage/semantics.html; 1644 | } 1645 | location = /multipage/the-sub-and-sup-elements.html { 1646 | return 301 /multipage/text-level-semantics.html; 1647 | } 1648 | location = /multipage/the-table-element.html { 1649 | return 301 /multipage/tables.html; 1650 | } 1651 | location = /multipage/the-td-element.html { 1652 | return 301 /multipage/tables.html; 1653 | } 1654 | location = /multipage/the-textarea-element.html { 1655 | return 301 /multipage/form-elements.html; 1656 | } 1657 | location = /multipage/the-tfoot-element.html { 1658 | return 301 /multipage/tables.html; 1659 | } 1660 | location = /multipage/the-th-element.html { 1661 | return 301 /multipage/tables.html; 1662 | } 1663 | location = /multipage/the-time-element.html { 1664 | return 301 /multipage/text-level-semantics.html; 1665 | } 1666 | location = /multipage/the-track-element.html { 1667 | return 301 /multipage/media.html; 1668 | } 1669 | location = /multipage/the-ul-element.html { 1670 | return 301 /multipage/grouping-content.html; 1671 | } 1672 | location = /multipage/the-var-element.html { 1673 | return 301 /multipage/text-level-semantics.html; 1674 | } 1675 | location = /multipage/the-video-element.html { 1676 | return 301 /multipage/media.html; 1677 | } 1678 | location = /multipage/the-wbr-element.html { 1679 | return 301 /multipage/text-level-semantics.html; 1680 | } 1681 | location = /multipage/the-xhtml-syntax.html { 1682 | return 301 /multipage/xhtml.html; 1683 | } 1684 | location = /multipage/time.html { 1685 | return 301 /multipage/text-level-semantics.html; 1686 | } 1687 | location = /multipage/timers.html { 1688 | return 301 /multipage/timers-and-user-prompts.html; 1689 | } 1690 | location = /multipage/title.html { 1691 | return 301 /multipage/semantics.html; 1692 | } 1693 | location = /multipage/tokenization.html { 1694 | return 301 /multipage/parsing.html; 1695 | } 1696 | location = /multipage/tr.html { 1697 | return 301 /multipage/tables.html; 1698 | } 1699 | location = /multipage/track.html { 1700 | return 301 /multipage/media.html; 1701 | } 1702 | location = /multipage/tree-construction.html { 1703 | return 301 /multipage/parsing.html; 1704 | } 1705 | location = /multipage/u.html { 1706 | return 301 /multipage/text-level-semantics.html; 1707 | } 1708 | location = /multipage/ul.html { 1709 | return 301 /multipage/grouping-content.html; 1710 | } 1711 | location = /multipage/urls.html { 1712 | return 301 /multipage/urls-and-fetching.html; 1713 | } 1714 | location = /multipage/user-prompts.html { 1715 | return 301 /multipage/user-prompts.html; 1716 | } 1717 | location = /multipage/var.html { 1718 | return 301 /multipage/text-level-semantics.html; 1719 | } 1720 | location = /multipage/video.html { 1721 | return 301 /multipage/media.html; 1722 | } 1723 | location = /multipage/video-conferencing-and-peer-to-peer-communication.html { 1724 | return 301 https://w3c.github.io/webrtc-pc/; 1725 | } 1726 | location = /multipage/wai-aria.html { 1727 | return 301 /multipage/dom.html; 1728 | } 1729 | location = /multipage/wbr.html { 1730 | return 301 /multipage/text-level-semantics.html; 1731 | } 1732 | 1733 | # For redirects from http://www.w3.org/html/wg/drafts/html/CR/ 1734 | location = /html/CR/browsers.html { 1735 | return 301 /multipage/browsers.html; 1736 | } 1737 | location = /html/CR/common-idioms.html { 1738 | return 301 /multipage/semantics-other.html; 1739 | } 1740 | location = /html/CR/document-metadata.html { 1741 | return 301 /multipage/semantics.html; 1742 | } 1743 | location = /html/CR/dom.html { 1744 | return 301 /multipage/dom.html; 1745 | } 1746 | location = /html/CR/embedded-content-0.html { 1747 | return 301 /multipage/embedded-content.html; 1748 | } 1749 | location = /html/CR/forms.html { 1750 | return 301 /multipage/forms.html; 1751 | } 1752 | location = /html/CR/grouping-content.html { 1753 | return 301 /multipage/grouping-content.html; 1754 | } 1755 | location = /html/CR/index.html { 1756 | return 301 /multipage/; 1757 | } 1758 | location = /html/CR/introduction.html { 1759 | return 301 /multipage/introduction.html; 1760 | } 1761 | location = /html/CR/links.html { 1762 | return 301 /multipage/links.html; 1763 | } 1764 | location = /html/CR/obsolete.html { 1765 | return 301 /multipage/obsolete.html; 1766 | } 1767 | location = /html/CR/Overview.html { 1768 | return 301 /multipage/; 1769 | } 1770 | location = /html/cr/overview.html { 1771 | return 301 /multipage/; 1772 | } 1773 | location = /html/CR/references.html { 1774 | return 301 /multipage/references.html; 1775 | } 1776 | location = /html/CR/scripting-1.html { 1777 | return 301 /multipage/scripting.html; 1778 | } 1779 | location = /html/CR/sections.html { 1780 | return 301 /multipage/sections.html; 1781 | } 1782 | location = /html/CR/single-page.html { 1783 | return 301 /; 1784 | } 1785 | location = /html/CR/syntax.html { 1786 | return 301 /multipage/syntax.html; 1787 | } 1788 | location = /html/CR/tabular-data.html { 1789 | return 301 /multipage/tables.html; 1790 | } 1791 | location = /html/CR/text-level-semantics.html { 1792 | return 301 /multipage/text-level-semantics.html; 1793 | } 1794 | location = /html/CR/textlevel-semantics.html { 1795 | return 301 /multipage/text-level-semantics.html; 1796 | } 1797 | location = /html/CR/webappapis.html { 1798 | return 301 /multipage/webappapis.html; 1799 | } 1800 | 1801 | # Developer edition 1802 | location = /dev/acknowledgments.html { 1803 | return 301 /dev/acknowledgements.html; 1804 | } 1805 | location = /dev/apis-in-html-documents.html { 1806 | return 301 /dev/dynamic-markup-insertion.html; 1807 | } 1808 | location = /dev/association-of-controls-and-forms.html { 1809 | return 301 /dev/form-control-infrastructure.html; 1810 | } 1811 | location = /dev/commands.html { 1812 | return 301 /dev/form-control-infrastructure.html; 1813 | } 1814 | location = /dev/common-input-element-attributes.html { 1815 | return 301 /dev/input.html; 1816 | } 1817 | location = /dev/content-models.html { 1818 | return 301 /dev/dom.html; 1819 | } 1820 | location = /dev/editing.html { 1821 | return 301 /dev/interaction.html; 1822 | } 1823 | location = /dev/elements.html { 1824 | return 301 /dev/dom.html; 1825 | } 1826 | location = /dev/embedded-content-1.html { 1827 | return 301 /multipage/embedded-content.html; 1828 | } 1829 | location = /dev/iana.html { 1830 | return 301 /multipage/iana.html; 1831 | } 1832 | location = /dev/named-character-references.html { 1833 | return 301 /dev/named-characters.html; 1834 | } 1835 | location = /dev/number-state.html { 1836 | return 301 /dev/number-state.html; 1837 | } 1838 | location = /dev/origin-0.html { 1839 | return 301 /dev/browsers.html; 1840 | } 1841 | location = /dev/parsing.html { 1842 | return 301 /multipage/parsing.html; 1843 | } 1844 | location = /dev/scripting-1.html { 1845 | return 301 /dev/scripting.html; 1846 | } 1847 | location = /dev/section-index.html { 1848 | return 301 /dev/indices.html; 1849 | } 1850 | location = /dev/states-of-the-type-attribute.html { 1851 | return 301 /dev/input.html; 1852 | } 1853 | location = /dev/tabular-data.html { 1854 | return 301 /dev/tables.html; 1855 | } 1856 | location = /dev/the-button-element.html { 1857 | return 301 /dev/form-elements.html; 1858 | } 1859 | location = /dev/the-canvas-element.html { 1860 | return 301 /dev/canvas.html; 1861 | } 1862 | location = /dev/the-iframe-element.html { 1863 | return 301 /dev/iframe-embed-object.html; 1864 | } 1865 | location = /dev/the-input-element.html { 1866 | return 301 /dev/input.html; 1867 | } 1868 | location = /dev/the-map-element.html { 1869 | return 301 /dev/image-maps.html; 1870 | } 1871 | location = /dev/the-video-element.html { 1872 | return 301 /dev/media.html; 1873 | } 1874 | location = /dev/the-xhtml-syntax.html { 1875 | return 301 /dev/xhtml.html; 1876 | } 1877 | location = /dev/timers.html { 1878 | return 301 /dev/timers-and-user-prompts.html; 1879 | } 1880 | location = /dev/urls.html { 1881 | return 301 /dev/urls-and-fetching.html; 1882 | } 1883 | location = /dev/video.html { 1884 | return 301 /dev/media.html; 1885 | } 1886 | location = /dev/video-conferencing-and-peer-to-peer-communication.html { 1887 | return 301 https://w3c.github.io/webrtc-pc/; 1888 | } 1889 | location = /dev/web-sockets.html { 1890 | return 301 https://websockets.spec.whatwg.org/; 1891 | } 1892 | location = /dev/window-object.html { 1893 | return 301 /dev/nav-history-apis.html; 1894 | } 1895 | location = /dev/origin.html { 1896 | return 301 /dev/browsers.html; 1897 | } 1898 | location = /dev/history.html { 1899 | return 301 /dev/browsing-the-web.html; 1900 | } 1901 | } 1902 | --------------------------------------------------------------------------------