├── .github └── ISSUE_TEMPLATE.md ├── .gitignore ├── .replit ├── Froala_ThirdPartyLicense.txt ├── License.txt ├── README.md ├── bower.json ├── composer.json ├── css ├── froala_editor.css ├── froala_editor.min.css ├── froala_editor.pkgd.css ├── froala_editor.pkgd.min.css ├── froala_style.css ├── froala_style.min.css ├── plugins.pkgd.css ├── plugins.pkgd.min.css ├── plugins │ ├── char_counter.css │ ├── char_counter.min.css │ ├── code_view.css │ ├── code_view.min.css │ ├── colors.css │ ├── colors.min.css │ ├── draggable.css │ ├── draggable.min.css │ ├── emoticons.css │ ├── emoticons.min.css │ ├── file.css │ ├── file.min.css │ ├── files_manager.css │ ├── files_manager.min.css │ ├── filestack.css │ ├── filestack.min.css │ ├── find_and_replace.css │ ├── find_and_replace.min.css │ ├── fullscreen.css │ ├── fullscreen.min.css │ ├── help.css │ ├── help.min.css │ ├── image.css │ ├── image.min.css │ ├── image_manager.css │ ├── image_manager.min.css │ ├── line_breaker.css │ ├── line_breaker.min.css │ ├── markdown.css │ ├── markdown.min.css │ ├── quick_insert.css │ ├── quick_insert.min.css │ ├── special_characters.css │ ├── special_characters.min.css │ ├── table.css │ ├── table.min.css │ ├── trim_video.css │ ├── trim_video.min.css │ ├── video.css │ └── video.min.css ├── themes │ ├── dark.css │ ├── dark.min.css │ ├── gray.css │ ├── gray.min.css │ ├── royal.css │ └── royal.min.css └── third_party │ ├── embedly.css │ ├── embedly.min.css │ ├── font_awesome.css │ ├── font_awesome.min.css │ ├── image_tui.css │ ├── image_tui.min.css │ ├── spell_checker.css │ └── spell_checker.min.css ├── editor.jpg ├── html ├── 3rd-party │ ├── aviary │ │ └── index.html │ ├── bootstrap │ │ ├── grid.html │ │ ├── lists.html │ │ └── modal.html │ ├── code-mirror.html │ ├── font-awesome-5-css.html │ ├── font-awesome-5-js.html │ ├── jquery │ │ ├── mobile.html │ │ └── ui_modal.html │ ├── spell-checker │ │ └── spell-checker.html │ └── tui │ │ └── index.html ├── api │ ├── get_html.html │ ├── init_destroy.html │ ├── insert_html.html │ ├── live_code_preview.html │ ├── live_content_preview.html │ └── selection.html ├── buttons │ ├── custom_buttons.html │ ├── custom_dropdown.html │ ├── external_button.html │ └── subscript_superscript.html ├── events │ ├── blur_focus.html │ ├── content_changed.html │ ├── drop.html │ ├── image_removed.html │ └── initialized_destroy.html ├── file_s3_upload.php ├── image │ ├── custom_button.html │ ├── default_width.html │ ├── image_styles.html │ └── insert_base64.html ├── image_s3_upload.php ├── init_inside_iframe │ ├── basic.html │ ├── content.html │ └── inline.html ├── init_on_click │ ├── basic.html │ ├── inline.html │ └── two_editors.html ├── initialization │ ├── edit_in_popup.html │ ├── init_on_button.html │ ├── init_on_click.html │ ├── init_on_h1.html │ ├── init_on_image.html │ ├── init_on_link.html │ └── initialized_event.html ├── international │ ├── direction_rtl.html │ ├── language.html │ └── rtl_ltr_buttons.html ├── link │ ├── custom_validation.html │ ├── link_styles.html │ └── predefined_links.html ├── misc │ ├── scrollable_container.html │ └── scrollable_container_inline.html ├── paragraph_modes │ ├── enter_br.html │ ├── enter_div.html │ └── enter_p.html ├── paste │ ├── attrs.html │ ├── plain.html │ └── tags.html ├── plugins │ ├── char_counter.html │ ├── full_screen.html │ ├── line_breaker.html │ └── quick_insert.html ├── popular │ ├── disable_edit.html │ ├── disable_paragraphs.html │ ├── full.html │ ├── full_page.html │ ├── iframe.html │ ├── init_on_click.html │ ├── textarea.html │ ├── toolbar_buttons.html │ ├── toolbar_inline.html │ ├── two_instances.html │ └── z_index.html ├── popups │ ├── colors.html │ ├── custom.html │ └── emoticons.html ├── styling │ ├── adjustable_height.html │ ├── font_family.html │ ├── height.html │ ├── inline.html │ ├── paragraph.html │ ├── placeholder.html │ └── width.html ├── table │ ├── cell_style.html │ ├── insert_helper.html │ ├── nested.html │ ├── resize.html │ └── style.html ├── themes │ ├── dark.html │ ├── gray.html │ └── royal.html ├── toolbar │ ├── bottom.html │ ├── bottom_offset.html │ ├── buttons.html │ ├── external.html │ ├── external_inline.html │ ├── inline.html │ ├── inline_selection.html │ ├── offset.html │ ├── show_selection.html │ └── sticky.html └── typing │ ├── keep_format.html │ ├── shortcuts.html │ └── tab.html ├── img └── photo1.jpg ├── index.d.ts ├── index.html ├── js ├── froala_editor.min.js ├── froala_editor.pkgd.min.js ├── languages │ ├── ar.js │ ├── bs.js │ ├── cs.js │ ├── da.js │ ├── de.js │ ├── el.js │ ├── en_ca.js │ ├── en_gb.js │ ├── es.js │ ├── et.js │ ├── fa.js │ ├── fi.js │ ├── fr.js │ ├── he.js │ ├── hr.js │ ├── hu.js │ ├── id.js │ ├── it.js │ ├── ja.js │ ├── ko.js │ ├── ku.js │ ├── me.js │ ├── nb.js │ ├── nl.js │ ├── pl.js │ ├── pt_br.js │ ├── pt_pt.js │ ├── ro.js │ ├── ru.js │ ├── sk.js │ ├── sl.js │ ├── sr.js │ ├── sv.js │ ├── th.js │ ├── tr.js │ ├── uk.js │ ├── vi.js │ ├── zh_cn.js │ └── zh_tw.js ├── plugins.pkgd.min.js ├── plugins │ ├── align.min.js │ ├── char_counter.min.js │ ├── code_beautifier.min.js │ ├── code_view.min.js │ ├── colors.min.js │ ├── cryptojs.min.js │ ├── draggable.min.js │ ├── edit_in_popup.min.js │ ├── emoticons.min.js │ ├── entities.min.js │ ├── file.min.js │ ├── files_manager.min.js │ ├── filestack.min.js │ ├── find_and_replace.min.js │ ├── font_family.min.js │ ├── font_size.min.js │ ├── forms.min.js │ ├── fullscreen.min.js │ ├── help.min.js │ ├── image.min.js │ ├── image_manager.min.js │ ├── inline_class.min.js │ ├── inline_style.min.js │ ├── line_breaker.min.js │ ├── line_height.min.js │ ├── link.min.js │ ├── lists.min.js │ ├── markdown.min.js │ ├── paragraph_format.min.js │ ├── paragraph_style.min.js │ ├── print.min.js │ ├── quick_insert.min.js │ ├── quote.min.js │ ├── save.min.js │ ├── special_characters.min.js │ ├── table.min.js │ ├── track_changes.min.js │ ├── trim_video.min.js │ ├── url.min.js │ ├── video.min.js │ ├── word_counter.min.js │ └── word_paste.min.js └── third_party │ ├── embedly.min.js │ ├── font_awesome.min.js │ ├── image_tui.min.js │ ├── showdown.min.js │ └── spell_checker.min.js └── package.json /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ### _If you have a feature suggestion, please add it on the [Feature List](https://wysiwyg-editor-roadmap.froala.com/public) instead._ 2 | 3 | ##### Expected behavior. 4 | (Describe expected behaviour here) 5 | 6 | ##### Actual behavior. 7 | (Describe actual behaviour here) 8 | 9 | ##### Steps to reproduce the problem. 10 | (Describe the steps to reproduce the problem here. A [jsFiddle](https://jsfiddle.net/froala/cgu0dmxh/) is awesome when possible.) 11 | 12 | ##### Editor version. 13 | If you don't know it, please see https://wysiwyg-editor.froala.help/hc/en-us/articles/360000717049-How-can-I-find-my-editor-version-. 14 | 15 | ##### OS. 16 | (OS name and version here) 17 | 18 | ##### Browser. 19 | (Browser name an version here) 20 | 21 | ##### Recording. 22 | (A recording showing how to reproduce the problem) 23 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | froala_editor.js 2 | *~ 3 | .idea 4 | node_modules 5 | dist 6 | npm-debug.log 7 | .DS_STORE -------------------------------------------------------------------------------- /.replit: -------------------------------------------------------------------------------- 1 | language = "nodejs" 2 | run = "hello" -------------------------------------------------------------------------------- /Froala_ThirdPartyLicense.txt: -------------------------------------------------------------------------------- 1 | ===Third Party Licenses for Froala Editor=== 2 | 3 | This Document contains either required notices for third party software or the third party license documents under which the Separately Licensed Code is licensed. 4 | 5 | (Please note that in some cases, the license listed may differ from the license under which the latest version of the code can be obtained). 6 | 7 | 8 | ==Separately Licensed Code== 9 | 10 | CryptoJS v. 3.1.2 11 | 12 | Copyright 2020 Froala Labs SA 13 | 14 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 15 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 17 | 18 | ==================================================================== 19 | 20 | DOMPurify v. 2.2.7 21 | 22 | Copyright 2021 Froala Labs SA 23 | 24 | Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at 25 | http://www.apache.org/licenses/LICENSE-2.0 26 | Unless required by applicable law or agreed to in writing, software 27 | distributed under the License is distributed on an "AS IS" BASIS, 28 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and 29 | limitations under the License. 30 | 31 | ==================================================================== 32 | -------------------------------------------------------------------------------- /License.txt: -------------------------------------------------------------------------------- 1 | Froala WYSIWYG Editor 2 | ================ 3 | 4 | In order to use Froala Editor you have to purchase a license from: https://www.froala.com/wysiwyg-editor/pricing. 5 | For more informations regarding the license please read https://www.froala.com/wysiwyg-editor/terms. 6 | -------------------------------------------------------------------------------- /bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "froala-wysiwyg-editor", 3 | "description": "A beautiful jQuery WYSIWYG HTML rich text editor. High performance and modern design make it easy to use for developers and loved by users.", 4 | "homepage": "https://www.froala.com/wysiwyg-editor", 5 | "license": "https://www.froala.com/wysiwyg-editor/pricing", 6 | "repository": { 7 | "type": "git", 8 | "url": "git://github.com/froala/wysiwyg-editor.git" 9 | }, 10 | "keywords": [ 11 | "froala", 12 | "froala-editor", 13 | "froala-wysiwyg", 14 | "html", 15 | "text", 16 | "editor", 17 | "wysiwyg", 18 | "jquery-plugin", 19 | "rich editor", 20 | "rich text editor", 21 | "rte", 22 | "javascript", 23 | "jquery" 24 | ], 25 | "moduleType": "globals", 26 | "main": [ 27 | "css/froala_editor.min.css", 28 | "css/froala_editor.pkgd.min.css", 29 | "css/froala_style.min.css", 30 | "css/plugins/char_counter.min.css", 31 | "css/plugins/code_view.min.css", 32 | "css/plugins/colors.min.css", 33 | "css/plugins/markdown.min.css", 34 | "css/plugins/draggable.min.css", 35 | "css/plugins/emoticons.min.css", 36 | "css/plugins/file.min.css", 37 | "css/plugins/files_manager.min.css", 38 | "css/plugins/fullscreen.min.css", 39 | "css/plugins/help.min.css", 40 | "css/plugins/image_manager.min.css", 41 | "css/plugins/image.min.css", 42 | "css/plugins/line_breaker.min.css", 43 | "css/plugins/quick_insert.min.css", 44 | "css/plugins/special_characters.min.css", 45 | "css/plugins/table.min.css", 46 | "css/plugins/video.min.css", 47 | "css/third_party/embedly.min.css", 48 | "css/third_party/spell_checker.min.css", 49 | "js/froala_editor.min.js", 50 | "js/froala_editor.pkgd.min.js", 51 | "js/plugins/align.min.js", 52 | "js/plugins/char_counter.min.js", 53 | "js/plugins/code_beautifier.min.js", 54 | "js/plugins/code_view.min.js", 55 | "js/plugins/colors.min.js", 56 | "js/plugins/draggable.min.js", 57 | "js/plugins/emoticons.min.js", 58 | "js/plugins/entities.min.js", 59 | "js/plugins/file.min.js", 60 | "js/plugins/files_manager.min.js", 61 | "js/plugins/cryptojs.min.js", 62 | "js/plugins/font_family.min.js", 63 | "js/plugins/font_size.min.js", 64 | "js/plugins/fullscreen.min.js", 65 | "js/plugins/help.min.js", 66 | "js/plugins/image.min.js", 67 | "js/plugins/image_manager.min.js", 68 | "js/plugins/inline_style.min.js", 69 | "js/plugins/line_breaker.min.js", 70 | "js/plugins/link.min.js", 71 | "js/plugins/lists.min.js", 72 | "js/plugins/paragraph_format.min.js", 73 | "js/plugins/paragraph_style.min.js", 74 | "js/plugins/print.min.js", 75 | "js/plugins/quick_insert.min.js", 76 | "js/plugins/quote.min.js", 77 | "js/plugins/save.min.js", 78 | "js/plugins/special_characters.min.js", 79 | "js/plugins/table.min.js", 80 | "js/plugins/url.min.js", 81 | "js/plugins/video.min.js", 82 | "js/plugins/word_paste.min.js", 83 | "js/third_party/embedly.min.js", 84 | "js/third_party/image_aviary.min.js", 85 | "js/third_party/spell_checker.min.js", 86 | "js/third_party/showdown.min.js" 87 | ], 88 | "ignore": [ 89 | "html", 90 | "img", 91 | "package.json" 92 | ], 93 | "dependencies": { 94 | "jquery": ">=1.11.0", 95 | "font-awesome": ">=4.4.0" 96 | } 97 | } -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "froala/wysiwyg-editor", 3 | "description": "A beautiful jQuery WYSIWYG HTML rich text editor. High performance and modern design make it easy to use for developers and loved by users.", 4 | "type": "component", 5 | "homepage": "https://www.froala.com/wysiwyg-editor", 6 | "license": "proprietary", 7 | "support": { 8 | "issues": "https://www.froala.com/wysiwyg-editor/contact" 9 | }, 10 | "keywords": [ 11 | "froala", 12 | "froala-editor", 13 | "froala-wysiwyg", 14 | "html", 15 | "text", 16 | "editor", 17 | "wysiwyg", 18 | "jquery-plugin", 19 | "rich editor", 20 | "rich text editor", 21 | "rte", 22 | "javascript", 23 | "jquery" 24 | ], 25 | "authors": [ 26 | { 27 | "name": "Froala Labs", 28 | "email": "support@froala.com" 29 | } 30 | ] 31 | } -------------------------------------------------------------------------------- /css/plugins/char_counter.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * froala_editor v4.5.2 (https://www.froala.com/wysiwyg-editor) 3 | * License https://froala.com/wysiwyg-editor/terms/ 4 | * Copyright 2014-2025 Froala Labs 5 | */ 6 | 7 | .fr-clearfix::after { 8 | clear: both; 9 | display: block; 10 | content: ""; 11 | height: 0; } 12 | 13 | .fr-hide-by-clipping { 14 | position: absolute; 15 | width: 1px; 16 | height: 1px; 17 | padding: 0; 18 | margin: -1px; 19 | overflow: hidden; 20 | clip: rect(0, 0, 0, 0); 21 | border: 0; } 22 | 23 | .fr-box .fr-counter { 24 | padding: 10px; 25 | float: right; 26 | color: #999999; 27 | content: attr(data-chars); 28 | font-size: 14px; 29 | font-family: sans-serif; 30 | z-index: 1; 31 | border-radius: 2px 0 0 0; 32 | -moz-border-radius: 2px 0 0 0; 33 | -webkit-border-radius: 2px 0 0 0; 34 | -moz-background-clip: padding; 35 | -webkit-background-clip: padding-box; 36 | background-clip: padding-box; } 37 | .fr-box.fr-rtl .fr-counter { 38 | left: 0; 39 | right: auto; 40 | border-left: none; 41 | border-radius: 0 2px 0 0; 42 | -moz-border-radius: 0 2px 0 0; 43 | -webkit-border-radius: 0 2px 0 0; 44 | -moz-background-clip: padding; 45 | -webkit-background-clip: padding-box; 46 | background-clip: padding-box; } 47 | 48 | .fr-box.fr-code-view .fr-counter { 49 | display: none; } 50 | -------------------------------------------------------------------------------- /css/plugins/char_counter.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * froala_editor v4.5.2 (https://www.froala.com/wysiwyg-editor) 3 | * License https://froala.com/wysiwyg-editor/terms/ 4 | * Copyright 2014-2025 Froala Labs 5 | */ 6 | 7 | .fr-clearfix::after{clear:both;display:block;content:"";height:0}.fr-hide-by-clipping{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.fr-box .fr-counter{padding:10px;float:right;color:#999;content:attr(data-chars);font-size:14px;font-family:sans-serif;z-index:1;border-radius:2px 0 0 0;-moz-border-radius:2px 0 0 0;-webkit-border-radius:2px 0 0 0;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box}.fr-box.fr-rtl .fr-counter{left:0;right:auto;border-left:none;border-radius:0 2px 0 0;-moz-border-radius:0 2px 0 0;-webkit-border-radius:0 2px 0 0;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box}.fr-box.fr-code-view .fr-counter{display:none} 8 | -------------------------------------------------------------------------------- /css/plugins/code_view.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * froala_editor v4.5.2 (https://www.froala.com/wysiwyg-editor) 3 | * License https://froala.com/wysiwyg-editor/terms/ 4 | * Copyright 2014-2025 Froala Labs 5 | */ 6 | 7 | .fr-clearfix::after { 8 | clear: both; 9 | display: block; 10 | content: ""; 11 | height: 0; } 12 | 13 | .fr-hide-by-clipping { 14 | position: absolute; 15 | width: 1px; 16 | height: 1px; 17 | padding: 0; 18 | margin: -1px; 19 | overflow: hidden; 20 | clip: rect(0, 0, 0, 0); 21 | border: 0; } 22 | 23 | textarea.fr-code { 24 | display: none; 25 | width: 100%; 26 | resize: none; 27 | -moz-resize: none; 28 | -webkit-resize: none; 29 | -webkit-box-sizing: border-box; 30 | -moz-box-sizing: border-box; 31 | box-sizing: border-box; 32 | border: none; 33 | padding: 10px; 34 | margin: 0; 35 | font-family: "Courier New",monospace; 36 | font-size: 14px; 37 | background: #FFF; 38 | color: #000; 39 | outline: none; } 40 | 41 | .fr-box.fr-rtl textarea.fr-code { 42 | direction: rtl; } 43 | 44 | .fr-box .CodeMirror { 45 | display: none; } 46 | 47 | .fr-box.fr-code-view textarea.fr-code { 48 | display: block; } 49 | .fr-box.fr-code-view .fr-element, .fr-box.fr-code-view .fr-placeholder, .fr-box.fr-code-view .fr-iframe { 50 | display: none; } 51 | .fr-box.fr-code-view .CodeMirror { 52 | display: block; } 53 | 54 | .fr-box.fr-inline.fr-code-view .fr-command.fr-btn.html-switch { 55 | display: block; } 56 | .fr-box.fr-inline .fr-command.fr-btn.html-switch { 57 | display: none; 58 | position: absolute; 59 | top: 0; 60 | right: 0; 61 | display: none; 62 | background: #FFF; 63 | color: #333333; 64 | -moz-outline: 0; 65 | outline: 0; 66 | border: 0; 67 | line-height: 1; 68 | cursor: pointer; 69 | text-align: left; 70 | padding: 8px 7px; 71 | -webkit-transition: background 0.2s ease 0s; 72 | -moz-transition: background 0.2s ease 0s; 73 | -ms-transition: background 0.2s ease 0s; 74 | -o-transition: background 0.2s ease 0s; 75 | border-radius: 0; 76 | -moz-border-radius: 0; 77 | -webkit-border-radius: 0; 78 | -moz-background-clip: padding; 79 | -webkit-background-clip: padding-box; 80 | background-clip: padding-box; 81 | z-index: 2; 82 | -webkit-box-sizing: border-box; 83 | -moz-box-sizing: border-box; 84 | box-sizing: border-box; 85 | text-decoration: none; 86 | user-select: none; 87 | -o-user-select: none; 88 | -moz-user-select: none; 89 | -khtml-user-select: none; 90 | -webkit-user-select: none; 91 | -ms-user-select: none; } 92 | .fr-box.fr-inline .fr-command.fr-btn.html-switch i { 93 | font-size: 24px; 94 | width: 24px; 95 | text-align: center; } 96 | .fr-box.fr-inline .fr-command.fr-btn.html-switch.fr-desktop:hover { 97 | background: #ebebeb; } 98 | -------------------------------------------------------------------------------- /css/plugins/code_view.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * froala_editor v4.5.2 (https://www.froala.com/wysiwyg-editor) 3 | * License https://froala.com/wysiwyg-editor/terms/ 4 | * Copyright 2014-2025 Froala Labs 5 | */ 6 | 7 | .fr-clearfix::after{clear:both;display:block;content:"";height:0}.fr-hide-by-clipping{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}textarea.fr-code{display:none;width:100%;resize:none;-moz-resize:none;-webkit-resize:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:none;padding:10px;margin:0;font-family:"Courier New",monospace;font-size:14px;background:#FFF;color:#000;outline:none}.fr-box.fr-rtl textarea.fr-code{direction:rtl}.fr-box .CodeMirror{display:none}.fr-box.fr-code-view textarea.fr-code{display:block}.fr-box.fr-code-view .fr-element,.fr-box.fr-code-view .fr-placeholder,.fr-box.fr-code-view .fr-iframe{display:none}.fr-box.fr-code-view .CodeMirror{display:block}.fr-box.fr-inline.fr-code-view .fr-command.fr-btn.html-switch{display:block}.fr-box.fr-inline .fr-command.fr-btn.html-switch{display:none;position:absolute;top:0;right:0;display:none;background:#FFF;color:#333;-moz-outline:0;outline:0;border:0;line-height:1;cursor:pointer;text-align:left;padding:8px 7px;-webkit-transition:background 0.2s ease 0s;-moz-transition:background 0.2s ease 0s;-ms-transition:background 0.2s ease 0s;-o-transition:background 0.2s ease 0s;border-radius:0;-moz-border-radius:0;-webkit-border-radius:0;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;z-index:2;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;text-decoration:none;user-select:none;-o-user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none}.fr-box.fr-inline .fr-command.fr-btn.html-switch i{font-size:24px;width:24px;text-align:center}.fr-box.fr-inline .fr-command.fr-btn.html-switch.fr-desktop:hover{background:#ebebeb} 8 | -------------------------------------------------------------------------------- /css/plugins/colors.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * froala_editor v4.5.2 (https://www.froala.com/wysiwyg-editor) 3 | * License https://froala.com/wysiwyg-editor/terms/ 4 | * Copyright 2014-2025 Froala Labs 5 | */ 6 | 7 | .fr-clearfix::after { 8 | clear: both; 9 | display: block; 10 | content: ""; 11 | height: 0; } 12 | 13 | .fr-hide-by-clipping { 14 | position: absolute; 15 | width: 1px; 16 | height: 1px; 17 | padding: 0; 18 | margin: -1px; 19 | overflow: hidden; 20 | clip: rect(0, 0, 0, 0); 21 | border: 0; } 22 | 23 | .fr-popup .fr-layer.fr-color-hex-layer { 24 | margin: 0; 25 | padding: 20px; 26 | padding-top: 0; 27 | float: left; } 28 | .fr-popup .fr-layer.fr-color-hex-layer .fr-input-line { 29 | float: left; 30 | width: calc(100% - 50px); 31 | padding: 15px 0 0; } 32 | .fr-popup .fr-layer.fr-color-hex-layer .fr-action-buttons { 33 | float: right; 34 | width: 38px; 35 | height: 40px; 36 | padding: 17px 0 0; 37 | margin: 0; } 38 | .fr-popup .fr-layer.fr-color-hex-layer .fr-action-buttons button.fr-command { 39 | border-radius: 2px; 40 | -moz-border-radius: 2px; 41 | -webkit-border-radius: 2px; 42 | -moz-background-clip: padding; 43 | -webkit-background-clip: padding-box; 44 | background-clip: padding-box; 45 | font-size: 13px; 46 | height: 40px; 47 | width: 38px; } 48 | .fr-popup .fr-separator + .fr-colors-tabs { 49 | margin-left: 2px; 50 | margin-right: 2px; } 51 | .fr-popup .fr-color-set { 52 | line-height: 0; 53 | display: none; } 54 | .fr-popup .fr-color-set.fr-selected-set { 55 | display: block; 56 | padding: 20px; 57 | padding-bottom: 0; } 58 | .fr-popup .fr-color-set > span { 59 | display: inline-block; 60 | width: 32px; 61 | height: 32px; 62 | position: relative; 63 | z-index: 1; } 64 | .fr-popup .fr-color-set > span > i, .fr-popup .fr-color-set > span > svg { 65 | text-align: center; 66 | line-height: 32px; 67 | height: 24px; 68 | width: 24px; 69 | margin: 4px; 70 | font-size: 13px; 71 | position: absolute; 72 | bottom: 0; 73 | cursor: default; 74 | left: 0; } 75 | .fr-popup .fr-color-set > span > i path, .fr-popup .fr-color-set > span > svg path { 76 | fill: #222222; } 77 | .fr-popup .fr-color-set > span .fr-selected-color { 78 | color: #FFF; 79 | font-family: FontAwesome; 80 | font-size: 13px; 81 | font-weight: 400; 82 | line-height: 32px; 83 | position: absolute; 84 | top: 0; 85 | bottom: 0; 86 | right: 0; 87 | left: 0; 88 | text-align: center; 89 | cursor: default; } 90 | .fr-popup .fr-color-set > span:hover, .fr-popup .fr-color-set > span:focus { 91 | outline: 1px solid #222222; 92 | z-index: 2; } 93 | 94 | .fr-rtl .fr-popup .fr-colors-tabs .fr-colors-tab.fr-selected-tab[data-param1="text"] ~ [data-param1="background"]::after { 95 | -webkit-transform: translate3d(100%, 0, 0); 96 | -moz-transform: translate3d(100%, 0, 0); 97 | -ms-transform: translate3d(100%, 0, 0); 98 | -o-transform: translate3d(100%, 0, 0); } 99 | -------------------------------------------------------------------------------- /css/plugins/colors.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * froala_editor v4.5.2 (https://www.froala.com/wysiwyg-editor) 3 | * License https://froala.com/wysiwyg-editor/terms/ 4 | * Copyright 2014-2025 Froala Labs 5 | */ 6 | 7 | .fr-clearfix::after{clear:both;display:block;content:"";height:0}.fr-hide-by-clipping{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.fr-popup .fr-layer.fr-color-hex-layer{margin:0;padding:20px;padding-top:0;float:left}.fr-popup .fr-layer.fr-color-hex-layer .fr-input-line{float:left;width:calc(100% - 50px);padding:15px 0 0}.fr-popup .fr-layer.fr-color-hex-layer .fr-action-buttons{float:right;width:38px;height:40px;padding:17px 0 0;margin:0}.fr-popup .fr-layer.fr-color-hex-layer .fr-action-buttons button.fr-command{border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;font-size:13px;height:40px;width:38px}.fr-popup .fr-separator+.fr-colors-tabs{margin-left:2px;margin-right:2px}.fr-popup .fr-color-set{line-height:0;display:none}.fr-popup .fr-color-set.fr-selected-set{display:block;padding:20px;padding-bottom:0}.fr-popup .fr-color-set>span{display:inline-block;width:32px;height:32px;position:relative;z-index:1}.fr-popup .fr-color-set>span>i,.fr-popup .fr-color-set>span>svg{text-align:center;line-height:32px;height:24px;width:24px;margin:4px;font-size:13px;position:absolute;bottom:0;cursor:default;left:0}.fr-popup .fr-color-set>span>i path,.fr-popup .fr-color-set>span>svg path{fill:#222}.fr-popup .fr-color-set>span .fr-selected-color{color:#FFF;font-family:FontAwesome;font-size:13px;font-weight:400;line-height:32px;position:absolute;top:0;bottom:0;right:0;left:0;text-align:center;cursor:default}.fr-popup .fr-color-set>span:hover,.fr-popup .fr-color-set>span:focus{outline:1px solid #222;z-index:2}.fr-rtl .fr-popup .fr-colors-tabs .fr-colors-tab.fr-selected-tab[data-param1="text"] ~ [data-param1="background"]::after{-webkit-transform:translate3d(100%, 0, 0);-moz-transform:translate3d(100%, 0, 0);-ms-transform:translate3d(100%, 0, 0);-o-transform:translate3d(100%, 0, 0)} 8 | -------------------------------------------------------------------------------- /css/plugins/draggable.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * froala_editor v4.5.2 (https://www.froala.com/wysiwyg-editor) 3 | * License https://froala.com/wysiwyg-editor/terms/ 4 | * Copyright 2014-2025 Froala Labs 5 | */ 6 | 7 | .fr-clearfix::after { 8 | clear: both; 9 | display: block; 10 | content: ""; 11 | height: 0; } 12 | 13 | .fr-hide-by-clipping { 14 | position: absolute; 15 | width: 1px; 16 | height: 1px; 17 | padding: 0; 18 | margin: -1px; 19 | overflow: hidden; 20 | clip: rect(0, 0, 0, 0); 21 | border: 0; } 22 | 23 | .fr-drag-helper { 24 | background: #0098f7; 25 | height: 2px; 26 | margin-top: -1px; 27 | -webkit-opacity: 0.2; 28 | -moz-opacity: 0.2; 29 | opacity: 0.2; 30 | -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; 31 | position: absolute; 32 | z-index: 2147483640; 33 | display: none; } 34 | .fr-drag-helper.fr-visible { 35 | display: block; } 36 | 37 | .fr-dragging { 38 | -webkit-opacity: 0.4; 39 | -moz-opacity: 0.4; 40 | opacity: 0.4; 41 | -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; } 42 | -------------------------------------------------------------------------------- /css/plugins/draggable.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * froala_editor v4.5.2 (https://www.froala.com/wysiwyg-editor) 3 | * License https://froala.com/wysiwyg-editor/terms/ 4 | * Copyright 2014-2025 Froala Labs 5 | */ 6 | 7 | .fr-clearfix::after{clear:both;display:block;content:"";height:0}.fr-hide-by-clipping{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.fr-drag-helper{background:#0098f7;height:2px;margin-top:-1px;-webkit-opacity:.2;-moz-opacity:.2;opacity:.2;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";position:absolute;z-index:2147483640;display:none}.fr-drag-helper.fr-visible{display:block}.fr-dragging{-webkit-opacity:.4;-moz-opacity:.4;opacity:.4;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"} 8 | -------------------------------------------------------------------------------- /css/plugins/emoticons.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * froala_editor v4.5.2 (https://www.froala.com/wysiwyg-editor) 3 | * License https://froala.com/wysiwyg-editor/terms/ 4 | * Copyright 2014-2025 Froala Labs 5 | */ 6 | 7 | .fr-clearfix::after { 8 | clear: both; 9 | display: block; 10 | content: ""; 11 | height: 0; } 12 | 13 | .fr-hide-by-clipping { 14 | position: absolute; 15 | width: 1px; 16 | height: 1px; 17 | padding: 0; 18 | margin: -1px; 19 | overflow: hidden; 20 | clip: rect(0, 0, 0, 0); 21 | border: 0; } 22 | 23 | .fr-popup .fr-emoticon { 24 | width: 24px; 25 | height: 24px; 26 | font-family: "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; } 27 | .fr-popup .fr-emoticon img { 28 | height: 24px; 29 | width: 24px; } 30 | .fr-popup .fr-command.fr-btn.fr-tabs-unicode { 31 | padding: 0 0 0 14px; } 32 | @media screen and (-ms-high-contrast: active) and (min-width: 768px), (-ms-high-contrast: none) and (min-width: 768px) { 33 | .fr-popup .fr-icon-container.fr-emoticon-container { 34 | width: 368px; } } 35 | -------------------------------------------------------------------------------- /css/plugins/emoticons.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * froala_editor v4.5.2 (https://www.froala.com/wysiwyg-editor) 3 | * License https://froala.com/wysiwyg-editor/terms/ 4 | * Copyright 2014-2025 Froala Labs 5 | */ 6 | 7 | .fr-clearfix::after{clear:both;display:block;content:"";height:0}.fr-hide-by-clipping{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.fr-popup .fr-emoticon{width:24px;height:24px;font-family:"Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols}.fr-popup .fr-emoticon img{height:24px;width:24px}.fr-popup .fr-command.fr-btn.fr-tabs-unicode{padding:0 0 0 14px}@media screen and (-ms-high-contrast: active) and (min-width: 768px), (-ms-high-contrast: none) and (min-width: 768px){.fr-popup .fr-icon-container.fr-emoticon-container{width:368px}} 8 | -------------------------------------------------------------------------------- /css/plugins/file.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * froala_editor v4.5.2 (https://www.froala.com/wysiwyg-editor) 3 | * License https://froala.com/wysiwyg-editor/terms/ 4 | * Copyright 2014-2025 Froala Labs 5 | */ 6 | 7 | .fr-clearfix::after { 8 | clear: both; 9 | display: block; 10 | content: ""; 11 | height: 0; } 12 | 13 | .fr-hide-by-clipping { 14 | position: absolute; 15 | width: 1px; 16 | height: 1px; 17 | padding: 0; 18 | margin: -1px; 19 | overflow: hidden; 20 | clip: rect(0, 0, 0, 0); 21 | border: 0; } 22 | 23 | .fr-popup .fr-file-upload-layer { 24 | border: dashed 2px #bdbdbd; 25 | padding: 25px 0; 26 | margin: 20px; 27 | position: relative; 28 | font-size: 14px; 29 | letter-spacing: 1px; 30 | line-height: 140%; 31 | -webkit-box-sizing: border-box; 32 | -moz-box-sizing: border-box; 33 | box-sizing: border-box; 34 | text-align: center; } 35 | .fr-popup .fr-file-upload-layer:hover { 36 | background: #ebebeb; } 37 | .fr-popup .fr-file-upload-layer.fr-drop { 38 | background: #ebebeb; 39 | border-color: #0098f7; } 40 | .fr-popup .fr-file-upload-layer .fr-form { 41 | -webkit-opacity: 0; 42 | -moz-opacity: 0; 43 | opacity: 0; 44 | -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; 45 | position: absolute; 46 | top: 0; 47 | bottom: 0; 48 | left: 0; 49 | right: 0; 50 | z-index: 2147483640; 51 | overflow: hidden; 52 | margin: 0 !important; 53 | padding: 0 !important; 54 | width: 100% !important; } 55 | .fr-popup .fr-file-upload-layer .fr-form input { 56 | cursor: pointer; 57 | position: absolute; 58 | right: 0; 59 | top: 0; 60 | bottom: 0; 61 | width: 500%; 62 | height: 100%; 63 | margin: 0; 64 | font-size: 400px; } 65 | .fr-popup .fr-file-progress-bar-layer { 66 | -webkit-box-sizing: border-box; 67 | -moz-box-sizing: border-box; 68 | box-sizing: border-box; } 69 | .fr-popup .fr-file-progress-bar-layer > h3 { 70 | font-size: 16px; 71 | margin: 10px 0; 72 | font-weight: normal; } 73 | .fr-popup .fr-file-progress-bar-layer > div.fr-action-buttons { 74 | display: none; } 75 | .fr-popup .fr-file-progress-bar-layer > div.fr-loader { 76 | background: #b3e0fd; 77 | height: 10px; 78 | width: 100%; 79 | margin-top: 20px; 80 | overflow: hidden; 81 | position: relative; } 82 | .fr-popup .fr-file-progress-bar-layer > div.fr-loader span { 83 | display: block; 84 | height: 100%; 85 | width: 0%; 86 | background: #0098f7; 87 | -webkit-transition: width 0.2s ease 0s; 88 | -moz-transition: width 0.2s ease 0s; 89 | -ms-transition: width 0.2s ease 0s; 90 | -o-transition: width 0.2s ease 0s; } 91 | .fr-popup .fr-file-progress-bar-layer > div.fr-loader.fr-indeterminate span { 92 | width: 30% !important; 93 | position: absolute; 94 | top: 0; 95 | -webkit-animation: loading 2s linear infinite; 96 | -moz-animation: loading 2s linear infinite; 97 | -o-animation: loading 2s linear infinite; 98 | animation: loading 2s linear infinite; } 99 | .fr-popup .fr-file-progress-bar-layer.fr-error > div.fr-loader { 100 | display: none; } 101 | .fr-popup .fr-file-progress-bar-layer.fr-error > div.fr-action-buttons { 102 | display: block; } 103 | 104 | @keyframes loading { 105 | from { 106 | left: -25%; } 107 | to { 108 | left: 100%; } } 109 | @-webkit-keyframes loading { 110 | from { 111 | left: -25%; } 112 | to { 113 | left: 100%; } } 114 | @-moz-keyframes loading { 115 | from { 116 | left: -25%; } 117 | to { 118 | left: 100%; } } 119 | @-o-keyframes loading { 120 | from { 121 | left: -25%; } 122 | to { 123 | left: 100%; } } 124 | @keyframes loading { 125 | from { 126 | left: -25%; } 127 | to { 128 | left: 100%; } } 129 | -------------------------------------------------------------------------------- /css/plugins/file.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * froala_editor v4.5.2 (https://www.froala.com/wysiwyg-editor) 3 | * License https://froala.com/wysiwyg-editor/terms/ 4 | * Copyright 2014-2025 Froala Labs 5 | */ 6 | 7 | .fr-clearfix::after{clear:both;display:block;content:"";height:0}.fr-hide-by-clipping{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.fr-popup .fr-file-upload-layer{border:dashed 2px #bdbdbd;padding:25px 0;margin:20px;position:relative;font-size:14px;letter-spacing:1px;line-height:140%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;text-align:center}.fr-popup .fr-file-upload-layer:hover{background:#ebebeb}.fr-popup .fr-file-upload-layer.fr-drop{background:#ebebeb;border-color:#0098f7}.fr-popup .fr-file-upload-layer .fr-form{-webkit-opacity:0;-moz-opacity:0;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";position:absolute;top:0;bottom:0;left:0;right:0;z-index:2147483640;overflow:hidden;margin:0 !important;padding:0 !important;width:100% !important}.fr-popup .fr-file-upload-layer .fr-form input{cursor:pointer;position:absolute;right:0;top:0;bottom:0;width:500%;height:100%;margin:0;font-size:400px}.fr-popup .fr-file-progress-bar-layer{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.fr-popup .fr-file-progress-bar-layer>h3{font-size:16px;margin:10px 0;font-weight:normal}.fr-popup .fr-file-progress-bar-layer>div.fr-action-buttons{display:none}.fr-popup .fr-file-progress-bar-layer>div.fr-loader{background:#b3e0fd;height:10px;width:100%;margin-top:20px;overflow:hidden;position:relative}.fr-popup .fr-file-progress-bar-layer>div.fr-loader span{display:block;height:100%;width:0%;background:#0098f7;-webkit-transition:width 0.2s ease 0s;-moz-transition:width 0.2s ease 0s;-ms-transition:width 0.2s ease 0s;-o-transition:width 0.2s ease 0s}.fr-popup .fr-file-progress-bar-layer>div.fr-loader.fr-indeterminate span{width:30% !important;position:absolute;top:0;-webkit-animation:loading 2s linear infinite;-moz-animation:loading 2s linear infinite;-o-animation:loading 2s linear infinite;animation:loading 2s linear infinite}.fr-popup .fr-file-progress-bar-layer.fr-error>div.fr-loader{display:none}.fr-popup .fr-file-progress-bar-layer.fr-error>div.fr-action-buttons{display:block}@keyframes loading{from{left:-25%}to{left:100%}}@-webkit-keyframes loading{from{left:-25%}to{left:100%}}@-moz-keyframes loading{from{left:-25%}to{left:100%}}@-o-keyframes loading{from{left:-25%}to{left:100%}}@keyframes loading{from{left:-25%}to{left:100%}} 8 | -------------------------------------------------------------------------------- /css/plugins/filestack.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * froala_editor v4.5.2 (https://www.froala.com/wysiwyg-editor) 3 | * License https://froala.com/wysiwyg-editor/terms/ 4 | * Copyright 2014-2025 Froala Labs 5 | */ 6 | 7 | .fr-popup .fr-command.fr-btn[data-cmd="filestackIcon"] svg path, 8 | .fr-popup .fr-command.fr-btn[data-cmd="openFilePickerVideo"] svg path, 9 | .fr-popup .fr-command.fr-btn[data-cmd="openFilePickerImage"] svg path, 10 | .fr-toolbar .fr-command.fr-btn[data-cmd="openFilePicker"] svg path, 11 | .fr-toolbar .fr-command.fr-btn[data-cmd="openFilePickerImage"] svg path, 12 | .fr-popup .fr-tabs .fr-command.fr-btn[data-cmd="openFilePicker"] svg path, 13 | .fr-popup .fr-tabs .fr-command.fr-btn[data-cmd="openFilePickerImage"] svg path, 14 | .fr-popup .fr-tabs .fr-command.fr-btn[data-cmd="openFilePickerVideo"] svg path, 15 | .fr-command.fr-btn[data-cmd="openFilePickerReplaceImageOnly"] svg path, 16 | .fr-command.fr-btn[data-cmd="openFilePickerReplaceVideoOnly"] svg path, 17 | .fr-toolbar .fr-command.fr-btn[data-cmd="openFilePickerVideo"] svg path, 18 | .fr-toolbar .fr-command.fr-btn[data-cmd="openFilePickerImageOnly"] svg path:last-child, 19 | .fr-toolbar .fr-command.fr-btn[data-cmd="openFilePickerVideoOnly"] svg path:last-child, 20 | .fr-popup .fr-command.fr-btn[data-cmd="openFilePickerImage"] svg path, 21 | .fr-popup .fr-command.fr-btn[data-cmd="openFilePickerVideo"] svg path, 22 | .fr-popup .fr-command.fr-btn[data-cmd="filestackIcon"] svg path, 23 | .fr-popup .fr-command.fr-btn[data-cmd="openFilePickerFile"] svg path { 24 | fill: #ef4a25; } 25 | 26 | .fr-command.fr-filestack-active.fr-btn.fr-filestack-active svg path { 27 | fill: #0098F7; } 28 | 29 | .fsp-picker-appear-active { 30 | position: absolute; 31 | top: 50%; 32 | left: 50%; 33 | transform: translate(-50%, -50%); 34 | z-index: 9; } 35 | 36 | body.fr-fullscreen .fs-transforms-container { 37 | position: absolute; 38 | z-index: 2247483660; } 39 | 40 | .fsp-notifications__container { 41 | position: fixed !important; } 42 | -------------------------------------------------------------------------------- /css/plugins/filestack.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * froala_editor v4.5.2 (https://www.froala.com/wysiwyg-editor) 3 | * License https://froala.com/wysiwyg-editor/terms/ 4 | * Copyright 2014-2025 Froala Labs 5 | */ 6 | 7 | .fr-popup .fr-command.fr-btn[data-cmd="filestackIcon"] svg path,.fr-popup .fr-command.fr-btn[data-cmd="openFilePickerVideo"] svg path,.fr-popup .fr-command.fr-btn[data-cmd="openFilePickerImage"] svg path,.fr-toolbar .fr-command.fr-btn[data-cmd="openFilePicker"] svg path,.fr-toolbar .fr-command.fr-btn[data-cmd="openFilePickerImage"] svg path,.fr-popup .fr-tabs .fr-command.fr-btn[data-cmd="openFilePicker"] svg path,.fr-popup .fr-tabs .fr-command.fr-btn[data-cmd="openFilePickerImage"] svg path,.fr-popup .fr-tabs .fr-command.fr-btn[data-cmd="openFilePickerVideo"] svg path,.fr-command.fr-btn[data-cmd="openFilePickerReplaceImageOnly"] svg path,.fr-command.fr-btn[data-cmd="openFilePickerReplaceVideoOnly"] svg path,.fr-toolbar .fr-command.fr-btn[data-cmd="openFilePickerVideo"] svg path,.fr-toolbar .fr-command.fr-btn[data-cmd="openFilePickerImageOnly"] svg path:last-child,.fr-toolbar .fr-command.fr-btn[data-cmd="openFilePickerVideoOnly"] svg path:last-child,.fr-popup .fr-command.fr-btn[data-cmd="openFilePickerImage"] svg path,.fr-popup .fr-command.fr-btn[data-cmd="openFilePickerVideo"] svg path,.fr-popup .fr-command.fr-btn[data-cmd="filestackIcon"] svg path,.fr-popup .fr-command.fr-btn[data-cmd="openFilePickerFile"] svg path{fill:#ef4a25}.fr-command.fr-filestack-active.fr-btn.fr-filestack-active svg path{fill:#0098F7}.fsp-picker-appear-active{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);z-index:9}body.fr-fullscreen .fs-transforms-container{position:absolute;z-index:2247483660}.fsp-notifications__container{position:fixed !important} 8 | -------------------------------------------------------------------------------- /css/plugins/fullscreen.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * froala_editor v4.5.2 (https://www.froala.com/wysiwyg-editor) 3 | * License https://froala.com/wysiwyg-editor/terms/ 4 | * Copyright 2014-2025 Froala Labs 5 | */ 6 | 7 | .fr-clearfix::after { 8 | clear: both; 9 | display: block; 10 | content: ""; 11 | height: 0; } 12 | 13 | .fr-hide-by-clipping { 14 | position: absolute; 15 | width: 1px; 16 | height: 1px; 17 | padding: 0; 18 | margin: -1px; 19 | overflow: hidden; 20 | clip: rect(0, 0, 0, 0); 21 | border: 0; } 22 | 23 | body.fr-fullscreen { 24 | overflow: hidden; 25 | height: 100%; 26 | width: 100%; 27 | position: fixed; } 28 | 29 | .fr-box.fr-fullscreen { 30 | margin: 0 !important; 31 | position: fixed; 32 | top: 0; 33 | left: 0; 34 | bottom: 0; 35 | right: 0; 36 | z-index: 2147483630 !important; 37 | width: auto !important; } 38 | .fr-box.fr-fullscreen .fr-wrapper { 39 | background-color: #FFF; } 40 | .fr-box.fr-fullscreen.fr-basic.fr-top .fr-wrapper { 41 | border-radius: 0; 42 | -moz-border-radius: 0; 43 | -webkit-border-radius: 0; 44 | -moz-background-clip: padding; 45 | -webkit-background-clip: padding-box; 46 | background-clip: padding-box; } 47 | .fr-box.fr-fullscreen.fr-basic.fr-bottom .fr-wrapper { 48 | border-radius: 0; 49 | -moz-border-radius: 0; 50 | -webkit-border-radius: 0; 51 | -moz-background-clip: padding; 52 | -webkit-background-clip: padding-box; 53 | background-clip: padding-box; } 54 | .fr-box.fr-fullscreen .fr-toolbar { 55 | border-radius: 0; 56 | -moz-border-radius: 0; 57 | -webkit-border-radius: 0; 58 | -moz-background-clip: padding; 59 | -webkit-background-clip: padding-box; 60 | background-clip: padding-box; } 61 | .fr-box.fr-fullscreen .fr-toolbar.fr-top { 62 | top: 0 !important; } 63 | .fr-box.fr-fullscreen .fr-toolbar.fr-bottom { 64 | bottom: 0 !important; } 65 | .fr-box.fr-fullscreen .fr-second-toolbar { 66 | margin-top: 0; 67 | border-radius: 0; 68 | -moz-border-radius: 0; 69 | -webkit-border-radius: 0; 70 | -moz-background-clip: padding; 71 | -webkit-background-clip: padding-box; 72 | background-clip: padding-box; } 73 | 74 | .fr-fullscreen-wrapper { 75 | z-index: 2147483640 !important; 76 | width: 100% !important; 77 | margin: 0 !important; 78 | padding: 0 !important; 79 | overflow: visible !important; } 80 | -------------------------------------------------------------------------------- /css/plugins/fullscreen.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * froala_editor v4.5.2 (https://www.froala.com/wysiwyg-editor) 3 | * License https://froala.com/wysiwyg-editor/terms/ 4 | * Copyright 2014-2025 Froala Labs 5 | */ 6 | 7 | .fr-clearfix::after{clear:both;display:block;content:"";height:0}.fr-hide-by-clipping{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}body.fr-fullscreen{overflow:hidden;height:100%;width:100%;position:fixed}.fr-box.fr-fullscreen{margin:0 !important;position:fixed;top:0;left:0;bottom:0;right:0;z-index:2147483630 !important;width:auto !important}.fr-box.fr-fullscreen .fr-wrapper{background-color:#FFF}.fr-box.fr-fullscreen.fr-basic.fr-top .fr-wrapper{border-radius:0;-moz-border-radius:0;-webkit-border-radius:0;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box}.fr-box.fr-fullscreen.fr-basic.fr-bottom .fr-wrapper{border-radius:0;-moz-border-radius:0;-webkit-border-radius:0;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box}.fr-box.fr-fullscreen .fr-toolbar{border-radius:0;-moz-border-radius:0;-webkit-border-radius:0;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box}.fr-box.fr-fullscreen .fr-toolbar.fr-top{top:0 !important}.fr-box.fr-fullscreen .fr-toolbar.fr-bottom{bottom:0 !important}.fr-box.fr-fullscreen .fr-second-toolbar{margin-top:0;border-radius:0;-moz-border-radius:0;-webkit-border-radius:0;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box}.fr-fullscreen-wrapper{z-index:2147483640 !important;width:100% !important;margin:0 !important;padding:0 !important;overflow:visible !important} 8 | -------------------------------------------------------------------------------- /css/plugins/help.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * froala_editor v4.5.2 (https://www.froala.com/wysiwyg-editor) 3 | * License https://froala.com/wysiwyg-editor/terms/ 4 | * Copyright 2014-2025 Froala Labs 5 | */ 6 | 7 | .fr-clearfix::after { 8 | clear: both; 9 | display: block; 10 | content: ""; 11 | height: 0; } 12 | 13 | .fr-hide-by-clipping { 14 | position: absolute; 15 | width: 1px; 16 | height: 1px; 17 | padding: 0; 18 | margin: -1px; 19 | overflow: hidden; 20 | clip: rect(0, 0, 0, 0); 21 | border: 0; } 22 | 23 | .fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal { 24 | text-align: left; 25 | padding: 20px 20px 10px; } 26 | .fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table { 27 | border-collapse: collapse; 28 | font-size: 14px; 29 | line-height: 1.5; 30 | width: 100%; } 31 | .fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table + table { 32 | margin-top: 20px; } 33 | .fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table tr { 34 | border: 0; } 35 | .fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table th { 36 | text-align: left; } 37 | .fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table th, .fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table td { 38 | padding: 6px 0 4px; } 39 | .fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table tbody tr { 40 | border-bottom: solid 1px #ebebeb; } 41 | .fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table tbody td:first-child { 42 | width: 60%; 43 | color: #646464; } 44 | .fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table tbody td:nth-child(n+2) { 45 | letter-spacing: 0.5px; } 46 | -------------------------------------------------------------------------------- /css/plugins/help.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * froala_editor v4.5.2 (https://www.froala.com/wysiwyg-editor) 3 | * License https://froala.com/wysiwyg-editor/terms/ 4 | * Copyright 2014-2025 Froala Labs 5 | */ 6 | 7 | .fr-clearfix::after{clear:both;display:block;content:"";height:0}.fr-hide-by-clipping{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal{text-align:left;padding:20px 20px 10px}.fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table{border-collapse:collapse;font-size:14px;line-height:1.5;width:100%}.fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table+table{margin-top:20px}.fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table tr{border:0}.fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table th{text-align:left}.fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table th,.fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table td{padding:6px 0 4px}.fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table tbody tr{border-bottom:solid 1px #ebebeb}.fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table tbody td:first-child{width:60%;color:#646464}.fr-modal .fr-modal-wrapper .fr-modal-body .fr-help-modal table tbody td:nth-child(n+2){letter-spacing:0.5px} 8 | -------------------------------------------------------------------------------- /css/plugins/image.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * froala_editor v4.5.2 (https://www.froala.com/wysiwyg-editor) 3 | * License https://froala.com/wysiwyg-editor/terms/ 4 | * Copyright 2014-2025 Froala Labs 5 | */ 6 | 7 | .fr-clearfix::after{clear:both;display:block;content:"";height:0}.fr-hide-by-clipping{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.fr-element img{cursor:pointer;padding:0 1px}.fr-image-resizer{position:absolute;border:solid 1px #0098f7;display:none;user-select:none;-o-user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.fr-image-resizer.fr-active{display:block}.fr-image-resizer .fr-handler{display:block;position:absolute;background:#0098f7;border:solid 1px #FFF;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;z-index:4;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.fr-image-resizer .fr-handler.fr-hnw{cursor:nw-resize}.fr-image-resizer .fr-handler.fr-hne{cursor:ne-resize}.fr-image-resizer .fr-handler.fr-hsw{cursor:sw-resize}.fr-image-resizer .fr-handler.fr-hse{cursor:se-resize}.fr-image-resizer .fr-handler{width:12px;height:12px}.fr-image-resizer .fr-handler.fr-hnw{left:-6px;top:-6px}.fr-image-resizer .fr-handler.fr-hne{right:-6px;top:-6px}.fr-image-resizer .fr-handler.fr-hsw{left:-6px;bottom:-6px}.fr-image-resizer .fr-handler.fr-hse{right:-6px;bottom:-6px}@media (min-width: 1200px){.fr-image-resizer .fr-handler{width:10px;height:10px}.fr-image-resizer .fr-handler.fr-hnw{left:-5px;top:-5px}.fr-image-resizer .fr-handler.fr-hne{right:-5px;top:-5px}.fr-image-resizer .fr-handler.fr-hsw{left:-5px;bottom:-5px}.fr-image-resizer .fr-handler.fr-hse{right:-5px;bottom:-5px}}.fr-image-overlay{position:fixed;top:0;left:0;bottom:0;right:0;z-index:2147483640;display:none}.fr-popup .fr-image-upload-layer{border:dashed 2px #bdbdbd;padding:25px 0;margin:20px;position:relative;font-size:14px;letter-spacing:1px;line-height:140%;text-align:center}.fr-popup .fr-image-upload-layer:hover{background:#ebebeb}.fr-popup .fr-image-upload-layer.fr-drop{background:#ebebeb;border-color:#0098f7}.fr-popup .fr-image-upload-layer .fr-form{-webkit-opacity:0;-moz-opacity:0;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";position:absolute;top:0;bottom:0;left:0;right:0;z-index:2147483640;overflow:hidden;margin:0 !important;padding:0 !important;width:100% !important}.fr-popup .fr-image-upload-layer .fr-form input{cursor:pointer;position:absolute;right:0;top:0;bottom:0;width:500%;height:100%;margin:0;font-size:400px}.fr-popup .fr-image-progress-bar-layer>h3{font-size:16px;margin:10px 0;font-weight:normal}.fr-popup .fr-image-progress-bar-layer>div.fr-action-buttons{display:none}.fr-popup .fr-image-progress-bar-layer>div.fr-loader{background:#b3e0fd;height:10px;width:100%;margin-top:20px;overflow:hidden;position:relative}.fr-popup .fr-image-progress-bar-layer>div.fr-loader span{display:block;height:100%;width:0%;background:#0098f7;-webkit-transition:width 0.2s ease 0s;-moz-transition:width 0.2s ease 0s;-ms-transition:width 0.2s ease 0s;-o-transition:width 0.2s ease 0s}.fr-popup .fr-image-progress-bar-layer>div.fr-loader.fr-indeterminate span{width:30% !important;position:absolute;top:0;-webkit-animation:loading 2s linear infinite;-moz-animation:loading 2s linear infinite;-o-animation:loading 2s linear infinite;animation:loading 2s linear infinite}.fr-popup .fr-image-progress-bar-layer.fr-error>div.fr-loader{display:none}.fr-popup .fr-image-progress-bar-layer.fr-error>div.fr-action-buttons{display:block}.fr-image-size-layer .fr-image-group .fr-input-line{width:calc(50% - 5px);display:inline-block}.fr-image-size-layer .fr-image-group .fr-input-line+.fr-input-line{margin-left:10px}.fr-uploading{-webkit-opacity:.4;-moz-opacity:.4;opacity:.4;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"}@-webkit-keyframes loading{from{left:-25%}to{left:100%}}@-moz-keyframes loading{from{left:-25%}to{left:100%}}@-o-keyframes loading{from{left:-25%}to{left:100%}}@keyframes loading{from{left:-25%}to{left:100%}}img.fr-draggable{user-select:none} 8 | -------------------------------------------------------------------------------- /css/plugins/line_breaker.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * froala_editor v4.5.2 (https://www.froala.com/wysiwyg-editor) 3 | * License https://froala.com/wysiwyg-editor/terms/ 4 | * Copyright 2014-2025 Froala Labs 5 | */ 6 | 7 | .fr-clearfix::after { 8 | clear: both; 9 | display: block; 10 | content: ""; 11 | height: 0; } 12 | 13 | .fr-hide-by-clipping { 14 | position: absolute; 15 | width: 1px; 16 | height: 1px; 17 | padding: 0; 18 | margin: -1px; 19 | overflow: hidden; 20 | clip: rect(0, 0, 0, 0); 21 | border: 0; } 22 | 23 | .fr-line-breaker { 24 | cursor: text; 25 | border-top: 1px solid #0098f7; 26 | position: fixed; 27 | z-index: 2; 28 | display: none; } 29 | .fr-line-breaker.fr-visible { 30 | display: block; } 31 | .fr-line-breaker a.fr-floating-btn { 32 | position: absolute; 33 | left: calc(50% - (40px / 2)); 34 | top: -20px; } 35 | .fr-line-breaker a.fr-floating-btn svg { 36 | margin: 8px; 37 | height: 24px; 38 | width: 24px; } 39 | -------------------------------------------------------------------------------- /css/plugins/line_breaker.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * froala_editor v4.5.2 (https://www.froala.com/wysiwyg-editor) 3 | * License https://froala.com/wysiwyg-editor/terms/ 4 | * Copyright 2014-2025 Froala Labs 5 | */ 6 | 7 | .fr-clearfix::after{clear:both;display:block;content:"";height:0}.fr-hide-by-clipping{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.fr-line-breaker{cursor:text;border-top:1px solid #0098f7;position:fixed;z-index:2;display:none}.fr-line-breaker.fr-visible{display:block}.fr-line-breaker a.fr-floating-btn{position:absolute;left:calc(50% - (40px / 2));top:-20px}.fr-line-breaker a.fr-floating-btn svg{margin:8px;height:24px;width:24px} 8 | -------------------------------------------------------------------------------- /css/plugins/markdown.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * froala_editor v4.5.2 (https://www.froala.com/wysiwyg-editor) 3 | * License https://froala.com/wysiwyg-editor/terms/ 4 | * Copyright 2014-2025 Froala Labs 5 | */ 6 | 7 | .fr-clearfix::after { 8 | clear: both; 9 | display: block; 10 | content: ""; 11 | height: 0; } 12 | 13 | .fr-hide-by-clipping { 14 | position: absolute; 15 | width: 1px; 16 | height: 1px; 17 | padding: 0; 18 | margin: -1px; 19 | overflow: hidden; 20 | clip: rect(0, 0, 0, 0); 21 | border: 0; } 22 | 23 | .fr-wrapper-markdown { 24 | display: flex; } 25 | 26 | .fr-markdown-view { 27 | width: calc(52% - 1px); 28 | box-sizing: inherit; } 29 | 30 | .fr-markdown-editor { 31 | width: calc(48% - 1px); 32 | box-sizing: inherit; 33 | background-color: #eee; } 34 | 35 | .fr-markdown-editor > p { 36 | margin: 0; } 37 | 38 | .fr-markdown-view > p { 39 | margin-top: 0; } 40 | 41 | .gutter-horizontal { 42 | display: flex; 43 | z-index: 9; 44 | background-color: #dadada; 45 | cursor: col-resize; 46 | width: 2px; } 47 | 48 | .e-resize-handler { 49 | z-index: 9; 50 | width: 1px; 51 | display: flex; 52 | justify-content: center; 53 | align-items: center; 54 | align-self: center; 55 | position: relative; 56 | font-size: 10px; 57 | color: #c5c5c5; } 58 | 59 | .fr-markdown-view > dl { 60 | margin-top: 0; 61 | margin-bottom: 1rem; } 62 | 63 | .fr-markdown-view > dt { 64 | font-weight: 700; } 65 | 66 | .fr-markdown-view > dd { 67 | margin-bottom: .5rem; 68 | margin-left: 0; } 69 | 70 | .fr-markdown-view > pre { 71 | white-space: pre-wrap; 72 | white-space: -moz-pre-wrap; 73 | white-space: -pre-wrap; 74 | white-space: -o-pre-wrap; 75 | word-wrap: break-word; 76 | background-color: #f8f8f8; 77 | border: 1px solid #dfdfdf; 78 | margin-top: 1.5em; 79 | margin-bottom: 1.5em; 80 | padding: 0.125rem 0.3125rem 0.0625rem; } 81 | 82 | .fr-markdown-view > code { 83 | background-color: #f8f8f8; 84 | border-color: #dfdfdf; 85 | border-style: solid; 86 | border-width: 1px; 87 | color: #333; 88 | font-family: Consolas,"Liberation Mono",Courier,monospace; 89 | font-weight: normal; 90 | padding: 0.125rem 0.3125rem 0.0625rem; } 91 | 92 | .fr-markdown-view > pre code { 93 | background-color: transparent; 94 | border: 0; 95 | padding: 0; } 96 | 97 | .fr-markdown-view > sup { 98 | top: -.5em; } 99 | 100 | .footnote-a { 101 | color: #007bff; 102 | text-decoration: none; 103 | background-color: transparent; } 104 | 105 | .fr-markdown-view > hr { 106 | margin-top: 1rem; 107 | margin-bottom: 1rem; 108 | border: 0; 109 | border-top: 1px solid rgba(0, 0, 0, 0.1); } 110 | 111 | .blockquote { 112 | margin: 0 0 1rem; 113 | border-left: 5px solid #eee; 114 | padding: 10px 20px; 115 | font-size: 1.25rem; } 116 | 117 | .fr-markdown-view > table { 118 | width: 100%; 119 | max-width: 100%; 120 | margin-bottom: 20px; 121 | background-color: transparent; 122 | border-spacing: 0; 123 | border-collapse: collapse; } 124 | 125 | .fr-markdown-view > table > tbody > tr > td, 126 | .fr-markdown-view > table > tbody > tr > th, 127 | .fr-markdown-view > table > thead > tr > td, 128 | .fr-markdown-view > table > thead > tr > th { 129 | padding: 8px; 130 | line-height: 1.42857143; 131 | vertical-align: top; 132 | border: 1px solid #ddd; } 133 | 134 | .fr-markdown-view > table > thead > tr > td, 135 | .fr-markdown-view > table > thead > tr > th { 136 | border-bottom-width: 2px; } 137 | 138 | .fr-markdown-view > table > tbody > tr:nth-of-type(odd) { 139 | background-color: #f9f9f9; } 140 | 141 | .fr-markdown-view > a { 142 | color: #337ab7; 143 | text-decoration: none; } 144 | 145 | .fr-markdown-view > h1 { 146 | font-size: 2em !important; } 147 | 148 | .fr-markdown-view > h2 { 149 | font-size: 1.5em !important; } 150 | -------------------------------------------------------------------------------- /css/plugins/markdown.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * froala_editor v4.5.2 (https://www.froala.com/wysiwyg-editor) 3 | * License https://froala.com/wysiwyg-editor/terms/ 4 | * Copyright 2014-2025 Froala Labs 5 | */ 6 | 7 | .fr-clearfix::after{clear:both;display:block;content:"";height:0}.fr-hide-by-clipping{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.fr-wrapper-markdown{display:flex}.fr-markdown-view{width:calc(52% - 1px);box-sizing:inherit}.fr-markdown-editor{width:calc(48% - 1px);box-sizing:inherit;background-color:#eee}.fr-markdown-editor>p{margin:0}.fr-markdown-view>p{margin-top:0}.gutter-horizontal{display:flex;z-index:9;background-color:#dadada;cursor:col-resize;width:2px}.e-resize-handler{z-index:9;width:1px;display:flex;justify-content:center;align-items:center;align-self:center;position:relative;font-size:10px;color:#c5c5c5}.fr-markdown-view>dl{margin-top:0;margin-bottom:1rem}.fr-markdown-view>dt{font-weight:700}.fr-markdown-view>dd{margin-bottom:.5rem;margin-left:0}.fr-markdown-view>pre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word;background-color:#f8f8f8;border:1px solid #dfdfdf;margin-top:1.5em;margin-bottom:1.5em;padding:0.125rem 0.3125rem 0.0625rem}.fr-markdown-view>code{background-color:#f8f8f8;border-color:#dfdfdf;border-style:solid;border-width:1px;color:#333;font-family:Consolas,"Liberation Mono",Courier,monospace;font-weight:normal;padding:0.125rem 0.3125rem 0.0625rem}.fr-markdown-view>pre code{background-color:transparent;border:0;padding:0}.fr-markdown-view>sup{top:-.5em}.footnote-a{color:#007bff;text-decoration:none;background-color:transparent}.fr-markdown-view>hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,0.1)}.blockquote{margin:0 0 1rem;border-left:5px solid #eee;padding:10px 20px;font-size:1.25rem}.fr-markdown-view>table{width:100%;max-width:100%;margin-bottom:20px;background-color:transparent;border-spacing:0;border-collapse:collapse}.fr-markdown-view>table>tbody>tr>td,.fr-markdown-view>table>tbody>tr>th,.fr-markdown-view>table>thead>tr>td,.fr-markdown-view>table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border:1px solid #ddd}.fr-markdown-view>table>thead>tr>td,.fr-markdown-view>table>thead>tr>th{border-bottom-width:2px}.fr-markdown-view>table>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.fr-markdown-view>a{color:#337ab7;text-decoration:none}.fr-markdown-view>h1{font-size:2em !important}.fr-markdown-view>h2{font-size:1.5em !important} 8 | -------------------------------------------------------------------------------- /css/plugins/quick_insert.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * froala_editor v4.5.2 (https://www.froala.com/wysiwyg-editor) 3 | * License https://froala.com/wysiwyg-editor/terms/ 4 | * Copyright 2014-2025 Froala Labs 5 | */ 6 | 7 | .fr-clearfix::after { 8 | clear: both; 9 | display: block; 10 | content: ""; 11 | height: 0; } 12 | 13 | .fr-hide-by-clipping { 14 | position: absolute; 15 | width: 1px; 16 | height: 1px; 17 | padding: 0; 18 | margin: -1px; 19 | overflow: hidden; 20 | clip: rect(0, 0, 0, 0); 21 | border: 0; } 22 | 23 | .fr-quick-insert { 24 | position: absolute; 25 | z-index: 2147483639; 26 | white-space: nowrap; 27 | padding-right: 10px; 28 | -webkit-box-sizing: content-box; 29 | -moz-box-sizing: content-box; 30 | box-sizing: content-box; } 31 | .fr-quick-insert a.fr-floating-btn svg { 32 | margin: 8px; 33 | width: 24px; 34 | height: 24px; } 35 | .fr-quick-insert.fr-on a.fr-floating-btn svg { 36 | -webkit-transform: rotate(135deg); 37 | -moz-transform: rotate(135deg); 38 | -ms-transform: rotate(135deg); 39 | -o-transform: rotate(135deg); } 40 | .fr-quick-insert.fr-hidden { 41 | display: none; } 42 | 43 | .fr-qi-helper { 44 | position: absolute; 45 | z-index: 3; 46 | padding-left: 20px; 47 | white-space: nowrap; } 48 | .fr-qi-helper a.fr-btn.fr-floating-btn { 49 | text-align: center; 50 | padding: 6px 10px 10px 10px; 51 | display: inline-block; 52 | color: #222222; 53 | background: #FFF; 54 | -webkit-opacity: 0; 55 | -moz-opacity: 0; 56 | opacity: 0; 57 | -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; 58 | -webkit-transform: scale(0); 59 | -moz-transform: scale(0); 60 | -ms-transform: scale(0); 61 | -o-transform: scale(0); } 62 | .fr-qi-helper a.fr-btn.fr-floating-btn svg { 63 | fill: #222222; } 64 | .fr-qi-helper a.fr-btn.fr-floating-btn.fr-size-1 { 65 | -webkit-opacity: 1; 66 | -moz-opacity: 1; 67 | opacity: 1; 68 | -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; 69 | -webkit-transform: scale(1); 70 | -moz-transform: scale(1); 71 | -ms-transform: scale(1); 72 | -o-transform: scale(1); } 73 | -------------------------------------------------------------------------------- /css/plugins/quick_insert.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * froala_editor v4.5.2 (https://www.froala.com/wysiwyg-editor) 3 | * License https://froala.com/wysiwyg-editor/terms/ 4 | * Copyright 2014-2025 Froala Labs 5 | */ 6 | 7 | .fr-clearfix::after{clear:both;display:block;content:"";height:0}.fr-hide-by-clipping{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.fr-quick-insert{position:absolute;z-index:2147483639;white-space:nowrap;padding-right:10px;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.fr-quick-insert a.fr-floating-btn svg{margin:8px;width:24px;height:24px}.fr-quick-insert.fr-on a.fr-floating-btn svg{-webkit-transform:rotate(135deg);-moz-transform:rotate(135deg);-ms-transform:rotate(135deg);-o-transform:rotate(135deg)}.fr-quick-insert.fr-hidden{display:none}.fr-qi-helper{position:absolute;z-index:3;padding-left:20px;white-space:nowrap}.fr-qi-helper a.fr-btn.fr-floating-btn{text-align:center;padding:6px 10px 10px 10px;display:inline-block;color:#222;background:#FFF;-webkit-opacity:0;-moz-opacity:0;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";-webkit-transform:scale(0);-moz-transform:scale(0);-ms-transform:scale(0);-o-transform:scale(0)}.fr-qi-helper a.fr-btn.fr-floating-btn svg{fill:#222}.fr-qi-helper a.fr-btn.fr-floating-btn.fr-size-1{-webkit-opacity:1;-moz-opacity:1;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1)} 8 | -------------------------------------------------------------------------------- /css/plugins/special_characters.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * froala_editor v4.5.2 (https://www.froala.com/wysiwyg-editor) 3 | * License https://froala.com/wysiwyg-editor/terms/ 4 | * Copyright 2014-2025 Froala Labs 5 | */ 6 | 7 | .fr-clearfix::after { 8 | clear: both; 9 | display: block; 10 | content: ""; 11 | height: 0; } 12 | 13 | .fr-hide-by-clipping { 14 | position: absolute; 15 | width: 1px; 16 | height: 1px; 17 | padding: 0; 18 | margin: -1px; 19 | overflow: hidden; 20 | clip: rect(0, 0, 0, 0); 21 | border: 0; } 22 | 23 | .fr-popup .fr-buttons.fr-tabs .fr-special-character-category { 24 | padding: 10px 15px; } 25 | .fr-popup .fr-buttons.fr-tabs .fr-special-character-category span { 26 | font-weight: normal; 27 | font-size: 16px; } 28 | .fr-popup .fr-special-character { 29 | width: 24px; 30 | height: 24px; } 31 | @media screen and (-ms-high-contrast: active) and (min-width: 768px), (-ms-high-contrast: none) and (min-width: 768px) { 32 | .fr-popup .fr-icon-container.fr-sc-container { 33 | width: 368px; } } 34 | -------------------------------------------------------------------------------- /css/plugins/special_characters.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * froala_editor v4.5.2 (https://www.froala.com/wysiwyg-editor) 3 | * License https://froala.com/wysiwyg-editor/terms/ 4 | * Copyright 2014-2025 Froala Labs 5 | */ 6 | 7 | .fr-clearfix::after{clear:both;display:block;content:"";height:0}.fr-hide-by-clipping{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.fr-popup .fr-buttons.fr-tabs .fr-special-character-category{padding:10px 15px}.fr-popup .fr-buttons.fr-tabs .fr-special-character-category span{font-weight:normal;font-size:16px}.fr-popup .fr-special-character{width:24px;height:24px}@media screen and (-ms-high-contrast: active) and (min-width: 768px), (-ms-high-contrast: none) and (min-width: 768px){.fr-popup .fr-icon-container.fr-sc-container{width:368px}} 8 | -------------------------------------------------------------------------------- /css/plugins/table.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * froala_editor v4.5.2 (https://www.froala.com/wysiwyg-editor) 3 | * License https://froala.com/wysiwyg-editor/terms/ 4 | * Copyright 2014-2025 Froala Labs 5 | */ 6 | 7 | .fr-clearfix::after{clear:both;display:block;content:"";height:0}.fr-hide-by-clipping{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.fr-element table td.fr-selected-cell,.fr-element table th.fr-selected-cell{border:1px double #0098f7;position:relative}.fr-element table td.fr-selected-cell:after,.fr-element table th.fr-selected-cell:after{content:"";position:absolute;top:0;left:0;width:100%;height:100%;background-color:rgba(0,100,255,0.15);pointer-events:none}.fr-element table td,.fr-element table th{user-select:text;-o-user-select:text;-moz-user-select:text;-khtml-user-select:text;-webkit-user-select:text;-ms-user-select:text}.fr-element .fr-no-selection table td,.fr-element .fr-no-selection table th{user-select:none;-o-user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none}.fr-table-resizer{cursor:col-resize;position:absolute;z-index:3;display:none}.fr-table-resizer.fr-moving{z-index:2}.fr-table-resizer div{-webkit-opacity:0;-moz-opacity:0;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";border-right:1px solid #0098f7}.fr-no-selection{user-select:none;-o-user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none}.fr-table-selector{display:block;position:absolute;z-index:9999;width:16px;height:16px;padding:3px;border:transparent 2px solid;border-radius:4px 4px 0 0}.fr-table-selector a{width:16px;height:16px;display:block}.fr-table-selector a>svg{width:16px;height:16px}.fr-table-selector-active{opacity:1;visibility:visible;border:#fdcf00 2px solid}.fr-table-selector-active a>svg{color:#fdcf00}.fr-table-selector-active-selected{border:#0d65ff 2px solid}.fr-table-selector-active-selected a>svg{color:#0d65ff}.fr-table-selector-inactive{opacity:0;visibility:hidden}.fr-view .fr-table-selection-hover{outline:#fdcf00 2px solid}.fr-view .fr-table-selected{outline:#0d65ff 2px solid;caret-color:transparent}.fr-popup .fr-table-size{margin:20px}.fr-popup .fr-table-size .fr-table-size-info{text-align:center;font-size:14px}.fr-popup .fr-table-size .fr-select-table-size{line-height:0;padding:5px;white-space:nowrap}.fr-popup .fr-table-size .fr-select-table-size>span{display:inline-block;padding:0 4px 4px 0;background:transparent}.fr-popup .fr-table-size .fr-select-table-size>span>span{display:inline-block;width:18px;height:18px;border:1px solid #DDD}.fr-popup .fr-table-size .fr-select-table-size>span.hover{background:transparent}.fr-popup .fr-table-size .fr-select-table-size>span.hover>span{background:rgba(0,152,247,0.3);border:solid 1px #0098f7}.fr-popup .fr-table-size .fr-select-table-size .new-line::after{clear:both;display:block;content:"";height:0}.fr-popup.fr-above .fr-table-size .fr-select-table-size>span{display:inline-block !important}.fr-popup .fr-table-colors{display:block;padding:20px;padding-bottom:0}.fr-popup.fr-desktop .fr-table-size .fr-select-table-size>span>span{width:12px;height:12px}.fr-insert-helper{position:absolute;z-index:9999;white-space:nowrap} 8 | -------------------------------------------------------------------------------- /css/plugins/trim_video.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * froala_editor v4.5.2 (https://www.froala.com/wysiwyg-editor) 3 | * License https://froala.com/wysiwyg-editor/terms/ 4 | * Copyright 2014-2025 Froala Labs 5 | */ 6 | 7 | .fr-clearfix::after{clear:both;display:block;content:"";height:0}.fr-hide-by-clipping{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}#fr-form-container{margin:auto;position:relative;top:10%;background-color:#f5f5f5;width:60%;border-radius:5px;z-index:9002;overflow:auto;background-color:#fefefe}.fr-trim-video-name{font-family:Arial, Helvetica, sans-serif;padding-top:15px}.fr-file-loader{border:4px solid #f3f3f3;border-radius:50%;border-top:4px solid #53777a;display:inline-block !important;-webkit-animation:spin 2s linear infinite;animation:spin 2s linear infinite;width:20px;height:20px;display:block !important;align-items:center}.fr-trim-button{margin-top:5px;height:36px;line-height:1;color:#0098f7;padding:10px;cursor:pointer;text-decoration:none;border:none;background:none;font-size:16px;border-radius:5px;background-color:#eff5fa;outline:none}.fr-trim-button:hover{background:#ebebeb}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.fr-slidecontainer{width:100%}.fr-slider{-webkit-appearance:none;width:100%;height:15px;background:#d3d3d3}.fr-video-trim-buttons{text-align:right;padding-bottom:5px;padding-right:15px;margin-top:10px}.fr-slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:15px;height:15px;border-radius:50%;cursor:pointer}.fr-slider::-moz-range-thumb{width:15px;height:15px;background:#3498db;border-radius:50%;cursor:pointer}.fr-range-value-start{position:absolute}.fr-range-value-start>span{width:60px;height:24px;line-height:24px;text-align:center;background:#03a9f4;color:#fff;font-size:12px;display:block;position:absolute;left:50%;transform:translate(-85%, 0);border-radius:6px}.fr-range-value-start>span:before{content:"";position:absolute;width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;left:86%;margin-left:-5px;margin-top:-1px}.fr-range-value-end{position:absolute}.fr-range-value-end>span{width:60px;height:24px;line-height:24px;text-align:center;background:#03a9f4;color:#fff;font-size:12px;display:block;position:absolute;left:14%;transform:translate(-8%, 0);border-radius:6px}.fr-range-value-end>span:before{content:"";position:absolute;width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;left:14%;margin-left:-5px;margin-top:-1px}#startTimeValue{top:-153% !important}#startTimeValue span:before{border-top:10px solid #03a9f4;top:100%}#endTimeValue{top:-153% !important}#endTimeValue span:before{border-top:10px solid #03a9f4;top:100%}.fr-range-slider{position:relative;width:80%;height:15px}.fr-range-slider>input{pointer-events:none;position:absolute;left:0;top:10px;width:100%;outline:none;height:6px;border-radius:10px}.fr-range-slider>input::-webkit-slider-thumb{pointer-events:all;position:relative;z-index:1;-webkit-appearance:none;appearance:none;width:15px;height:15px;background:#3498db;cursor:pointer;border-radius:7px;margin-top:-3.6px}.fr-range-slider>input::-moz-range-thumb{pointer-events:all;position:relative;z-index:10;-moz-appearance:none;width:9px;height:15px;border-radius:7px;margin-top:-3.6px}.fr-range-slider>input::-moz-range-track{position:relative;z-index:-1;background-color:black;border:0;height:15px;border-radius:50%;margin-top:-3.6px}.fr-range-slider>input:last-of-type::-moz-range-track{-moz-appearance:none;background:none transparent;border:0}.fr-range-slider>input[type="range"]::-moz-focus-outer{border:0}@media screen and (max-width: 430px){.range-value span{width:40px;font-size:10px}#fr-form-container{top:20%}}#fr-video-edit{width:80%;text-align:center;height:50%;margin-bottom:20px;padding-top:8px;padding-bottom:8px} 8 | -------------------------------------------------------------------------------- /css/plugins/video.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * froala_editor v4.5.2 (https://www.froala.com/wysiwyg-editor) 3 | * License https://froala.com/wysiwyg-editor/terms/ 4 | * Copyright 2014-2025 Froala Labs 5 | */ 6 | 7 | .fr-clearfix::after{clear:both;display:block;content:"";height:0}.fr-hide-by-clipping{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.fr-element .fr-video{user-select:none;-o-user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none}.fr-element .fr-video::after{position:absolute;content:'';z-index:1;top:0;left:0;right:0;bottom:0;cursor:pointer;display:block;background:transparent}.fr-element .fr-video.fr-active>*{z-index:2;position:relative}.fr-element .fr-video>*{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;max-width:100%;border:none}.fr-box .fr-video-resizer{position:absolute;border:solid 1px #0098f7;display:none;user-select:none;-o-user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none}.fr-box .fr-video-resizer.fr-active{display:block}.fr-box .fr-video-resizer .fr-handler{display:block;position:absolute;background:#0098f7;border:solid 1px #FFF;z-index:4;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.fr-box .fr-video-resizer .fr-handler.fr-hnw{cursor:nw-resize}.fr-box .fr-video-resizer .fr-handler.fr-hne{cursor:ne-resize}.fr-box .fr-video-resizer .fr-handler.fr-hsw{cursor:sw-resize}.fr-box .fr-video-resizer .fr-handler.fr-hse{cursor:se-resize}.fr-box .fr-video-resizer .fr-handler{width:12px;height:12px}.fr-box .fr-video-resizer .fr-handler.fr-hnw{left:-6px;top:-6px}.fr-box .fr-video-resizer .fr-handler.fr-hne{right:-6px;top:-6px}.fr-box .fr-video-resizer .fr-handler.fr-hsw{left:-6px;bottom:-6px}.fr-box .fr-video-resizer .fr-handler.fr-hse{right:-6px;bottom:-6px}@media (min-width: 1200px){.fr-box .fr-video-resizer .fr-handler{width:10px;height:10px}.fr-box .fr-video-resizer .fr-handler.fr-hnw{left:-5px;top:-5px}.fr-box .fr-video-resizer .fr-handler.fr-hne{right:-5px;top:-5px}.fr-box .fr-video-resizer .fr-handler.fr-hsw{left:-5px;bottom:-5px}.fr-box .fr-video-resizer .fr-handler.fr-hse{right:-5px;bottom:-5px}}.fr-popup .fr-video-size-layer .fr-video-group .fr-input-line{width:calc(50% - 5px);display:inline-block}.fr-popup .fr-video-size-layer .fr-video-group .fr-input-line+.fr-input-line{margin-left:10px}.fr-popup .fr-video-upload-layer{border:dashed 2px #bdbdbd;padding:25px 0;margin:20px;position:relative;font-size:14px;letter-spacing:1px;line-height:140%;text-align:center}.fr-popup .fr-video-upload-layer:hover{background:#ebebeb}.fr-popup .fr-video-upload-layer.fr-drop{background:#ebebeb;border-color:#0098f7}.fr-popup .fr-video-upload-layer .fr-form{-webkit-opacity:0;-moz-opacity:0;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";position:absolute;top:0;bottom:0;left:0;right:0;z-index:2147483640;overflow:hidden;margin:0 !important;padding:0 !important;width:100% !important}.fr-popup .fr-video-upload-layer .fr-form input{cursor:pointer;position:absolute;right:0;top:0;bottom:0;width:500%;height:100%;margin:0;font-size:400px}.fr-popup .fr-video-progress-bar-layer>h3{font-size:16px;margin:10px 0;font-weight:normal}.fr-popup .fr-video-progress-bar-layer>div.fr-action-buttons{display:none}.fr-popup .fr-video-progress-bar-layer>div.fr-loader{background:#b3e0fd;height:10px;width:100%;margin-top:20px;overflow:hidden;position:relative}.fr-popup .fr-video-progress-bar-layer>div.fr-loader span{display:block;height:100%;width:0%;background:#0098f7;-webkit-transition:width 0.2s ease 0s;-moz-transition:width 0.2s ease 0s;-ms-transition:width 0.2s ease 0s;-o-transition:width 0.2s ease 0s}.fr-popup .fr-video-progress-bar-layer>div.fr-loader.fr-indeterminate span{width:30% !important;position:absolute;top:0;-webkit-animation:loading 2s linear infinite;-moz-animation:loading 2s linear infinite;-o-animation:loading 2s linear infinite;animation:loading 2s linear infinite}.fr-popup .fr-video-progress-bar-layer.fr-error>div.fr-loader{display:none}.fr-popup .fr-video-progress-bar-layer.fr-error>div.fr-action-buttons{display:block}.fr-video-overlay{position:fixed;top:0;left:0;bottom:0;right:0;z-index:2147483640;display:none}.fr-autoplay-margin{margin-top:0px !important} 8 | -------------------------------------------------------------------------------- /css/third_party/embedly.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * froala_editor v4.5.2 (https://www.froala.com/wysiwyg-editor) 3 | * License https://froala.com/wysiwyg-editor/terms/ 4 | * Copyright 2014-2025 Froala Labs 5 | */ 6 | 7 | .fr-clearfix::after { 8 | clear: both; 9 | display: block; 10 | content: ""; 11 | height: 0; } 12 | 13 | .fr-hide-by-clipping { 14 | position: absolute; 15 | width: 1px; 16 | height: 1px; 17 | padding: 0; 18 | margin: -1px; 19 | overflow: hidden; 20 | clip: rect(0, 0, 0, 0); 21 | border: 0; } 22 | 23 | .fr-element .fr-embedly { 24 | user-select: none; 25 | -o-user-select: none; 26 | -moz-user-select: none; 27 | -khtml-user-select: none; 28 | -webkit-user-select: none; 29 | -ms-user-select: none; 30 | position: relative; } 31 | .fr-element .fr-embedly::after { 32 | position: absolute; 33 | z-index: 1; 34 | top: 0; 35 | left: 0; 36 | right: 0; 37 | bottom: 0; 38 | cursor: pointer; 39 | display: block; 40 | background: rgba(0, 0, 0, 0); } 41 | .fr-element .fr-embedly > * { 42 | -webkit-box-sizing: content-box; 43 | -moz-box-sizing: content-box; 44 | box-sizing: content-box; 45 | max-width: 100%; 46 | border: none; } 47 | 48 | .fr-box .fr-embedly-resizer { 49 | position: absolute; 50 | z-index: 2; 51 | border: solid 1px #0098f7; 52 | display: none; 53 | user-select: none; 54 | -o-user-select: none; 55 | -moz-user-select: none; 56 | -khtml-user-select: none; 57 | -webkit-user-select: none; 58 | -ms-user-select: none; } 59 | .fr-box .fr-embedly-resizer.fr-active { 60 | display: block; } 61 | -------------------------------------------------------------------------------- /css/third_party/embedly.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * froala_editor v4.5.2 (https://www.froala.com/wysiwyg-editor) 3 | * License https://froala.com/wysiwyg-editor/terms/ 4 | * Copyright 2014-2025 Froala Labs 5 | */ 6 | 7 | .fr-clearfix::after{clear:both;display:block;content:"";height:0}.fr-hide-by-clipping{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.fr-element .fr-embedly{user-select:none;-o-user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;position:relative}.fr-element .fr-embedly::after{position:absolute;z-index:1;top:0;left:0;right:0;bottom:0;cursor:pointer;display:block;background:transparent}.fr-element .fr-embedly>*{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;max-width:100%;border:none}.fr-box .fr-embedly-resizer{position:absolute;z-index:2;border:solid 1px #0098f7;display:none;user-select:none;-o-user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none}.fr-box .fr-embedly-resizer.fr-active{display:block} 8 | -------------------------------------------------------------------------------- /css/third_party/font_awesome.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * froala_editor v4.5.2 (https://www.froala.com/wysiwyg-editor) 3 | * License https://froala.com/wysiwyg-editor/terms/ 4 | * Copyright 2014-2025 Froala Labs 5 | */ 6 | 7 | .fr-clearfix::after { 8 | clear: both; 9 | display: block; 10 | content: ""; 11 | height: 0; } 12 | 13 | .fr-hide-by-clipping { 14 | position: absolute; 15 | width: 1px; 16 | height: 1px; 17 | padding: 0; 18 | margin: -1px; 19 | overflow: hidden; 20 | clip: rect(0, 0, 0, 0); 21 | border: 0; } 22 | 23 | .fr-popup .fr-icon.fr-fa-icon { 24 | width: 18px; 25 | padding: 8px; 26 | margin: 6px; 27 | font-size: 16px; } 28 | @supports not (-ms-high-contrast: none) { 29 | .fr-popup .fr-icon-container.fr-fa-container { 30 | grid-template-columns: repeat(auto-fill, minmax(45px, 45px)); } } 31 | @media screen and (-ms-high-contrast: active) and (min-width: 768px), (-ms-high-contrast: none) and (min-width: 768px) { 32 | .fr-popup .fr-icon-container.fr-fa-container { 33 | width: 506px; } } 34 | -------------------------------------------------------------------------------- /css/third_party/font_awesome.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * froala_editor v4.5.2 (https://www.froala.com/wysiwyg-editor) 3 | * License https://froala.com/wysiwyg-editor/terms/ 4 | * Copyright 2014-2025 Froala Labs 5 | */ 6 | 7 | .fr-clearfix::after{clear:both;display:block;content:"";height:0}.fr-hide-by-clipping{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.fr-popup .fr-icon.fr-fa-icon{width:18px;padding:8px;margin:6px;font-size:16px}@supports not (-ms-high-contrast: none){.fr-popup .fr-icon-container.fr-fa-container{grid-template-columns:repeat(auto-fill, minmax(45px, 45px))}}@media screen and (-ms-high-contrast: active) and (min-width: 768px), (-ms-high-contrast: none) and (min-width: 768px){.fr-popup .fr-icon-container.fr-fa-container{width:506px}} 8 | -------------------------------------------------------------------------------- /css/third_party/image_tui.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * froala_editor v4.5.2 (https://www.froala.com/wysiwyg-editor) 3 | * License https://froala.com/wysiwyg-editor/terms/ 4 | * Copyright 2014-2025 Froala Labs 5 | */ 6 | 7 | .fr-clearfix::after { 8 | clear: both; 9 | display: block; 10 | content: ""; 11 | height: 0; } 12 | 13 | .fr-hide-by-clipping { 14 | position: absolute; 15 | width: 1px; 16 | height: 1px; 17 | padding: 0; 18 | margin: -1px; 19 | overflow: hidden; 20 | clip: rect(0, 0, 0, 0); 21 | border: 0; } 22 | 23 | .tui-image-editor-container { 24 | position: fixed; 25 | top: 0; 26 | left: 0; 27 | bottom: 0; 28 | right: 0; 29 | height: 100%; 30 | width: 100%; 31 | z-index: 10; } 32 | 33 | .tui-editor-cancel-btn { 34 | background-color: #FFF; 35 | border: 1px solid #CCCCCC; 36 | color: #222; } 37 | 38 | .tui-editor-save-btn { 39 | background-color: #fdba3b; 40 | border: 1px solid #fdba3b; 41 | color: #FFF; } 42 | -------------------------------------------------------------------------------- /css/third_party/image_tui.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * froala_editor v4.5.2 (https://www.froala.com/wysiwyg-editor) 3 | * License https://froala.com/wysiwyg-editor/terms/ 4 | * Copyright 2014-2025 Froala Labs 5 | */ 6 | 7 | .fr-clearfix::after{clear:both;display:block;content:"";height:0}.fr-hide-by-clipping{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.tui-image-editor-container{position:fixed;top:0;left:0;bottom:0;right:0;height:100%;width:100%;z-index:10}.tui-editor-cancel-btn{background-color:#FFF;border:1px solid #ccc;color:#222}.tui-editor-save-btn{background-color:#fdba3b;border:1px solid #fdba3b;color:#FFF} 8 | -------------------------------------------------------------------------------- /css/third_party/spell_checker.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * froala_editor v4.5.2 (https://www.froala.com/wysiwyg-editor) 3 | * License https://froala.com/wysiwyg-editor/terms/ 4 | * Copyright 2014-2025 Froala Labs 5 | */ 6 | 7 | .fr-clearfix::after { 8 | clear: both; 9 | display: block; 10 | content: ""; 11 | height: 0; } 12 | 13 | .fr-hide-by-clipping { 14 | position: absolute; 15 | width: 1px; 16 | height: 1px; 17 | padding: 0; 18 | margin: -1px; 19 | overflow: hidden; 20 | clip: rect(0, 0, 0, 0); 21 | border: 0; } 22 | 23 | .examples-variante > a { 24 | font-size: 14px; 25 | font-family: Arial, Helvetica, sans-serif; } 26 | 27 | .sc-cm-holder > .sc-cm { 28 | border-top: 5px solid #222222 !important; 29 | padding: 0 !important; 30 | line-height: 200% !important; } 31 | 32 | .sc-cm .sc-cm__item.examples-variante.sc-cm__item_active > a > i { 33 | display: none !important; } 34 | 35 | .sc-cm .sc-cm__item.examples-variante > a > i { 36 | display: none !important; } 37 | 38 | .sc-cm__item_dropdown .i-icon { 39 | display: none !important; } 40 | 41 | .sc-cm__item_dropdown .i-icon::before { 42 | display: none !important; } 43 | 44 | .sc-cm::before { 45 | display: none !important; } 46 | 47 | div.sc-cm-holder.sc-cm_show > ul > li.sc-cm__item.sc-cm__item_dropdown.sc-cm__item_arrow > div > ul { 48 | border-style: none !important; 49 | padding: 0 !important; } 50 | 51 | .sc-cm__item_dropdown:hover > a, .sc-cm a:hover { 52 | background-color: #ebebeb !important; } 53 | 54 | .sc-cm__item_active > a, .sc-cm__item_active > a:hover, .sc-cm a:active, .sc-cm a:focus { 55 | background-color: #d6d6d6 !important; } 56 | 57 | .sc-cm__item > a { 58 | line-height: 200% !important; } 59 | 60 | .sc-cm-holder > .sc-cm:before { 61 | background-color: #ebebeb !important; } 62 | 63 | .sc-cm-holder { 64 | display: none; } 65 | -------------------------------------------------------------------------------- /css/third_party/spell_checker.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * froala_editor v4.5.2 (https://www.froala.com/wysiwyg-editor) 3 | * License https://froala.com/wysiwyg-editor/terms/ 4 | * Copyright 2014-2025 Froala Labs 5 | */ 6 | 7 | .fr-clearfix::after{clear:both;display:block;content:"";height:0}.fr-hide-by-clipping{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.examples-variante>a{font-size:14px;font-family:Arial,Helvetica,sans-serif}.sc-cm-holder>.sc-cm{border-top:5px solid #222 !important;padding:0 !important;line-height:200% !important}.sc-cm .sc-cm__item.examples-variante.sc-cm__item_active>a>i{display:none !important}.sc-cm .sc-cm__item.examples-variante>a>i{display:none !important}.sc-cm__item_dropdown .i-icon{display:none !important}.sc-cm__item_dropdown .i-icon::before{display:none !important}.sc-cm::before{display:none !important}div.sc-cm-holder.sc-cm_show>ul>li.sc-cm__item.sc-cm__item_dropdown.sc-cm__item_arrow>div>ul{border-style:none !important;padding:0 !important}.sc-cm__item_dropdown:hover>a,.sc-cm a:hover{background-color:#ebebeb !important}.sc-cm__item_active>a,.sc-cm__item_active>a:hover,.sc-cm a:active,.sc-cm a:focus{background-color:#d6d6d6 !important}.sc-cm__item>a{line-height:200% !important}.sc-cm-holder>.sc-cm:before{background-color:#ebebeb !important}.sc-cm-holder{display:none} 8 | -------------------------------------------------------------------------------- /editor.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/froala/wysiwyg-editor/082576afb6c82f10e57f4156563250264b34379d/editor.jpg -------------------------------------------------------------------------------- /html/3rd-party/code-mirror.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 42 | 43 | 44 | 45 |The code_view.min.js plugin can be used as is or you can use also use it together with Code Mirror. All there 54 | is to be done is to include the corresponding Code Mirror CSS and JS files.
55 |The code_view.min.js plugin can be used as is or you can use also use it together with Code Mirror. All there 44 | is to be done is to include the corresponding Code Mirror CSS and JS files.
45 |The code_view.min.js plugin can be used as is or you can use also use it together with Code Mirror. All there 43 | is to be done is to include the corresponding Code Mirror CSS and JS files.
44 |This example allows you to see when the contentChanged event is triggered and how the rich text editor's content appears outside 48 | the editable area.
49 | 50 |Start typing and you can preview the code of the WYSIWYG HTML editor as you type below the editing box.
51 |This example allows you to see when the contentChanged event is triggered and how the rich text editor's content appears outside 47 | the editable area.
48 | 49 |Start typing and you can preview the content of the WYSIWYG HTML editor as you type below the editing box.
50 |This example allows you to see when the contentChanged event is triggered. Open the browser console to follow the event.
40 |This example allows you to see when the initialized and destroy events are triggered. Open the browser console to follow the 48 | events.
49 |You can destroy and initialize the editor again to see the events being triggered.
50 |Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec facilisis diam in odio iaculis blandit. Nunc eu 31 | mauris sit amet purus viverra gravida ut a dui. Vivamus nec rutrum augue, pharetra faucibus purus. Maecenas non 32 | orci sagittis, vehicula lorem et, dignissim nunc. Suspendisse suscipit, diam non varius facilisis, enim libero 33 | tincidunt magna, sit amet iaculis eros libero sit amet eros. Vestibulum a rhoncus felis. Nam lacus nulla, 34 | consequat ac lacus sit amet, accumsan pellentesque risus. Aenean viverra mi at urna mattis fermentum. Curabitur 35 | porta metus in tortor elementum, in semper nulla ullamcorper. Vestibulum mattis tempor tortor quis gravida. In 36 | rhoncus risus nibh. Nullam condimentum dapibus massa vel fringilla. Sed hendrerit sed est quis facilisis. Ut sit 37 | amet nibh sem. Pellentesque imperdiet mollis libero.
38 | 39 |Aenean sed hendrerit velit. Nullam eu mi dolor. 40 | Maecenas et erat risus. Nulla ac auctor diam, non aliquet ante. Fusce ullamcorper, ipsum id tempor lacinia, sem 41 | tellus malesuada libero, quis ornare sem massa in orci. Sed dictum dictum tristique. Proin eros turpis, ultricies 42 | eu sapien eget, ornare rutrum ipsum. Pellentesque eros nisl, ornare nec ipsum sed, aliquet sollicitudin erat. 43 | Nulla tincidunt porta vehicula.
44 | 45 |Nullam laoreet imperdiet orci ac euismod. Curabitur vel lectus nisi. Phasellus accumsan aliquet augue, eu rutrum 46 | tellus iaculis in. Nunc viverra ultrices mollis. Curabitur malesuada nunc massa, ut imperdiet arcu lobortis sed. 47 | Cras ac arcu mauris. Maecenas id lectus nisl. Donec consectetur scelerisque quam at ultricies. Nam quis magna 48 | iaculis, condimentum metus ut, elementum metus. Pellentesque habitant morbi tristique senectus et netus et 49 | malesuada fames ac turpis egestas. Vivamus id tempus nisi.
50 |It is possible to initialize the WYSIWYG HTML editor only on a button.
28 | 29 |Using the image.min.js
plugin it is possible to initialize the WYSIWYG HTML editor only on an
30 | image.
Using the link.min.js
plugin it is possible to initialize the WYSIWYG HTML editor only on a link.
28 |
The rich text editor will be initialized only on this following link: Froala WYSIWYG HTML editor website
31 |This example allows you to see when the initialized event is triggered. Open the browser console to follow the event.
47 |You can destroy and initialize the editor again to see the event being triggered.
48 |Using the char_counter.min.js
plugin it is possible to limit the number of characters that can be
32 | introduced into the WYSIWYG HTML editor.
You can type only 140 characters.
36 |The maximum number of characters can be changed using the charCounterMax option.
39 |Using the fullscreen.min.js
plugin it is possible to use the WYSIWYG HTML editor in fullscreen
33 | mode.
Make sure that the fullscreen
button is included in the toolbarButtons list. By default the fullscreen button is already in the list, but
38 | if you changed the buttons list just make sure you don't omit the fullscreen button.
Using the line_breaker.min.js
plugin it is possible to insert a new paragraph between HTML
34 | elements where the cursor cannot be placed.
There are 2 options related to the line breaker:
37 |50 | |
51 |
|
64 | 65 | | 66 | | ||||
69 | | 70 | | 71 | | 72 | |
82 | | 83 | | 84 | | 85 | |
88 | | 89 | | 90 | | 91 | |
Quick Insert makes WYSIWYG HTML editing awesome.
36 | 37 |The quick insert button will appear when you have focus on an empty line. To see it in action hit enter at the 38 | end of this line.
39 | 40 |There are 2 options related to the quick insert:
41 |Using the colors.min.js
plugin you can add in the WYSIWYG HTML editor the color picker feature.
32 |
There are 4 options that can be used to customize the color picker:
35 |Using the emoticons.min.js
plugin you can insert emoticons in the WYSIWYG HTML editor.
There are 2 options that can be used to customize the insert emoticon popup:
34 |The editor's height will automatically adjust between the heightMin
and heightMax
31 | values to fit the content inside the editable area.
When using the font_family.min.js plugin it is possible to add your own fonts to be used inside the WYSIWYG 44 | HTML editor.
45 | 46 |First you have to include the font on your webpage. In this example we are adding 4 Google fonts: Roboto, 47 | Oswald, Montserrat and Open Sans Condensed. Then you have to define the fonts that should appear in the Font 48 | Family dropdown using the fontFamily option. This option is an Object where the key represents 50 | the font name (just the way you would pass it to the font-family CSS rule e.g. font-family: 'Roboto', 51 | sans-serif;) and its value is the font name that appears in the dropdown list e.g. 52 | Roboto.
53 | 54 |By default the font family icon is visible in the editor's toolbar. If you want to be able to see the actual 55 | font family for the selected text you can use the fontFamilySelection option.
58 |Set a specific height to the WYSIWYG HTML editor using the height option. If the text inside is longer, then the rich text editor will get a 32 | vertical scrollbar.
33 |Using the inline_style.min.js
plugin it is possible to add custom style on the selected text
30 | inside the WYSIWYG HTML editor.
Use the Inline Style dropdown to select the desired inline style for the selected text inside the rich text 33 | editor.
34 | 35 |Make sure that the inlineStyle
button is included in the toolbarButtons list. By default the inlineStyle button is already in the list, but
38 | if you changed the buttons list just make sure you don't omit the inlineStyle button.
You can define your own inline styles using the inlineStyles 42 | option. This option is an Object where the key of each property represents the name of the new style and its 43 | value specifies the CSS properties for it. It is important to have unique names for the styles or they will not 44 | work properly.
45 |Using the paragraph_style.min.js
plugin it is possible to add custom style on the selected
40 | paragraph inside the WYSIWYG HTML editor.
The classes should be defined in CSS, otherwise no changes will be visible on the paragraph's appearance.
43 | 44 |You can define your own paragraph styles using the paragraphStyles option. This option is an Object where the key represents the 47 | class name and its value is the style name that appears in the dropdown list. It is important to have unique 48 | keys otherwise they will not work properly.
49 | 50 |By default you can select multiple paragraph styles at a time. If you want to toggle them and allow only one 51 | style to be selected at a time use the paragraphMultipleStyles option.
54 |The placeholder text can be customized using the placeholderText option.
42 |Set a specific width to the WYSIWYG HTML editor using the width 31 | option.
32 |The table.min.js
plugin it is possible to add custom style on the selected table cell inside the
41 | WYSIWYG HTML editor.
The classes should be defined in CSS, otherwise no changes will be visible on the table's appearance.
44 | 45 |
49 | 50 | |
51 |
52 | 53 | |
54 |
55 | 56 | |
57 |
58 | 59 | |
60 |
63 | 64 | |
65 |
66 | 67 | |
68 |
69 | 70 | |
71 |
72 | 73 | |
74 |
You can define your own table cell styles using the tableCellStyles option. This option is an Object where the key represents the 81 | class name and its value is the style name that appears in the dropdown list. It is important to have unique 82 | keys otherwise they will not work properly.
83 |By default you can select multiple table cell styles at a time. If you want to toggle them and allow only one 84 | style to be selected at a time use the tableCellMultipleStyles option.
87 |The table.min.js
plugin also offers a tool that allows you to insert rows and columns easier, just
31 | by going to the endge of the table.
37 | 38 | |
39 |
40 | 41 | |
42 |
43 | 44 | |
45 |
46 | 47 | |
48 |
51 | 52 | |
53 |
54 | 55 | |
56 |
57 | 58 | |
59 |
60 | 61 | |
62 |
There are 2 options that are related to the table insert helper works:
67 | 68 |The table.min.js
plugin also offers the possibility to resize a table in the WYSIWYG HTML editor.
31 |
37 | 38 | |
39 |
40 | 41 | |
42 |
43 | 44 | |
45 |
46 | 47 | |
48 |
51 | 52 | |
53 |
54 | 55 | |
56 |
57 | 58 | |
59 |
60 | 61 | |
62 |
There are 2 options that can be used to customize the way table resize works:
67 | 68 |The table.min.js
plugin it is possible to add custom style on the selected table inside the
40 | WYSIWYG HTML editor.also offers the possibility to resize a table in the WYSIWYG HTML editor.
The classes should be defined in CSS, otherwise no changes will be visible on the table's appearance.
43 | 44 |
48 | 49 | |
50 |
51 | 52 | |
53 |
54 | 55 | |
56 |
57 | 58 | |
59 |
62 | 63 | |
64 |
65 | 66 | |
67 |
68 | 69 | |
70 |
71 | 72 | |
73 |
You can define your own table styles using the tableStyles 79 | option. This option is an Object where the key represents the class name and its value is the style name that 80 | appears in the dropdown list. It is important to have unique keys otherwise they will not work properly.
81 |By default you can select multiple table styles at a time. If you want to toggle them and allow only one style 82 | to be selected at a time use the tableMultipleStyles option.
84 |