aboutsummaryrefslogtreecommitdiff
path: root/src/client/documents/Documents.ts
diff options
context:
space:
mode:
authorsrichman333 <sarah_n_richman@brown.edu>2023-11-06 18:36:58 -0500
committersrichman333 <sarah_n_richman@brown.edu>2023-11-06 18:36:58 -0500
commit1b412d402c77a2aae82cf86b1f6a23f8a4f82caf (patch)
tree7ebd22eeade12099d1d891d9f9b264f02956ad4a /src/client/documents/Documents.ts
parent7163062edec37cef9dd9ae6c123d987e83837463 (diff)
parenta4e3b645317c4589cf49f8007f6e6b57cf2c12d3 (diff)
Merge branch 'master' into dataViz-annotations
Diffstat (limited to 'src/client/documents/Documents.ts')
-rw-r--r--src/client/documents/Documents.ts57
1 files changed, 31 insertions, 26 deletions
diff --git a/src/client/documents/Documents.ts b/src/client/documents/Documents.ts
index 11b5f9f08..4086ede20 100644
--- a/src/client/documents/Documents.ts
+++ b/src/client/documents/Documents.ts
@@ -215,6 +215,7 @@ export class DocumentOptions {
_lockedTransform?: BOOLt = new BoolInfo('lock the freeform_panx,freeform_pany and scale parameters of the document so that it be panned/zoomed');
layout?: string | Doc; // default layout string or template document
+ layout_isSvg?: BOOLt = new BoolInfo('whether document decorations and other selections should handle pointerEvents for svg content or use doc bounding box');
layout_keyValue?: STRt = new StrInfo('layout definition for showing keyValue view of document', false);
layout_explainer?: STRt = new StrInfo('explanation displayed at top of a collection to describe its purpose', false);
layout_headerButton?: DOCt = new DocInfo('the (button) Doc to display at the top of a collection.', false);
@@ -443,6 +444,8 @@ export class DocumentOptions {
userBackgroundColor?: STRt = new StrInfo('background color associated with a Dash user (seen in header fields of shared documents)');
userColor?: STRt = new StrInfo('color associated with a Dash user (seen in header fields of shared documents)');
}
+
+export const DocOptions = new DocumentOptions();
export namespace Docs {
export let newAccount: boolean = false;
@@ -569,10 +572,10 @@ export namespace Docs {
childDontRegisterViews: true,
onClick: FollowLinkScript(),
layout_hideLinkAnchors: true,
- _height: 150,
+ _height: 1,
+ _width: 1,
link: '',
link_description: '',
- layout_showCaption: 'link_description',
backgroundColor: 'lightblue', // lightblue is default color for linking dot and link documents text comment area
_dropPropertiesToRemove: new List(['onClick']),
},
@@ -667,7 +670,15 @@ export namespace Docs {
{
// NOTE: this is unused!! ink fields are filled in directly within the InkDocument() method
layout: { view: InkingStroke, dataField: 'stroke' },
- options: { systemIcon: 'BsFillPencilFill' },
+ options: {
+ systemIcon: 'BsFillPencilFill', //
+ nativeDimModifiable: true,
+ nativeHeightUnfrozen: true,
+ layout_hideDecorationTitle: true, // don't show title when selected
+ fitWidth: false,
+ layout_isSvg: true,
+ layout_forceReflow: true,
+ },
},
],
[
@@ -770,7 +781,7 @@ export namespace Docs {
const existing = actualProtos[id] as Doc;
const type = id.replace(suffix, '') as DocumentType;
// get or create prototype of the specified type...
- const target = existing || buildPrototype(type, id);
+ const target = buildPrototype(type, id, existing);
// ...and set it if not undefined (can be undefined only if TemplateMap does not contain
// an entry dedicated to the given DocumentType)
target && PrototypeMap.set(type, target);
@@ -818,7 +829,7 @@ export namespace Docs {
* @param options any value specified in the DocumentOptions object likewise
* becomes the default value for that key for all delegates
*/
- function buildPrototype(type: DocumentType, prototypeId: string): Opt<Doc> {
+ function buildPrototype(type: DocumentType, prototypeId: string, existing?: Doc): Opt<Doc> {
// load template from type
const template = TemplateMap.get(type);
if (!template) {
@@ -844,12 +855,14 @@ export namespace Docs {
layout: layout.view?.LayoutString(layout.dataField),
data: template.data,
};
- Object.entries(options).map(pair => {
- if (typeof pair[1] === 'string' && pair[1].startsWith('@')) {
- (options as any)[pair[0]] = ComputedField.MakeFunction(pair[1].substring(1));
- }
- });
- return Doc.assign(new Doc(prototypeId, true), options as any, undefined, true);
+ Object.entries(options)
+ .filter(pair => typeof pair[1] === 'string' && pair[1].startsWith('@'))
+ .map(pair => {
+ if (!existing || ScriptCast(existing[pair[0]])?.script.originalScript !== pair[1].substring(1)) {
+ (options as any)[pair[0]] = ComputedField.MakeFunction(pair[1].substring(1));
+ }
+ });
+ return Doc.assign(existing ?? new Doc(prototypeId, true), OmitKeys(options, Object.keys(existing ?? {})).omit, undefined, true);
}
}
@@ -1030,12 +1043,8 @@ export namespace Docs {
}
export function InkDocument(color: string, strokeWidth: number, stroke_bezier: string, fillColor: string, arrowStart: string, arrowEnd: string, dash: string, points: PointData[], isInkMask: boolean, options: DocumentOptions = {}) {
- const I = new Doc();
- I[Initializing] = true;
- I.type = DocumentType.INK;
- I.layout = InkingStroke.LayoutString('stroke');
- I.layout_fitWidth = false;
- I.layout_hideDecorationTitle = true; // don't show title when selected
+ const ink = InstanceFromProto(Prototypes.get(DocumentType.INK), '', { title: 'ink', ...options });
+ const I = Doc.GetProto(ink);
// I.layout_hideOpenButton = true; // don't show open full screen button when selected
I.color = color;
I.fillColor = fillColor;
@@ -1047,12 +1056,6 @@ export namespace Docs {
I.stroke_dash = dash;
I.stroke_isInkMask = isInkMask;
I.text_align = 'center';
- I.title = 'ink';
- I.x = options.x as number;
- I.y = options.y as number;
- I._width = options._width as number;
- I._height = options._height as number;
- I.author = Doc.CurrentUserEmail;
I.rotation = 0;
I.defaultDoubleClick = 'click';
I.author_date = new DateField();
@@ -1060,7 +1063,7 @@ export namespace Docs {
//I['acl-Override'] = SharingPermissions.Unset;
I[Initializing] = false;
- return InstanceFromProto(I, '', options);
+ return ink;
}
export function PdfDocument(url: string, options: DocumentOptions = {}, overwriteDoc?: Doc) {
@@ -1402,8 +1405,10 @@ export namespace DocUtils {
link_relationship: linkSettings.link_relationship,
link_description: linkSettings.link_description,
link_autoMoveAnchors: true,
- _layout_showCaption: 'link_description',
- _layout_showTitle: 'link_relationship',
+ _layout_showCaption: '', // removed since they conflict with showing a link with a LinkBox (ie, line, not comparison box)
+ _layout_showTitle: '',
+ // _layout_showCaption: 'link_description',
+ // _layout_showTitle: 'link_relationship',
},
id
),