callbacks.js~ (2023B)
1 Array.prototype.remove = function(i) { 2 if (typeof i != "number") 3 i = this.indexOf(i); 4 this.splice(i,1); 5 return i; 6 } 7 8 Array.prototype.insert = function(v, i) { 9 if (arguments.length == 1) 10 i = this.length; 11 this.splice(i,0,v); 12 return i; 13 } 14 15 function faireCallbacks(liste) { 16 var a = $.makeArray(arguments); 17 a.shift(); 18 for (var i = 0; i < liste.length; i++) { 19 liste[i].apply(a[0], a); 20 } 21 } 22 23 function makeCollection(obj, nom) { 24 var Nom = nom.charAt(0).toUpperCase() + nom.substring(1); 25 obj[nom] = []; 26 obj['add' + Nom] = function(stuff, position) { 27 obj[nom].insert(stuff, position); 28 faireCallbacks(obj['cbAdd' + Nom], obj, stuff, position); 29 }; 30 obj['cbAdd' + Nom] = []; 31 obj['onAdd' + Nom] = function(callback) { 32 obj['cbAdd' + Nom].push(callback); 33 }; 34 obj['remove' + Nom] = function(position) { 35 obj[nom].remove(position); 36 faireCallbacks(obj['cbRemove' + Nom], obj, position); 37 }; 38 obj['cbRemove' + Nom] = []; 39 obj['onRemove' + Nom] = function(callback) { 40 obj['cbRemove' + Nom].push(callback); 41 }; 42 obj['move' + Nom] = function(from, to) { 43 var stuff = obj[nom][from]; 44 obj[nom].remove(from); 45 obj[nom].insert(stuff, to); 46 faireCallbacks(obj['cbMove' + Nom], obj, from, to); 47 }; 48 obj['cbMove' + Nom] = []; 49 obj['onMove' + Nom] = function(callback) { 50 obj['cbMove' + Nom].push(callback); 51 }; 52 } 53 54 // makeField(this, , new ()); 55 function makeField(obj, nom, defaultValue) { 56 var Nom = nom.charAt(0).toUpperCase() + nom.substring(1); 57 obj['_' + nom] = defaultValue; 58 obj[nom] = function(val) { 59 if (val === undefined) { 60 return obj['_' + nom]; 61 } else { 62 obj['_' + nom] = val; 63 faireCallbacks(obj['cbChange' + Nom], obj, val); 64 } 65 }; 66 obj['cbChange' + Nom] = []; 67 obj['onChange' + Nom] = function(callback) { 68 obj['cbChange' + Nom].push(callback); 69 }; 70 }