diff --git a/assets/css/frontend/pages/submit.css b/assets/css/frontend/pages/submit.css index fd816f49..9a7d4df1 100644 --- a/assets/css/frontend/pages/submit.css +++ b/assets/css/frontend/pages/submit.css @@ -71,6 +71,10 @@ border: none; } +.aksrt-submit-editor-wrap textarea.wp-editor-area { + opacity: 1; +} + .aksrt-submit-editor-wrap .mce-toolbar-grp { background: var(--surface-1, #fff); border-bottom: 1px solid var(--color-line, #eceff4); diff --git a/assets/js/front-submit.js b/assets/js/front-submit.js index ae62eeed..44678fca 100644 --- a/assets/js/front-submit.js +++ b/assets/js/front-submit.js @@ -100,6 +100,7 @@ if (!this.form) { return; } + this.hydrateEditor(); this.bindDirty(); this.bindAutoHeight(); this.bindSubmitButtons(); @@ -113,6 +114,59 @@ this.loadFeaturedFromDom(); }, + hydrateEditor: function () { + var snapshot = document.getElementById('aksrt-initial-post-content'); + var textarea = qs('#post_content') || qs('[name="post_content"]'); + var initialContent = snapshot ? snapshot.value : textarea ? textarea.value : ''; + if (!initialContent) { + return; + } + + var fallbackToTextEditor = function () { + if (window.switchEditors && typeof window.switchEditors.go === 'function') { + window.switchEditors.go('post_content', 'html'); + } + if (textarea) { + textarea.value = initialContent; + textarea.style.opacity = '1'; + textarea.style.display = 'block'; + } + }; + + var attempts = 0; + var restore = function () { + var editor = window.tinymce && window.tinymce.get('post_content'); + if (!editor) { + attempts += 1; + if (attempts < 20) { + setTimeout(restore, 250); + } else { + fallbackToTextEditor(); + } + return; + } + + var hydrate = function () { + var current = editor.getContent({ format: 'raw' }); + if (!current || !current.trim()) { + editor.setContent(initialContent); + editor.save(); + } + if (!editor.getContent({ format: 'raw' }).trim()) { + fallbackToTextEditor(); + } + }; + + if (editor.initialized) { + hydrate(); + } else { + editor.on('init', hydrate); + } + }; + + restore(); + }, + bindDirty: function () { var self = this; this.form.addEventListener('input', function () { diff --git a/templates/parts/submit/editor-main.php b/templates/parts/submit/editor-main.php index 4fcd347d..a3a170df 100644 --- a/templates/parts/submit/editor-main.php +++ b/templates/parts/submit/editor-main.php @@ -42,6 +42,12 @@ $is_can_new = !empty($ctx['is_can_new']);