Skocz do zawartości
nasiona thc-thc

darmowe nasiona marihuany

Recommended Posts

Opublikowano

Bardzo cieżko było mi wybierać cokolwiek przy tak dużym wyborze. Dodatek przeszukuje stronę i wypisuje najważniejsze bynajmiej dla mnie informacje oblicza też stosunki oraz robi podsumowującą ocenę.
Szybko poznasz po koloże czy to sativa czy indica a może hybryda.
Hybryda 50% bedzie na niebieski kolor, Sativa zielony, idica pomarańczowy. 
Obliczam stosunek Plon / Wysokość, Plon / Czas, Wysokość / Czas, a suma to suma wszystkich stosunków. Suma też jest koloryzowana Czerwony 0 do 10 zielony 😛
Dodatkowo przeskanuje cały opis aby wychwycić czy roślina lubi chłodniejszy klimat.
Do obliczen wykorzystuje zawsze najmniejszy plon, wysokość outdoor oraz czas outdoor. Aby obliczyć możliwie najgorszy przypadek.
Dodatek dodaje taki mały widzecik na górze strony. Dobra łapcie zdjęcia, dodatku nie udostepniam liczę na opinie i może jak ktoś z administracji bedzie chciał go sprawdzić  i zatwierdzić, to go wstawi za mnie. Nie nie będę publigował go w chrome store chyba, że ktoś inny to zrobi.

large_xx3.png.953844e99e0f703df4f60b9aa8large_xx2.png.5dd6fe196b93725424c0b9dca1
large_xx.png.3f397eaeac7abde41fe58a85416

 

content.js
function kolorNaglowka(rodzaj, tekst) {
    if (!rodzaj) return tekst;

    // Obsługa mixów 50/50
    if (/50\s*%[\s\/]+Indica\s*\/\s*50\s*%[\s\/]+Sativa/i.test(rodzaj) ||
        /50\s*%[\s\/]+Sativa\s*\/\s*50\s*%[\s\/]+Indica/i.test(rodzaj) ||
        /Indica.*50.*Sativa.*50/i.test(rodzaj) || /Sativa.*50.*Indica.*50/i.test(rodzaj)
    ) {
        return `<span style="color: #00B3FF; font-weight:bold">${tekst} (Mix 50%)</span>`;
    }

    if (rodzaj.toLowerCase().includes("indica"))
        return `<span style="color: orange; font-weight:bold">${tekst}</span>`;
    if (rodzaj.toLowerCase().includes("sativa"))
        return `<span style="color: green; font-weight:bold">${tekst}</span>`;
    return tekst;
}

// Gradient koloru sumy 0=czerwony, 10=jasnozielony
function kolorSuma(suma) {
    let value = parseFloat(suma);
    if (isNaN(value)) value = 0;
    let r, g, b;
    if (value <= 5) {
        let percent = value / 5;
        r = 231;
        g = Math.round(76 + (176 - 76) * percent);
        b = 60;
    } else {
        let percent = (value - 5) / 5;
        r = Math.round(241 - (241 - 39) * percent);
        g = Math.round(196 + (174 - 196) * percent);
        b = Math.round(15 + (96 - 15) * percent);
    }
    return `rgb(${r},${g},${b})`;
}

function parseIntFromText(txt) {
    if(!txt) return null;
    let m = txt.match(/(\d+)/g);
    if(m) return Math.max(...m.map(Number));
    return null;
}
function parseMinFromText(txt) {
    if(!txt) return null;
    let m = txt.match(/(\d+)/g);
    if(m) return Math.min(...m.map(Number));
    return null;
}
function parseRange(txt) {
    let m = txt.match(/(\d+)/g);
    if(m) {
        if(m.length > 1) return [Math.min(...m.map(Number)), Math.max(...m.map(Number))];
        return [Number(m[0]), Number(m[0])];
    }
    return [null, null];
}

function insertSummary(html) {
    let gallery = document.querySelector('.woocommerce-product-gallery__wrapper');
    let form = document.querySelector('.variations_form.cart');
    if (!gallery || !form) return;
    let div = document.createElement('div');
    div.id = "thc-thc-sum";
    div.innerHTML = html;
    div.style.margin = '20px 0 20px 0';
    div.style.padding = '16px';
    div.style.background = '#f9f9fb';
    div.style.border = '1px solid #e7e7e7';
    div.style.borderRadius = '14px';
    div.style.fontSize = '1.08em';
    div.style.boxShadow = '0 2px 12px 0 #eee';
    form.parentNode.insertBefore(div, form);
}

// Szukanie słów-kluczy dla "zimne klimaty"
function czyZimneKlimaty(opis) {
    const klucze = [
        "zimn", "zimnych", "zimny", "zimne", "zimno", "zimowy", 
        "chłodn", "chłodne", "chłodny", "frost", "cold", "cool"
    ];
    let txt = opis.toLowerCase();
    return klucze.some(slowo => txt.includes(slowo));
}

