blob: 214c636ed37f773508b434250dd69d09ddad37cc (
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
38
39
40
|
import React from 'dom-chef';
import select from 'select-dom';
import {wrap, isEditable} from '../libs/dom-utils';
import features from '../libs/features';
function addLocation(baseElement: HTMLElement): void {
for (const {nextElementSibling, nextSibling} of select.all('.octicon-location', baseElement)) {
const location = nextElementSibling || nextSibling!; // `nextSibling` alone might point to an empty TextNode before an element, if there’s an element
if (isEditable(location)) {
continue;
}
const locationName = location.textContent!.trim();
const googleMapsLink = `https://www.google.com/maps/search/?api=1&query=${encodeURIComponent(locationName)}`;
location.before(' '); // Keeps the link’s underline from extending out to the icon
wrap(location, <a href={googleMapsLink} />);
}
}
const hovercardObserver = new MutationObserver(([mutation]) => {
addLocation(mutation.target as HTMLElement);
});
function init(): void {
addLocation(document.body);
const hovercardContainer = select('.js-hovercard-content > .Popover-message');
if (hovercardContainer) {
hovercardObserver.observe(hovercardContainer, {childList: true});
}
}
features.add({
id: __featureName__,
description: 'Linkifies the user location in their hovercard and profile page.',
screenshot: 'https://user-images.githubusercontent.com/1402241/69076885-00d3a100-0a67-11ea-952a-690acec0826f.png',
load: features.onAjaxedPages,
init
});
|