Issue #616πŸ’¬ AnsweredOpened December 7, 2017by ryandeba0 reactions

Expose spectrum color picker options

Quick answerby artf

Is something like this already possible and I missed it? If not, would you consider merging a pull request that adds this functionality? Unfortunately, not yet possible but I'll definitely accept a PR (ok for the option colorPicker) The spectrum is called inside InputColor and used then in PropertyColorView and TraitC...

Read full answer below ↓

Question

Hi @artf,

I'm wanting to customize some options for the spectrum color picker (specifically the palette). I've searched through the code and am not seeing how this is currently possible.

This is what I'd like to do:

grapesjs.init({
   colorPicker: {
      showPalette: true,
      palette: [
        ['black', 'white', 'blanchedalmond'],
        ['rgb(255, 128, 0);', 'hsv 100 70 50', 'lightyellow']
      ]
    }
});

Is something like this already possible and I missed it? If not, would you consider merging a pull request that adds this functionality?

Answers (3)

artfβ€’ December 8, 2017

Is something like this already possible and I missed it? If not, would you consider merging a pull request that adds this functionality?

Unfortunately, not yet possible but I'll definitely accept a PR (ok for the option colorPicker) The spectrum is called inside InputColor and used then in PropertyColorView and TraitColorView

I'd put a comment to not override default options like change, move, etc. as it will break it

ryandebaβ€’ December 13, 2017

Thanks @artf! Do you have any general thoughts on how to best make this change? I've reviewed the code and am not seeing an easy way to accomplish this, and I'd like to avoid spending time going down the wrong path.

Here's a summary of what the ideas I've considered so far...any of these sound better/worse than the others?

  • Add ColorPicker to the utils object
    • This would make it easy to pass the config along like this, utilizing the existing loadModule functionality: grapesjs.init({ utils: { colorPicker: { ... } } });
    • I think this would require changing how the InputColor/PropertyColorView/TraitColorView objects reference it - they would need to go through editor.Utils.ColorPicker instead of simply requiring the js file dependency. None of those objects appear to currently have any reference to the editor object, so this doesn't seem very straightforward.
  • Move the ColorPicker object to be a top-level editor object (kind of like the rich text editor editor.RichTextEditor, but this would be editor.ColorPicker)
    • I guess the same issues exist here as with moving ColorPicker into the utils object...all referencing code would need to access this through editor.ColorPicker rather than requiring the js file dependency...
  • Backbone/jQuery implementation
    • Modify Backbone.$.fn.spectrum.defaults in the editor if the colorPicker config was passed to grapesjs.init, and modify the ColorPicker to use those defaults if they exist.
    • This solution feels very hacky to me :(

Any feedback that you could provide would be greatly appreciated :)

artfβ€’ December 14, 2017

Honestly, I was thinking about a less invasive approach

None of those objects appear to currently have any reference to the editor object

Actually, PropertyColorView injectsEditorModel (which I commonly reference as em) as an option via target (probably will be best to rename it to em) but not in TraitColorView (easy fix, just need to pass this.config.em). After we have the em inside we can easily update InputColor like this

colorEl.spectrum({
         //...
         palette: [],
         ...this.target.getConfig('colorPicker'), // or this.em.getConfig...
         // We need move(), change(), etc. to make the color input work properly
         // so I'd keep them out
         move(color) {...},
         //...

What do you think?

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...

Free option

Check the open-source GrapesJS plugins on GitHub or run a quick search in our free catalog.

Browse free plugins β†’
Premium option

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.

All tutorials β†’

Browse Plugin Categories

Jump directly to plugin category pages on the marketplace.