doushio
Version:
Real-time imageboard
82 lines (70 loc) • 2.02 kB
JavaScript
var config = require('../config');
var common = require('../common');
var DEFINES = exports;
DEFINES.FETCH_ADDRESS = 101;
DEFINES.SET_ADDRESS_NAME = 102;
DEFINES.BAN = 103;
var modCache = {}; // TEMP
exports.modCache = modCache;
var delayNames = ['now', 'soon', 'later'];
var delayDurations = {now: 0, soon: 60, later: 20*60};
exports.delayDurations = delayDurations;
var mnemonicStarts = ',k,s,t,d,n,h,b,p,m,f,r,g,z,l,ch'.split(',');
var mnemonicEnds = "a,i,u,e,o,a,i,u,e,o,ya,yi,yu,ye,yo,'".split(',');
function ip_mnemonic(ip) {
if (!is_valid_ip(ip))
return '<bad IP>';
var nums = ip.split('.');
var mnemonic = '';
for (var i = 0; i < 4; i++) {
var n = parseInt(nums[i], 10);
var s = mnemonicStarts[Math.floor(n / 16)] +
mnemonicEnds[n % 16];
mnemonic += s;
}
return mnemonic;
}
function append_mnemonic(info) {
var header = info.header, ip = info.data.ip;
if (!ip)
return;
var mnemonic = config.IP_MNEMONIC && ip_mnemonic(ip);
// Terrible hack.
if (mnemonic && modCache.addresses) {
var addr = modCache.addresses[ip];
if (addr && addr.name)
mnemonic += ' "' + addr.name + '"';
}
var title = mnemonic ? ' title="'+escape(ip)+'"' : '';
header.push(common.safe(' <a class="mod addr"' + title + '>'),
mnemonic || ip, common.safe('</a>'));
}
function denote_hidden(info) {
if (info.data.hide)
info.header.push(common.safe(
' <em class="mod hidden">(hidden)</em>'));
}
exports.denote_hidden = denote_hidden;
function is_valid_ip(ip) {
if (typeof ip != 'string' || !/^\d+\.\d+\.\d+\.\d+$/.exec(ip))
return false;
var nums = ip.split('.');
for (var i = 0; i < 4; i++) {
var n = parseInt(nums[i], 10);
if (n > 255)
return false;
if (n && nums[i][0] == '0')
return false;
}
return true;
}
exports.is_valid_ip = is_valid_ip;
if (typeof IDENT != 'undefined') {
/* client */
window.ip_mnemonic = ip_mnemonic;
oneeSama.hook('headerName', append_mnemonic);
oneeSama.hook('headerName', denote_hidden);
}
else {
exports.append_mnemonic = append_mnemonic;
}