aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbob <bcz@cs.brown.edu>2019-06-21 10:44:15 -0400
committerbob <bcz@cs.brown.edu>2019-06-21 10:44:15 -0400
commit5483c3353b99e7993f358e3d212b1717bf21fec6 (patch)
treef10321cab363f5d13154885780587907f5b5571e
parentcccc43c64a749e34a993e32f8616ac7e0532c7d9 (diff)
more template improvements for treeview
-rw-r--r--src/client/views/DocumentDecorations.tsx14
-rw-r--r--src/client/views/Templates.tsx4
-rw-r--r--src/client/views/collections/CollectionDockingView.tsx4
-rw-r--r--src/client/views/collections/CollectionStackingView.tsx2
-rw-r--r--src/client/views/collections/CollectionTreeView.tsx37
-rw-r--r--src/client/views/collections/CollectionView.tsx27
-rw-r--r--src/client/views/nodes/KeyValuePair.tsx1
7 files changed, 45 insertions, 44 deletions
diff --git a/src/client/views/DocumentDecorations.tsx b/src/client/views/DocumentDecorations.tsx
index b3f5340d9..3a366b4d2 100644
--- a/src/client/views/DocumentDecorations.tsx
+++ b/src/client/views/DocumentDecorations.tsx
@@ -74,24 +74,22 @@ export class DocumentDecorations extends React.Component<{}, { value: string }>
if (text[0] === '#') {
this._fieldKey = text.slice(1, text.length);
this._title = this.selectionTitle;
+ } else if (text[0] === ">") {
+ let metaKey = text.slice(1, text.length);
let first = SelectionManager.SelectedDocuments()[0].props.Document!;
let collection = SelectionManager.SelectedDocuments()[0].props.ContainingCollectionView!.props.Document;
- Doc.GetProto(collection)[this._fieldKey] = "Testing";
+ Doc.GetProto(collection)[metaKey] = "-empty field-";
let template = Doc.MakeAlias(collection);
- template.title = "FIELD-" + this._fieldKey;
- template.layout = FormattedTextBox.LayoutString(this._fieldKey);
+ template.title = metaKey;
+ template.layout = FormattedTextBox.LayoutString(metaKey);
template.isTemplate = true;
template.x = NumCast(first.x);
template.y = NumCast(first.y);
template.width = first[WidthSym]();
template.height = first[HeightSym]();
- //{props.DataDoc.${fieldKey}}
- template.templates = new List<string>([Templates.TitleBar(this._fieldKey)]);
+ template.templates = new List<string>([Templates.TitleBar(metaKey)]);//`{props.DataDoc.${metaKey}_text}`)]);
Doc.AddDocToList(collection, "data", template);
SelectionManager.SelectedDocuments().map(dv => dv.props.removeDocument && dv.props.removeDocument(dv.props.Document));
-
- // let template = SelectionManager.SelectedDocuments()[0].props.Document; template.proto = Doc.GetProto(collection)
- // template.layout = FormattedTextBox.LayoutString(this._fieldKey);
}
else {
if (SelectionManager.SelectedDocuments().length > 0) {
diff --git a/src/client/views/Templates.tsx b/src/client/views/Templates.tsx
index 0904b03b0..5bb8d454a 100644
--- a/src/client/views/Templates.tsx
+++ b/src/client/views/Templates.tsx
@@ -84,10 +84,10 @@ export namespace Templates {
</div > `);
}
- export function TitleBar(titlestr: string) {
+ export function TitleBar(datastring: string) {
return (`<div>
<div style="height:25px; width:100%; background-color: rgba(0, 0, 0, .4); color: white; z-index: 100">
- <span style="text-align:center;width:100%;font-size:20px;position:absolute;overflow:hidden;white-space:nowrap;text-overflow:ellipsis">${titlestr}</span>
+ <span style="text-align:center;width:100%;font-size:20px;position:absolute;overflow:hidden;white-space:nowrap;text-overflow:ellipsis">${datastring}</span>
</div>
<div style="height:calc(100% - 25px);">
<div style="width:100%;overflow:auto">{layout}</div>
diff --git a/src/client/views/collections/CollectionDockingView.tsx b/src/client/views/collections/CollectionDockingView.tsx
index 05c3cdac6..79a0d18df 100644
--- a/src/client/views/collections/CollectionDockingView.tsx
+++ b/src/client/views/collections/CollectionDockingView.tsx
@@ -261,8 +261,8 @@ export class CollectionDockingView extends React.Component<SubCollectionViewProp
this._isPointerDown = true;
let onPointerUp = action(() => {
window.removeEventListener("pointerup", onPointerUp)
- this._isPointerDown = false
- })
+ this._isPointerDown = false;
+ });
window.addEventListener("pointerup", onPointerUp);
var className = (e.target as any).className;
if (className === "messageCounter") {
diff --git a/src/client/views/collections/CollectionStackingView.tsx b/src/client/views/collections/CollectionStackingView.tsx
index a1e84302b..19a9a1208 100644
--- a/src/client/views/collections/CollectionStackingView.tsx
+++ b/src/client/views/collections/CollectionStackingView.tsx
@@ -100,7 +100,7 @@ export class CollectionStackingView extends CollectionSubView(doc => doc) {
let dref = React.createRef<HTMLDivElement>();
let dxf = () => this.getDocTransform(d, dref.current!).scale(this.columnWidth / d[WidthSym]());
let width = () => d.nativeWidth ? Math.min(d[WidthSym](), this.columnWidth) : this.columnWidth;
- let height = () => aspect ? width() / aspect : d[HeightSym]()
+ let height = () => aspect ? width() / aspect : d[HeightSym]();
let rowSpan = Math.ceil((height() + this.gridGap) / (this._gridSize + this.gridGap));
return (<div className="collectionStackingView-masonryDoc"
key={d[Id]}
diff --git a/src/client/views/collections/CollectionTreeView.tsx b/src/client/views/collections/CollectionTreeView.tsx
index 7528bc29d..18d6751c6 100644
--- a/src/client/views/collections/CollectionTreeView.tsx
+++ b/src/client/views/collections/CollectionTreeView.tsx
@@ -25,10 +25,13 @@ import { CollectionSchemaPreview } from './CollectionSchemaView';
import { CollectionSubView } from "./CollectionSubView";
import "./CollectionTreeView.scss";
import React = require("react");
+import { FormattedTextBox } from '../nodes/FormattedTextBox';
export interface TreeViewProps {
document: Doc;
+ dataDoc: Doc;
+ containingCollection: Doc;
deleteDoc: (doc: Doc) => boolean;
moveDocument: DragManager.MoveFunction;
dropAction: "alias" | "copy" | undefined;
@@ -142,7 +145,29 @@ class TreeView extends React.Component<TreeViewProps> {
height={36}
fontStyle={style}
GetValue={() => StrCast(this.props.document[key])}
- SetValue={(value: string) => (Doc.GetProto(this.props.document)[key] = value) ? true : true}
+ SetValue={(value: string) => {
+ let res = (Doc.GetProto(this.props.document)[key] = value) ? true : true;
+
+ if (value.startsWith(">")) {
+ let metaKey = value.slice(1, value.length);
+ let collection = this.props.containingCollection;
+ Doc.GetProto(collection)[metaKey] = "-empty field-";
+ let template = Doc.MakeAlias(collection);
+ template.title = metaKey;
+ template.embed = true;
+ template.layout = FormattedTextBox.LayoutString(metaKey);
+ template.x = 0;
+ template.y = 0;
+ template.width = 100;
+ template.height = 50;
+ template.isTemplate = true;
+ template.templates = new List<string>([Templates.TitleBar(metaKey)]);//`{props.DataDoc.${metaKey}_text}`)]);
+ Doc.AddDocToList(collection, "data", template);
+ this.delete();
+ }
+
+ return res;
+ }}
OnFillDown={(value: string) => {
Doc.GetProto(this.props.document)[key] = value;
let doc = Docs.FreeformDocument([], { title: "", x: 0, y: 0, width: 100, height: 25, templates: new List<string>([Templates.Title.Layout]) });
@@ -269,14 +294,14 @@ class TreeView extends React.Component<TreeViewProps> {
if (!this._collapsed) {
if (!this.props.document.embed) {
contentElement = <ul key={this._chosenKey + "more"}>
- {TreeView.GetChildElements(doc instanceof Doc ? [doc] : DocListCast(docList), this.props.treeViewId, this._chosenKey, addDoc, remDoc, this.move,
+ {TreeView.GetChildElements(doc instanceof Doc ? [doc] : DocListCast(docList), this.props.treeViewId, this.props.document, this.props.dataDoc, this._chosenKey, addDoc, remDoc, this.move,
this.props.dropAction, this.props.addDocTab, this.props.ScreenToLocalTransform, this.props.outerXf, this.props.active, this.props.panelWidth)}
</ul >;
} else {
contentElement = <div ref={this._dref} style={{ display: "inline-block", height: this.props.panelHeight() }} key={this.props.document[Id]}>
<CollectionSchemaPreview
Document={this.props.document}
- DataDocument={this.props.document}
+ DataDocument={this.props.dataDoc}
width={docWidth}
height={this.props.panelHeight}
getTransform={this.docTransform}
@@ -307,6 +332,8 @@ class TreeView extends React.Component<TreeViewProps> {
public static GetChildElements(
docs: Doc[],
treeViewId: string,
+ containingCollection: Doc,
+ dataDoc: Doc,
key: string,
add: (doc: Doc, relativeTo?: Doc, before?: boolean) => boolean,
remove: ((doc: Doc) => boolean),
@@ -338,6 +365,8 @@ class TreeView extends React.Component<TreeViewProps> {
};
return <TreeView
document={child}
+ dataDoc={dataDoc}
+ containingCollection={containingCollection}
treeViewId={treeViewId}
key={child[Id]}
indentDocument={indent}
@@ -419,7 +448,7 @@ export class CollectionTreeView extends CollectionSubView(Document) {
</div>
<ul className="no-indent">
{
- TreeView.GetChildElements(this.childDocs, this.props.Document[Id], this.props.fieldKey, addDoc, this.remove,
+ TreeView.GetChildElements(this.childDocs, this.props.Document[Id], this.props.Document, this.props.DataDoc, this.props.fieldKey, addDoc, this.remove,
moveDoc, dropAction, this.props.addDocTab, this.props.ScreenToLocalTransform, this.outerXf, this.props.active, this.props.PanelWidth)
}
</ul>
diff --git a/src/client/views/collections/CollectionView.tsx b/src/client/views/collections/CollectionView.tsx
index f254e6005..89e5ad74c 100644
--- a/src/client/views/collections/CollectionView.tsx
+++ b/src/client/views/collections/CollectionView.tsx
@@ -59,33 +59,6 @@ export class CollectionView extends React.Component<FieldViewProps> {
subItems.push({ description: "Stacking", event: undoBatch(() => this.props.Document.viewType = CollectionViewType.Stacking), icon: "th-list" });
ContextMenu.Instance.addItem({ description: "View Modes...", subitems: subItems });
ContextMenu.Instance.addItem({
- description: "Add Description Template", event: undoBatch(() => {
- let collection = this.props.Document;
- Doc.GetProto(collection).description = "my first templated box";
- let template = Doc.MakeAlias(collection);
- template.layout = FormattedTextBox.LayoutString("description");
- template.isTemplate = true;
- template.x = 0;
- template.y = 0;
- template.width = 100;
- template.height = 25;
- Doc.AddDocToList(this.props.Document, "data", template);
- }), icon: "project-diagram"
- });
- ContextMenu.Instance.addItem({
- description: "Add Summary Template", event: undoBatch(() => {
- Doc.GetProto(this.props.Document).summary = "my first templated box";
- let template = Doc.MakeAlias(this.props.Document);
- template.layout = FormattedTextBox.LayoutString("summary");
- template.isTemplate = true;
- template.x = 0;
- template.y = 0;
- template.width = 100;
- template.height = 25;
- Doc.AddDocToList(this.props.Document, "data", template);
- }), icon: "project-diagram"
- });
- ContextMenu.Instance.addItem({
description: "Apply Template", event: undoBatch(() => {
let otherdoc = Docs.TextDocument({ width: 100, height: 50, title: "applied template" });
Doc.GetProto(otherdoc).description = "THIS DESCRIPTION IS REALLY IMPORTANT!";
diff --git a/src/client/views/nodes/KeyValuePair.tsx b/src/client/views/nodes/KeyValuePair.tsx
index 420a1ad94..d3bd9c875 100644
--- a/src/client/views/nodes/KeyValuePair.tsx
+++ b/src/client/views/nodes/KeyValuePair.tsx
@@ -28,6 +28,7 @@ export class KeyValuePair extends React.Component<KeyValuePairProps> {
render() {
let props: FieldViewProps = {
Document: this.props.doc,
+ DataDoc: this.props.doc,
ContainingCollectionView: undefined,
fieldKey: this.props.keyName,
isSelected: returnFalse,