arXiv and ar5iv Integration Buttons

Adds navigation buttons between arXiv and ar5iv pages

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

ستحتاج إلى تثبيت إضافة مثل Stylus لتثبيت هذا النمط.

ستحتاج إلى تثبيت إضافة لإدارة أنماط المستخدم لتتمكن من تثبيت هذا النمط.

ستحتاج إلى تثبيت إضافة لإدارة أنماط المستخدم لتثبيت هذا النمط.

ستحتاج إلى تثبيت إضافة لإدارة أنماط المستخدم لتثبيت هذا النمط.

(لدي بالفعل مثبت أنماط للمستخدم، دعني أقم بتثبيته!)

// ==UserScript==
// @name         arXiv and ar5iv Integration Buttons
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  Adds navigation buttons between arXiv and ar5iv pages
// @author       Your Name
// @match        https://arxiv.org/abs/*
// @match        https://ar5iv.labs.arxiv.org/html/*
// @grant        none
// @run-at       document-end
// @license MIT
// ==/UserScript==

(function() {
    'use strict';

    // 判断当前网站类型
    const isArxiv = window.location.href.includes('arxiv.org/abs/');
    const isAr5iv = window.location.href.includes('ar5iv.labs.arxiv.org/html/');

    // 在arXiv上添加ar5iv按钮
    function addAr5ivButton() {
        // 检查是否是论文页面
        if (!window.location.href.match(/arxiv\.org\/abs\//)) {
            return;
        }

        // 检查是否已有HTML链接
        const existingHtmlLink = document.querySelector('#latexml-download-link');
        if (existingHtmlLink) {
            return; // 已经有HTML链接,不添加新按钮
        }

        // 获取完整的论文ID路径(保留原始格式)
        const paperIdPath = window.location.pathname.replace('/abs/', '');
        if (!paperIdPath) {
            return;
        }

        // 找到放置按钮的位置
        const fullTextUl = document.querySelector('.full-text ul');
        if (!fullTextUl) {
            return;
        }

        // 创建新的ar5iv按钮
        const newLi = document.createElement('li');
        const newLink = document.createElement('a');
        newLink.href = `https://ar5iv.org/abs/${paperIdPath}`;
        newLink.className = 'abs-button ar5iv-button';
        newLink.textContent = 'View on Ar5iv';
        newLink.target = '_blank'; // 在新标签页打开

        // 添加到页面
        newLi.appendChild(newLink);
        fullTextUl.appendChild(newLi);
    }

    // 在ar5iv上添加arXiv悬浮按钮
    function addFloatingButton() {
        // 获取论文ID
        const path = window.location.pathname;
        const htmlPrefix = '/html/';
        if (!path.startsWith(htmlPrefix)) return;

        const paperId = path.substring(htmlPrefix.length);
        if (!paperId) return;

        // 创建悬浮容器
        const floatingDiv = document.createElement('div');
        floatingDiv.id = 'arxiv-floating-button';

        // 设置容器样式
        Object.assign(floatingDiv.style, {
            position: 'fixed',
            bottom: '30px',
            right: '30px',
            backgroundColor: 'rgba(255, 255, 255, 0.9)',
            borderRadius: '18px',
            boxShadow: '0 4px 15px rgba(0, 0, 0, 0.1)',
            padding: '12px 18px',
            display: 'flex',
            alignItems: 'center',
            justifyContent: 'center',
            fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif',
            fontSize: '15px',
            zIndex: '10000',
            backdropFilter: 'blur(10px)',
            WebkitBackdropFilter: 'blur(10px)', // Safari支持
            transition: 'all 0.3s ease',
            cursor: 'pointer',
            border: '1px solid rgba(210, 210, 210, 0.8)'
        });

        // 悬停效果
        floatingDiv.onmouseover = function() {
            this.style.backgroundColor = 'rgba(255, 255, 255, 0.95)';
            this.style.boxShadow = '0 6px 20px rgba(0, 0, 0, 0.15)';
            this.style.transform = 'translateY(-2px)';
        };

        floatingDiv.onmouseout = function() {
            this.style.backgroundColor = 'rgba(255, 255, 255, 0.9)';
            this.style.boxShadow = '0 4px 15px rgba(0, 0, 0, 0.1)';
            this.style.transform = 'translateY(0)';
        };

        // 点击效果
        floatingDiv.onmousedown = function() {
            this.style.transform = 'translateY(1px)';
            this.style.boxShadow = '0 2px 8px rgba(0, 0, 0, 0.1)';
        };

        floatingDiv.onmouseup = function() {
            this.style.transform = 'translateY(-2px)';
            this.style.boxShadow = '0 6px 20px rgba(0, 0, 0, 0.15)';
        };

        // 创建文本
        const text = document.createElement('span');
        text.textContent = 'View on arXiv';
        text.style.fontWeight = '500';
        text.style.color = '#333';

        // 组装按钮
        floatingDiv.appendChild(text);

        // 点击跳转到arXiv
        floatingDiv.addEventListener('click', function() {
            window.open(`https://arxiv.org/abs/${paperId}`, '_blank');
        });

        // 添加到页面
        document.body.appendChild(floatingDiv);
    }

    // 根据当前网站执行相应功能
    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', function() {
            if (isArxiv) {
                addAr5ivButton();
            } else if (isAr5iv) {
                addFloatingButton();
            }
        });
    } else {
        if (isArxiv) {
            addAr5ivButton();
        } else if (isAr5iv) {
            addFloatingButton();
        }
    }
})();