Skip to content

Commit a318523

Browse files
authored
Merge pull request #928 from BassemHalim/refactor
Refactor common logic in core.ts
2 parents 8233cc4 + d18fa4d commit a318523

1 file changed

Lines changed: 56 additions & 57 deletions

File tree

src/livecodes/core.ts

Lines changed: 56 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -3131,45 +3131,40 @@ const registerMenuButton = (menu: HTMLElement, button: HTMLElement) => {
31313131
};
31323132

31333133
const handleAppMenuProject = () => {
3134-
const menuProjectContainer = UI.getAppMenuProjectScroller();
3135-
const menuProjectButton = UI.getAppMenuProjectButton();
3136-
if (!menuProjectContainer || !menuProjectButton) return;
3137-
3138-
const html = isMac()
3139-
? menuProjectHTML.replace(/<kbd>Ctrl<\/kbd>/g, '<kbd>⌘</kbd>')
3140-
: menuProjectHTML;
3141-
menuProjectContainer.innerHTML = html;
3142-
translateElement(menuProjectContainer);
3143-
// adjustFontSize(menuProjectContainer);
3144-
registerMenuButton(menuProjectContainer, menuProjectButton);
3134+
setupAppMenu(UI.getAppMenuProjectScroller(), UI.getAppMenuProjectButton(), menuProjectHTML);
31453135
};
31463136

31473137
const handleAppMenuSettings = () => {
3148-
const menuSettingsContainer = UI.getAppMenuSettingsScroller();
3149-
const menuSettingsButton = UI.getAppMenuSettingsButton();
3150-
if (!menuSettingsContainer || !menuSettingsButton) return;
3151-
3152-
const html = isMac()
3153-
? menuSettingsHTML.replace(/<kbd>Ctrl<\/kbd>/g, '<kbd>⌘</kbd>')
3154-
: menuSettingsHTML;
3155-
menuSettingsContainer.innerHTML = html;
3156-
3157-
translateElement(menuSettingsContainer);
3158-
adjustFontSize(menuSettingsContainer);
3159-
registerMenuButton(menuSettingsContainer, menuSettingsButton);
3138+
setupAppMenu(
3139+
UI.getAppMenuSettingsScroller(),
3140+
UI.getAppMenuSettingsButton(),
3141+
menuSettingsHTML,
3142+
true,
3143+
);
31603144
};
31613145

31623146
const handleAppMenuHelp = () => {
3163-
const menuHelpContainer = UI.getAppMenuHelpScroller();
3164-
const menuHelpButton = UI.getAppMenuHelpButton();
3165-
if (!menuHelpContainer || !menuHelpButton) return;
3147+
setupAppMenu(UI.getAppMenuHelpScroller(), UI.getAppMenuHelpButton(), menuHelpHTML);
3148+
};
3149+
3150+
const setupAppMenu = (
3151+
container: HTMLElement | null,
3152+
button: HTMLElement | null,
3153+
menuHTML: string,
3154+
shouldAdjustFontSize = false,
3155+
) => {
3156+
if (!container || !button) return;
3157+
3158+
const html = isMac() ? menuHTML.replaceAll('<kbd>Ctrl</kbd>', '<kbd>⌘</kbd>') : menuHTML;
3159+
3160+
container.innerHTML = html;
3161+
translateElement(container);
31663162

3167-
const html = isMac() ? menuHelpHTML.replace(/<kbd>Ctrl<\/kbd>/g, '<kbd>⌘</kbd>') : menuHelpHTML;
3168-
menuHelpContainer.innerHTML = html;
3169-
menuHelpContainer.classList.add('hidden');
3170-
translateElement(menuHelpContainer);
3171-
// adjustFontSize(menuHelpContainer);
3172-
registerMenuButton(menuHelpContainer, menuHelpButton);
3163+
if (shouldAdjustFontSize) {
3164+
adjustFontSize(container);
3165+
}
3166+
3167+
registerMenuButton(container, button);
31733168
};
31743169

