reorganized folder structure to make the root a little cleaner. will continue restructuring of source and assets.

build-validation
David Tookey 5 years ago
parent 55c77ebefe
commit 49e6cd8dfd

3
.gitignore vendored

@ -1,4 +1,5 @@
node_modules/
.idea/
util/
out/
out/
build/

@ -10,15 +10,15 @@
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"clean": "rm -rf util && rm -rf out",
"build": "tsc -p ./util_src --outDir ./util",
"start": "npm run build && electron .",
"dev": "npm run build && electron . --debug",
"clean": "rm -rf build/*",
"build": "tsc -p ./src/ts_source --outDir ./build/util && rsync -avP ./src/ ./build/ && cp ./package.json ./build/",
"start": "npm run build && electron ./build",
"dev": "npm run build && electron ./build --debug",
"package": "npm-run-all package:*",
"package:mac": "electron-packager . --overwrite --platform=darwin --arch=x64 --out=out --icon=assets/app-icon/mac/app.icns --osx-sign.identity='Developer ID Application: GitHub' --extend-info=assets/mac/info.plist",
"package:win32": "electron-packager . --overwrite --platform=win32 --arch=ia32 --out=out --icon=assets/app-icon/win/app.ico",
"package:win64": "electron-packager . --overwrite --platform=win32 --arch=x64 --out=out --icon=assets/app-icon/win/app.ico",
"package:linux": "electron-packager . --overwrite --platform=linux --arch=x64 --out=out",
"package:mac": "electron-packager ./build --overwrite --platform=darwin --arch=x64 --out=out --icon=assets/app-icon/mac/app.icns --osx-sign.identity='Developer ID Application: GitHub' --extend-info=assets/mac/info.plist",
"package:win32": "electron-packager ./build --overwrite --platform=win32 --arch=ia32 --out=out --icon=assets/app-icon/win/app.ico",
"package:win64": "electron-packager ./build --overwrite --platform=win32 --arch=x64 --out=out --icon=assets/app-icon/win/app.ico",
"package:linux": "electron-packager ./build --overwrite --platform=linux --arch=x64 --out=out",
"package:installer": "node ./script/installer.js",
"release": "node ./script/release.js",
"prepack": "check-for-leaks",

Before

Width:  |  Height:  |  Size: 101 KiB

After

Width:  |  Height:  |  Size: 101 KiB

