84 lines
1.8 KiB
TypeScript
84 lines
1.8 KiB
TypeScript
import WakaTimeCore from './core/WakaTimeCore';
|
|
|
|
const twoMinutes = 120000;
|
|
|
|
interface DesignProject {
|
|
category: string;
|
|
editor: string;
|
|
language: string;
|
|
project: string;
|
|
}
|
|
|
|
const parseCanva = (): DesignProject | undefined => {
|
|
const canvaProject = document.getElementsByClassName('rF765A');
|
|
if (canvaProject.length === 0) return;
|
|
|
|
const projectName = (document.head.querySelector('meta[property="og:title"]') as HTMLMetaElement)
|
|
.content;
|
|
return {
|
|
category: 'Designing',
|
|
editor: 'Canva',
|
|
language: 'Canva Design',
|
|
project: projectName,
|
|
};
|
|
};
|
|
|
|
const parseFigma = (): DesignProject | undefined => {
|
|
const figmaProject = document.getElementsByClassName('gpu-view-content');
|
|
if (figmaProject.length === 0) return;
|
|
|
|
const projectName = (document.querySelector('span[data-testid="filename"]') as HTMLElement)
|
|
.innerText;
|
|
return {
|
|
category: 'Designing',
|
|
editor: 'Figma',
|
|
language: 'Figma Design',
|
|
project: projectName,
|
|
};
|
|
};
|
|
|
|
const getParser: {
|
|
[key: string]:
|
|
| (() => { editor: string; language: string; project: string } | undefined)
|
|
| undefined;
|
|
} = {
|
|
'www.canva.com': parseCanva,
|
|
'www.figma.com': parseFigma,
|
|
};
|
|
|
|
const init = async () => {
|
|
const { hostname } = document.location;
|
|
|
|
const projectDetails = getParser[hostname]?.();
|
|
|
|
if (projectDetails) {
|
|
await WakaTimeCore.recordHeartbeat(projectDetails);
|
|
}
|
|
};
|
|
|
|
function debounce(func: () => void, timeout = twoMinutes) {
|
|
let timer: NodeJS.Timeout | undefined;
|
|
return () => {
|
|
if (timer) {
|
|
return;
|
|
}
|
|
func();
|
|
timer = setTimeout(() => {
|
|
clearTimeout(timer);
|
|
timer = undefined;
|
|
}, timeout);
|
|
};
|
|
}
|
|
|
|
document.body.addEventListener(
|
|
'click',
|
|
debounce(() => init()),
|
|
true,
|
|
);
|
|
|
|
document.body.addEventListener(
|
|
'keypress',
|
|
debounce(() => init()),
|
|
true,
|
|
);
|