您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
2023-12-06 @ 20:10:15 (OSM, OpenStreetMaps)
当前为
- // ==UserScript==
- // @name OpenStreetMap Changeset Viewer Integration v.MM
- // @namespace Violentmonkey Scripts
- // @match https://www.openstreetmap.org/*
- // @match https://osm.mapki.com/*
- // @match https://overpass-api.de/achavi/*
- // @match https://rene78.github.io/latest-changes/*
- // @grant none
- // @version 1.1.2
- // @license GNU Affero General Public License v3.0
- // @author Marek-M
- // @description 2023-12-06 @ 20:10:15 (OSM, OpenStreetMaps)
- // @updateURL
- // @downloadURL
- // ==/UserScript==
- (() => {
- 'use strict'
- const pattern = /^https?:\/\/(www\.)?(osm\.org|openstreetmap\.org)\/(changeset)\/(\d+)$/g
- // const pattern2 = /^(Zestaw zmian: )(\d+)$/g
- const addHistoryButtons = linkElement => {
- if (linkElement.getAttribute('data-history-button')) return
- const matched = linkElement.href.match(pattern)
- if (!matched) return
- const [_, __, ___, type, id] = matched[0].split('/')
- // historyLinksArray - each element should have 3 elements: [textContent, title, historyLink]
- const textContent = 0, title = 1, historyLink = 2
- const historyLinksArray =
- [
- ['A', `Check in Achavi - changeset no. ${id}` , `https://overpass-api.de/achavi/?changeset=${id}` ],
- ['V', `Check Changeset with Comparison Visualization - changeset no. ${id}` , `https://resultmaps.neis-one.org/osm-change-viz?c=${id}` ],
- ['C', `Check in OSMCha - changeset no. ${id}` , `https://osmcha.org/changesets/${id}` ],
- ['H', `OSM History Viewer - changeset no. ${id}` , `https://osmhv.openstreetmap.de/changeset.jsp?id=${id}` ]
- ]
- historyLinksArray.forEach
- (
- (historyLinkArrayElement) =>
- {
- const button = document.createElement('a')
- button.textContent = historyLinkArrayElement[textContent]
- button.title = historyLinkArrayElement[title]
- button.href = historyLinkArrayElement[historyLink]
- button.alt = button.title
- button.target = '_blank'
- button.style.paddingLeft = '0.45ch'
- button.style.paddingRight = '0.20ch'
- button.style.position = 'relative'
- button.style.top = '-0.5ch'
- button.style.display = 'inline-block'
- button.style.transform = 'scale(1.1)'
- button.style.fontSize = '70%'
- button.addEventListener('click', event => {event.stopPropagation()})
- linkElement.insertAdjacentElement('beforeend', button)
- }
- ) // forEach
- linkElement.setAttribute('data-history-button', 'true')
- }
- const scanLinks = () => {
- const links = document.querySelectorAll('a')
- links.forEach(addHistoryButtons)
- }
- const observer = new MutationObserver(scanLinks)
- observer.observe(document.body, {
- childList: true,
- subtree: true
- })
- scanLinks()
- })()