www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

connexions.js (5694B)


      1 jQuery.fn.preparerBlocConnexions = function(arg) {
      2     $(this).find('.port')
      3         .bind('mousedown click', uiLierBlocs);
      4     
      5     if (arg == 'edition') {
      6         $(this).find('table.ports:first > tbody, table.ports:last > tbody')
      7             .sortable({
      8                 //axis: 'y',
      9                 scroll:   false,
     10                 appendTo: 'body',
     11                 cursorAt: {top:7, left:7}, // Hack-o-matic 7 & 7 pour que le symbole soit centré sous le curseur
     12                 helper: function (ev, elem) {
     13                     // height: auto pour conter jquery qui force une hauteur malgrè l'option
     14                     // forceHelperSize: false.
     15                     return $('<div class="port" style="height: auto"><div class="symbole"/></div>');
     16                 },
     17                 start: function(ev, ui) {
     18                     $(ui.placeholder)
     19                         .css('visibility', '')
     20                         .css('height', '')
     21                         .append('<td class="port sortie"><div class="symbole placeholder"></td>');
     22                 },
     23             })
     24             .bind('sortstart', uiLierBlocs)
     25             .bind('sort sortstop', function() {
     26                 $(this).parents('.bloc:first').trigger('changer');
     27             });
     28     }
     29     
     30     return $(this);
     31 }
     32 
     33 function uiActualiserLien(_de, _vers, segments) {
     34     if ($(_de).centerX() < $(_vers).centerX()) {
     35         de = $(_de);
     36         vers = $(_vers);
     37     } else {
     38         de = $(_vers);
     39         vers = $(_de);
     40     }
     41     segments = $(segments);
     42     var segment1 = segments.find('.segment-1');
     43     var segment2 = segments.find('.segment-2');
     44     var segment3 = segments.find('.segment-3');
     45     
     46     $(segment1)
     47         .width((vers.centerX() - de.centerX()) / 2)
     48         .position({my: 'left center', at: 'center', of: de});
     49     $(segment3)
     50         .width((vers.centerX() - de.centerX()) / 2)
     51         .position({my: 'right center', at: 'center', of: vers});
     52     
     53     var neg = segment3.centerY() - segment1.centerY();
     54     
     55     $(segment2)
     56         .height((neg > 0) ? segment3.bottomY() - segment1.topY() : segment1.bottomY() - segment3.topY())
     57         .position({
     58             my: (neg > 0) ? 'center top' : 'center bottom',
     59             at: (neg > 0) ? 'right top'  : 'right bottom',
     60             of: (neg > 0) ? segment1     : segment1
     61         });
     62 }
     63 
     64 function uiLierBlocs(ev) {
     65     /* Hack pour ne pas capturer le clic après un sort */
     66     if (ev.type == 'mousedown') {
     67         lienBlocsActif.pret = true;
     68         return true;
     69     } else if (ev.type == 'sortstart') {
     70         lienBlocsActif.pret = false;
     71         return true;
     72     } else {
     73         if (!lienBlocsActif.actif && !lienBlocsActif.pret) {
     74             lienBlocsActif.pret = true;
     75             return true;
     76         } else {
     77             /* Fin du hack non-capture de clic après sort */
     78             if (!lienBlocsActif.actif) {
     79                 lienBlocsActif.actif = true;
     80                 
     81                 var segments = $('#modele-lien-blocs')
     82                     .jqote()
     83                     .toDom()
     84                     .appendTo($(this).parents('.editionBloc').first());
     85                 
     86                 var start = $(this);
     87                 
     88                 var elems = $(this)
     89                     .parents(".editionBloc.bloc")
     90                     .add(segments);
     91                 
     92                 lienBlocsActif.start = start;
     93                 lienBlocsActif.elems = elems;
     94                 lienBlocsActif.segments = segments;
     95                 
     96                 elems.bind('mousemove.creerLien', function (event) {
     97                     uiActualiserLien(start, event, segments);
     98                 });
     99                 /*elems.bind('mousedown.creerLien', function (event) {*/
    100                 elems.bind('click.creerLien', function (event) {
    101                     lienBlocsActif.elems.unbind('.creerLien');
    102                     segments.remove();
    103                     lienBlocsActif.actif = false;
    104                     return false;
    105                 });
    106             } else {
    107                 // Création du lien
    108                 var lien = {
    109                     start: $(lienBlocsActif.start),
    110                     end: $(this),
    111                     segments: $(lienBlocsActif.segments)
    112                 };
    113                 
    114                 // Un lien a été créé, on est à l'écoute de nouveaux liens
    115                 // (et non plus à l'écoute de la fin d'une connexion)
    116                     lienBlocsActif.elems.unbind('.creerLien');
    117                 lienBlocsActif.actif = false;
    118 
    119                 if ((lien.start.parents('.bloc:first')[0] == lien.end.parents('.bloc:first')[0])
    120                     /*|| (lien.start.hasClass('entree') && lien.end.hasClass('entree'))
    121                     || (lien.start.hasClass('sortie') && lien.end.hasClass('sortie'))*/) {
    122                     log("Connexion impossible !");
    123                     lien.segments.remove();
    124                     return;
    125                 }
    126                 
    127                 // Mise à jour des positions des segments lors des drag, etc.
    128                 lien.start.parents('.bloc:first')
    129                     .add(lien.end.parents('.bloc:first'))
    130                     .bind('changer reduire dragstart drag dragstop resizestart resize resizestop', function (event) {
    131                         uiActualiserLien(lien.start, lien.end, lien.segments);
    132                     });
    133                 
    134                 // Et on re-dessine le lien bien en place maintenant que la cible
    135                 // est un port et non plus la souris.
    136                 uiActualiserLien(lien.start, lien.end, lien.segments);
    137                 
    138                 log("Connexion.");
    139             }
    140             
    141             return false;
    142         }
    143     }
    144 }