2009-03-22 5 views
6

Para ser claros, me refiero al uso de stackoverflow's forked WMD, no el original version from attacklab.¿Cuántos editores de WMD (versión con SO) en una sola página?

Me gustaría usar la versión bifurcada, sin embargo parece que los años div id que son utilizados por la secuencia de comandos para identificar los elementos de la página a WMDify están codificados en wmd.js:66:

// A collection of the important regions on the page. 
// Cached so we don't have to keep traversing the DOM. 
wmd.PanelCollection = function(){ 
    this.buttonBar = doc.getElementById("wmd-button-bar"); 
    this.preview = doc.getElementById("wmd-preview"); 
    this.output = doc.getElementById("wmd-output"); 
    this.input = doc.getElementById("wmd-input"); 
}; 

Si sólo quería para usar nombres de regiones diferentes estaría bien por mi cuenta, pero quiero usar un número variable de editores WMD en una sola página. Necesitaría una forma de contar cada instancia de WMD sobre las regiones de la página a las que debería afectar, pero no veo ningún 'gancho' para eso.

Lo que no se ve es probablemente un producto de mi casi completa falta de conocimiento js. Lo correcto es ™ es simplemente aprender javascript correctamente, pero estoy en el medio de un proyecto con una fecha límite. Realmente me gustaría usar esta versión de WMD, pero necesito algunas pistas sobre cómo modificar el script de WMD, o simplemente un ejemplo de cómo llamarlo de tal manera que pueda especificar qué identificaciones de div usar.

Pistas apreciadas!

+0

alguien me puede ayudar con este http://stackoverflow.com/questions/3616788/wmd-how-to-get-the-generated-markdown-html-code – Moon

Respuesta

7

Tuve problemas similares, así que recompuse las armas de destrucción masiva para poder hacer precisamente eso. my version of wmd

Recientemente, volví a verificar esto. La versión en el código de Google admite múltiples versiones en una página.
google code fork y es lo último que hay.

+0

¡Una excelente obra! – MrFox

+0

¡Gracias! Pero el trabajo realmente duro fue hecho por drobins. –

+0

alguna posibilidad de un enlace de trabajo? – Andy

3

En un "proyecto con una fecha límite", se puede modificar algunas restricciones. En este caso, solo haría varias copias del script del editor de WMD (o lo generaría en el lado del servidor) y reemplazaría los ID por los identificadores necesarios. De esta forma, puede implementar inmediatamente varias WMD en una sola página.

Sólo hay que ser muy clara una cosa: Usted son acumular technical debt ("las eventuales consecuencias de la arquitectura de software y desarrollo de software slapdash precipitada") en su proyecto allí. Usted tendrá tiene que volver a visitar esto para pagar esta deuda o se ahogará en los pagos de intereses al realizar el mantenimiento.

+0

Ah, no lo especifiqué por completo: necesito utilizar * variable * números de editores en cada página según el contenido. Y sí, si la solución rápida es demasiado hackosa, esta vez simplemente renunciaré a usar wmd a favor de otra solución. Hay un límite para hackers permitidos. :) –

+0

para un número variable de wmds _can_ puede bajar el generate-wmd-source-with-servers-side-script. Si lo hace bien, debería ser bastante fácil convertir eso en una solución de fuente única con parámetros JS. –

+0

Intenté esto e incluso con múltiples archivos .js parece que no puedo hacerlo funcionar. Solo cargará los botones en el primer área de texto. Si elimino el primero, los botones cargan bien para el segundo área de texto. Busqué en JS y me aseguré de que todas las referencias estuvieran actualizadas, pero todavía no tuve suerte. –

0

Línea 2339 de wmd.js puede ser un buen punto de partida:

Attacklab.wmd_defaults = {version:1, output:"HTML", lineLength:40, delayLoad:false}; 

Añadir una opción para cada uno Identificación del div necesita cambiar.

Usted anular esta configuración mediante la adición de un bloque de script antes de incluir wmd.js, por ejemplo:

<script type="text/javascript">wmd_options = {"output": "Markdown"};</script> 

a continuación, cambiar la función a wmd.PanelCollection ..

wmd.PanelCollection = function(){ 
     this.buttonBar = doc.getElementById(wmd.wmd_env["wmd-button-bar"]); 
     this.preview = doc.getElementById(wmd.wmd_env["wmd-preview"]); 
     this.output = doc.getElementById(wmd.wmd_env["wmd-output"]); 
     this.input = doc.getElementById(wmd.wmd_env["wmd-input"]); 
}; 

Nota esto es totalmente no probado, y puede no funcionar, pero en comparación con la autogeneración del editor de WMD o la realización de copias múltiples, es ligeramente más elegante ..

Editar: Traté de hacer los cambios, pero no es tan simple como añadir a wmd_defaults - varios elementos (principalmente el botón-bar) utilizar un ID en lugar de una clase, pero, está cerca ..

Editar 2: Después de mucho alboroto, yo diría que la respuesta es básicamente "no".

Una mejor respuesta es no, no sin algunas bastante grandes cambios en armas de destrucción masiva (cambios que están más allá de mi experiencia muy limitada Javascript) ..

traté de mover todos los nombres div no modificables en los ajustes, y ha añadido una configuración "elementNamePrefix" para todos los nombres de clase de botón, en lugar de usar "wmd-spacer1" usó wmd.wmd_env["elementNamePrefix"] + "spacer1" ... pero incluso con esto necesita duplicar elementos en el archivo CSS, y los cambios causaron un comportamiento extraño que no pude solucionar (creo debido a la variable global AttackLab definida en la primera línea? No estoy seguro) ...

Tal vez, como alternativa a tener múltiples controles WMD, podría ¿Tiene un menú desplegable que carga diferentes publicaciones a través de AJAX? Ciertamente sería más fácil que modificar las ADM para permitir instancias múltiples.

Cuestiones relacionadas