www

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

callbacks.js (2017B)


      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 (i === undefined)
     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 }