aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSam Wilkins <samwilkins333@gmail.com>2019-08-07 01:48:15 -0400
committerSam Wilkins <samwilkins333@gmail.com>2019-08-07 01:48:15 -0400
commit4d3962cf221cb2421835c7016562433077e7b200 (patch)
tree742f2083e4a77d4090fbd402c8b80113c78b887b /src
parentd8c065935a0cb5a89b6d76407b7729f8584424eb (diff)
pivot view script retrieval and context menu behavior improvements
Diffstat (limited to 'src')
-rw-r--r--src/client/views/collections/CollectionView.tsx14
-rw-r--r--src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx12
-rw-r--r--src/scraping/buxton/source/Silverlight.dmgbin0 -> 15097394 bytes
-rw-r--r--src/server/index.ts52
4 files changed, 44 insertions, 34 deletions
diff --git a/src/client/views/collections/CollectionView.tsx b/src/client/views/collections/CollectionView.tsx
index 59572b7e7..60ede17e7 100644
--- a/src/client/views/collections/CollectionView.tsx
+++ b/src/client/views/collections/CollectionView.tsx
@@ -1,6 +1,6 @@
import { library } from '@fortawesome/fontawesome-svg-core';
import { faEye } from '@fortawesome/free-regular-svg-icons';
-import { faColumns, faEllipsisV, faFingerprint, faImage, faProjectDiagram, faSignature, faSquare, faTh, faThList, faTree } from '@fortawesome/free-solid-svg-icons';
+import { faColumns, faEllipsisV, faFingerprint, faImage, faProjectDiagram, faSignature, faSquare, faTh, faThList, faTree, faCopy } from '@fortawesome/free-solid-svg-icons';
import { action, IReactionDisposer, observable, reaction, runInAction } from 'mobx';
import { observer } from "mobx-react";
import * as React from 'react';
@@ -20,7 +20,7 @@ import { CollectionTreeView } from "./CollectionTreeView";
import { CollectionViewBaseChrome } from './CollectionViewChromes';
export const COLLECTION_BORDER_WIDTH = 2;
-library.add(faTh, faTree, faSquare, faProjectDiagram, faSignature, faThList, faFingerprint, faColumns, faEllipsisV, faImage, faEye as any);
+library.add(faTh, faTree, faSquare, faProjectDiagram, faSignature, faThList, faFingerprint, faColumns, faEllipsisV, faImage, faEye as any, faCopy);
@observer
export class CollectionView extends React.Component<FieldViewProps> {
@@ -86,7 +86,13 @@ export class CollectionView extends React.Component<FieldViewProps> {
onContextMenu = (e: React.MouseEvent): void => {
if (!this.isAnnotationOverlay && !e.isPropagationStopped() && this.props.Document[Id] !== CurrentUserUtils.MainDocId) { // need to test this because GoldenLayout causes a parallel hierarchy in the React DOM for its children and the main document view7
let subItems: ContextMenuProps[] = [];
- subItems.push({ description: "Freeform", event: () => this.props.Document.viewType = CollectionViewType.Freeform, icon: "signature" });
+ subItems.push({
+ description: "Freeform", event: () => {
+ this.props.Document.viewType = CollectionViewType.Freeform;
+ delete this.props.Document.arrangeInit;
+ delete this.props.Document.arrangeScript;
+ }, icon: "signature"
+ });
if (CollectionBaseView.InSafeMode()) {
ContextMenu.Instance.addItem({ description: "Test Freeform", event: () => this.props.Document.viewType = CollectionViewType.Invalid, icon: "project-diagram" });
}
@@ -97,7 +103,7 @@ export class CollectionView extends React.Component<FieldViewProps> {
switch (this.props.Document.viewType) {
case CollectionViewType.Freeform: {
subItems.push({ description: "Custom", icon: "fingerprint", event: CollectionFreeFormView.AddCustomLayout(this.props.Document, this.props.fieldKey) });
- subItems.push({ description: "Pivot", icon: "fingerprint", event: () => CollectionFreeFormView.SetPivotLayout(this.props.Document) });
+ subItems.push({ description: "Pivot", icon: "copy", event: () => CollectionFreeFormView.SetPivotLayout(this.props.Document) });
break;
}
}
diff --git a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx
index 17c4e83b0..110ac2f25 100644
--- a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx
+++ b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx
@@ -51,14 +51,10 @@ export const panZoomSchema = createSchema({
export namespace PivotView {
- export let arrangeInit: string;
- export let arrangeScript: string;
+ export let scripts: { arrangeInit: string, arrangeScript: string };
export async function loadLayouts() {
- let response = await fetch(Utils.prepend("/layoutscripts"));
- let scripts = JSON.parse(await response.text());
- arrangeInit = scripts[0];
- arrangeScript = scripts[1];
+ scripts = JSON.parse(await (await fetch(Utils.prepend("/layoutscripts"))).text());
}
}
@@ -815,8 +811,8 @@ export class CollectionFreeFormView extends CollectionSubView(PanZoomDocument) {
}
target[key] = new ScriptField(script);
};
- setSpecifiedLayoutField(PivotView.arrangeInit, "arrangeInit", { collection: "Doc", docs: "Doc[]" }, undefined);
- setSpecifiedLayoutField(PivotView.arrangeScript, "arrangeScript", { doc: "Doc", index: "number", collection: "Doc", state: "any", docs: "Doc[]" }, "{x: number, y: number, width?: number, height?: number}");
+ setSpecifiedLayoutField(PivotView.scripts.arrangeInit, "arrangeInit", { collection: "Doc", docs: "Doc[]" }, undefined);
+ setSpecifiedLayoutField(PivotView.scripts.arrangeScript, "arrangeScript", { doc: "Doc", index: "number", collection: "Doc", state: "any", docs: "Doc[]" }, "{x: number, y: number, width?: number, height?: number}");
}
render() {
diff --git a/src/scraping/buxton/source/Silverlight.dmg b/src/scraping/buxton/source/Silverlight.dmg
new file mode 100644
index 000000000..d88290362
--- /dev/null
+++ b/src/scraping/buxton/source/Silverlight.dmg
Binary files differ
diff --git a/src/server/index.ts b/src/server/index.ts
index d735a6d8c..a0101e3f8 100644
--- a/src/server/index.ts
+++ b/src/server/index.ts
@@ -1,6 +1,6 @@
require('dotenv').config();
import * as bodyParser from 'body-parser';
-import { exec } from 'child_process';
+import { exec, ExecOptions } from 'child_process';
import * as cookieParser from 'cookie-parser';
import * as express from 'express';
import * as session from 'express-session';
@@ -149,31 +149,39 @@ app.get("/pull", (req, res) =>
}));
app.get("/buxton", (req, res) => {
- let buxton_scraping = path.join(__dirname, '../scraping/buxton');
- exec('python scraper.py', { cwd: buxton_scraping }, (err, stdout, sterr) => {
- if (err) {
- res.send(err.message);
- return;
+ let cwd = '../scraping/buxton';
+
+ let onResolved = (stdout: string) => { console.log(stdout); res.redirect("/"); };
+ let onRejected = (err: any) => { console.error(err.message); res.send(err); };
+ let tryPython3 = () => command_line('python3 scraper.py', cwd).then(onResolved, onRejected);
+
+ command_line('python scraper.py', cwd).then(onResolved, tryPython3);
+});
+
+const command_line = (command: string, fromDirectory?: string) => {
+ return new Promise<string>((resolve, reject) => {
+ let options: ExecOptions = {};
+ if (fromDirectory) {
+ options.cwd = path.join(__dirname, fromDirectory);
}
- console.log(stdout);
- res.redirect("/");
+ exec(command, options, (err, stdout) => err ? reject(err) : resolve(stdout));
});
-});
+};
+
+const read_text_file = (relativePath: string) => {
+ let target = path.join(__dirname, relativePath);
+ return new Promise<string>((resolve, reject) => {
+ fs.readFile(target, (err, data) => err ? reject(err) : resolve(data.toString()));
+ });
+};
app.get('/layoutscripts', (req, res) => {
- let scripts: string[] = [];
- let handler = (err: NodeJS.ErrnoException | null, data: Buffer) => {
- if (err) {
- console.log(err.message);
- return;
- }
- scripts.push(data.toString());
- if (scripts.length === 2) {
- res.send(JSON.stringify(scripts));
- }
- };
- fs.readFile(path.join(__dirname, '../scraping/buxton/scripts/initialization.txt'), handler);
- fs.readFile(path.join(__dirname, '../scraping/buxton/scripts/layout.txt'), handler);
+ let prefix = '../scraping/buxton/scripts/';
+ read_text_file(prefix + 'initialization.txt').then(arrangeInit => {
+ read_text_file(prefix + 'layout.txt').then(arrangeScript => {
+ res.send(JSON.stringify({ arrangeInit, arrangeScript }));
+ });
+ });
});
app.get("/version", (req, res) => {