diff --git a/myApp.js b/myApp.js
index 201f9cb..1f1ba2f 100644
--- a/myApp.js
+++ b/myApp.js
@@ -124,6 +124,18 @@ const mb = menubar({
},
});
+const executeUnsafeJavaScript = (js) => mb.window.webContents.executeJavaScript(js);
+
+const setElementHtml = (selector, html) =>
+ // This is caused by a Pretter/eslint mismatch
+ // eslint-disable-next-line implicit-arrow-linebreak
+ executeUnsafeJavaScript(
+ `document.querySelector("${escapeQuotes(selector)}").innerHTML = "${escapeQuotes(html).replace(
+ /\n/g,
+ '\\n',
+ )}"`,
+ );
+
function openSettingsPage() {
// eslint-disable-next-line no-underscore-dangle
if (!mb._isVisible) {
@@ -132,24 +144,16 @@ function openSettingsPage() {
if (store.analytics) {
visitor.pageview('/settings').send();
}
- mb.window.webContents.executeJavaScript(
+ executeUnsafeJavaScript(
'document.getElementById("detail-header-content").classList.remove("empty")',
);
- mb.window.webContents.executeJavaScript(
- 'document.getElementById("detail-header-content").innerHTML = "Settings"',
- );
- mb.window.webContents.executeJavaScript(
- 'document.getElementById("detail-content").innerHTML = ""',
- );
- mb.window.webContents.executeJavaScript('document.getElementById("detail-view").style.left = 0');
- mb.window.webContents.executeJavaScript('document.body.style.overflow = "hidden"');
+ setElementHtml('#detail-header-content', 'Settings');
+ setElementHtml('#detail-content', '');
+ executeUnsafeJavaScript('document.getElementById("detail-view").style.left = 0');
+ executeUnsafeJavaScript('document.body.style.overflow = "hidden"');
const lightString = "'light'";
const darkString = "'dark'";
- mb.window.webContents.executeJavaScript(
- `document.getElementById("detail-headline").innerHTML = "${escapeQuotes(
- 'Theme ',
- )}"`,
- );
+ setElementHtml('#detail-headline', 'Theme ');
let settingsString = '';
const theme = `
`;
if (store.user_id && store.username) {
@@ -207,19 +211,10 @@ function openSettingsPage() {
} else {
settingsString = theme;
}
- mb.window.webContents.executeJavaScript(
- `document.getElementById("detail-content").innerHTML = "${escapeQuotes(settingsString)}` +
- '"',
- );
- mb.window.webContents.executeJavaScript(
- 'document.getElementById("light-mode").classList.remove("active")',
- );
- mb.window.webContents.executeJavaScript(
- 'document.getElementById("dark-mode").classList.remove("active")',
- );
- mb.window.webContents.executeJavaScript(
- `document.getElementById("${store.theme}-mode").classList.add("active")`,
- );
+ setElementHtml('#detail-content', `${settingsString}`);
+ executeUnsafeJavaScript('document.getElementById("light-mode").classList.remove("active")');
+ executeUnsafeJavaScript('document.getElementById("dark-mode").classList.remove("active")');
+ executeUnsafeJavaScript(`document.getElementById("${store.theme}-mode").classList.add("active")`);
}
function openAboutPage() {
@@ -230,20 +225,14 @@ function openAboutPage() {
if (store.analytics) {
visitor.pageview('/about').send();
}
- mb.window.webContents.executeJavaScript(
+ executeUnsafeJavaScript(
'document.getElementById("detail-header-content").classList.remove("empty")',
);
- mb.window.webContents.executeJavaScript(
- 'document.getElementById("detail-header-content").innerHTML = "About GitDock ⚓️"',
- );
- mb.window.webContents.executeJavaScript(
- 'document.getElementById("detail-content").innerHTML = ""',
- );
- mb.window.webContents.executeJavaScript('document.getElementById("detail-view").style.left = 0');
- mb.window.webContents.executeJavaScript('document.body.style.overflow = "hidden"');
- mb.window.webContents.executeJavaScript(
- 'document.getElementById("detail-headline").innerHTML = "About GitDock ⚓️ "',
- );
+ setElementHtml('#detail-header-content', 'About GitDock ⚓️');
+ setElementHtml('#detail-content', '');
+ executeUnsafeJavaScript('document.getElementById("detail-view").style.left = 0');
+ executeUnsafeJavaScript('document.body.style.overflow = "hidden"');
+ setElementHtml('#detail-headline', 'About GitDock ⚓️ ');
let aboutString =
'GitDock is a MacOS/Windows/Linux app that displays all your GitLab activities in one place. Instead of the GitLab typical project- or group-centric approach, it collects all your information from a user-centric perspective.
';
aboutString +=
@@ -253,9 +242,7 @@ function openAboutPage() {
aboutString +=
'If you are thinking about contributing directly, check out our contribution guidelines .
';
aboutString += `Version ${version}
`;
- mb.window.webContents.executeJavaScript(
- `document.getElementById("detail-content").innerHTML = "${aboutString}"`,
- );
+ setElementHtml('#detail-content', `${aboutString}`);
}
function setupLinuxContextMenu(baseMenuItems) {
@@ -326,16 +313,16 @@ function chooseCertificate() {
}, 200);
if (filepaths) {
const filepath = filepaths[0].replace(/\\/g, '/'); // convert \ to / otherwise separators get lost on windows
- mb.window.webContents.executeJavaScript(
+ executeUnsafeJavaScript(
'document.getElementById("custom-cert-path-button").classList.add("hidden")',
);
- mb.window.webContents.executeJavaScript(
+ executeUnsafeJavaScript(
`document.getElementById("custom-cert-path-text").innerText="${filepath}"`,
);
- mb.window.webContents.executeJavaScript(
+ executeUnsafeJavaScript(
'document.getElementById("custom-cert-path-text").classList.remove("hidden")',
);
- mb.window.webContents.executeJavaScript(
+ executeUnsafeJavaScript(
'document.getElementById("custom-cert-path-reset").classList.remove("hidden")',
);
}
@@ -351,9 +338,7 @@ function repaintShortcuts() {
shortcut += `Add another shortcut ${chevronRightIcon} `;
}
shortcut += '';
- mb.window.webContents.executeJavaScript(
- `document.getElementById("shortcut").innerHTML = "${escapeQuotes(shortcut)}"`,
- );
+ setElementHtml('#shortcut', shortcut);
}
function base64URLEncode(str) {
@@ -449,14 +434,12 @@ async function getUser() {
avatarUrl.href += '?width=64';
}
}
- const userString = `${escapeHtml(
user.name,
)} @${escapeHtml(user.username)}
`;
- mb.window.webContents.executeJavaScript(
- `document.getElementById("user").innerHTML = "${escapeQuotes(userString)}"`,
- );
+ setElementHtml('#user', userHtml);
lastUserExecution = Date.now();
lastUserExecutionFinished = true;
} else {
@@ -466,11 +449,10 @@ async function getUser() {
}
function displayUsersProjects() {
- let favoriteProjectsString = '';
+ let favoriteProjectsHtml = '';
const projects = store['favorite-projects'];
if (projects && projects.length > 0) {
- favoriteProjectsString +=
- '';
+ favoriteProjectsHtml += '';
const chevron = chevronLgRightIcon;
projects.forEach((projectObject) => {
const projectString = "'Project'";
@@ -479,21 +461,19 @@ function displayUsersProjects() {
jsonProjectObject.namespace.name = projectObject.namespace.name;
jsonProjectObject.name = projectObject.name;
const projectJson = `'${escapeHtml(JSON.stringify(jsonProjectObject))}'`;
- favoriteProjectsString += `${projectIcon}`;
- favoriteProjectsString += `${escapeHtml(
+ favoriteProjectsHtml += `${projectIcon}`;
+ favoriteProjectsHtml += `${escapeHtml(
projectObject.name,
)} ${escapeHtml(
projectObject.namespace.name,
)}
${chevron}
`;
});
- favoriteProjectsString += '';
+ favoriteProjectsHtml += '';
} else {
const projectLink = "'project-overview-link'";
- favoriteProjectsString = `Track projects you care about 🌟
Add any project you want a directly accessible shortcut for.
`;
+ favoriteProjectsHtml = `Track projects you care about 🌟
Add any project you want a directly accessible shortcut for.
`;
}
- mb.window.webContents.executeJavaScript(
- `document.getElementById("projects").innerHTML = "${escapeQuotes(favoriteProjectsString)}"`,
- );
+ setElementHtml('#projects', favoriteProjectsHtml);
}
async function getUsersProjects() {
@@ -551,16 +531,11 @@ function getBookmarks() {
)}')">${removeIcon} `;
});
bookmarksString += `Add another bookmark ${chevronRightIcon} `;
- mb.window.webContents.executeJavaScript(
- `document.getElementById("bookmarks").innerHTML = "${escapeQuotes(bookmarksString)}"`,
- );
} else {
const bookmarkLink = "'bookmark-link'";
bookmarksString = `Add a new GitLab bookmark 🔖
Bookmarks are helpful when you have an issue/merge request you will have to come back to repeatedly.
`;
- mb.window.webContents.executeJavaScript(
- `document.getElementById("bookmarks").innerHTML = "${escapeQuotes(bookmarksString)}"`,
- );
}
+ setElementHtml('#bookmarks', bookmarksString);
}
async function getRecentlyVisited() {
@@ -638,9 +613,7 @@ async function getRecentlyVisited() {
recentlyVisitedString =
'No browsers are supported on your operating system yet.
';
}
- mb.window.webContents.executeJavaScript(
- `document.getElementById("history").innerHTML = "${escapeQuotes(recentlyVisitedString)}"`,
- );
+ setElementHtml('#history', recentlyVisitedString);
lastRecentlyVisitedExecution = Date.now();
lastRecentlyVisitedExecutionFinished = true;
});
@@ -726,27 +699,17 @@ async function getLastPipelines(commits) {
}
function displayAddError(type, target, customMessage) {
- mb.window.webContents.executeJavaScript(
+ executeUnsafeJavaScript(
`document.getElementById("add-${type}${target}error").style.display = "block"`,
);
if (customMessage) {
- mb.window.webContents.executeJavaScript(
- `document.getElementById("add-${type}${target}error").innerHTML = "${customMessage}"`,
- );
+ setElementHtml(`#add-${type}${target}error`, customMessage);
} else {
- mb.window.webContents.executeJavaScript(
- `document.getElementById("add-${type}${target}error").innerHTML = "This is not a valid GitLab ${type} URL."`,
- );
+ setElementHtml(`#add-${type}${target}error`, `This is not a valid GitLab ${type} URL.`);
}
- mb.window.webContents.executeJavaScript(
- `document.getElementById("${type}${target}add-button").disabled = false`,
- );
- mb.window.webContents.executeJavaScript(
- `document.getElementById("${type}${target}link").disabled = false`,
- );
- mb.window.webContents.executeJavaScript(
- `document.getElementById("${type}${target}add-button").innerHTML = "Add"`,
- );
+ executeUnsafeJavaScript(`document.getElementById("${type}${target}add-button").disabled = false`);
+ executeUnsafeJavaScript(`document.getElementById("${type}${target}link").disabled = false`);
+ setElementHtml(`#${type}${target}add-button`, 'Add');
}
function displayPagination(keysetLinks, type) {
@@ -862,20 +825,17 @@ function displayCommit(commit, project, focus = 'project') {
)} ago · ${subline}${logo}`;
}
+function renderNoCommitsPushedYetMessage() {
+ setElementHtml('#commits-pagination', '');
+ setElementHtml('#pipeline', 'You haven't pushed any commits yet.
');
+}
+
async function getCommitDetails(projectId, sha, index) {
- mb.window.webContents.executeJavaScript(
- 'document.getElementById("commits-count").classList.remove("empty")',
- );
- mb.window.webContents.executeJavaScript(
- `document.getElementById("commits-count").innerHTML = "${index}/${recentCommits.length}"`,
- );
+ executeUnsafeJavaScript('document.getElementById("commits-count").classList.remove("empty")');
+ setElementHtml('#commits-count', `${index}/${recentCommits.length}`);
const project = await GitLab.get(`projects/${projectId}`);
const commit = await GitLab.get(`projects/${project.id}/repository/commits/${sha}`);
- mb.window.webContents.executeJavaScript(
- `document.getElementById("pipeline").innerHTML = "${escapeQuotes(
- displayCommit(commit, project),
- )}"`,
- );
+ setElementHtml('#pipeline', displayCommit(commit, project));
}
async function getLastCommits(count = 20) {
@@ -903,24 +863,10 @@ async function getLastCommits(count = 20) {
recentCommits = committedArray;
getCommitDetails(committedArray[0].project_id, committedArray[0].push_data.commit_to, 1);
} else {
- mb.window.webContents.executeJavaScript(
- 'document.getElementById("commits-pagination").innerHTML = ""',
- );
- mb.window.webContents.executeJavaScript(
- `document.getElementById("pipeline").innerHTML = "${escapeQuotes(
- 'You haven't pushed any commits yet.
',
- )}"`,
- );
+ renderNoCommitsPushedYetMessage();
}
} else {
- mb.window.webContents.executeJavaScript(
- 'document.getElementById("commits-pagination").innerHTML = ""',
- );
- mb.window.webContents.executeJavaScript(
- `document.getElementById("pipeline").innerHTML = "${escapeQuotes(
- 'You haven't pushed any commits yet.
',
- )}"`,
- );
+ renderNoCommitsPushedYetMessage();
}
lastLastCommitsExecution = Date.now();
lastLastCommitsExecutionFinished = true;
@@ -954,14 +900,11 @@ async function getRecentComments() {
// eslint-disable no-restricted-syntax */
const moreString = "'Comments'";
recentCommentsString += `View more ${chevronRightIcon} `;
- mb.window.webContents.executeJavaScript(
- `document.getElementById("comments").innerHTML = "${escapeQuotes(recentCommentsString)}"`,
- );
+ setElementHtml('#comments', recentCommentsString);
} else {
- mb.window.webContents.executeJavaScript(
- `document.getElementById("comments").innerHTML = "${escapeQuotes(
- 'You haven't written any comments yet.
',
- )}"`,
+ setElementHtml(
+ '#comments',
+ 'You haven't written any comments yet.
',
);
}
lastRecentCommentsExecution = Date.now();
@@ -1120,25 +1063,11 @@ async function getProjectCommits(project, count = 20) {
});
const pagination = ``;
- mb.window.webContents.executeJavaScript(
- `document.getElementById("detail-headline").innerHTML = "${escapeQuotes(pagination)}"`,
- );
- mb.window.webContents.executeJavaScript(
- `document.getElementById("project-pipeline").innerHTML = "${escapeQuotes(
- displayCommit(commit, project, 'author'),
- )}"`,
- );
+ setElementHtml('#detail-headline', pagination);
+ setElementHtml('#project-pipeline', displayCommit(commit, project, 'author'));
} else {
- mb.window.webContents.executeJavaScript(
- `document.getElementById("project-commits-pagination").innerHTML = "${escapeQuotes(
- 'Commits ',
- )}"`,
- );
- mb.window.webContents.executeJavaScript(
- `document.getElementById("project-pipeline").innerHTML = "${escapeQuotes(
- 'No commits pushed yet.
',
- )}"`,
- );
+ setElementHtml('#project-commits-pagination', 'Commits ');
+ setElementHtml('#project-pipeline', 'No commits pushed yet.
');
}
}
@@ -1164,19 +1093,14 @@ function changeCommit(forward, commitArray, chosenCommit) {
}
async function getProjectCommitDetails(projectId, sha, index) {
- mb.window.webContents.executeJavaScript(
+ executeUnsafeJavaScript(
'document.getElementById("project-commits-count").classList.remove("empty")',
);
- mb.window.webContents.executeJavaScript(
- `document.getElementById("project-commits-count").innerHTML = "${index}/${recentProjectCommits.length}"`,
- );
+ setElementHtml('#project-commits-count', `${index}/${recentProjectCommits.length}`);
const commit = await GitLab.get(`projects/${projectId}/repository/commits/${sha}`);
- mb.window.webContents.executeJavaScript(
- `document.getElementById("project-pipeline").innerHTML = "${escapeQuotes(
- displayCommit(commit, currentProject, 'author'),
- )}"`,
- );
+
+ setElementHtml('#project-pipeline', displayCommit(commit, currentProject, 'author'));
}
async function getMoreRecentlyVisited() {
@@ -1193,11 +1117,11 @@ async function getMoreRecentlyVisited() {
}
return -1;
});
- mb.window.webContents.executeJavaScript(
- `document.getElementById("detail-headline").innerHTML = "${escapeQuotes(
- ' ',
- )}"`,
+ setElementHtml(
+ '#detail-headline',
+ ' ',
);
+
let previousDate = 0;
for (let j = 0; j < item.length; j += 1) {
const { title } = item[j];
@@ -1209,18 +1133,19 @@ async function getMoreRecentlyVisited() {
url.includes('/-/epics/');
const wasNotProcessed = !moreRecentlyVisitedArray.some((object) => object.title === title);
const ignoredTitlePrefixes = [
- 'Not Found ',
- 'New Issue ',
- 'New Merge Request ',
- 'New merge request ',
- 'New Epic ',
- 'Edit ',
- 'Merge requests ',
- 'Issues ',
+ 'Not Found',
+ 'New Issue',
+ 'New Merge Request',
+ 'New merge request',
+ 'New Epic',
+ 'Edit',
+ 'Merge Conflicts',
+ 'Merge requests',
+ 'Issues',
'500 Error - GitLab',
'Checking your Browser - GitLab',
];
- const titlePrefix = (title || '').split('·')[0];
+ const titlePrefix = (title || '').split('·')[0].trim();
if (
title &&
isHostUrl &&
@@ -1277,11 +1202,7 @@ async function getMoreRecentlyVisited() {
}
}
recentlyVisitedString += '';
- mb.window.webContents.executeJavaScript(
- `document.getElementById("detail-content").innerHTML = "${escapeQuotes(
- recentlyVisitedString,
- )}"`,
- );
+ setElementHtml('#detail-content', recentlyVisitedString);
});
}
@@ -1314,9 +1235,7 @@ function searchRecentlyVisited(searchterm) {
)}`;
});
foundString += '';
- mb.window.webContents.executeJavaScript(
- `document.getElementById("detail-content").innerHTML = "${escapeQuotes(foundString)}"`,
- );
+ setElementHtml('#detail-content', foundString);
}
function getMoreRecentComments(
@@ -1340,11 +1259,7 @@ function getMoreRecentComments(
}
/* eslint-enable */
recentCommentsString += `${displayPagination(keysetLinks, type)}`;
- mb.window.webContents.executeJavaScript(
- `document.getElementById("detail-content").innerHTML = "${escapeQuotes(
- recentCommentsString,
- )}"`,
- );
+ setElementHtml('#detail-content', recentCommentsString);
});
}
@@ -1392,9 +1307,7 @@ function getIssues(
const illustration = todosAllDoneIllustration;
issuesString = `${illustration}
No issues with the specified criteria.
`;
}
- mb.window.webContents.executeJavaScript(
- `document.getElementById("${id}").innerHTML = "${escapeQuotes(issuesString)}"`,
- );
+ setElementHtml(`#${id}`, issuesString);
});
}
@@ -1432,9 +1345,7 @@ function getMRs(
const illustration = todosAllDoneIllustration;
mrsString = `${illustration}
No merge requests with the specified criteria.
`;
}
- mb.window.webContents.executeJavaScript(
- `document.getElementById("${id}").innerHTML = "${escapeQuotes(mrsString)}"`,
- );
+ setElementHtml(`#${id}`, mrsString);
});
}
@@ -1477,9 +1388,7 @@ function getTodos(
const illustration = todosAllDoneIllustration;
todosString = `${illustration}
Take the day off, you have no To-Dos!
`;
}
- mb.window.webContents.executeJavaScript(
- `document.getElementById("detail-content").innerHTML = "${escapeQuotes(todosString)}"`,
- );
+ setElementHtml('#detail-content', todosString);
});
}
@@ -1492,9 +1401,7 @@ function setupEmptyProjectPage() {
emptyPage += 'Merge requests
';
emptyPage +=
'';
- mb.window.webContents.executeJavaScript(
- `document.getElementById("detail-content").innerHTML = "${escapeQuotes(emptyPage)}"`,
- );
+ setElementHtml('#detail-content', emptyPage);
}
function displayProjectPage(project) {
@@ -1504,19 +1411,21 @@ function displayProjectPage(project) {
} else {
logo = `${project.name.charAt(0).toUpperCase()}
`;
}
- mb.window.webContents.executeJavaScript(
+ executeUnsafeJavaScript(
'document.getElementById("detail-header-content").classList.remove("empty")',
);
- mb.window.webContents.executeJavaScript(
- `document.getElementById("detail-header-content").innerHTML = "${escapeQuotes(
- '',
- )}${escapeQuotes(logo)}${escapeQuotes('')}${escapeHtml(
- project.name,
- )}${escapeQuotes(' ')}${escapeHtml(
- project.namespace.name,
- )}${escapeQuotes('
`)}"`,
+ setElementHtml(
+ '#detail-header-content',
+ `
+ ${logo}
+ ${escapeHtml(project.name)}
+
+ ${escapeHtml(project.namespace.name)}
+
+
+ `,
);
}
@@ -1550,11 +1459,7 @@ async function getProjectIssues(project) {
projectIssuesString = 'No open issues.
';
projectIssuesString += ``;
}
- mb.window.webContents.executeJavaScript(
- `document.getElementById("project-recent-issues").innerHTML = "${escapeQuotes(
- projectIssuesString,
- )}"`,
- );
+ setElementHtml('#project-recent-issues', projectIssuesString);
}
async function getProjectMRs(project) {
@@ -1588,9 +1493,7 @@ async function getProjectMRs(project) {
projectMRsString = 'No open merge requests.
';
projectMRsString += ``;
}
- mb.window.webContents.executeJavaScript(
- `document.getElementById("project-recent-mrs").innerHTML = "${escapeQuotes(projectMRsString)}"`,
- );
+ setElementHtml('#project-recent-mrs', projectMRsString);
}
function addBookmark(link) {
@@ -1603,15 +1506,9 @@ function addBookmark(link) {
}
const spinner =
' ';
- mb.window.webContents.executeJavaScript(
- 'document.getElementById("bookmark-add-button").disabled = "disabled"',
- );
- mb.window.webContents.executeJavaScript(
- 'document.getElementById("bookmark-link").disabled = "disabled"',
- );
- mb.window.webContents.executeJavaScript(
- `document.getElementById("bookmark-add-button").innerHTML = "${escapeQuotes(spinner)} Add"`,
- );
+ executeUnsafeJavaScript('document.getElementById("bookmark-add-button").disabled = "disabled"');
+ executeUnsafeJavaScript('document.getElementById("bookmark-link").disabled = "disabled"');
+ setElementHtml('#bookmark-add-button', `${spinner} Add`);
if (GitLab.urlHasValidHost(link)) {
GitLab.parseUrl(link)
.then((bookmark) => {
@@ -1652,17 +1549,13 @@ function addProject(link, target) {
}
const spinner =
' ';
- mb.window.webContents.executeJavaScript(
+ executeUnsafeJavaScript(
`document.getElementById("project${newTarget}add-button").disabled = "disabled"`,
);
- mb.window.webContents.executeJavaScript(
+ executeUnsafeJavaScript(
`document.getElementById("project${newTarget}link").disabled = "disabled"`,
);
- mb.window.webContents.executeJavaScript(
- `document.getElementById("project${newTarget}add-button").innerHTML = "${escapeQuotes(
- spinner,
- )} Add"`,
- );
+ setElementHtml(`#project${newTarget}add-button`, `${spinner} Add`);
if (GitLab.urlHasValidHost(link)) {
GitLab.parseUrl(link)
.then((object) => {
@@ -1721,15 +1614,9 @@ function addShortcut(link) {
store.shortcuts = store.shortcuts.concat(tempArray);
const spinner =
' ';
- mb.window.webContents.executeJavaScript(
- 'document.getElementById("shortcut-add-button").disabled = "disabled"',
- );
- mb.window.webContents.executeJavaScript(
- 'document.getElementById("shortcut-link").disabled = "disabled"',
- );
- mb.window.webContents.executeJavaScript(
- `document.getElementById("shortcut-add-button").innerHTML = "${escapeQuotes(spinner)} Add"`,
- );
+ executeUnsafeJavaScript('document.getElementById("shortcut-add-button").disabled = "disabled"');
+ executeUnsafeJavaScript('document.getElementById("shortcut-link").disabled = "disabled"');
+ setElementHtml('#shortcut-add-button', `${spinner} Add`);
setupCommandPalette();
repaintShortcuts();
}
@@ -1737,42 +1624,28 @@ function addShortcut(link) {
function startBookmarkDialog() {
const bookmarkLink = "'bookmark-link'";
const bookmarkInput = `
`;
- mb.window.webContents.executeJavaScript(
- 'document.getElementById("add-bookmark-dialog").classList.add("opened")',
- );
- mb.window.webContents.executeJavaScript(
- `document.getElementById("add-bookmark-dialog").innerHTML = "${escapeQuotes(bookmarkInput)}"`,
- );
- mb.window.webContents.executeJavaScript('window.scrollBy(0, 14)');
- mb.window.webContents.executeJavaScript('document.getElementById("bookmark-link").focus()');
+ executeUnsafeJavaScript('document.getElementById("add-bookmark-dialog").classList.add("opened")');
+ setElementHtml('#add-bookmark-dialog', bookmarkInput);
+ executeUnsafeJavaScript('window.scrollBy(0, 14)');
+ executeUnsafeJavaScript('document.getElementById("bookmark-link").focus()');
}
function startProjectDialog() {
const projectLink = "'project-settings-link'";
const projectInput = `
`;
- mb.window.webContents.executeJavaScript(
- 'document.getElementById("add-project-dialog").classList.add("opened")',
- );
- mb.window.webContents.executeJavaScript(
- `document.getElementById("add-project-dialog").innerHTML = "${escapeQuotes(projectInput)}"`,
- );
- mb.window.webContents.executeJavaScript('window.scrollBy(0, 14)');
- mb.window.webContents.executeJavaScript(
- 'document.getElementById("project-settings-link").focus()',
- );
+ executeUnsafeJavaScript('document.getElementById("add-project-dialog").classList.add("opened")');
+ setElementHtml('#add-project-dialog', projectInput);
+ executeUnsafeJavaScript('window.scrollBy(0, 14)');
+ executeUnsafeJavaScript('document.getElementById("project-settings-link").focus()');
}
function startShortcutDialog() {
const shortcutLink = "'shortcut-link'";
const shortcutInput = `
`;
- mb.window.webContents.executeJavaScript(
- 'document.getElementById("add-shortcut-dialog").classList.add("opened")',
- );
- mb.window.webContents.executeJavaScript(
- `document.getElementById("add-shortcut-dialog").innerHTML = "${escapeQuotes(shortcutInput)}"`,
- );
- mb.window.webContents.executeJavaScript('window.scrollBy(0, 14)');
- mb.window.webContents.executeJavaScript('document.getElementById("shortcut-link").focus()');
+ executeUnsafeJavaScript('document.getElementById("add-shortcut-dialog").classList.add("opened")');
+ setElementHtml('#add-shortcut-dialog', shortcutInput);
+ executeUnsafeJavaScript('window.scrollBy(0, 14)');
+ executeUnsafeJavaScript('document.getElementById("shortcut-link").focus()');
}
function displaySkeleton(count, pagination = false, id = 'detail-content') {
@@ -1787,32 +1660,20 @@ function displaySkeleton(count, pagination = false, id = 'detail-content') {
'
';
}
skeletonString += '';
- mb.window.webContents.executeJavaScript(
- `document.getElementById("${id}").innerHTML = "${escapeQuotes(skeletonString)}"`,
- );
+ setElementHtml(`#${id}`, skeletonString);
}
function changeTheme(option = 'light', manual = false) {
store.theme = option;
if (option === 'light') {
- mb.window.webContents.executeJavaScript(
- 'document.documentElement.setAttribute("data-theme", "light");',
- );
+ executeUnsafeJavaScript('document.documentElement.setAttribute("data-theme", "light");');
} else if (option === 'dark') {
- mb.window.webContents.executeJavaScript(
- 'document.documentElement.setAttribute("data-theme", "dark");',
- );
+ executeUnsafeJavaScript('document.documentElement.setAttribute("data-theme", "dark");');
}
if (manual) {
- mb.window.webContents.executeJavaScript(
- 'document.getElementById("light-mode").classList.remove("active")',
- );
- mb.window.webContents.executeJavaScript(
- 'document.getElementById("dark-mode").classList.remove("active")',
- );
- mb.window.webContents.executeJavaScript(
- `document.getElementById("${option}-mode").classList.add("active")`,
- );
+ executeUnsafeJavaScript('document.getElementById("light-mode").classList.remove("active")');
+ executeUnsafeJavaScript('document.getElementById("dark-mode").classList.remove("active")');
+ executeUnsafeJavaScript(`document.getElementById("${option}-mode").classList.add("active")`);
}
}
@@ -1876,20 +1737,15 @@ if (store.access_token && store.user_id && store.username) {
}
ipcMain.on('detail-page', (event, arg) => {
- mb.window.webContents.executeJavaScript(
- 'document.getElementById("detail-headline").innerHTML = ""',
- );
- mb.window.webContents.executeJavaScript(
- 'document.getElementById("detail-content").innerHTML = ""',
- );
+ setElementHtml('#detail-headline', '');
+ setElementHtml('#detail-content', '');
if (arg.page === 'Project') {
if (store.analytics) {
visitor.pageview('/project').send();
}
- mb.window.webContents.executeJavaScript(
- `document.getElementById("detail-headline").innerHTML = "${escapeQuotes(
- ``,
- )}"`,
+ setElementHtml(
+ '#detail-headline',
+ ``,
);
setupEmptyProjectPage();
const project = JSON.parse(arg.object);
@@ -1899,12 +1755,10 @@ ipcMain.on('detail-page', (event, arg) => {
getProjectIssues(project);
getProjectMRs(project);
} else {
- mb.window.webContents.executeJavaScript(
+ executeUnsafeJavaScript(
'document.getElementById("detail-header-content").classList.remove("empty")',
);
- mb.window.webContents.executeJavaScript(
- `document.getElementById("detail-header-content").innerHTML = "${arg.page}"`,
- );
+ setElementHtml('#detail-header-content', arg.page);
if (arg.page === 'Issues') {
if (store.analytics) {
visitor.pageview('/my-issues').send();
@@ -1912,14 +1766,16 @@ ipcMain.on('detail-page', (event, arg) => {
const issuesQuerySelect = ``;
const issuesStateSelect = ``;
const issuesSortSelect = ``;
- mb.window.webContents.executeJavaScript(
- `document.getElementById("detail-headline").innerHTML = "${escapeQuotes(
- '',
- )}${arg.page}${escapeQuotes(' ')}${escapeQuotes(
- issuesQuerySelect,
- )}${escapeQuotes(issuesStateSelect)}${escapeQuotes(issuesSortSelect)}
"`,
+ setElementHtml(
+ '#detail-headline',
+ `${arg.page}
+
+ ${issuesQuerySelect}
+ ${issuesStateSelect}
+ ${issuesSortSelect}
+
`,
);
- mb.window.webContents.executeJavaScript(
+ executeUnsafeJavaScript(
'document.getElementById("detail-headline").classList.add("with-overflow")',
);
displaySkeleton(numberOfIssues);
@@ -1935,14 +1791,16 @@ ipcMain.on('detail-page', (event, arg) => {
mrsQuerySelect += `Approval rule `;
const mrsStateSelect = ``;
const mrsSortSelect = ``;
- mb.window.webContents.executeJavaScript(
- `document.getElementById("detail-headline").innerHTML = "${escapeQuotes(
- '',
- )}${arg.page}${escapeQuotes(' ')}${escapeQuotes(
- mrsQuerySelect,
- )}${escapeQuotes(mrsStateSelect)}${escapeQuotes(mrsSortSelect)}
"`,
+ setElementHtml(
+ '#detail-headline',
+ `${arg.page}
+
+ ${mrsQuerySelect}
+ ${mrsStateSelect}
+ ${mrsSortSelect}
+
`,
);
- mb.window.webContents.executeJavaScript(
+ executeUnsafeJavaScript(
'document.getElementById("detail-headline").classList.add("with-overflow")',
);
displaySkeleton(numberOfMRs);
@@ -1951,17 +1809,14 @@ ipcMain.on('detail-page', (event, arg) => {
if (store.analytics) {
visitor.pageview('/my-to-do-list').send();
}
- mb.window.webContents.executeJavaScript(
- `document.getElementById("detail-headline").innerHTML = "${escapeQuotes(
- '',
- )}${arg.page} "`,
- );
- mb.window.webContents.executeJavaScript(
- `document.getElementById("detail-header-content").innerHTML = "${arg.page}${escapeQuotes(
- '`,
- )}"`,
+ setElementHtml('#detail-headline', `${arg.page} `);
+ setElementHtml(
+ '#detail-header-content',
+ `${arg.page}`,
);
displaySkeleton(numberOfTodos);
getTodos();
@@ -1975,11 +1830,7 @@ ipcMain.on('detail-page', (event, arg) => {
if (store.analytics) {
visitor.pageview('/my-comments').send();
}
- mb.window.webContents.executeJavaScript(
- `document.getElementById("detail-headline").innerHTML = "${escapeQuotes(
- '',
- )}${arg.page} "`,
- );
+ setElementHtml('#detail-headline', `${arg.page} `);
displaySkeleton(numberOfComments);
getMoreRecentComments();
}
@@ -1995,18 +1846,12 @@ ipcMain.on('sub-detail-page', (event, arg) => {
let openChecked = ' checked';
let allChanged = '';
const project = JSON.parse(arg.project);
- mb.window.webContents.executeJavaScript(
- 'document.getElementById("sub-detail-headline").innerHTML = ""',
- );
- mb.window.webContents.executeJavaScript(
- 'document.getElementById("sub-detail-content").innerHTML = ""',
- );
- mb.window.webContents.executeJavaScript(
+ setElementHtml('#sub-detail-headline', '');
+ setElementHtml('#sub-detail-content', '');
+ executeUnsafeJavaScript(
'document.getElementById("sub-detail-header-content").classList.remove("empty")',
);
- mb.window.webContents.executeJavaScript(
- `document.getElementById("sub-detail-header-content").innerHTML = "${arg.page}"`,
- );
+ setElementHtml('#sub-detail-header-content', arg.page);
if (arg.page === 'Issues') {
if (store.analytics) {
visitor.pageview('/project/issues').send();
@@ -2021,14 +1866,16 @@ ipcMain.on('sub-detail-page', (event, arg) => {
const issuesQuerySelect = ``;
const issuesStateSelect = ``;
const issuesSortSelect = ``;
- mb.window.webContents.executeJavaScript(
- `document.getElementById("sub-detail-headline").innerHTML = "${escapeQuotes(
- '',
- )}${arg.page}${escapeQuotes(' ')}${escapeQuotes(
- issuesQuerySelect,
- )}${escapeQuotes(issuesStateSelect)}${escapeQuotes(issuesSortSelect)}
"`,
+ setElementHtml(
+ '#sub-detail-headline',
+ `${arg.page}
+
+ ${issuesQuerySelect}
+ ${issuesStateSelect}
+ ${issuesSortSelect}
+
`,
);
- mb.window.webContents.executeJavaScript(
+ executeUnsafeJavaScript(
'document.getElementById("sub-detail-headline").classList.add("with-overflow")',
);
displaySkeleton(numberOfIssues, undefined, 'sub-detail-content');
@@ -2050,14 +1897,16 @@ ipcMain.on('sub-detail-page', (event, arg) => {
const mrsQuerySelect = ``;
const mrsStateSelect = ``;
const mrsSortSelect = ``;
- mb.window.webContents.executeJavaScript(
- `document.getElementById("sub-detail-headline").innerHTML = "${escapeQuotes(
- '',
- )}${arg.page}${escapeQuotes(' ')}${escapeQuotes(
- mrsQuerySelect,
- )}${escapeQuotes(mrsStateSelect)}${escapeQuotes(mrsSortSelect)}
"`,
+ setElementHtml(
+ '#sub-detail-headline',
+ `${arg.page}
+
+ ${mrsQuerySelect}
+ ${mrsStateSelect}
+ ${mrsSortSelect}
+
`,
);
- mb.window.webContents.executeJavaScript(
+ executeUnsafeJavaScript(
'document.getElementById("sub-detail-headline").classList.add("with-overflow")',
);
displaySkeleton(numberOfMRs, undefined, 'sub-detail-content');
@@ -2082,15 +1931,13 @@ ipcMain.on('go-to-overview', () => {
getRecentComments();
displayUsersProjects();
getBookmarks();
- mb.window.webContents.executeJavaScript(
+ executeUnsafeJavaScript(
'document.getElementById("detail-headline").classList.remove("with-overflow")',
);
- mb.window.webContents.executeJavaScript(
+ executeUnsafeJavaScript(
'document.getElementById("detail-header-content").classList.add("empty")',
);
- mb.window.webContents.executeJavaScript(
- 'document.getElementById("detail-header-content").innerHTML = ""',
- );
+ setElementHtml('#detail-header-content', '');
activeIssuesQueryOption = 'assigned_to_me';
activeIssuesStateOption = 'opened';
activeIssuesSortOption = 'created_at';
@@ -2120,48 +1967,42 @@ ipcMain.on('switch-issues', (event, arg) => {
if (arg.type === 'query' && arg.label !== activeIssuesQueryOption) {
activeIssuesQueryOption = arg.label;
displaySkeleton(numberOfIssues, undefined, id);
- mb.window.webContents.executeJavaScript(
- `document.getElementById("issues-query-active").innerHTML = "${arg.text}"`,
- );
+ setElementHtml('#issues-query-active', arg.text);
if (
(isOnSubPage === false && arg.label !== 'assigned_to_me') ||
(isOnSubPage === true && arg.label !== 'all')
) {
- mb.window.webContents.executeJavaScript(
+ executeUnsafeJavaScript(
'document.getElementById("issues-query-active").classList.add("changed")',
);
} else {
- mb.window.webContents.executeJavaScript(
+ executeUnsafeJavaScript(
'document.getElementById("issues-query-active").classList.remove("changed")',
);
}
} else if (arg.type === 'state' && arg.label !== activeIssuesStateOption) {
activeIssuesStateOption = arg.label;
displaySkeleton(numberOfIssues, undefined, id);
- mb.window.webContents.executeJavaScript(
- `document.getElementById("issues-state-active").innerHTML = "${arg.text}"`,
- );
+ setElementHtml('#issues-state-active', arg.text);
if (arg.label !== 'opened') {
- mb.window.webContents.executeJavaScript(
+ executeUnsafeJavaScript(
'document.getElementById("issues-state-active").classList.add("changed")',
);
} else {
- mb.window.webContents.executeJavaScript(
+ executeUnsafeJavaScript(
'document.getElementById("issues-state-active").classList.remove("changed")',
);
}
} else if (arg.type === 'sort' && arg.label !== activeIssuesSortOption) {
activeIssuesSortOption = arg.label;
displaySkeleton(numberOfIssues, undefined, id);
- mb.window.webContents.executeJavaScript(
- `document.getElementById("issues-sort-active").innerHTML = "${arg.text}"`,
- );
+ setElementHtml('#issues-sort-active', arg.text);
if (arg.label !== 'created_at') {
- mb.window.webContents.executeJavaScript(
+ executeUnsafeJavaScript(
'document.getElementById("issues-sort-active").classList.add("changed")',
);
} else {
- mb.window.webContents.executeJavaScript(
+ executeUnsafeJavaScript(
'document.getElementById("issues-sort-active").classList.remove("changed")',
);
}
@@ -2183,15 +2024,13 @@ ipcMain.on('switch-mrs', (event, arg) => {
if (arg.type === 'query' && arg.label !== activeMRsQueryOption) {
activeMRsQueryOption = arg.label;
displaySkeleton(numberOfMRs, undefined, id);
- mb.window.webContents.executeJavaScript(
- `document.getElementById("mrs-query-active").innerHTML = "${arg.text}"`,
- );
+ setElementHtml('#mrs-query-active', arg.text);
if (arg.label !== 'all') {
- mb.window.webContents.executeJavaScript(
+ executeUnsafeJavaScript(
'document.getElementById("mrs-query-active").classList.add("changed")',
);
} else {
- mb.window.webContents.executeJavaScript(
+ executeUnsafeJavaScript(
'document.getElementById("mrs-query-active").classList.remove("changed")',
);
}
@@ -2199,30 +2038,26 @@ ipcMain.on('switch-mrs', (event, arg) => {
if (arg.type === 'state' && arg.label !== activeMRsStateOption) {
activeMRsStateOption = arg.label;
displaySkeleton(numberOfMRs, undefined, id);
- mb.window.webContents.executeJavaScript(
- `document.getElementById("mrs-state-active").innerHTML = "${arg.text}"`,
- );
+ setElementHtml('#mrs-state-active', arg.text);
if (arg.label !== 'opened') {
- mb.window.webContents.executeJavaScript(
+ executeUnsafeJavaScript(
'document.getElementById("mrs-state-active").classList.add("changed")',
);
} else {
- mb.window.webContents.executeJavaScript(
+ executeUnsafeJavaScript(
'document.getElementById("mrs-state-active").classList.remove("changed")',
);
}
} else if (arg.type === 'sort' && arg.label !== activeMRsSortOption) {
activeMRsSortOption = arg.label;
displaySkeleton(numberOfMRs, undefined, id);
- mb.window.webContents.executeJavaScript(
- `document.getElementById("mrs-sort-active").innerHTML = "${arg.text}"`,
- );
+ setElementHtml('#mrs-sort-active', arg.text);
if (arg.label !== 'created_at') {
- mb.window.webContents.executeJavaScript(
+ executeUnsafeJavaScript(
'document.getElementById("mrs-sort-active").classList.add("changed")',
);
} else {
- mb.window.webContents.executeJavaScript(
+ executeUnsafeJavaScript(
'document.getElementById("mrs-sort-active").classList.remove("changed")',
);
}
@@ -2264,9 +2099,7 @@ ipcMain.on('switch-page', (event, arg) => {
});
ipcMain.on('search-recent', (event, arg) => {
- mb.window.webContents.executeJavaScript(
- 'document.getElementById("detail-content").innerHTML = ""',
- );
+ setElementHtml('#detail-content', '');
searchRecentlyVisited(arg);
});
@@ -2278,10 +2111,9 @@ ipcMain.on('change-commit', (event, arg) => {
visitor.event('Navigate my commits', 'previous').send();
}
}
- mb.window.webContents.executeJavaScript(
- `document.getElementById("pipeline").innerHTML = "${escapeQuotes(
- '',
- )}"`,
+ setElementHtml(
+ '#pipeline',
+ '',
);
const nextCommit = changeCommit(arg, recentCommits, currentCommit);
currentCommit = nextCommit;
@@ -2296,10 +2128,9 @@ ipcMain.on('change-project-commit', (event, arg) => {
visitor.event('Navigate project commits', 'previous').send();
}
}
- mb.window.webContents.executeJavaScript(
- `document.getElementById("project-pipeline").innerHTML = "${escapeQuotes(
- '',
- )}"`,
+ setElementHtml(
+ '#project-pipeline',
+ '',
);
const nextCommit = changeCommit(arg, recentProjectCommits, currentProjectCommit);
currentProjectCommit = nextCommit;
@@ -2417,10 +2248,8 @@ ipcMain.on('choose-certificate', () => {
});
ipcMain.on('reset-certificate', () => {
- mb.window.webContents.executeJavaScript(
- 'document.getElementById("custom-cert-path-text").innerText=""',
- );
- mb.window.webContents.executeJavaScript(
+ executeUnsafeJavaScript('document.getElementById("custom-cert-path-text").innerText=""');
+ executeUnsafeJavaScript(
'document.getElementById("custom-cert-path-text").classList.add("hidden")',
);
chooseCertificate();