Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 | 37x 14x 14x 14x 14x 20x 421x 421x 201x 421x 421x 103x 318x 421x 330x 330x 330x 330x 311x 311x 308x 3x 311x 308x 3x 311x 311x 311x 311x 330x 14x 14x 14x 14x 799x 1368x 358x 1109x 1368x 94x 14x 382x 799x 20x 21x 18x 20x 37x | const {
NODE_DOCUMENT,
NODE_DOCTYPE,
NODE_TAG,
NODE_TEXT,
NODE_COMMENT,
NODE_SCRIPT,
NODE_STYLE
} = require('hyntax-yx/lib/constants/ast-nodes')
function serializeDoctypeNode (node) {
let attributes = serializeDoctypeAttributes(node.content.attributes)
Eif (attributes !== '') {
attributes = ` ${ attributes }`
}
return `<!doctype${ attributes }>`
}
function serializeCommentNode (node) {
return `<!--${ node.content.value.content }-->`
}
function serializeTagNode (nodeName, attributes, serializedChildren, selfClosing, node) {
let serializedAttributes = serializeTagAttributes(attributes, node)
if (serializedAttributes !== '') {
serializedAttributes = ` ${ serializedAttributes }`
}
selfClosing = (selfClosing === false ? false : node.content.selfClosing);
if (selfClosing) {
return `<${ nodeName }${ serializedAttributes }/>`
}
return (
`<${ nodeName }${ serializedAttributes }>` +
serializedChildren +
`</${ nodeName }>`
)
}
function serializeTagAttributes (attributes = []) {
// if (node.content.openEnd.content.replace(/\s/g, '').match('/if')) {
// }
return attributes.map((item) => {
let serialized = ''
Eif (item.key !== undefined) {
serialized += item.key.content
}
if (item.value !== undefined) {
// 处理属性中的引号
let quota = ['"', '"'];
if (item.startWrapper && item.startWrapper.content) {
quota[0] = item.startWrapper.content
} else {
quota[0] = ''
}
if (item.endWrapper && item.endWrapper.content) {
quota[1] = item.endWrapper.content
} else {
quota[1] = ''
}
Iif (item.value.content && item.value.content.match && item.value.content.match(quota)) {
quota = ["'", "'"];
}
Iif (item.value.content && item.value.content.trim && item.value.content.trim()[0] == '=') {
// 处理属性中的if语句{{#if(xx == bb)}}xxx{{/if(xx == bb)}}
quota = ['', '']
// serialized += `=${ item.value.content }`
} else Iif (item.value.content && item.value.content.match && item.value.content.match(/\(/) && item.value.content.match(/\)/) && item.key.content.match(/\{\{/)) {
// 处理属性中的function语句{{ = body_updateState(this,crowd) }}
quota = ['', '']
// serialized += `=${ item.value.content }`
}
serialized += `=${quota[0]}${ item.value.content }${quota[1]}`
}
return serialized
}).join(' ')
}
function serializeDoctypeAttributes (attributes = []) {
return attributes.map((item) => {
let wrapper = ''
Iif (item.startWrapper !== undefined) {
wrapper = item.startWrapper
}
return `${ wrapper }${ item.value.content }${ wrapper }`
}).join(' ')
}
function serializeTextNode (node) {
return node.content.value.content
}
function serializeNode (node, serializedChildren = '') {
if (node.content && node.content.children && node.content.children.length > 0) {
serializedChildren = node.content.children.map(child => {
return serializeNode(child, '');
}).join('');
}
switch (node.nodeType) {
case NODE_DOCUMENT: {
return serializedChildren
}
case NODE_DOCTYPE: {
return serializeDoctypeNode(node)
}
case NODE_TAG: {
return serializeTagNode(
node.content.name,
node.content.attributes,
serializedChildren,
undefined,
node
)
}
case NODE_TEXT: {
return serializeTextNode(node)
}
case NODE_COMMENT: {
return serializeCommentNode(node)
}
case NODE_SCRIPT: {
return serializeTagNode(
'script',
node.content.attributes,
node.content.value ? node.content.value.content : '',
false,
node
)
}
case NODE_STYLE: {
return serializeTagNode(
'style',
node.content.attributes,
node.content.value ? node.content.value.content : '',
false,
node
)
}
default: {
throw new Error(
`generate failed! Unexpected node type for serialization: ${ node.nodeType }`
)
}
}
}
module.exports = serializeNode |