mirror of
https://github.com/BookStackApp/BookStack.git
synced 2025-08-07 23:03:00 +03:00
Lexical: Added about button/view
Re-used existing route and moved tinymce help to its own different route. Added test to cover. Added new external-content block to support in editor UI.
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
function register(editor) {
|
||||
const aboutDialog = {
|
||||
title: 'About the WYSIWYG Editor',
|
||||
url: window.baseUrl('/help/wysiwyg'),
|
||||
url: window.baseUrl('/help/tinymce'),
|
||||
};
|
||||
|
||||
editor.ui.registry.addButton('about', {
|
||||
|
@@ -11,8 +11,9 @@ import {
|
||||
} from "lexical";
|
||||
import redoIcon from "@icons/editor/redo.svg";
|
||||
import sourceIcon from "@icons/editor/source-view.svg";
|
||||
import {getEditorContentAsHtml} from "../../../utils/actions";
|
||||
import fullscreenIcon from "@icons/editor/fullscreen.svg";
|
||||
import aboutIcon from "@icons/editor/about.svg";
|
||||
import {getEditorContentAsHtml} from "../../../utils/actions";
|
||||
|
||||
export const undo: EditorButtonDefinition = {
|
||||
label: 'Undo',
|
||||
@@ -80,4 +81,16 @@ export const fullscreen: EditorButtonDefinition = {
|
||||
isActive(selection, context: EditorUiContext) {
|
||||
return context.containerDOM.classList.contains('fullscreen');
|
||||
}
|
||||
};
|
||||
|
||||
export const about: EditorButtonDefinition = {
|
||||
label: 'About the editor',
|
||||
icon: aboutIcon,
|
||||
async action(context: EditorUiContext, button: EditorButton) {
|
||||
const modal = context.manager.createModal('about');
|
||||
modal.show({});
|
||||
},
|
||||
isActive(selection, context: EditorUiContext) {
|
||||
return false;
|
||||
}
|
||||
};
|
@@ -1,6 +1,7 @@
|
||||
import {EditorFormDefinition} from "../../framework/forms";
|
||||
import {EditorUiContext} from "../../framework/core";
|
||||
import {EditorUiContext, EditorUiElement} from "../../framework/core";
|
||||
import {setEditorContentFromHtml} from "../../../utils/actions";
|
||||
import {ExternalContent} from "../../framework/blocks/external-content";
|
||||
|
||||
export const source: EditorFormDefinition = {
|
||||
submitText: 'Save',
|
||||
@@ -15,4 +16,18 @@ export const source: EditorFormDefinition = {
|
||||
type: 'textarea',
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
export const about: EditorFormDefinition = {
|
||||
submitText: 'Close',
|
||||
async action() {
|
||||
return true;
|
||||
},
|
||||
fields: [
|
||||
{
|
||||
build(): EditorUiElement {
|
||||
return new ExternalContent('/help/wysiwyg');
|
||||
}
|
||||
}
|
||||
],
|
||||
};
|
@@ -1,6 +1,6 @@
|
||||
import {EditorFormModalDefinition} from "../framework/modals";
|
||||
import {details, image, link, media} from "./forms/objects";
|
||||
import {source} from "./forms/controls";
|
||||
import {about, source} from "./forms/controls";
|
||||
import {cellProperties, rowProperties, tableProperties} from "./forms/tables";
|
||||
|
||||
export const modals: Record<string, EditorFormModalDefinition> = {
|
||||
@@ -35,5 +35,9 @@ export const modals: Record<string, EditorFormModalDefinition> = {
|
||||
details: {
|
||||
title: 'Edit collapsible block',
|
||||
form: details,
|
||||
},
|
||||
about: {
|
||||
title: 'About the WYSIWYG Editor',
|
||||
form: about,
|
||||
}
|
||||
};
|
@@ -1,12 +1,12 @@
|
||||
import {EditorButton} from "./framework/buttons";
|
||||
import {EditorContainerUiElement, EditorSimpleClassContainer, EditorUiContext, EditorUiElement} from "./framework/core";
|
||||
import {EditorFormatMenu} from "./framework/blocks/format-menu";
|
||||
import {FormatPreviewButton} from "./framework/blocks/format-preview-button";
|
||||
import {EditorDropdownButton} from "./framework/blocks/dropdown-button";
|
||||
import {EditorColorPicker} from "./framework/blocks/color-picker";
|
||||
import {EditorTableCreator} from "./framework/blocks/table-creator";
|
||||
import {EditorColorButton} from "./framework/blocks/color-button";
|
||||
import {EditorOverflowContainer} from "./framework/blocks/overflow-container";
|
||||
import {EditorButton} from "../framework/buttons";
|
||||
import {EditorContainerUiElement, EditorSimpleClassContainer, EditorUiContext, EditorUiElement} from "../framework/core";
|
||||
import {EditorFormatMenu} from "../framework/blocks/format-menu";
|
||||
import {FormatPreviewButton} from "../framework/blocks/format-preview-button";
|
||||
import {EditorDropdownButton} from "../framework/blocks/dropdown-button";
|
||||
import {EditorColorPicker} from "../framework/blocks/color-picker";
|
||||
import {EditorTableCreator} from "../framework/blocks/table-creator";
|
||||
import {EditorColorButton} from "../framework/blocks/color-button";
|
||||
import {EditorOverflowContainer} from "../framework/blocks/overflow-container";
|
||||
import {
|
||||
cellProperties, clearTableFormatting,
|
||||
copyColumn,
|
||||
@@ -29,8 +29,8 @@ import {
|
||||
rowProperties,
|
||||
splitCell,
|
||||
table, tableProperties
|
||||
} from "./defaults/buttons/tables";
|
||||
import {fullscreen, redo, source, undo} from "./defaults/buttons/controls";
|
||||
} from "./buttons/tables";
|
||||
import {about, fullscreen, redo, source, undo} from "./buttons/controls";
|
||||
import {
|
||||
blockquote, dangerCallout,
|
||||
h2,
|
||||
@@ -41,7 +41,7 @@ import {
|
||||
paragraph,
|
||||
successCallout,
|
||||
warningCallout
|
||||
} from "./defaults/buttons/block-formats";
|
||||
} from "./buttons/block-formats";
|
||||
import {
|
||||
bold, clearFormating, code,
|
||||
highlightColor,
|
||||
@@ -50,7 +50,7 @@ import {
|
||||
superscript,
|
||||
textColor,
|
||||
underline
|
||||
} from "./defaults/buttons/inline-formats";
|
||||
} from "./buttons/inline-formats";
|
||||
import {
|
||||
alignCenter,
|
||||
alignJustify,
|
||||
@@ -58,14 +58,14 @@ import {
|
||||
alignRight,
|
||||
directionLTR,
|
||||
directionRTL
|
||||
} from "./defaults/buttons/alignments";
|
||||
} from "./buttons/alignments";
|
||||
import {
|
||||
bulletList,
|
||||
indentDecrease,
|
||||
indentIncrease,
|
||||
numberList,
|
||||
taskList
|
||||
} from "./defaults/buttons/lists";
|
||||
} from "./buttons/lists";
|
||||
import {
|
||||
codeBlock,
|
||||
details, detailsEditLabel, detailsToggle, detailsUnwrap,
|
||||
@@ -75,10 +75,10 @@ import {
|
||||
image,
|
||||
link, media,
|
||||
unlink
|
||||
} from "./defaults/buttons/objects";
|
||||
import {el} from "../utils/dom";
|
||||
import {EditorButtonWithMenu} from "./framework/blocks/button-with-menu";
|
||||
import {EditorSeparator} from "./framework/blocks/separator";
|
||||
} from "./buttons/objects";
|
||||
import {el} from "../../utils/dom";
|
||||
import {EditorButtonWithMenu} from "../framework/blocks/button-with-menu";
|
||||
import {EditorSeparator} from "../framework/blocks/separator";
|
||||
|
||||
export function getMainEditorFullToolbar(context: EditorUiContext): EditorContainerUiElement {
|
||||
|
||||
@@ -201,6 +201,7 @@ export function getMainEditorFullToolbar(context: EditorUiContext): EditorContai
|
||||
// Meta elements
|
||||
new EditorOverflowContainer(3, [
|
||||
new EditorButton(source),
|
||||
new EditorButton(about),
|
||||
new EditorButton(fullscreen),
|
||||
|
||||
// Test
|
29
resources/js/wysiwyg/ui/framework/blocks/external-content.ts
Normal file
29
resources/js/wysiwyg/ui/framework/blocks/external-content.ts
Normal file
@@ -0,0 +1,29 @@
|
||||
import {EditorUiElement} from "../core";
|
||||
import {el} from "../../../utils/dom";
|
||||
|
||||
export class ExternalContent extends EditorUiElement {
|
||||
|
||||
/**
|
||||
* The URL for HTML to be loaded from.
|
||||
*/
|
||||
protected url: string = '';
|
||||
|
||||
constructor(url: string) {
|
||||
super();
|
||||
this.url = url;
|
||||
}
|
||||
|
||||
buildDOM(): HTMLElement {
|
||||
const wrapper = el('div', {
|
||||
class: 'editor-external-content',
|
||||
});
|
||||
|
||||
window.$http.get(this.url).then(resp => {
|
||||
if (typeof resp.data === 'string') {
|
||||
wrapper.innerHTML = resp.data;
|
||||
}
|
||||
});
|
||||
|
||||
return wrapper;
|
||||
}
|
||||
}
|
@@ -4,7 +4,7 @@ import {
|
||||
getImageToolbarContent,
|
||||
getLinkToolbarContent,
|
||||
getMainEditorFullToolbar, getTableToolbarContent
|
||||
} from "./toolbars";
|
||||
} from "./defaults/toolbars";
|
||||
import {EditorUIManager} from "./framework/manager";
|
||||
import {EditorUiContext} from "./framework/core";
|
||||
import {CodeBlockDecorator} from "./decorators/code-block";
|
||||
|
Reference in New Issue
Block a user