octo-deno/lib/utils/objects.js

112 lines
2.9 KiB
JavaScript
Raw Normal View History

2017-04-22 22:49:49 +00:00
/* 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
2017-04-22 22:49:49 +00:00
// TODO: https://github.com/MozillaSecurity/octo/issues/7
function Objects () {
this.counter = 0
this.container = {}
2017-04-22 22:49:49 +00:00
}
Objects.prototype.add = function (category, member) {
if (!member) {
member = 'o' + this.counter
}
2017-04-22 22:49:49 +00:00
if (!this.has(category)) {
this.container[category] = []
2017-04-22 22:49:49 +00:00
}
this.container[category].push({type: category, name: member})
++this.counter
return this.container[category].slice(-1)[0].name
}
2017-04-22 22:49:49 +00:00
Objects.prototype.get = function (category, last) {
if (!(category in this.container)) {
// return {type:null, name:null};
2017-04-25 22:28:31 +00:00
logger.traceback()
throw new Error(category + ' is not available.')
2017-04-22 22:49:49 +00:00
}
if (last) {
return this.container[category].slice(-1)[0]
2017-04-22 22:49:49 +00:00
}
return random.index(this.container[category])
}
2017-04-22 22:49:49 +00:00
Objects.prototype.pick = function (category, last) {
try {
return this.get(category, last).name
2017-04-22 22:49:49 +00:00
} catch (e) {
2017-04-25 22:28:31 +00:00
logger.traceback()
throw logger.JSError('Error: pick(' + category + ') ' + category + ' is undefined.')
2017-04-22 22:49:49 +00:00
}
}
2017-04-22 22:49:49 +00:00
Objects.prototype.pop = function (objectName) {
var self = this
utils.getKeysFromHash(this.container).forEach(function (category) {
2017-04-22 22:49:49 +00:00
self.container[category].forEach(function (obj) {
2017-04-25 15:22:15 +00:00
if (obj.name === objectName) {
self.container[category].splice(self.container[category].indexOf(obj), 1)
2017-04-22 22:49:49 +00:00
}
})
})
}
2017-04-22 22:49:49 +00:00
Objects.prototype.contains = function (categoryNames) {
var categories = []
var self = this
2017-04-22 22:49:49 +00:00
categoryNames.forEach(function (name) {
if (self.has(name)) {
categories.push(name)
2017-04-22 22:49:49 +00:00
}
})
return (categories.length === 0) ? null : categories
}
2017-04-22 22:49:49 +00:00
Objects.prototype.show = function (category) {
return (category in this.container) ? this.container[category] : this.container
}
2017-04-22 22:49:49 +00:00
Objects.prototype.count = function (category) {
return (category in this.container) ? this.container[category].length : 0
}
2017-04-22 22:49:49 +00:00
Objects.prototype.has = function (category) {
if (category in this.container) {
this.check(category)
return !!(this.container[category].length > 0)
2017-04-22 22:49:49 +00:00
}
return false
}
2017-04-22 22:49:49 +00:00
Objects.prototype.valid = function () {
var items = []
var self = this
utils.common.getKeysFromHash(self.container).forEach(function (category) {
self.check(category)
})
utils.common.getKeysFromHash(self.container).forEach(function (category) {
2017-04-22 22:49:49 +00:00
for (var i = 0; i < self.container[category].length; i++) {
items.push(self.container[category][i].name)
2017-04-22 22:49:49 +00:00
}
})
return items
}
2017-04-22 22:49:49 +00:00
Objects.prototype.check = function (category) {
var self = this
2017-04-22 22:49:49 +00:00
self.container[category].forEach(function (object) {
try {
let x = /* frame.contentWindow. */ eval(object.name) // eslint-disable-line no-eval
2017-04-25 15:22:15 +00:00
if (x === undefined || x === null) {
self.pop(object.name)
2017-04-22 22:49:49 +00:00
}
} catch (e) {
self.pop(object.name)
2017-04-22 22:49:49 +00:00
}
})
}