1.0.23 • Published 9 months ago

@silexlabs/grapesjs-directus-storage v1.0.23

Weekly downloads
-
License
MIT
Repository
github
Last release
9 months ago

Grapesjs Directus Storage

Directus as a backend for GrapesJS

/!\ This code uses an outdated SDK from directus project

This code is part of a bigger project: about Silex v3

Screenshot from the plugin in grapesjs demo

Links

The plugin currently has these features

  • Authentication commands using Directus API to login/logout the user
  • Custom StorageManager to store the website data in a Directus collection
  • Custom AssetManager which integrates with Directus assets
  • This plugin provides easy versioning of the website data and assets
  • The JSON data of the website and the assets are readable and editable in Directus
  • Directus provides no-code flow automations

Here is grapesjs data in directus

grapesjs  data in directus

HTML

<link href="https://unpkg.com/grapesjs/dist/css/grapes.min.css" rel="stylesheet">
<script src="https://unpkg.com/grapesjs"></script>
<script src="https://unpkg.com/@silexlabs/grapesjs-directus-storage"></script>

<div id="gjs"></div>

JS

const editor = grapesjs.init({
  container: '#gjs',
  height: '100%',
  fromElement: true,
  storageManager: {
    type: 'directus',
    autoload: false,
  },
  plugins: ['@silexlabs/grapesjs-directus-storage'],
  pluginsOpts: {
    '@silexlabs/grapesjs-directus-storage': {
      directusUrl: prompt('You need a Directus server to test this plugin. Directus server URL', 'http://localhost:8055')
    }
  }
});

CSS

body, html {
  margin: 0;
  height: 100%;
}

Directus settings

On the Directus side, you need

  1. A collection to store your website data (has to be a list, singleton not yet supported)
  2. A user with access right to the collection and to the collection directus_files

The collection to store your data needs to have these fields

  • pages
  • styles
  • fonts (optional, for use with @silexlabs/grapesjs-fonts)
  • symbols (optional, for use with @silexlabs/grapesjs-symbols)

These fields can be code fields of type JSON so that the UI is adequat, or they can be simple text fields

As the plugin needs to connect to your Directus server, you need to handle CORS on the server, read Directus docs on CORS

Directus data model

Options

OptionDescriptionDefault
directusUrlDirectus URLRequired
collectionName of the directus collection to hold silex website datasilex
assetsPath to directus assets folder, relative to the server root/assets
formClassNameCSS classes to add to the login formdirectus__login
stylesCSS Styles to apply to the login formSee source code
userCreatedWether to update the user_created fieldtrue
userUpdatedWether to update the user_updated fieldtrue

Actions

ActionDescription
loginShow the login form and login
logoutLog out the user
reloginLog out and login immediately again

Event

EventDescriptionParams
login:startShow login form to start loging in-
login:successThe user is logged inAn object with 2 methods: getUser() and getToken()
login:errorAn error occured while login, e.g. wrong passwordThe error object, with a message field
logout:successThe user is logged out-

Download

  • CDN
    • https://unpkg.com/@silexlabs/grapesjs-directus-storage
  • NPM
    • npm i @silexlabs/grapesjs-directus-storage
  • GIT
    • git clone https://github.com/silexlabs/grapesjs-directus-storage.git

Usage

Directly in the browser

<link href="https://unpkg.com/grapesjs/dist/css/grapes.min.css" rel="stylesheet"/>
<script src="https://unpkg.com/grapesjs"></script>
<script src="path/to/grapesjs-directus-storage.min.js"></script>

<div id="gjs"></div>

<script type="text/javascript">
  var editor = grapesjs.init({
      container: '#gjs',
      // ...
      plugins: ['grapesjs-directus-storage'],
      pluginsOpts: {
        'grapesjs-directus-storage': { /* options */ }
      }
  });
</script>

Modern javascript

import grapesjs from 'grapesjs';
import plugin from '@silexlabs/grapesjs-directus-storage';
import 'grapesjs/dist/css/grapes.min.css';

const editor = grapesjs.init({
  container : '#gjs',
  // ...
  plugins: [plugin],
  pluginsOpts: {
    [plugin]: { /* options */ }
  }
  // or
  plugins: [
    editor => plugin(editor, { /* options */ }),
  ],
});

Development

Clone the repository

$ git clone https://github.com/silexlabs/grapesjs-directus-storage.git
$ cd grapesjs-directus-storage

Install dependencies

$ npm i

Start the dev server

$ npm start

Build the source

$ npm run build

License

MIT

1.0.19

9 months ago

1.0.22

9 months ago

1.0.21

9 months ago

1.0.20

9 months ago

1.0.23

9 months ago

1.0.15

1 year ago

1.0.14

1 year ago

1.0.13

1 year ago

1.0.12

1 year ago

1.0.11

1 year ago

1.0.10

1 year ago

1.0.9

1 year ago

1.0.8

1 year ago

1.0.7

1 year ago

1.0.5

1 year ago

1.0.4

1 year ago

1.0.3

1 year ago

1.0.2

1 year ago