Showing source for: https://writexo.com/share/oknmr27h
Duration: 0.41362s
Server: cloudflare

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>WriteXO</title>
    <meta name="robots" content="noindex">
    <meta property="og:site_name" content="WriteXO">
    <meta property="og:type" content="website">
    <meta property="og:title" content="WriteXO">
    <meta property="og:description" content="A document shared with you on WriteXO.">
    <meta property="og:image" content="https://writexo.com/assets/img/writexo.jpg">

    <!-- Quill Editor CSS -->
    <link rel="stylesheet" href="/vendor/local-libs/css/quill.snow.min.css?v=20260703">

    <!-- Global styles -->
    <link rel="stylesheet" href="/global.css.php">

    <!-- Editor specific styles -->
    <link rel="stylesheet" href="/assets/css/editor.css?v=1792031085">
    <link rel="stylesheet" href="/assets/css/todo-list.css?v=1792031085">

    <!-- Font Awesome -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" integrity="sha512-DTOQO9RWCH3ppGqcWaEA1BIZOC6xxalwEsw9c2QQeAIftl+Vegovlnee1c9QX4TctnWMn13TZye+giMm8e2LwA==" crossorigin="anonymous" referrerpolicy="no-referrer" />

    <!-- Favicon -->
    <link rel="icon" type="image/x-icon" href="/favicon.ico">

    <style>
        /* Shared view specific styles */
        .read-only-badge {
            padding: 2px 8px;
            background: rgba(156, 163, 175, 0.15);
            color: rgb(75, 85, 99);
            border-radius: 4px;
            font-size: 11px;
            font-weight: 600;
            border: 1px solid rgba(156, 163, 175, 0.3);
            white-space: nowrap;
        }

        body.dark .read-only-badge {
            background: rgba(156, 163, 175, 0.25);
            color: rgb(156, 163, 175);
            border-color: rgba(156, 163, 175, 0.4);
        }

        /* Expand button visibility */
        #sidebar-expand-btn {
            display: none;
        }

        body.sidebar-collapsed #sidebar-expand-btn {
            display: flex;
        }

        /* Attachments section in sidebar */
        #shared-attachments {
            margin-top: auto;
        }

        #shared-attachments .section-label {
            padding: 0 15px;
        }

        #shared-attachments .attachments-list {
            max-height: 300px;
            overflow-y: auto;
            overflow-x: hidden;
            padding: 0 8px;
        }

        .attachment-item {
            display: flex;
            align-items: center;
            gap: 12px;
            padding: 12px 10px;
            border-radius: 6px;
            margin-bottom: 8px;
            background: var(--sidebar-bg);
            border: 1px solid var(--border-color);
            transition: background 0.2s ease;
        }

        .attachment-item:hover {
            background: var(--sidebar-hover);
        }

        .attachment-item i.fa-file,
        .attachment-item i.fa-file-pdf,
        .attachment-item i.fa-file-word,
        .attachment-item i.fa-file-image,
        .attachment-item i.fa-file-lines {
            font-size: 18px;
            color: var(--text-secondary);
            flex-shrink: 0;
        }

        .attachment-info {
            flex: 1;
            min-width: 0;
        }

        .attachment-name {
            font-size: 13px;
            color: var(--text-primary);
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
            margin-bottom: 2px;
        }

        .attachment-size {
            font-size: 11px;
            color: var(--text-secondary);
        }

        .attachment-download-btn {
            background: none;
            border: 1px solid var(--border-color);
            color: var(--text-secondary);
            cursor: pointer;
            padding: 6px 10px;
            border-radius: 4px;
            display: flex;
            align-items: center;
            justify-content: center;
            transition: all 0.2s ease;
            flex-shrink: 0;
        }

        .attachment-download-btn:hover {
            background: var(--primary-color);
            border-color: var(--primary-color);
            color: white;
        }

        .attachment-download-btn i {
            font-size: 14px;
        }

        /* Scrollbar for attachments list */
        #shared-attachments .attachments-list::-webkit-scrollbar {
            width: 6px;
        }

        #shared-attachments .attachments-list::-webkit-scrollbar-track {
            background: transparent;
        }

        #shared-attachments .attachments-list::-webkit-scrollbar-thumb {
            background: var(--border-color);
            border-radius: 3px;
        }

        #shared-attachments .attachments-list::-webkit-scrollbar-thumb:hover {
            background: var(--text-secondary);
        }

        /* Mobile responsive */
        @media (max-width: 768px) {
            .attachment-item {
                padding: 10px 8px;
                gap: 8px;
            }

            .attachment-item i.fa-file,
            .attachment-item i.fa-file-pdf,
            .attachment-item i.fa-file-word,
            .attachment-item i.fa-file-image,
            .attachment-item i.fa-file-lines {
                font-size: 16px;
            }

            .attachment-name {
                font-size: 12px;
            }

            .attachment-size {
                font-size: 10px;
            }

            .attachment-download-btn {
                padding: 5px 8px;
            }

            .attachment-download-btn i {
                font-size: 13px;
            }
        }

    </style>
