2009-03-22 7 views
6

Pour être clair, je fais référence à l'utilisation de stackoverflow's forked WMD, pas le original version from attacklab.Plusieurs éditeurs WMD (version fourchue SO) sur une page?

Je voudrais utiliser la version fourchue, mais il semble que l'ID div de qui sont utilisés par le script pour identifier les éléments de la page à WMDify sont codés en dur dans 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 je voulais juste pour utiliser des noms de régions différentes, je serais bien tout seul - mais je veux utiliser un nombre variable d'éditeurs WMD sur une seule page. J'aurais besoin d'un moyen de dire à chaque instance de WMD sur les régions de la page qu'il devrait affecter, mais je ne vois pas de «hooks» pour cela.

Le non-voyant est probablement un produit de mon manque presque complet de connaissance de js. La bonne chose à faire ™ est d'apprendre juste javascript correctement, mais je suis au milieu d'un projet avec une date limite. J'aimerais vraiment utiliser cette version de WMD mais j'ai besoin de quelques indices sur la façon de modifier le script WMD, ou simplement un exemple de comment l'appeler de telle manière que je puisse speficy quel div id utiliser.

Des indices appréciés!

+0

quelqu'un peut-il m'aider avec ceci http://stackoverflow.com/questions/3616788/wmd-how-to-get-the-generated-markdown-html-code – Moon

Répondre

7

J'ai eu des problèmes similaires, j'ai donc ré-factorisé WMD pour être capable de faire exactement cela. my version of wmd

Récemment, j'ai revérifié cela. La version dans le code Google prend en charge plusieurs versions sur une page.
google code fork et est le dernier là-bas.

+0

Un beau travail! – MrFox

+0

Merci! Mais le vrai travail a été fait par drobins. –

+0

une chance d'un lien de travail? – Andy

3

Sur un "projet avec une date limite", il est permis de contourner certaines contraintes. Dans ce cas, je voudrais juste faire plusieurs copies du script de l'éditeur WMD (ou le générer du côté serveur) et remplacer les ID par vos identifiants nécessaires. De cette façon, vous pouvez immédiatement déployer plusieurs WMD sur une seule page.

Il vous suffit d'être vraiment clair sur une chose: Vous sont accumulés technical debt (« les conséquences éventuelles de l'architecture logicielle et bâclés développement de logiciels hâtive ») sur votre projet là-bas. Vous devra revoir cette pour rembourser cette dette ou vous vous noierez dans les paiements d'intérêt lors de l'entretien.

+0

Ah, je n'ai pas précisé complètement: j'ai besoin utiliser des nombres d'éditeurs * variable * sur chaque page en fonction du contenu. Et oui, si la solution rapide est trop hackish je renoncerai simplement wmd cette fois en faveur d'une autre solution. Il y a une limite à autoriser le hackery. :) –

+0

pour un nombre variable de wmds vous pouvez _can_ descendre le script generate-wmd-source-with-servers-side. Si vous faites cela correctement, il devrait être assez facile de le convertir en une solution mono-source paramétrée par JS. –

+0

J'ai essayé ceci et même avec plusieurs fichiers .js je n'arrive pas à le faire fonctionner. Il ne chargera que les boutons de la première zone de texte. Si je supprime le premier, les boutons se chargent correctement pour la deuxième zone de texte. J'ai creusé à travers le JS et je me suis assuré que toutes les références ont été mises à jour mais toujours pas de chance. –

0

Ligne 2339 de wmd.js peut être un bon endroit pour commencer:

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

Ajouter une option pour chaque div id vous devez changer.

Vous remplacez ces paramètres en ajoutant un bloc de script avant d'inclure wmd.js, par exemple:

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

changer ensuite la fonction 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"]); 
}; 

Notez ce qui est totalement non testé, et peut ne pas fonctionner, mais par rapport à l'auto-génération de l'éditeur WMD ou de faire plusieurs copies, il est légèrement plus élégant ..

Modifier: J'ai essayé de faire les modifications, mais il est pas tout à fait aussi simple que l'ajout de wmd_defaults - divers articles (principalement sur le bouton-bar), utilisez une carte d'identité plutôt que d'une classe, mais il est proche ..

Edit 2: Après beaucoup de tripoter, je dirais que la réponse est fondamentalement "non".

Une meilleure réponse est non, non sans quelques changements assez importants aux armes de destruction massive (changements qui sont au-delà de mon javascript expérience très limitée) ..

J'essayé de déplacer tous les noms de div codés en dur aux paramètres, et ajouté un "elementNamePrefix" paramètre pour tous les noms de classe de bouton, plutôt que d'utiliser "wmd-spacer1" il a utilisé wmd.wmd_env["elementNamePrefix"] + "spacer1" ... mais même avec cela, vous devez dupliquer des éléments dans le fichier CSS, et les changements ont causé un comportement étrange que je ne pouvais pas réparer (je pense à cause de la variable AttackLab globale définie sur la première ligne?)

Peut-être, comme alternative à avoir plusieurs contrôles WMD, vous pourriez avoir une liste déroulante qui charge différents messages via AJAX? Il serait certainement plus facile que de modifier WMD pour autoriser plusieurs instances.

Questions connexes