aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--package-lock.json88
-rw-r--r--package.json2
-rw-r--r--src/client/util/DocumentManager.ts14
-rw-r--r--src/client/views/MainView.tsx10
-rw-r--r--src/client/views/nodes/DocumentView.tsx8
5 files changed, 111 insertions, 11 deletions
diff --git a/package-lock.json b/package-lock.json
index 21e4c4e27..842553659 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -412,6 +412,15 @@
"integrity": "sha512-t7uW6eFafjO+qJ3BIV2gGUyZs27egcNRkUdalkud+Qa3+kg//f129iuOFivHDXQ+vnU3fDXuwgv0cqMCbcE8sw==",
"dev": true
},
+ "@types/chrome": {
+ "version": "0.0.114",
+ "resolved": "https://registry.npmjs.org/@types/chrome/-/chrome-0.0.114.tgz",
+ "integrity": "sha512-i7qRr74IrxHtbnrZSKUuP5Uvd5EOKwlwJq/yp7+yTPihOXnPhNQO4Z5bqb1XTnrjdbUKEJicaVVbhcgtRijmLA==",
+ "requires": {
+ "@types/filesystem": "*",
+ "@types/har-format": "*"
+ }
+ },
"@types/color": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/@types/color/-/color-3.0.1.tgz",
@@ -547,6 +556,19 @@
"express-validator": "*"
}
},
+ "@types/filesystem": {
+ "version": "0.0.29",
+ "resolved": "https://registry.npmjs.org/@types/filesystem/-/filesystem-0.0.29.tgz",
+ "integrity": "sha512-85/1KfRedmfPGsbK8YzeaQUyV1FQAvMPMTuWFQ5EkLd2w7szhNO96bk3Rh/SKmOfd9co2rCLf0Voy4o7ECBOvw==",
+ "requires": {
+ "@types/filewriter": "*"
+ }
+ },
+ "@types/filewriter": {
+ "version": "0.0.28",
+ "resolved": "https://registry.npmjs.org/@types/filewriter/-/filewriter-0.0.28.tgz",
+ "integrity": "sha1-wFTor02d11205jq8dviFFocU1LM="
+ },
"@types/formidable": {
"version": "1.0.31",
"resolved": "https://registry.npmjs.org/@types/formidable/-/formidable-1.0.31.tgz",
@@ -584,6 +606,11 @@
"integrity": "sha512-L8O9HAVFZj0TuiS8h5ORthiMsrrhjxTC8XUusp5k47oXCst4VTm+qWKvrAvmYMybZVokbp4Udco1mNwJrTNZPQ==",
"dev": true
},
+ "@types/har-format": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@types/har-format/-/har-format-1.2.4.tgz",
+ "integrity": "sha512-iUxzm1meBm3stxUMzRqgOVHjj4Kgpgu5w9fm4X7kPRfSgVRzythsucEN7/jtOo8SQzm+HfcxWWzJS0mJDH/3DQ=="
+ },
"@types/jquery": {
"version": "3.3.36",
"resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.3.36.tgz",
@@ -3253,6 +3280,15 @@
"resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
"integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
},
+ "chrome": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/chrome/-/chrome-0.1.0.tgz",
+ "integrity": "sha1-9h2beS/v6MGUxwVt3BAscmqGQyk=",
+ "requires": {
+ "exeq": "^2.2.0",
+ "plist": "^1.1.0"
+ }
+ },
"chrome-trace-event": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz",
@@ -5290,6 +5326,15 @@
"resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz",
"integrity": "sha1-KueOhdmJQVhnCwPUe+wfA72Ru50="
},
+ "exeq": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/exeq/-/exeq-2.4.0.tgz",
+ "integrity": "sha1-Td8qaEZIxCeteZNJzzO9dTWPiEo=",
+ "requires": {
+ "bluebird": "^3.0.3",
+ "native-or-bluebird": "^1.2.0"
+ }
+ },
"exif": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/exif/-/exif-0.6.0.tgz",
@@ -8695,6 +8740,11 @@
"resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz",
"integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg=="
},
+ "native-or-bluebird": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/native-or-bluebird/-/native-or-bluebird-1.2.0.tgz",
+ "integrity": "sha1-OcR7/Xgl0fuf+tMiEK4l2q3xAck="
+ },
"needle": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/needle/-/needle-2.4.1.tgz",
@@ -13260,6 +13310,24 @@
"semver-compare": "^1.0.0"
}
},
+ "plist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/plist/-/plist-1.2.0.tgz",
+ "integrity": "sha1-CEtQk93JJQbiWfh0uNmxr7jHlZM=",
+ "requires": {
+ "base64-js": "0.0.8",
+ "util-deprecate": "1.0.2",
+ "xmlbuilder": "4.0.0",
+ "xmldom": "0.1.x"
+ },
+ "dependencies": {
+ "base64-js": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz",
+ "integrity": "sha1-EQHpVE9KdrG8OybUUsqW16NeeXg="
+ }
+ }
+ },
"pn": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz",
@@ -17816,12 +17884,32 @@
"integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
"dev": true
},
+ "xmlbuilder": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.0.0.tgz",
+ "integrity": "sha1-mLj2UcowqmJANvEn0RzGbce5B6M=",
+ "requires": {
+ "lodash": "^3.5.0"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
+ "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y="
+ }
+ }
+ },
"xmlchars": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
"integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
"dev": true
},
+ "xmldom": {
+ "version": "0.1.31",
+ "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.31.tgz",
+ "integrity": "sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ=="
+ },
"xmlhttprequest-ssl": {
"version": "1.5.5",
"resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz",
diff --git a/package.json b/package.json
index ca82d523d..d1d7935af 100644
--- a/package.json
+++ b/package.json
@@ -117,6 +117,7 @@
"@hig/flyout": "^1.2.0",
"@hig/theme-context": "^2.1.3",
"@hig/theme-data": "^2.13.0",
+ "@types/chrome": "0.0.114",
"adm-zip": "^0.4.13",
"archiver": "^3.1.1",
"array-batcher": "^1.2.3",
@@ -128,6 +129,7 @@
"bootstrap": "^4.4.1",
"canvas": "^2.5.0",
"child_process": "^1.0.2",
+ "chrome": "^0.1.0",
"class-transformer": "^0.2.0",
"color": "^3.1.2",
"colors": "^1.4.0",
diff --git a/src/client/util/DocumentManager.ts b/src/client/util/DocumentManager.ts
index ab087335e..67f2f244c 100644
--- a/src/client/util/DocumentManager.ts
+++ b/src/client/util/DocumentManager.ts
@@ -126,13 +126,13 @@ export class DocumentManager {
finished?.();
}
public jumpToDocument = async (
- targetDoc: Doc,
- willZoom: boolean,
- createViewFunc = DocumentManager.addRightSplit,
- docContext?: Doc,
- linkId?: string,
- closeContextIfNotFound: boolean = false,
- originatingDoc: Opt<Doc> = undefined,
+ targetDoc: Doc, // document to display
+ willZoom: boolean, // whether to zoom doc to take up most of screen
+ createViewFunc = DocumentManager.addRightSplit, // how to create a view of the doc if it doesn't exist
+ docContext?: Doc, // context to load that should contain the target
+ linkId?: string, // link that's being followed
+ closeContextIfNotFound: boolean = false, // after opening a context where the document should be, this determines whether the context should be closed if the Doc isn't actually there
+ originatingDoc: Opt<Doc> = undefined, // doc that initiated the display of the target odoc
finished?: () => void
): Promise<void> => {
const getFirstDocView = DocumentManager.Instance.getFirstDocumentView;
diff --git a/src/client/views/MainView.tsx b/src/client/views/MainView.tsx
index a0a6adab7..a1d1b0ece 100644
--- a/src/client/views/MainView.tsx
+++ b/src/client/views/MainView.tsx
@@ -51,6 +51,8 @@ import { PreviewCursor } from './PreviewCursor';
import { ScriptField } from '../../fields/ScriptField';
import { TimelineMenu } from './animationtimeline/TimelineMenu';
import { SnappingManager } from '../util/SnappingManager';
+import { FormattedTextBox } from './nodes/formattedText/FormattedTextBox';
+import { DocumentManager } from '../util/DocumentManager';
@observer
export class MainView extends React.Component {
@@ -83,6 +85,14 @@ export class MainView extends React.Component {
window.removeEventListener("keydown", KeyManager.Instance.handle);
window.addEventListener("keydown", KeyManager.Instance.handle);
window.addEventListener("paste", KeyManager.Instance.paste as any);
+ document.addEventListener("dash", (e: any) => { // event used by chrome plugin to tell Dash which document to focus on
+ const id = FormattedTextBox.GetDocFromUrl(e.detail);
+ DocServer.GetRefField(id).then(doc => {
+ if (doc instanceof Doc) {
+ DocumentManager.Instance.jumpToDocument(doc, false, undefined);
+ }
+ });
+ });
}
componentWillUnMount() {
diff --git a/src/client/views/nodes/DocumentView.tsx b/src/client/views/nodes/DocumentView.tsx
index 7a4ecfa9c..e245e045c 100644
--- a/src/client/views/nodes/DocumentView.tsx
+++ b/src/client/views/nodes/DocumentView.tsx
@@ -742,16 +742,16 @@ export class DocumentView extends DocComponent<DocumentViewProps, Document>(Docu
const more = cm.findByDescription("More...");
const moreItems: ContextMenuProps[] = more && "subitems" in more ? more.subitems : [];
- moreItems.push({ description: "Make Add Only", event: () => this.layoutDoc.ACL = this.dataDoc.ACL = "addOnly", icon: "concierge-bell" });
- moreItems.push({ description: "Make Read Only", event: () => this.layoutDoc.ACL = this.dataDoc.ACL = "readOnly", icon: "concierge-bell" });
- moreItems.push({ description: "Make Private", event: () => this.layoutDoc[AclSym] = this.dataDoc[AclSym] = "noAccess", icon: "concierge-bell" });
+ moreItems.push({ description: "Make Add Only", event: () => this.dataDoc.ACL = this.layoutDoc.ACL = "addOnly", icon: "concierge-bell" });
+ moreItems.push({ description: "Make Read Only", event: () => this.dataDoc.ACL = this.layoutDoc.ACL = "readOnly", icon: "concierge-bell" });
+ moreItems.push({ description: "Make Private", event: () => this.dataDoc.ACL = this.layoutDoc.ACL = "noAccess", icon: "concierge-bell" });
moreItems.push({ description: "Make View of Metadata Field", event: () => Doc.MakeMetadataFieldTemplate(this.props.Document, this.props.DataDoc), icon: "concierge-bell" });
moreItems.push({ description: `${this.Document._chromeStatus !== "disabled" ? "Hide" : "Show"} Chrome`, event: () => this.Document._chromeStatus = (this.Document._chromeStatus !== "disabled" ? "disabled" : "enabled"), icon: "project-diagram" });
moreItems.push({ description: this.Document.lockedPosition ? "Unlock Position" : "Lock Position", event: this.toggleLockPosition, icon: BoolCast(this.Document.lockedPosition) ? "unlock" : "lock" });
if (!ClientUtils.RELEASE) {
// let copies: ContextMenuProps[] = [];
- moreItems.push({ description: "Copy ID", event: () => Utils.CopyText(this.props.Document[Id]), icon: "fingerprint" });
+ moreItems.push({ description: "Copy ID", event: () => Utils.CopyText(Utils.prepend("/doc/" + this.props.Document[Id])), icon: "fingerprint" });
// cm.addItem({ description: "Copy...", subitems: copies, icon: "copy" });
}
if (Cast(Doc.GetProto(this.props.Document).data, listSpec(Doc))) {