Show the price per square meter in the search results of ciencuadras.com
// ==UserScript==
// @name ciencuadras.com price per square meter
// @namespace https://github.com/healarconr
// @version 0.1
// @description Show the price per square meter in the search results of ciencuadras.com
// @author Hernán Alarcón
// @match https://www.ciencuadras.com/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
function calculatePricePerSquareMeter() {
calculatePricePerSquareMeterInSearchResults();
}
function calculatePricePerSquareMeterInSearchResults() {
const properties = document.querySelectorAll('.inmuebles-results > app-card');
for (const property of properties) {
try {
let pricePerSquareMeterElement = property.querySelector('p.pricePerSquareMeter');
if (pricePerSquareMeterElement) {
pricePerSquareMeterElement.remove();
}
const priceNode = property.querySelector('h3');
const price = findPrice(priceNode.textContent);
const area = findArea(property.querySelector('li:nth-child(3)').textContent)
const pricePerSquareMeter = (price / area).toLocaleString('es-CO', {style:'currency', currency: 'COP'}) + '/m\u00B2';
pricePerSquareMeterElement = document.createElement('p');
pricePerSquareMeterElement.className = 'pricePerSquareMeter';
pricePerSquareMeterElement.style.fontSize = 'smaller';
pricePerSquareMeterElement.style.fontWeight = 'normal';
pricePerSquareMeterElement.appendChild(document.createTextNode(pricePerSquareMeter));
priceNode.parentNode.insertBefore(pricePerSquareMeterElement, priceNode.nextSibling);
} catch (e) {
// Do nothing
}
}
}
function findPrice(value) {
return parseFloat(value.match(/[\d.,]+/)[0].replace(/\./g, ''));
}
function findArea(value) {
return parseFloat(value.match(/[\d.]+/)[0]);
}
const propertiesContainer = document.querySelector('.inmuebles-results');
if (propertiesContainer) {
setInterval(calculatePricePerSquareMeterInSearchResults, 1000);
new MutationObserver(calculatePricePerSquareMeter).observe(propertiesContainer, {childList: true});
}
calculatePricePerSquareMeter();
setTimeout(calculatePricePerSquareMeter, 2000);
})();