aboutsummaryrefslogtreecommitdiff
path: root/src/client/documents/Documents.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/documents/Documents.ts')
-rw-r--r--src/client/documents/Documents.ts471
1 files changed, 238 insertions, 233 deletions
diff --git a/src/client/documents/Documents.ts b/src/client/documents/Documents.ts
index c1abd6e71..a91d5806c 100644
--- a/src/client/documents/Documents.ts
+++ b/src/client/documents/Documents.ts
@@ -110,18 +110,28 @@ class DocInfo extends FInfo {
}
}
class DimInfo extends FInfo {
- fieldType? = 'DimUnit';
+ fieldType? = 'enumeration';
values? = [DimUnit.Pixel, DimUnit.Ratio];
- readOnly = true;
+ readOnly = false;
}
class PEInfo extends FInfo {
- fieldType? = 'pointerEvents';
+ fieldType? = 'enumeration';
values? = ['all', 'none'];
- readOnly = true;
+ readOnly = false;
}
class DAInfo extends FInfo {
- fieldType? = 'dropActionType';
+ fieldType? = 'enumeration';
values? = ['embed', 'copy', 'move', 'same', 'proto', 'none'];
+ readOnly = false;
+}
+class CTypeInfo extends FInfo {
+ fieldType? = 'enumeration';
+ values? = Array.from(Object.keys(CollectionViewType));
+ readOnly = false;
+}
+class DTypeInfo extends FInfo {
+ fieldType? = 'enumeration';
+ values? = Array.from(Object.keys(DocumentType));
readOnly = true;
}
class DateInfo extends FInfo {
@@ -134,272 +144,267 @@ type STRt = StrInfo | string;
type DOCt = DocInfo | Doc;
type DIMt = DimInfo | typeof DimUnit.Pixel | typeof DimUnit.Ratio;
type PEVt = PEInfo | 'none' | 'all';
+type COLLt = CTypeInfo | CollectionViewType;
type DROPt = DAInfo | dropActionType;
type DATEt = DateInfo | number;
+type DTYPEt = DTypeInfo | string;
export class DocumentOptions {
+ // coordinate and dimensions depending on view
x?: NUMt = new NumInfo('x coordinate of document in a freeform view');
y?: NUMt = new NumInfo('y coordinage of document in a freeform view');
z?: NUMt = new NumInfo('whether document is in overlay (1) or not (0)', false, [1, 0]);
- isSystem?: BOOLt = new BoolInfo('is this a system created/owned doc', true);
- type?: STRt = new StrInfo('type of document', true, Array.from(Object.keys(DocumentType)));
- title?: string;
- author_date?: DATEt = new DateInfo('date the document was created', true);
- _dropAction?: DROPt = new DAInfo("what should happen to this document when it's dropped somewhere else");
- allowOverlayDrop?: BOOLt = new BoolInfo('can documents be dropped onto this document without using dragging title bar or holding down embed key (ctrl)?', true);
- childDropAction?: DROPt = new DAInfo("what should happen to the source document when it's dropped onto a child of a collection ");
- targetDropAction?: DROPt = new DAInfo('what should happen to the source document when ??? ');
- userColor?: STRt = new StrInfo('color associated with a Dash user (seen in header fields of shared documents)');
- color?: STRt = new StrInfo('foreground color data doc');
- backgroundColor?: STRt = new StrInfo('background color for data doc');
- _layout_autoHeight?: BOOLt = new BoolInfo('whether document automatically resizes vertically to display contents');
- _headerHeight?: NUMt = new NumInfo('height of document header used for displaying title');
- _headerFontSize?: NUMt = new NumInfo('font size of header of custom notes');
- _headerPointerEvents?: PEVt = new PEInfo('types of events the header of a custom text document can consume');
- _freeform_panX?: NUMt = new NumInfo('horizontal pan location of a freeform view');
- _freeform_panY?: NUMt = new NumInfo('vertical pan location of a freeform view');
+ _dimMagnitude?: NUMt = new NumInfo("magnitude of collectionMulti{row,col} element's width or height");
+ _dimUnit?: DIMt = new DimInfo("units of collectionMulti{row,col} element's width or height - 'px' or '*' for pixels or relative units");
+ lat?: NUMt = new NumInfo('latitude coordinate for map views');
+ lng?: NUMt = new NumInfo('longitude coordinate for map views');
+ _timecodeToShow?: NUMt = new NumInfo('the time that a document should be displayed (e.g., when an annotation shows up as a video plays)');
+ _timecodeToHide?: NUMt = new NumInfo('the time that a document should be hidden');
_width?: NUMt = new NumInfo('displayed width of a document');
_height?: NUMt = new NumInfo('displayed height of document');
data_nativeWidth?: NUMt = new NumInfo('native width of data field contents (e.g., the pixel width of an image)');
data_nativeHeight?: NUMt = new NumInfo('native height of data field contents (e.g., the pixel height of an image)');
+ linearBtnWidth?: NUMt = new NumInfo('unexpanded width of a linear menu button (button "width" changes when it expands)');
_nativeWidth?: NUMt = new NumInfo('native width of document contents (e.g., the pixel width of an image)');
_nativeHeight?: NUMt = new NumInfo('native height of document contents (e.g., the pixel height of an image)');
_nativeDimModifiable?: BOOLt = new BoolInfo('native dimensions can be modified using document decoration reizers');
_nativeHeightUnfrozen?: BOOLt = new BoolInfo('native height can be changed independent of width by dragging decoration resizers');
- _dimMagnitude?: NUMt = new NumInfo("magnitude of collectionMulti{row,col} element's width or height");
- _dimUnit?: DIMt = new DimInfo("units of collectionMulti{row,col} element's width or height - 'px' or '*' for pixels or relative units");
+
+ 'acl-Public'?: string; // public permissions
+ '_acl-Public'?: string; // public permissions
+ type?: DTYPEt = new DTypeInfo('type of document', true);
+ _type_collection?: COLLt = new CTypeInfo('how collection is rendered'); // sub type of a collection
+ title?: STRt = new StrInfo('title of document');
+ caption?: RichTextField;
+ author?: string; // STRt = new StrInfo('creator of document'); // bcz: don't change this. Otherwise, the userDoc's field Infos will have a FieldInfo assigned to its author field which will render it unreadable
+ author_date?: DATEt = new DateInfo('date the document was created', true);
+ annotationOn?: DOCt = new DocInfo('document annotated by this document');
+ color?: STRt = new StrInfo('foreground color data doc');
+ hidden?: BOOLt = new BoolInfo('whether the document is not rendered by its collection');
+ backgroundColor?: STRt = new StrInfo('background color for data doc');
+ opacity?: NUMt = new NumInfo('document opacity');
+ viewTransitionTime?: NUMt = new NumInfo('transition duration for view parameters');
+ dontRegisterView?: BOOLt = new BoolInfo('are views of this document registered so that they can be found when following links, etc');
+ dontUndo?: BOOLt = new BoolInfo('whether button clicks should be undoable (true for Undo/Redo/and sidebar) AND whether modifications to document are undoable (true for linearview menu buttons to prevent open/close from entering undo stack)');
+ _headerHeight?: NUMt = new NumInfo('height of document header used for displaying title');
+ _headerFontSize?: NUMt = new NumInfo('font size of header of custom notes');
+ _headerPointerEvents?: PEVt = new PEInfo('types of events the header of a custom text document can consume');
+ _lockedPosition?: BOOLt = new BoolInfo("lock the x,y coordinates of the document so that it can't be dragged");
+ _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_keyValue?: STRt = new StrInfo('layout definition for showing keyValue view of document');
+ layout_explainer?: STRt = new StrInfo('explanation displayed at top of a collection to describe its purpose');
+ layout_headerButton?: DOCt = new DocInfo('the (button) Doc to display at the top of a collection.');
+ layout_disableBrushing?: BOOLt = new BoolInfo('whether to suppress border highlighting');
+ layout_unrendered?: BOOLt = new BoolInfo('denotes an annotation that is not rendered with a DocumentView (e.g, rtf/pdf text selections and links to scroll locations in web/pdf)');
+ layout_hideOpenButton?: BOOLt = new BoolInfo('whether to hide the open full screen button when selected');
+ layout_hideDocumentButtonBar?: BOOLt = new BoolInfo('whether to hide the document decorations lower button bar when selected');
+ layout_hideLinkAnchors?: BOOLt = new BoolInfo('suppresses link anchor dots from being displayed');
+ layout_hideAllLinks?: BOOLt = new BoolInfo('whether all individual blue anchor dots should be hidden');
+ layout_hideResizeHandles?: BOOLt = new BoolInfo('whether to hide the resize handles when selected');
+ layout_hideLinkButton?: BOOLt = new BoolInfo('whether the blue link counter button should be hidden');
+ layout_hideDecorationTitle?: BOOLt = new BoolInfo('whether to suppress the document decortations title when selected');
+ layout_borderRounding?: string;
+ layout_boxShadow?: string; // box-shadow css string OR "standard" to use dash standard box shadow
+ layout_maxAutoHeight?: NUMt = new NumInfo('maximum height for newly created (eg, from pasting) text documents');
+ _layout_autoHeight?: BOOLt = new BoolInfo('whether document automatically resizes vertically to display contents');
+ _layout_curPage?: NUMt = new NumInfo('current page of a PDF or other? paginated document');
+ _layout_currentTimecode?: NUMt = new NumInfo('the current timecode of a time-based document (e.g., current time of a video) value is in seconds');
+ _layout_hideContextMenu?: BOOLt = new BoolInfo('whether the context menu can be shown');
_layout_fitWidth?: BOOLt = new BoolInfo('whether document should scale its contents to fit its rendered width or not (e.g., for PDFviews)');
- _layoutFitContentsToBox?: BOOLt = new BoolInfo('whether a freeformview should zoom/scale to create a shrinkwrapped view of its content');
- _contentBounds?: List<number>; // the (forced) bounds of the document to display. format is: [left, top, right, bottom]
- _lockedPosition?: boolean; // lock the x,y coordinates of the document so that it can't be dragged
- _lockedTransform?: boolean; // lock the freeform_panx,freeform_pany and scale parameters of the document so that it be panned/zoomed
- _followLinkToggle?: boolean; // whether document, when clicked, toggles display of its link target
+ _layout_fitContentsToBox?: BOOLt = new BoolInfo('whether a freeformview should zoom/scale to create a shrinkwrapped view of its content');
+ _layout_fieldKey?: STRt = new StrInfo('the field key containing the current layout definition');
+ _layout_enableAltContentUI?: BOOLt = new BoolInfo('whether to show alternate content button');
_layout_showTitle?: string; // field name to display in header (:hover is an optional suffix)
- _layout_altContentUI?: boolean; // whether to show alternate content button
- _isLightbox?: boolean; // whether a collection acts as a lightbox by opening lightbox links by hiding all other documents in collection besides link target
+ _layout_showSidebar?: BOOLt = new BoolInfo('whether an annotationsidebar should be displayed for text docuemnts');
_layout_showCaption?: string; // which field to display in the caption area. leave empty to have no caption
- _layoutScrollTop?: number; // scroll location for pdfs
- _noAutoscroll?: boolean; // whether collections autoscroll when this item is dragged
- _chromeHidden?: boolean; // whether the editing chrome for a document is hidden
- _searchDoc?: boolean; // is this a search document (used to change UI for search results in schema view)
- _forceActive?: boolean; // flag to handle pointer events when not selected (or otherwise active)
- enableDragWhenActive?: boolean; // allow dragging even if document contentts are active (e.g., tree, groups)
- _stayInCollection?: boolean; // whether the document should remain in its collection when someone tries to drag and drop it elsewhere
- _raiseWhenDragged?: boolean; // whether a document is brought to front when dragged.
- _hideContextMenu?: boolean; // whether the context menu can be shown
- _type_collection?: string; // sub type of a collection
- type_collection?: string; // sub type of a collection
- _gridGap?: number; // gap between items in masonry view
- freeform?: string; // placeholder just so that the key value pane has a divider to render for freeform view data
- _freeform_scale?: number; // how much a freeform view has been scaled (zoomed)
- _overflow?: string; // set overflow behavior
- _xMargin?: number; // gap between left edge of document and start of masonry/stacking layouts
- _yMargin?: number; // gap between top edge of dcoument and start of masonry/stacking layouts
- _xPadding?: number;
- _yPadding?: number;
- _carousel_index?: number; // which item index the carousel viewer is showing
- _layout_showSidebar?: boolean; //whether an annotationsidebar should be displayed for text docuemnts
+
+ _chromeHidden?: BOOLt = new BoolInfo('whether the editing chrome for a document is hidden');
+ _gridGap?: NUMt = new NumInfo('gap between items in masonry view');
+ _xMargin?: NUMt = new NumInfo('gap between left edge of document and start of masonry/stacking layouts');
+ _yMargin?: NUMt = new NumInfo('gap between top edge of dcoument and start of masonry/stacking layouts');
+ _xPadding?: NUMt = new NumInfo('x padding');
+ _yPadding?: NUMt = new NumInfo('y padding');
_singleLine?: boolean; // whether label box is restricted to one line of text
_createDocOnCR?: boolean; // whether carriage returns and tabs create new text documents
- _minFontSize?: number; // minimum font size for labelBoxes
- _maxFontSize?: number; // maximum font size for labelBoxes
- _columnWidth?: number;
- _columnsHideIfEmpty?: boolean; // whether stacking view column headings should be hidden
- _text_fontSize?: string;
- _text_fontFamily?: string;
- _text_fontWeight?: string;
- _pivotField?: string; // field key used to determine headings for sections in stacking, masonry, pivot views
- _layout_curPage?: number; // current page of a PDF or other? paginated document
- _layout_currentTimecode?: number; // the current timecode of a time-based document (e.g., current time of a video) value is in seconds
- _currentFrame?: number; // the current frame of a frame-based collection (e.g., progressive slide)
- _timecodeToShow?: number; // the time that a document should be displayed (e.g., when an annotation shows up as a video plays)
- _timecodeToHide?: number; // the time that a document should be hidden
- _timelineLabel?: boolean; // whether the document exists on a timeline
+ _columnWidth?: NUMt = new NumInfo('width of table column');
+ _columnsHideIfEmpty?: BOOLt = new BoolInfo('whether stacking view column headings should be hidden');
_caption_xMargin?: NUMt = new NumInfo('x margin of caption inside of a carousel collection', true);
_caption_yMargin?: NUMt = new NumInfo('y margin of caption inside of a carousel collection', true);
icon_nativeWidth?: NUMt = new NumInfo('native width of icon view', true);
icon_nativeHeight?: NUMt = new NumInfo('native height of icon view', true);
- dragFactory_count?: NUMt = new NumInfo('number of items created from a drag button (used for setting title with incrementing index)', true);
- openFactoryLocation?: string; // an OpenWhere value to place the factory created document
- openFactoryAsDelegate?: boolean; //
- lat?: number;
- lng?: number;
- infoWindowOpen?: boolean;
- author?: string;
- _layout_fieldKey?: string;
- fieldValues?: List<any>; // possible field values used by fieldInfos
- fieldType?: string; // type of afield used by fieldInfos
- layout_unrendered?: boolean; // denotes an annotation that is not rendered with a DocumentView (e.g, rtf/pdf text selections and links to scroll locations in web/pdf)
- 'acl-Public'?: string; // public permissions
- '_acl-Public'?: string; // public permissions
- version?: string; // version identifier for a document
- label?: string;
- hidden?: boolean;
- _hidden?: boolean;
- pointerEvents?: string; // pointer events that the documentview should have
- mediaState?: string; // status of audio/video media document: "pendingRecording", "recording", "paused", "playing"
- recording?: boolean; // whether WebCam is recording or not
- autoPlayAnchors?: boolean; // whether to play audio/video when an anchor is clicked in a stackedTimeline.
- dontPlayLinkOnSelect?: boolean; // whether an audio/video should start playing when a link is followed to it.
- linkSource?: Doc; // the source document for a collection of backlinks
+ _text_fontSize?: string;
+ _text_fontFamily?: string;
+ _text_fontWeight?: string;
+ _pivotField?: string; // field key used to determine headings for sections in stacking, masonry, pivot views
+
+ infoWindowOpen?: BOOLt = new BoolInfo('whether info window corresponding to pin is open (on MapDocuments)');
+ _carousel_index?: NUMt = new NumInfo('which item index the carousel viewer is showing');
+ _label_minFontSize?: NUMt = new NumInfo('minimum font size for labelBoxes');
+ _label_maxFontSize?: NUMt = new NumInfo('maximum font size for labelBoxes');
+ stroke_width?: NUMt = new NumInfo('width of an ink stroke');
+ icon_label?: STRt = new StrInfo('label to use for a fontIcon doc (otherwise, the title is used)');
+ mediaState?: STRt = new StrInfo('status of audio/video media document: "pendingRecording", "recording", "paused", "playing"');
+ recording?: BOOLt = new BoolInfo('whether WebCam is recording or not');
+ autoPlayAnchors?: BOOLt = new BoolInfo('whether to play audio/video when an anchor is clicked in a stackedTimeline.');
+ dontPlayLinkOnSelect?: BOOLt = new BoolInfo('whether an audio/video should start playing when a link is followed to it.');
updateContentsScript?: ScriptField; // reactive script invoked when viewing a document that can update contents of a collection (or do anything)
toolTip?: string; // tooltip to display on hover
toolType?: string; // type of pen tool
- expertMode?: boolean; // something available only in expert (not novice) mode
+ expertMode?: BOOLt = new BoolInfo('something available only in expert (not novice) mode');
+
+ contentPointerEvents?: string; // pointer events allowed for content of a document view. eg. set to "none" in menuSidebar for sharedDocs so that you can select a document, but not interact with its contents
contextMenuFilters?: List<ScriptField>;
contextMenuScripts?: List<ScriptField>;
contextMenuLabels?: List<string>;
contextMenuIcons?: List<string>;
- defaultDoubleClick?: 'ignore' | 'default'; // ignore double clicks, or deafult (undefined) means open document full screen
- waitForDoubleClickToClick?: 'always' | 'never' | 'default'; // whether a click function wait for double click to expire. 'default' undefined = wait only if there's a click handler, "never" = never wait, "always" = alway wait
- dontUndo?: boolean; // whether button clicks should be undoable ( true for Undo/Redo/and sidebar) AND whether modifications to document are undoable (true for linearview menu buttons to prevent open/close from entering undo stack)
- layout?: string | Doc; // default layout string for a document
- contentPointerEvents?: string; // pointer events allowed for content of a document view. eg. set to "none" in menuSidebar for sharedDocs so that you can select a document, but not interact with its contents
- childLimitHeight?: number; // whether to limit the height of collection children. 0 - means height can be no bigger than width
+ childFilters_boolean?: string;
+ childFilters?: List<string>;
+ childLimitHeight?: NUMt = new NumInfo('whether to limit the height of collection children. 0 - means height can be no bigger than width');
childLayoutTemplate?: Doc; // template for collection to use to render its children (see PresBox layout in tree view)
childLayoutString?: string; // template string for collection to use to render its children
- childDocumentsActive?: boolean; // whether child documents are active when parent is document active
- childDontRegisterViews?: boolean;
- childHideLinkButton?: boolean; // hide link buttons on all children
+ childDocumentsActive?: BOOLt = new BoolInfo('whether child documents are active when parent is document active');
+ childDontRegisterViews?: BOOLt = new BoolInfo('whether child document views should be registered so that they can be found when following links, etc');
+ childHideLinkButton?: BOOLt = new BoolInfo('hide link buttons on all children');
childContextMenuFilters?: List<ScriptField>;
childContextMenuScripts?: List<ScriptField>;
childContextMenuLabels?: List<string>;
childContextMenuIcons?: List<string>;
- followLinkZoom?: boolean; // whether to zoom to the target of a link
- layout_hideLinkButton?: boolean; // whether the blue link counter button should be hidden
- disableDocBrushing?: boolean; // whether to suppress border highlighting
- layout_hideDecorationTitle?: boolean;
- hideOpenButton?: boolean;
- layout_hideResizeHandles?: boolean;
- hideDocumentButtonBar?: boolean;
- hideAllLinks?: boolean; // whether all individual blue anchor dots should be hidden
- isTemplateForField?: string; // the field key for which the containing document is a rendering template
- isTemplateDoc?: boolean;
targetScriptKey?: string; // where to write a template script (used by collections with click templates which need to target onClick, onDoubleClick, etc)
- templates?: List<string>;
- hero?: ImageField; // primary image that best represents a compound document (e.g., for a buxton device document that has multiple images)
- caption?: RichTextField;
- opacity?: number;
- defaultBackgroundColor?: string;
- _layout_autoMoveAnchors?: boolean; // whether link endpoint should move around the edges of a document to make shortest path to other link endpoint
- layout_hideLinkAnchors?: boolean; // suppresses link anchor dots from being displayed
- isFolder?: boolean;
- lastFrame?: number; // the last frame of a frame-based collection (e.g., progressive slide)
- activeFrame?: number; // the active frame of a document in a frame base collection
- appearFrame?: number; // the frame in which the document appears
- viewTransitionTime?: number; // transition duration for view parameters
- presPanX?: number; // panX saved as a view spec
- presPanY?: number; // panY saved as a view spec
- presViewScale?: number; // viewScale saved as a view Spec
- presTransition?: number; //the time taken for the transition TO a document
- presDuration?: number; //the duration of the slide in presentation view
- presZoomText?: boolean; // whether text anchors should shown in a larger box when following links to make them stand out
- borderRounding?: string;
- boxShadow?: string; // box-shadow css string OR "standard" to use dash standard box shadow
+
+ lastFrame?: NUMt = new NumInfo('the last frame of a frame-based collection (e.g., progressive slide)');
+ activeFrame?: NUMt = new NumInfo('the active frame of a document in a frame base collection');
+ appearFrame?: NUMt = new NumInfo('the frame in which the document appears');
+ _currentFrame?: NUMt = new NumInfo('the current frame of a frame-based collection (e.g., progressive slide)');
+
+ isSystem?: BOOLt = new BoolInfo('is this a system created/owned doc', true);
+ isBaseProto?: BOOLt = new BoolInfo('is doc a base level prototype for data documents as opposed to data documents which are prototypes for layout documents. base protos are not cloned during a deep');
+ isTemplateForField?: string; // the field key for which the containing document is a rendering template
+ isTemplateDoc?: BOOLt = new BoolInfo('is the document a template for creating other documents');
+ isGroup?: BOOLt = new BoolInfo('should collection use a grouping UI behavior');
+ isFolder?: BOOLt = new BoolInfo('is document a tree view folder');
+ _isTimelineLabel?: BOOLt = new BoolInfo('is document a timeline label');
+ _isLightbox?: BOOLt = new BoolInfo('whether a collection acts as a lightbox by opening lightbox links by hiding all other documents in collection besides link target');
+
+ presPanX?: NUMt = new NumInfo('panX saved as a view spec');
+ presPanY?: NUMt = new NumInfo('panY saved as a view spec');
+ presViewScale?: NUMt = new NumInfo('viewScale saved as a view Spec');
+ presTransition?: NUMt = new NumInfo('the time taken for the transition TO a document');
+ presDuration?: NUMt = new NumInfo('the duration of the slide in presentation view');
+ presZoomText?: BOOLt = new BoolInfo('whether text anchors should shown in a larger box when following links to make them stand out');
+
data?: any;
- isBaseProto?: boolean; // this Doc is base level prototype for data documents as opposed to data documents which are prototypes for layout documents. base protos are not cloned during a deep
- dontRegisterView?: boolean;
- lookupField?: ScriptField; // script that returns the value of a field. This script is passed the rootDoc, layoutDoc, field, and container of the document. see PresBox.
+ data_useCors?: BOOLt = new BoolInfo('whether CORS protocol should be used for web page');
columnHeaders?: List<SchemaHeaderField>; // headers for stacking views
schemaHeaders?: List<SchemaHeaderField>; // headers for schema view
- dockingConfig?: string;
- annotationOn?: Doc;
- followLinkToggle?: boolean;
- isGroup?: boolean; // whether a collection should use a grouping UI behavior
- _removeDropProperties?: List<string>; // list of properties that should be removed from a document when it is dropped. e.g., a creator button may be forceActive to allow it be dragged, but the forceActive property can be removed from the dropped document
+ dockingConfig?: STRt = new StrInfo('configuration of golden layout windows (applies only if doc is rendered as a CollectionDockingView)');
+ icon?: string; // icon used by fonticonbox to render button
noteType?: string;
- // BACKGROUND GRID
+
+ // freeform properties
_freeform_backgroundGrid?: boolean;
+ _freeform_scale?: NUMt = new NumInfo('how much a freeform view has been scaled (zoomed)');
+ _freeform_panX?: NUMt = new NumInfo('horizontal pan location of a freeform view');
+ _freeform_panY?: NUMt = new NumInfo('vertical pan location of a freeform view');
+ _freeform_noAutoPan?: BOOLt = new BoolInfo('disables autopanning when this item is dragged');
+ _freeform_noZoom?: BOOLt = new BoolInfo('disables zooming');
//BUTTONS
buttonText?: string;
- iconShape?: string; // shapes of the fonticon border
btnType?: string;
btnList?: List<string>;
docColorBtn?: string;
userColorBtn?: string;
- canClick?: string;
script?: ScriptField;
- numBtnMax?: number;
- numBtnMin?: number;
+ numBtnMax?: NUMt = new NumInfo('maximum value of a number button');
+ numBtnMin?: NUMt = new NumInfo('minimum value of a number button');
switchToggle?: boolean;
badgeValue?: ScriptField;
//LINEAR VIEW
- linearViewIsExpanded?: boolean; // is linear view expanded
- linearViewExpandable?: boolean; // can linear view be expanded
- linearViewToggleButton?: string; // button to open close linear view group
- linearViewSubMenu?: boolean;
- linearBtnWidth?: number;
- flexGap?: number; // Linear view flex gap
+ linearView_IsExpanded?: BOOLt = new BoolInfo('is linear view expanded');
+ linearView_Expandable?: BOOLt = new BoolInfo('can linear view be expanded');
+ linearView_SubMenu?: BOOLt = new BoolInfo('is doc a sub menu of more linear views');
+ flexGap?: NUMt = new NumInfo('Linear view flex gap');
flexDirection?: 'unset' | 'row' | 'column' | 'row-reverse' | 'column-reverse';
- layout_linkView?: Doc; // view template for a link document
- layout_keyValue?: string; // view tempalte for key value docs
link_description?: string; // added for links
link_relationship?: string; // type of relatinoship a link represents
- layout_linkDisplay?: boolean; // whether a link line should be dipslayed between the two link anchors
- layout_linkDisplayArrow?: boolean; // whether to display link's directional arrowhead
+ link_displayLine?: BOOLt = new BoolInfo('whether a link line should be dipslayed between the two link anchors');
+ link_displayArrow?: BOOLt = new BoolInfo("whether to display link's directional arrowhead");
link_anchor_1?: Doc;
link_anchor_2?: Doc;
- link_anchor_1_useLinkSmallAnchor?: boolean; // whether link_anchor_1 of a link should use a miniature anchor dot (as when the anchor is a text selection)
- link_anchor_2_useLinkSmallAnchor?: boolean; // whether link_anchor_1 of a link should use a miniature anchor dot (as when the anchor is a text selection)
- ignoreClick?: boolean;
+ link_autoMoveAnchors?: BOOLt = new BoolInfo('whether link endpoint should move around the edges of a document to make shortest path to other link endpoint');
+ link_anchor_1_useSmallAnchor?: BOOLt = new BoolInfo('whether link_anchor_1 of a link should use a miniature anchor dot (as when the anchor is a text selection)');
+ link_anchor_2_useSmallAnchor?: BOOLt = new BoolInfo('whether link_anchor_1 of a link should use a miniature anchor dot (as when the anchor is a text selection)');
+ link_relationshipList?: List<string>; // for storing different link relationships (when set by user in the link editor)
+ link_relationshipSizes?: List<number>; //stores number of links contained in each relationship
+ link_colorList?: List<string>; // colors of links corresponding to specific link relationships
+ followLinkZoom?: BOOLt = new BoolInfo('whether to zoom to the target of a link');
+ followLinkToggle?: BOOLt = new BoolInfo('whether target of link should be toggled on and off when following a link to it');
+ followLinkLocation?: STRt = new StrInfo('where to open link target when following link');
+ followLinkAnimEffect?: STRt = new StrInfo('animation effect triggered on target of link');
+ followLinkAnimDirection?: STRt = new StrInfo('direction modifier for animation effect');
+
+ ignoreClick?: BOOLt = new BoolInfo('whether clicks on document should be ignored');
onClick?: ScriptField;
onDoubleClick?: ScriptField;
onChildClick?: ScriptField; // script given to children of a collection to execute when they are clicked
onChildDoubleClick?: ScriptField; // script given to children of a collection to execute when they are double clicked
+ defaultDoubleClick?: 'ignore' | 'default'; // ignore double clicks, or deafult (undefined) means open document full screen
+ waitForDoubleClickToClick?: 'always' | 'never' | 'default'; // whether a click function wait for double click to expire. 'default' undefined = wait only if there's a click handler, "never" = never wait, "always" = alway wait
onPointerDown?: ScriptField;
onPointerUp?: ScriptField;
+ dragFactory_count?: NUMt = new NumInfo('number of items created from a drag button (used for setting title with incrementing index)', true);
+ openFactoryLocation?: string; // an OpenWhere value to place the factory created document
+ openFactoryAsDelegate?: BOOLt = new BoolInfo('create a delegate of the factory');
+ _forceActive?: BOOLt = new BoolInfo('flag to handle pointer events when not selected (or otherwise active)');
+ enableDragWhenActive?: BOOLt = new BoolInfo('allow dragging even if document contentts are active (e.g., tree, groups)');
+ _stayInCollection?: BOOLt = new BoolInfo('whether the document should remain in its collection when someone tries to drag and drop it elsewhere');
+ _raiseWhenDragged?: BOOLt = new BoolInfo('whether a document is brought to front when dragged.');
+ allowOverlayDrop?: BOOLt = new BoolInfo('can documents be dropped onto this document without using dragging title bar or holding down embed key (ctrl)?', true);
+ childDropAction?: DROPt = new DAInfo("what should happen to the source document when it's dropped onto a child of a collection ");
+ targetDropAction?: DROPt = new DAInfo('what should happen to the source document when ??? ');
+ _dropAction?: DROPt = new DAInfo("what should happen to this document when it's dropped somewhere else");
+ _removeDropProperties?: List<string>; // list of properties that should be removed from a document when it is dropped. e.g., a creator button may be forceActive to allow it be dragged, but the forceActive property can be removed from the dropped document
+ cloneFieldFilter?: List<string>; // fields not to copy when the document is clonedclipboard?: Doc;
dropConverter?: ScriptField; // script to run when documents are dropped on this Document.
dragFactory?: Doc; // document to create when dragging with a suitable onDragStart script
clickFactory?: Doc; // document to create when clicking on a button with a suitable onClick script
onDragStart?: ScriptField; //script to execute at start of drag operation -- e.g., when a "creator" button is dragged this script generates a different document to drop
- cloneFieldFilter?: List<string>; // fields not to copy when the document is clonedclipboard?: Doc;
- filterBoolean?: string;
- data_useCors?: boolean;
- icon?: string; // icon used by fonticonbox to render button
- target?: Doc; // available for use in scripts as the primary target document
- sourcePanel?: Doc; // panel to display in 'targetContainer' as the result of a button onClick script
- targetContainer?: Doc; // document whose proto will be set to 'panel' as the result of a onClick click script
- searchFileTypes?: List<string>; // file types allowed in a search query
- stroke_width?: number;
- freezeChildren?: string; // whether children are now allowed to be added and or removed from a collection
- treeViewHideTitle?: boolean; // whether to hide the top document title of a tree view
- treeViewHideUnrendered?: boolean; // tells tree view not to display documents that have an 'layout_unrendered' tag unless they also have a treeViewFieldKey tag (presBox)
- treeViewHideHeaderIfTemplate?: boolean; // whether to hide the header for a document in a tree view only if a childLayoutTemplate is provided (presBox)
- treeViewHideHeader?: boolean; // whether to hide the header for a document in a tree view
- treeViewHideHeaderFields?: boolean; // whether to hide the drop down options for tree view items.
+ target?: Doc; // available for use in scripts. used to provide a document parameter to the script (Note, this is a convenience entry since any field could be used for parameterizing a script)
+
+ treeViewHideTitle?: BOOLt = new BoolInfo('whether to hide the top document title of a tree view');
+ treeViewHideUnrendered?: BOOLt = new BoolInfo("tells tree view not to display documents that have an 'layout_unrendered' tag unless they also have a treeViewFieldKey tag (presBox)");
+ treeViewHideHeaderIfTemplate?: BOOLt = new BoolInfo('whether to hide the header for a document in a tree view only if a childLayoutTemplate is provided (presBox)');
+ treeViewHideHeader?: BOOLt = new BoolInfo('whether to hide the header for a document in a tree view');
+ treeViewHideHeaderFields?: BOOLt = new BoolInfo('whether to hide the drop down options for tree view items.');
treeViewChildDoubleClick?: ScriptField; //
- // Action Button
- buttonMenu?: boolean; // whether a action button should be displayed
- buttonMenuDoc?: Doc;
- explainer?: string;
-
- treeViewOpenIsTransient?: boolean; // ignores the treeViewOpen Doc flag, allowing a treeViewItem's expand/collapse state to be independent of other views of the same document in the same or any other tree view
- _treeViewOpen?: boolean; // whether this document is expanded in a tree view (note: need _ and regular versions since this can be specified for both proto and layout docs)
- treeViewOpen?: boolean; // whether this document is expanded in a tree view
+ treeViewOpenIsTransient?: BOOLt = new BoolInfo("ignores the treeViewOpen Doc flag, allowing a treeViewItem's expand/collapse state to be independent of other views of the same document in the same or any other tree view");
+ treeViewOpen?: BOOLt = new BoolInfo('whether this document is expanded in a tree view');
treeViewExpandedView?: string; // which field/thing is displayed when this item is opened in tree view
- treeViewExpandedViewLock?: boolean; // whether the expanded view can be changed
+ treeViewExpandedViewLock?: BOOLt = new BoolInfo('whether the expanded view can be changed');
treeViewChecked?: ScriptField; // script to call when a tree view checkbox is checked
- treeViewTruncateTitleWidth?: number;
- treeViewHasOverlay?: boolean; // whether the treeview has an overlay for freeform annotations
+ treeViewTruncateTitleWidth?: NUMt = new NumInfo('maximum width of a treew view title before truncation');
+ treeViewHasOverlay?: BOOLt = new BoolInfo('whether the treeview has an overlay for freeform annotations');
treeViewType?: string; // whether treeview is a Slide, file system, or (default) collection hierarchy
- sidebarColor?: string; // background color of text sidebar
- sidebarViewType?: string; // collection type of text sidebar
- docMaxAutoHeight?: number; // maximum height for newly created (eg, from pasting) text documents
+ treeViewFreezeChildren?: STRt = new StrInfo('set (add, remove, add|remove) to disable adding, removing or both from collection');
+
+ sidebar_color?: string; // background color of text sidebar
+ sidebar_collectionType?: string; // collection type of text sidebar
+
text?: string;
- textTransform?: string; // is linear view expanded
- letterSpacing?: string; // is linear view expanded
+ textTransform?: string;
+ letterSpacing?: string;
iconTemplate?: string; // name of icon template style
- selectedIndex?: number; // which item in a linear view has been selected using the "thumb doc" ui
+ selectedIndex?: NUMt = new NumInfo("which item in a linear view has been selected using the 'thumb doc' ui");
+
+ fieldValues?: List<any>; // possible values a field can have (used by FieldInfo's only)
+ fieldType?: string; // display type of a field, e.g. string, number, enumeration (used by FieldInfo's only)
+
clipboard?: Doc;
- searchQuery?: string; // for quersyBox
- useLinkSmallAnchor?: boolean; // whether links to this document should use a miniature linkAnchorBox
- border?: string; //for searchbox
hoverBackgroundColor?: string; // background color of a label when hovered
- link_relationshipList?: List<string>; // for storing different link relationships (when set by user in the link editor)
- link_relationshipSizes?: List<number>; //stores number of links contained in each relationship
- linkColorList?: List<string>; // colors of links corresponding to specific link relationships
+ userColor?: STRt = new StrInfo('color associated with a Dash user (seen in header fields of shared documents)');
}
export namespace Docs {
export let newAccount: boolean = false;
@@ -986,7 +991,7 @@ export namespace Docs {
I.layout = InkingStroke.LayoutString('stroke');
I.layout_fitWidth = true;
I.layout_hideDecorationTitle = true; // don't show title when selected
- // I.hideOpenButton = true; // don't show open full screen button when selected
+ // I.layout_hideOpenButton = true; // don't show open full screen button when selected
I.color = color;
I.fillColor = fillColor;
I.stroke = new InkField(points);
@@ -1088,7 +1093,12 @@ export namespace Docs {
}
export function PileDocument(documents: Array<Doc>, options: DocumentOptions, id?: string) {
- return InstanceFromProto(Prototypes.get(DocumentType.COL), new List(documents), { _overflow: 'visible', enableDragWhenActive: true, _forceActive: true, _noAutoscroll: true, ...options, _type_collection: CollectionViewType.Pile }, id);
+ return InstanceFromProto(
+ Prototypes.get(DocumentType.COL),
+ new List(documents),
+ { enableDragWhenActive: true, _forceActive: true, _freeform_noZoom: true, _freeform_noAutoPan: true, ...options, _type_collection: CollectionViewType.Pile },
+ id
+ );
}
export function LinearDocument(documents: Array<Doc>, options: DocumentOptions, id?: string) {
@@ -1177,12 +1187,7 @@ export namespace Docs {
}
export function DockDocument(documents: Array<Doc>, config: string, options: DocumentOptions, id?: string) {
- return InstanceFromProto(
- Prototypes.get(DocumentType.COL),
- new List(documents),
- { freezeChildren: 'remove|add', ...options, type_collection: CollectionViewType.Docking, _type_collection: CollectionViewType.Docking, dockingConfig: config },
- id
- );
+ return InstanceFromProto(Prototypes.get(DocumentType.COL), new List(documents), { treeViewFreezeChildren: 'remove|add', ...options, _type_collection: CollectionViewType.Docking, dockingConfig: config }, id);
}
export function DirectoryImportDocument(options: DocumentOptions = {}) {
@@ -1227,18 +1232,18 @@ export namespace Docs {
export namespace DocUtils {
/**
* @param docs
- * @param docFilters
- * @param docRangeFilters
+ * @param childFilters
+ * @param childFiltersByRanges
* @param parentCollection
- * Given a list of docs and docFilters, @returns the list of Docs that match those filters
+ * Given a list of docs and childFilters, @returns the list of Docs that match those filters
*/
- export function FilterDocs(childDocs: Doc[], docFilters: string[], docRangeFilters: string[], parentCollection?: Doc) {
- if (!docFilters?.length && !docRangeFilters?.length) {
+ export function FilterDocs(childDocs: Doc[], childFilters: string[], childFiltersByRanges: string[], parentCollection?: Doc) {
+ if (!childFilters?.length && !childFiltersByRanges?.length) {
return childDocs.filter(d => !d.cookies); // remove documents that need a cookie if there are no filters to provide one
}
const filterFacets: { [key: string]: { [value: string]: string } } = {}; // maps each filter key to an object with value=>modifier fields
- docFilters.forEach(filter => {
+ childFilters.forEach(filter => {
const fields = filter.split(':');
const key = fields[0];
const value = fields[1];
@@ -1249,7 +1254,7 @@ export namespace DocUtils {
filterFacets[key][value] = modifiers;
});
- const filteredDocs = docFilters.length
+ const filteredDocs = childFilters.length
? childDocs.filter(d => {
if (d.z) return true;
// if the document needs a cookie but no filter provides the cookie, then the document does not pass the filter
@@ -1293,7 +1298,7 @@ export namespace DocUtils {
return Field.toString(d[facetKey] as Field).includes(value);
});
// if we're ORing them together, the default return is false, and we return true for a doc if it satisfies any one set of criteria
- if (parentCollection?.filterBoolean === 'OR') {
+ if (parentCollection?.childFilters_boolean === 'OR') {
if (satisfiesUnsetsFacets && satisfiesExistsFacets && satisfiesCheckFacets && !failsNotEqualFacets && satisfiesMatchFacets) return true;
}
// if we're ANDing them together, the default return is true, and we return false for a doc if it doesn't satisfy any set of criteria
@@ -1301,14 +1306,14 @@ export namespace DocUtils {
if (!satisfiesUnsetsFacets || !satisfiesExistsFacets || !satisfiesCheckFacets || failsNotEqualFacets || (matches.length && !satisfiesMatchFacets)) return false;
}
}
- return (parentCollection?.currentFilter as Doc)?.filterBoolean === 'OR' ? false : true;
+ return (parentCollection?.currentFilter as Doc)?.childFilters_boolean === 'OR' ? false : true;
})
: childDocs;
const rangeFilteredDocs = filteredDocs.filter(d => {
- for (let i = 0; i < docRangeFilters.length; i += 3) {
- const key = docRangeFilters[i];
- const min = Number(docRangeFilters[i + 1]);
- const max = Number(docRangeFilters[i + 2]);
+ for (let i = 0; i < childFiltersByRanges.length; i += 3) {
+ const key = childFiltersByRanges[i];
+ const min = Number(childFiltersByRanges[i + 1]);
+ const max = Number(childFiltersByRanges[i + 2]);
const val = typeof d[key] === 'string' ? (Number(StrCast(d[key])).toString() === StrCast(d[key]) ? Number(StrCast(d[key])) : undefined) : Cast(d[key], 'number', null);
if (val === undefined) {
//console.log("Should 'undefined' pass range filter or not?")
@@ -1325,11 +1330,11 @@ export namespace DocUtils {
broadcastEvent && runInAction(() => (DocumentManager.Instance.RecordingEvent = DocumentManager.Instance.RecordingEvent + 1));
return DocUtils.ActiveRecordings.map(audio => {
const sourceDoc = getSourceDoc();
- return sourceDoc && DocUtils.MakeLink(sourceDoc, audio.getAnchor(true) || audio.props.Document, { layout_linkDisplay: false, link_relationship: 'recording annotation:linked recording', link_description: 'recording timeline' });
+ return sourceDoc && DocUtils.MakeLink(sourceDoc, audio.getAnchor(true) || audio.props.Document, { link_displayLine: false, link_relationship: 'recording annotation:linked recording', link_description: 'recording timeline' });
});
}
- export function MakeLink(source: Doc, target: Doc, linkSettings: { link_relationship?: string; link_description?: string; layout_linkDisplay?: boolean }, id?: string, showPopup?: number[]) {
+ export function MakeLink(source: Doc, target: Doc, linkSettings: { link_relationship?: string; link_description?: string; link_displayLine?: boolean }, id?: string, showPopup?: number[]) {
if (!linkSettings.link_relationship) linkSettings.link_relationship = target.type === DocumentType.RTF ? 'Commentary:Comments On' : 'link';
const sv = DocumentManager.Instance.getDocumentView(source);
if (target.doc === Doc.UserDoc()) return undefined;
@@ -1370,15 +1375,15 @@ export namespace DocUtils {
source,
target,
{
- title: ComputedField.MakeFunction('generateLinkTitle(self)') as any,
- link_anchor_1_useLinkSmallAnchor: source.useLinkSmallAnchor ? true : undefined,
- link_anchor_2_useLinkSmallAnchor: target.useLinkSmallAnchor ? true : undefined,
'acl-Public': SharingPermissions.Augment,
'_acl-Public': SharingPermissions.Augment,
- layout_linkDisplay: linkSettings.layout_linkDisplay,
+ title: ComputedField.MakeFunction('generateLinkTitle(self)') as any,
+ link_anchor_1_useSmallAnchor: source.useSmallAnchor ? true : undefined,
+ link_anchor_2_useSmallAnchor: target.useSmallAnchor ? true : undefined,
+ link_displayLine: linkSettings.link_displayLine,
link_relationship: linkSettings.link_relationship,
link_description: linkSettings.link_description,
- _layout_autoMoveAnchors: true,
+ link_autoMoveAnchors: true,
_layout_showCaption: 'link_description',
_layout_showTitle: 'link_relationship',
},
@@ -1706,14 +1711,14 @@ export namespace DocUtils {
if (context && !hasContextAnchor && (context.type === DocumentType.VID || context.type === DocumentType.WEB || context.type === DocumentType.PDF || context.type === DocumentType.IMG)) {
const pushpin = Docs.Create.FontIconDocument({
title: 'pushpin',
- label: '',
+ icon_label: '',
annotationOn: Cast(doc.annotationOn, Doc, null),
followLinkToggle: true,
icon: 'map-pin',
x: Cast(doc.x, 'number', null),
y: Cast(doc.y, 'number', null),
backgroundColor: '#ACCEF7',
- hideAllLinks: true,
+ layout_hideAllLinks: true,
_width: 15,
_height: 15,
_xPadding: 0,
@@ -1804,7 +1809,7 @@ export namespace DocUtils {
_xMargin: noMargins ? 0 : undefined,
_yMargin: noMargins ? 0 : undefined,
annotationOn,
- docMaxAutoHeight: maxHeight,
+ layout_maxAutoHeight: maxHeight,
backgroundColor,
_width: width || 200,
_height: 35,
@@ -1812,7 +1817,7 @@ export namespace DocUtils {
y: y,
_layout_fitWidth: true,
_layout_autoHeight: true,
- _layout_altContentUI: BoolCast(Doc.UserDoc().defaultToFlashcards),
+ _layout_enableAltContentUI: BoolCast(Doc.UserDoc().defaultToFlashcards),
title,
});
const template = Doc.UserDoc().defaultTextLayout;
@@ -1842,18 +1847,18 @@ export namespace DocUtils {
}
/**
- * uploadFilesToDocs will take in an array of Files, and creates documents for the
- * new files.
- *
+ * uploadFilesToDocs will take in an array of Files, and creates documents for the
+ * new files.
+ *
* @param files an array of files that will be uploaded
* @param options options to use while uploading
- * @returns
+ * @returns
*/
export async function uploadFilesToDocs(files: File[], options: DocumentOptions) {
const generatedDocuments: Doc[] = [];
- // These files do not have overwriteDocs, so we do not set the guid and let the client generate one.
- const fileNoGuidPairs: Networking.FileGuidPair[] = files.map(file => ({file}));
+ // These files do not have overwriteDocs, so we do not set the guid and let the client generate one.
+ const fileNoGuidPairs: Networking.FileGuidPair[] = files.map(file => ({ file }));
const upfiles = await Networking.UploadFilesToServer(fileNoGuidPairs);
for (const {
@@ -1867,8 +1872,8 @@ export namespace DocUtils {
export function uploadFileToDoc(file: File, options: DocumentOptions, overwriteDoc: Doc) {
const generatedDocuments: Doc[] = [];
- // Since this file has an overwriteDoc, we can set the client tracking guid to the overwriteDoc's guid.
- Networking.UploadFilesToServer([{file, guid: overwriteDoc[Id]}]).then(upfiles => {
+ // Since this file has an overwriteDoc, we can set the client tracking guid to the overwriteDoc's guid.
+ Networking.UploadFilesToServer([{ file, guid: overwriteDoc[Id] }]).then(upfiles => {
const {
source: { name, type },
result,