Commit be8a4aca authored by Dmitry's avatar Dmitry

Исправлена проблема с регистром тегов при сериализации

parent 56fb7860
...@@ -244,8 +244,8 @@ exports.env = exports.jsdom.env = function () { ...@@ -244,8 +244,8 @@ exports.env = exports.jsdom.env = function () {
return req; return req;
}; };
exports.serializeDocument = function (doc) { exports.serializeDocument = function (doc, lowerCaseTagNames) {
return domToHtml([doc]); return domToHtml([doc], lowerCaseTagNames);
}; };
function processHTML(config) { function processHTML(config) {
......
...@@ -3,6 +3,10 @@ ...@@ -3,6 +3,10 @@
const idlUtils = require("../living/generated/utils"); const idlUtils = require("../living/generated/utils");
class DocumentAdapter { class DocumentAdapter {
constructor(lowerCaseTagNames){
this.lowerCaseTagNames = lowerCaseTagNames;
}
getFirstChild (node) { getFirstChild (node) {
return node.childNodes[0]; return node.childNodes[0];
} }
...@@ -28,7 +32,7 @@ class DocumentAdapter { ...@@ -28,7 +32,7 @@ class DocumentAdapter {
// Node data // Node data
getTagName (element) { getTagName (element) {
return element.tagName.toLowerCase(); return this.lowerCaseTagNames?element.tagName.toLowerCase():element.tagName;
} }
getNamespaceURI (element) { getNamespaceURI (element) {
......
"use strict"; "use strict";
const parse5 = require("parse5"); const parse5 = require("parse5");
const documentAdapter = require("./documentAdapter"); const DocumentAdapter = require("./documentAdapter");
const NODE_TYPE = require("../living/node-type"); const NODE_TYPE = require("../living/node-type");
const idlUtils = require("../living/generated/utils"); const idlUtils = require("../living/generated/utils");
const serializer = new parse5.TreeSerializer(documentAdapter);
exports.domToHtml = function (iterable) { exports.domToHtml = function (iterable, lowerCaseTagNames) {
// Если явно не указано, то true
if(typeof lowerCaseTagNames === 'undefined') {
lowerCaseTagNames = true;
}
var documentAdapter = new DocumentAdapter(lowerCaseTagNames);
var serializer = new parse5.TreeSerializer(documentAdapter);
let ret = ""; let ret = "";
for (const node of iterable) { for (const node of iterable) {
if (node.nodeType === NODE_TYPE.DOCUMENT_NODE) { if (node.nodeType === NODE_TYPE.DOCUMENT_NODE) {
...@@ -16,4 +21,4 @@ exports.domToHtml = function (iterable) { ...@@ -16,4 +21,4 @@ exports.domToHtml = function (iterable) {
} }
} }
return ret; return ret;
}; };
\ No newline at end of file
...@@ -16,8 +16,16 @@ function loadCompleteCallback(err, window){ ...@@ -16,8 +16,16 @@ function loadCompleteCallback(err, window){
if(err){ if(err){
console.error("Произошла ошибка при загрузке DOM: "+err.toString()); console.error("Произошла ошибка при загрузке DOM: "+err.toString());
} else { } else {
// Сериализируем DOM в строку /* Сериализируем DOM в строку.
var serializedSvg = jsdom.serializeDocument(window.document); * Опытным путем было выяснено, что регистр "портится" при сериализации.
* В код jsdom внесены изменения: теперь serializeDocument принимает
* необязательный аргумент, отвечающий за перевод имен тегов в нижний
* регистр. Если он не указан или же его значение равно true, то
* serializeDocument ведет себя так же, как и ранее. Если этот параметр
* равен false, то имена тегов не переводятся в нижний регистр.
* В данном случае требуется не переводить имена тегов в нижний регистр,
* поэтому передаем false вторым аргументом. */
var serializedSvg = jsdom.serializeDocument(window.document, false);
try { try {
fs.writeFileSync(OUTPUT_FILE, serializedSvg); fs.writeFileSync(OUTPUT_FILE, serializedSvg);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment