blob: ad3e6c43410dba6aa1d23e254022335816bdf3aa (
plain) (
tree)
|
|
function ip2long(IP) {
var i = 0;
IP = IP.match(/^([1-9]\d*|0[0-7]*|0x[\da-f]+)(?:\.([1-9]\d*|0[0-7]*|0x[\da-f]+))?(?:\.([1-9]\d*|0[0-7]*|0x[\da-f]+))?(?:\.([1-9]\d*|0[0-7]*|0x[\da-f]+))?$/i);
if (!IP) {
return false;
}
IP.push(0, 0, 0, 0);
for (i = 1; i < 5; i += 1) {
IP[i] = parseInt(IP[i]) || 0;
if (IP[i] < 0 || IP[i] > 255)
return false;
}
return IP[1] * 16777216 + IP[2] * 65536 + IP[3] * 256 + IP[4] * 1;
}
function long2ip(a) {
return [
a >>> 24,
255 & a >>> 16,
255 & a >>> 8,
255 & a
].join('.');
}
function cidrToRange(cidr) {
var range = [2];
cidr = cidr.split('/');
var cidr_1 = parseInt(cidr[1]);
if (cidr_1 <= 0 || cidr_1 > 32)
return false;
var param = ip2long(cidr[0]);
if (param === false)
return false;
range[0] = long2ip((param) & ((-1 << (32 - cidr_1))));
var start = ip2long(range[0]);
range[1] = long2ip(start + Math.pow(2, (32 - cidr_1)) - 1);
return range;
}
/**
* Add listener to start IP input; when it loses focus, see if we have a
* CIDR notation and fill out start+end field.
*/
function slxAttachCidr() {
$('.cidrmagic').each(function () {
var t = $(this);
var s = t.find('input.cidrstart');
var e = t.find('input.cidrend');
if (!s || !e)
return;
t.removeClass('cidrmagic');
s.focusout(function () {
var val = s.val();
if (val.match(/^[0-9]+\.[0-9]+(\.[0-9]+(\.[0-9]+)?)?\/[0-9]{2}$/)) {
var res = cidrToRange(val);
if (res === false)
return;
s.val(res[0]);
e.val(res[1]);
}
});
});
}
// Attach
slxAttachCidr();
|