MediaWiki:Gadget-MoveResizeAbsolute.js

Dans le monde d'aujourd'hui, MediaWiki:Gadget-MoveResizeAbsolute.js est devenu un sujet d'une grande pertinence et d'un grand intérêt. Que ce soit en raison de son impact sur la société, de son importance dans l’histoire, de son influence sur la culture populaire ou de tout autre aspect qui le distingue, MediaWiki:Gadget-MoveResizeAbsolute.js est un sujet qui mérite d’être exploré en profondeur. Dans cet article, nous plongerons dans le monde fascinant de MediaWiki:Gadget-MoveResizeAbsolute.js, en analysant ses différents aspects et en découvrant sa signification dans le contexte actuel. De son origine à sa pertinence aujourd'hui, MediaWiki:Gadget-MoveResizeAbsolute.js est un sujet qui ne cesse d'intriguer les experts et les fans. Rejoignez-nous dans ce voyage de découverte et d'apprentissage de MediaWiki:Gadget-MoveResizeAbsolute.js.
/* {{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>