Kivlov Posté(e) le 3 décembre 2007 Partager Posté(e) le 3 décembre 2007 Salut à tous :) j'utilise un forum à base de phpbb depuis plusieurs années. ce forum a été un pwal modifié, vraiment rien de très méchant, juste histoire d'ajouter quelques fonctions sympathiques à la base, comme notemment un redimensionnement automatique des images selon la résolution. j'avais trouvé un mod qui faisait exactement ce que je voulais, et je l'avais donc ajouté au forum courant 2005. aujourd'hui, certains utilisateurs me font remarquer des problèmes d'affichage sous Safari, et malheureusement je n'ai aucune possibilité de test vu que je ne possède que des PCs sous Windows... apparemment, il y aurait un problème à l'affichage des message, l'index principal et celui des sous-forums ne posant pas problème. j'ai donc fait la relation avec ce mod (et donc ce js) de redimensionnement des images, qui intervient lorsque la page est complètement chargée : c'est là le problème, une fois chargée, la page s'efface... je suis donc convaincu que tout ceci est lié. le js fonctionne parfaitement sous Opera, Firefox et IE (sous Windows), et je ne vois pas ce qui peut poser problème à Safari :( si quelqu'un pouvait me mettre sur la voie... voici le code du mod en question : /* *************************************************************************** * mw3.js * ------------------- * begin : Saturday, Jan 19, 2005 * copyright : (c) 2005 by spooky2280 - Christian Fecteau * email : webmaster@christianfecteau.com * * $Id: mw3.js, v 1.0.1 2005/02/22 spooky2280 $ * * *************************************************************************** *************************************************************************** * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * *************************************************************************** mw3 (Prevent Any Layout From Being Broken) 1.0.1 A phpBB MOD originally created by Christian Fecteau. Credits must be given with my full name (Christian Fecteau) and a link to my portfolio: http://portfolio.christianfecteau.com/ Removal or alteration of this notice is strongly prohibited. */ // // don't change anything below // function mw3_viewtopic() { // let's make sure that there are posts in this page mw3_post = document.getElementsByTagName('mwthree'); if (mw3_post && mw3_post.length && (mw3_post.length > 0)) { mw3_stop_trying = 0; mw3_wait(); } } function mw3_wait() { // we need the clientWidth to be set on TDs or DIVs before running the main function if (mw3_stop_trying > 100) { // 10 seconds after the page loaded if (mw3_debug) { alert("No clientWidth seems to be available for TDs or DIVs"); } return; } mw3_stop_trying++; mw3_cw = 0; mw3_div = document.getElementsByTagName("DIV"); mw3_tds = document.getElementsByTagName("TD"); // we'll check what the document has the more: DIVs or TDs if (mw3_div.length < mw3_tds.length) { for (var mw3_i = 0; mw3_i < mw3_tds.length; mw3_i++) { if (mw3_tds[mw3_i].clientWidth) { mw3_cw += mw3_tds[mw3_i].clientWidth; } } } else { for (var mw3_i = 0; mw3_i < mw3_div.length; mw3_i++) { if (mw3_div[mw3_i].clientWidth) { mw3_cw += mw3_div[mw3_i].clientWidth; } } } if (mw3_cw == 0) { window.setTimeout(mw3_wait,100); } else { mw3_cw = mw3_div = mw3_tds = null; mw3_go(); } } function mw3_go() { // // alright let's start... // get containers of posts, store them in array, and do checks for possible MOD failing // mw3_posts = [] // this array will hold the containers of the posts whether they're DIVs, TDs, etc. for (var mw3_i = 0; mw3_i < mw3_post.length; mw3_i++) { // crawl up to container var mw3_parent_block = mw3_post[mw3_i]; while (!mw3_parent_block.clientWidth || (mw3_parent_block.clientWidth == 0)) { mw3_parent_block = mw3_parent_block.parentNode; if (mw3_parent_block == document.body) { if (mw3_debug) { alert("We reached the top, the MOD won't work."); } return; } // Opera returns a clientWidth higher than 0 for inline elements // and style.display always returns an empty string unless specified by CSS. // For the moment, we'll check only for SPAN elements, // but they're could be other inline elements before the block container if ( window.opera && (mw3_parent_block.nodeName == 'SPAN') && (mw3_parent_block.style.display != 'block') ) { mw3_parent_block = mw3_parent_block.parentNode; } } // we got a container, let's make sure that there is only one post in it var mw3_check = mw3_parent_block.getElementsByTagName('mwthree'); if (!mw3_check || (mw3_check && (mw3_check.length != 1))) { if (mw3_debug) { alert("There is 0 or more than 1 post in the container, the MOD won't work."); } return; } // this container seems valid, let's store it in array mw3_posts[mw3_i] = mw3_parent_block; // let's double check: is it the same container as the previous one? if (mw3_i > 0) { if (mw3_posts[mw3_i] == mw3_posts[mw3_i-1]) { if (mw3_debug) { alert("Same parent twice, the MOD won't work."); } return; } } } // // Move each post into a new DIV container and the new DIV into the original container // for (var mw3_i = 0; mw3_i < mw3_posts.length; mw3_i++) { var mw3_container = document.createElement("DIV"); // IE has a better overflow property than the W3C one window.showModelessDialog ? mw3_container.style.overflowX = 'auto' : mw3_container.style.overflow = 'auto'; mw3_container.style.visibility = 'hidden'; mw3_container.style.width = '100px'; mw3_container.style.height = '100px'; // move post into DIV while (mw3_posts[mw3_i].hasChildNodes()) { mw3_container.appendChild(mw3_posts[mw3_i].firstChild); } // put DIV into container mw3_posts[mw3_i].appendChild(mw3_container); } // we'll wait till the clientWidth is stable. mw3_cw = [] mw3_wait_reflow(); } function mw3_wait_reflow() { for (var mw3_i = 0; mw3_i < mw3_posts.length; mw3_i++) { mw3_cw[mw3_i] = mw3_posts[mw3_i].clientWidth; } window.setTimeout(mw3_check_cw,100); } function mw3_check_cw() { for (var mw3_i = 0; mw3_i < mw3_posts.length; mw3_i++) { if (mw3_cw[mw3_i] != mw3_posts[mw3_i].clientWidth) { window.setTimeout(mw3_wait_reflow,100); return; } } mw3_resize_div(); } function mw3_resize_div() { // // the layout has now its natural width let's check what it is, loop through each post, and resize // for (var mw3_i = 0; mw3_i < mw3_posts.length; mw3_i++) { mw3_container = mw3_posts[mw3_i].firstChild; // mw3_container is the new DIV if (window.showModelessDialog) // IE needs a different processing. { mw3_container.style.margin = '0% -150% 0% 0%'; // IE needs a negative right margin // rise up the content of the post so the horizontal scrollbar won't hide its bottom (20px) mw3_container.style.padding = '0px 5px 20px 0px'; // give to the new DIV the current (and now normal) width of the original container mw3_container.style.width = mw3_posts[mw3_i].clientWidth + 'px'; } else if (!window.opera && !document.all) // Gecko, Safari, etc. { // rise up the content of the post so the horizontal scrollbar won't hide its bottom (3px) mw3_container.style.padding = '0px 0px 3px 0px'; // give to the new DIV the current (and now normal) width of the original container // Gecko needs a little less than the parent width (* 0.99) mw3_container.style.width = (mw3_posts[mw3_i].clientWidth * 0.99) + 'px'; } else // Opera only I think { mw3_container.style.padding = '0px 0px 3px 0px'; mw3_container.style.width = mw3_posts[mw3_i].clientWidth + 'px'; } mw3_container.style.height = 'auto'; } mw3_rmw_go(); } // function to resize images within posts function mw3_rmw_go() { if (!window.opera) { // let's create a dummy object for the not yet existing popup mw3_rmw_pop = new Object(); mw3_rmw_pop.closed = true; // we need to close the popup onunload of the page for access permission (browser security) mw3_old_onunload = null; if (typeof window.onunload == "function") { mw3_old_onunload = window.onunload; } window.onunload = function() { // run the aliens onunload if (mw3_old_onunload) { mw3_old_onunload(); mw3_old_onunload = null; } if (!mw3_rmw_pop.closed) { mw3_rmw_pop.close(); } } } mw3_rmw_pop_options = 'top=0,left=0,width=' + String(window.screen.width-80) + ',height=' + String(window.screen.height-190) + ',scrollbars=1,resizable=1'; mw3_loop_i: for (var mw3_i = 0; mw3_i < mw3_posts.length; mw3_i++) { mw3_rmw_imgs = mw3_posts[mw3_i].getElementsByTagName("IMG"); mw3_loop_j: for (var mw3_j = 0; mw3_j < mw3_rmw_imgs.length; mw3_j++) { mw3_rmw_img = mw3_rmw_imgs[mw3_j]; // do we resize it? Let'see if the image is larger than the DIV width if ( mw3_rmw_img.width && !isNaN(mw3_rmw_img.width) && (mw3_posts[mw3_i].firstChild).clientWidth && !isNaN((mw3_posts[mw3_i].firstChild).clientWidth) && (mw3_rmw_img.width > Math.floor(((mw3_posts[mw3_i].firstChild).clientWidth * 0.9)) ) ) { // yes we do resize... mw3_rmw_img.style.width = Math.floor(((mw3_posts[mw3_i].firstChild).clientWidth * 0.9)) + 'px'; // if we are in the Topic Review iframe, we don't make anything // popable because of iframes security restrictions if (window.topr) { continue mw3_loop_j; } // make the popup onclick if (!window.opera) { mw3_rmw_img.onclick = function() { if (!mw3_rmw_pop.closed) { mw3_rmw_pop.close(); } mw3_rmw_pop = window.open('about:blank','christianfecteaudotcom',mw3_rmw_pop_options); mw3_rmw_pop.resizeTo(window.screen.availWidth,window.screen.availHeight); mw3_rmw_pop.moveTo(0,0); mw3_rmw_pop.focus(); mw3_rmw_pop.location.href = this.src; } } else { mw3_rmw_img.onclick = function() { mw3_rmw_pop = window.open(this.src,'christianfecteaudotcom',mw3_rmw_pop_options); mw3_rmw_pop.focus(); } } document.all ? mw3_rmw_img.style.cursor = 'hand' : mw3_rmw_img.style.cursor = 'pointer'; mw3_rmw_img.title = mw3_rmw_img.src; } } } window.setTimeout(mw3_adjust,100); } function mw3_adjust() { // some adjustments if overflow was not required for a particular post, so reloop! for (var mw3_i = 0; mw3_i < mw3_posts.length; mw3_i++) { mw3_container = mw3_posts[mw3_i].firstChild; // mw3_container is the new DIV if (window.showModelessDialog) // IE needs a different processing { // if there is no overflow for that post, remove the padding if ((mw3_container.scrollWidth - mw3_container.clientWidth) == 0) { mw3_container.style.padding = '0px 0px 0px 0px'; } else if (!window.topr) { mw3_container.ondblclick = function() { if (!mw3_rmw_pop.closed) { mw3_rmw_pop.close(); } mw3_rmw_pop = window.open('about:blank','christianfecteaudotcom',mw3_rmw_pop_options); mw3_rmw_pop.resizeTo(window.screen.availWidth,window.screen.availHeight); mw3_rmw_pop.moveTo(0,0); mw3_rmw_pop.focus(); if (document.fireEvent) { mw3_rmw_pop.document.body.innerHTML = '<div style="word-break:break-all">' + eval("this.innerHTML.replace(/<img.*?>/gi,'')") + '</div>'; } else { mw3_rmw_pop.document.body.innerHTML = '<div style="word-break:break-all">' + this.innerHTML + '</div>'; } } mw3_container.style.cursor = 'crosshair'; } } else if (!window.opera && !document.all) // Gecko, Safari, etc { // if there is no overflow for that post, set back the overflow to 'visible' // because Gecko sometimes puts a useless vertical scrollbar otherwise if ((mw3_container.scrollWidth - mw3_container.clientWidth) == 0) { mw3_container.style.overflow = 'visible'; mw3_container.style.padding = '0px 0px 0px 0px'; } else if (!window.topr) { mw3_container.ondblclick = function() { if (!mw3_rmw_pop.closed) { mw3_rmw_pop.close(); } mw3_rmw_pop = window.open('about:blank','christianfecteaudotcom',mw3_rmw_pop_options); mw3_rmw_pop.resizeTo(window.screen.availWidth,window.screen.availHeight); mw3_rmw_pop.moveTo(0,0); mw3_rmw_pop.focus(); mw3_this = eval("this.innerHTML.replace(/<img.*?>/gi,'')"); window.setTimeout('mw3_rmw_pop.document.body.innerHTML = mw3_this',100); } mw3_container.style.cursor = 'crosshair'; } } else // Opera only I think { if (mw3_container.scrollWidth <= mw3_container.clientWidth) { mw3_container.style.overflow = 'visible'; mw3_container.style.padding = '0px 0px 0px 0px'; } else if (!window.topr) { mw3_container.ondblclick = function() { mw3_rmw_pop = window.open('about:blank','christianfecteaudotcom',mw3_rmw_pop_options); mw3_rmw_pop.focus(); mw3_rmw_pop.document.open(); mw3_rmw_pop.document.write(eval("this.innerHTML.replace(/<img.*?>/gi,'')")); mw3_rmw_pop.document.close(); } mw3_container.style.cursor = 'crosshair'; } } mw3_container.style.visibility = 'visible'; } } // let's check that we can run the MOD and... go!!! if ( document.getElementsByTagName && document.createElement && document.body.clientWidth && (window.screen.width >= 800) ) { mw3_debug = false; // output alerts on error mw3_old_onload = null; if (typeof window.onload == "function") { mw3_old_onload = window.onload; } window.onload = function() { // run the aliens onload if (mw3_old_onload) { mw3_old_onload(); mw3_old_onload = null; } mw3_viewtopic(); } } merci d'avance de votre aide :) Kivlov. Lien vers le commentaire Partager sur d’autres sites More sharing options...
BreizFenrir Posté(e) le 5 décembre 2007 Partager Posté(e) le 5 décembre 2007 Je ne vais pas commenter le Javascript car il est pas mal gros et je n'ai pas le temps de le lire. De plus, je ne touche pas souvent ce langage. Néanmoins, tu te trompes en disant que tu ne peux pas tester, Safari 3 étant disponible pour Windows aussi. En espérant que ça t'aide. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kivlov Posté(e) le 5 décembre 2007 Auteur Partager Posté(e) le 5 décembre 2007 Je ne vais pas commenter le Javascript car il est pas mal gros et je n'ai pas le temps de le lire. De plus, je ne touche pas souvent ce langage. Néanmoins, tu te trompes en disant que tu ne peux pas tester, Safari 3 étant disponible pour Windows aussi.En espérant que ça t'aide. salut :) en effet, on m'a averti d'une beta de Safari 3 pour Windows, je n'étais pas au courant merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.