npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

directus-extension-flexible-editor

v1.5.0

Published

A Rich Text Editor (WYSIWYG) with JSON output, that allows to integrate M2A relations to make it extremely flexible.

Downloads

1,233

Readme

Flexible Editor for Directus

A Rich Text Editor (WYSIWYG) with JSON output, that allows to integrate M2A relations to make it extremely flexible.

https://github.com/formfcw/directus-extension-flexible-editor/assets/78852214/b418c9a7-44c0-43b1-b5ad-6673d09a9066

(Demo Video)

Under the hood, it integrates the Tiptap editor as an extension into the Directus app and utilizes an optional many-to-any (M2A) field to place and link relation nodes in the editor. This combination makes Flexible Editor a truely rich editor.

Installation

Basic Usage

In your Directus app simply click the Create Field button and choose Flexible Editor.

https://github.com/formfcw/directus-extension-flexible-editor/assets/78852214/62592c31-498f-4879-b231-fb2f2802777c

(Video about basic usage)

Interface Options

Navigate to the interface tab to adjust the settings.

| Option | Description | | ------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | M2A Reference Field | Described in detail below (Usage with relation nodes) | | Placeholder | Display a placeholder text when empty | | Tools | Select the editor tools you want to use | | Formats Button Appearance | Display the active format name instead of just an icon | | Input Mode | Multi-line text … Default behaviorSingle-line text … Turns into an inline editor that only allows inline marks/blocks | | Editor Height | Grow till Overflow … The height grows with its content as long as it remains in the viewportGrow … The height grows with its contentFixed … The editor has a fixed height | | Font | Font that is used in the editor | | Spellcheck | Enable spell checking in the editor |

Display

Navigate to the Display tab and select Flexible Editor to display the editor content as plain text inside the Directus app.

Usage with relation nodes

You can insert items from your Directus collections into the Flexible Editor. This is optional but gives you extreme flexibility when creating rich content. Therefore, you need to add a many-to-any (M2A) field, the editor field can connect to. For Flexible Editor to work this way, you must create the junction collection before adding a M2A field.

https://github.com/formfcw/directus-extension-flexible-editor/assets/78852214/986ce5b1-cdda-4607-bea9-26412f942938

(Video about usage with relation nodes)

  1. Create a new (junction) collection and give it a name like xxxx_editor_nodes and set the Type of the Primary Key to Generate UUID. Finish the setup to create the collection.

  2. Open the data model of the collection you want to add Flexible Editor to and click Create Field in Advanced Mode and select Many to Any Relationship.

  3. Give the field a name like editor_nodes and on the Relationship tab, uncheck the Auto Fill option, so you can select the junction collection you created earlier manually (like xxxx_editor_nodes). Select the Related Collections you want to integrate into your Flexible Editor field. You don’t need to set a sort field, but you want to set the Relational Triggers to cascade when deleting or deselecting an item.

  4. On the Field tab, set the field Hidden on Detail as we manage the M2A items via Flexible Editor. Therefore no interface is required for the M2A field.

  5. Now that you have created your M2A field, open the interface settings for your Flexible Editor field and connect to the M2A field by selecting it in the M2A Reference Field.

  6. Set the Item Duplication Fields for your junction collection (xxxx_editor_nodes) in the data model settings. This is required to make copy & paste or drag & drop work.

    Tip: If you setup Flexible Editor the same way on different collections, you can copy & paste the duplication settings via Copy Raw Value from the field menu — by clicking the “Item Duplication Fields” label.

Things to keep in mind

You cannot use the same M2A junction collection for multiple collections (in which you use Flexible Editor). This would only work with an any-to-any relationship, which Directus doesn't support at the time of writing.

You should not set Item Duplication Fields for nested Flexible Editor fields as they are managed by their own junction collections.

If you want to duplicate nested M2A items (e.g. a Related Content collection, that relates to multiple other collection items) you only want to duplicate the IDs (in the junction collection) without copying the whole item!

Duplication currently only works within the same editor field or between Flexible Editor fields, that use the same M2A Reference Field. (This will be improved in future releases.)

This also means that you can use the same M2A Reference Field for multiple Flexible Editor fields, although this is not recommended as this will change in future releases.

The current implementation of duplicating relation nodes (M2A items) does not cover all use cases, but will be improved in future releases. If duplication fails you should get a warning.

Tutorial: Relation node with existing items

https://github.com/formfcw/directus-extension-flexible-editor/assets/78852214/1c357db7-582e-462f-aada-606c0c7197e4

(Video tutorial about relation node with existing items)

Custom Editor Styles

For overwriting CSS of the editor content, you can add Custom CSS to your Project Settings inside Directus. You can use the .flexible-editor class for the editor itself as well as a .relation-block class for the relation nodes.

Rendering in the front-end

To render the JSON content generated by Flexible Editor you can follow the official Tiptap guide or you can use the Flexible Editor Content tools included in this package (recommended).

Rendering with interactive components

If you want to render your JSON content with interactive components, especially when using relation nodes, follow this Flexible Editor Content guide.

Rendering plain HTML or plain text

Tiptap provides official functions to generateText() or generateHTML() from the JSON output. Note that as of this writing, there are different versions of generateHTML(): one for client side (import { generateHTML } from "@tiptap/core") and one for server side (import { generateHTML } from "@tiptap/html") rendering!

Contribution

Contributions are welcome. Make sure to open an issue for bugs or start a discussion for feature requests, before you start writing code!