master
Michael Murtaugh 3 years ago
parent c5ef9b9eee
commit 76476e27c5

@ -1,3 +1,8 @@
.PHONY: dist
dist:
cp build/* dist/
all: build/codemirror.css build/ticeditor.js
# dist/inspect_tic.js: src/inspect_tic.js

1219
dist/ticlab.js vendored

File diff suppressed because one or more lines are too long

@ -28,6 +28,7 @@
"@lumino/widgets": "^1.18.0",
"codemirror": "^5.59.2",
"d3-selection": "^2.0.0",
"dayjs": "^1.10.4",
"es6-promise": "^4.0.5",
"filesize": "^6.1.0",
"indexed-pdb": "^1.1.2",

@ -1,179 +0,0 @@
import { CommandRegistry } from '@lumino/commands';
import { Message } from '@lumino/messaging';
import { BoxPanel, CommandPalette, ContextMenu, DockPanel, Menu, MenuBar, Widget } from '@lumino/widgets';
import '../style/index.css';
// import '@fortawesome/fontawesome-free/css/all.min.css';
import { EditorWidget } from './editor.js';
import { ListingWidget } from './listing.js';
import * as ticdb from './ticdb.js';
// class ContentWidget extends Widget {
// static createNode() {
// let node = document.createElement('div');
// let content = document.createElement('div');
// let input = document.createElement('input');
// input.placeholder = 'Placeholder...';
// content.appendChild(input);
// node.appendChild(content);
// return node;
// }
// constructor(name) {
// super({ node: ContentWidget.createNode() });
// this.setFlag(Widget.Flag.DisallowLayout);
// this.addClass('content');
// this.addClass(name.toLowerCase());
// this.title.label = name;
// this.title.closable = true;
// this.title.caption = `Long description for: ${name}`;
// }
// get inputNode() {
// return this.node.getElementsByTagName('input')[0];
// }
// onActivateRequest(Message) {
// if (this.isAttached) {
// this.inputNode.focus();
// }
// }
// }
window._tic = {};
const commands = new CommandRegistry();
function main () {
const dialog = document.getElementById("dialog"),
openfile = document.getElementById("openfile"),
openfile_fileinput = document.getElementById("openfile_fileinput"),
openfile_cancel = document.getElementById("openfile_cancel");
function dialog_is_open () {
return dialog.style.display != "none";
}
function close_dialog() {
dialog.style.display = "none";
openfile.style.display = "none";
openfile_fileinput.value = null;
}
function show_openfile() {
dialog.style.display = "flex";
openfile.style.display = "block";
openfile_fileinput.focus();
}
openfile_cancel.addEventListener("click", e=> {
close_dialog();
})
commands.addCommand('tic:open', {
label: 'Open...',
mnemonic: 1,
iconClass: 'fa fa-file',
execute: () => {
// console.log('Import...');
show_openfile();
}
});
commands.addCommand('tic:save', {
label: 'Save',
mnemonic: 0,
iconClass: 'fa fa-save',
execute: async () => {
console.log('Save');
// current_cart.code.text = codesrc; // code.getValue();
if (window._tic.filename && window._tic.cart) {
let cart = window._tic.cart;
cart.code.text = editor.getValue();
// console.log("saving code", cart.code.text);
await ticdb.save_cart(window._tic.filename, cart, window._tic.item.mode);
listing.sync();
}
}
});
commands.addCommand('tic:save-as', {
label: 'Save as...',
mnemonic: 0,
iconClass: 'fa fa-save',
execute: async () => {
console.log('Save as...');
if (window._tic.cart) {
let filename = prompt("Save as...");
if (!filename) { return; }
window._tic.filename = filename;
let cart = window._tic.cart;
cart.code.text = editor.getValue();
// console.log("saving code", cart.code.text);
await ticdb.save_cart(filename, cart, window._tic.item.mode);
listing.sync();
}
}
});
commands.addKeyBinding({
keys: ['Accel S'],
selector: 'body',
command: 'tic:save'
});
commands.addKeyBinding({
keys: ['Accel O'],
selector: 'body',
command: 'tic:open'
});
let filemenu = new Menu({ commands });
filemenu.addItem({ command: 'tic:open' });
filemenu.addItem({ command: 'tic:save' });
filemenu.addItem({ command: 'tic:save-as' });
// filemenu.addItem({ type: 'separator' });
filemenu.title.label = 'File';
filemenu.title.mnemonic = 0;
let bar = new MenuBar();
bar.addMenu(filemenu);
bar.id = 'menuBar';
document.addEventListener('keydown', (event) => {
// console.log("keydown", event);
if (event.key == "Escape" && dialog_is_open()) {
close_dialog();
} else {
commands.processKeydownEvent(event);
}
});
let listing = new ListingWidget('Listing');
window._tic.listing = listing;
let editor = new EditorWidget('Editor');
window._tic.editor = editor;
let dock = new DockPanel();
dock.addWidget(listing);
dock.addWidget(editor, { mode: 'split-right', ref: listing });
// dock.addWidget(editor2, { ref: editor1 });
dock.id = 'dock';
BoxPanel.setStretch(dock, 1);
let main = new BoxPanel({ direction: 'left-to-right', spacing: 0 });
main.id = 'main';
// main.addWidget(palette);
main.addWidget(dock);
window.onresize = () => { main.update(); };
Widget.attach(bar, document.body);
Widget.attach(main, document.body);
}
window.onload = main;

@ -6,8 +6,12 @@ import {select, selectAll} from "d3-selection";
import * as CodeMirror from 'codemirror';
import * as ticdb from './ticdb.js';
import * as dayjs from 'dayjs';
import * as relativeTime from 'dayjs/plugin/relativeTime';
dayjs.extend(relativeTime);
console.log("dayjs", dayjs);
window.dayjs = dayjs;
export class ListingWidget extends Widget {
static createNode() {
@ -37,7 +41,7 @@ export class ListingWidget extends Widget {
this.table = this.listing.append("table"),
this.thead = this.table.append("thead").append("tr"),
this.tbody = this.table.append("tbody");
this.thead.selectAll("th").data(["name", "size", "time", " "]).enter().append("th").html(d => d);
this.thead.selectAll("th").data(["Name", "Last Modified", " "]).enter().append("th").html(d => d);
this.sync();
}
@ -94,14 +98,19 @@ export class ListingWidget extends Widget {
window._tic.editor.setValue(window._tic.cart.code.text);
}
});
tr.append("td").attr("class", "size");
//tr.append("td").attr("class", "size");
tr.append("td").attr("class", "timestamp");
tr.append("td").attr("class", "download").append("a").attr("href", d=>d.objecturl).attr("download", d=>d.filename).html("download");
tr.append("td").attr("class", "download")
.append("a")
.attr("href", d=>d.objecturl)
.attr("download", d=>d.filename)
.append("i").attr("class", "fa fa-download");
// update Merged enter + join
let update = tr.merge(join);
update.select(".size").html(d => filesize(d.size));
update.select(".timestamp").html(d => d.timestamp.toLocaleString());
// update.select(".size").html(d => filesize(d.size));
// update.select(".timestamp").html(d => d.timestamp.toLocaleString());
update.select(".timestamp").html(d => dayjs(d.timestamp).fromNow());
} catch (error) {
console.log(error, 'any error during the process');

@ -1,10 +1,10 @@
const path = require('path');
module.exports = {
entry: './src/app.js',
entry: './src/ticlab.js',
mode: "development",
output: {
filename: 'ticeditor.js',
filename: 'ticlab.js',
path: path.resolve(__dirname, 'build'),
},
module: {

@ -482,6 +482,11 @@ d3-selection@^2.0.0:
resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-2.0.0.tgz#94a11638ea2141b7565f883780dabc7ef6a61066"
integrity sha512-XoGGqhLUN/W14NmaqcO/bb1nqjDAw5WtSYb2X8wiuQWvSZUsUVYsOSkOybUrNvcBjaywBdYPy03eXHMXjk9nZA==
dayjs@^1.10.4:
version "1.10.4"
resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.4.tgz#8e544a9b8683f61783f570980a8a80eaf54ab1e2"
integrity sha512-RI/Hh4kqRc1UKLOAf/T5zdMMX5DQIlDxwUe3wSyMMnEbGunnpENCdbUgM+dW7kXidZqCttBrmw7BhN4TMddkCw==
electron-to-chromium@^1.3.634:
version "1.3.644"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.644.tgz#c89721733ec26b8d117275fb6b2acbeb3d45a6b6"

Loading…
Cancel
Save