| 'use strict'; |
| |
| //Const |
| var VALID_DOCTYPE_NAME = 'html', |
| QUIRKS_MODE_SYSTEM_ID = 'http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd', |
| 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" |
| ], |
| QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES = [ |
| '-//w3c//dtd html 4.01 frameset//', |
| '-//w3c//dtd html 4.01 transitional//' |
| ], |
| QUIRKS_MODE_PUBLIC_IDS = [ |
| '-//w3o//dtd w3 html strict 3.0//en//', |
| '-/w3c/dtd html 4.0 transitional/en', |
| 'html' |
| ]; |
| |
| |
| //Utils |
| function enquoteDoctypeId(id) { |
| var quote = id.indexOf('"') !== -1 ? '\'' : '"'; |
| |
| return quote + id + quote; |
| } |
| |
| |
| //API |
| exports.isQuirks = function (name, publicId, systemId) { |
| if (name !== VALID_DOCTYPE_NAME) |
| return true; |
| |
| if (systemId && systemId.toLowerCase() === QUIRKS_MODE_SYSTEM_ID) |
| return true; |
| |
| if (publicId !== null) { |
| publicId = publicId.toLowerCase(); |
| |
| if (QUIRKS_MODE_PUBLIC_IDS.indexOf(publicId) > -1) |
| return true; |
| |
| var prefixes = QUIRKS_MODE_PUBLIC_ID_PREFIXES; |
| |
| if (systemId === null) |
| prefixes = prefixes.concat(QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES); |
| |
| for (var i = 0; i < prefixes.length; i++) { |
| if (publicId.indexOf(prefixes[i]) === 0) |
| return true; |
| } |
| } |
| |
| return false; |
| }; |
| |
| exports.serializeContent = function (name, publicId, systemId) { |
| var str = '!DOCTYPE ' + name; |
| |
| if (publicId !== null) |
| str += ' PUBLIC ' + enquoteDoctypeId(publicId); |
| |
| else if (systemId !== null) |
| str += ' SYSTEM'; |
| |
| if (systemId !== null) |
| str += ' ' + enquoteDoctypeId(systemId); |
| |
| return str; |
| }; |