Last active
January 6, 2024 10:52
-
-
Save sjmf/71d7d8e57b414b91694a23d68e1ab7df to your computer and use it in GitHub Desktop.
GotBricks? Userscript for Bricklink.com
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name GotBricks? for bricklink.com | |
// @namespace Violentmonkey Scripts | |
// @match https://www.bricklink.com/catalogItemInv.asp* | |
// @grant none | |
// @version 1.01 | |
// @author Samantha Finnigan https://finnigan.dev/ | |
// @description 05/01/2024, 17:09:39 | |
// ==/UserScript== | |
// Iterate table and add a cell with a checkbox to each row | |
function addCheckboxes() { | |
ds = JSON.parse(localStorage.getItem(localName)) | |
rows = document.querySelector("table.ta").rows | |
// Iterate table | |
for( i in rows ) { | |
if(Object.hasOwn(rows, i)) { | |
// Handle all other rows | |
row = rows[i] | |
cells = row.cells | |
// Handle header | |
if(i == 0) { | |
cell = document.createElement("td") | |
f = document.createTextNode("Got") | |
cell.appendChild(f) | |
row.appendChild(cell) | |
continue | |
} | |
// Extend rows that have a colspan to new length | |
if( cells.length === 1 ) { | |
cell = cells[0] | |
if( cell.hasAttribute("colspan") ) { | |
cell.setAttribute("colspan", 7) | |
} | |
continue | |
} | |
// Handle body rows | |
if(cells.length >= 5) { | |
checkbox = document.createElement("input") | |
checkbox.setAttribute("type", "checkbox") | |
checkbox.id = 'found' + i | |
checkbox.index = i | |
checkbox.value = ds[i] | |
checkbox.checked = ds[i] | |
checkbox.onclick = function() { storeBrickGot(this.checked, this.index); }; | |
cell = document.createElement("td") | |
cell.appendChild(checkbox) | |
cell.setAttribute("align", "CENTER") | |
row.appendChild(cell) | |
} | |
} | |
} | |
} | |
// Get the Set ID from the URL params | |
function getSetID() { | |
const queryString = window.location.search; | |
const urlParams = new URLSearchParams(queryString); | |
return urlParams.get('S') | |
} | |
// Create the datastructure backing the UI | |
function createDS(localName) { | |
ds = JSON.parse(localStorage.getItem(localName)) | |
if(ds === null) { | |
rows = document.querySelector("table.ta").rows.length | |
ds = new Array(rows).fill(false); | |
localStorage.setItem(localName, JSON.stringify(ds)) | |
} | |
} | |
// Update the backing datastructure | |
function storeBrickGot(checked, index) { | |
ds = JSON.parse(localStorage.getItem(localName)) | |
ds[index] = checked | |
localStorage.setItem(localName, JSON.stringify(ds)) | |
} | |
// Global Constants | |
const localName = `userscript.gotbricks.${getSetID()}`; | |
(function() { | |
// Main | |
console.log("Got bricks?") | |
createDS(localName); | |
addCheckboxes(); | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment