2010-12-01 42 views
1

J'ai décidé que je suis tombé amoureux de l'éditeur de Markdown sur Stack Overflow. C'est une fourche de showdown.js de John Fraser. Je veux utiliser cet analyseur sur un de mes projets, mais après avoir analysé la source, j'ai trouvé que c'était un peu brouillon à mon goût.Cela n'arrive pas souvent: pourquoi ce code JavaScript est-il seulement cassé dans Chrome?

Je me suis donc sur la modification du code JavaScript pour répondre à mes besoins, à savoir:

  1. Se débarrasser de toutes les variables globales,
  2. En combinant les déclarations de variables à une seule var par portée,
  3. Modification concaténation à des jointures de tableau,
  4. divers autres réglages visant à rendre la source minifiée plus petite.

J'ai tout fonctionne à merveille, à l'exception d'un petit problème: Le code de saisie semi-automatique dans la fonction command.doList est foutu dans Chrome. J'ai tout testé pour fonctionner correctement dans Internet Explorer, FireFox et Safari. J'ai isolé la question jusqu'aux lignes suivantes:

// Get the item prefix - e.g. " 1. " for a numbered list, " - " for a bulleted 
// list. 
getItemPrefix = function() { 
    var prefix; 
    if (isNumberedList) { 
     // the `s` variable is just a string space. 
     prefix = [s, num, '. '].join(''); 
     num++; 
    } else { 
     prefix = [s, bullet, s].join(''); 
    } 
    return prefix; 
}; 

// Fixes the prefixes of the other list items. 
getPrefixedItem = function (itemText) { 
    // The numbering flag is unset when called by autoindent. 
    if (isNumberedList === undefined) { 
     isNumberedList = /^\s*\d/.test(itemText); 
    } 

    // Renumber/bullet the list element. 
    // THE FOLLOWING LINES COMMENTED OUT TO FIX A BUG. 
    //itemText = itemText.replace(/^[ ]{0,3}([\*\+\-]|\d+[.])\s/gm, 
     // function() { return getItemPrefix(); }); 
    return itemText; 
}; 

Les deux lignes sur commentaires vers la fin arrêtent de se comporter Chrome bancale, mais les listes ne comptait plus incrémentation automatique. Dès que je ne commente pas les lignes, tous les principaux navigateurs commencent à fonctionner normalement, à l'exception de Chrome. (Chrome devient fou et auto-complète la liste avec numérotation supplémentaire et des balles, se produit également lorsque vous essayez d'utiliser une liste non ordonnée.)

Le problème ne peut évidemment pas existe ici sur Stack Overflow, donc j'espère c'est juste un oubli stupide de ma part. (Soit cela ou Stack Overflow a mis à jour et corrigé le bogue.)

+0

Où 'num' est-il stocké? – xj9

+0

@indieinvader Dans la même portée que les deux fonctions. Juste au-dessus, il ya quelque chose comme: 'var getItemPrefix, getPrefixedItem, num = 1;' – Stephen

Répondre

2

Vous pouvez regarder le fix pour une autre fourche WMD (ligne 32).

+0

Eh bien, regardez ça. Et je pensais que c'était juste moi! – Stephen

0

Vous ne devriez pas avoir besoin de backslash le * + - entre crochets, si vous? C'est peut-être ce que Chrome a des problèmes avec.

+0

au moins vous ne le faites pas dans les expressions régulières dans d'autres langues, pas sûr de javascript –

+0

Hmmm. JSLint discutait avec moi à ce sujet, alors je l'ai ajouté. Permettez-moi de tenter le coup sans eux. – Stephen

+0

le "-" pourrait causer un problème au milieu mais pas à la fin. –