Skip to content

Commit 968d61d

Browse files
authored
Merge pull request #243 from swfz/feature/add-platform
feature/add platform
2 parents 5cfbfce + 4357a40 commit 968d61d

File tree

4 files changed

+39
-7
lines changed

4 files changed

+39
-7
lines changed

.prettierignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
**/.git
22
**/node_modules
33
**/dist
4+
pnpm-lock.yaml

content_script/presenter_subscribe.ts

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,15 @@
11
console.log('loaded google slide comment stream');
22
let commentSubscribed = false;
33

4-
const subscribeComments = (observeElement, sendResponse) => {
4+
const selectors = {
5+
gslide: {
6+
commentNodeClassName: 'punch-viewer-speaker-questions',
7+
listNodeSelector: '.punch-viewer-speaker-questions',
8+
extractFn: (el) => el.children[1].children[2],
9+
},
10+
}
11+
12+
const subscribeComments = (platform, observeElement, sendResponse) => {
513
const broadcastChannel = new BroadcastChannel('comment_channel');
614

715
const extractComment = (mutationRecords: MutationRecord[]): string[] => {
@@ -10,12 +18,12 @@ const subscribeComments = (observeElement, sendResponse) => {
1018
.filter((record) => {
1119
const element = record.target as Element;
1220

13-
return element.className === 'punch-viewer-speaker-questions';
21+
return element.className === selectors[platform].commentNodeClassName;
1422
})
1523
.map((record) => record.addedNodes[0]);
1624
const comments = Array.from(nodes).map((node) => {
1725
const element = node as HTMLElement;
18-
const commentElement = element.children[1].children[2] as HTMLElement;
26+
const commentElement = selectors[platform].extractFn(element) as HTMLElement;
1927

2028
return commentElement.innerText;
2129
});
@@ -56,15 +64,16 @@ const extractAllComments = (sendResponse) => {
5664
};
5765

5866
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
59-
const observeElement = document.querySelector<HTMLDivElement>('.punch-viewer-speaker-questions');
67+
const platform = message.platform;
68+
const observeElement = document.querySelector<HTMLDivElement>(selectors[platform].listNodeSelector);
6069

6170
if (observeElement === null) {
6271
return;
6372
}
6473

6574
if (message.command === 'Load') {
6675
if (!commentSubscribed) {
67-
subscribeComments(observeElement, sendResponse);
76+
subscribeComments(platform, observeElement, sendResponse);
6877
console.log('subscribe presenter usertool started');
6978
}
7079
} else if (message.command === 'Download') {

script/patch_manifest.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import fs from 'fs'
1+
import fs from 'fs';
22

33
const manifest = JSON.parse(fs.readFileSync('dist/manifest.json'));
44

src/App.tsx

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { ChangeEvent, useEffect, useState } from 'react';
22
import './App.css';
33

44
type Config = {
5+
platform?: string;
56
color?: string;
67
font?: string;
78
speedPx?: number;
@@ -15,10 +16,14 @@ function App() {
1516
const [status, setStatus] = useState<string>();
1617
const [presenter, setPresenter] = useState<number | null>();
1718

19+
const platforms: Config['platform'][] = ['gslide'];
1820
const fonts = ['メイリオ', 'MS ゴシック', 'MS 明朝', 'HGS行書体', 'HGP創英角ポップ体'];
1921

2022
const claps = ['none', 'black', 'white', 'pink'];
2123

24+
const handlePlatformChange = (event: ChangeEvent<HTMLSelectElement>) => {
25+
setConfig((prev) => ({ ...prev, platform: event.target.value }));
26+
};
2227
const handleColorChange = (event: ChangeEvent<HTMLInputElement>) => {
2328
setConfig((prev) => ({ ...prev, color: event.target.value }));
2429
};
@@ -46,7 +51,7 @@ function App() {
4651
}
4752

4853
chrome.storage.sync.set({ config });
49-
chrome.tabs.sendMessage(tab.id, { command: 'Load' }, (res) => {
54+
chrome.tabs.sendMessage(tab.id, { command: 'Load', platform: config?.platform }, (res) => {
5055
setStatus(res.message);
5156
if (res.screenType === 'presenter') {
5257
chrome.storage.sync.set({ presenter: tab.id });
@@ -106,6 +111,23 @@ function App() {
106111
<p>Click "Start" on both the slide side and the presenter user tools side</p>
107112
<form>
108113
<div className="pseudo-table">
114+
<div className="pseudo-row">
115+
<label htmlFor="platform" className="pseudo-cell">
116+
Subscribe Platform:{' '}
117+
</label>
118+
<div className="pseudo-cell">
119+
<select value={config?.platform || 'gslide'} onChange={handlePlatformChange}>
120+
{platforms.map((platform) => {
121+
return (
122+
<option key={platform} value={platform}>
123+
{platform}
124+
</option>
125+
);
126+
})}
127+
</select>
128+
</div>
129+
</div>
130+
109131
<div className="pseudo-row">
110132
<label htmlFor="color" className="pseudo-cell">
111133
Comment Color:{' '}

0 commit comments

Comments
 (0)