From b4fa5488abceb2979d4753af0003b3265f433fda Mon Sep 17 00:00:00 2001 From: Greg Burri Date: Mon, 23 Jun 2008 20:05:54 +0000 Subject: [PATCH] =?utf8?q?ADD=20function=20dans=20Util=20permettant=20de?= =?utf8?q?=20positionner=20une=20boite=20(div),=20sera=20utilis=C3=A9=20po?= =?utf8?q?ur=20afficher=20les=20messages=20auquels=20l'utilisateur=20souha?= =?utf8?q?it=20r=C3=A9pondre?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- js/euphorik.js | 38 ++++++++++++++++++++++++++++++++++++++ js/pageMinichat.js | 23 +++++++---------------- 2 files changed, 45 insertions(+), 16 deletions(-) diff --git a/js/euphorik.js b/js/euphorik.js index cb7f71a..ee3865c 100755 --- a/js/euphorik.js +++ b/js/euphorik.js @@ -140,6 +140,44 @@ Util.prototype.messageDialogue = function(message, type, boutons, formate) this.timeoutMessageDialogue = setTimeout(fermer, conf.tempsAffichageMessageDialogue) } +var positionTypeX = {gauche: 0, gaucheRecouvrement: 1, centre: 2, droiteRecouvrement: 3, droite: 4} +var positionTypeY = {haut: 0, hautRecouvrement: 1, centre: 2, basRecouvrement: 3, bas: 4} + +/** + * Afficher une boite flottante (élément) par rapport à une cible. + * La boite est affichée de manière à ne pas dépasser de la fenêtre. + * @boite l'élément à afficher + * @cible l'élément sur lequel est affiché la boite + * @positionX de type positionTypeX + * @positionY de type positionTypeY + */ +Util.prototype.afficherBoite = function(boite, cible, positionX, positionY) +{ + var positionCible = cible.offset() + var positionBoite = + { + left : positionX == positionTypeX.gauche ? positionCible.left - boite.width() : + (positionX == positionTypeX.gaucheRecouvrement ? positionCible.left - boite.width() + cible.width() : + (positionX == positionTypeX.droitelsRecouvrement ? positionCible.left : + (positionX == positionTypeX.droite ? positionCible.left + cible.width() : + positionCible.left + cible.width() / 2 - boite.width() / 2 ))), // centre + top : positionY == positionTypeY.haut ? positionCible.top - boite.height() : + (positionY == positionTypeY.hautRecouvrement ? positionCible.top - boite.height() + cible.height() : + (positionY == positionTypeY.basRecouvrement ? positionCible.top : + (positionY == positionTypeY.bas ? positionCible.top + cible.height() : + positionCible.top + cible.height() / 2 - boite.height() / 2 ))) // centre + } + + // calcul les décalages en x et en y pour éviter que la boite ne sorte de la fenêtre, tient compte de la position des barres de défilement + var marge = 10 + positionBoite.left = positionBoite.left < marge + window.pageXOffset ? marge + window.pageXOffset : + (boite.width() - $(window).width() + (positionBoite.left - window.pageXOffset) + marge > 0 ? $(window).width() - boite.width() - marge + window.pageXOffset : positionBoite.left) + positionBoite.top = positionBoite.top < marge + window.pageYOffset ? marge + window.pageYOffset : + (boite.height() - $(window).height() + (positionBoite.top - window.pageYOffset) + marge > 0 ? $(window).height() - boite.height() - marge + window.pageYOffset : positionBoite.top) + + boite.css("top", positionBoite.top).css("left", positionBoite.left).show() +} + /** * Affiche un info bulle lorsque le curseur survole l'élément donné. * FIXME : le width de element ne tient pas compte du padding !? diff --git a/js/pageMinichat.js b/js/pageMinichat.js index 7ad6c5f..67354cf 100755 --- a/js/pageMinichat.js +++ b/js/pageMinichat.js @@ -40,6 +40,7 @@ PageMinichat.prototype.contenu = function()

\ \ \ +

0
\ \ \ \ @@ -82,7 +83,7 @@ PageMinichat.prototype.charger = function() this.util.infoBulle("Ouvrir la conversation liée au troll de la semaine", $("#trollCourant .troll")) // - $("body").append("
") + $("body").append('
') // affichage des smiles $("#smiles").append(this.formateur.getSmilesHTML()).children().each( function(i) @@ -100,20 +101,13 @@ PageMinichat.prototype.charger = function() } ) $("form button.smiles").hover( - function(e) - { - var position = $(e.target).offset() - // le décalage pour ne pas dépasser à droite (10 correspond à la marge pour éviter de coller le bord) - var decalage = $("body").width() - $("#smiles").width() - position.left - 10 - decalage = decalage > 0 ? 0 : decalage - - $("#smiles").css("top", position.top).css("left", position.left + decalage).show() - }, - function(e){} + // affichage de la boite présentant les smiles + function(e){ thisPage.util.afficherBoite($("#smiles"), $(e.target), positionTypeX.centre, positionTypeY.basRecouvrement) }, + function(){} ) $("#smiles").hover( function(){}, - function(e) + function() { $("#smiles").hide() } @@ -219,7 +213,6 @@ PageMinichat.prototype.envoyerMessage = function(pseudo, message) ;; dumpObj(this.getJSONMessage(pseudo, message)) jQuery.ajax( - { url : "request", type: "POST", @@ -418,9 +411,7 @@ Message.prototype.XHTML = function(messagePair) * @param formateur outil permettant la mise en forme du texte des messages */ function Conversation(num, util, formateur, client) -{ - var thisConversation = this - +{ this.num = num // peut changer au cours de la vie de la conversation this.id = Math.floor(Math.random() * 1000000).toString(36) this.util = util -- 2.45.2