...
Dans le cadre de développement de portlet responsivenos tests de développement avec Bootstrap, nous avons identifié certaines limitations du framework lors d'un usage au sein d'une portlet.
Effectivement, les medias media-queries détectent la largeur de la fenêtre dans son intégralité, tandis qu'une portlet ne représente qu'un fragment de la page. Dans ce cadre là, nous avons mis en place une version modifiée du framework pour s'adapter à ces contraintes. Les sources sont disponibles sur Github.
Cette solution se veut iso-fonctionnelle par rapport à la version non modifiée. Cependant, il reste aujourd'hui quelques conflits de classes entre lors d'une utilisation "simultanée" de la version modifiée et celle non modifiée quand on utilise cette librairie avec (importée par les portlets) avec celle d'origine (utilisée par le thème Respondr d'uPortal 4.1 et le thème respondr).
Il est possible d'accéder à l'historique des discussions à propos de cette version modifiée de Bootstrap avec Jasig via l'historique Des échanges sur cette problématique sont en cours avec la communauté Jasig => Historique de la mailing list
Comme évoqué précédemment les medias media-queries ne se basent que sur la largeur de la fenêtre, or les portlets peuvent prendre différentes tailles au sein d'une page . Une portlet va pouvoir occuper (25%, 33%, 40%, 50%, 60% ou même 100% de la largeur. Et une même portlet pourra avoir deux largeurs différentes sur une même page.
La version modifiée permet de passer outre les limitations imposées par les medias queries. Il devient alors possible d'avoir des "css conditionnelles" en fonction de la largeur de la portlet elle même.
...
). Il était donc nécessaire de trouver une solution "similaire" (règles CSS "conditionnelles") mais ne se basant pas sur les media-queries (inexploitables dans ce contexte).
Pour ce faire, nous sommes donc partis du constat suivant :
=> Il nous fallait donc trouver une solution permettant de recalculer dynamiquement la largeur de chaque portlet présente sur la page.
Notre solution se base sur :
div (dit "conteneur") englobant l'intégralité du contenu de la portletxs , sm, md, lg) à appliquer.Il faut insérer un petit snippet JavaScript dans la page
| Bloc de code | ||||||||
|---|---|---|---|---|---|---|---|---|
| ||||||||
(function($) {
var $portletContainers;
$(document).ready(function() {
// all portlets must have the CSS class .pc
$portletContainers = $(".pc");
// Resize event isn't fired on DOM Content Loaded, we launch the function manually
onWindowResize();
$(window).resize(onWindowResize);
});
function onWindowResize() {
$portletContainers.each(function(index) {
var $that = $(this);
var portletWidth = $that.width()
$that.removeClass("xs sm md lg");
if(portletWidth < 768)
$that.addClass("xs");
if(portletWidth >= 768 && portletWidth < 992)
$that.addClass("sm");
if(portletWidth >= 992 && portletWidth < 1200)
$that.addClass("md");
if(portletWidth >= 1200)
$that.addClass("lg");
});
}
})(jQuery); |
A chaque redimensionnement de la fenêtre, ce script va parcourir tous les éléments de la page pour recalculer la taille des conteneur conteneurs de porlet et leur appliquer la classe CSS en fonction de leur nouvelle largeur.
La limitation actuelle de ce système est qu'il ne gère pas le déplacement de portlet en drag & drop. -n-drop => Cela fait partie des évolutions futures du développement.
...
L'utilisation de framework CSS n'est pas toujours utile. Dans certains cas, lorsque l'existant est trop lourd , ou que l'interface se révèle très sommaire, il est peut s'avérer fastidieux et/ou inutile de se baser sur des librairies aussi conséquentes.
...
Dans ces cas là, il parait plus pertinent de partir sur une solution sans librairie de réaliser soit même l'intégration.
...
Comme vu précédemment il est malheureusement impossible avec des médias queries de cibler la largeur de la portlet. Nous sommes obligés de nous baser sur la largeur de la fenêtre (pour mieux comprendre cette problématique, un article explique bien les problèmes d'implémentation de cette fonctionnalité nommée Element Query).
...