123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460 |
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="utf-8">
- <title th:text="${title}"></title>
- <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
- <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.3/jquery.min.js"></script>
- <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
- <style>
-
- .btn-submit{
- margin-top: 15px;
- display:flex;
- justify-content:flex-end;
- width:100%;
- padding-right:15px;
- }
-
- .document-editor {
- border: 1px solid var(--ck-color-base-border);
- border-radius: var(--ck-border-radius);
- /* Set vertical boundaries for the document editor. */
- max-height: 700px;
- /* This element is a flex container for easier rendering. */
- display: flex;
- flex-flow: column nowrap;
- }
- .document-editor__toolbar {
- /* Make sure the toolbar container is always above the editable. */
- z-index: 1;
- /* Create the illusion of the toolbar floating over the editable. */
- box-shadow: 0 0 5px hsla( 0,0%,0%,.2 );
- /* Use the CKEditor CSS variables to keep the UI consistent. */
- border-bottom: 1px solid var(--ck-color-toolbar-border);
- }
- /* Adjust the look of the toolbar inside of the container. */
- .document-editor__toolbar .ck-toolbar {
- border: 0;
- border-radius: 0;
- }
- /* Make the editable container look like the inside of a native word processor app. */
- .document-editor__editable-container {
- padding: calc( 2 * var(--ck-spacing-large) );
- background: var(--ck-color-base-foreground);
- /* Make it possible to scroll the "page" of the edited content. */
- overflow-y: scroll;
- }
- .ck-editor__editable {
- /* Set the dimensions of the "page". */
- width: 25.8cm;
- min-height: 21cm;
- /* Keep the "page" off the boundaries of the container. */
- padding: 1cm 2cm 2cm;
- border: 1px hsl( 0,0%,82.7% ) solid;
- border-radius: var(--ck-border-radius);
- background: white;
- /* The "page" should cast a slight shadow (3D illusion). */
- box-shadow: 0 0 5px hsla( 0,0%,0%,.1 );
- /* Center the "page". */
- margin: 0 auto;
- }
- /* Override the page's width in the "Examples" section which is wider. */
- .main__content-wide .document-editor__editable-container .document-editor__editable.ck-editor__editable {
- width: 18cm;
- }
- /* Set the default font for the "page" of the content. */
- .document-editor .ck-content,
- .document-editor .ck-heading-dropdown .ck-list .ck-button__label {
- font: 16px/1.6 "Helvetica Neue", Helvetica, Arial, sans-serif;
- }
- /* Adjust the headings dropdown to host some larger heading styles. */
- .document-editor .ck-heading-dropdown .ck-list .ck-button__label {
- line-height: calc( 1.7 * var(--ck-line-height-base) * var(--ck-font-size-base) );
- min-width: 6em;
- }
- /* Scale down all heading previews because they are way too big to be presented in the UI.
- Preserve the relative scale, though. */
- .document-editor .ck-heading-dropdown .ck-list .ck-heading_heading1 .ck-button__label,
- .document-editor .ck-heading-dropdown .ck-list .ck-heading_heading2 .ck-button__label {
- transform: scale(0.8);
- transform-origin: left;
- }
- /* Set the styles for "Heading 1". */
- .document-editor .ck-content h2,
- .document-editor .ck-heading-dropdown .ck-heading_heading1 .ck-button__label {
- font-size: 2.18em;
- font-weight: normal;
- }
- .document-editor .ck-content h2 {
- line-height: 1.37em;
- padding-top: .342em;
- margin-bottom: .142em;
- }
- /* Set the styles for "Heading 2". */
- .document-editor .ck-content h3,
- .document-editor .ck-heading-dropdown .ck-heading_heading2 .ck-button__label {
- font-size: 1.75em;
- font-weight: normal;
- color: hsl( 203, 100%, 50% );
- }
- .document-editor .ck-heading-dropdown .ck-heading_heading2.ck-on .ck-button__label {
- color: var(--ck-color-list-button-on-text);
- }
- /* Set the styles for "Heading 2". */
- .document-editor .ck-content h3 {
- line-height: 1.86em;
- padding-top: .171em;
- margin-bottom: .357em;
- }
- /* Set the styles for "Heading 3". */
- .document-editor .ck-content h4,
- .document-editor .ck-heading-dropdown .ck-heading_heading3 .ck-button__label {
- font-size: 1.31em;
- font-weight: bold;
- }
- .document-editor .ck-content h4 {
- line-height: 1.24em;
- padding-top: .286em;
- margin-bottom: .952em;
- }
- /* Make the block quoted text serif with some additional spacing. */
- .document-editor .ck-content blockquote {
- font-family: Georgia, serif;
- margin-left: calc( 2 * var(--ck-spacing-large) );
- margin-right: calc( 2 * var(--ck-spacing-large) );
- }
- @media only screen and (max-width: 960px) {
- /* Because on mobile 2cm paddings are to big. */
- .document-editor__editable-container .document-editor__editable.ck-editor__editable {
- padding: 1.5em;
- }
- }
- @media only screen and (max-width: 1200px) {
- .main__content-wide .document-editor__editable-container .document-editor__editable.ck-editor__editable {
- width: 100%;
- }
- }
- /* Style document editor a'ka Google Docs.*/
- @media only screen and (min-width: 1360px) {
- .main .main__content.main__content-wide {
- padding-right: 0;
- }
- }
- @media only screen and (min-width: 1600px) {
- .main .main__content.main__content-wide {
- width: 24cm;
- }
- .main .main__content.main__content-wide .main__content-inner {
- width: auto;
- margin: 0 50px;
- }
- /* Keep "page" look based on viewport width. */
- .main__content-wide .document-editor__editable-container .document-editor__editable.ck-editor__editable {
- width: 60%;
- }
- }
- </style>
- </head>
- <body>
- <h1><span th:text="${heading}"></span></h1>
- <form method="post", th:action="@{/}" th:object="${documentContent}">
- <input type="hidden" th:field="*{id}">
- <input type="hidden" th:field="*{generatedId}">
- <div class="document-editor">
- <div class="document-editor__toolbar"></div>
- <div class="document-editor__editable-container">
- <textarea class="document-editor__editable" th:field="*{value}">
- <!-- Editor content is inserted here. -->
- <span th:text="${content}"></span>
- </textarea>
- </div>
- </div>
- <div class="btn-submit">
- <input type="submit" class="btn btn-default btn-lg" value="Submit">
- </div>
- </form>
-
-
- <!--
- https://ckeditor.com/docs/ckeditor5/latest/features/images/image-upload/ckbox.html
- -->
- <script src="https://cdn.ckbox.io/CKBox/1.3.2/ckbox.js"></script>
- <!--
- The "super-build" of CKEditor 5 served via CDN contains a large set of plugins and multiple editor types.
- See https://ckeditor.com/docs/ckeditor5/latest/installation/getting-started/quick-start.html#running-a-full-featured-editor-from-cdn
- -->
- <script src="https://cdn.ckeditor.com/ckeditor5/36.0.1/super-build/ckeditor.js"></script>
- <!--
- Uncomment to load the Spanish translation
- <script src="https://cdn.ckeditor.com/ckeditor5/36.0.1/super-build/translations/es.js"></script>
- -->
- <script>
- // This sample still does not showcase all CKEditor 5 features (!)
- // Visit https://ckeditor.com/docs/ckeditor5/latest/features/index.html to browse all the features.
- CKEDITOR.ClassicEditor.create( document.querySelector( '.document-editor__editable' ), {
- // https://ckeditor.com/docs/ckeditor5/latest/features/toolbar/toolbar.html#extended-toolbar-configuration-format
- toolbar: {
- items: [
- 'ckbox', 'uploadImage', '|',
- 'exportPDF','exportWord', '|',
- 'importWord', '|',
- 'comment', 'trackChanges', 'revisionHistory', '|',
- 'findAndReplace', 'selectAll', '|',
- 'bold', 'italic', 'strikethrough', 'underline', 'removeFormat', '|',
- 'bulletedList', 'numberedList', 'todoList', '|',
- 'outdent', 'indent', '|',
- 'undo', 'redo',
- '-',
- 'heading', '|',
- 'fontSize', 'fontFamily', 'fontColor', 'fontBackgroundColor', 'highlight', '|',
- 'alignment', '|',
- 'link', 'blockQuote', 'insertTable', 'mediaEmbed', 'codeBlock', 'htmlEmbed', '|',
- 'specialCharacters', 'horizontalLine', 'pageBreak', '|',
- // Intentionally skipped buttons to keep the toolbar smaller, feel free to enable them:
- // 'code', 'subscript', 'superscript', 'textPartLanguage', '|',
- // ** To use source editing remember to disable real-time collaboration plugins **
- // 'sourceEditing'
- ],
- shouldNotGroupWhenFull: true
- },
- // Changing the language of the interface requires loading the language file using the <script> tag.
- // language: 'es',
- list: {
- properties: {
- styles: true,
- startIndex: true,
- reversed: true
- }
- },
- // https://ckeditor.com/docs/ckeditor5/latest/features/headings.html#configuration
- heading: {
- options: [
- { model: 'paragraph', title: 'Paragraph', class: 'ck-heading_paragraph' },
- { model: 'heading1', view: 'h1', title: 'Heading 1', class: 'ck-heading_heading1' },
- { model: 'heading2', view: 'h2', title: 'Heading 2', class: 'ck-heading_heading2' },
- { model: 'heading3', view: 'h3', title: 'Heading 3', class: 'ck-heading_heading3' },
- { model: 'heading4', view: 'h4', title: 'Heading 4', class: 'ck-heading_heading4' },
- { model: 'heading5', view: 'h5', title: 'Heading 5', class: 'ck-heading_heading5' },
- { model: 'heading6', view: 'h6', title: 'Heading 6', class: 'ck-heading_heading6' }
- ]
- },
- // https://ckeditor.com/docs/ckeditor5/latest/features/font.html#configuring-the-font-family-feature
- fontFamily: {
- options: [
- 'default',
- 'Arial, Helvetica, sans-serif',
- 'Courier New, Courier, monospace',
- 'Georgia, serif',
- 'Lucida Sans Unicode, Lucida Grande, sans-serif',
- 'Tahoma, Geneva, sans-serif',
- 'Times New Roman, Times, serif',
- 'Trebuchet MS, Helvetica, sans-serif',
- 'Verdana, Geneva, sans-serif'
- ],
- supportAllValues: true
- },
- // https://ckeditor.com/docs/ckeditor5/latest/features/font.html#configuring-the-font-size-feature
- fontSize: {
- options: [ 10, 12, 14, 'default', 18, 20, 22 ],
- supportAllValues: true
- },
- // Be careful with the setting below. It instructs CKEditor to accept ALL HTML markup.
- // https://ckeditor.com/docs/ckeditor5/latest/features/general-html-support.html#enabling-all-html-features
- // htmlSupport: {
- // allow: [
- // {
- // name: /.*/,
- // attributes: true,
- // classes: true,
- // styles: true
- // }
- // ]
- // },
- // Be careful with enabling previews
- // https://ckeditor.com/docs/ckeditor5/latest/features/html-embed.html#content-previews
- htmlEmbed: {
- showPreviews: true
- },
- // https://ckeditor.com/docs/ckeditor5/latest/features/mentions.html#configuration
- mention: {
- feeds: [
- {
- marker: '@',
- feed: [
- '@apple', '@bears', '@brownie', '@cake', '@cake', '@candy', '@canes', '@chocolate', '@cookie', '@cotton', '@cream',
- '@cupcake', '@danish', '@donut', '@dragée', '@fruitcake', '@gingerbread', '@gummi', '@ice', '@jelly-o',
- '@liquorice', '@macaroon', '@marzipan', '@oat', '@pie', '@plum', '@pudding', '@sesame', '@snaps', '@soufflé',
- '@sugar', '@sweet', '@topping', '@wafer', '@alfi'
- ],
- minimumCharacters: 1
- }
- ]
- },
- // https://ckeditor.com/docs/ckeditor5/latest/features/editor-placeholder.html#using-the-editor-configuration
- placeholder: 'Welcome to CKEditor 5!',
- // Used by real-time collaboration
- cloudServices: {
- // Be careful - do not use the development token endpoint on production systems!
- tokenUrl: 'https://95909.cke-cs.com/token/dev/31dad7RDKRwJrbhYZUOta7rT67FW5j53zqFh?limit=10',
- webSocketUrl: 'wss://95909.cke-cs.com/ws'
- },
- collaboration: {
- // Modify the channelId to simulate editing different documents
- // https://ckeditor.com/docs/ckeditor5/latest/features/collaboration/real-time-collaboration/real-time-collaboration-integration.html#the-channelid-configuration-property
- channelId: 'document-id-2'
- },
- // https://ckeditor.com/docs/ckeditor5/latest/features/collaboration/annotations/annotations-custom-configuration.html#sidebar-configuration
- sidebar: {
- container: document.querySelector( '#sidebar' )
- },
- // https://ckeditor.com/docs/ckeditor5/latest/features/collaboration/real-time-collaboration/users-in-real-time-collaboration.html#users-presence-list
- presenceList: {
- container: document.querySelector( '#presence-list-container' )
- },
- // Add configuration for the comments editor if the Comments plugin is added.
- // https://ckeditor.com/docs/ckeditor5/latest/features/collaboration/annotations/annotations-custom-configuration.html#comment-editor-configuration
- /* comments: {
- editorConfig: {
- extraPlugins: CKEDITOR.ClassicEditor.builtinPlugins.filter( plugin => {
- // Use e.g. Ctrl+B in the comments editor to bold text.
- return [ 'Bold', 'Italic', 'Underline', 'List', 'Autoformat', 'Mention' ].includes( plugin.pluginName );
- } ),
- // Combine mentions + Webhooks to notify users about new comments
- // https://ckeditor.com/docs/cs/latest/guides/webhooks/events.html
- mention: {
- feeds: [
- {
- marker: '@',
- feed: [
- '@Baby Doe', '@Joe Doe', '@Jane Doe', '@Jane Roe', '@Richard Roe'
- ],
- minimumCharacters: 1
- }
- ]
- },
- }
- }, */
- // Do not include revision history configuration if you do not want to integrate it.
- // Remember to remove the 'revisionHistory' button from the toolbar in such a case.
- /* revisionHistory: {
- editorContainer: document.querySelector( '#editor-container' ),
- viewerContainer: document.querySelector( '#revision-viewer-container' ),
- viewerEditorElement: document.querySelector( '#revision-viewer-editor' ),
- viewerSidebarContainer: document.querySelector( '#revision-viewer-sidebar' ),
- }, */
- // https://ckeditor.com/docs/ckeditor5/latest/features/images/image-upload/ckbox.html
- ckbox: {
- // Be careful - do not use the development token endpoint on production systems!
- tokenUrl: 'https://95909.cke-cs.com/token/dev/31dad7RDKRwJrbhYZUOta7rT67FW5j53zqFh?limit=10'
- },
- // License key is required only by the Pagination plugin and non-realtime Comments/Track changes.
- licenseKey: 'R6gmTn3ENgbwV0S8ykY5ECgcDEA+WXk+Ykv/bsGF4gRDWQ2wVNfaJHW50w==',
- removePlugins: [
- // Before enabling Pagination plugin, make sure to provide proper configuration and add relevant buttons to the toolbar
- // https://ckeditor.com/docs/ckeditor5/latest/features/pagination/pagination.html
- 'Pagination',
- // Intentionally disabled, file uploads are handled by CKBox
- 'Base64UploadAdapter',
- // Intentionally disabled, file uploads are handled by CKBox
- 'CKFinder',
- // Intentionally disabled, file uploads are handled by CKBox
- 'EasyImage',
- // Requires additional license key
- 'WProofreader',
- // Incompatible with real-time collaboration
- 'SourceEditing',
- // Careful, with the Mathtype plugin CKEditor will not load when loading this sample
- // from a local file system (file://) - load this site via HTTP server if you enable MathType
- 'MathType',
- // If you would like to adjust enabled collaboration features:
- 'RealTimeCollaborativeComments',
- 'RealTimeCollaborativeTrackChanges',
- 'RealTimeCollaborativeRevisionHistory',
- 'PresenceList',
- 'Comments',
- 'TrackChanges',
- 'TrackChangesData',
- 'RevisionHistory'
- ]
- } )
- .then( editor => {
- window.editor = editor;
- // Example implementation to switch between different types of annotations according to the window size.
- // https://ckeditor.com/docs/ckeditor5/latest/features/collaboration/annotations/annotations-display-mode.html
- /* const annotationsUIs = editor.plugins.get( 'AnnotationsUIs' );
- const sidebarElement = document.querySelector( '.sidebar' );
- let currentWidth;
- function refreshDisplayMode() {
- // Check the window width to avoid the UI switching when the mobile keyboard shows up.
- if ( window.innerWidth === currentWidth ) {
- return;
- }
- currentWidth = window.innerWidth;
- if ( currentWidth < 1000 ) {
- sidebarElement.classList.remove( 'narrow' );
- sidebarElement.classList.add( 'hidden' );
- annotationsUIs.switchTo( 'inline' );
- }
- else if ( currentWidth < 1300 ) {
- sidebarElement.classList.remove( 'hidden' );
- sidebarElement.classList.add( 'narrow' );
- annotationsUIs.switchTo( 'narrowSidebar' );
- }
- else {
- sidebarElement.classList.remove( 'hidden', 'narrow' );
- annotationsUIs.switchTo( 'wideSidebar' );
- }
- }
- editor.ui.view.listenTo( window, 'resize', refreshDisplayMode );
- refreshDisplayMode(); */
- const toolbarContainer = document.querySelector( '.document-editor__toolbar' );
- toolbarContainer.appendChild( editor.ui.view.toolbar.element );
-
- return editor;
- } )
- .catch( error => {
- console.error( 'There was a problem initializing the editor.', error );
- } );
- </script>
- </body>
- </html>
|