</head>
<body class="sidebar-collapsed preload"><a href="https://writexo.com/cdn-cgi/content?id=fNeqB4CGSToL70faH4eRq5ceKi.dRO.GxpkXW8nEDgE-1792031085.368227-1.2.1.1-li3VF80o_hx7DxxKOoHnTwuoYjamSa0ZZFmpCjl13STutnjkuwN_jh8MD0IZGR2o" aria-hidden="true" rel="nofollow noopener" style="display: none !important; visibility: hidden !important"></a>
<script>
    // Prevent dark mode flash - must run immediately before any content renders
    (function() {
        var darkMode = localStorage.getItem('dark_mode');
        if (darkMode === '1') {
            document.body.classList.add('dark');
        }
    })();
</script>

    <!-- Main container with sidebar layout -->
    <div class="editor-container">

        <!-- Sidebar - starts collapsed to prevent animation flash on page load -->
        <aside id="editor-sidebar" class="editor-sidebar collapsed">
            <div class="sidebar-header">
                <div class="sidebar-logo">
                    <span>W<strong>XO</strong></span>
                </div>
                <button id="sidebar-collapse-btn" class="sidebar-collapse-btn" title="Collapse sidebar">
                    <i class="fa-solid fa-chevron-left"></i>
                </button>
            </div>

            <div class="sidebar-content">
                <!-- Viewing shared page -->
                <div class="workspace-section">
                    <div class="section-label">Viewing Shared Page</div>
                    <div class="workspace-item active">
                                                    <i class="fa-solid fa-share-nodes"></i>
                                                <span id="sidebar-note-title">Untitled</span>
                        <div class="workspace-note-actions">
                            <span class="read-only-badge">READ-ONLY</span>
                        </div>
                    </div>
                </div>

                <!-- Sign up prompt for viewers -->
                <div class="shared-signup-prompt">
                    <p class="shared-signup-text">
                        Create a free account to save and manage your own pages.
                    </p>
                    <a href="/account/register" class="shared-signup-btn">
                        <i class="fa-solid fa-user-plus"></i>
                        <span>Sign Up Free</span>
                    </a>
                    <div class="shared-signin-row">
                        Already have an account? <a href="/account/login">Sign in</a>
                    </div>
                </div>

                <!-- Attachments Section (if available) -->
                <div id="shared-attachments" class="workspace-section" style="display: none;">
                    <div class="section-label">Attachments</div>
                    <div id="shared-attachment-list" class="attachments-list"></div>
                </div>
            </div>

            <!-- Resize handle -->
            <div id="sidebar-resize-handle" class="sidebar-resize-handle"></div>
        </aside>

        <!-- Main content area -->
        <main class="editor-main-content">
            <!-- Top toolbar -->
            <div class="editor-topbar-wrapper">
                <!-- Sidebar expand button (shown when collapsed) -->
                <button id="sidebar-expand-btn" class="sidebar-expand-btn-toolbar" title="Expand sidebar">
                    <i class="fa-solid fa-bars"></i>
                </button>

                <!-- Empty space for consistent layout -->
                <div style="flex: 1;"></div>

                <div class="editor-topbar-actions">
                    <button id="dark-mode-toggle" class="topbar-btn" title="Toggle dark mode" onclick="toggleDarkMode()">
                        <i class="fa-solid fa-moon"></i>
                    </button>
                                    </div>
            </div>

            <!-- Editor content -->
            <div class="editor-content-wrapper">
                <div class="editor-page">
                    
                    <!-- Title (read-only) -->
                    <div
                        id="note-title"
                        class="editor-title"
                        style="pointer-events: none;"
                    >Untitled</div>

                    <!-- Quill Editor (disabled) -->
                    <div id="quill-editor" class="editable" spellcheck="false" data-gramm="true"></div>

                </div>
            </div>

            <!-- Editor Status Bar (read-only metrics) -->
            <div id="editor-statusbar" class="editor-statusbar" style="display: none;">
                <div class="statusbar-group statusbar-left"></div>
                <div class="statusbar-group statusbar-right">
                    <span id="statusbar-words" class="statusbar-item">0 words</span>
                    <span class="statusbar-sep">&middot;</span>
                    <span id="statusbar-chars" class="statusbar-item">0 characters</span>
                    <span class="statusbar-sep">&middot;</span>
                    <span id="statusbar-reading" class="statusbar-item">1 min read</span>
                </div>
            </div>
        </main>

    </div>

    <!-- Export Modal -->
    <div id="export-modal" class="feature-modal" style="display: none;">
        <div class="modal-overlay" onclick="closeExportModal()"></div>
        <div class="modal-content">
            <div class="modal-header">
                <h3><i class="fa-solid fa-file-export"></i> Export Page</h3>
                <button class="modal-close" onclick="closeExportModal()">
                    <i class="fa-solid fa-xmark"></i>
                </button>
            </div>
            <div class="modal-body">
                <div class="modal-section">
                    <p class="help-text">Choose a format to export this page</p>

                    <div class="export-options">
                        <button class="export-option-btn" onclick="exportSharedNote('pdf')">
                            <div class="export-icon pdf">
                                <i class="fa-solid fa-file-pdf"></i>
                            </div>
                            <div class="export-details">
                                <div class="export-name">PDF Document</div>
                                <div class="export-desc">Portable Document Format</div>
                            </div>
                            <i class="fa-solid fa-download"></i>
                        </button>

                        <button class="export-option-btn" onclick="exportSharedNote('word')">
                            <div class="export-icon word">
                                <i class="fa-solid fa-file-word"></i>
                            </div>
                            <div class="export-details">
                                <div class="export-name">Word Document</div>
                                <div class="export-desc">Microsoft Word (.docx)</div>
                            </div>
                            <i class="fa-solid fa-download"></i>
                        </button>

                        <button class="export-option-btn" onclick="exportSharedNote('markdown')">
                            <div class="export-icon markdown">
                                <i class="fa-brands fa-markdown"></i>
                            </div>
                            <div class="export-details">
                                <div class="export-name">Markdown</div>
                                <div class="export-desc">Plain text with formatting (.md)</div>
                            </div>
                            <i class="fa-solid fa-download"></i>
                        </button>

                        <button class="export-option-btn" onclick="exportSharedNote('html')">
                            <div class="export-icon html">
                                <i class="fa-brands fa-html5"></i>
                            </div>
                            <div class="export-details">
                                <div class="export-name">HTML</div>
                                <div class="export-desc">Web page format (.html)</div>
                            </div>
                            <i class="fa-solid fa-download"></i>
                        </button>
                    </div>
                </div>
            </div>
        </div>
    </div>

    <!-- Footer -->
    <div class="footer-section">
        <div>
            <a href="/privacy">Privacy</a>
            <a href="/terms">Terms</a>
            <a href="/feedback">Contact Us</a>
            <a href="/about">About</a>
            <a href="/developers">Developer</a>
        </div>
        <p style="margin-top: 20px;">&copy; 2026 WriteXO. All rights reserved.</p>
    </div>

    <!-- Scripts -->
    <script src="/vendor/jquery/jquery.min.js?v=1792031085"></script>
    <script src="/vendor/local-libs/js/quill.min.js?v=1792031085"></script>
    <script src="/assets/js/quill-resizable-image.js?v=1779389709"></script>

    <!-- Pass PHP data to JavaScript -->
    <script>
        // User data (viewer context)
        var is_logged_in = false;
        var user_id = null;
        var user_plan = null;
        var has_premium_features = false;

        // Note data (shared context)
        var share_url = "oknmr27h";
        var note_title = "";
        var note_type = "note";
        var is_owner = false;
        var is_shared_view = true;
        var created = 1;
    </script>

    <!-- Shared view JavaScript -->
    <script>
        // Initialize Quill editor in read-only mode
        var quill = new Quill('#quill-editor', {
            modules: {
                toolbar: false
            },
            theme: 'snow',
            readOnly: true
        });

        // Status bar: read-only word/character/reading-time metrics for note pages.
        // Respects the same visibility preference used in the editor.
        function updateSharedStatusBar() {
            if (note_type !== 'note') return;
            if (localStorage.getItem('wxo_statusbar') === '0') return;
            var text = quill.getText();
            var trimmed = text.trim();
            var words = trimmed.length === 0 ? 0 : trimmed.split(/\s+/).filter(Boolean).length;
            var chars = text.replace(/\n$/, '').length;
            var minutes = Math.max(1, Math.ceil(words / 200));
            $('#statusbar-words').text(words + (words === 1 ? ' word' : ' words'));
            $('#statusbar-chars').text(chars + (chars === 1 ? ' character' : ' characters'));
            $('#statusbar-reading').text(minutes + ' min read');
            $('#editor-statusbar').show();
            $('body').addClass('statusbar-visible');
        }

        // Load document content
        $.get('/get_shared/' + share_url, function(data) {
            try {
                var parsed = JSON.parse(data);
                if (parsed && parsed.ops) {
                    // Valid Quill Delta
                    quill.setContents(parsed, 'silent');
                } else {
                    // Non-Quill content (invoice, quote, etc.) — can't render in plain editor
                    var typeName = note_type.charAt(0).toUpperCase() + note_type.slice(1);
                    document.getElementById('quill-editor').innerHTML =
                        '<div style="padding:40px 20px;text-align:center;color:var(--text-secondary);">' +
                        '<i class="fa-solid fa-file-circle-exclamation" style="font-size:36px;margin-bottom:12px;display:block;"></i>' +
                        '<p>' + typeName + ' pages cannot be previewed in the shared view.</p>' +
                        '</div>';
                }
            } catch (e) {
                // Not JSON — treat as HTML
                quill.setContents(quill.clipboard.convert(data), 'silent');
            }

            // Update read-only metrics once content is rendered
            updateSharedStatusBar();

            // Load attachments after document is loaded
            loadSharedAttachments();
        }).fail(function() {
            console.error('Failed to load document');
            showEditorAlert({
                type: 'error',
                message: 'Failed to load the shared document. Please try again.'
            });
        });

        // Title is now a div, no need for auto-expand function

        // ========================================
        // SIDEBAR FUNCTIONALITY
        // ========================================

        // Sidebar state management
        let sidebarWidth = parseInt(localStorage.getItem('editor_sidebar_width') || '300');
        let sidebarCollapsed = localStorage.getItem('editor_sidebar_collapsed') === 'true';

        // Force sidebar to be collapsed on mobile devices
        const isMobile = window.innerWidth <= 768;
        if (isMobile) {
            sidebarCollapsed = true;
        }

        // Initialize sidebar state
        $(document).ready(function() {
            const $sidebar = $('#editor-sidebar');

            if (sidebarCollapsed) {
                $sidebar.addClass('collapsed');
                $('body').addClass('sidebar-collapsed');
            } else {
                $sidebar.removeClass('collapsed');
                $sidebar.css('width', sidebarWidth + 'px');
                $('body').removeClass('sidebar-collapsed');
            }

            // Remove preload class after initialization
            setTimeout(function() {
                $('body').removeClass('preload');
                $('.editor-statusbar').addClass('transitions-enabled');
            }, 100);
        });

        // Sidebar collapse button
        $('#sidebar-collapse-btn').on('click', function() {
            const $sidebar = $('#editor-sidebar');

            $sidebar.addClass('collapsed');
            $('body').addClass('sidebar-collapsed');
            sidebarCollapsed = true;
            localStorage.setItem('editor_sidebar_collapsed', 'true');
        });

        // Sidebar expand button
        $('#sidebar-expand-btn').on('click', function() {
            const $sidebar = $('#editor-sidebar');

            $sidebar.removeClass('collapsed');
            $sidebar.css('width', sidebarWidth + 'px');
            $('body').removeClass('sidebar-collapsed');
            sidebarCollapsed = false;
            localStorage.setItem('editor_sidebar_collapsed', 'false');
        });

        // ========================================
        // DARK MODE TOGGLE
        // ========================================

        function toggleDarkMode() {
            $('body').toggleClass('dark');
            const isDark = $('body').hasClass('dark');
            localStorage.setItem('dark_mode', isDark ? '1' : '0');

            // Update icon
            const icon = $('#dark-mode-toggle i');
            if (isDark) {
                icon.removeClass('fa-moon').addClass('fa-sun');
            } else {
                icon.removeClass('fa-sun').addClass('fa-moon');
            }
        }

        // Initialize dark mode icon
        $(document).ready(function() {
            const isDark = $('body').hasClass('dark');
            const icon = $('#dark-mode-toggle i');
            if (isDark) {
                icon.removeClass('fa-moon').addClass('fa-sun');
            }
        });

        // ========================================
        // ATTACHMENTS FUNCTIONALITY
        // ========================================

        function loadSharedAttachments() {
            $.get('/attachment/list_by_share/' + share_url, function(response) {
                try {
                    var data = typeof response === 'string' ? JSON.parse(response) : response;
                    if (data.attachments && data.attachments.length > 0) {
                        displaySharedAttachments(data.attachments);
                        $('#shared-attachments').show();
                    }
                } catch (e) {
                    console.error('Error loading shared attachments:', e);
                }
            }).fail(function() {
                console.error('Failed to load shared attachments');
            });
        }

        function displaySharedAttachments(attachments) {
            var $list = $('#shared-attachment-list');
            $list.empty();

            attachments.forEach(function(attachment) {
                var fileSize = formatFileSize(attachment.file_size);

                var listItem = $('<div class="attachment-item">' +
                    '<i class="' + getFileIcon(attachment.filename) + '"></i>' +
                    '<div class="attachment-info">' +
                        '<div class="attachment-name" title="' + attachment.original_filename + '">' +
                            attachment.original_filename +
                        '</div>' +
                        '<div class="attachment-size">' + fileSize + '</div>' +
                    '</div>' +
                    '<button class="attachment-download-btn" onclick="downloadSharedAttachment(' + attachment.id + ')" title="Download">' +
                        '<i class="fa-solid fa-download"></i>' +
                    '</button>' +
                '</div>');

                $list.append(listItem);
            });
        }

        function downloadSharedAttachment(attachment_id) {
            window.open('/attachment/download/' + attachment_id, '_blank');
        }

        function formatFileSize(bytes) {
            if (bytes === 0) return '0 Bytes';
            var k = 1024;
            var sizes = ['Bytes', 'KB', 'MB', 'GB'];
            var i = Math.floor(Math.log(bytes) / Math.log(k));
            return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
        }

        function getFileIcon(filename) {
            var extension = filename.split('.').pop().toLowerCase();
            switch (extension) {
                case 'pdf': return 'fa-solid fa-file-pdf';
                case 'doc':
                case 'docx': return 'fa-solid fa-file-word';
                case 'txt': return 'fa-solid fa-file-lines';
                case 'png':
                case 'jpg':
                case 'jpeg':
                case 'gif': return 'fa-solid fa-file-image';
                default: return 'fa-solid fa-file';
            }
        }

        function truncateFilename(filename, maxLength) {
            if (filename.length <= maxLength) {
                return filename;
            }
            var truncatedName = filename.substring(0, maxLength - 3) + '...';
            return truncatedName;
        }

        // ========================================
        // EXPORT FUNCTIONALITY
        // ========================================

        function showExportModal() {
            $('#export-modal').fadeIn(200);
        }

        function closeExportModal() {
            $('#export-modal').fadeOut(200);
        }

        function exportSharedNote(format) {
            // Check if user has premium features
            if (has_premium_features) {
                // Perform actual export
                closeExportModal();
                window.location.href = '/save/export_shared/' + format + '/' + share_url;
            } else {
                // Show upgrade prompt
                closeExportModal();
                showEditorAlert({
                    type: 'info',
                    title: 'Premium Feature',
                    message: 'Export features require a Premium subscription. Sign in or upgrade to export pages.'
                });
            }
        }

        // ========================================
        // ALERT MODAL (Minimal implementation)
        // ========================================

        function showEditorAlert(options) {
            const message = options.message || options;
            const type = options.type || 'info';
            console.log('[' + type.toUpperCase() + ']', message);
            alert(message);
        }

        // Close modals on overlay click
        $('.modal-overlay').on('click', function() {
            $(this).parent().fadeOut(200);
        });
    </script>

    <!-- ContentSquare -->
