www

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

grunt.js (3422B)


      1 Raphael.fn.marginText = function (x,y,text,margin) {
      2 	margin = isNaN(+margin) ? 10 : margin;
      3 	var t = this.text(0,0,text);
      4 	var size = t.getBBox();
      5 	t.translate(margin+x-size.x, margin+y-size.y);
      6 	// TODO : surcharger les méthodes permettant de faire un set! sur x et y.
      7 	var getBBox = t.getBBox;
      8 	t.getBBox = function() {
      9 		var bBox = getBBox.call(this);
     10 		bBox.x -= margin;
     11 		bBox.y -= margin;
     12 		bBox.width += 2*margin;
     13 		bBox.height += 2*margin;
     14 		return bBox
     15 	};
     16 	return t;
     17 };
     18 
     19 function floorCeil(a,b,c,d) {
     20 	var x1 = a;
     21 	var y1 = b;
     22 	var x2 = a+c;
     23 	var y2 = b+d;
     24 	
     25 }
     26 
     27 Raphael.fn.boundingRect = function(margin) {
     28 	margin = +margin || 0;
     29 	var set = this.set();
     30 	set.push.apply(set,arguments);
     31 	var size = set.getBBox();
     32 	var rect = this.rect(size.x-margin, size.y-margin, size.width+2*margin, size.height+2*margin);
     33 	/* Pour des bords nets : rect.node.style.shapeRendering = "crispEdges"; */
     34 	rect.set = this.set().push(rect,set);
     35 	return rect;
     36 };
     37 
     38 function Block(name) {
     39 	this.name = name;
     40 	this.draw = function(x,y) {
     41 		var name = r.text(x,y,this.name);
     42 		var block = r.boundingRect(10, name).insertBefore(name).attr({
     43 			stroke: this.borderColor,
     44 			fill: this.fillColor
     45 		});
     46 		var start = function () {
     47 			this.oldDx = 0;
     48 			this.oldDy = 0;
     49 			this.firstMove = true;
     50 			this.toFront();
     51 		};
     52 		var move = function (dx, dy) {
     53 			if (this.firstMove) { this.firstMove = false; this.attr({opacity: 0.5}); }
     54 			this.translate(dx-this.oldDx, dy-this.oldDy);
     55 			this.oldDx = dx;
     56 			this.oldDy = dy;
     57 		};
     58 		var up = function () {
     59 			this.attr({opacity: 1});
     60 		};
     61 		block.set.drag(move, start, up, block.set, block.set, block.set);
     62 		return block.set;
     63 	};
     64 };
     65 
     66 // Colors
     67 Block.prototype.borderColor = "#000";
     68 Block.prototype.fillColor = "#ff8";
     69 
     70 function init() {
     71 	$('noscript').hide();
     72 	r = Raphael("ide", 640, 480);
     73 	b1 = new Block("Block 1").draw(150, 100);
     74 	b2 = new Block("My pretty block").draw(30, 200);
     75 }
     76 
     77 new Event.observe(window, 'load', init);
     78 
     79 /* Modèle
     80 [World]<>-[BlockDef|name,inputPorts,outputPorts]-[Graph]
     81 Graph = ??? des ports et des blocs…
     82 
     83 Algorithme d'évaluation :
     84 
     85 Pour instancier une définition de bloc :
     86 - Instancier le bloc à partir de sa définition
     87   - Pour chaque sous-bloc de la définition, on a dans l'instance un slot d'instance pour le sous-bloc (vide au départ).
     88   - Pour chaque port de sortie de chaque sous-bloc, on a dans l'instance un slot de port (vide au départ) (peut être stocké directement dans les ports de sortie de l'instance).
     89   - Pour chaque port d'entrée du bloc, on a dans l'instance un slot de port (vide au départ).
     90 
     91 Pour évaluer la valeur d'un port de sortie d'un bloc (inst) :
     92 - Chercher quel sous-bloc & port est connecté à ce port de sortie
     93 - Si le slot de ce sous-bloc est vide, instancier le sous-bloc et stocker l'isntance dans le slot
     94 - Si le slot de port de sortie de ce sous-bloc est vide :
     95   - Calculer la valeur du port de sortie souhaité de ce sous-bloc
     96   - Stocker la valeur ainsi calculée dans le slot de port de sortie qu'on cherchait au départ
     97 - Renvoyer la valeur ainsi calculée.
     98 
     99 Pour évaluer la valeur d'un port d'entrée d'un bloc (inst) :
    100 - Dans l'instance de bloc contenant celle-ci,
    101   - Chercher le sous-bloc / le port d'entrée connecté au notre.
    102   - Calculer cette valeur
    103     - Soit en récursion pour calculer le port d'entrée du parent
    104     - Soit en récursion pour calculer le port de sortie du bloc voisin au notre.
    105 */