2017-09-23 1 views
0

J'essaie de forcer l'ajout d'un attribut à des liens spécifiques lorsque j'utilise le plugin PasteFromWord pour CKEditor.CKEditor - PasteFromWord ajout d'une classe aux attributs

Je regarde la section suivante de default.js dans le dossier pastefromword/filter mais rien ne semble faire de différence dans le code collé.

a: function(a) { 
    a = a.attributes; 
    a.href && a.href.match(/^file:\/\/\/[\S]+#/i) && (a.href = a.href.replace(/^file:\/\/\/[^#]+/i, "")) 
} 

J'ai essayé a.setAttribute ('classe', 'MyClass'), a.class = 'maclasse' mais rien est ajouté.

Je voudrais vérifier si le a.href contient le mot 'javascript' et ajouter l'attribut de classe si c'est le cas.

Est-ce que je cherche même au bon endroit?

Merci.

+0

Quelle version de CKEditor utilisez-vous? – Atzmon

+0

@Atzmon - en utilisant CKEditor 4 - thx – RobertyBob

Répondre

0

Cette solution (ou piratage) s'applique à CKEditor 4.5.7, vous devrez donc peut-être ajuster pour s'adapter à votre version spécifique.

Tout d'abord, vous avez raison sur l'emplacement pour vérifier la href et ajoutez votre classe, vous pouvez donc ce code ou quelque chose de similaire:

a: function(a) { 
    a = a.attributes; 
    if (attrs.href && attrs.href.indexOf('javascript') != -1) { 
     attrs.class = 'myclass'; 
    } 

Ensuite, trouver ce code plus bas dans le très longue fonction getRules (Il peut sembler un peu différent selon votre version):

'class': function (value, element) { 
    if (element.classWhiteList && element.classWhiteList.indexOf(' ' + value + ' ') != -1) { 
     return value; 
    } 
    return false; 
}, 

Vous devez maintenant remplacer le filtre de classe. Le moyen le plus hack est d'ajouter votre ligne de nom de classe, codé en dur, comme celui-ci:

'class': function (value, element) { 
    if ((value == 'myclass') || (element.classWhiteList && element.classWhiteList.indexOf(' ' + value + ' ') != -1)) { 
     return value; 
    } 
    return false; 
}, 

Maintenant, vous aurez myclass ajouté à vos liens empâtées, si elles contiennent la chaîne « javascript ».

+0

Thx Atzmon - va vérifier cela le matin et vous faire savoir – RobertyBob

+0

J'ai essayé cela aujourd'hui et ne semble pas ajouter quelque chose - j'ai changé 'attrs' à 'un' pour se conformer à la précédente line et après vérification, j'ai aussi modifié la partie getRules pour se conformer à la fonction 'getRules: function (a, c) {' plutôt que (value.élément) mais toujours pas bon. Je ne peux pas maintenant être sûr que le plugin est même utilisé parce que même des ajouts ou des alertes simples ne se déclenchent pas. Je vais essayer à nouveau tmrw. – RobertyBob

+0

Si vous n'êtes pas sûr que le plugin est activé, ajoutez une commande 'debugger;' avant ou après 'a = a.attributes; ', effacez le cache de votre navigateur et lancez les outils de développement (F12 dans Chrome). Ensuite, collez du contenu à partir de Word avec un lien hypertexte et vérifiez si l'exécution s'arrête à la commande du débogueur. – Atzmon