1
0
mirror of https://github.com/BookStackApp/BookStack.git synced 2025-07-28 17:02:04 +03:00

Input WYSIWYG: Added compontent and rough logic to book form

Just as a draft for prototyping and playing around to get things
started.
This commit is contained in:
Dan Brown
2023-12-16 14:48:35 +00:00
parent fc2e8ed315
commit 569542f0bb
7 changed files with 95 additions and 11 deletions

View File

@ -58,3 +58,4 @@ export {TriLayout} from './tri-layout';
export {UserSelect} from './user-select';
export {WebhookEvents} from './webhook-events';
export {WysiwygEditor} from './wysiwyg-editor';
export {WysiwygInput} from './wysiwyg-input';

View File

@ -1,4 +1,4 @@
import {build as buildEditorConfig} from '../wysiwyg/config';
import {buildForEditor as buildEditorConfig} from '../wysiwyg/config';
import {Component} from './component';
export class WysiwygEditor extends Component {
@ -6,17 +6,13 @@ export class WysiwygEditor extends Component {
setup() {
this.elem = this.$el;
this.pageId = this.$opts.pageId;
this.textDirection = this.$opts.textDirection;
this.isDarkMode = document.documentElement.classList.contains('dark-mode');
this.tinyMceConfig = buildEditorConfig({
language: this.$opts.language,
containerElement: this.elem,
darkMode: this.isDarkMode,
textDirection: this.textDirection,
darkMode: document.documentElement.classList.contains('dark-mode'),
textDirection: this.$opts.textDirection,
drawioUrl: this.getDrawIoUrl(),
pageId: Number(this.pageId),
pageId: Number(this.$opts.pageId),
translations: {
imageUploadErrorText: this.$opts.imageUploadErrorText,
serverUploadLimitText: this.$opts.serverUploadLimitText,

View File

@ -0,0 +1,26 @@
import {Component} from './component';
import {buildForInput} from '../wysiwyg/config';
export class WysiwygInput extends Component {
setup() {
this.elem = this.$el;
const config = buildForInput({
language: this.$opts.language,
containerElement: this.elem,
darkMode: document.documentElement.classList.contains('dark-mode'),
textDirection: this.textDirection,
translations: {
imageUploadErrorText: this.$opts.imageUploadErrorText,
serverUploadLimitText: this.$opts.serverUploadLimitText,
},
translationMap: window.editor_translations,
});
window.tinymce.init(config).then(editors => {
this.editor = editors[0];
});
}
}

View File

@ -217,7 +217,7 @@ body {
* @param {WysiwygConfigOptions} options
* @return {Object}
*/
export function build(options) {
export function buildForEditor(options) {
// Set language
window.tinymce.addI18n(options.language, options.translationMap);
@ -290,6 +290,54 @@ export function build(options) {
};
}
/**
* @param {WysiwygConfigOptions} options
* @return {RawEditorOptions}
*/
export function buildForInput(options) {
// Set language
window.tinymce.addI18n(options.language, options.translationMap);
// BookStack Version
const version = document.querySelector('script[src*="/dist/app.js"]').getAttribute('src').split('?version=')[1];
// Return config object
return {
width: '100%',
height: '300px',
target: options.containerElement,
cache_suffix: `?version=${version}`,
content_css: [
window.baseUrl('/dist/styles.css'),
],
branding: false,
skin: options.darkMode ? 'tinymce-5-dark' : 'tinymce-5',
body_class: 'page-content',
browser_spellcheck: true,
relative_urls: false,
language: options.language,
directionality: options.textDirection,
remove_script_host: false,
document_base_url: window.baseUrl('/'),
end_container_on_empty_block: true,
remove_trailing_brs: false,
statusbar: false,
menubar: false,
plugins: 'link autolink',
contextmenu: false,
toolbar: 'bold italic underline link',
content_style: getContentStyle(options),
color_map: colorMap,
init_instance_callback(editor) {
const head = editor.getDoc().querySelector('head');
head.innerHTML += fetchCustomHeadContent();
},
setup(editor) {
//
},
};
}
/**
* @typedef {Object} WysiwygConfigOptions
* @property {Element} containerElement