summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimone Bortolin <simonebortolin@users.noreply.github.com>2022-12-27 15:41:59 +0100
committerSimone Bortolin <simonebortolin@users.noreply.github.com>2022-12-27 15:41:59 +0100
commit3b7853e472a32b84fd4dc7f55cb9565f47e04548 (patch)
tree153095d24f6785a80423b976b438d9cd902d0e40
parentadd some code (diff)
downloadhack-gpon.github.io-3b7853e472a32b84fd4dc7f55cb9565f47e04548.tar
hack-gpon.github.io-3b7853e472a32b84fd4dc7f55cb9565f47e04548.tar.gz
hack-gpon.github.io-3b7853e472a32b84fd4dc7f55cb9565f47e04548.tar.bz2
hack-gpon.github.io-3b7853e472a32b84fd4dc7f55cb9565f47e04548.tar.lz
hack-gpon.github.io-3b7853e472a32b84fd4dc7f55cb9565f47e04548.tar.xz
hack-gpon.github.io-3b7853e472a32b84fd4dc7f55cb9565f47e04548.tar.zst
hack-gpon.github.io-3b7853e472a32b84fd4dc7f55cb9565f47e04548.zip
-rw-r--r--_includes/js/custom.js584
1 files changed, 27 insertions, 557 deletions
diff --git a/_includes/js/custom.js b/_includes/js/custom.js
index 8329b37..3e14a68 100644
--- a/_includes/js/custom.js
+++ b/_includes/js/custom.js
@@ -1,528 +1,3 @@
-(function (jtd, undefined) {
-
-// Event handling
-
-jtd.addEvent = function(el, type, handler) {
- if (el.attachEvent) el.attachEvent('on'+type, handler); else el.addEventListener(type, handler);
-}
-jtd.removeEvent = function(el, type, handler) {
- if (el.detachEvent) el.detachEvent('on'+type, handler); else el.removeEventListener(type, handler);
-}
-jtd.onReady = function(ready) {
- // in case the document is already rendered
- if (document.readyState!='loading') ready();
- // modern browsers
- else if (document.addEventListener) document.addEventListener('DOMContentLoaded', ready);
- // IE <= 8
- else document.attachEvent('onreadystatechange', function(){
- if (document.readyState=='complete') ready();
- });
-}
-
-// Show/hide mobile menu
-
-function initNav() {
- jtd.addEvent(document, 'click', function(e){
- var target = e.target;
- while (target && !(target.classList && target.classList.contains('nav-list-expander'))) {
- target = target.parentNode;
- }
- if (target) {
- e.preventDefault();
- target.parentNode.classList.toggle('active');
- }
- });
-
- const siteNav = document.getElementById('site-nav');
- const mainHeader = document.getElementById('main-header');
- const menuButton = document.getElementById('menu-button');
-
- jtd.addEvent(menuButton, 'click', function(e){
- e.preventDefault();
-
- if (menuButton.classList.toggle('nav-open')) {
- siteNav.classList.add('nav-open');
- mainHeader.classList.add('nav-open');
- } else {
- siteNav.classList.remove('nav-open');
- mainHeader.classList.remove('nav-open');
- }
- });
-}
-// Site search
-
-function initSearch() {
- var request = new XMLHttpRequest();
- request.open('GET', '/assets/js/search-data.json', true);
-
- request.onload = function(){
- if (request.status >= 200 && request.status < 400) {
- var docs = JSON.parse(request.responseText);
-
- lunr.tokenizer.separator = /[\s/]+/
-
- var index = lunr(function(){
- this.ref('id');
- this.field('title', { boost: 200 });
- this.field('content', { boost: 2 });
- this.field('relUrl');
- this.metadataWhitelist = ['position']
-
- for (var i in docs) {
- this.add({
- id: i,
- title: docs[i].title,
- content: docs[i].content,
- relUrl: docs[i].relUrl
- });
- }
- });
-
- searchLoaded(index, docs);
- } else {
- console.log('Error loading ajax request. Request status:' + request.status);
- }
- };
-
- request.onerror = function(){
- console.log('There was a connection error');
- };
-
- request.send();
-}
-
-function searchLoaded(index, docs) {
- var index = index;
- var docs = docs;
- var searchInput = document.getElementById('search-input');
- var searchResults = document.getElementById('search-results');
- var mainHeader = document.getElementById('main-header');
- var currentInput;
- var currentSearchIndex = 0;
-
- function showSearch() {
- document.documentElement.classList.add('search-active');
- }
-
- function hideSearch() {
- document.documentElement.classList.remove('search-active');
- }
-
- function update() {
- currentSearchIndex++;
-
- var input = searchInput.value;
- if (input === '') {
- hideSearch();
- } else {
- showSearch();
- // scroll search input into view, workaround for iOS Safari
- window.scroll(0, -1);
- setTimeout(function(){ window.scroll(0, 0); }, 0);
- }
- if (input === currentInput) {
- return;
- }
- currentInput = input;
- searchResults.innerHTML = '';
- if (input === '') {
- return;
- }
-
- var results = index.query(function (query) {
- var tokens = lunr.tokenizer(input)
- query.term(tokens, {
- boost: 10
- });
- query.term(tokens, {
- wildcard: lunr.Query.wildcard.TRAILING
- });
- });
-
- if ((results.length == 0) && (input.length > 2)) {
- var tokens = lunr.tokenizer(input).filter(function(token, i) {
- return token.str.length < 20;
- })
- if (tokens.length > 0) {
- results = index.query(function (query) {
- query.term(tokens, {
- editDistance: Math.round(Math.sqrt(input.length / 2 - 1))
- });
- });
- }
- }
-
- if (results.length == 0) {
- var noResultsDiv = document.createElement('div');
- noResultsDiv.classList.add('search-no-result');
- noResultsDiv.innerText = 'No results found';
- searchResults.appendChild(noResultsDiv);
-
- } else {
- var resultsList = document.createElement('ul');
- resultsList.classList.add('search-results-list');
- searchResults.appendChild(resultsList);
-
- addResults(resultsList, results, 0, 10, 100, currentSearchIndex);
- }
-
- function addResults(resultsList, results, start, batchSize, batchMillis, searchIndex) {
- if (searchIndex != currentSearchIndex) {
- return;
- }
- for (var i = start; i < (start + batchSize); i++) {
- if (i == results.length) {
- return;
- }
- addResult(resultsList, results[i]);
- }
- setTimeout(function() {
- addResults(resultsList, results, start + batchSize, batchSize, batchMillis, searchIndex);
- }, batchMillis);
- }
-
- function addResult(resultsList, result) {
- var doc = docs[result.ref];
-
- var resultsListItem = document.createElement('li');
- resultsListItem.classList.add('search-results-list-item');
- resultsList.appendChild(resultsListItem);
-
- var resultLink = document.createElement('a');
- resultLink.classList.add('search-result');
- resultLink.setAttribute('href', doc.url);
- resultsListItem.appendChild(resultLink);
-
- var resultTitle = document.createElement('div');
- resultTitle.classList.add('search-result-title');
- resultLink.appendChild(resultTitle);
-
- var resultDoc = document.createElement('div');
- resultDoc.classList.add('search-result-doc');
- resultDoc.innerHTML = '<svg viewBox="0 0 24 24" class="search-result-icon"><use xlink:href="#svg-doc"></use></svg>';
- resultTitle.appendChild(resultDoc);
-
- var resultDocTitle = document.createElement('div');
- resultDocTitle.classList.add('search-result-doc-title');
- resultDocTitle.innerHTML = doc.doc;
- resultDoc.appendChild(resultDocTitle);
- var resultDocOrSection = resultDocTitle;
-
- if (doc.doc != doc.title) {
- resultDoc.classList.add('search-result-doc-parent');
- var resultSection = document.createElement('div');
- resultSection.classList.add('search-result-section');
- resultSection.innerHTML = doc.title;
- resultTitle.appendChild(resultSection);
- resultDocOrSection = resultSection;
- }
-
- var metadata = result.matchData.metadata;
- var titlePositions = [];
- var contentPositions = [];
- for (var j in metadata) {
- var meta = metadata[j];
- if (meta.title) {
- var positions = meta.title.position;
- for (var k in positions) {
- titlePositions.push(positions[k]);
- }
- }
- if (meta.content) {
- var positions = meta.content.position;
- for (var k in positions) {
- var position = positions[k];
- var previewStart = position[0];
- var previewEnd = position[0] + position[1];
- var ellipsesBefore = true;
- var ellipsesAfter = true;
- for (var k = 0; k < 5; k++) {
- var nextSpace = doc.content.lastIndexOf(' ', previewStart - 2);
- var nextDot = doc.content.lastIndexOf('. ', previewStart - 2);
- if ((nextDot >= 0) && (nextDot > nextSpace)) {
- previewStart = nextDot + 1;
- ellipsesBefore = false;
- break;
- }
- if (nextSpace < 0) {
- previewStart = 0;
- ellipsesBefore = false;
- break;
- }
- previewStart = nextSpace + 1;
- }
- for (var k = 0; k < 10; k++) {
- var nextSpace = doc.content.indexOf(' ', previewEnd + 1);
- var nextDot = doc.content.indexOf('. ', previewEnd + 1);
- if ((nextDot >= 0) && (nextDot < nextSpace)) {
- previewEnd = nextDot;
- ellipsesAfter = false;
- break;
- }
- if (nextSpace < 0) {
- previewEnd = doc.content.length;
- ellipsesAfter = false;
- break;
- }
- previewEnd = nextSpace;
- }
- contentPositions.push({
- highlight: position,
- previewStart: previewStart, previewEnd: previewEnd,
- ellipsesBefore: ellipsesBefore, ellipsesAfter: ellipsesAfter
- });
- }
- }
- }
-
- if (titlePositions.length > 0) {
- titlePositions.sort(function(p1, p2){ return p1[0] - p2[0] });
- resultDocOrSection.innerHTML = '';
- addHighlightedText(resultDocOrSection, doc.title, 0, doc.title.length, titlePositions);
- }
-
- if (contentPositions.length > 0) {
- contentPositions.sort(function(p1, p2){ return p1.highlight[0] - p2.highlight[0] });
- var contentPosition = contentPositions[0];
- var previewPosition = {
- highlight: [contentPosition.highlight],
- previewStart: contentPosition.previewStart, previewEnd: contentPosition.previewEnd,
- ellipsesBefore: contentPosition.ellipsesBefore, ellipsesAfter: contentPosition.ellipsesAfter
- };
- var previewPositions = [previewPosition];
- for (var j = 1; j < contentPositions.length; j++) {
- contentPosition = contentPositions[j];
- if (previewPosition.previewEnd < contentPosition.previewStart) {
- previewPosition = {
- highlight: [contentPosition.highlight],
- previewStart: contentPosition.previewStart, previewEnd: contentPosition.previewEnd,
- ellipsesBefore: contentPosition.ellipsesBefore, ellipsesAfter: contentPosition.ellipsesAfter
- }
- previewPositions.push(previewPosition);
- } else {
- previewPosition.highlight.push(contentPosition.highlight);
- previewPosition.previewEnd = contentPosition.previewEnd;
- previewPosition.ellipsesAfter = contentPosition.ellipsesAfter;
- }
- }
-
- var resultPreviews = document.createElement('div');
- resultPreviews.classList.add('search-result-previews');
- resultLink.appendChild(resultPreviews);
-
- var content = doc.content;
- for (var j = 0; j < Math.min(previewPositions.length, 3); j++) {
- var position = previewPositions[j];
-
- var resultPreview = document.createElement('div');
- resultPreview.classList.add('search-result-preview');
- resultPreviews.appendChild(resultPreview);
-
- if (position.ellipsesBefore) {
- resultPreview.appendChild(document.createTextNode('... '));
- }
- addHighlightedText(resultPreview, content, position.previewStart, position.previewEnd, position.highlight);
- if (position.ellipsesAfter) {
- resultPreview.appendChild(document.createTextNode(' ...'));
- }
- }
- }
- var resultRelUrl = document.createElement('span');
- resultRelUrl.classList.add('search-result-rel-url');
- resultRelUrl.innerText = doc.relUrl;
- resultTitle.appendChild(resultRelUrl);
- }
-
- function addHighlightedText(parent, text, start, end, positions) {
- var index = start;
- for (var i in positions) {
- var position = positions[i];
- var span = document.createElement('span');
- span.innerHTML = text.substring(index, position[0]);
- parent.appendChild(span);
- index = position[0] + position[1];
- var highlight = document.createElement('span');
- highlight.classList.add('search-result-highlight');
- highlight.innerHTML = text.substring(position[0], index);
- parent.appendChild(highlight);
- }
- var span = document.createElement('span');
- span.innerHTML = text.substring(index, end);
- parent.appendChild(span);
- }
- }
-
- jtd.addEvent(searchInput, 'focus', function(){
- setTimeout(update, 0);
- });
-
- jtd.addEvent(searchInput, 'keyup', function(e){
- switch (e.keyCode) {
- case 27: // When esc key is pressed, hide the results and clear the field
- searchInput.value = '';
- break;
- case 38: // arrow up
- case 40: // arrow down
- case 13: // enter
- e.preventDefault();
- return;
- }
- update();
- });
-
- jtd.addEvent(searchInput, 'keydown', function(e){
- switch (e.keyCode) {
- case 38: // arrow up
- e.preventDefault();
- var active = document.querySelector('.search-result.active');
- if (active) {
- active.classList.remove('active');
- if (active.parentElement.previousSibling) {
- var previous = active.parentElement.previousSibling.querySelector('.search-result');
- previous.classList.add('active');
- }
- }
- return;
- case 40: // arrow down
- e.preventDefault();
- var active = document.querySelector('.search-result.active');
- if (active) {
- if (active.parentElement.nextSibling) {
- var next = active.parentElement.nextSibling.querySelector('.search-result');
- active.classList.remove('active');
- next.classList.add('active');
- }
- } else {
- var next = document.querySelector('.search-result');
- if (next) {
- next.classList.add('active');
- }
- }
- return;
- case 13: // enter
- e.preventDefault();
- var active = document.querySelector('.search-result.active');
- if (active) {
- active.click();
- } else {
- var first = document.querySelector('.search-result');
- if (first) {
- first.click();
- }
- }
- return;
- }
- });
-
- jtd.addEvent(document, 'click', function(e){
- if (e.target != searchInput) {
- hideSearch();
- }
- });
-}
-
-// Switch theme
-
-jtd.getTheme = function() {
- var cssFile = document.querySelector('[rel="stylesheet"]');
- if(cssFile.hasAttribute('media')) return 'auto';
-
- var cssFileHref = cssFile.getAttribute('href');
- return cssFileHref.substring(cssFileHref.lastIndexOf('-') + 1, cssFileHref.length - 4);
-}
-
-jtd.setTheme = function(theme) {
- var cssFile = document.querySelector('[rel="stylesheet"]');
- var cssFiles = [...document.querySelectorAll('[rel="stylesheet"]')];
- var cssFile = cssFiles[0];
- if(cssFiles.length >= 1) {
- cssFiles.shift();
- cssFiles.forEach(it => it.remove());
- cssFile.removeAttribute('media');
- }
- if(theme === "auto") {
- cssFile.setAttribute('href', '/assets/css/just-the-docs-light.css');
- cssFile.setAttribute('media', '(prefers-color-scheme: light)');
- cssFile.insertAdjacentHTML('afterend', `<link rel="stylesheet" href="/assets/css/just-the-docs-dark.css" media="(prefers-color-scheme: dark)">`);
- } else {
- cssFile.setAttribute('href', '/assets/css/just-the-docs-' + theme + '.css');
- }
-}
-
-jtd.switchThemeButton = function(button, event) {
- const themes = ["auto", "light", "dark"];
- var currentTheme = jtd.getTheme();
- var nextTheme = themes[(themes.indexOf(currentTheme)+1)%themes.length];
- jtd.setTheme(nextTheme);
- button.getElementsByTagName('svg')[0].getElementsByTagName('use')[0].setAttribute('href',`#svg-${nextTheme}`);
-}
-
-function initSwitchThemeButton() {
- var buttons = [...document.getElementsByClassName("color-scheme-switch-theme-button")];
- buttons.forEach(button => jtd.addEvent(button, 'click', event => jtd.switchThemeButton(button, event)));
-}
-
-// Scroll site-nav to ensure the link to the current page is visible
-
-function scrollNav() {
- const href = document.location.pathname;
- const siteNav = document.getElementById('site-nav');
- const targetLink = siteNav.querySelector('a[href="' + href + '"], a[href="' + href + '/"]');
- if(targetLink){
- const rect = targetLink.getBoundingClientRect();
- siteNav.scrollBy(0, rect.top - 3*rect.height);
- }
-}
-
-// Document ready
-
-jtd.onReady(function(){
- initNav();
- initSearch();
- initSwitchThemeButton();
- scrollNav();
-});
-
-// Copy button on code
-
-jtd.onReady(function(){
-
- var codeBlocks = document.querySelectorAll('div.highlighter-rouge, div.listingblock, figure.highlight');
-
- var svgCopied = '<svg viewBox="0 0 24 24" class="copy-icon"><use xlink:href="#svg-copied"></use></svg>';
- var svgCopy = '<svg viewBox="0 0 24 24" class="copy-icon"><use xlink:href="#svg-copy"></use></svg>';
-
- codeBlocks.forEach(codeBlock => {
- var copyButton = document.createElement('button');
- var timeout = null;
- copyButton.type = 'button';
- copyButton.ariaLabel = 'Copy code to clipboard';
- copyButton.innerHTML = svgCopy;
- codeBlock.append(copyButton);
-
- copyButton.addEventListener('click', function () {
- if(timeout === null) {
- var code = codeBlock.querySelector('code').innerText.trim();
- window.navigator.clipboard.writeText(code);
-
- copyButton.innerHTML = svgCopied;
-
- var timeoutSetting = 4000;
-
- timeout = setTimeout(function () {
- copyButton.innerHTML = svgCopy;
- timeout = null;
- }, timeoutSetting);
- }
- });
- });
-
-});
-
-})(window.jtd = window.jtd || {});
-
-
-
class uuencoding {
/**
* uuencode a value
@@ -664,7 +139,7 @@ class uuencoding {
outBytes[outIndex + 2] = b3 & 0xFF;
}
}
-
+/*
class asciiHex {
static asciiToHex(str, prefix = "0x", glue = " ") {
var prefixi = glue !== "" ? prefix : "";
@@ -679,7 +154,7 @@ class asciiHex {
return ascii;
}
}
-/*
+
class gponSerial {
#vendor;
#progressive;
@@ -748,93 +223,88 @@ class gponPloam {
}*/
class eeprom1 {
- hex;
-
+ #hex;
constructor(hex) {
- this.hex = hex;
+ this.#hex = [...hex];
}
getPart = function(startIndex, endIndex) {
- return this.hex.slice(startIndex*2, (endIndex+1)*2);
+ return this.#hex.slice(startIndex*2, (endIndex+1)*2).join('');
}
setPart = function(startIndex, endIndex, value) {
let calcLength = (endIndex+1-startIndex)*2;
- console.log(value.length);
if(value.length != calcLength) {
value += '0'.repeat(calcLength-value.length);
- }
- console.log(calcLength);
- console.log(value.length);
- /*for(var i = startIndex, j =0; i<= endIndex; i++, j++) {
- this.hex[i*2] = value[i*2];
- this.hex[i*2+1] = value[i*2+1];
- }*/
-
- this.hex.splice(startIndex, calcLength, ...value);
+ }
+ this.#hex.splice(startIndex, calcLength, ...[...value]);
+ }
+
+ getHex() {
+ return this.#hex.join('');
}
- get serial() {
+ getSerial() {
return this.getPart(233, 240);
}
- set serial(value) {
+ setSerial(value) {
this.setPart(233, 240, value);
}
- get ploam() {
+ getPloam() {
return this.getPart(191, 214);
}
- set ploam(value) {
+ setPloam(value) {
this.setPart(191, 214, value);
}
- get loid() {
+ getLoid() {
return this.getPart(191, 214);
}
- set loid(value) {
+ setLoid(value) {
this.setPart(191, 214, value);
}
- get lpwd() {
+ getLpwd() {
return this.getPart(215, 231);
}
- set lpwd(value) {
+ setLpwd(value) {
this.setPart(215, 231, value);
}
- get loidPloamSwitch() {
+ getLoidPloamSwitch() {
return this.getPart(232, 232);
}
- set loidPloamSwitch(value) {
+ setLoidPloamSwitch(value) {
this.setPart(232, 232, value);
}
- get equipmentID() {
+ getEquipmentID() {
return this.getPart(512, 531);
}
- set equipmentID(value) {
+ setEquipmentID(value) {
this.setPart(512, 531, value);
}
- get vendorID() {
+ getVendorID() {
return this.getPart(532, 535);
}
- set vendorID(value) {
+ setVendorID(value) {
this.setPart(532, 535, value);
}
- get macAddress() {
+ getMacAddress() {
return this.getPart(384, 389);
}
- set macAddress(value) {
+ setMacAddress(value) {
this.setPart(384, 389, value);
}
}