2010-04-15 6 views
1

Je tente d'écrire une commande Ubiquity qui vous permet de remplacer un lien sélectionné ou une URL pointant vers une image avec cette image elle-même. Cependant, la fonction CmdUtils.setSelection() (documentée here) semble ne rien faire si des balises html sont présentes dans la sélection, ce qui rend inutile le remplacement de liens. Lorsque vous sélectionnez du texte brut, il fonctionne exactement comme prévu, en remplaçant le texte par un <img src="text"/>. Y at-il quelque chose qui me manque, ou est-ce que cette fonction ne me permettra tout simplement pas de remplacer le HTML? Si c'est le cas, y a-t-il une fonction ou une méthode qui me permettra de faire cela? Tout autre conseil est le bienvenu!Ubiquity CmdUtils.setSelection ne remplacera pas HTML

CmdUtils.CreateCommand({ 
    name: "fetch-image", 
    author: {name: "Josh Timmer"}, 
    license: "GPL", 
    description: "Replaces links or URLs pointing to images with the image itself", 
    help: "Highlight text or a hyperlink and execute this command", 
    takes: {"image URL": /.*/}, 

    _getImgUrl: function(itemIq) { 
    if (itemIq.html.indexOf("<a ",0) < 0) 
     return itemIq.text; 
    var refPos = itemIq.html.indexOf("href=\"",0); 
    if (refPos < 0) 
     return "Error, no URL found!"; 
    var startPos = itemIq.html.indexOf("\"", refPos); 
    var endPos = itemIq.html.indexOf("\"", startPos + 1); 
    startPos += 1; 
    var url = itemIq.html.substring(startPos, endPos); 
    return url; 
    }, 

    preview: function(pblock, input) { 
    pblock.innerHTML = "Image URL: " + this._getImgUrl(input) + "<br/><br/><img src='" + this._getImgUrl(input) + "'/>"; 
    }, 

    execute: function img_insert(input) { 
    CmdUtils.setSelection("<img src='" + this._getImgUrl(input) + "'/>"); 
    displayMessage("Executed: " + this._getImgUrl(input)); 
    } 
}); 

Répondre

1

Cela devrait fonctionner tant qu'un HTML valide est passé.

CmdUtils.CreateCommand({ 
    name: "fetch image", 
    authors: [{name: "Josh Timmer"}, "satyr"], 
    license: "GPL", 
    description: "Replaces links pointing to images with the image itself.", 
    help: "Highlight text or a hyperlink and execute this command.", 
    preview: function fetch_image_preview(pblock) { 
    pblock.innerHTML = this._images() || this.previewDefault(); 
    }, 
    execute: function fetch_image_execute() { 
    CmdUtils.selection = this._images(); 
    }, 
    _images: function fetch_image_urls(){ 
    var srcs = CmdUtils.getSelectedNodes("a"); 
    if (!srcs.length) srcs = CmdUtils.selection.match(/\bhttps?:\/+\S+/g); 
    return [<img src={s}/>.toXMLString() for each (s in srcs)].join(""); 
    }, 
});