arxiv-extensions

HTML version of arxiv & AI chat for arxiv

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 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.

(Tôi đã có Trình quản lý tập lệnh người dùng, hãy cài đặt nó!)

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.

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

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

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

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

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

// ==UserScript==
// @name         arxiv-extensions
// @namespace    http://tampermonkey.net/
// @version      0.3
// @description  HTML version of arxiv & AI chat for arxiv
// @author       [email protected]
// @match        https://arxiv.org/abs/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=arxiv.org
// @grant        GM_openInTab
// @license      MIT
// ==/UserScript==



(function() {
  'use strict';

  // 1. Create HTML/vanity/AI Chat link
  const createLink = function(name, url) {
    const link = document.createElement('a');
    link.style.cssText = `display: inline-block; border-left: 2px solid #fff; padding-left: 10px; margin-left: 10px;`;
    link.target = '_blank';
    link.href = url;
    link.textContent = name;
    return link;
  };

  const href = window.location.href;
  const htmlVersionEntry = createLink('HTML(ar5iv)', href.replace('arxiv.org', 'ar5iv.org'));
  const htmlVersionFromVanity = createLink('HTML(vanity)', href.replace('arxiv.org', 'www.arxiv-vanity.com').replace('/pdf/', '/papers/').replace('.pdf', '/'));
  const aiChatEntry = createLink('AI Chat', href.replace('arxiv.org', 'arxiw.org'));

  const target = document.querySelector('.header-breadcrumbs');
  target.appendChild(htmlVersionEntry);
  target.appendChild(htmlVersionFromVanity);
  target.appendChild(aiChatEntry);

  // 2. Open HTML or PDF in new tab
  const match = href.match(/arxiv\.org\/abs\/([a-zA-Z0-9.-]+(?:v\d+)?)/);
  if (!match) return;
  const id = match[1];

  const htmlUrl = `https://arxiv.org/html/${id}`;
  const pdfUrl = `https://arxiv.org/pdf/${id}.pdf`;

  fetch(htmlUrl, { method: 'HEAD' }). then(resp => {
    if (resp.ok && resp.headers.get('content-type')?.includes('html')) {
        GM_openInTab(htmlUrl, { active: false, insert: true, setParent: true });
    } else {
        GM_openInTab(pdfUrl, { active: false, insert: true, setParent: true });
    }
  }).catch(() => {
      GM_openInTab(pdfUrl, { active: false, insert: true, setParent: true });
  });
})();