initial
This commit is contained in:
commit
a13c963a75
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
node_modules
|
||||||
|
out
|
||||||
|
.history
|
33
app_main/index.htm_
Normal file
33
app_main/index.htm_
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' 'unsafe-inline'; connect-src *;">
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
|
<title>Fire Sale</title>
|
||||||
|
<link rel="stylesheet" href="style.css" type="text/css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<section class="controls">
|
||||||
|
<button id="new-file">New File</button>
|
||||||
|
<button id="open-file">Open File</button>
|
||||||
|
<button id="save-markdown" disabled>Save File</button>
|
||||||
|
<button id="revert" disabled>Revert</button>
|
||||||
|
<button id="save-html">Save HTML</button>
|
||||||
|
<button id="show-file" disabled>Show File</button>
|
||||||
|
<button id="open-in-default" disabled>Open in Default Application</button>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="content">
|
||||||
|
<label for="markdown" hidden>Markdown Content</label>
|
||||||
|
<textarea class="raw-markdown" id="markdown"></textarea>
|
||||||
|
<div class="rendered-html" id="html"></div>
|
||||||
|
</section>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
<script src="./renderer.js"></script>
|
||||||
|
|
||||||
|
</html>
|
34
app_main/index.html
Normal file
34
app_main/index.html
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'" />
|
||||||
|
<meta http-equiv="X-Content-Security-Policy" content="default-src 'self'; script-src 'self'" />
|
||||||
|
<title>Hello from Electron renderer!</title>
|
||||||
|
<link rel="stylesheet" href="style.css" type="text/css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<h1>Hello from Electron renderer!</h1>
|
||||||
|
<p>👋</p>
|
||||||
|
<p id="info"></p>
|
||||||
|
<section class="controls">
|
||||||
|
<button id="new-file">New File</button>
|
||||||
|
<button id="open-file">Open File</button>
|
||||||
|
<button id="save-markdown" disabled>Save File</button>
|
||||||
|
<button id="revert" disabled>Revert</button>
|
||||||
|
<button id="save-html">Save HTML</button>
|
||||||
|
<button id="show-file" disabled>Show File</button>
|
||||||
|
<button id="open-in-default" disabled>Open in Default Application</button>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="content">
|
||||||
|
<label for="markdown" hidden>Markdown Content</label>
|
||||||
|
<textarea class="raw-markdown" id="markdown"></textarea>
|
||||||
|
<div class="rendered-html" id="html"></div>
|
||||||
|
</section>
|
||||||
|
</body>
|
||||||
|
<script src="./renderer.js"></script>
|
||||||
|
|
||||||
|
</html>
|
45
app_main/main.js
Normal file
45
app_main/main.js
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
const { app, BrowserWindow, ipcMain, net } = require('electron');
|
||||||
|
const path = require('path');
|
||||||
|
const { marked } = require('marked');
|
||||||
|
const { get } = require('./request')
|
||||||
|
|
||||||
|
function createWindow() {
|
||||||
|
const mainWindow = new BrowserWindow({
|
||||||
|
// width: 800,
|
||||||
|
// height: 600,
|
||||||
|
show: false,
|
||||||
|
webPreferences: {
|
||||||
|
preload: path.join(__dirname, 'preload.js'),
|
||||||
|
nodeIntegration: true,
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
ipcMain.handle('ping', () => 'pong');
|
||||||
|
ipcMain.handle('renderMarkdownToHtml', (event, markdown) => {
|
||||||
|
return marked.parse(markdown);
|
||||||
|
});
|
||||||
|
ipcMain.handle('acars', async() => {
|
||||||
|
const url = 'http://lsaapi.gairacalabs.com:3100/api/acars';
|
||||||
|
// const url = 'http://lsaapi.gairacalabs.com:3100/graphql';
|
||||||
|
const response = await get(url);
|
||||||
|
return response;
|
||||||
|
});
|
||||||
|
|
||||||
|
mainWindow.loadFile(path.join(__dirname, 'index.html'));
|
||||||
|
|
||||||
|
// Open the DevTools.
|
||||||
|
mainWindow.webContents.openDevTools()
|
||||||
|
mainWindow.show();
|
||||||
|
}
|
||||||
|
app.whenReady().then(() => {
|
||||||
|
createWindow();
|
||||||
|
|
||||||
|
app.on('activate', () => {
|
||||||
|
if (BrowserWindow.getAllWindows().length === 0) createWindow();
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
app.on('window-all-closed', function() {
|
||||||
|
if (process.platform !== 'darwin') app.quit()
|
||||||
|
});
|
11
app_main/preload.js
Normal file
11
app_main/preload.js
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
const { contextBridge, ipcRenderer } = require('electron');
|
||||||
|
const marked = require('marked');
|
||||||
|
|
||||||
|
contextBridge.exposeInMainWorld('versions', {
|
||||||
|
node: () => process.versions.node,
|
||||||
|
chrome: () => process.versions.chrome,
|
||||||
|
electron: () => process.versions.electron,
|
||||||
|
ping: () => ipcRenderer.invoke('ping'),
|
||||||
|
renderMarkdownToHtml: (currentContent) => ipcRenderer.invoke('renderMarkdownToHtml', currentContent),
|
||||||
|
acars: () => ipcRenderer.invoke('acars'),
|
||||||
|
});
|
33
app_main/renderer.js
Normal file
33
app_main/renderer.js
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
const markdownView = document.querySelector('#markdown');
|
||||||
|
const htmlView = document.querySelector('#html');
|
||||||
|
// const newFileButton = document.querySelector('#new-file');
|
||||||
|
// const openFileButton = document.querySelector('#open-file');
|
||||||
|
// const saveMarkdownButton = document.querySelector('#save-markdown');
|
||||||
|
// const revertButton = document.querySelector('#revert');
|
||||||
|
// const saveHtmlButton = document.querySelector('#save-html');
|
||||||
|
// const showFileButton = document.querySelector('#show-file');
|
||||||
|
// const openInDefaultButton = document.querySelector('#open-in-default');
|
||||||
|
|
||||||
|
console.log(document.querySelector('#markdown'));
|
||||||
|
|
||||||
|
const renderMarkdownToHtml = async(markdown) => {
|
||||||
|
const response = await window.versions.renderMarkdownToHtml(markdown);
|
||||||
|
htmlView.innerHTML = response;
|
||||||
|
};
|
||||||
|
|
||||||
|
markdownView.addEventListener('keyup', event => {
|
||||||
|
const currentContent = event.target.value;
|
||||||
|
console.log('currentContent :>> ', currentContent);
|
||||||
|
renderMarkdownToHtml(currentContent);
|
||||||
|
});
|
||||||
|
|
||||||
|
const information = document.getElementById('info')
|
||||||
|
information.innerText = `This app is using Chrome (v${versions.chrome()}), Node.js (v${versions.node()}), and Electron (v${versions.electron()})`
|
||||||
|
|
||||||
|
const func = async() => {
|
||||||
|
const acars = await window.versions.acars()
|
||||||
|
const response = await window.versions.ping()
|
||||||
|
console.log(acars) // prints out 'pong'
|
||||||
|
}
|
||||||
|
|
||||||
|
func()
|
57
app_main/request.js
Normal file
57
app_main/request.js
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
const { net } = require('electron');
|
||||||
|
|
||||||
|
async function get(url) {
|
||||||
|
return request({ url, method: 'GET' })
|
||||||
|
}
|
||||||
|
|
||||||
|
async function post(url, body) {
|
||||||
|
return request({ url, method: 'POST' }, body)
|
||||||
|
}
|
||||||
|
|
||||||
|
async function request(options, body) {
|
||||||
|
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
const responseBody = [];
|
||||||
|
let responseHeaders;
|
||||||
|
let responseStatus;
|
||||||
|
|
||||||
|
console.log(options);
|
||||||
|
const request = net.request(options);
|
||||||
|
|
||||||
|
request.on('response', (response) => {
|
||||||
|
responseStatus = response.statusCode;
|
||||||
|
responseHeaders = response.headers;
|
||||||
|
|
||||||
|
response.on('data', (chunk) => {
|
||||||
|
if (chunk) {
|
||||||
|
responseBody.push(`${chunk}`);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
response.on('end', () => {
|
||||||
|
resolve({
|
||||||
|
status: responseStatus,
|
||||||
|
headers: responseHeaders,
|
||||||
|
body: JSON.parse(responseBody.join('')),
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
response.on('aborted', () => console.log('request aborted'));
|
||||||
|
response.on('error', (error) => reject(error));
|
||||||
|
});
|
||||||
|
|
||||||
|
request.on('error', (error) => reject(error));
|
||||||
|
|
||||||
|
request.setHeader('Content-Type', 'application/json');
|
||||||
|
if (['POST'].includes(options.method.toUpperCase())) {
|
||||||
|
request.write(body, 'utf-8')
|
||||||
|
}
|
||||||
|
request.end();
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
get
|
||||||
|
};
|
99
app_main/style.css
Normal file
99
app_main/style.css
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
html {
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
*,
|
||||||
|
*:before,
|
||||||
|
*:after {
|
||||||
|
box-sizing: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
html,
|
||||||
|
body {
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
|
||||||
|
body,
|
||||||
|
input {
|
||||||
|
font: menu;
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea,
|
||||||
|
input,
|
||||||
|
div,
|
||||||
|
button {
|
||||||
|
outline: none;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.controls {
|
||||||
|
background-color: rgb(217, 241, 238);
|
||||||
|
padding: 10px 10px 10px 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
font-size: 14px;
|
||||||
|
background-color: rgb(181, 220, 216);
|
||||||
|
border: none;
|
||||||
|
padding: 0.5em 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover {
|
||||||
|
background-color: rgb(156, 198, 192);
|
||||||
|
}
|
||||||
|
|
||||||
|
button:active {
|
||||||
|
background-color: rgb(144, 182, 177);
|
||||||
|
}
|
||||||
|
|
||||||
|
button:disabled {
|
||||||
|
background-color: rgb(196, 204, 202);
|
||||||
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
min-height: 100vh;
|
||||||
|
min-width: 100vw;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
height: 100vh;
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.raw-markdown,
|
||||||
|
.rendered-html {
|
||||||
|
min-height: 100%;
|
||||||
|
max-width: 50%;
|
||||||
|
flex-grow: 1;
|
||||||
|
padding: 1em;
|
||||||
|
overflow: scroll;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.raw-markdown {
|
||||||
|
border: 5px solid rgb(238, 252, 250);
|
||||||
|
;
|
||||||
|
background-color: rgb(238, 252, 250);
|
||||||
|
font-family: monospace;
|
||||||
|
}
|
||||||
|
|
||||||
|
.raw-markdown.drag-over {
|
||||||
|
background-color: rgb(181, 220, 216);
|
||||||
|
border-color: rgb(75, 160, 151);
|
||||||
|
}
|
||||||
|
|
||||||
|
.raw-markdown.drag-error {
|
||||||
|
background-color: rgba(170, 57, 57, 1);
|
||||||
|
border-color: rgba(255, 170, 170, 1);
|
||||||
|
}
|
15480
package-lock.json
generated
Normal file
15480
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
57
package.json
Normal file
57
package.json
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
{
|
||||||
|
"name": "firesale",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "Salud y Vida Timesheet",
|
||||||
|
"main": "app_main/main.js",
|
||||||
|
"scripts": {
|
||||||
|
"start": "electron-forge start",
|
||||||
|
"postinstall": "electron-rebuild",
|
||||||
|
"package": "electron-forge package",
|
||||||
|
"make": "electron-forge make"
|
||||||
|
},
|
||||||
|
"keywords": [],
|
||||||
|
"author": "José Conde",
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"electron-squirrel-startup": "^1.0.0",
|
||||||
|
"marked": "^4.1.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@electron-forge/cli": "^6.0.0-beta.65",
|
||||||
|
"@electron-forge/maker-deb": "^6.0.0-beta.65",
|
||||||
|
"@electron-forge/maker-rpm": "^6.0.0-beta.65",
|
||||||
|
"@electron-forge/maker-squirrel": "^6.0.0-beta.65",
|
||||||
|
"@electron-forge/maker-zip": "^6.0.0-beta.65",
|
||||||
|
"babel-eslint": "^10.1.0",
|
||||||
|
"devtron": "^1.4.0",
|
||||||
|
"electron": "^20.1.1",
|
||||||
|
"eslint": "^8.23.0",
|
||||||
|
"eslint-plugin-import": "^2.26.0"
|
||||||
|
},
|
||||||
|
"config": {
|
||||||
|
"forge": {
|
||||||
|
"packagerConfig": {},
|
||||||
|
"makers": [{
|
||||||
|
"name": "@electron-forge/maker-squirrel",
|
||||||
|
"config": {
|
||||||
|
"name": "firesale"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "@electron-forge/maker-zip",
|
||||||
|
"platforms": [
|
||||||
|
"darwin"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "@electron-forge/maker-deb",
|
||||||
|
"config": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "@electron-forge/maker-rpm",
|
||||||
|
"config": {}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user