javascript - support - Cadenas de línea múltiple que no rompen la sangría
template string javascript html (2)
Esta característica se implementa definiendo una función personalizada y luego usándola como una etiqueta ( dontIndent
arriba). El golpe del código proviene de la esencia de Zenparsing :
function dedent(callSite, ...args) {
function format(str) {
let size = -1;
return str.replace(//n(/s+)/g, (m, m1) => {
if (size < 0)
size = m1.replace(//t/g, " ").length;
return "/n" + m1.slice(Math.min(m1.length, size));
});
}
if (typeof callSite === "string")
return format(callSite);
if (typeof callSite === "function")
return (...args) => format(callSite(...args));
let output = callSite
.slice(0, args.length + 1)
.map((text, i) => (i === 0 ? "" : args[i - 1]) + text)
.join("");
return format(output);
}
Lo he probado con éxito en Firefox Nightly:
De acuerdo con este debate , es posible en ECMAScript 6 definir cadenas de líneas múltiples sin tener que colocar líneas posteriores de la cadena al principio de la línea.
La publicación de Allen Wirfs-Brock contiene un ejemplo de código:
var a = dontIndent
`This is a template string.
Even though each line is indented to keep the
code neat and tidy, the white space used to indent
is not in the resulting string`;
¿Alguien podría explicar cómo se puede lograr esto? ¿Cómo definir este elemento dontIndent
para eliminar los espacios en blanco utilizados para la sangría?
Respuesta de 2016 : el paquete dedent-js se encargará de esto. Tenga en cuenta que el paquete ''dedent-js'' realmente funciona con pestañas y espacios, ''dedent'' falla en las pestañas:
var dedent = require(''dedent-js'');
var text = dedent(`
<div>
<span>OK</span>
<div>
<div></div>
</div>
</div>
`);
Va a quitar el espacio en blanco anterior en cada línea y el retorno del carro principal. También tiene más usuarios, un rastreador de problemas, y se actualiza más fácilmente que el copiado desde .