fix: improve markdown conversion and advanced fields visibility
- Enhanced markdown to HTML conversion with proper list handling - Added support for H4, H5, H6 headers in TinyMCE editor configuration - Improved bullet list processing with proper <ul> wrapping - Fixed advanced fields visibility by adding CSS display:none default - Timezone selector and advanced options (capacity, cost) now properly hidden 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
b7e5514e8e
commit
d5239d7a3f
3 changed files with 52 additions and 19 deletions
|
|
@ -356,6 +356,7 @@
|
|||
background: #f8f9fa;
|
||||
border-radius: 0 4px 4px 0;
|
||||
position: relative;
|
||||
display: none; /* Hidden by default */
|
||||
}
|
||||
|
||||
.advanced-field::before {
|
||||
|
|
|
|||
|
|
@ -716,7 +716,8 @@ jQuery(document).ready(function($) {
|
|||
markdownToHtml: function(markdown) {
|
||||
let html = markdown;
|
||||
|
||||
// Convert headers (## -> h2, ### -> h3, etc.)
|
||||
// Convert headers (#### -> h4, ### -> h3, ## -> h2, # -> h1)
|
||||
html = html.replace(/^#### (.+)$/gm, '<h4>$1</h4>');
|
||||
html = html.replace(/^### (.+)$/gm, '<h3>$1</h3>');
|
||||
html = html.replace(/^## (.+)$/gm, '<h2>$1</h2>');
|
||||
html = html.replace(/^# (.+)$/gm, '<h1>$1</h1>');
|
||||
|
|
@ -727,25 +728,56 @@ jQuery(document).ready(function($) {
|
|||
// Convert italic text (*text* -> <em>text</em>)
|
||||
html = html.replace(/\*([^*]+)\*/g, '<em>$1</em>');
|
||||
|
||||
// Convert bullet lists (* item -> <ul><li>item</li></ul>)
|
||||
html = html.replace(/^\* (.+)$/gm, '<li>$1</li>');
|
||||
|
||||
// Wrap consecutive <li> items in <ul> tags
|
||||
html = html.replace(/(<li>.*<\/li>)/gs, function(match) {
|
||||
if (!match.includes('<ul>')) {
|
||||
return '<ul>' + match + '</ul>';
|
||||
}
|
||||
return match;
|
||||
});
|
||||
|
||||
// Convert line breaks to <p> tags for paragraphs
|
||||
// Process lines for better list handling
|
||||
const lines = html.split('\n');
|
||||
const processedLines = [];
|
||||
let inList = false;
|
||||
|
||||
for (let i = 0; i < lines.length; i++) {
|
||||
let line = lines[i].trim();
|
||||
|
||||
// Handle bullet list items
|
||||
if (line.match(/^\* (.+)$/)) {
|
||||
const listItemContent = line.replace(/^\* (.+)$/, '$1');
|
||||
|
||||
if (!inList) {
|
||||
processedLines.push('<ul>');
|
||||
inList = true;
|
||||
}
|
||||
processedLines.push(`<li>${listItemContent}</li>`);
|
||||
|
||||
// Check if next line is also a list item or if this is the last line
|
||||
const nextLine = i + 1 < lines.length ? lines[i + 1].trim() : '';
|
||||
if (!nextLine.match(/^\* (.+)$/)) {
|
||||
processedLines.push('</ul>');
|
||||
inList = false;
|
||||
}
|
||||
} else {
|
||||
// Close list if we were in one
|
||||
if (inList) {
|
||||
processedLines.push('</ul>');
|
||||
inList = false;
|
||||
}
|
||||
|
||||
// Add regular line
|
||||
if (line !== '') {
|
||||
processedLines.push(line);
|
||||
} else {
|
||||
processedLines.push(''); // Preserve empty lines for paragraph breaks
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Close any remaining open list
|
||||
if (inList) {
|
||||
processedLines.push('</ul>');
|
||||
}
|
||||
|
||||
// Convert to paragraphs
|
||||
const paragraphs = [];
|
||||
let currentParagraph = '';
|
||||
|
||||
for (let line of lines) {
|
||||
line = line.trim();
|
||||
|
||||
for (let line of processedLines) {
|
||||
// Skip empty lines
|
||||
if (line === '') {
|
||||
if (currentParagraph) {
|
||||
|
|
@ -756,7 +788,7 @@ jQuery(document).ready(function($) {
|
|||
}
|
||||
|
||||
// If line is already wrapped in HTML tags, add it as is
|
||||
if (line.match(/^<(h[1-6]|ul|li|strong|em)/)) {
|
||||
if (line.match(/^<(h[1-6]|ul|\/ul|li|strong|em)/)) {
|
||||
if (currentParagraph) {
|
||||
paragraphs.push(currentParagraph);
|
||||
currentParagraph = '';
|
||||
|
|
@ -779,7 +811,7 @@ jQuery(document).ready(function($) {
|
|||
|
||||
// Wrap non-HTML paragraphs in <p> tags
|
||||
const formattedParagraphs = paragraphs.map(p => {
|
||||
if (p.match(/^<(h[1-6]|ul|li)/)) {
|
||||
if (p.match(/^<(h[1-6]|ul|\/ul|li)/)) {
|
||||
return p;
|
||||
} else {
|
||||
return '<p>' + p + '</p>';
|
||||
|
|
|
|||
|
|
@ -1652,7 +1652,7 @@ HTML;
|
|||
'tinymce' => [
|
||||
'toolbar1' => 'formatselect,bold,italic,underline,strikethrough,|,bullist,numlist,|,link,unlink,|,blockquote,hr,|,alignleft,aligncenter,alignright,|,undo,redo',
|
||||
'toolbar2' => '',
|
||||
'block_formats' => 'Paragraph=p;Heading 2=h2;Heading 3=h3;Heading 4=h4;Preformatted=pre',
|
||||
'block_formats' => 'Paragraph=p;Heading 2=h2;Heading 3=h3;Heading 4=h4;Heading 5=h5;Heading 6=h6;Preformatted=pre',
|
||||
'forced_root_block' => 'p',
|
||||
'force_p_newlines' => true,
|
||||
'remove_redundant_brs' => true,
|
||||
|
|
|
|||
Loading…
Reference in a new issue