Skip to content

Instantly share code, notes, and snippets.

@lebbe
Created March 20, 2017 10:57
Show Gist options
  • Save lebbe/e42d884da1f9fe3700b2ac8822a82aee to your computer and use it in GitHub Desktop.
Save lebbe/e42d884da1f9fe3700b2ac8822a82aee to your computer and use it in GitHub Desktop.
Sorter varer på kolonial.no.
/**
* Dette programmet sorterer varer på kolonial.no.
* Du må gå helt inn i en spesifikk kategori før du starter sorteringen.
*
* Kjør programmet ved å åpne opp utviklerverktøy, og lim koden inn i konsollet.
* Når du vil sortere en annen kategori senere, holder det å trykke "Pil opp"
* og så "Enter" for å sortere på nytt.
*
* ALL BRUK GJØRES PÅ EGET ANSVAR. Denne koden er med vilje IKKE gjort om til
* noen browser-plugin. Med en gang kolonial.no gjør kode-endringer kan dette
* programmet slutte å fungere. Jeg kan på ingen måte garantere at kolonial.no
* fungerer som intendert etter at koden har kjørt.
*
* Koden er originalt skrevet av Lars-Erik Bruce, men kan anses som "public
* domain". Ingen kopiretter eller andre rettigheter er forbeholdt meg.
*
* Det er ingen samarbeid mellom meg eller kolonial.no. Opplever du problemer
* SLUTT Å BRUKE KODEN UMIDDELBART og refresh browser. Hvis du ikke kan
* JavaScript selv, IKKE BEGYNN Å BRUKE KODEN. Alt skjer på eget ansvar.
*/
(function() {
// "jQuery" in codegolf version. Are you able to shorten it? :-)
var $=(q,s)=>Array.from((s||document).querySelectorAll(q))
$.insertAfter = function insertAfter(newNode, referenceNode) {
referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);
}
$.create = function(name, content, style) {
var element = document.createElement(name)
if(content) element.textContent = content
if(style) element.setAttribute('style', style)
return element
}
// Variables. Hopefully, if kolonial.no changes their DOM, I only have
// to replace some of these variables
var products = '.product-list-item'
var unitPrice = '.unit-price'
var pricePerUnit = /([0-9]*,[0-9]*) per ([a-z]*)/
var productHeader = '.product-category-header'
var oldProductContainer = '.product-category-list'
// Setting up the DOM
var productContainer = $.create('div')
$.insertAfter(productContainer, $(productHeader)[0])
$(oldProductContainer)[0].setAttribute('style', 'display: none')
// Finding, sorting and placing products
var units = Object.create(null)
var unitMapper = {
l: 'Liter',
stk: 'Stykkpris',
kg: 'Kilo', // TODO: Konvertere gram til Kilogram?
g: 'Gram',
'm': 'Meter'
}
$(products).forEach(product => {
var pricePerUnitText = $(unitPrice, product)[0].textContent
var matches = pricePerUnit.exec(pricePerUnitText)
var price = matches[1].replace(',', '.')
var unit = matches[2]
units[unit] = units[unit] || []
product.setAttribute('style', 'display: inline-block')
units[unit].push({
price: parseFloat(price),
elem: product
})
})
for(key in units) {
var unit = units[key]
// Sort products in unit
unit.sort((a, b) => a.price - b.price)
// Insert unit header
var header = $.create('h2', unitMapper[key] || key)
productContainer.appendChild(header)
// Insert products
unit.forEach(product => productContainer.appendChild(product.elem))
}
})()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment