Can't add placeholders drop down to text field drop down options with CKEditor enabled
Question
GrapesJS version
- I confirm to use the latest version of GrapesJS
What browser are you using?
Chrome
Reproducible demo link
https://codepen.io/darrenbawag/pen/JjWBLrp
Describe the bug
How to reproduce the bug?
- Open this link https://codepen.io/darrenbawag/pen/JjWBLrp and try to show the placeholder dropdown to toolbar of CKEditor using this code but this does show the drop down only when we don't add the grape grapesjs-plugin-ckeditor to configuration.
icon: `<select class="gjs-field">
<option id="defaultPlaceholder">Placeholder</option>
<option value="[[salutation]]">Salutation</option>
<option value="[[firstname]]">Firstname</option>
<option value="[[lastname]]">Lastname</option>
</select>`,
// Bind the 'result' on 'change' listener
event: "change",
result: (
rte: { exec: (arg0: string, arg1: unknown) => unknown },
action: { btn: { firstChild: { value: unknown } } }
) => rte.exec("fontSize", action.btn.firstChild.value),
// Callback on any input change (mousedown, keydown, etc..)
update: (
rte: { insertHTML: (arg0: unknown) => void },
action: { btn: { children: { selectedOptions: { value: unknown }[] }[] } }
) => {
rte.insertHTML(action.btn.children[0].selectedOptions[0].value);
},
});```
2. ...
**What is the expected behavior?**
GrapeJS ckeditor should provide way to add custom placeholders dropdowns,
**What is the current behavior?**
I can not custom drop down placeholder to the toolbar options when I use grape js ckeditor or custom plugin.
If is necessary to execute some code in order to reproduce the bug, paste it here below:
This code adds the drop down to default RichTextEditor toolbar but does not adds drop down on CKeditor toolbar options
```js
rte.add("fontSize", {
icon: `<select class="gjs-field">
<option id="defaultPlaceholder">Placeholder</option>
<option value="[[salutation]]">Salutation</option>
<option value="[[firstname]]">Firstname</option>
<option value="[[lastname]]">Lastname</option>
</select>`,
// Bind the 'result' on 'change' listener
event: "change",
result: (
rte: { exec: (arg0: string, arg1: unknown) => unknown },
action: { btn: { firstChild: { value: unknown } } }
) => rte.exec("fontSize", action.btn.firstChild.value),
// Callback on any input change (mousedown, keydown, etc..)
update: (
rte: { insertHTML: (arg0: unknown) => void },
action: { btn: { children: { selectedOptions: { value: unknown }[] }[] } }
) => {
rte.insertHTML(action.btn.children[0].selectedOptions[0].value);
},
});
Code of Conduct
- I agree to follow this project's Code of Conduct
Answers (3)
cc: @jcamejo @artf
Those actions are only available for the built-in RTE, if you replace it with a custom RTE like CKEditor you don't see them. You have to use CKEditor itself for your custom logic.
Thanks for reporting this, @CaptSadaf.
Great question about Can't add placeholders drop down to text field drop down options with CKEditor enabled. The recommended approach with ProseMirror is to use the event-driven API.
Start here:
- Check the GrapesJS documentation for your specific module
- Look for the
on()event listener method - Most operations can be achieved by listening to editor and component events
Common patterns:
// Listen for changes
editor.on('change', () => console.log('something changed'));
// Component lifecycle
editor.on('component:mount', (c) => console.log('component ready', c));
editor.on('component:update', (c) => console.log('component updated', c));
If you're still stuck:
- Share a minimal CodeSandbox reproduction
- Include what you've already tried
- Mention your GrapesJS version
- The community is here to help!
Related Questions and Answers
Continue research with similar issue discussions.
Issue #4607
JS error when moving an element with its child
GrapesJS version[x] I confirm to use the latest version of GrapesJSWhat browser are you using? Chrome v104Reproducible demo link https://gr...
Issue #4416
Can't parse trait values using Template literals(String Interpolation)
GrapesJS version [X] I confirm to use the latest version of GrapesJS What browser are you using? Chrome v103.0.5060.53 Reproducible demo li...
Issue #6695
Prevent default not working for edge
GrapesJS version [x] I confirm to use the latest version of GrapesJS What browser are you using? Edge 144.0.3719.92 Reproducible demo link...
Issue #4440
Extending text component breaks textable blocks
GrapesJS version[X] I confirm to use the latest version of GrapesJSWhat browser are you using? Version 102.0.5005.115 (Official Build) (64-...
Paid Plugins That Match This Issue
Curated by issue keywords and label relevance to help you ship faster.
Loading paid plugin recommendations...
Check the open-source GrapesJS plugins on GitHub or run a quick search in our free catalog.
Browse free plugins βPremium plugins ship with support, regular updates, and production-ready features β save days of integration work.
Browse premium plugins βRelated tutorials
In-depth guides on the same topic.
Tutorial
How to Build a Production GrapesJS Editor: The Complete Walkthrough of Brief, Preset, Plugins, and Services
A complete walkthrough of building a production GrapesJS editor: how to choose a preset, pick plugins, and scope setup services without burning a sprint.
Tutorial
Big Updates: TinyMCE 8 and Placeholder 2.0 for GrapesJS
In May we shipped major updates to two of our most popular GrapesJS plugins β TinyMCE Inline Text Editor and Placeholder.
Tutorial
Find the Right GrapesJS Plugin in Seconds: Smarter Discovery Is Live
We're shipping a set of discovery upgrades. New label filters, a proper compatibility switch for GrapesJS vs Studio, one-click and a smarter sort bar.
Browse Plugin Categories
Jump directly to plugin category pages on the marketplace.