Issue #5159Opened June 1, 2023by CaptSadaf0 reactions

BUG: 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?

  1. 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 (2)

CaptSadafJune 1, 20230 reactions

cc: @jcamejo @artf

artfJune 13, 20230 reactions

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.

Related Questions and Answers

Continue research with similar issue discussions.

Paid Plugins That Match This Issue

Curated by issue keywords and label relevance to help you ship faster.

View all plugins

Loading paid plugin recommendations...

Browse Plugin Categories

Jump directly to plugin category pages on the marketplace.