aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/global/globalScripts.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/views/global/globalScripts.ts')
-rw-r--r--src/client/views/global/globalScripts.ts55
1 files changed, 55 insertions, 0 deletions
diff --git a/src/client/views/global/globalScripts.ts b/src/client/views/global/globalScripts.ts
index 79873ed8f..b455f76e4 100644
--- a/src/client/views/global/globalScripts.ts
+++ b/src/client/views/global/globalScripts.ts
@@ -68,6 +68,49 @@ ScriptingGlobals.add(function setView(view: string, shiftKey: boolean, checkResu
// toggle: Set overlay status of selected document
// eslint-disable-next-line prefer-arrow-callback
+ScriptingGlobals.add(function setBorderColor(color?: string, checkResult?: boolean) {
+ const selectedViews = DocumentView.Selected();
+ const defaultBorder = () => StrCast(Doc.UserDoc().borderColor, 'transparent');
+ const setDefaultBorder = (c: string) => { Doc.UserDoc().borderColor = c; }; // prettier-ignore
+ const fieldKey = 'borderColor';
+ if (selectedViews.length) {
+ if (checkResult) {
+ const selView = selectedViews.lastElement();
+ const layoutFrameNumber = Cast(selView.containerViewPath?.().lastElement()?.Document?._currentFrame, 'number'); // frame number that container is at which determines layout frame values
+ const contentFrameNumber = Cast(selView.Document?._currentFrame, 'number', layoutFrameNumber ?? null); // frame number that content is at which determines what content is displayed
+ return CollectionFreeFormDocumentView.getStringValues(selView?.Document, contentFrameNumber)[fieldKey] || defaultBorder();
+ }
+ setDefaultBorder(color ?? 'transparent');
+ selectedViews.forEach(dv => {
+ const layoutFrameNumber = Cast(dv.containerViewPath?.().lastElement()?.Document?._currentFrame, 'number'); // frame number that container is at which determines layout frame values
+ const contentFrameNumber = Cast(dv.Document?._currentFrame, 'number', layoutFrameNumber ?? null); // frame number that content is at which determines what content is displayed
+ if (contentFrameNumber !== undefined) {
+ const obj: { [key: string]: Opt<string> } = {};
+ obj[fieldKey] = color;
+ CollectionFreeFormDocumentView.setStringValues(contentFrameNumber, dv.Document, obj);
+ } else {
+ const dataKey = Doc.LayoutFieldKey(dv.Document);
+ const alternate = (dv.layoutDoc[dataKey + '_usePath'] ? '_' + dv.layoutDoc[dataKey + '_usePath'] : '').replace(':hover', '');
+ dv.layoutDoc[fieldKey + alternate] = undefined;
+ dv.dataDoc[fieldKey + alternate] = color;
+ }
+ });
+ } else {
+ const selected = DocumentView.SelectedDocs().length ? DocumentView.SelectedDocs() : LinkManager.Instance.currentLink ? [LinkManager.Instance.currentLink] : [];
+ if (checkResult) {
+ return (selected.lastElement() ?? Doc.UserDoc()).borderColor ?? defaultBorder();
+ }
+ if (!selected.length) setDefaultBorder(color ?? 'transparent');
+ else
+ selected.forEach(doc => {
+ doc[DocData].borderColor = color;
+ });
+ }
+ return '';
+});
+
+// toggle: Set overlay status of selected document
+// eslint-disable-next-line prefer-arrow-callback
ScriptingGlobals.add(function setBackgroundColor(color?: string, checkResult?: boolean) {
const selectedViews = DocumentView.Selected();
const selectedDoc = selectedViews.lastElement()?.Document;
@@ -408,6 +451,18 @@ ScriptingGlobals.add(function activeEraserTool() {
return StrCast(Doc.UserDoc().activeEraserTool, InkEraserTool.Stroke);
}, 'returns the current eraser tool');
+// eslint-disable-next-line prefer-arrow-callback
+ScriptingGlobals.add(function setBorderWidth(value: number, checkResult?: boolean) {
+ const selected = DocumentView.SelectedDocs().lastElement();
+ if (checkResult) return NumCast((selected ?? Doc.UserDoc()).borderWidth);
+ if (!selected) Doc.UserDoc().borderWidth = value;
+ else
+ DocumentView.SelectedDocs().map(doc => {
+ doc.borderWidth = value;
+ });
+ return undefined;
+}, 'sets the border width of the selected document');
+
// toggle: Set overlay status of selected document
// eslint-disable-next-line prefer-arrow-callback
ScriptingGlobals.add(function setInkProperty(option: InkProperty, value: string | number, checkResult?: boolean) {