_ _    _ _____  ___   __                       
 __      _(_) | _(_)___ / ( _ ) / /_   ___ ___  _ __ ___  
 \ \ /\ / / | |/ / | |_ \ / _ \| '_ \ / __/ _ \| '_ ` _ \ 
  \ V  V /| |   <| |___) | (_) | (_) | (_| (_) | | | | | |
   \_/\_/ |_|_|\_\_|____/ \___/ \___(_)___\___/|_| |_| |_|

MediaWiki:Gadget-MoveResizeAbsolute.js

Dans l'article d'aujourd'hui, nous allons plonger dans le monde passionnant de MediaWiki:Gadget-MoveResizeAbsolute.js. Il s’agit d’un sujet qui a suscité un grand intérêt ces dernières années et sur lequel beaucoup a été écrit, mais qui a encore de nombreux aspects à explorer. De ses origines à son impact sur la société actuelle, en passant par ses différents aspects et applications, MediaWiki:Gadget-MoveResizeAbsolute.js est un sujet qui nous offre sans aucun doute des possibilités infinies de réflexion et d'apprentissage. Tout au long de cet article, nous tenterons de percer les mystères entourant MediaWiki:Gadget-MoveResizeAbsolute.js et de comprendre son importance dans le contexte actuel. Préparez-vous à vous lancer dans un fascinant voyage de connaissances et de découvertes !
/* {{Projet:JavaScript/Script|MoveResizeAbsolute}} */

/* <noinclude>

Fonctions standards pour gérer des éléments en position absolute :
* fonction "move",
* fonction "resize"

Voir page de discussion.</noinclude>
== CODES SOURCE ==
<!--
*/

/* -->
=== FONCTION : navigateur ===

* Renvoie true si le navigateur est Internet Explorer

<!--
*/
// --><div style="border:1px dashed green;margin:1em;padding:1em;"><source lang=javascript>
//<pre><nowiki>

function MoveResizeAbsolute_NavIsIE(){
     var agt=navigator.userAgent.toLowerCase();
     var is_ie = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1));
     MoveResizeAbsolute_NavIsIE = function () {
          return is_ie;
     };
     return is_ie;
}

//</nowiki></pre></source></div><!--
/*
-->
=== FONCTION : largeur de l'écran ===
* Renvoie la largeur de l'écran (en pixels)

<!--
*/
// --><div style="border:1px dashed green;margin:1em;padding:1em;"><source lang=javascript>
//<pre><nowiki>

function MoveResizeAbsolute_GetScreenWidth(){
     var ScreenWidth;
     if(MoveResizeAbsolute_NavIsIE()){
          ScreenWidth = parseInt(screen.width);
     }else{
          ScreenWidth = parseInt(window.innerWidth);
     }
     return ScreenWidth;
}

//</nowiki></pre></source></div><!--
/*
-->
=== FONCTION : hauteur de l'écran ===
* Renvoie la hauteur de l'écran (en pixels)

<!--
*/
//--><div style="border:1px dashed green;margin:1em;padding:1em;"><source lang=javascript>
//<pre><nowiki>

function MoveResizeAbsolute_GetScreenHeight(){
     var ScreenHeight;
     if(MoveResizeAbsolute_NavIsIE()){
          ScreenHeight = parseInt(screen.height);
     }else{
          ScreenHeight = parseInt(window.innerHeight);
     }
     return ScreenHeight;
}

//</nowiki></pre></source></div><!--
/*
-->
=== FONCTION : MOVE ===

Transforme un élément en ancre pour bouger un autre élément (en position fixed)
* elementArea = élément ancre (obligatoire)
* elementsToMove = éléments à bouger (obligatoire)
* LeftLimit = limite gauche, en pixel (facultatif)
* TopLimit = limite haut, en pixel (facultatif)

<!--
*/
//--><div style="border:1px dashed green;margin:1em;padding:1em;"><source lang=javascript>
//<pre><nowiki>

function MoveResizeAbsolute_AddMoveArea(elementArea, elementsToMove, LeftLimit, TopLimit){
     if((!elementArea)||(!elementsToMove)) return;
     elementArea.onmousedown=function(event) {
          var monbody = document.body;
          if(!event) { event = window.event; }
          var positionSouris_X;
          var positionSouris_Y;
          if(MoveResizeAbsolute_NavIsIE()){
               positionSouris_X = parseInt( event.clientX + monbody.scrollLeft );
               positionSouris_Y = parseInt( event.clientY + monbody.scrollTop );
          }else{
               positionSouris_X = parseInt( event.pageX );
               positionSouris_Y = parseInt( event.pageY );
          }
          for(var a=0;a<elementsToMove.length;a++){
               elementsToMove.initialX = parseInt( positionSouris_X - elementsToMove.offsetLeft);
               elementsToMove.initialY = parseInt( positionSouris_Y - elementsToMove.offsetTop);
               $( elementsToMove ).css( 'opacity', '.8' );
          }
          monbody.onmousemove = function(event) {
               if(!event) { event = window.event; }
               var positionSouris_X;
               var positionSouris_Y;
               if(MoveResizeAbsolute_NavIsIE()){
                    positionSouris_X = parseInt( event.clientX + monbody.scrollLeft );
                    positionSouris_Y = parseInt( event.clientY + monbody.scrollTop );
               }else{
                    positionSouris_X = parseInt( event.pageX );
                    positionSouris_Y = parseInt( event.pageY );
               }
               var PositionGauche;
               var PositionHaut;
               var LeftLimitDone = false;
               var TopLimitDone = false;
               for(var a=0;a<elementsToMove.length;a++){
                    PositionGauche = parseInt( positionSouris_X ) - elementsToMove.initialX;
                    PositionHaut = parseInt(positionSouris_Y ) - elementsToMove.initialY;
                    if(LeftLimit){
                         if(LeftLimit|| LeftLimit==0){
                              if( PositionGauche < parseInt(LeftLimit)){
                                   PositionGauche = LeftLimit;
                                   LeftLimitDone = true;
                              }
                         }
                    }
                    if(TopLimit){
                         if(TopLimit||TopLimit==0){
                              if( PositionHaut < parseInt(TopLimit)){
                                   PositionHaut = parseInt(TopLimit);
                                   TopLimitDone = true;
                              }
                         }
                    }
                    $( elementsToMove ).css( {
                         left: PositionGauche + 'px',
                         top: PositionHaut + 'px'
                    } );
               }
               if(LeftLimitDone){
                    for(var a=0;a<elementsToMove.length;a++){
                         if(LeftLimit) $( elementsToMove ).css( 'left', LeftLimit + 'px' );
                    }
                    LeftLimitDone = false;
               }
               if(TopLimitDone){
                    for(var a=0;a<elementsToMove.length;a++){
                         if(TopLimit) $( elementsToMove ).css( 'top', TopLimit + 'px' );
                    }
                    TopLimitDone = false;
               }
          };
          monbody.onmouseup=function(event) {
               for(var a=0;a<elementsToMove.length;a++){
                    $( elementsToMove ).css( 'opacity', '' );
               }
               monbody.onmousemove = null;
               monbody.onmouseup = null;
          };
     };
     $( elementArea ).css( 'cursor', 'move' );
}

//</nowiki></pre></source></div><!--
/*
-->
=== FONCTION : RESIZE ===

Transforme un élément en ancre pour redimensionner un autre élément (en position fixed)
* elementArea = élément ancre (obligatoire)
* elementsToResize = éléments à redimensionner (obligatoire, dans une Array)
* MinWidth = largeur minimum, en pixel (facultatif)
* MinHeight = hauteur minimum, en pixel (facultatif)

<!--
*/
//--><div style="border:1px dashed green;margin:1em;padding:1em;"><source lang=javascript>
//<pre><nowiki>

function MoveResizeAbsolute_AddResizeArea(elementArea, elementsToResize, MinWidth, MinHeight){
     if((!elementArea)||(!elementsToResize)) return;
     elementArea.onmousedown = function(event){
          var monbody = document.body;
          if(!event) { event = window.event; }
          var positionSouris_X;
          var positionSouris_Y;
          if(MoveResizeAbsolute_NavIsIE()){
               positionSouris_X = parseInt( event.clientX + monbody.scrollLeft );
               positionSouris_Y = parseInt( event.clientY + monbody.scrollTop );
          }else{
               positionSouris_X = parseInt( event.pageX );
               positionSouris_Y = parseInt( event.pageY );
          }
          for(var a=0;a<elementsToResize.length;a++){
               elementsToResize.initialWidth = parseInt( positionSouris_X - elementsToResize.offsetWidth );
               elementsToResize.initialHeight = parseInt( positionSouris_Y - elementsToResize.offsetHeight );
               $( elementsToResize ).css( 'opacity', '.8' );
          }
          monbody.onmousemove=function(event) {
               if(!event) { event = window.event; }
               var positionSouris_X;
               var positionSouris_Y;
               if(MoveResizeAbsolute_NavIsIE()){
                    positionSouris_X = parseInt( event.clientX + monbody.scrollLeft );
                    positionSouris_Y = parseInt( event.clientY + monbody.scrollTop );
               }else{
                    positionSouris_X = parseInt( event.pageX );
                    positionSouris_Y = parseInt( event.pageY );
               }
               var MinWidthDone = false;
               var MinHeightDone = false;
               for(var a=0;a<elementsToResize.length;a++){
                    var NewWidth = parseInt( positionSouris_X - elementsToResize.initialWidth  );
                    var NewHeight = parseInt( positionSouris_Y - elementsToResize.initialHeight );
                    if(MinWidth){
                         if(MinWidth || MinWidth==0){
                              if(NewWidth<parseInt(MinWidth)){
                                   NewWidth = MinWidth;
                                   MinWidthDone = true;
                              }
                         }
                    }
                    if(MinHeight){
                         if(MinHeight || MinHeight==0){
                              if(NewHeight<parseInt(MinHeight)){
                                   NewHeight = MinHeight;
                                   MinHeightDone = true;
                              }
                         }
                    }
                    $( elementsToResize ).css( {
                         width: NewWidth + 'px',
                         height: NewHeight + 'px'
                    } );
               }
               if(MinWidthDone){
                    for(var a=0;a<elementsToResize.length;a++){
                         if(MinWidth) $( elementsToResize ).css( 'width', MinWidth + 'px' );
                    }
               }
               if(MinHeightDone){
                    for(var a=0;a<elementsToResize.length;a++){
                         if(MinHeight) $( elementsToResize ).css( 'height', MinHeight + 'px' );
                    }
               }

          };
          monbody.onmouseup=function(event) {
               for(var a=0;a<elementsToResize.length;a++){
                    $( elementsToResize ).css( 'opacity', '' );
               }
               monbody.onmousemove = null;
               monbody.onmouseup = null;
          };
     };
     $( elementArea ).css( 'cursor', 'se-resize' );
}
//</nowiki></pre></source></div>