/*
* This file is part of ORY Editor.
*
* ORY Editor is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* ORY Editor is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with ORY Editor. If not, see .
*
* @license LGPL-3.0
* @copyright 2016-2018 Aeneas Rekkas
* @author Aeneas Rekkas
*
*/
import * as React from 'react';
import * as ReactDOM from 'react-dom';
// The editor core
import Editor, { Editable, createEmptyState } from 'ory-editor-core';
import 'ory-editor-core/lib/index.css'; // we also want to load the stylesheets
// The default ui components
import { Trash, DisplayModeToggle, Toolbar } from 'ory-editor-ui';
import 'ory-editor-ui/lib/index.css';
// The rich text area plugin
import slate from 'ory-editor-plugins-slate';
import 'ory-editor-plugins-slate/lib/index.css';
// The rich text area plugin
import button from 'ory-editor-plugins-button';
import 'ory-editor-plugins-button/lib/index.css';
// The spacer plugin
import spacer from 'ory-editor-plugins-spacer';
import 'ory-editor-plugins-spacer/lib/index.css';
import spacer1 from 'ory-editor-plugins-spacer1';
import 'ory-editor-plugins-spacer1/lib/index.css';
// The image plugin
import { imagePlugin } from 'ory-editor-plugins-image';
import 'ory-editor-plugins-image/lib/index.css';
// The Carousel plugin
import { carouselPlugin } from 'ory-editor-plugins-carousel';
import 'ory-editor-plugins-carousel/lib/index.css';
// The video plugin
import video from 'ory-editor-plugins-video';
import 'ory-editor-plugins-video/lib/index.css';
// The parallax plugin
// import parallax from 'ory-editor-plugins-parallax-background';
// import 'ory-editor-plugins-parallax-background/lib/index.css';
// The background plugin
import background from 'ory-editor-plugins-background';
import { ModeEnum } from 'ory-editor-plugins-background/lib/types/modeEnum';
import 'ory-editor-plugins-background/lib/index.css';
// The html5-video plugin
import html5video from 'ory-editor-plugins-html5-video';
import 'ory-editor-plugins-html5-video/lib/index.css';
// The native handler plugin
import native from 'ory-editor-plugins-default-native';
// The divider plugin
import divider from 'ory-editor-plugins-divider';
// Renders json state to html, can be used on server and client side
import { HTMLRenderer } from 'ory-editor-renderer';
// The content state
import content from './content';
import './styles.css';
import { ImageUploadType } from 'ory-editor-ui/lib/ImageUpload';
import { Plugins } from 'ory-editor-core/lib/service/plugin/classes';
const fakeImageUploadService: (url: string) => ImageUploadType = (defaultUrl) => (file, reportProgress) => {
return new Promise((resolve, reject) => {
let counter = 0;
const interval = setInterval(() => {
counter++;
reportProgress(counter * 10);
if (counter > 9) {
clearInterval(interval);
alert('This is a fake image upload service, please provide actual implementation via plugin properties');
resolve({ url: defaultUrl });
}
}, 500);
});
};
if (process.env.NODE_ENV !== 'production' && process.env.REACT_APP_TRACE_UPDATES) {
const { whyDidYouUpdate } = require('why-did-you-update');
whyDidYouUpdate(React);
}
// Define which plugins we want to use (all of the above)
const plugins: Plugins = {
content: [slate(),button(), spacer,spacer1, imagePlugin({ imageUpload: fakeImageUploadService('/images/react.png') }),carouselPlugin({ imageUpload: fakeImageUploadService('/images/react.png') }), video, divider, html5video],
layout: [
background({
defaultPlugin: slate(),
imageUpload: fakeImageUploadService('/images/sea-bg.jpg'),
enabledModes: ModeEnum.COLOR_MODE_FLAG | ModeEnum.IMAGE_MODE_FLAG | ModeEnum.GRADIENT_MODE_FLAG,
}),
// parallax({ defaultPlugin: slate() }),
],
// If you pass the native key the editor will be able to handle native drag and drop events (such as links, text, etc).
// The native plugin will then be responsible to properly display the data which was dropped onto the editor.
native,
};
const editor = new Editor({
plugins: plugins,
// pass the content states
editables: [
...content,
// creates an empty state, basically like the line above
createEmptyState(),
],
});
editor.trigger.mode.edit();
// Render the editables - the areas that are editable
const elements = document.querySelectorAll('.editable');
elements.forEach(element => {
ReactDOM.render((
{
if (element.dataset.id === '1') {
console.log(state)
}
}}*/
/>
), element);
});
// Render the ui controls, you could implement your own here, of course.
ReactDOM.render((
), document.getElementById('controls'));
// Render as beautified mark up (html)
ReactDOM.render(, document.getElementById('editable-static'));
editor.trigger.editable.add({ id: '10', cells: [] });