@ -1,6 +1,8 @@
{
"default-links": [
"https://gmail.com",
"https://drive.google.com",
"https://calendar.google.com",
"https://archive.carolina.engineering",
"https://www.paycor.com/"
]

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

@ -3,21 +3,25 @@
<head>
<meta charset="UTF-8">
<title>Landing page</title>
<link rel="stylesheet" href="../../node_modules/bootstrap/dist/css/bootstrap.css">
<link rel="stylesheet" href="../../../node_modules/bootstrap/dist/css/bootstrap.css">
<link rel="stylesheet" type="text/css" href="styles/default.css">
<!-- <meta http-equiv="Content-Security-Policy" content="script-src 'self';">-->
</head>
<body>
<div class="normal-header">
<div class="h2">
Welcome to the landing page.
</div>
<div id="container"></div>
<br>
<br>
<a href="second.html">Go to the second page</a>
<br><br>
<div >
<ul class="list-unstyled d-inline-block debug-green" id="container">
</ul>
<br>
<br>
<a href="second.html">Go to the second page</a>
<br><br>
</div>
</body>
<script>let $ = require('jquery');</script>
<script>require('popper.js')</script>

@ -1,8 +1,8 @@
<html lang="en">
<div id="{{{id}}}" class="media d-inline-flex mx-2 file-card">
<li id="{{{id}}}" class="media d-flex mx-2 file-card">
<img class="align-self-center mr-3 py-2 thumbnail64" src="{{{imagePath}}}" alt="File icon">
<div class="media-body align-self-center">
<p class="pr-3 mb-0">{{fileName}}</p>
</div>
</div>
</li>
</html>

@ -1,10 +1,9 @@
<html lang="en">
<div id="{{{id}}}" class="media d-inline-flex mx-2 file-card">
<li id="{{{id}}}" class="media d-lex mx-2 file-card">
<img class="align-self-center mr-3 py-2 thumbnail32" src="{{{imagePath}}}" alt="File icon">
<div id="{{{id}}}-title" class="media-body align-self-center">
<div class="spinner-border" role="status">
</div>
</div>
</div>
</li>
</html>

@ -0,0 +1,50 @@
import {FileUtils} from './fileutils';
import {CardModel} from "./viewFactory";
let fs = require('fs');
let Mustache = require('mustache');
const crypto = require('crypto');
let path = require('path');
interface TemplateCallbackType {
(rendered: string[]): void
}
const templateCache = {};
export function cacheTemplates() {
let fu = new FileUtils();
let basePath = path.join(fu.getPathToAssets(), "views");
fs.readdirSync(basePath)
.forEach((file) => {
templateCache[file] = fs.readFileSync(path.join(basePath.toString(), file)).toString();
});
}
export function loadTemplate(filename: string, objs: object[], cb: TemplateCallbackType) {
let contents = templateCache[filename];
if (!contents) throw new Error("No such template: " + filename);
let results: string[] = []
for (let i = 0, l = objs.length; i < l; i++) {
let obj = objs[i]
let rendered = Mustache.render(contents, obj)
results.push(rendered)
}
cb(results)
}
export function loadTemplateSingle(filename: string, obj: CardModel, cb: (content: string, id: string) => void) {
let contents = templateCache[filename];
if (!contents) throw new Error("No such template: " + filename);
obj['id'] = createId(obj.fileName);
let rendered = Mustache.render(contents, obj);
cb(rendered, obj['id']);
}
function createId(fileName: String) {
return crypto.createHash('md5').update(fileName).digest('hex');
}
module.exports = {loadTemplate, loadTemplateSingle}
cacheTemplates()

@ -20,7 +20,7 @@ export class CardModel {
export function buildFileCard(filePath: string, elem: Element, append: boolean = false) {
let model = new CardModel(getImagePathFromDocumentName(filePath), fileNameToPrettyString(filePath));
loadTemplateSingle("file-card", model, (content: string, id: string) => {
loadTemplateSingle("file-card.mustache", model, (content: string, id: string) => {
if (append) {
elem.innerHTML = elem.innerHTML + content;
} else {
@ -43,10 +43,12 @@ export function buildDefaultWebCards(elem: Element) {
}
export function buildWebCard(urlText: string, elem: Element, append: boolean = false, $: any = require('jquery')) {
console.log("adding " + urlText)
let url = new URL(urlText);
let favicon = WebUtils.getFaviconUrl(url);
let model = new CardModel(favicon, urlText);
loadTemplateSingle("web-card", model, (content: string, id: string) => {
loadTemplateSingle("web-card.mustache", model, (content: string, id: string) => {
if (append) {
elem.innerHTML = elem.innerHTML + content;
@ -54,19 +56,36 @@ export function buildWebCard(urlText: string, elem: Element, append: boolean = f
elem.innerHTML = content;
}
$.get(url.toString(), (data, status) => {
if ('success' === status) {
let title = $(data).filter('title').text();
$(`#${id}-title`).html($("<p>", {class: "pr-3 mb-0"}).html(title));
$(`#${id}`).on("click", () => {
launchWebsite(url.toString());
});
}
})
new Promise<string>((resolve, reject) => {
$.get(url.toString(), (data, status) => {
try {
if ('success' === status) {
console.log(`get ${url.toString()} was successful`);
resolve($(data).filter('title').text());
}
} catch (a) {
console.error("Error while attempting to fetch page title", a)
}
}).fail((failure) => {
console.log(`get ${url.toString()} failed ${failure}`)
reject(failure);
})
}).then((value: string) => {
let stubb = $(`#${id}-title`).html($("<p>", {class: "pr-3 mb-0"}));
stubb.html(value);
$(`#${id}`).on("click", () => {
launchWebsite(url.toString());
});
}).catch(reason => {
let card = $("<p>", {id:"come on", class: "pr-3 mb-0"});
card.text(urlText);
$(`#${id}-title`).html(card);
});
});
}
function fileNameToPrettyString(fileName: string): string {
let name = fileName.substr(0, fileName.lastIndexOf('.'));
name = name.replace(/[.\-_]/ig, " ")

@ -1,42 +0,0 @@
let fs = require('fs')
let Mustache = require('mustache')
const crypto = require('crypto')
import {FileUtils} from './fileutils'
import {CardModel} from "./viewFactory";
interface TemplateCallbackType {
(rendered: string[]): void
}
export function loadTemplate(filename: string, objs: object[], cb: TemplateCallbackType) {
let fu = new FileUtils();
let path = fu.getPathToView(filename);
fs.readFile(path, 'utf8', (err, contents) => {
if (err) throw err;
let results: string[] = []
for (let i = 0, l = objs.length; i < l; i++) {
let obj = objs[i]
let rendered = Mustache.render(contents, obj)
results.push(rendered)
}
cb(results)
})
}
export function loadTemplateSingle(filename: string, obj: CardModel, cb: (content: string, id: string) => void) {
let fu = new FileUtils();
let path = fu.getPathToView(filename);
fs.readFile(path, 'utf8', (err, contents) => {
if (err) throw err;
obj['id'] = createId(obj.fileName);
let rendered = Mustache.render(contents, obj)
cb(rendered, obj['id'])
})
}
function createId(fileName: String){
return crypto.createHash('md5').update(fileName).digest('hex');
}
module.exports = {loadTemplate, loadTemplateSingle}
Loading…
Cancel
Save