diff --git a/assets/conf/user.json b/assets/conf/user.json
new file mode 100644
index 0000000..fa547fa
--- /dev/null
+++ b/assets/conf/user.json
@@ -0,0 +1,7 @@
+{
+ "default-links": [
+ "https://gmail.com",
+ "https://archive.carolina.engineering",
+ "https://www.paycor.com/"
+ ]
+}
\ No newline at end of file
diff --git a/assets/pages/scripts/index_app.js b/assets/pages/scripts/index_app.js
index fc84065..02ff1ca 100644
--- a/assets/pages/scripts/index_app.js
+++ b/assets/pages/scripts/index_app.js
@@ -5,6 +5,7 @@ function loadDocuments() {
let container = document.querySelector("#container");
let fileName = "voicemail-and-vacation-responder.pdf";
factory.buildFileCard(fileName, container, true)
+ factory.buildDefaultWebCards(container)
}
loadDocuments();
\ No newline at end of file
diff --git a/assets/pages/styles/default.css b/assets/pages/styles/default.css
index a04bbd9..e714ab2 100644
--- a/assets/pages/styles/default.css
+++ b/assets/pages/styles/default.css
@@ -2,11 +2,16 @@ body {
background: #ffffff;
}
-.thumbnail {
+.thumbnail64 {
width: 64px;
height: 64px;
}
+.thumbnail32 {
+ width: 16px;
+ height: 32px;
+}
+
.file-card{
cursor: pointer;
}
diff --git a/assets/views/file-card.mustache b/assets/views/file-card.mustache
index d00d1d2..023597b 100644
--- a/assets/views/file-card.mustache
+++ b/assets/views/file-card.mustache
@@ -1,6 +1,6 @@
-

+
diff --git a/assets/views/web-card.mustache b/assets/views/web-card.mustache
new file mode 100644
index 0000000..c2efdbe
--- /dev/null
+++ b/assets/views/web-card.mustache
@@ -0,0 +1,10 @@
+
+
+
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index ac5e8c3..db681cf 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -70,6 +70,15 @@
"@types/node": "*"
}
},
+ "@types/jquery": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.3.tgz",
+ "integrity": "sha512-IENpHTjGksr2wQS6ZO8eMIE0tIB22Ywg+n3/yAWCa56VSZ26phcwAbFdh9+VNUWk7e83qB27QLax3Rf4G92Y9A==",
+ "dev": true,
+ "requires": {
+ "@types/sizzle": "*"
+ }
+ },
"@types/minimatch": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
@@ -83,6 +92,12 @@
"integrity": "sha512-Dg4fab0IP6ZtdJOkwTaMaOJA3PWw7bR6cUYh+nxkYe4+ZogiLBKhaEr9sHqVkCtREVLw92g3Fl1bt8++dHKavw==",
"dev": true
},
+ "@types/sizzle": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.2.tgz",
+ "integrity": "sha512-7EJYyKTL7tFR8+gDbB6Wwz/arpGa0Mywk1TJbNzKzHtzbwVmY4HR9WqS5VV7dsBUKQmPNr192jHr/VpBluj/hg==",
+ "dev": true
+ },
"@types/yauzl": {
"version": "2.9.1",
"resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.1.tgz",
diff --git a/package.json b/package.json
index 7d17de8..a47f1b4 100644
--- a/package.json
+++ b/package.json
@@ -45,6 +45,7 @@
"electron": "^7.2.4",
"electron-settings": "^3.0.7",
"electron-shortcut-normalizer": "^1.0.0",
- "electron-packager": "^15.1.0"
+ "electron-packager": "^15.1.0",
+ "@types/jquery": "^3.5.1"
}
}
diff --git a/util_src/templates.ts b/util_src/templates.ts
index 9491885..946087f 100644
--- a/util_src/templates.ts
+++ b/util_src/templates.ts
@@ -2,6 +2,7 @@ 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
@@ -22,12 +23,12 @@ export function loadTemplate(filename: string, objs: object[], cb: TemplateCallb
})
}
-export function loadTemplateSingle(filename: string, obj: object, cb: (content: string, id: string) => void) {
+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(filename);
+ obj['id'] = createId(obj.fileName);
let rendered = Mustache.render(contents, obj)
cb(rendered, obj['id'])
})
diff --git a/util_src/viewFactory.ts b/util_src/viewFactory.ts
index 90f2065..121a704 100644
--- a/util_src/viewFactory.ts
+++ b/util_src/viewFactory.ts
@@ -1,16 +1,19 @@
import {Configurator, FileUtils} from './fileutils'
import {loadTemplateSingle} from "./templates"
+import {WebUtils} from "./webutils"
+
const shell = require('electron').shell;
const config = new Configurator();
const fu = new FileUtils();
-class CardModel {
+
+export class CardModel {
imagePath: string;
fileName: string;
- constructor(path: string, name: string) {
- this.imagePath = path;
+ constructor(imagePath: string, name: string) {
+ this.imagePath = imagePath;
this.fileName = name;
}
}
@@ -23,12 +26,47 @@ export function buildFileCard(filePath: string, elem: Element, append: boolean =
} else {
elem.innerHTML = content;
}
- document.querySelector("#" + id).addEventListener('click', ()=>{
+ document.querySelector("#" + id).addEventListener('click', () => {
launchDocument(filePath);
})
});
}
+export function buildDefaultWebCards(elem: Element) {
+ let userPrefs = config.loadConfigMap("user.json");
+ let links = userPrefs['default-links'];
+ let $ = require('jquery')
+ for (let i = 0, l = links.length; i < l; i++) {
+ let link = links[i];
+ buildWebCard(link, elem, true, $);
+ }
+}
+
+export function buildWebCard(urlText: string, elem: Element, append: boolean = false, $: any = require('jquery')) {
+ let url = new URL(urlText);
+ let favicon = WebUtils.getFaviconUrl(url);
+ let model = new CardModel(favicon, urlText);
+ loadTemplateSingle("web-card", model, (content: string, id: string) => {
+
+ if (append) {
+ elem.innerHTML = elem.innerHTML + content;
+ } else {
+ elem.innerHTML = content;
+ }
+
+ $.get(url.toString(), (data, status) => {
+ if ('success' === status) {
+ let title = $(data).filter('title').text();
+ $(`#${id}-title`).html($("
", {class: "pr-3 mb-0"}).html(title));
+ $(`#${id}`).on("click", () => {
+ launchWebsite(url.toString());
+ });
+ }
+ })
+
+ });
+}
+
function fileNameToPrettyString(fileName: string): string {
let name = fileName.substr(0, fileName.lastIndexOf('.'));
name = name.replace(/[.\-_]/ig, " ")
@@ -45,11 +83,12 @@ function getImagePathFromDocumentName(name: string): string {
return fu.getPathToImage(config.getFileExtensionToImageMap()[fu.getFileExtension(name)])
}
-function launchDocument(filename) {
+function launchDocument(filename: string) {
let fullPath = fu.getPathToDocument(filename);
shell.openItem(fullPath);
}
-function launchWebsite(url) {
+function launchWebsite(url: string) {
+ console.log("Attempting to launch " + url)
shell.openItem(url);
}
\ No newline at end of file
diff --git a/util_src/webutils.ts b/util_src/webutils.ts
new file mode 100644
index 0000000..c34f1a6
--- /dev/null
+++ b/util_src/webutils.ts
@@ -0,0 +1,6 @@
+
+export module WebUtils{
+ export function getFaviconUrl(url: URL): string{
+ return `https://www.google.com/s2/favicons?domain=${url.toString()}`;
+ }
+}
\ No newline at end of file