SharePoint 2007 & Design : crash du mode feuille de données (Datasheet) sous IE
Il y a de temps en temps des surprises dans la personnalisation de SharePoint, si si.
La dernière en date que je viens de vivre avec l’un de mes collègues designer est proche d’une belle migraine, limite “nervous breakdown”



(désolé pour la référence)
Le contexte : Suite à une personnalisation avancée de la Master Page, l’ouverture d’une liste en mode feuille de donnée prend beaucoup de temps voir plante internet explorer …

Hum hum.
Donc après bien des tests, on a pu identifier des styles responsables d’une sorte de boucle infinie : merci le padding
>>> Et surtout ensuite, nous avons pu chercher sur le web de manière moins hasardeuse pour compléter notre analyse
Voici justement quelques posts TRES indicatifs
(Je ne saurais trop vous conseiller le dernier)
En résumé, la fonction GCComputeSizing du fichier Core.js dans le 12 assure le calcul de la dimension de la Grid.
Malheureusement, si la balise container s’appuie sur une DIV ou un TABLE qui possède, ou hérite d’un style avec du padding/margin voir un element enfant plus bas comme un footer, la fonction rentre dans une sorte de boucle infernal ralentissant tout le processus.
La fonction a des soucis a simplement “sizer” la hauteur du composant
Soit plusieurs pistes de solutions plus ou moins viable à tenter
- Identifier les margin paddin : attention à votre style malheureusement
- Dimensionner votre container
- rajouter un style de dimensionnement clair et précis
>>> la solution retenue dans mon cas
.ms-bodyareaframe object {width:100%!important; height:auto!important;}
(bien rajouter ce style sur la balise encapsulant votre contenu !!! )
- Modifier la fonction dans le core.js
Bon évidemment, la dernière solution n’est pas une bonne pratique mais rien ne vous empêche de surcharger la fonction en externe via un second js voir directement dans la master
<script type="text/javascript">
function GCComputeSizing(GCObject)
{
if (TestGCObject(GCObject))
{
var fBIDI=(document.documentElement.currentStyle.direction=="rtl");
var lGCWindowWidth=document.documentElement.scrollWidth;
var lGCWindowHeight=(document.documentElement.scrollHeight>document.documentElement.clientHeight) ? document.documentElement.clientHeight : document.documentElement.scrollHeight;
var lGCObjectOffsetLeft=0;
var lGCObjectOffsetTop=0;
if (fBIDI)
{
lGCObjectOffsetLeft=-180;
lGCObjectOffsetTop=120;
}
else
{
lGCObjectOffsetLeft=32;
lGCObjectOffsetTop=-2;
}
var lGCObjectWalker=GCObject.parentElement;
while (lGCObjectWalker !=document.body)
{
lGCObjectOffsetLeft+=lGCObjectWalker.offsetLeft;
lGCObjectOffsetTop+=lGCObjectWalker.offsetTop;
lGCObjectWalker=lGCObjectWalker.offsetParent;
if (fBIDI)
if (lGCObjectWalker.offsetLeft > 0)
break;
}
lGCObjectOffsetLeft+=GCObject.parentElement.offsetLeft;
lGCObjectOffsetTop+=GCObject.parentElement.offsetTop;
glGCObjectHeight=lGCWindowHeight - lGCObjectOffsetTop;
if (glGCObjectHeight > lGCWindowHeight)
glGCObjectHeight=lGCWindowHeight
if (glGCObjectHeight < cGCMinimumHeight)f
glGCObjectHeight=cGCMinimumHeight;
if (fBIDI)
{
glGCObjectWidth=lGCWindowWidth+lGCObjectOffsetLeft;
}
else
glGCObjectWidth=lGCWindowWidth - lGCObjectOffsetLeft;
if (glGCObjectWidth > lGCWindowWidth)
glGCObjectWidth=lGCWindowWidth;
if (glGCObjectWidth < cGCMinimumWidth)
glGCObjectWidth=cGCMinimumWidth;
}
}
</script>
Normalement, tout devrais rentré dans la normale
Voila voila, je me retourne à ma VPC et les biberons 
Renaud Comte aka TheMit (le CSS et SharePoint, c’est des fois proche du S&M…)
Member of WygTeam
http://www.wygwam.com
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :