JSFiddle - React, Tailwind, and code Playground

by Chris

HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Custom Context Menu</title>
    <style>
        .context-menu {
            display: none;
            position: absolute;
            background-color: white;
            border: 1px solid #ccc;
            box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
            z-index: 1000;
        }
        .context-menu ul {
            list-style: none;
            padding: 0;
            margin: 0;
        }
        .context-menu ul li {
            padding: 8px 12px;
            cursor: pointer;
        }
        .context-menu ul li:hover {
            background-color: #eee;
        }
    </style>
</head>
<body>
    <div id="contextMenu" class="context-menu">
        <ul>
            <li id="extractUrl">Extract URL</li>
        </ul>
    </div>
    <script src="context-menu.js"></script>
</body>
</html>

JavaScript

// context-menu.js
document.addEventListener('contextmenu', function (e) {
    e.preventDefault();
    const contextMenu = document.getElementById('contextMenu');
    contextMenu.style.top = `${e.pageY}px`;
    contextMenu.style.left = `${e.pageX}px`;
    contextMenu.style.display = 'block';
});

document.addEventListener('click', function () {
    const contextMenu = document.getElementById('contextMenu');
    contextMenu.style.display = 'none';
});

document.getElementById('extractUrl').addEventListener('click', function () {
    const selectedText = window.getSelection().toString();
    if (selectedText) {
        console.log(`Extracted URL: ${selectedText}`);
        // You can add your URL extraction logic here
    } else {
        console.log('No text selected');
    }
});