// numberlist.js (JavaScript) // Version 3 - Support more number systems // ©2011,2015,2022 Aivosto Oy, Finland // www.aivosto.com // Initialize variables var MAX = 256; // Default maximum number to list var titles = ["BCD","Unary","Binary","Ternary", "Quaternary", "Quinary", "Senary", "Septenary", "Octal", "", "Decimal", "Undecimal", "Dozenal"]; titles[16] = ["Hex"]; titles[20] = ["Vigesimal"]; titles[36] = ["Hexatrigesimal"]; titles[-2] = titles[-10] = titles[-26] = ["Bijective"]; var lastref = 0; function build() { // User clicked "List numbers" button var button = this; // Get type of list var x = parseInt(this.getAttribute('data-list')); // Get elements for status message and numberlist var msg = button.parentNode.parentNode.querySelector('p.building'); var list = button.parentNode.parentNode.querySelector('div.numberlist'); // Get maximum number to list MAX = button.parentNode.querySelector('select').value; if (MAX>100000) MAX = 100000; if (MAX<=0) { // No maximum. Hide list. list.hidden = true; return; } // Change element status during build button.disabled = true; // Disable button list.style.visibility = "hidden"; // Show blank in place of previous numberlist msg.hidden = false; // Show "Building list..." // Run the building functions setTimeout( function () { runbuild(x, button, list, msg) } ); } function runbuild(x, button, list, msg) { // Build numberlist // x==0: decimal, binary, octal, hexadecimal // x==1: decimal, base-3, base-4, base-5, base-6, base-7 // x==2: decimal, base-11, base-12, base-20, base-36 // x==3: decimal, unary // x==4: decimal, BDC, binary // x==5: decimal, bijective bases var T = ''; lastref++; T += "
"; switch (x) { case 0: T += createtable(lastref, [10, 2, 8, 16]); break; case 1: T += createtable(lastref, [10, 3, 4, 5, 6, 7]); break; case 2: T += createtable(lastref, [10, 11, 12, 20, 36]); break; case 3: T += createtable(lastref, [10, 1]); break; case 4: T += createtable(lastref, [10, 0, 2]); break; default: T += createtable(lastref, [10, -10, -2, -26]); break; } T += ""; // Display numberlist list.innerHTML = T; list.hidden = false; list.style.visibility = "visible"; button.disabled = false; // Re-enable button msg.hidden = true; // Hide "Building list..." } function createtable(lastref, rdx) { // Create a table of numbers in given radixes var d, rdx, c, row; var columns = rdx.length-1; // Build HTML table into T var T = "" + numbertoshow + ""; else if (radix == 0 && number.match(/^0001(0000)+$/)) // In BCD, emphasize each of 0001 0000, 0001 0000 0000, ... row += " | " + numbertoshow + ""; else if (radix <= -2 && number.match('^' + bijectivedigits[0] + '{2,}$')) // In bijective, emphasize 11, 111, 1111... or AA, AAA, AAAA... row += " | " + numbertoshow + ""; else if (Math.abs(radix) == 1) // Unary numbers have their own CSS class row += " | " + numbertoshow; else // Any other number row += " | " + numbertoshow; } T += row; } // Create table footer T += " | "; T += createheadfoot(columns, rdx); // Table ready T += "