summaryrefslogtreecommitdiff
path: root/src/index.js
diff options
context:
space:
mode:
authorYuval Adam <_@yuv.al>2024-09-21 13:15:44 +0200
committerYuval Adam <_@yuv.al>2024-09-21 15:13:25 +0200
commit65e7041a3c88a5b2d1ae76e7023807537775cb1b (patch)
treec21fe6cc3f137e2f0c13c0c184f9f59581a6639a /src/index.js
parent6ed566ac4f30e1aa8b7a817c22912c50ee136f86 (diff)
Initial NextJS project creation with basic structure
Diffstat (limited to 'src/index.js')
-rw-r--r--src/index.js201
1 files changed, 0 insertions, 201 deletions
diff --git a/src/index.js b/src/index.js
deleted file mode 100644
index c7017aa..0000000
--- a/src/index.js
+++ /dev/null
@@ -1,201 +0,0 @@
-import './style.scss';
-
-import { Netmask } from 'netmask';
-import React, { Component } from 'react';
-import ReactDOM from 'react-dom';
-
-class IPAddress extends Component {
- constructor(props) {
- super(props);
- this.state = {
- octets: [10, 88, 135, 144],
- cidr: 28
- };
- this.handleChange = this.handleChange.bind(this);
- this.handleKeyDown = this.handleKeyDown.bind(this);
- this.handlePaste = this.handlePaste.bind(this);
- this.handleWheel = this.handleWheel.bind(this);
- }
-
- handleChange(event) {
- var octets = this.state.octets;
- var val = +event.target.value.replace(/[^0-9]/g, '');
- var octet = event.target.attributes['data-octet'].value;
- if (octet == 'cidr') {
- if (val <= 32) {
- this.setState({
- cidr: val
- });
- }
- } else {
- if (val <= 255) {
- octets[+octet] = val;
- this.setState({
- octets: octets
- });
- }
- }
- }
-
- handleKeyDown(event) {
- var lowerOctetValue = 0;
- var higherOctetValue = event.target.dataset.octet === 'cidr' ? 32 : 255;
- if (event.key === 'ArrowDown' && event.target.value > lowerOctetValue) {
- event.target.value = +event.target.value - 1;
- this.handleChange(event);
- }
- if (event.key === 'ArrowUp' && event.target.value < higherOctetValue) {
- event.target.value = +event.target.value + 1;
- this.handleChange(event);
- }
- if (event.key === '.') {
- event.preventDefault()
- var octet_input = event.target.parentNode.nextSibling.firstChild
- if (octet_input instanceof HTMLInputElement) {
- octet_input.select()
- octet_input.focus()
- }
- }
- if (event.key === '/') {
- event.preventDefault()
- var mask_input = event.target.parentNode.nextSibling
- if (mask_input instanceof HTMLInputElement) {
- mask_input.select()
- mask_input.focus()
- }
- }
- }
-
- handlePaste(event) {
- const pasteText = event.clipboardData.getData('Text');
- var details = new Netmask(pasteText);
- const cidrParts = details.toString().split('/');
- var octets = this.state.octets;
- const octetParts = cidrParts[0].split('.');
- octetParts.map((octet, i) => {
- octets[i] = octet;
- })
- this.setState({
- octets: octets
- });
-
- if (+cidrParts[1] <= 32) {
- this.setState({
- cidr: +cidrParts[1]
- });
- }
- }
-
- handleWheel(event) {
- var lowerOctetValue = 0;
- var higherOctetValue = event.target.dataset.octet === 'cidr' ? 32 : 255;
- if (event.deltaY > 0 && event.target.value > lowerOctetValue) {
- event.target.value = +event.target.value - 1;
- this.handleChange(event);
- }
- if (event.deltaY < 0 && event.target.value < higherOctetValue) {
- event.target.value = +event.target.value + 1;
- this.handleChange(event);
- }
- }
-
- getPretty() {
- return this.state.octets.join('.') + '/' + this.state.cidr;
- }
-
- render() {
- var details = new Netmask(this.getPretty());
-
- return (
- <div className="ip-address">
- <div className="address">
- {[...Array(4)].map((x, octet) => (
- <span className="octet">
- <input
- className="octet"
- type="text"
- data-octet={octet}
- aria-label={"octet "+ octet}
- onChange={this.handleChange}
- onKeyDown={this.handleKeyDown}
- onPaste={this.handlePaste}
- onWheel={this.handleWheel}
- value={this.state.octets[octet]}
- />
- <span className="dot">{octet == '3' ? '/' : '.'}</span>
- </span>
- ))}
- <input
- className="cidr"
- type="text"
- data-octet="cidr"
- aria-label="cidr mask"
- onChange={this.handleChange}
- onKeyDown={this.handleKeyDown}
- onPaste={this.handlePaste}
- onWheel={this.handleWheel}
- value={this.state.cidr}
- />
- </div>
-
- <div className="bits">
- <ol>
- {[...Array(4)].map((x, octet) => (
- <li className="octet">
- <ol>
- {[...Array(8)].map((x, bit) => (
- <li
- className={
- octet * 8 + bit > this.state.cidr - 1
- ? 'bit masked'
- : 'bit unmasked'
- }
- >
- {(this.state.octets[octet] & (1 << (7 - bit))) >>
- (7 - bit)}
- </li>
- ))}
- </ol>
- </li>
- ))}
- </ol>
- </div>
-
- <div className="details">
- <span className="netmask">
- <span className="value">{details.mask}</span>
- <span className="label">Netmask</span>
- </span>
- <span className="base">
- <span className="value">{details.base}</span>
- <span className="label">CIDR Base IP</span>
- </span>
- <span className="broadcast">
- <span className="value">{details.broadcast}</span>
- <span className="label">Broadcast IP</span>
- </span>
- <span className="count">
- <span className="value">{details.size.toLocaleString()}</span>
- <span className="label">Count</span>
- </span>
- </div>
-
- <div className="break">
- </div>
-
- <div className="usable">
- <span className="first">
- <span className="value">{details.first}</span>
- <span className="label">First Usable IP</span>
- </span>
- <span className="last">
- <span className="value">{details.last}</span>
- <span className="label">Last Usable IP</span>
- </span>
- </div>
- </div>
- );
- }
-}
-
-ReactDOM.render(<IPAddress />, document.getElementById('app'));