31753170
/**
@@ -4808,14 +4803,23 @@ const handleResultLoading = () => {
48084803
eventsManager.addEventListener(window, 'message', showResultModeDrawer);
48094804
};
48104805

4806+
const createToolButton = (id: string, title: string, innerHTML: string) => {
4807+
const btn = document.createElement('div');
4808+
btn.id = id;
4809+
btn.classList.add('tool-buttons');
4810+
btn.title = title;
4811+
btn.style.pointerEvents = 'all'; // override setting to 'none' on toolspane bar
4812+
btn.innerHTML = innerHTML;
4813+
UI.getToolspaneTitles()?.appendChild(btn);
4814+
return btn;
4815+
};
4816+
48114817
const handleResultPopup = () => {
4812-
const popupBtn = document.createElement('div');
4813-
popupBtn.id = 'result-popup-btn';
4814-
popupBtn.classList.add('tool-buttons');
4815-
popupBtn.title = window.deps.translateString('core.result.hint', 'Show result in new window');
4816-
popupBtn.style.pointerEvents = 'all'; // override setting to 'none' on toolspane bar
4817-
const iconCSS = '<i class="icon-window-new"></i>';
4818-
popupBtn.innerHTML = `<button id="show-result">${iconCSS}</button>`;
4818+
const popupBtn = createToolButton(
4819+
'result-popup-btn',
4820+
window.deps.translateString('core.result.hint', 'Show result in new window'),
4821+
`<button id="show-result"><i class="icon-window-new"></i></button>`,
4822+
);
48194823
let url: string | undefined;
48204824
const openWindow = async () => {
48214825
if (resultPopup && !resultPopup.closed) {
@@ -4848,17 +4852,14 @@ const handleResultPopup = () => {
48484852
};
48494853

48504854
const handleResultZoom = () => {
4851-
const zoomBtn = document.createElement('div');
4852-
zoomBtn.id = 'zoom-button';
4853-
zoomBtn.classList.add('tool-buttons');
4854-
zoomBtn.title = window.deps.translateString('core.zoom.hint', 'Zoom') + ' (Ctrl/Cmd + Alt + Z)';
4855-
zoomBtn.style.pointerEvents = 'all'; // override setting to 'none' on toolspane bar
4856-
zoomBtn.innerHTML = `
4857-
<button class="text">
4858-
<span id="zoom-value">${String(Number(getConfig().zoom))}</span>
4859-
&times;
4860-
</button>`;
4861-
4855+
const zoomBtn = createToolButton(
4856+
'zoom-button',
4857+
window.deps.translateString('core.zoom.hint', 'Zoom') + ' (Ctrl/Cmd + Alt + Z)',
4858+
`<button class="text">
4859+
<span id="zoom-value">${String(Number(getConfig().zoom))}</span>
4860+
&times;
4861+
</button>`,
4862+
);
48624863
const toggleZoom = () => {
48634864
const config = getConfig();
48644865
const currentZoom = config.zoom;
@@ -4876,13 +4877,11 @@ const handleResultZoom = () => {
48764877
};
48774878

48784879
const handleBroadcastStatus = () => {
4879-
const broadcastStatusBtn = document.createElement('div');
4880-
broadcastStatusBtn.id = 'broadcast-status-btn';
4881-
broadcastStatusBtn.classList.add('tool-buttons');
4882-
broadcastStatusBtn.title = window.deps.translateString('core.broadcast.heading', 'Broadcast');
4883-
broadcastStatusBtn.style.pointerEvents = 'all'; // override setting to 'none' on toolspane bar
4884-
const iconCSS = '<i class="icon-broadcast"></i>';
4885-
broadcastStatusBtn.innerHTML = `<button id="broadcast-status">${iconCSS}<span class="mark"></span></button>`;
4880+
const broadcastStatusBtn = createToolButton(
4881+
'broadcast-status-btn',
4882+
window.deps.translateString('core.broadcast.heading', 'Broadcast'),
4883+
`<button id="broadcast-status"><i class="icon-broadcast"></i><span class="mark"></span></button>`,
4884+
);
48864885

48874886
const showBroadcast = () => {
48884887
showScreen('broadcast');

0 commit comments

Comments
 (0)