blob: 5b5238c497e6a4edd62a0b9537cc73a4a344c7c4 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
import React from 'dom-chef';
import features from '../feature-manager.js';
import {wrap} from '../helpers/dom-utils.js';
import observe from '../helpers/selector-observer.js';
function addLocation({nextElementSibling, nextSibling}: SVGElement): Element {
// `nextSibling` alone might point to an empty TextNode before an element, if there’s an element
const userLocation = nextElementSibling ?? nextSibling as Element;
const locationName = userLocation.textContent!.trim();
const googleMapsLink = `https://www.google.com/maps/search/?api=1&query=${encodeURIComponent(locationName)}`;
userLocation.before(' '); // Keeps the link’s underline from extending out to the icon
const link = <a className="Link--primary" href={googleMapsLink}/>;
if (userLocation.parentElement!.closest('.Popover')) {
// Match the style of other links in the hovercard
link.classList.add('text-underline');
}
wrap(userLocation, link);
return link;
}
// No `include`, no `signal` necessary
function init(): void {
observe([
'[itemprop="homeLocation"] svg.octicon-location', // `isUserProfile`
'[aria-label="user location"] svg.octicon-location', // Hover cards
], addLocation);
}
void features.add(import.meta.url, {
init,
});
|