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
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 ?