User:Func/wpfunc/blockiphelp.js
From Wikipedia, the free encyclopedia
Note: After saving, you have to bypass your browser's cache to see the changes. Firefox/Mozilla/Safari: hold down Shift while clicking Reload (or press Ctrl-Shift-R), Internet Explorer: press Ctrl-F5, Opera/Konqueror: press F5.
// <pre><nowiki> function BlockIpHelp() { var form = document.getElementById( 'blockip' ); if ( ! form || form.tagName != 'FORM' || ! form.wpBlockAddress ) return; var span = document.createElement( 'SPAN' ); form.span = span; // avoid globals // to the right of the IP or username field // form.wpBlockAddress.parentNode.insertBefore( span, form.wpBlockAddress.nextSibling ); function ipMessage( message, selectedIndex, color ) { var span = document.createElement( 'SPAN' ); span.appendChild( document.createTextNode( ' ' + ( message || '' ) ) ); span.style.color = color || '#000000'; span.style.fontWeight = 'bold'; span.selectedIndex = selectedIndex || 0; return span; } var expiry = { 'other' : 0, '15 minutes' : 1, '1 hour' : 2, '3 hours' : 3, '24 hours' : 4, '48 hours' : 5, '1 week' : 6, '1 month' : 7, 'indefinite' : 8 }; span.ipNone = ipMessage(); span.ipNot = ipMessage( 'Not an IP.' , expiry[ '24 hours' ], '#009900' ); // green span.ipUnknown = ipMessage( 'Unknown IP.' , expiry[ '1 hour' ], '#999900' ); // yellow span.ipAOL = ipMessage( 'AOL IP address.', expiry[ '15 minutes' ], '#990000' ); // red span.appendChild( span.ipNot ); // place holder span.showMessage = function( span ) { this.replaceChild( span, this.firstChild ); } form.wpBlockAddress.onchange = function() { var ip = IpDottedToLong( this.value ); if ( ip === null ) this.form.span.showMessage( this.form.span.ipNone ); else if ( isNaN( ip ) ) this.form.span.showMessage( this.form.span.ipNot ); else if ( IsAOL( ip ) ) this.form.span.showMessage( this.form.span.ipAOL ); // what else, EarthLink? else this.form.span.showMessage( this.form.span.ipUnknown ); this.form.wpBlockExpiry.selectedIndex = this.form.span.selectedIndex; } form.wpBlockAddress.onchange(); } if ( window.addEventListener ) window.addEventListener( 'load', BlockIpHelp, false ); else if ( window.attachEvent ) window.attachEvent( 'onload', BlockIpHelp ); function IpDottedToLong( ip ) //-> number, Number.NaN for username, or null { if ( ! ip ) return null; if ( ( ip.constructor != String ) || ( (ip = ip.split( '.' )).length != 4 ) ) return Number.NaN; // for ( var i = 0; i < 4; i++ ) if ( isNaN( ip[ i ] = Number( ip[ i ] ) ) || ip[ i ] < 0 || ip[ i ] > 255 ) return Number.NaN; // I "think" JavaScript numbers can handle this.... // return ip[ 0 ] * 256 * 256 * 256 + // JS lacks an exponent op, I refuse to use Math.pow() ip[ 1 ] * 256 * 256 + ip[ 2 ] * 256 + ip[ 3 ]; } function IsAOL( ip ) { if ( ip < 1074528256 ) return false; // 64. 12. 0. 0 .. else if ( ip <= 1074593791 ) return true; // .255.255 else if ( ip < 2511208448 ) return false; // 149.174. 0. 0 .. else if ( ip <= 2511273983 ) return true; // .255.255 else if ( ip < 2560819200 ) return false; // 152.163. 0. 0 .. else if ( ip <= 2560884735 ) return true; // .255.255 else if ( ip < 2894069760 ) return false; // 172.128. 0. 0 .. else if ( ip <= 2899574783 ) return true; // .211.255.255 else if ( ip < 3277651968 ) return false; // 195. 93. 0. 0 .. else if ( ip <= 3277684735 ) return true; // .127.255 else if ( ip < 3327197184 ) return false; // 198. 81. 0. 0 .. else if ( ip <= 3327205375 ) return true; // . 31.255 else if ( ip < 3393404928 ) return false; // 202. 67. 64. 0 .. else if ( ip <= 3393421311 ) return true; // .127.255 else if ( ip < 3451650048 ) return false; // 205.188. 0. 0 .. else if ( ip <= 3451715583 ) return true; // .255.255 else if ( ip < 3486007296 ) return false; // 207.200. 64. 0 .. else if ( ip <= 3486023679 ) return true; // .127.255 else return false; } // </nowiki></pre>