Hello hello j'ai l'impression de me compliquer la vie vous me direz d: ... J'ai un formulaire pour tinyMCE me permettant d'insérer une image jusque là aucun problème mon code JS pour créer l'image si desous.
Mon formulaire ressemble à

image.html = function(){
        var html = '';
        var style = '';
        // Attribut src="" alt="" et class=""
        if(form.src) html += ' src="'+form.src+'"';
        if(form.alt) html += ' alt="'+form.alt+'"';
        if(form.class) html += ' class="'+form.class+'"';
        // Dimenssions css
        if(form.width) style += 'width:'+form.width+form.unitW+';';
        if(form.height) style += 'height:'+form.height+form.unitH+';';
        // Alignement css
        if(form.align == 'left' || form.align == 'right') style += 'float:'+form.align+';';
        if(form.align == 'center') style += 'display:block;margin-left:auto;margin-right:auto;';
        // Attribut style="" et css suplémentaires
        if(style || form.style) html += ' style="'+style+form.style+'"';
        return '<img'+html+'>';
    }

Dans le sens inverse ça se complique ^^

image.setFromHtml = function(html){
        form = {};
        var elem = angular.element(html);// Sous AngularJS
        if(elem.attr('src')) form.src = elem.attr('src');
        if(elem.attr('alt')) form.alt = elem.attr('alt');
        if(elem.attr('class')) form.class = elem.attr('class');
        form.style = elem.attr('style');// le style complet
        if(elem.css('width')){
            var fullWidth = elem.css('width');
            var match = fullWidth.match(/(\d*\.?\d*)(.*)/);// je sépare l'unité du nombre
            form.width = parseFloat(match[1], 10) || null;// je valide le nombre
            if(form.width && (match[2] == 'px' || match[2] == 'em' || match[2] == '%')) form.unitW = match[2];// je check l'unité
            else form.unitW = 'px';// Sinon unité par defaut
            form.style = form.style.replace(/(?:width:^;]*;)/, '')// Je retire le width de mon style
        }
        if(elem.css('height')){// identique a width
            var fullHeight = elem.css('height');
            var match = fullHeight.match(/(\d*\.?\d*)(.*)/);
            form.height = parseFloat(match[1], 10) || null;
            if(form.height && (match[2] == 'px' || match[2] == 'em' || match[2] == '%')) form.unitH = match[2];
            else form.unitH = 'px';
            form.style = form.style.replace(/(?:height:^;]*;)/, '');
        }
                // Je check si j'ai placer un des alignements et je les retires du style 
        if(elem.css('display') == 'block' && elem[0].style.marginLeft == 'auto' && elem[0].style.marginRight == 'auto' ){
            form.align = 'center';
            form.style = form.style.replace(/(?:display:^;]*;)/, '').replace(/(?:margin-left:^;]*;)/, '').replace(/(?:margin-right:^;]*;)/, '');
        } else if (elem.css('float') == 'left'){
            form.align = 'left';
            form.style = form.style.replace(/(?:float:^;]*;)/, '');
        } else if (elem.css('float') == 'right'){
            form.align = 'right';
            form.style = form.style.replace(/(?:float:^;]*;)/, '');
        }
    }

J'ai pas trouvé plus simple que de passer pas jQuery pour parser la plus part de les attributs et mon CSS rajouter avec des regex dans tous les sens pour récupéré mon objet form si quelqu'un à des suggestions pour simplifier le code c'est avec plaisir. Merci

2 réponses


D'après ce que je vois, là tu testes un par un les éléments de ton image, en faisant une ou plusieurs boucles for tu pourrais raccourcir ton code.

Et pour la gestion de l'alignement des images, tu peux créer des classes différentes dans ton CSS avec les styles de ces alignements et simplement ajouter la bonne classe à ton image sans avoir à ajouter du CSS en ligne à tes balises img ;)

Si tu utilises angularjs, j'ai fais un petit fiddle si ça t'intéresse ?

http://jsfiddle.net/jnkcnp1e/16/