meteor - node - simple markdown
Personaliza el comportamiento de{{#markdown}} en Meteor (1)
Amo a Markdown. El concepto es uno de los más elegantes y útiles que he encontrado en mis pocos años como programador. Así que estaba emocionado de ver a Meteor implementar un paquete Showdown y dejarme usarlo con el {{#markdown}}
.
Sin embargo, cuando comencé a usarlo, de repente apareció mi gotcha de descuento menos preferida: Bloques de código mellados.
Escribiendo esto:
<template name="home">
{{#markdown}}
Hello!!! Welcome to *My Site*!!
{{/markdown}}
</template>
Resultados en esto:
My Hello!!! Welcome to *My Site*!!
Formateado como CODE !!!!
Odio los bloques de código sangrados. Se atornillan por completo con los intentos de utilizar realmente Markdown en un entorno de programación. El código está muy sangriento, y por buenas razones. Mantiene las cosas organizadas y hace que el comportamiento sea claro. Entonces el hecho de que las especificaciones de Markdown hayan pasado por alto esto es asombroso para mí. Los bloques de código delimitados de Github son una forma infinitamente más inteligente de hacerlo, ya que no requieren un punteo repetitivo de la pestaña o la tecla de espacio, lo que facilita la edición, y está más claro lo que está sucediendo en el texto.
De todos modos, </rant>
.
Quiero personalizar el markdown utilizado por el meteorito. ¿¿Cómo?? Revisé Atmosphere y busqué el descuento, y no encontré nada aplicable. Además, no estoy seguro de cómo usar una extensión Showdown en el entorno de meteoritos.
Cualquier solución bienvenida !! Todo lo que realmente quiero es una implementación de rebajas que no tenga sangría de bloques de código. Ellos son estúpidos.
¿Por qué no implementar su propio ayudante de markdown
?
// this is based on showdown package in spark branch
Handlebars.registerHelper(''markdown'', function (options) {
return UI.block(function () {
var self = this;
return function () {
var renderer = new marked.Renderer();
var text = UI.toRawText(self.__content, self /* parentComponent */);
return HTML.Raw(marked(trimIndentation(text), { renderer: renderer }));
};
});
});
donde trimIndentation
puede verse más o menos así:
function trimIndentation(text) {
var regexp = null,
result = "";
return text.split(''/n'').map(function (line) {
var match = (regexp || /(/s*)(/s*[^/s]+.*)/).exec(line);
if (match) {
!regexp && (regexp = new RegExp("(//s{" + match[1].length + "})(.*)"));
return match[2];
}
return line;
}).join(''/n'');
}
En el ejemplo anterior, utilicé la sintaxis del nuevo motor de plantillas, así como utilicé la biblioteca marcada en lugar del viejo enfrentamiento (¿o debería decir paginación ?), Pero por supuesto puede hacer lo mismo con una configuración propia. elección.