aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/nodes/button/FontIconBox.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/views/nodes/button/FontIconBox.tsx')
-rw-r--r--src/client/views/nodes/button/FontIconBox.tsx137
1 files changed, 116 insertions, 21 deletions
diff --git a/src/client/views/nodes/button/FontIconBox.tsx b/src/client/views/nodes/button/FontIconBox.tsx
index aa3a1ada4..46d92cd6e 100644
--- a/src/client/views/nodes/button/FontIconBox.tsx
+++ b/src/client/views/nodes/button/FontIconBox.tsx
@@ -3,9 +3,11 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { Tooltip } from '@material-ui/core';
import { action, computed, observable } from 'mobx';
import { observer } from 'mobx-react';
+import { StringifyOptions } from 'querystring';
import * as React from 'react';
import { ColorState, SketchPicker } from 'react-color';
import { Doc, StrListCast } from '../../../../fields/Doc';
+import { InkTool } from '../../../../fields/InkField';
import { createSchema, makeInterface } from '../../../../fields/Schema';
import { ScriptField } from '../../../../fields/ScriptField';
import { BoolCast, Cast, NumCast, StrCast } from '../../../../fields/Types';
@@ -17,9 +19,11 @@ import { UndoManager } from '../../../util/UndoManager';
import { CollectionViewType } from '../../collections/CollectionView';
import { ContextMenu } from '../../ContextMenu';
import { DocComponent } from '../../DocComponent';
+import { EditableView } from '../../EditableView';
import { Colors } from '../../global/globalEnums';
import { StyleProp } from '../../StyleProvider';
import { FieldView, FieldViewProps } from '.././FieldView';
+import { RichTextMenu } from '../formattedText/RichTextMenu';
import './FontIconBox.scss';
const FontIconSchema = createSchema({
icon: "string",
@@ -34,7 +38,8 @@ export enum ButtonType {
ToggleButton = "tglBtn",
ColorButton = "colorBtn",
ToolButton = "toolBtn",
- NumberButton = "numBtn"
+ NumberButton = "numBtn",
+ EditableText = "editableTxt"
}
export enum NumButtonType {
@@ -94,10 +99,15 @@ export class FontIconBox extends DocComponent<ButtonProps, FontIconDocument>(Fon
@computed get numberButton() {
const numType: string = StrCast(this.rootDoc.numButtonType);
- return (
- <div className={`menuButton ${this.type}`}
- >
+ const dropdown = numType ?
+ <div className="menuButton-dropdownBox"
+ style={{ left: 0 }}>
+ {/* DROPDOWN BOX CONTENTS */}
+ </div> : null;
+ return (
+ <div className={`menuButton ${this.type} ${numType}`}>
+ {this.rootDoc.dropDownOpen ? dropdown : null}
</div>
);
}
@@ -130,7 +140,7 @@ export class FontIconBox extends DocComponent<ButtonProps, FontIconDocument>(Fon
}
/**
- * Dropdown button
+ * Dropdown list
*/
@computed get dropdownListButton() {
const active: string = StrCast(this.rootDoc.dropDownOpen);
@@ -221,7 +231,7 @@ export class FontIconBox extends DocComponent<ButtonProps, FontIconDocument>(Fon
}
/**
- * Colour button
+ * Color button
*/
@computed get colorButton() {
const active: string = StrCast(this.rootDoc.dropDownOpen);
@@ -229,10 +239,18 @@ export class FontIconBox extends DocComponent<ButtonProps, FontIconDocument>(Fon
const backgroundColor = this.props.styleProvider?.(this.rootDoc, this.props, StyleProp.BackgroundColor);
const numSelected = SelectionManager.Views().length;
const selectedDoc = numSelected > 0 ? SelectionManager.Views()[0].Document : undefined;
+
+ const script: string = StrCast(this.rootDoc.script);
+ const scriptCheck: string = script + "(undefined, true)";
+ const boolResult = ScriptField.MakeScript(scriptCheck)?.script.run().result;
+ console.log("[boolResul]: ", boolResult);
+
+ const colorOptions: string[] = ['#D0021B', '#F5A623', '#F8E71C', '#8B572A', '#7ED321', '#417505',
+ '#9013FE', '#4A90E2', '#50E3C2', '#B8E986', '#000000', '#4A4A4A', '#9B9B9B',
+ '#FFFFFF', '#f1efeb', 'transparent'];
+
const colorBox = (func: (color: ColorState) => void) => <SketchPicker onChange={func} color={selectedDoc ? selectedDoc._backgroundColor : backgroundColor}
- presetColors={['#D0021B', '#F5A623', '#F8E71C', '#8B572A', '#7ED321', '#417505',
- '#9013FE', '#4A90E2', '#50E3C2', '#B8E986', '#000000', '#4A4A4A', '#9B9B9B',
- '#FFFFFF', '#f1efeb', 'transparent']} />;
+ presetColors={colorOptions} />;
const label = !this.label || !Doc.UserDoc()._showLabel ? (null) :
<div className="fontIconBox-label" style={{ color: color, backgroundColor: backgroundColor, position: "absolute" }}>
{this.label}
@@ -242,10 +260,9 @@ export class FontIconBox extends DocComponent<ButtonProps, FontIconDocument>(Fon
style={{ borderBottomRightRadius: this.dropdown ? 0 : undefined }}>
<FontAwesomeIcon icon={'caret-down'} color={color} size="sm" />
</div>;
- const script: string = StrCast(this.rootDoc.script);
const click = (value: ColorState) => {
const hex: string = value.hex;
- const s = ScriptField.MakeScript(script + '("' + hex + '")');
+ const s = ScriptField.MakeScript(script + '("' + hex + '", false)');
if (s) {
s.script.run().result;
}
@@ -277,20 +294,47 @@ export class FontIconBox extends DocComponent<ButtonProps, FontIconDocument>(Fon
}
@computed get toggleButton() {
- const script: string = StrCast(this.rootDoc.script) + "(true)";
- const boolResult = ScriptField.MakeScript(script)?.script.run().result;
+ // Determine the type of toggle button
+ const switchToggle: boolean = BoolCast(this.rootDoc.switchToggle);
+
+ // Script for running the toggle
+ const script: string = StrCast(this.rootDoc.script) + "()";
+ // Script for checking the outcome of the toggle
+ const checkScript: string = StrCast(this.rootDoc.script) + "(true)";
+ // Function to run the script
+ const runScript = () => ScriptField.MakeScript(script)?.script.run();
+ const checkResult = ScriptField.MakeScript(checkScript)?.script.run().result;
+
+ // Colors
const color = this.props.styleProvider?.(this.rootDoc, this.props, StyleProp.Color);
const backgroundColor = this.props.styleProvider?.(this.rootDoc, this.props, StyleProp.BackgroundColor);
+
+ // Button label
const label = !this.label || !Doc.UserDoc()._showLabel ? (null) :
<div className="fontIconBox-label" style={{ color: color, backgroundColor: backgroundColor, position: "absolute" }}>
{this.label}
</div>;
+
return (
- <div className={`menuButton ${this.type}`} style={{ opacity: 1, backgroundColor: boolResult ? Colors.MEDIUM_BLUE : "transparent" }}>
- <FontAwesomeIcon className={`fontIconBox-icon-${this.type}`} icon={this.icon} color={boolResult ? Colors.LIGHT_GRAY : Colors.LIGHT_GRAY} />
- {label}
- </div>
+ switchToggle ?
+ <div>
+ <label className="switch">
+ <input type="checkbox"
+ checked={checkResult}
+ onChange={runScript}
+ />
+ <span className="slider round"></span>
+ </label>
+ </div>
+ :
+ <div className={`menuButton ${this.type}`}
+ style={{ opacity: 1, backgroundColor: checkResult ? Colors.MEDIUM_BLUE : "transparent" }}
+ onClick={this.layoutDoc.ignoreClick ? runScript : undefined}
+ >
+ <FontAwesomeIcon className={`fontIconBox-icon-${this.type}`} icon={this.icon} color={checkResult ? Colors.LIGHT_GRAY : Colors.LIGHT_GRAY} />
+ {label}
+ </div>
);
}
@@ -314,6 +358,19 @@ export class FontIconBox extends DocComponent<ButtonProps, FontIconDocument>(Fon
);
}
+ @computed get editableText() {
+ const setValue = (value: string, shiftDown?: boolean): boolean => {
+ console.log("setValue");
+ return true;
+ };
+
+ return <div className={`menuButton ${this.type}`}>
+ TEST
+ <EditableView GetValue={() => ""} SetValue={setValue} contents="...">
+ </EditableView>
+ </div>;
+ }
+
render() {
const color = this.props.styleProvider?.(this.rootDoc, this.props, StyleProp.Color);
@@ -342,6 +399,8 @@ export class FontIconBox extends DocComponent<ButtonProps, FontIconDocument>(Fon
let button = this.defaultButton;
switch (this.type) {
+ case ButtonType.EditableText:
+ button = this.editableText;
case ButtonType.NumberButton:
button = this.numberButton;
break;
@@ -420,7 +479,6 @@ Scripting.addGlobal(function changeBackgroundColor(color?: string, checkResult?:
Scripting.addGlobal(function toggleOverlay(checkResult?: boolean) {
const selected = SelectionManager.Views().length ? SelectionManager.Views()[0] : undefined;
if (checkResult && selected) {
- console.log("z: ", NumCast(selected.Document.z) === 1);
return NumCast(selected.Document.z) === 1;
}
selected ? selected.props.CollectionFreeFormDocumentView?.().float() : console.log("[FontIconBox.tsx] toggleOverlay failed");
@@ -429,17 +487,43 @@ Scripting.addGlobal(function toggleOverlay(checkResult?: boolean) {
// toggle: Set overlay status of selected document
Scripting.addGlobal(function changeFont(font: string) {
SelectionManager.Views().map(dv => dv.props.Document._fontFamily = font);
- console.log(font);
+ console.log("[changeFont]: ", font);
+ console.log(RichTextMenu.Instance.getActiveMarksOnSelection());
Doc.UserDoc()._fontFamily = font;
return Doc.UserDoc()._fontFamily;
});
// toggle: Set overlay status of selected document
-Scripting.addGlobal(function changeFontColor(color: string) {
- console.log(color);
+Scripting.addGlobal(function changeFontColor(color?: string, checkResult?: boolean) {
+ const selected = SelectionManager.Views().length ? SelectionManager.Views()[0] : undefined;
+ if (checkResult) {
+ if (selected) {
+ console.log("[Font color] (selected): " + StrCast(selected.Document._fontColor));
+ return selected.Document._fontColor;
+ } else {
+ console.log("[Font color] (global): " + StrCast(Doc.UserDoc()._fontColor));
+ return Doc.UserDoc()._fontColor;
+ }
+ }
+ Doc.UserDoc()._fontColor = color;
+});
+
+// toggle: Set overlay status of selected document
+Scripting.addGlobal(function changeFontHighlight(color?: string, checkResult?: boolean) {
+ const selected = SelectionManager.Views().length ? SelectionManager.Views()[0] : undefined;
+ if (checkResult) {
+ if (selected) {
+ console.log("[Font color] (selected): " + StrCast(selected.Document._fontColor));
+ return selected.Document._fontColor;
+ } else {
+ console.log("[Font color] (global): " + StrCast(Doc.UserDoc()._fontColor));
+ return Doc.UserDoc()._fontColor;
+ }
+ }
Doc.UserDoc()._fontColor = color;
});
+
// toggle: Set overlay status of selected document
Scripting.addGlobal(function changeFontSize(size: string) {
console.log(size);
@@ -471,4 +555,15 @@ Scripting.addGlobal(function toggleItalic(checkResult?: boolean) {
SelectionManager.Views().map(dv => dv.props.Document.italic = !dv.props.Document.italic);
Doc.UserDoc().bold = !Doc.UserDoc().italic;
return Doc.UserDoc().italic;
+});
+
+Scripting.addGlobal(function setActiveInkTool(checkResult?: boolean, tool?: InkTool) {
+ if (checkResult) {
+ return Doc.UserDoc().activeInkTool === tool;
+ }
+ if (tool) {
+ Doc.UserDoc().activeInkTool = tool;
+ } else {
+ Doc.UserDoc().activeInkTool = InkTool.None;
+ }
}); \ No newline at end of file