Browse Source

fix manually removing rules, code review

pull/2/head
gorhill 10 years ago
parent
commit
1626c3ecc6
  1. 98
      src/js/matrix.js

98
src/js/matrix.js

@ -107,6 +107,21 @@ Matrix.getColumnHeaders = function() {
/******************************************************************************/ /******************************************************************************/
var toBroaderHostname = function(hostname) {
var pos = hostname.indexOf('.');
if ( pos === -1 ) {
if ( hostname === '*' ) {
return '';
}
return '*';
}
return hostname.slice(pos + 1);
};
Matrix.toBroaderHostname = toBroaderHostname;
/******************************************************************************/
Matrix.prototype.reset = function() { Matrix.prototype.reset = function() {
this.switchedOn = {}; this.switchedOn = {};
this.rules = {}; this.rules = {};
@ -115,25 +130,48 @@ Matrix.prototype.reset = function() {
/******************************************************************************/ /******************************************************************************/
// Copy another matrix to self
// Copy another matrix to self. Do this incrementally to minimize impact on
// a live matrix.
Matrix.prototype.assign = function(other) { Matrix.prototype.assign = function(other) {
this.reset();
var k; var k;
// Remove rules not in other
for ( k in this.rules ) {
if ( this.rules.hasOwnProperty(k) === false ) {
continue;
}
if ( other.rules.hasOwnProperty(k) === false ) {
delete this.rules[k];
}
}
// Remove switches not in other
for ( k in this.switchedOn ) {
if ( this.switchedOn.hasOwnProperty(k) === false ) {
continue;
}
if ( other.switchedOn.hasOwnProperty(k) === false ) {
delete this.switchedOn[k];
}
}
// Add/change rules in other
for ( k in other.rules ) { for ( k in other.rules ) {
if ( other.rules.hasOwnProperty(k) === false ) { if ( other.rules.hasOwnProperty(k) === false ) {
continue; continue;
} }
this.rules[k] = other.rules[k]; this.rules[k] = other.rules[k];
} }
// Add/change switches in other
for ( k in other.switchedOn ) { for ( k in other.switchedOn ) {
if ( other.switchedOn.hasOwnProperty(k) === false ) { if ( other.switchedOn.hasOwnProperty(k) === false ) {
continue; continue;
} }
this.switchedOn[k] = other.switchedOn[k]; this.switchedOn[k] = other.switchedOn[k];
} }
return this;
}; };
// https://www.youtube.com/watch?v=e9RS4biqyAc
/******************************************************************************/ /******************************************************************************/
// If value is undefined, the switch is removed // If value is undefined, the switch is removed
@ -251,17 +289,11 @@ Matrix.prototype.evaluateCellZ = function(srcHostname, desHostname, type) {
} }
} }
// TODO: external rules? (for presets) // TODO: external rules? (for presets)
pos = s.indexOf('.');
if ( pos !== -1 ) {
s = s.slice(pos + 1);
continue;
}
if ( s !== '*' ) {
s = '*';
continue;
}
s = toBroaderHostname(s);
if ( s === '' ) {
break; break;
} }
}
// Preset blacklisted hostnames are blacklisted in global scope // Preset blacklisted hostnames are blacklisted in global scope
if ( type === '*' && µm.ubiquitousBlacklist.test(desHostname) ) { if ( type === '*' && µm.ubiquitousBlacklist.test(desHostname) ) {
return 1; return 1;
@ -345,17 +377,11 @@ Matrix.prototype.extractZRules = function(srcHostname, desHostname, out) {
if ( bitmap !== undefined ) { if ( bitmap !== undefined ) {
out[rule] = bitmap; out[rule] = bitmap;
} }
pos = s.indexOf('.');
if ( pos !== -1 ) {
s = s.slice(pos + 1);
continue;
}
if ( s !== '*' ) {
s = '*';
continue;
}
s = toBroaderHostname(s);
if ( s === '' ) {
break; break;
} }
}
}; };
/******************************************************************************/ /******************************************************************************/
@ -394,17 +420,11 @@ Matrix.prototype.evaluateSwitchZ = function(srcHostname) {
if ( b !== undefined ) { if ( b !== undefined ) {
return b; return b;
} }
pos = s.indexOf('.');
if ( pos !== -1 ) {
s = s.slice(pos + 1);
continue;
}
if ( s !== '*' ) {
s = '*';
continue;
}
s = toBroaderHostname(s);
if ( s === '' ) {
break; break;
} }
}
return true; return true;
}; };
@ -462,7 +482,8 @@ Matrix.prototype.toString = function() {
/******************************************************************************/ /******************************************************************************/
Matrix.prototype.fromString = function(text) {
Matrix.prototype.fromString = function(text, append) {
var matrix = append ? this : new Matrix();
var textEnd = text.length; var textEnd = text.length;
var lineBeg = 0, lineEnd; var lineBeg = 0, lineEnd;
var line, pos; var line, pos;
@ -534,7 +555,7 @@ Matrix.prototype.fromString = function(text) {
continue; continue;
} }
this.setSwitch(srcHostname, nameToSwitchMap[fieldVal]);
matrix.setSwitch(srcHostname, nameToSwitchMap[fieldVal]);
continue; continue;
} }
@ -588,7 +609,11 @@ Matrix.prototype.fromString = function(text) {
state = 2; state = 2;
} }
this.setCell(srcHostname, desHostname, type, state);
matrix.setCell(srcHostname, desHostname, type, state);
}
if ( !append ) {
this.assign(matrix);
} }
}; };
@ -644,15 +669,10 @@ Matrix.prototype.diff = function(other, srcHostname, desHostnames) {
}); });
} }
} }
if ( srcHostname === '*' ) {
srcHostname = toBroaderHostname(srcHostname);
if ( srcHostname === '' ) {
break; break;
} }
pos = srcHostname.indexOf('.');
if ( pos !== -1 ) {
srcHostname = srcHostname.slice(pos + 1);
} else {
srcHostname = '*';
}
} }
return out; return out;
}; };

Loading…
Cancel
Save