Add objects class
This commit is contained in:
parent
a947263c0b
commit
a3494d822d
1 changed files with 107 additions and 0 deletions
107
utils/objects.js
Normal file
107
utils/objects.js
Normal file
|
@ -0,0 +1,107 @@
|
|||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
var o = null;
|
||||
|
||||
// TODO: https://github.com/MozillaSecurity/octo/issues/7
|
||||
|
||||
function Objects() {
|
||||
this.counter = 0;
|
||||
this.container = {};
|
||||
}
|
||||
|
||||
Objects.prototype.add = function (category, member) {
|
||||
member = member ? member : "o" + this.counter;
|
||||
if (!this.has(category)) {
|
||||
this.container[category] = [];
|
||||
}
|
||||
this.container[category].push({type: category, name: member});
|
||||
++this.counter;
|
||||
return this.container[category].slice(-1)[0].name;
|
||||
};
|
||||
|
||||
Objects.prototype.get = function (category, last) {
|
||||
if (!(category in this.container)) {
|
||||
//return {type:null, name:null};
|
||||
Utils.traceback();
|
||||
throw new Error(category + " is not available.");
|
||||
}
|
||||
if (last) {
|
||||
return this.container[category].slice(-1)[0];
|
||||
}
|
||||
return Random.index(this.container[category]);
|
||||
};
|
||||
|
||||
Objects.prototype.pick = function (category, last) {
|
||||
try {
|
||||
return this.get(category, last).name;
|
||||
} catch (e) {
|
||||
Utils.traceback();
|
||||
throw Logger.JSError("Error: pick(" + category + ") " + category + " is undefined.");
|
||||
}
|
||||
};
|
||||
|
||||
Objects.prototype.pop = function (objectName) {
|
||||
var self = this;
|
||||
Utils.getKeysFromHash(this.container).forEach(function (category) {
|
||||
self.container[category].forEach(function (obj) {
|
||||
if (obj.name == objectName) {
|
||||
self.container[category].splice(self.container[category].indexOf(obj), 1);
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
Objects.prototype.contains = function (categoryNames) {
|
||||
var categories = [], self = this;
|
||||
categoryNames.forEach(function (name) {
|
||||
if (self.has(name)) {
|
||||
categories.push(name);
|
||||
}
|
||||
});
|
||||
return (categories.length == 0) ? null : categories;
|
||||
};
|
||||
|
||||
Objects.prototype.show = function (category) {
|
||||
return (category in this.container) ? this.container[category] : this.container;
|
||||
};
|
||||
|
||||
Objects.prototype.count = function (category) {
|
||||
return (category in this.container) ? this.container[category].length : 0;
|
||||
};
|
||||
|
||||
Objects.prototype.has = function (category) {
|
||||
if (category in this.container) {
|
||||
this.check(category);
|
||||
return !!(this.container[category].length > 0);
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
Objects.prototype.valid = function () {
|
||||
var items = [], self = this;
|
||||
Utils.getKeysFromHash(self.container).forEach(function (category) {
|
||||
self.check(category);
|
||||
});
|
||||
Utils.getKeysFromHash(self.container).forEach(function (category) {
|
||||
for (var i = 0; i < self.container[category].length; i++) {
|
||||
items.push(self.container[category][i].name);
|
||||
}
|
||||
});
|
||||
return items;
|
||||
};
|
||||
|
||||
Objects.prototype.check = function (category) {
|
||||
var self = this;
|
||||
self.container[category].forEach(function (object) {
|
||||
try {
|
||||
var x = /*frame.contentWindow.*/eval(object.name);
|
||||
if (x === undefined || x == null) {
|
||||
self.pop(object.name);
|
||||
}
|
||||
} catch (e) {
|
||||
self.pop(object.name);
|
||||
}
|
||||
});
|
||||
};
|
Loading…
Reference in a new issue