<script src="https://t.contentsquare.net/uxa/98c16d4002c63.js"></script>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-43R96KFN3L"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'G-43R96KFN3L');
</script>
<!-- Reddit Pixel -->
<script>
  !function(w,d){if(!w.rdt){var p=w.rdt=function(){p.sendEvent?p.sendEvent.apply(p,arguments):p.callQueue.push(arguments)};p.callQueue=[];var t=d.createElement("script");t.src="https://www.redditstatic.com/ads/pixel.js",t.async=!0;var s=d.getElementsByTagName("script")[0];s.parentNode.insertBefore(t,s)}}(window,document);
  rdt('init','a2_e7nrpas9ug8w',{
    optOut:false,
    useDecimalCurrencyValues:true
  });
  rdt('track','PageVisit');
</script>
<!-- End Reddit Pixel -->

<script>
(function() {
    const planMap = {"Pro":{"sendTo":"AW-17649265312\/UMzjCLuf-LQbEKDV6d9B","fallbackValue":null},"Premium":{"sendTo":"AW-17649265312\/Q84pCNPz8rQbEKDV6d9B","fallbackValue":null}};
    const conversionData = null;
    const signupConversion = null;

    console.debug('[GA Conversion] Initialising helper.', {
        planMap,
        conversionData,
        signupConversion
    });

    let conversionFired = false;

    function withGtag(callback, attempts = 10) {
        if (typeof gtag === 'function') {
            callback();
            console.debug('[GA Conversion] gtag ready, executing callback.');
            return;
        }
        if (attempts <= 0) {
            console.warn('[GA Conversion] gtag not available after retries.');
            return;
        }
        setTimeout(() => withGtag(callback, attempts - 1), 200);
    }

    function fireStaticConversion(config, attempts = 10) {
        if (!config || !config.sendTo) {
            return;
        }

        const numericValue = Number(config.value);
        const payload = {
            send_to: config.sendTo,
            value: Number.isFinite(numericValue) ? numericValue : 1.0,
            currency: config.currency || 'USD'
        };

        if (config.transactionId) {
            payload.transaction_id = config.transactionId;
        }

        withGtag(() => {
            gtag('event', 'conversion', payload);
            console.info(`[GA Conversion] ${config.label || 'Static'} conversion fired.`, {
                payload,
                meta: config.meta || null
            });
        }, attempts);
    }

    function fireConversion(planKey, value, transactionId) {
        if (!planKey || !planMap[planKey]) {
            console.warn('[GA Conversion] Unknown or missing plan; conversion not fired.', planKey);
            return;
        }

        if (conversionFired) {
            console.info('[GA Conversion] Conversion already fired, skipping duplicate.');
            return;
        }

        const planData = planMap[planKey];
        if (!planData) {
            console.warn('[GA Conversion] Missing plan configuration.', planKey);
            return;
        }

        const sendTo = planData.sendTo;
        const numericValue = Number(value);
        let finalValue = Number.isFinite(numericValue) ? parseFloat(numericValue.toFixed(2)) : null;
        if (finalValue === null && planData.fallbackValue !== null) {
            const fallbackNumeric = Number(planData.fallbackValue);
            if (Number.isFinite(fallbackNumeric)) {
                finalValue = parseFloat(fallbackNumeric.toFixed(2));
                console.debug('[GA Conversion] Using fallback value for plan.', { plan: planKey, value: finalValue });
            }
        }
        if (finalValue === null) {
            console.warn('[GA Conversion] Invalid conversion value provided.', value);
            return;
        }

        const finalCurrency = 'USD';
        const finalTransaction = transactionId || '';

        withGtag(() => {
            gtag('event', 'conversion', {
                send_to: sendTo,
                value: finalValue,
                currency: finalCurrency,
                transaction_id: finalTransaction
            });
            console.info('[GA Conversion] Conversion fired.', {
                plan: planKey,
                value: finalValue,
                currency: finalCurrency,
                transaction_id: finalTransaction
            });
        });

        conversionFired = true;
    }

    // Process signup conversions
    if (signupConversion) {
        console.info('[GA Conversion] Sign-up conversion detected.', signupConversion);
        fireStaticConversion(signupConversion);
        try {
            const redditPayload = {};
            if (signupConversion.meta && signupConversion.meta.method) {
                redditPayload.method = signupConversion.meta.method;
            }
            rdt('track', 'SignUp', redditPayload);
            console.info('[Reddit Pixel] Sign-up conversion fired.', redditPayload);
        } catch (error) {
            console.warn('[Reddit Pixel] Failed to fire sign-up conversion.', error);
        }
    }

    // Process subscription conversions from flashdata
    if (conversionData && conversionData.plan) {
        console.info('[GA Conversion] Flash conversion data detected.', conversionData);
        fireConversion(conversionData.plan, conversionData.amount, conversionData.transaction_id);
    }

    // Note: Session polling has been removed. Conversions are now tracked via webhook + flashdata only.

    // Expose function for payment modal to fire conversions immediately
    window.firePaymentConversion = function(conversionData) {
        if (!conversionData || !conversionData.plan) {
            console.warn('[GA Conversion] Invalid conversion data provided to firePaymentConversion');
            return;
        }

        console.info('[GA Conversion] Firing conversion from payment modal:', conversionData);
        fireConversion(conversionData.plan, conversionData.amount, conversionData.transaction_id);
    };
})();
</script>
<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a4ab5e8b8b16d23c',t:'MTc5MjAzMTA4NQ=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script></body>
</html>

