From e794b4b38e8ab2f4e7a79f223f9488cc845c724f Mon Sep 17 00:00:00 2001 From: Fawn Date: Mon, 22 Apr 2019 00:05:35 -0400 Subject: mutiple templates can be used --- src/client/views/DocumentDecorations.tsx | 14 +++++--- src/client/views/TemplateMenu.tsx | 18 +++++----- src/client/views/Templates.tsx | 61 ++++++++++++++++++-------------- src/client/views/nodes/DocumentView.tsx | 43 ++++++++++++++++------ 4 files changed, 85 insertions(+), 51 deletions(-) (limited to 'src/client/views') diff --git a/src/client/views/DocumentDecorations.tsx b/src/client/views/DocumentDecorations.tsx index 2a40d7347..2b22d9e19 100644 --- a/src/client/views/DocumentDecorations.tsx +++ b/src/client/views/DocumentDecorations.tsx @@ -17,7 +17,6 @@ import { LinkMenu } from "./nodes/LinkMenu"; import { TemplateMenu } from "./TemplateMenu"; import React = require("react"); import { Template, Templates } from "./Templates"; -import { TemplateField } from "../../fields/TemplateField"; const higflyout = require("@hig/flyout"); export const { anchorPoints } = higflyout; export const Flyout = higflyout.default; @@ -394,11 +393,16 @@ export class DocumentDecorations extends React.Component<{}, { value: string }> let templates: Map = new Map(); let doc = SelectionManager.SelectedDocuments()[0]; - Array.from(Object.values(Templates)).map(template => { - templates.set(template, doc.template.Name === template.Name); + Array.from(Object.values(Templates.TemplateList)).map(template => { + let docTemps = doc.templates; + let checked = false; + docTemps.forEach(temp => { + if (template.Name === temp.Name) { + checked = true; + } + }); + templates.set(template, checked); }); - // let docSrc = doc.props.Document.GetT(KeyStore.Prototype, TemplateField); - // console.log(docSrc); return (
{ @action toggleTemplate = (event: React.ChangeEvent, template: Template): void => { - this.props.doc.changeTemplate(template); - this._templates.forEach((checked, temp) => { - this._templates.set(temp, false); - }); - this._templates.set(template, true); - - // const docs = view.props.ContainingCollectionView; - // const docs = view.props.Document.GetList(view.props.fieldKey, []); - + if (event.target.checked) { + this.props.doc.addTemplate(template); + this._templates.set(template, true); + } else { + this.props.doc.removeTemplate(template); + this._templates.set(template, false); + } } @action @@ -67,7 +65,7 @@ export class TemplateMenu extends React.Component { return (
-
this.toggleTemplateActivity()}>T
+
this.toggleTemplateActivity()}>+
    {templateMenu}
diff --git a/src/client/views/Templates.tsx b/src/client/views/Templates.tsx index 3afdc711c..616bc2566 100644 --- a/src/client/views/Templates.tsx +++ b/src/client/views/Templates.tsx @@ -1,57 +1,66 @@ -import { observer } from "mobx-react"; -import { observable } from "mobx"; -import { action, computed } from "mobx"; import React = require("react"); -import { StringLiteral } from "babel-types"; + +export enum TemplatePosition { + InnerTop, + InnerBottom, + InnerRight, + InnerLeft, + OutterTop, + OutterBottom, + OutterRight, + OutterLeft, +} export class Template { - constructor(name: string, layout: string) { + constructor(name: string, position: TemplatePosition, layout: string) { this._name = name; + this._position = position; this._layout = layout; } private _name: string; + private _position: TemplatePosition; private _layout: string; get Name(): string { return this._name; } + get Position(): TemplatePosition { + return this._position; + } + get Layout(): string { return this._layout; } - } export namespace Templates { - export const BasicLayout = new Template("Basic layout", "{layout}"); + // export const BasicLayout = new Template("Basic layout", "{layout}"); - export const OuterCaption = new Template("Outer caption", + export const OuterCaption = new Template("Outer caption", TemplatePosition.OutterBottom, `
{layout}
` ); - export const InnerCaption = new Template("Inner caption", - `
-
- {layout} -
-
- -
-
` + export const InnerCaption = new Template("Inner caption", TemplatePosition.InnerBottom, + `
{layout}
` ); - export const Title = new Template("Title", - `
-
- {layout} -
-
- {Title} -
-
` + export const SideCaption = new Template("Side caption", TemplatePosition.OutterRight, + `
{layout}
` ); + export const Title = new Template("Title", TemplatePosition.InnerTop, + `
{layout}
{Title}
` + ); + + export const TemplateList: Template[] = [Title, OuterCaption, InnerCaption, SideCaption]; + + export function sortTemplates(a: Template, b: Template) { + if (a.Position < b.Position) { return -1; } + if (a.Position > b.Position) { return 1; } + return 0; + } } diff --git a/src/client/views/nodes/DocumentView.tsx b/src/client/views/nodes/DocumentView.tsx index 440269e36..e851bc9c5 100644 --- a/src/client/views/nodes/DocumentView.tsx +++ b/src/client/views/nodes/DocumentView.tsx @@ -99,13 +99,11 @@ export class DocumentView extends React.Component { @computed get layout(): string { return this.props.Document.GetText(KeyStore.Layout, "

Error loading layout data

"); } @computed get layoutKeys(): Key[] { return this.props.Document.GetData(KeyStore.LayoutKeys, ListField, new Array()); } @computed get layoutFields(): Key[] { return this.props.Document.GetData(KeyStore.LayoutFields, ListField, new Array()); } - @computed get template(): Template { - let field = this.props.Document.GetT(KeyStore.Template, TemplateField); - return !field || field === FieldWaiting ? Templates.BasicLayout : field.Data; - } - set template(template: Template) { - this.props.Document.SetData(KeyStore.Template, template, TemplateField); + @computed get templates(): Array