(function() {
    if (!window.location.href.includes('/produkt/')) return;
    if (document.getElementById('thc-thc-sum')) return;

    let nazwa = (document.querySelector('h1.product_title') || {}).innerText || "";
    let opis = (document.querySelector('.woocommerce-product-details__short-description') || {}).innerText || "";
    let opisDlug = (document.querySelector('#tab-description') || {}).innerText || "";

    // Rodzaj
    let rodzaj = "";
    let mRodz = opisDlug.match(/Rodzaj:\s*(.+)/i);
    if (mRodz) rodzaj = mRodz[1].replace(/\s*\n.*/,"").trim();

    // Plon
    let plonOutdoor = null, plonIndoor = null;
    let mPlonOutdoor = opisDlug.match(/Plon z Jednej Rośliny na Outdoor:.*?(\d+)/i);
    if (mPlonOutdoor) plonOutdoor = parseInt(mPlonOutdoor[1]);
    let mPlonIndoor = opisDlug.match(/Plon z Jednej Rośliny w Indoor:.*?(\d+)/i);
    if (mPlonIndoor) plonIndoor = parseInt(mPlonIndoor[1]);
    if (!plonOutdoor) {
        let mPlon2 = opisDlug.match(/Outdoor:.*?(\d+)/i);
        if (mPlon2) plonOutdoor = parseInt(mPlon2[1]);
    }
    if (!plonIndoor) {
        let mPlon2 = opisDlug.match(/Indoor:.*?(\d+)/i);
        if (mPlon2) plonIndoor = parseInt(mPlon2[1]);
    }
    let plon = plonOutdoor && plonIndoor ? Math.min(plonOutdoor, plonIndoor) : (plonOutdoor || plonIndoor || null);

    // Wysokość
    let wysOutdoor = null, wysIndoor = null;
    let mWysOutdoor = opisDlug.match(/Wysokość na Outdoor:.*?(\d+)/i);
    if (mWysOutdoor) wysOutdoor = parseInt(mWysOutdoor[1]);
    let mWysIndoor = opisDlug.match(/Wysokość w Indoor:.*?(\d+)/i);
    if (mWysIndoor) wysIndoor = parseInt(mWysIndoor[1]);
    if (!wysOutdoor) {
        let mWys2 = opisDlug.match(/Outdoor:.*?(\d+)\s*cm/i);
        if (mWys2) wysOutdoor = parseInt(mWys2[1]);
    }
    if (!wysIndoor) {
        let mWys2 = opisDlug.match(/Indoor:.*?(\d+)\s*cm/i);
        if (mWys2) wysIndoor = parseInt(mWys2[1]);
    }
    let wysokosc = wysOutdoor || wysIndoor || null;

    // Czas do zbioru
    let czasIndoor = null, czasOutdoor = null;
    let mCzasIndoor = opisDlug.match(/Zbiór w Indoor:.*?(\d+)/i);
    if (mCzasIndoor) czasIndoor = parseInt(mCzasIndoor[1]);
    let mCzasOutdoor = opisDlug.match(/Zbiór na Outdoor:.*?(\d+)/i);
    if (mCzasOutdoor) czasOutdoor = parseInt(mCzasOutdoor[1]);
    if (!czasOutdoor) {
        let mCz2 = opisDlug.match(/Outdoor:.*?po (\d+) dniach/i);
        if (mCz2) czasOutdoor = parseInt(mCz2[1]);
    }
    if (!czasIndoor) {
        let mCz2 = opisDlug.match(/Indoor:.*?po (\d+) dniach/i);
        if (mCz2) czasIndoor = parseInt(mCz2[1]);
    }
    let czas = czasIndoor && czasOutdoor ? Math.max(czasIndoor, czasOutdoor) : (czasIndoor || czasOutdoor || null);

    // Zimne klimaty
    let czyZimne = czyZimneKlimaty(opis + opisDlug) ? "TAK" : "NIE";

    // Kolorowany nagłówek
    let naglowek = kolorNaglowka(rodzaj, `1 x ${nazwa}`);

    // Wskaźniki
    let p_w = (plon && wysokosc) ? (plon / wysokosc).toFixed(2) : "-";
    let p_c = (plon && czas) ? (plon / czas).toFixed(2) : "-";
    let w_c = (wysokosc && czas) ? (wysokosc / czas).toFixed(2) : "-";
    let suma = 0, licznik = 0;
    if (p_w !== "-") { suma += parseFloat(p_w); licznik++; }
    if (p_c !== "-") { suma += parseFloat(p_c); licznik++; }
    if (w_c !== "-") { suma += parseFloat(w_c); licznik++; }
    suma = licznik > 0 ? suma.toFixed(2) : "-";

    // Kolor sumy
    let kolorS = kolorSuma(suma);

    // Składanie eleganckiej listy
    let out = `<div>
    <div style="margin-bottom:8px;font-size:1.1em">${naglowek}</div>
    <ul style="list-style:none; padding:0; margin:0 0 0 0;">
        <li><b>Przewaga:</b> ${rodzaj || '-'}</li>
        <li><b>Plon około:</b> ${plon ? plon+"g" : '-'}</li>
        <li><b>Czas do zbioru:</b> ${czas ? czas+" dni" : '-'}</li>
        <li><b>Wysokość:</b> ${wysokosc ? "do "+wysokosc+"cm" : '-'}</li>
        <li><b>Zimne Klimaty:</b> ${czyZimne}</li>
        <li><b>P/W:</b> ${p_w}</li>
        <li><b>P/C:</b> ${p_c}</li>
        <li><b>W/C:</b> ${w_c}</li>
        <li><b>Suma:</b> <span style="color:${kolorS}; font-weight:bold; font-size:1.13em;">${suma}</span></li>
    </ul>
    </div>`;

    insertSummary(out);
})();

manifest.json
{
  "manifest_version": 3,
  "name": "THC-THC.pl Skrót Odmiany",
  "version": "1.0",
  "description": "Wyświetla skrócone podsumowanie odmian na stronach produktu THC-THC.pl",
  "permissions": ["scripting"],
  "host_permissions": [
    "https://thc-thc.pl/produkt/*"
  ],
  "content_scripts": [
    {
      "matches": ["https://thc-thc.pl/produkt/*"],
      "js": ["content.js"],
      "run_at": "document_idle"
    }
  ],
  "icons": {
    "16": "icon16.png",
    "32": "icon32.png"
  }
}

 

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Reply to this topic...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Polityka prywatności link do Polityki Prywatności RODO - Strona tylko dla osób pełnoletnich, 18+