Word Counter

Count repetitive words on a web page and display them with a custom threshold.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, Greasemonkey alebo Violentmonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey alebo Userscripts.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie správcu používateľských skriptov.

(Už mám správcu používateľských skriptov, nechajte ma ho nainštalovať!)

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

(Už mám správcu používateľských štýlov, nechajte ma ho nainštalovať!)

// ==UserScript==
// @name         Word Counter
// @version      1.4
// @namespace   WordCounterScript
// @description  Count repetitive words on a web page and display them with a custom threshold.
// @license      MIT
// @match        *://*/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // Create and style the toggle button
    var toggleButton = document.createElement('button');
    toggleButton.id = 'word-counter-toggle-button';
    toggleButton.style.position = 'fixed';
    toggleButton.style.top = '50%';
    toggleButton.style.right = '20px';
    toggleButton.style.transform = 'translateY(-50%)';
    toggleButton.style.width = '50px';
    toggleButton.style.height = '50px';
    toggleButton.style.backgroundColor = 'blue';
    toggleButton.style.color = 'white';
    toggleButton.style.fontSize = '18px';
    toggleButton.style.border = 'none';
    toggleButton.innerText = 'WC';
    toggleButton.setAttribute('aria-label', 'Toggle Word Counter');
    document.body.appendChild(toggleButton);

    // Add event listener to toggle button
    toggleButton.addEventListener('click', function() {
        toggleWordCounter();
    });

    // Function to toggle word counter visibility
    function toggleWordCounter() {
        var wordCounter = document.getElementById('word-counter');
        if (wordCounter.style.display === 'none') {
            wordCounter.style.display = 'block';
            countWords();
        } else {
            wordCounter.style.display = 'none';
        }
    }

    // Function to count repetitive words
    function countWords() {
        let ignoredWords = ["a", "an", "the", "and", "but", "or", "for", "nor", "so", "yet", "after", "as", "at", "by", "for", "from", "in", "of", "on", "over", "to", "with", "about", "above", "below", "beneath", "under", "before", "during", "since", "within", "without", "throughout", "among", "beside", "between", "behind", "besides", "against", "along", "around", "except", "according", "across", "near", "after", "against", "ahead", "ago", "upon", "through", "into", "onto", "until", "underneath", "up", "off", "out", "of", "down", "behind", "near", "around", "between", "above", "below", "within", "without", "upon", "before", "after", "by", "behind", "near", "against", "during", "from", "for", "with", "within", "without", "on", "over", "under", "around", "throughout", "through", "at", "about", "above", "before", "behind", "beneath", "between", "beside", "beyond", "by", "down", "from", "in", "into", "near", "on", "off", "over", "under", "up", "upon", "through", "to", "with", "within", "without", "with", "via", "per", "about", "above", "across", "after", "against", "ahead", "along", "amid", "amidst", "among", "amongst", "around", "as", "at", "before", "behind", "below", "beneath", "beside", "besides", "between", "beyond", "but", "by", "despite", "down", "during", "except", "for", "from", "in", "inside", "into", "like", "near", "of", "off", "on", "onto", "out", "outside", "over", "past", "round", "since", "through", "throughout", "till", "to", "toward", "under", "underneath", "until", "unto", "up", "upon", "with", "within", "without", "yet", "a", "an", "the", "some", "any", "each", "every", "all", "both", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "first", "second", "third", "fourth", "fifth", "sixth", "seventh", "eighth", "ninth", "tenth", "last"];

        // Get all words on the page
        let words = document.body.textContent.split(/\s+/);

        // Count the occurrences of each word
        let wordCount = {};
        words.forEach(word => {
            let cleanedWord = word.toLowerCase().replace(/[^a-zA-Z0-9]/g, '');
            if (cleanedWord && !ignoredWords.includes(cleanedWord)) {
                if (wordCount[cleanedWord]) {
                    wordCount[cleanedWord]++;
                } else {
                    wordCount[cleanedWord] = 1;
                }
            }
        });

        // Filter words with counts higher than X
        let threshold = parseInt(prompt("Enter the threshold count:"));
        let repetitiveWords = Object.entries(wordCount).filter(([word, count]) => count > threshold);

        // Display the repetitive words and their counts
        let resultDiv = document.getElementById('word-counter');
        resultDiv.innerHTML = `<h3>Repeated Words (Threshold: ${threshold})</h3>`;
        if (repetitiveWords.length === 0) {
            resultDiv.innerHTML += '<p>No repetitive words found.</p>';
        } else {
            repetitiveWords.forEach(([word, count]) => {
                resultDiv.innerHTML += `<p>${word}: ${count} occurrences</p>`;
            });
        }
    }

    // Create the result dialog box
    var wordCounterDiv = document.createElement('div');
    wordCounterDiv.id = 'word-counter';
    wordCounterDiv.style.display = 'none';
    wordCounterDiv.style.position = 'fixed';
    wordCounterDiv.style.top = '50%';
    wordCounterDiv.style.left = '50%';
    wordCounterDiv.style.transform = 'translate(-50%, -50%)';
    wordCounterDiv.style.padding = '20px';
    wordCounterDiv.style.backgroundColor = '#fff';
    wordCounterDiv.style.border = '2px solid #333';
    wordCounterDiv.style.borderRadius = '5px';
    wordCounterDiv.style.zIndex = '9999';
    document.body.appendChild(wordCounterDiv);

    // Create and style the close button for the result dialog
    var closeButton = document.createElement('button');
    closeButton.innerHTML = '✖';
    closeButton.style.position = 'absolute';
    closeButton.style.top = '10px';
    closeButton.style.right = '10px';
    closeButton.style.border = 'none';
    closeButton.style.background = 'none';
    closeButton.style.fontSize = '18px';
    closeButton.style.cursor = 'pointer';
    closeButton.setAttribute('aria-label', 'Close Word Counter');
    wordCounterDiv.appendChild(closeButton);

    // Add event listener to close button
    closeButton.addEventListener('click', function() {
        wordCounterDiv.style.display = 'none';
    });
})();