aboutsummaryrefslogtreecommitdiff
path: root/src/client/documents/Documents.ts
diff options
context:
space:
mode:
authorbobzel <zzzman@gmail.com>2023-10-21 00:41:23 -0400
committerbobzel <zzzman@gmail.com>2023-10-21 00:41:23 -0400
commit661c1367d27fa23c3aeb62369e92cd36eb5edabd (patch)
tree6887e62707fae03149bc2bbaec38c30e2a944f82 /src/client/documents/Documents.ts
parent3ba733ffffb3036ea941bdbb5baf4c79bc7764af (diff)
change to doc decorations to be more "lightweight". made linkBox render links in a freeform view as a DocView. added an auto-reset view option for freeforms. fixed highlighting ink strokes. Made groups behave better for selecting things 'inside' the group bounding box that aren't in the group. Added vertically centered text option.
Diffstat (limited to 'src/client/documents/Documents.ts')
-rw-r--r--src/client/documents/Documents.ts35
1 files changed, 22 insertions, 13 deletions
diff --git a/src/client/documents/Documents.ts b/src/client/documents/Documents.ts
index 11b5f9f08..d61e4b3e9 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);
@@ -569,10 +570,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 +668,7 @@ 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_isSvg: true, layout_forceReflow: true },
},
],
[
@@ -770,7 +771,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 +819,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 +845,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);
}
}
@@ -1034,6 +1037,10 @@ export namespace Docs {
I[Initializing] = true;
I.type = DocumentType.INK;
I.layout = InkingStroke.LayoutString('stroke');
+ I.nativeDimModifiable = true;
+ I.nativeHeightUnfrozen = true;
+ I.layout_isSvg = true;
+ I.layout_forceReflow = true;
I.layout_fitWidth = false;
I.layout_hideDecorationTitle = true; // don't show title when selected
// I.layout_hideOpenButton = true; // don't show open full screen button when selected
@@ -1402,8 +1409,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
),