This app provides monitoring and information features for the common freifunk user and the technical stuff of a freifunk community.
Code base is taken from a TUM Practical Course project and added here to see if Freifunk Altdorf can use it.
https://www.freifunk-altdorf.de
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.9 KiB
55 lines
1.9 KiB
'use strict'; |
|
var $ = require('./$') |
|
, global = require('./$.global') |
|
, $export = require('./$.export') |
|
, fails = require('./$.fails') |
|
, hide = require('./$.hide') |
|
, redefineAll = require('./$.redefine-all') |
|
, forOf = require('./$.for-of') |
|
, strictNew = require('./$.strict-new') |
|
, isObject = require('./$.is-object') |
|
, setToStringTag = require('./$.set-to-string-tag') |
|
, DESCRIPTORS = require('./$.descriptors'); |
|
|
|
module.exports = function(NAME, wrapper, methods, common, IS_MAP, IS_WEAK){ |
|
var Base = global[NAME] |
|
, C = Base |
|
, ADDER = IS_MAP ? 'set' : 'add' |
|
, proto = C && C.prototype |
|
, O = {}; |
|
if(!DESCRIPTORS || typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function(){ |
|
new C().entries().next(); |
|
}))){ |
|
// create collection constructor |
|
C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER); |
|
redefineAll(C.prototype, methods); |
|
} else { |
|
C = wrapper(function(target, iterable){ |
|
strictNew(target, C, NAME); |
|
target._c = new Base; |
|
if(iterable != undefined)forOf(iterable, IS_MAP, target[ADDER], target); |
|
}); |
|
$.each.call('add,clear,delete,forEach,get,has,set,keys,values,entries'.split(','),function(KEY){ |
|
var IS_ADDER = KEY == 'add' || KEY == 'set'; |
|
if(KEY in proto && !(IS_WEAK && KEY == 'clear'))hide(C.prototype, KEY, function(a, b){ |
|
if(!IS_ADDER && IS_WEAK && !isObject(a))return KEY == 'get' ? undefined : false; |
|
var result = this._c[KEY](a === 0 ? 0 : a, b); |
|
return IS_ADDER ? this : result; |
|
}); |
|
}); |
|
if('size' in proto)$.setDesc(C.prototype, 'size', { |
|
get: function(){ |
|
return this._c.size; |
|
} |
|
}); |
|
} |
|
|
|
setToStringTag(C, NAME); |
|
|
|
O[NAME] = C; |
|
$export($export.G + $export.W + $export.F, O); |
|
|
|
if(!IS_WEAK)common.setStrong(C, NAME, IS_MAP); |
|
|
|
return C; |
|
}; |