Son CV dans un terminal web en Javascript!
https://terminal-cv.gregandev.fr
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
174 lines
5.6 KiB
174 lines
5.6 KiB
1 year ago
|
'use strict';
|
||
|
|
||
|
const { DOCUMENT_MODE } = require('./html');
|
||
|
|
||
|
//Const
|
||
|
const VALID_DOCTYPE_NAME = 'html';
|
||
|
const VALID_SYSTEM_ID = 'about:legacy-compat';
|
||
|
const QUIRKS_MODE_SYSTEM_ID = 'http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd';
|
||
|
|
||
|
const QUIRKS_MODE_PUBLIC_ID_PREFIXES = [
|
||
|
'+//silmaril//dtd html pro v0r11 19970101//en',
|
||
|
'-//advasoft ltd//dtd html 3.0 aswedit + extensions//en',
|
||
|
'-//as//dtd html 3.0 aswedit + extensions//en',
|
||
|
'-//ietf//dtd html 2.0 level 1//en',
|
||
|
'-//ietf//dtd html 2.0 level 2//en',
|
||
|
'-//ietf//dtd html 2.0 strict level 1//en',
|
||
|
'-//ietf//dtd html 2.0 strict level 2//en',
|
||
|
'-//ietf//dtd html 2.0 strict//en',
|
||
|
'-//ietf//dtd html 2.0//en',
|
||
|
'-//ietf//dtd html 2.1e//en',
|
||
|
'-//ietf//dtd html 3.0//en',
|
||
|
'-//ietf//dtd html 3.0//en//',
|
||
|
'-//ietf//dtd html 3.2 final//en',
|
||
|
'-//ietf//dtd html 3.2//en',
|
||
|
'-//ietf//dtd html 3//en',
|
||
|
'-//ietf//dtd html level 0//en',
|
||
|
'-//ietf//dtd html level 0//en//2.0',
|
||
|
'-//ietf//dtd html level 1//en',
|
||
|
'-//ietf//dtd html level 1//en//2.0',
|
||
|
'-//ietf//dtd html level 2//en',
|
||
|
'-//ietf//dtd html level 2//en//2.0',
|
||
|
'-//ietf//dtd html level 3//en',
|
||
|
'-//ietf//dtd html level 3//en//3.0',
|
||
|
'-//ietf//dtd html strict level 0//en',
|
||
|
'-//ietf//dtd html strict level 0//en//2.0',
|
||
|
'-//ietf//dtd html strict level 1//en',
|
||
|
'-//ietf//dtd html strict level 1//en//2.0',
|
||
|
'-//ietf//dtd html strict level 2//en',
|
||
|
'-//ietf//dtd html strict level 2//en//2.0',
|
||
|
'-//ietf//dtd html strict level 3//en',
|
||
|
'-//ietf//dtd html strict level 3//en//3.0',
|
||
|
'-//ietf//dtd html strict//en',
|
||
|
'-//ietf//dtd html strict//en//2.0',
|
||
|
'-//ietf//dtd html strict//en//3.0',
|
||
|
'-//ietf//dtd html//en',
|
||
|
'-//ietf//dtd html//en//2.0',
|
||
|
'-//ietf//dtd html//en//3.0',
|
||
|
'-//metrius//dtd metrius presentational//en',
|
||
|
'-//microsoft//dtd internet explorer 2.0 html strict//en',
|
||
|
'-//microsoft//dtd internet explorer 2.0 html//en',
|
||
|
'-//microsoft//dtd internet explorer 2.0 tables//en',
|
||
|
'-//microsoft//dtd internet explorer 3.0 html strict//en',
|
||
|
'-//microsoft//dtd internet explorer 3.0 html//en',
|
||
|
'-//microsoft//dtd internet explorer 3.0 tables//en',
|
||
|
'-//netscape comm. corp.//dtd html//en',
|
||
|
'-//netscape comm. corp.//dtd strict html//en',
|
||
|
"-//o'reilly and associates//dtd html 2.0//en",
|
||
|
"-//o'reilly and associates//dtd html extended 1.0//en",
|
||
|
'-//spyglass//dtd html 2.0 extended//en',
|
||
|
'-//sq//dtd html 2.0 hotmetal + extensions//en',
|
||
|
'-//sun microsystems corp.//dtd hotjava html//en',
|
||
|
'-//sun microsystems corp.//dtd hotjava strict html//en',
|
||
|
'-//w3c//dtd html 3 1995-03-24//en',
|
||
|
'-//w3c//dtd html 3.2 draft//en',
|
||
|
'-//w3c//dtd html 3.2 final//en',
|
||
|
'-//w3c//dtd html 3.2//en',
|
||
|
'-//w3c//dtd html 3.2s draft//en',
|
||
|
'-//w3c//dtd html 4.0 frameset//en',
|
||
|
'-//w3c//dtd html 4.0 transitional//en',
|
||
|
'-//w3c//dtd html experimental 19960712//en',
|
||
|
'-//w3c//dtd html experimental 970421//en',
|
||
|
'-//w3c//dtd w3 html//en',
|
||
|
'-//w3o//dtd w3 html 3.0//en',
|
||
|
'-//w3o//dtd w3 html 3.0//en//',
|
||
|
'-//webtechs//dtd mozilla html 2.0//en',
|
||
|
'-//webtechs//dtd mozilla html//en'
|
||
|
];
|
||
|
|
||
|
const QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES = QUIRKS_MODE_PUBLIC_ID_PREFIXES.concat([
|
||
|
'-//w3c//dtd html 4.01 frameset//',
|
||
|
'-//w3c//dtd html 4.01 transitional//'
|
||
|
]);
|
||
|
|
||
|
const QUIRKS_MODE_PUBLIC_IDS = ['-//w3o//dtd w3 html strict 3.0//en//', '-/w3c/dtd html 4.0 transitional/en', 'html'];
|
||
|
const LIMITED_QUIRKS_PUBLIC_ID_PREFIXES = ['-//W3C//DTD XHTML 1.0 Frameset//', '-//W3C//DTD XHTML 1.0 Transitional//'];
|
||
|
|
||
|
const LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES = LIMITED_QUIRKS_PUBLIC_ID_PREFIXES.concat([
|
||
|
'-//W3C//DTD HTML 4.01 Frameset//',
|
||
|
'-//W3C//DTD HTML 4.01 Transitional//'
|
||
|
]);
|
||
|
|
||
|
//Utils
|
||
|
function enquoteDoctypeId(id) {
|
||
|
const quote = id.indexOf('"') !== -1 ? "'" : '"';
|
||
|
|
||
|
return quote + id + quote;
|
||
|
}
|
||
|
|
||
|
function hasPrefix(publicId, prefixes) {
|
||
|
for (let i = 0; i < prefixes.length; i++) {
|
||
|
if (publicId.indexOf(prefixes[i]) === 0) {
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
//API
|
||
|
exports.isConforming = function(token) {
|
||
|
return (
|
||
|
token.name === VALID_DOCTYPE_NAME &&
|
||
|
token.publicId === null &&
|
||
|
(token.systemId === null || token.systemId === VALID_SYSTEM_ID)
|
||
|
);
|
||
|
};
|
||
|
|
||
|
exports.getDocumentMode = function(token) {
|
||
|
if (token.name !== VALID_DOCTYPE_NAME) {
|
||
|
return DOCUMENT_MODE.QUIRKS;
|
||
|
}
|
||
|
|
||
|
const systemId = token.systemId;
|
||
|
|
||
|
if (systemId && systemId.toLowerCase() === QUIRKS_MODE_SYSTEM_ID) {
|
||
|
return DOCUMENT_MODE.QUIRKS;
|
||
|
}
|
||
|
|
||
|
let publicId = token.publicId;
|
||
|
|
||
|
if (publicId !== null) {
|
||
|
publicId = publicId.toLowerCase();
|
||
|
|
||
|
if (QUIRKS_MODE_PUBLIC_IDS.indexOf(publicId) > -1) {
|
||
|
return DOCUMENT_MODE.QUIRKS;
|
||
|
}
|
||
|
|
||
|
let prefixes = systemId === null ? QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES : QUIRKS_MODE_PUBLIC_ID_PREFIXES;
|
||
|
|
||
|
if (hasPrefix(publicId, prefixes)) {
|
||
|
return DOCUMENT_MODE.QUIRKS;
|
||
|
}
|
||
|
|
||
|
prefixes =
|
||
|
systemId === null ? LIMITED_QUIRKS_PUBLIC_ID_PREFIXES : LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES;
|
||
|
|
||
|
if (hasPrefix(publicId, prefixes)) {
|
||
|
return DOCUMENT_MODE.LIMITED_QUIRKS;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return DOCUMENT_MODE.NO_QUIRKS;
|
||
|
};
|
||
|
|
||
|
exports.serializeContent = function(name, publicId, systemId) {
|
||
|
let str = '!DOCTYPE ';
|
||
|
|
||
|
if (name) {
|
||
|
str += name;
|
||
|
}
|
||
|
|
||
|
if (publicId) {
|
||
|
str += ' PUBLIC ' + enquoteDoctypeId(publicId);
|
||
|
} else if (systemId) {
|
||
|
str += ' SYSTEM';
|
||
|
}
|
||
|
|
||
|
if (systemId !== null) {
|
||
|
str += ' ' + enquoteDoctypeId(systemId);
|
||
|
}
|
||
|
|
||
|
return str;
|
||
|
};
|