Skip to content

Instantly share code, notes, and snippets.

@rf5860
Last active March 31, 2024 14:22
Show Gist options
  • Save rf5860/2f579c742878fb78f9706056bf6960dd to your computer and use it in GitHub Desktop.
Save rf5860/2f579c742878fb78f9706056bf6960dd to your computer and use it in GitHub Desktop.
Transform the IcyVeins invocation list for Last Epoch into a more readable format
// ==UserScript==
// @name IcyVeins Invocation
// @namespace icy-veins.com
// @version 0.2
// @description Transform the invocation list into a more readable format
// @author rjf89
// @match *://www.icy-veins.com/last-epoch/list-of-runic-invocations*
// @updateURL https://gist.github.com/rf5860/2f579c742878fb78f9706056bf6960dd/raw/IcyVeinsInvocation.user.js
// @downloadURL https://gist.github.com/rf5860/2f579c742878fb78f9706056bf6960dd/raw/IcyVeinsInvocation.user.js
// ==/UserScript==
(function () {
// Make the main area a bit bigger
document.querySelector('#main').style.width = '85%';
document.querySelector('#center').style.width = '100%';
document.querySelector('#center').style.maxWidth = '100%';
let bgColor = getComputedStyle(document.querySelector('.image_block_content.selected')).backgroundColor;
let [_, ...elementGroupButtons] = document.querySelectorAll('.image_block_header_buttons');
/*
For each button-group:
- Get all the `<span>` elements
- Append a copy of it to a new `<td>` element in a table
*/
elementGroupButtons.forEach((elementGroupButton, index) => {
// Create a container for the table, and add a header
let container = document.createElement('div');
container.style.backgroundColor = bgColor;
container.style.padding = '10px';
container.style.border = '1px solid black';
container.style.borderRadius = '5px';
container.style.margin = '10px';
container.style.overflow = 'auto';
container.style.maxHeight = '500px';
document.querySelector('#center').appendChild(container);
let header = document.createElement('h2');
// Get the element text from the index:
// 1 -> Cold, 2 -> Fire, 3 -> Lightning
// Using an appropriate header text and background color
let elementText = ['Cold', 'Fire', 'Lightning'][index];
header.textContent = `${elementText} Invocation`;
header.style.backgroundColor = bgColor;
// Select a color for each element
let color = ['blue', 'red', 'yellow'][index];
header.style.color = color;
container.appendChild(header);
// Create a table for each button-group
let table = document.createElement('table');
// Make each row have a height of 100px
table.style.height = '100%';
table.style.width = '100%';
table.style.tableLayout = 'fixed'; // Add this line to force equal-width columns
container.appendChild(table);
document.querySelector('.image_block_header').appendChild(container);
// Create a row for each button-group
let tr = document.createElement('tr');
tr.style.backgroundColor = bgColor;
table.appendChild(tr);
// Create a cell for each button
let [_, ...buttons] = elementGroupButton.querySelectorAll('span');
buttons.forEach((button, index) => {
// Get the corresponding image for each button, by removing `_button` from the span's ID and getting the corresponding `<div>`
let image = document.querySelector(`#${button.id.replace('_button', '')}`);
// Clone the div, give it a new id, set the width to 100% to make it fill the cell, and change display to block to make it appear
let clonedImage = image.cloneNode(true);
clonedImage.id = `${button.id}_image`;
// Add 'selected' to the classes
clonedImage.classList.add('selected');
clonedImage.style.width = '100%';
clonedImage.style.bottom = '0';
clonedImage.style.left = '0';
clonedImage.style.right = '0';
// clonedImage.style.display = 'block';
// Ensure each image is centered in the cell and shows with the same height and width
clonedImage.style.height = '100%';
clonedImage.style.width = '100%';
// Create a cell for each button
let td = document.createElement('td');
td.style.textAlign = 'center'; // Center the content horizontally
td.style.verticalAlign = 'bottom'; // Bottom-align the content
td.appendChild(clonedImage);
tr.appendChild(td);
// If the current index is divisible by 3 (0-based index), create a new row
if ((index + 1) % 3 === 0) {
tr = document.createElement('tr');
tr.style.backgroundColor = bgColor;
table.appendChild(tr);
}
});
});
console.info("Invocation tables transformed!");
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment