mirror of https://github.com/vizality/vizality
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
2.8 KiB
105 lines
2.8 KiB
const { relative, join, dirname, posix, sep, resolve } = require('path');
|
|
const { existsSync, promises: { readFile } } = require('fs');
|
|
const { ipcMain, BrowserWindow } = require('electron');
|
|
const { renderSync } = require('sass');
|
|
|
|
/**
|
|
*
|
|
* @param {*} evt
|
|
* @param {*} opts
|
|
* @param {*} externalWindow
|
|
*/
|
|
function openDevTools (evt, opts, externalWindow) {
|
|
evt.sender.openDevTools(opts);
|
|
if (externalWindow) {
|
|
let devToolsWindow = new BrowserWindow({
|
|
webContents: evt.sender.devToolsWebContents
|
|
});
|
|
devToolsWindow.on('ready-to-show', () => devToolsWindow.show());
|
|
devToolsWindow.on('close', () => {
|
|
evt.sender.closeDevTools();
|
|
devToolsWindow = null;
|
|
});
|
|
}
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param {*} evt
|
|
*/
|
|
function closeDevTools (evt) {
|
|
evt.sender.closeDevTools();
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param {*} evt
|
|
* @returns
|
|
*/
|
|
function clearCache (evt) {
|
|
return new Promise(resolve => {
|
|
evt.sender.session.clearCache(() => resolve(null));
|
|
});
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param {*} evt
|
|
* @returns
|
|
*/
|
|
function getHistory (evt) {
|
|
return evt.sender.history;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param {*} _
|
|
* @param {*} file
|
|
* @returns
|
|
*/
|
|
function compileSass (_, file) {
|
|
return new Promise((res, reject) => {
|
|
readFile(file, 'utf8').then(rawScss => {
|
|
try {
|
|
const relativePath = relative(file, join(__dirname, '..', 'renderer', 'src', 'styles', 'utils'));
|
|
const absolutePath = resolve(join(file, relativePath));
|
|
const fixedScss = rawScss.replace('@vizality', absolutePath.split(sep).join(posix.sep));
|
|
const result = renderSync({
|
|
data: fixedScss,
|
|
importer: (url, prev) => {
|
|
if (url === '@vizality') {
|
|
url = url.replace('@vizality', absolutePath.split(sep).join(posix.sep));
|
|
}
|
|
url = url.replace('file:///', '');
|
|
if (existsSync(url)) {
|
|
return {
|
|
file: url
|
|
};
|
|
}
|
|
const prevFile =
|
|
prev === 'stdin'
|
|
? file
|
|
: prev.replace(/https?:\/\/(?:[a-z]+\.)?discord(?:app)?\.com/i, '');
|
|
return {
|
|
file: join(dirname(decodeURI(prevFile)), url).split(sep).join(posix.sep)
|
|
};
|
|
}
|
|
});
|
|
if (result) {
|
|
return res(result.css.toString());
|
|
}
|
|
} catch (err) {
|
|
return reject(err);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
ipcMain.on('VIZALITY_GET_PRELOAD', evt => evt.returnValue = evt.sender._preload);
|
|
ipcMain.handle('VIZALITY_GET_HISTORY', getHistory);
|
|
ipcMain.handle('VIZALITY_OPEN_DEVTOOLS', openDevTools);
|
|
ipcMain.handle('VIZALITY_CLOSE_DEVTOOLS', closeDevTools);
|
|
ipcMain.handle('VIZALITY_CLEAR_CACHE', clearCache);
|
|
ipcMain.handle('VIZALITY_WINDOW_IS_MAXIMIZED', evt => BrowserWindow.fromWebContents(evt.sender).isMaximized());
|
|
ipcMain.handle('VIZALITY_COMPILE_SASS', compileSass);
|