Latest requests

# Url Url Source Date
1 https://writexo.com/share/oknmr27h 2026-10-15 02:24:45
2 https://www.texarkanatwins.com/%25… 2026-10-15 02:24:45
3 https://www.texarkanatwins.com/%25… 2026-10-15 02:24:44
4 https://www.texarkanatwins.com/%25… 2026-10-15 02:24:43
5 https://auth.mediacorp.sg/u/login?… 2026-10-15 02:24:43
6 https://www.texarkanatwins.com/%25… 2026-10-15 02:24:42
7 https://www.texarkanatwins.com/%25… 2026-10-15 02:24:41
8 https://www.texarkanatwins.com/%25… 2026-10-15 02:24:40
9 https://www.texarkanatwins.com/%25… 2026-10-15 02:24:40
10 https://auth.mediacorp.sg/u/login?… 2026-10-15 02:24:40
11 https://www.texarkanatwins.com/%25… 2026-10-15 02:24:39
12 https://www.texarkanatwins.com/%25… 2026-10-15 02:24:38
13 https://www.texarkanatwins.com/%25… 2026-10-15 02:24:37
14 https://www.texarkanatwins.com/%25… 2026-10-15 02:24:37
15 https://www.thebolditalic.com/?gi=… 2026-10-15 02:24:36
16 https://www.texarkanatwins.com/%25… 2026-10-15 02:24:35
17 https://www.texarkanatwins.com/%25… 2026-10-15 02:24:34
18 https://www.texarkanatwins.com/%25… 2026-10-15 02:24:33
19 https://sciencewiki.science/wiki/T… 2026-10-15 02:24:33
20 https://www.texarkanatwins.com/%25… 2026-10-15 02:24:32