|
var divPrintableContentId='divContent';
var titleSuffixe=' [version immprimable]';
var classHeader='printableHeader';
var classFooter='printableFooter';
var contentHeader='<img src="http://prodeon3.nuxit.net/codessources/images/printable/printable_top01.jpg">';
var contentFooter='Script crée par MAX3315 - Tous droits réservés à <em>Les Codes Sources de MaX3315</em>';
var externalLinkClassName='externalLink';
function f_printable_version(autoOpenPrintDialog)
{
if(autoOpenPrintDialog==null) { autoOpenPrintDialog=false; }
var objContent=document.getElementById(divPrintableContentId);
var _options='toolbar=yes,location=no,directories=no,status=no,menub ar=no,scrollbars=yes,resizable=yes,copyhistory=no,width='+objContent.offsetWidth+'
,height='+objContent.offsetHeight+'';
var popup=window.open('','_blank',_options);
//on ecrit a la voler le contenu de la popup
popup.document.write('<html>');
popup.document.write('<head>');
popup.document.write('<title>'+document.title+'</title>'); //recuperation du titre
//Listage des CSS de la page courante pour transfert a la popup imprimable
var i;
for(i=0 ; i<document.styleSheets.length ; i++)
{
if(document.styleSheets[i].href==window.location || !document.styleSheets[i].href) //pour les feuilles de style attachées
{ //premier teste concerne Firefox le second concerne IE
//on souhaite récupéré le contenu de cette feuille de style inline.
if(document.styleSheets[i].cssText) //concerne IE
{
popup.document.write('<style type="text/css">'+document.styleSheets[i].cssText+'</style>');
}
else //pas IE
{
popup.document.write('<style type="text/css">');
var j;
for(j=0 ; j<document.styleSheets[i].cssRules.length ; j++)
{
popup.document.write('\n'+document.styleSheets[i].cssRules[j].cssText);
}
popup.document.write('</style>');
}
}
else
{
popup.document.write('<link href="'+document.styleSheets[i].href+'" rel="stylesheet" type="text/css">');
}
}
popup.document.write('</head>');
popup.document.write('<body>');
popup.document.write('<div id="header"></div>');
popup.document.write('<div id="content">'+document.getElementById(divPrintableContentId).innerHTML+'</div>');
popup.document.write('<div id="footer"></div>');
popup.document.write('<script language="javascript">window.opener.printable_version_callBack(window,\'content\',\'header\',\'footer\'
,'+autoOpenPrintDialog+');</script>');
popup.document.write('</body>');
popup.document.write('</html>');
return;
}
//fonction appelée par la popup afin de lui transformé son contenu
//Arguments :
// popupwin : référence à l'object window de la popup
// nameOdDivContent : non du div de contenu dans la popup
// nameOfDivHeader,nameOfDivFooter : nom des div d'entete et de pied de page
// autoOpenPrintDialog : true | false définit si la popup ouvre toute seule le diaolgue
// d'impression de l'impression
function printable_version_callBack(popupwin,nameOfDivContent,nameOfDivHeader
,nameOfDivFooter,autoOpenPrintDialog)
{
//traitement de l'entete / header
var header=popupwin.document.getElementById(nameOfDivHeader);
header.className=classHeader;
header.innerHTML=contentHeader;
//tratement du pied de page / footer
var footer=popupwin.document.getElementById(nameOfDivFooter);
footer.className=classFooter;
footer.innerHTML=contentFooter;
//transformation des liens en liens imprimables
transformExternalUrlForPrinting(popupwin,nameOfDivContent,externalLinkClassName);
//Mise en avant de la popup imprimable
popupwin.focus();
if(autoOpenPrintDialog)
{
popupwin.print();
}
return;
}
//fonction permettant de transformer l'ensemble des liens en liens url pleinement imprimmable
//Arguments :
// popupwin : référence à l'object window de la popup
// nameOdDivContent : non du div de contenu dans la popup
// styleForExternalLink : class de style associés aux liens qui doivent êter traité par cette fonction.
// Si null alors on traite tous les liens
function transformExternalUrlForPrinting(popupwin,nameOfDivContent,styleForExternalLink)
{
var myDiv=popupwin.document.getElementById(nameOfDivContent);
var urls=myDiv.getElementsByTagName('a');
for(i=0 ; i<urls.length ; i++)
{
if(styleForExternalLink==null || urls[i].className==styleForExternalLink) // il s'agit bien d'une url a transformer : on se base sur le nom de la classe CSS
{
urls[i].style.backgroundImage='none'; //spécifique à mon site et ma feuille de style
urls[i].style.paddingRight='0px'; //spécifique à mon site et ma feuille de style
if(urls[i].innerHTML.indexOf(urls[i].href)==-1 && urls[i].innerHTML.indexOf(urls[i].href.substr(0,urls[i].href.length-1))==-1)
//on ne veut que traité les liens n'ayant pas l'url deja visible
//Nous testons href ainsi que href privé de son dernier caractere
//pour la simple raison que dans certains cas les navigateurs complete automatiquement les urls par un /
// exemple: <a href="http://www.google.com">...
//donnera en javascript obj.href => String('http://www.google.com/') un caractere a automatiquement été ajouté '/'
{
urls[i].innerHTML=urls[i].innerHTML+' (<em>'+urls[i].href+'</em>)';
}
}
}
return;
}
function ellipsis_onMouseOver(aEvent)
{
var myEvent = aEvent ? aEvent : window.event; //recuperation de l'evenement selon le navigateur
//on recupere cible de l'evenemet
var target= myEvent.target ? myEvent.target : myEvent.srcElement;
//on recupere sa position
var _top=target.offsetTop;
var _left=target.offsetLeft;
var objTmp=target.parentNode;
var jj=0; //anti boucle infine
while(objTmp!=document.body && jj<1000) //on limite à 1000 niveau d'imbrication
{
//seul certain element sont a prendre en compte
//(les tr, row, thead, etc... ne sont pas a prendre en compte)
if(goodTagForOffset.inArray(objTmp.nodeName))
{
_top+=objTmp.offsetTop;
_left+=objTmp.offsetLeft;
}
objTmp=objTmp.parentNode;
jj++;
}
longVersionEllipsis.innerHTML=target.innerHTML;
longVersionEllipsis.style.visibility='visible';
longVersionEllipsis.style.zIndex=ellipsisZIndex+1;
longVersionEllipsis.style.left=_left;
longVersionEllipsis.style.top=_top;
return;
}
|