修复了一些问题
This commit is contained in:
@@ -71,6 +71,10 @@
|
|||||||
border: none;
|
border: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.aksrt-submit-editor-wrap textarea.wp-editor-area {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
.aksrt-submit-editor-wrap .mce-toolbar-grp {
|
.aksrt-submit-editor-wrap .mce-toolbar-grp {
|
||||||
background: var(--surface-1, #fff);
|
background: var(--surface-1, #fff);
|
||||||
border-bottom: 1px solid var(--color-line, #eceff4);
|
border-bottom: 1px solid var(--color-line, #eceff4);
|
||||||
|
|||||||
@@ -100,6 +100,7 @@
|
|||||||
if (!this.form) {
|
if (!this.form) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
this.hydrateEditor();
|
||||||
this.bindDirty();
|
this.bindDirty();
|
||||||
this.bindAutoHeight();
|
this.bindAutoHeight();
|
||||||
this.bindSubmitButtons();
|
this.bindSubmitButtons();
|
||||||
@@ -113,6 +114,59 @@
|
|||||||
this.loadFeaturedFromDom();
|
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 () {
|
bindDirty: function () {
|
||||||
var self = this;
|
var self = this;
|
||||||
this.form.addEventListener('input', function () {
|
this.form.addEventListener('input', function () {
|
||||||
|
|||||||
@@ -42,6 +42,12 @@ $is_can_new = !empty($ctx['is_can_new']);
|
|||||||
<?php else : ?>
|
<?php else : ?>
|
||||||
<div class="aksrt-submit-editor-wrap">
|
<div class="aksrt-submit-editor-wrap">
|
||||||
<?php
|
<?php
|
||||||
|
$initial_content = (string) $ctx['current_content'];
|
||||||
|
if ($initial_content !== '') :
|
||||||
|
?>
|
||||||
|
<textarea id="aksrt-initial-post-content" hidden aria-hidden="true" tabindex="-1"><?php echo esc_textarea($initial_content); ?></textarea>
|
||||||
|
<?php
|
||||||
|
endif;
|
||||||
$toolbar1 = 'formatselect,bold,italic,bullist,numlist,alignleft,aligncenter,alignright,link,blockquote,code,fullscreen';
|
$toolbar1 = 'formatselect,bold,italic,bullist,numlist,alignleft,aligncenter,alignright,link,blockquote,code,fullscreen';
|
||||||
$plugins = 'paste,link,lists,fullscreen,wordpress,wplink,charmap';
|
$plugins = 'paste,link,lists,fullscreen,wordpress,wplink,charmap';
|
||||||
$editor_settings = [
|
$editor_settings = [
|
||||||
@@ -50,7 +56,7 @@ $is_can_new = !empty($ctx['is_can_new']);
|
|||||||
'editor_height' => wp_is_mobile() ? 460 : 470,
|
'editor_height' => wp_is_mobile() ? 460 : 470,
|
||||||
'media_buttons' => false,
|
'media_buttons' => false,
|
||||||
'default_editor' => 'tinymce',
|
'default_editor' => 'tinymce',
|
||||||
'quicktags' => false,
|
'quicktags' => true,
|
||||||
'teeny' => false,
|
'teeny' => false,
|
||||||
'tinymce' => [
|
'tinymce' => [
|
||||||
'toolbar1' => $toolbar1,
|
'toolbar1' => $toolbar1,
|
||||||
@@ -59,7 +65,7 @@ $is_can_new = !empty($ctx['is_can_new']);
|
|||||||
'placeholder' => (string) ($settings['content_placeholder'] ?? ''),
|
'placeholder' => (string) ($settings['content_placeholder'] ?? ''),
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
wp_editor((string) $ctx['current_content'], 'post_content', $editor_settings);
|
wp_editor($initial_content, 'post_content', $editor_settings);
|
||||||
?>
|
?>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -21,5 +21,19 @@ test('published post content reaches the front submit editor unchanged', () => {
|
|||||||
const editor = read('templates/parts/submit/editor-main.php');
|
const editor = read('templates/parts/submit/editor-main.php');
|
||||||
|
|
||||||
assert.match(context, /\$current_content\s*=\s*\$edit_post\s*\?\s*\$edit_post->post_content\s*:\s*'';/);
|
assert.match(context, /\$current_content\s*=\s*\$edit_post\s*\?\s*\$edit_post->post_content\s*:\s*'';/);
|
||||||
assert.match(editor, /wp_editor\(\(string\) \$ctx\['current_content'\], 'post_content', \$editor_settings\);/);
|
assert.match(editor, /\$initial_content\s*=\s*\(string\) \$ctx\['current_content'\]/);
|
||||||
|
assert.match(editor, /wp_editor\(\$initial_content, 'post_content', \$editor_settings\);/);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('front submit restores published content when TinyMCE initializes empty', () => {
|
||||||
|
const editor = read('templates/parts/submit/editor-main.php');
|
||||||
|
const runtime = read('assets/js/front-submit.js');
|
||||||
|
const styles = read('assets/css/frontend/pages/submit.css');
|
||||||
|
|
||||||
|
assert.match(editor, /'quicktags'\s*=>\s*true/);
|
||||||
|
assert.match(editor, /id="aksrt-initial-post-content"/);
|
||||||
|
assert.match(runtime, /hydrateEditor:\s*function/);
|
||||||
|
assert.match(runtime, /editor\.setContent\(initialContent\)/);
|
||||||
|
assert.match(runtime, /switchEditors\.go\('post_content', 'html'\)/);
|
||||||
|
assert.match(styles, /textarea\.wp-editor-area\s*\{[^}]*opacity:\s*1/s);
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user