'use strict';
var constants4 = require('../v4/constants.js');
var helpers = require('./helpers.js');
var sprintf = require('sprintf-js').sprintf;
/**
* @returns {String} the address in link form with a default port of 80
*/
exports.href = function (optionalPort) {
if (optionalPort === undefined) {
optionalPort = '';
} else {
optionalPort = sprintf(':%s', optionalPort);
}
return sprintf('http://[%s]%s/', this.correctForm(), optionalPort);
};
/**
* @returns {String} a link suitable for conveying the address via a URL hash
*/
exports.link = function (options) {
if (!options) {
options = {};
}
if (options.className === undefined) {
options.className = '';
}
if (options.prefix === undefined) {
options.prefix = '/#address=';
}
if (options.v4 === undefined) {
options.v4 = false;
}
var formFunction = this.correctForm;
if (options.v4) {
formFunction = this.to4in6;
}
if (options.className) {
return sprintf('%2$s',
options.prefix, formFunction.call(this), options.className);
}
return sprintf('%2$s', options.prefix,
formFunction.call(this));
};
/**
* Groups an address
* @returns {String}
*/
exports.group = function () {
var address4 = this.address.match(constants4.RE_ADDRESS);
var i;
if (address4) {
// The IPv4 case
var segments = address4[0].split('.');
this.address = this.address.replace(constants4.RE_ADDRESS,
sprintf('%s' +
'.' +
'%s',
segments.slice(0, 2).join('.'),
segments.slice(2, 4).join('.')));
}
if (this.elidedGroups === 0) {
// The simple case
return helpers.simpleGroup(this.address);
}
// The elided case
var output = [];
var halves = this.address.split('::');
if (halves[0].length) {
output.push(helpers.simpleGroup(halves[0]));
} else {
output.push('');
}
var classes = ['hover-group'];
for (i = this.elisionBegin;
i < this.elisionBegin + this.elidedGroups; i++) {
classes.push(sprintf('group-%d', i));
}
output.push(sprintf('', classes.join(' ')));
if (halves[1].length) {
output.push(helpers.simpleGroup(halves[1], this.elisionEnd));
} else {
output.push('');
}
return output.join(':');
};