@silexlabs/silex 3.0.0-alpha.100
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.default +19 -0
- package/.silex.js +37 -0
- package/LICENSE +661 -0
- package/README.md +96 -0
- package/dist/client/client/api.d.ts +85 -0
- package/dist/client/client/assetUrl.d.ts +51 -0
- package/dist/client/client/config.d.ts +58 -0
- package/dist/client/client/events.d.ts +14 -0
- package/dist/client/client/expose.d.ts +8 -0
- package/dist/client/client/grapesjs/LoginDialog.d.ts +15 -0
- package/dist/client/client/grapesjs/PublicationManager.d.ts +72 -0
- package/dist/client/client/grapesjs/PublicationUi.d.ts +62 -0
- package/dist/client/client/grapesjs/blocks.d.ts +1 -0
- package/dist/client/client/grapesjs/breadcrumbs.d.ts +1 -0
- package/dist/client/client/grapesjs/footer.d.ts +2 -0
- package/dist/client/client/grapesjs/index.d.ts +5 -0
- package/dist/client/client/grapesjs/internal-links.d.ts +1 -0
- package/dist/client/client/grapesjs/new-page-dialog.d.ts +2 -0
- package/dist/client/client/grapesjs/openImport.d.ts +9 -0
- package/dist/client/client/grapesjs/page-panel.d.ts +3 -0
- package/dist/client/client/grapesjs/project-bar.d.ts +1 -0
- package/dist/client/client/grapesjs/rich-text.d.ts +1 -0
- package/dist/client/client/grapesjs/semantic.d.ts +1 -0
- package/dist/client/client/grapesjs/settings.d.ts +2 -0
- package/dist/client/client/grapesjs/storage.d.ts +1 -0
- package/dist/client/client/grapesjs/symbolDialogs.d.ts +3 -0
- package/dist/client/client/index.d.ts +5 -0
- package/dist/client/client/publication-transformers.d.ts +41 -0
- package/dist/client/client/utils.d.ts +2 -0
- package/dist/client/constants.d.ts +29 -0
- package/dist/client/css/admin.css +4491 -0
- package/dist/client/index.html +9 -0
- package/dist/client/js/main.js +321 -0
- package/dist/client/js/main.js.LICENSE.txt +24 -0
- package/dist/client/page.d.ts +2 -0
- package/dist/client/types.d.ts +334 -0
- package/dist/plugins/client/client/api.d.ts +85 -0
- package/dist/plugins/client/client/api.js +114 -0
- package/dist/plugins/client/client/api.js.map +1 -0
- package/dist/plugins/client/client/assetUrl.d.ts +51 -0
- package/dist/plugins/client/client/assetUrl.js +224 -0
- package/dist/plugins/client/client/assetUrl.js.map +1 -0
- package/dist/plugins/client/client/config.d.ts +58 -0
- package/dist/plugins/client/client/config.js +90 -0
- package/dist/plugins/client/client/config.js.map +1 -0
- package/dist/plugins/client/client/events.d.ts +14 -0
- package/dist/plugins/client/client/events.js +34 -0
- package/dist/plugins/client/client/events.js.map +1 -0
- package/dist/plugins/client/client/grapesjs/LoginDialog.d.ts +15 -0
- package/dist/plugins/client/client/grapesjs/LoginDialog.js +195 -0
- package/dist/plugins/client/client/grapesjs/LoginDialog.js.map +1 -0
- package/dist/plugins/client/client/grapesjs/PublicationManager.d.ts +72 -0
- package/dist/plugins/client/client/grapesjs/PublicationManager.js +356 -0
- package/dist/plugins/client/client/grapesjs/PublicationManager.js.map +1 -0
- package/dist/plugins/client/client/grapesjs/PublicationUi.d.ts +62 -0
- package/dist/plugins/client/client/grapesjs/PublicationUi.js +336 -0
- package/dist/plugins/client/client/grapesjs/PublicationUi.js.map +1 -0
- package/dist/plugins/client/client/grapesjs/blocks.d.ts +1 -0
- package/dist/plugins/client/client/grapesjs/blocks.js +37 -0
- package/dist/plugins/client/client/grapesjs/blocks.js.map +1 -0
- package/dist/plugins/client/client/grapesjs/breadcrumbs.d.ts +1 -0
- package/dist/plugins/client/client/grapesjs/breadcrumbs.js +75 -0
- package/dist/plugins/client/client/grapesjs/breadcrumbs.js.map +1 -0
- package/dist/plugins/client/client/grapesjs/footer.d.ts +2 -0
- package/dist/plugins/client/client/grapesjs/footer.js +28 -0
- package/dist/plugins/client/client/grapesjs/footer.js.map +1 -0
- package/dist/plugins/client/client/grapesjs/index.d.ts +5 -0
- package/dist/plugins/client/client/grapesjs/index.js +313 -0
- package/dist/plugins/client/client/grapesjs/index.js.map +1 -0
- package/dist/plugins/client/client/grapesjs/internal-links.d.ts +1 -0
- package/dist/plugins/client/client/grapesjs/internal-links.js +219 -0
- package/dist/plugins/client/client/grapesjs/internal-links.js.map +1 -0
- package/dist/plugins/client/client/grapesjs/new-page-dialog.d.ts +2 -0
- package/dist/plugins/client/client/grapesjs/new-page-dialog.js +83 -0
- package/dist/plugins/client/client/grapesjs/new-page-dialog.js.map +1 -0
- package/dist/plugins/client/client/grapesjs/openImport.d.ts +9 -0
- package/dist/plugins/client/client/grapesjs/openImport.js +74 -0
- package/dist/plugins/client/client/grapesjs/openImport.js.map +1 -0
- package/dist/plugins/client/client/grapesjs/page-panel.d.ts +3 -0
- package/dist/plugins/client/client/grapesjs/page-panel.js +113 -0
- package/dist/plugins/client/client/grapesjs/page-panel.js.map +1 -0
- package/dist/plugins/client/client/grapesjs/project-bar.d.ts +1 -0
- package/dist/plugins/client/client/grapesjs/project-bar.js +104 -0
- package/dist/plugins/client/client/grapesjs/project-bar.js.map +1 -0
- package/dist/plugins/client/client/grapesjs/rich-text.d.ts +1 -0
- package/dist/plugins/client/client/grapesjs/rich-text.js +31 -0
- package/dist/plugins/client/client/grapesjs/rich-text.js.map +1 -0
- package/dist/plugins/client/client/grapesjs/semantic.d.ts +1 -0
- package/dist/plugins/client/client/grapesjs/semantic.js +110 -0
- package/dist/plugins/client/client/grapesjs/semantic.js.map +1 -0
- package/dist/plugins/client/client/grapesjs/settings.d.ts +2 -0
- package/dist/plugins/client/client/grapesjs/settings.js +198 -0
- package/dist/plugins/client/client/grapesjs/settings.js.map +1 -0
- package/dist/plugins/client/client/grapesjs/storage.d.ts +1 -0
- package/dist/plugins/client/client/grapesjs/storage.js +126 -0
- package/dist/plugins/client/client/grapesjs/storage.js.map +1 -0
- package/dist/plugins/client/client/grapesjs/symbolDialogs.d.ts +3 -0
- package/dist/plugins/client/client/grapesjs/symbolDialogs.js +36 -0
- package/dist/plugins/client/client/grapesjs/symbolDialogs.js.map +1 -0
- package/dist/plugins/client/client/publication-transformers.d.ts +41 -0
- package/dist/plugins/client/client/publication-transformers.js +238 -0
- package/dist/plugins/client/client/publication-transformers.js.map +1 -0
- package/dist/plugins/client/client/utils.d.ts +2 -0
- package/dist/plugins/client/client/utils.js +25 -0
- package/dist/plugins/client/client/utils.js.map +1 -0
- package/dist/plugins/client/constants.d.ts +29 -0
- package/dist/plugins/client/constants.js +46 -0
- package/dist/plugins/client/constants.js.map +1 -0
- package/dist/plugins/client/page.d.ts +2 -0
- package/dist/plugins/client/page.js +31 -0
- package/dist/plugins/client/page.js.map +1 -0
- package/dist/plugins/client/plugins/client/11ty.d.ts +17 -0
- package/dist/plugins/client/plugins/client/11ty.js +86 -0
- package/dist/plugins/client/plugins/client/11ty.js.map +1 -0
- package/dist/plugins/client/plugins/client/publicationRenderer.d.ts +2 -0
- package/dist/plugins/client/plugins/client/publicationRenderer.js +170 -0
- package/dist/plugins/client/plugins/client/publicationRenderer.js.map +1 -0
- package/dist/plugins/client/plugins/client/template.d.ts +2 -0
- package/dist/plugins/client/plugins/client/template.js +183 -0
- package/dist/plugins/client/plugins/client/template.js.map +1 -0
- package/dist/plugins/client/plugins/client/website-info.d.ts +1 -0
- package/dist/plugins/client/plugins/client/website-info.js +72 -0
- package/dist/plugins/client/plugins/client/website-info.js.map +1 -0
- package/dist/plugins/client/types.d.ts +334 -0
- package/dist/plugins/client/types.js +74 -0
- package/dist/plugins/client/types.js.map +1 -0
- package/dist/plugins/server/constants.d.ts +29 -0
- package/dist/plugins/server/constants.js +49 -0
- package/dist/plugins/server/constants.js.map +1 -0
- package/dist/plugins/server/plugins/server/AuthPlugin.d.ts +1 -0
- package/dist/plugins/server/plugins/server/AuthPlugin.js +40 -0
- package/dist/plugins/server/plugins/server/AuthPlugin.js.map +1 -0
- package/dist/plugins/server/plugins/server/Cache.d.ts +2 -0
- package/dist/plugins/server/plugins/server/Cache.js +32 -0
- package/dist/plugins/server/plugins/server/Cache.js.map +1 -0
- package/dist/plugins/server/plugins/server/DownloadConnector.d.ts +29 -0
- package/dist/plugins/server/plugins/server/DownloadConnector.js +129 -0
- package/dist/plugins/server/plugins/server/DownloadConnector.js.map +1 -0
- package/dist/plugins/server/plugins/server/FtpConnector.d.ts +86 -0
- package/dist/plugins/server/plugins/server/FtpConnector.js +526 -0
- package/dist/plugins/server/plugins/server/FtpConnector.js.map +1 -0
- package/dist/plugins/server/plugins/server/GitlabConnector.d.ts +87 -0
- package/dist/plugins/server/plugins/server/GitlabConnector.js +564 -0
- package/dist/plugins/server/plugins/server/GitlabConnector.js.map +1 -0
- package/dist/plugins/server/plugins/server/PublicationOptimizer.d.ts +0 -0
- package/dist/plugins/server/plugins/server/PublicationOptimizer.js +14 -0
- package/dist/plugins/server/plugins/server/PublicationOptimizer.js.map +1 -0
- package/dist/plugins/server/plugins/server/SslPlugin.d.ts +1 -0
- package/dist/plugins/server/plugins/server/SslPlugin.js +86 -0
- package/dist/plugins/server/plugins/server/SslPlugin.js.map +1 -0
- package/dist/plugins/server/plugins/server/StaticPlugin.d.ts +1 -0
- package/dist/plugins/server/plugins/server/StaticPlugin.js +78 -0
- package/dist/plugins/server/plugins/server/StaticPlugin.js.map +1 -0
- package/dist/plugins/server/server/config.d.ts +59 -0
- package/dist/plugins/server/server/config.js +181 -0
- package/dist/plugins/server/server/config.js.map +1 -0
- package/dist/plugins/server/server/connectors/FsHosting.d.ts +13 -0
- package/dist/plugins/server/server/connectors/FsHosting.js +54 -0
- package/dist/plugins/server/server/connectors/FsHosting.js.map +1 -0
- package/dist/plugins/server/server/connectors/FsStorage.d.ts +43 -0
- package/dist/plugins/server/server/connectors/FsStorage.js +257 -0
- package/dist/plugins/server/server/connectors/FsStorage.js.map +1 -0
- package/dist/plugins/server/server/connectors/connectors.d.ts +87 -0
- package/dist/plugins/server/server/connectors/connectors.js +127 -0
- package/dist/plugins/server/server/connectors/connectors.js.map +1 -0
- package/dist/plugins/server/server/events.d.ts +26 -0
- package/dist/plugins/server/server/events.js +31 -0
- package/dist/plugins/server/server/events.js.map +1 -0
- package/dist/plugins/server/server/jobs.d.ts +12 -0
- package/dist/plugins/server/server/jobs.js +77 -0
- package/dist/plugins/server/server/jobs.js.map +1 -0
- package/dist/plugins/server/server/utils/validation.d.ts +7 -0
- package/dist/plugins/server/server/utils/validation.js +38 -0
- package/dist/plugins/server/server/utils/validation.js.map +1 -0
- package/dist/plugins/server/types.d.ts +334 -0
- package/dist/plugins/server/types.js +78 -0
- package/dist/plugins/server/types.js.map +1 -0
- package/dist/server/constants.js +29 -0
- package/dist/server/plugins/server/Cache.js +15 -0
- package/dist/server/server/api/api.js +20 -0
- package/dist/server/server/api/connectorApi.js +216 -0
- package/dist/server/server/api/publicationApi.js +108 -0
- package/dist/server/server/api/websiteApi.js +296 -0
- package/dist/server/server/cli.js +68 -0
- package/dist/server/server/config.js +120 -0
- package/dist/server/server/connectors/FsHosting.js +35 -0
- package/dist/server/server/connectors/FsStorage.js +225 -0
- package/dist/server/server/connectors/connectors.js +89 -0
- package/dist/server/server/events.js +14 -0
- package/dist/server/server/expose.js +27 -0
- package/dist/server/server/express.js +47 -0
- package/dist/server/server/index.js +90 -0
- package/dist/server/server/jobs.js +48 -0
- package/dist/server/server/utils/validation.js +15 -0
- package/dist/server/types.js +34 -0
- package/package.json +209 -0
- package/public/assets/container.png +0 -0
- package/public/assets/favicon.png +0 -0
- package/public/assets/logo-silex-small.png +0 -0
- package/public/robots.txt +2 -0
- package/public/silex.js +24 -0
- package/src/css/_mixins.scss +8 -0
- package/src/css/_variables.scss +33 -0
- package/src/css/dialog.scss +41 -0
- package/src/css/footer.scss +12 -0
- package/src/css/grapesjs-light.scss +180 -0
- package/src/css/grapesjs.scss +152 -0
- package/src/css/index.scss +32 -0
- package/src/css/light.scss +7 -0
- package/src/css/loader.scss +12 -0
- package/src/css/page-panel.scss +65 -0
- package/src/css/project-bar.scss +102 -0
- package/src/css/silex.scss +189 -0
- package/src/css/website-info.scss +14 -0
- package/src/html/debug.pug +8 -0
- package/src/html/index.pug +39 -0
- package/src/html/templates/includes.pug +1 -0
- package/src/html/templates/workspace.pug +2 -0
- package/src/ts/client/api.ts +144 -0
- package/src/ts/client/assetUrl.test.ts +125 -0
- package/src/ts/client/assetUrl.ts +235 -0
- package/src/ts/client/config.ts +105 -0
- package/src/ts/client/events.ts +34 -0
- package/src/ts/client/expose.ts +30 -0
- package/src/ts/client/grapesjs/LoginDialog.ts +204 -0
- package/src/ts/client/grapesjs/PublicationManager.ts +370 -0
- package/src/ts/client/grapesjs/PublicationUi.ts +342 -0
- package/src/ts/client/grapesjs/blocks.ts +37 -0
- package/src/ts/client/grapesjs/breadcrumbs.ts +79 -0
- package/src/ts/client/grapesjs/eleventy.ts +47 -0
- package/src/ts/client/grapesjs/footer.ts +27 -0
- package/src/ts/client/grapesjs/index.ts +335 -0
- package/src/ts/client/grapesjs/internal-links.test.ts +105 -0
- package/src/ts/client/grapesjs/internal-links.ts +225 -0
- package/src/ts/client/grapesjs/new-page-dialog.ts +90 -0
- package/src/ts/client/grapesjs/openImport.ts +81 -0
- package/src/ts/client/grapesjs/page-panel.ts +118 -0
- package/src/ts/client/grapesjs/project-bar.ts +107 -0
- package/src/ts/client/grapesjs/rich-text.ts +33 -0
- package/src/ts/client/grapesjs/semantic.ts +114 -0
- package/src/ts/client/grapesjs/settings.ts +208 -0
- package/src/ts/client/grapesjs/storage.ts +121 -0
- package/src/ts/client/grapesjs/symbolDialogs.ts +38 -0
- package/src/ts/client/index.ts +98 -0
- package/src/ts/client/publication-transformers.test.ts +199 -0
- package/src/ts/client/publication-transformers.ts +263 -0
- package/src/ts/client/utils.ts +28 -0
- package/src/ts/constants.ts +52 -0
- package/src/ts/externs.ts +18 -0
- package/src/ts/page.ts +31 -0
- package/src/ts/plugins/client/11ty.ts +104 -0
- package/src/ts/plugins/client/publicationRenderer.ts +174 -0
- package/src/ts/plugins/client/template.ts +192 -0
- package/src/ts/plugins/client/website-info.ts +84 -0
- package/src/ts/plugins/server/AuthPlugin.ts +38 -0
- package/src/ts/plugins/server/Cache.ts +28 -0
- package/src/ts/plugins/server/DownloadConnector.ts +148 -0
- package/src/ts/plugins/server/FtpConnector.test.ts +82 -0
- package/src/ts/plugins/server/FtpConnector.ts +609 -0
- package/src/ts/plugins/server/GitlabConnector.ts +644 -0
- package/src/ts/plugins/server/PublicationOptimizer.ts +14 -0
- package/src/ts/plugins/server/SslPlugin.ts +84 -0
- package/src/ts/plugins/server/StaticPlugin.ts +79 -0
- package/src/ts/server/api/api.ts +19 -0
- package/src/ts/server/api/connectorApi.ts +345 -0
- package/src/ts/server/api/publicationApi.ts +159 -0
- package/src/ts/server/api/websiteApi.ts +432 -0
- package/src/ts/server/cli.ts +65 -0
- package/src/ts/server/config.ts +189 -0
- package/src/ts/server/connectors/FsHosting.ts +60 -0
- package/src/ts/server/connectors/FsStorage.test.ts +51 -0
- package/src/ts/server/connectors/FsStorage.ts +261 -0
- package/src/ts/server/connectors/connectors.ts +203 -0
- package/src/ts/server/events.ts +37 -0
- package/src/ts/server/expose.ts +19 -0
- package/src/ts/server/express.ts +70 -0
- package/src/ts/server/index.ts +100 -0
- package/src/ts/server/jobs.test.ts +75 -0
- package/src/ts/server/jobs.ts +87 -0
- package/src/ts/server/utils/BackwardCompat.ts +552 -0
- package/src/ts/server/utils/validation.ts +34 -0
- package/src/ts/types.ts +339 -0
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Silex website builder, free/libre no-code tool for makers.
|
|
3
|
+
* Copyright (c) 2023 lexoyo and Silex Labs foundation
|
|
4
|
+
*
|
|
5
|
+
* This program is free software: you can redistribute it and/or modify
|
|
6
|
+
* it under the terms of the GNU Affero General Public License as published by
|
|
7
|
+
* the Free Software Foundation, either version 3 of the License, or any later version.
|
|
8
|
+
*
|
|
9
|
+
* This program is distributed in the hope that it will be useful,
|
|
10
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
12
|
+
* GNU Affero General Public License for more details.
|
|
13
|
+
*
|
|
14
|
+
* You should have received a copy of the GNU Affero General Public License
|
|
15
|
+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
16
|
+
*/
|
|
17
|
+
import grapesjs from 'grapesjs';
|
|
18
|
+
import openImport from './openImport';
|
|
19
|
+
/**
|
|
20
|
+
* @fileoverview This is where grapes config gets created
|
|
21
|
+
* Handle plugins, options and initialization of the editor
|
|
22
|
+
*/
|
|
23
|
+
// ////////////////////
|
|
24
|
+
// Plugins
|
|
25
|
+
// ////////////////////
|
|
26
|
+
import blocksBasicPlugin from 'grapesjs-blocks-basic';
|
|
27
|
+
import styleFilterPlugin from 'grapesjs-style-filter';
|
|
28
|
+
import formPlugin from 'grapesjs-plugin-forms';
|
|
29
|
+
import codePlugin from 'grapesjs-custom-code';
|
|
30
|
+
import uiSuggestClasses from '@silexlabs/grapesjs-ui-suggest-classes';
|
|
31
|
+
import symbolsPlugin from '@silexlabs/grapesjs-symbols';
|
|
32
|
+
import loadingPlugin from '@silexlabs/grapesjs-loading';
|
|
33
|
+
import fontsDialogPlugin, { cmdOpenFonts } from '@silexlabs/grapesjs-fonts';
|
|
34
|
+
import symbolDialogsPlugin, { cmdPromptAddSymbol } from './symbolDialogs';
|
|
35
|
+
import loginDialogPlugin, { cmdLogout } from './LoginDialog';
|
|
36
|
+
import footerPlugin from './footer';
|
|
37
|
+
import breadcrumbsPlugin from './breadcrumbs';
|
|
38
|
+
import rateLimitPlugin from '@silexlabs/grapesjs-storage-rate-limit';
|
|
39
|
+
import { pagePanelPlugin, cmdTogglePages, cmdAddPage } from './page-panel';
|
|
40
|
+
import { newPageDialog, cmdOpenNewPageDialog } from './new-page-dialog';
|
|
41
|
+
import { projectBarPlugin } from './project-bar';
|
|
42
|
+
import { settingsDialog, cmdOpenSettings } from './settings';
|
|
43
|
+
import { blocksPlugin } from './blocks';
|
|
44
|
+
import { semanticPlugin } from './semantic';
|
|
45
|
+
import { richTextPlugin } from './rich-text';
|
|
46
|
+
import { internalLinksPlugin } from './internal-links';
|
|
47
|
+
import publicationManagerPlugin from './PublicationManager';
|
|
48
|
+
import { storagePlugin } from './storage';
|
|
49
|
+
import { API_PATH, API_WEBSITE_ASSETS_WRITE, API_WEBSITE_PATH } from '../../constants';
|
|
50
|
+
const plugins = [
|
|
51
|
+
{ name: './project-bar', value: projectBarPlugin },
|
|
52
|
+
{ name: './settings', value: settingsDialog },
|
|
53
|
+
{ name: '@silexlabs/grapesjs-fonts', value: fontsDialogPlugin },
|
|
54
|
+
{ name: './new-page-dialog', value: newPageDialog },
|
|
55
|
+
{ name: './page-panel', value: pagePanelPlugin },
|
|
56
|
+
{ name: 'grapesjs-blocks-basic', value: blocksBasicPlugin },
|
|
57
|
+
{ name: './blocks', value: blocksPlugin },
|
|
58
|
+
{ name: './semantic', value: semanticPlugin },
|
|
59
|
+
{ name: './rich-text', value: richTextPlugin },
|
|
60
|
+
{ name: 'grapesjs-style-filter', value: styleFilterPlugin },
|
|
61
|
+
{ name: 'grapesjs-plugin-forms', value: formPlugin },
|
|
62
|
+
{ name: 'grapesjs-custom-code', value: codePlugin },
|
|
63
|
+
{ name: './internal-links', value: internalLinksPlugin },
|
|
64
|
+
{ name: '@silexlabs/grapesjs-ui-suggest-classes', value: uiSuggestClasses },
|
|
65
|
+
{ name: './symbolDialogs', value: symbolDialogsPlugin },
|
|
66
|
+
{ name: '@silexlabs/grapesjs-symbols', value: symbolsPlugin },
|
|
67
|
+
{ name: './PublicationManager', value: publicationManagerPlugin },
|
|
68
|
+
{ name: './storage', value: storagePlugin },
|
|
69
|
+
{ name: './LoginDialog', value: loginDialogPlugin },
|
|
70
|
+
{ name: '@silexlabs/grapesjs-loading', value: loadingPlugin },
|
|
71
|
+
{ name: './breadcrumbs', value: breadcrumbsPlugin },
|
|
72
|
+
{ name: './footer', value: footerPlugin },
|
|
73
|
+
{ name: '@silexlabs/grapesjs-storage-rate-limit', value: rateLimitPlugin },
|
|
74
|
+
];
|
|
75
|
+
// Check that all plugins are loaded correctly
|
|
76
|
+
plugins
|
|
77
|
+
.filter(p => typeof p.value !== 'function')
|
|
78
|
+
.forEach(p => {
|
|
79
|
+
throw new Error(`Plugin ${p.name} could not be loaded correctly (${p.value})`);
|
|
80
|
+
});
|
|
81
|
+
// Constants
|
|
82
|
+
const PRIMARY_COLOR = '#333333';
|
|
83
|
+
const SECONDARY_COLOR = '#ddd';
|
|
84
|
+
const TERTIARY_COLOR = '#8873FE';
|
|
85
|
+
const QUATERNARY_COLOR = '#A291FF';
|
|
86
|
+
const DARKER_PRIMARY_COLOR = '#363636';
|
|
87
|
+
const LIGHTER_PRIMARY_COLOR = '#575757';
|
|
88
|
+
// ////////////////////
|
|
89
|
+
// Config
|
|
90
|
+
// ////////////////////
|
|
91
|
+
const catBasic = 'Containers';
|
|
92
|
+
const catComponents = 'Components';
|
|
93
|
+
export function getEditorConfig(id, connectorId, rootUrl) {
|
|
94
|
+
return {
|
|
95
|
+
container: '#gjs',
|
|
96
|
+
height: '100%',
|
|
97
|
+
showOffsets: true,
|
|
98
|
+
showDevices: true,
|
|
99
|
+
//pageManager: {},
|
|
100
|
+
layerManager: {
|
|
101
|
+
appendTo: '.layer-manager-container',
|
|
102
|
+
},
|
|
103
|
+
blockManager: {
|
|
104
|
+
appendTo: '.block-manager-container',
|
|
105
|
+
},
|
|
106
|
+
assetManager: {
|
|
107
|
+
upload: `${rootUrl}${API_PATH}${API_WEBSITE_PATH}${API_WEBSITE_ASSETS_WRITE}/?websiteId=${id}${connectorId ? `&connectorId=${connectorId}` : ''}`,
|
|
108
|
+
},
|
|
109
|
+
storageManager: {
|
|
110
|
+
autoload: false,
|
|
111
|
+
type: 'connector',
|
|
112
|
+
options: {
|
|
113
|
+
connector: {
|
|
114
|
+
id,
|
|
115
|
+
connectorId,
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
},
|
|
119
|
+
cssIcons: './css/all.min.css',
|
|
120
|
+
canvasCss: `
|
|
121
|
+
:root {
|
|
122
|
+
--primaryColor: ${PRIMARY_COLOR};
|
|
123
|
+
--secondaryColor: ${SECONDARY_COLOR};
|
|
124
|
+
--tertiaryColor: ${TERTIARY_COLOR};
|
|
125
|
+
--quaternaryColor: ${QUATERNARY_COLOR};
|
|
126
|
+
--darkerPrimaryColor: ${DARKER_PRIMARY_COLOR};
|
|
127
|
+
--lighterPrimaryColor: ${LIGHTER_PRIMARY_COLOR};
|
|
128
|
+
}
|
|
129
|
+
.gjs-frame-selected {
|
|
130
|
+
box-shadow: 0 0 0 2px rgba(255, 0, 0, 0.5) !important; // Change to red border
|
|
131
|
+
}
|
|
132
|
+
.gjs-selected {
|
|
133
|
+
outline: 2px solid var(--tertiaryColor) !important;
|
|
134
|
+
outline-offset: -2px;
|
|
135
|
+
}
|
|
136
|
+
`,
|
|
137
|
+
plugins: plugins.map(p => p.value),
|
|
138
|
+
pluginsOpts: {
|
|
139
|
+
[blocksBasicPlugin]: {
|
|
140
|
+
blocks: ['text', 'image', 'video', 'map'],
|
|
141
|
+
category: catBasic,
|
|
142
|
+
//flexGrid: true,
|
|
143
|
+
},
|
|
144
|
+
[projectBarPlugin]: {
|
|
145
|
+
panels: [
|
|
146
|
+
{
|
|
147
|
+
id: 'dash',
|
|
148
|
+
className: 'logo',
|
|
149
|
+
attributes: { title: 'Dashboard' },
|
|
150
|
+
command: () => {
|
|
151
|
+
window.location.href = '/';
|
|
152
|
+
},
|
|
153
|
+
}, {
|
|
154
|
+
id: 'block-manager-btn',
|
|
155
|
+
className: 'block-manager-btn fa fa-fw fa-plus',
|
|
156
|
+
attributes: { title: 'Blocks', containerClassName: 'block-manager-container', },
|
|
157
|
+
command: 'open-blocks',
|
|
158
|
+
}, {
|
|
159
|
+
id: 'symbols-btn',
|
|
160
|
+
className: 'symbols-btn fa-regular fa-gem',
|
|
161
|
+
attributes: { title: 'Symbols', containerClassName: 'symbols-list-container', },
|
|
162
|
+
command: 'open-symbols',
|
|
163
|
+
buttons: [
|
|
164
|
+
{
|
|
165
|
+
id: 'symbol-create-button',
|
|
166
|
+
className: 'pages__add-page fa-solid fa-plus',
|
|
167
|
+
label: 'Create symbol from selection',
|
|
168
|
+
command: cmdPromptAddSymbol,
|
|
169
|
+
},
|
|
170
|
+
],
|
|
171
|
+
}, {
|
|
172
|
+
id: 'page-panel-btn',
|
|
173
|
+
className: 'page-panel-btn fa fa-fw fa-file',
|
|
174
|
+
attributes: { title: 'Pages', containerClassName: 'page-panel-container', },
|
|
175
|
+
command: cmdTogglePages,
|
|
176
|
+
buttons: [{
|
|
177
|
+
className: 'pages__add-page fa fa-file',
|
|
178
|
+
command: cmdAddPage,
|
|
179
|
+
text: '+',
|
|
180
|
+
}],
|
|
181
|
+
}, {
|
|
182
|
+
id: 'layer-manager-btn',
|
|
183
|
+
className: 'layer-manager-btn fa-solid fa-layer-group',
|
|
184
|
+
attributes: { title: 'Layers', containerClassName: 'layer-manager-container', },
|
|
185
|
+
command: 'open-layers',
|
|
186
|
+
}, {
|
|
187
|
+
id: 'font-dialog-btn',
|
|
188
|
+
className: 'font-manager-btn fa-solid fa-font',
|
|
189
|
+
attributes: { title: 'Fonts' },
|
|
190
|
+
command: () => {
|
|
191
|
+
editor.runCommand(cmdOpenFonts);
|
|
192
|
+
},
|
|
193
|
+
}, {
|
|
194
|
+
id: 'settings-dialog-btn',
|
|
195
|
+
className: 'page-panel-btn fa-solid fa-gears',
|
|
196
|
+
attributes: { title: 'Settings' },
|
|
197
|
+
command: cmdOpenSettings,
|
|
198
|
+
}, {
|
|
199
|
+
id: 'spacer',
|
|
200
|
+
attributes: {},
|
|
201
|
+
className: 'project-bar-spacer',
|
|
202
|
+
}, {
|
|
203
|
+
id: 'dash2',
|
|
204
|
+
className: 'fa-solid fa-house',
|
|
205
|
+
attributes: { title: 'Dashboard' },
|
|
206
|
+
command: () => {
|
|
207
|
+
window.location.href = '/';
|
|
208
|
+
},
|
|
209
|
+
}, {
|
|
210
|
+
id: 'help',
|
|
211
|
+
className: 'fa fa-fw fa-question-circle',
|
|
212
|
+
attributes: { title: 'Documentation' },
|
|
213
|
+
command: () => {
|
|
214
|
+
window.open('https://docs.silex.me/', '_blank');
|
|
215
|
+
},
|
|
216
|
+
}, {
|
|
217
|
+
id: 'logout-button',
|
|
218
|
+
className: 'page-panel-btn fa fa-fw fa-sign-out',
|
|
219
|
+
attributes: { title: 'Sign out' },
|
|
220
|
+
command: cmdLogout,
|
|
221
|
+
},
|
|
222
|
+
],
|
|
223
|
+
},
|
|
224
|
+
[publicationManagerPlugin]: {
|
|
225
|
+
appendTo: 'options',
|
|
226
|
+
websiteId: id,
|
|
227
|
+
},
|
|
228
|
+
[pagePanelPlugin]: {
|
|
229
|
+
cmdOpenNewPageDialog,
|
|
230
|
+
cmdOpenSettings,
|
|
231
|
+
appendTo: '.page-panel-container',
|
|
232
|
+
},
|
|
233
|
+
[uiSuggestClasses]: {
|
|
234
|
+
enableCount: false,
|
|
235
|
+
enablePerformance: false,
|
|
236
|
+
},
|
|
237
|
+
[internalLinksPlugin]: {
|
|
238
|
+
// FIXME: warn the user about links in error
|
|
239
|
+
onError: (errors) => console.warn('Links errors:', errors),
|
|
240
|
+
},
|
|
241
|
+
[codePlugin]: {
|
|
242
|
+
blockLabel: 'HTML',
|
|
243
|
+
blockCustomCode: {
|
|
244
|
+
category: catComponents,
|
|
245
|
+
}
|
|
246
|
+
},
|
|
247
|
+
[symbolsPlugin]: {
|
|
248
|
+
appendTo: '.symbols-list-container',
|
|
249
|
+
emptyText: 'No symbol yet.',
|
|
250
|
+
primaryColor: PRIMARY_COLOR,
|
|
251
|
+
secondaryColor: SECONDARY_COLOR,
|
|
252
|
+
highlightColor: TERTIARY_COLOR,
|
|
253
|
+
},
|
|
254
|
+
[fontsDialogPlugin]: {
|
|
255
|
+
api_key: 'AIzaSyAdJTYSLPlKz4w5Iqyy-JAF2o8uQKd1FKc',
|
|
256
|
+
},
|
|
257
|
+
[loginDialogPlugin]: {
|
|
258
|
+
id,
|
|
259
|
+
},
|
|
260
|
+
[rateLimitPlugin]: {
|
|
261
|
+
time: 5000,
|
|
262
|
+
},
|
|
263
|
+
},
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
// ////////////////////
|
|
267
|
+
// Initialize editor
|
|
268
|
+
// ////////////////////
|
|
269
|
+
// Keep a ref to the editor singleton
|
|
270
|
+
let editor;
|
|
271
|
+
export async function initEditor(config) {
|
|
272
|
+
if (editor)
|
|
273
|
+
throw new Error('Grapesjs editor already created');
|
|
274
|
+
return new Promise((resolve, reject) => {
|
|
275
|
+
try {
|
|
276
|
+
editor = grapesjs.init(config);
|
|
277
|
+
}
|
|
278
|
+
catch (e) {
|
|
279
|
+
console.error('Error initializing GrapesJs with plugins:', plugins, e);
|
|
280
|
+
reject(e);
|
|
281
|
+
}
|
|
282
|
+
// customize the editor
|
|
283
|
+
['text']
|
|
284
|
+
.forEach(id => editor.Blocks.get(id)?.set('category', 'Basics'));
|
|
285
|
+
['image', 'video']
|
|
286
|
+
.forEach(id => editor.Blocks.get(id)?.set('category', 'Media'));
|
|
287
|
+
['map']
|
|
288
|
+
.forEach(id => editor.Blocks.get(id)?.set('category', 'Components'));
|
|
289
|
+
editor.Blocks.render([]);
|
|
290
|
+
editor.Commands.add('gjs-open-import-webpage', openImport(editor, {
|
|
291
|
+
modalImportLabel: '',
|
|
292
|
+
modalImportContent: 'Paste a web page HTML code here.',
|
|
293
|
+
modalImportButton: 'Import',
|
|
294
|
+
modalImportTitle: 'Import from website',
|
|
295
|
+
}));
|
|
296
|
+
editor.on('load', () => {
|
|
297
|
+
// remove blocks and layers buttons from the properties
|
|
298
|
+
editor.Panels.getPanel('views').buttons.remove('open-blocks');
|
|
299
|
+
editor.Panels.getPanel('views').buttons.remove('open-layers');
|
|
300
|
+
editor.Panels.getPanel('views').view.el.firstChild.style.justifyContent = 'initial'; // align left
|
|
301
|
+
editor.Panels.getPanel('options').buttons.remove('export-template');
|
|
302
|
+
editor.BlockManager.render(null);
|
|
303
|
+
// use the style filter plugin
|
|
304
|
+
editor.StyleManager.addProperty('extra', { extend: 'filter' });
|
|
305
|
+
// GrapesJs editor is ready
|
|
306
|
+
resolve(editor);
|
|
307
|
+
});
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
export function getEditor() {
|
|
311
|
+
return editor;
|
|
312
|
+
}
|
|
313
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/ts/client/grapesjs/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const internalLinksPlugin: (editor: any, opts: any) => void;
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Silex website builder, free/libre no-code tool for makers.
|
|
3
|
+
* Copyright (c) 2023 lexoyo and Silex Labs foundation
|
|
4
|
+
*
|
|
5
|
+
* This program is free software: you can redistribute it and/or modify
|
|
6
|
+
* it under the terms of the GNU Affero General Public License as published by
|
|
7
|
+
* the Free Software Foundation, either version 3 of the License, or any later version.
|
|
8
|
+
*
|
|
9
|
+
* This program is distributed in the hope that it will be useful,
|
|
10
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
12
|
+
* GNU Affero General Public License for more details.
|
|
13
|
+
*
|
|
14
|
+
* You should have received a copy of the GNU Affero General Public License
|
|
15
|
+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
16
|
+
*/
|
|
17
|
+
import { html, render } from 'lit-html';
|
|
18
|
+
import { map } from 'lit-html/directives/map.js';
|
|
19
|
+
import { getPageLink } from '../../page';
|
|
20
|
+
// constants
|
|
21
|
+
const pluginName = 'internal-links';
|
|
22
|
+
const options = [
|
|
23
|
+
{ id: '', name: '-' },
|
|
24
|
+
{ id: 'url', name: 'URL' },
|
|
25
|
+
{ id: 'email', name: 'Email' },
|
|
26
|
+
{ id: 'page', name: 'Page' },
|
|
27
|
+
];
|
|
28
|
+
// plugin code
|
|
29
|
+
export const internalLinksPlugin = (editor, opts) => {
|
|
30
|
+
// update links when a page link changes
|
|
31
|
+
function onAll(cbk) {
|
|
32
|
+
editor.Pages.getAll()
|
|
33
|
+
.forEach(page => {
|
|
34
|
+
page.getMainComponent()
|
|
35
|
+
.onAll(cbk);
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
editor.on('page', ({ event, page }) => {
|
|
39
|
+
if (!page)
|
|
40
|
+
return; // fixes UT
|
|
41
|
+
switch (event) {
|
|
42
|
+
case 'change:name':
|
|
43
|
+
// update all links to this page
|
|
44
|
+
onAll(component => {
|
|
45
|
+
if (component.getAttributes().href === getPageLink(page.previous('name'))) {
|
|
46
|
+
component.setAttributes({
|
|
47
|
+
href: getPageLink(page.get('name')),
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
break;
|
|
52
|
+
case 'remove':
|
|
53
|
+
// mark all links as issues
|
|
54
|
+
const issues = [];
|
|
55
|
+
onAll(component => {
|
|
56
|
+
console.log(component.getAttributes().href, getPageLink(page.previous('name')), page.previous('name'));
|
|
57
|
+
if (component.getAttributes().href === getPageLink(page.previous('name'))) {
|
|
58
|
+
issues.push(component);
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
opts?.onError(issues);
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
// utility functions to render the UI
|
|
66
|
+
function getUi(type, href) {
|
|
67
|
+
switch (type) {
|
|
68
|
+
case 'email':
|
|
69
|
+
const mailTo = href.replace('mailto:', '').split('?');
|
|
70
|
+
const email = mailTo[0];
|
|
71
|
+
const params = (mailTo[1] || '').split('&').reduce((acc, item) => {
|
|
72
|
+
const items = item.split('=');
|
|
73
|
+
acc[items[0]] = items[1];
|
|
74
|
+
return acc;
|
|
75
|
+
}, {});
|
|
76
|
+
return html `<div class="href-next__email-inputs">
|
|
77
|
+
<label for="href-next__email" class="gjs-one-bg silex-label">Email address</label>
|
|
78
|
+
<input class="href-next__email" placeholder="Insert email" type="email" value=${email || ''}/>
|
|
79
|
+
<label for="href-next__email-subject" class="gjs-one-bg silex-label">Subject</label>
|
|
80
|
+
<input class="href-next__email-subject" placeholder="Insert subject" value=${params.subject || ''}/>
|
|
81
|
+
</div>`;
|
|
82
|
+
case 'page':
|
|
83
|
+
return html `<div class="href-next__page-inputs">
|
|
84
|
+
<label for="href-next__page" class="gjs-one-bg silex-label">Page name</label>
|
|
85
|
+
<select id="href-next__page" class="href-next__page">
|
|
86
|
+
${map(editor.Pages.getAll(), page => html `<option
|
|
87
|
+
?selected=${getPageLink(page.getName()) === href}
|
|
88
|
+
value=${getPageLink(page.getName())}>
|
|
89
|
+
${page.getName() || 'Main'}
|
|
90
|
+
</option>`)}
|
|
91
|
+
</select>
|
|
92
|
+
</div>`;
|
|
93
|
+
case 'url':
|
|
94
|
+
return html `<div class="href-next__url-inputs">
|
|
95
|
+
<label for="href-next__url" class="gjs-one-bg silex-label">URL</label>
|
|
96
|
+
<input class="href-next__url" placeholder="Insert URL" type="url" value=${href}/>
|
|
97
|
+
</div>`;
|
|
98
|
+
default:
|
|
99
|
+
return '';
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
function getDefaultHref(type) {
|
|
103
|
+
switch (type) {
|
|
104
|
+
case 'email': return 'mailto:';
|
|
105
|
+
case 'page': return getPageLink(null);
|
|
106
|
+
case 'url': return 'https://';
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
function doRender(el, href = '') {
|
|
110
|
+
const type = getType(href);
|
|
111
|
+
const ui = getUi(type, href);
|
|
112
|
+
render(html `
|
|
113
|
+
<label for="href-next__type" class="gjs-one-bg silex-label">Type</label>
|
|
114
|
+
<select id="href-next__type" class="href-next__type" @change=${event => doRender(el, getDefaultHref(event.target.value))}>
|
|
115
|
+
${map(options, opt => html `
|
|
116
|
+
<option value="${opt.id}" ?selected=${type === opt.id}>${opt.name}</option>
|
|
117
|
+
`)}
|
|
118
|
+
</select>
|
|
119
|
+
${ui}
|
|
120
|
+
`, el);
|
|
121
|
+
}
|
|
122
|
+
function getType(href) {
|
|
123
|
+
if (href.indexOf('mailto:') === 0) {
|
|
124
|
+
return 'email';
|
|
125
|
+
}
|
|
126
|
+
else if (href.indexOf('./') === 0) {
|
|
127
|
+
return 'page';
|
|
128
|
+
}
|
|
129
|
+
else if (href) {
|
|
130
|
+
return 'url';
|
|
131
|
+
}
|
|
132
|
+
return '';
|
|
133
|
+
}
|
|
134
|
+
function doRenderCurrent(el) {
|
|
135
|
+
doRender(el, editor.getSelected()?.getAttributes().href || '');
|
|
136
|
+
}
|
|
137
|
+
// Add the new trait to all component types
|
|
138
|
+
editor.DomComponents.getTypes().map(type => {
|
|
139
|
+
editor.DomComponents.addType(type.id, {
|
|
140
|
+
model: {
|
|
141
|
+
defaults: {
|
|
142
|
+
traits: [
|
|
143
|
+
// Keep the type original traits
|
|
144
|
+
...editor.DomComponents.getType(type.id).model.prototype.defaults.traits
|
|
145
|
+
// Filter original href trait
|
|
146
|
+
.filter(trait => trait.name ? trait.name !== 'href' : trait !== 'href'),
|
|
147
|
+
// Add the new trait
|
|
148
|
+
{
|
|
149
|
+
label: 'Link',
|
|
150
|
+
type: 'href-next',
|
|
151
|
+
name: 'href',
|
|
152
|
+
},
|
|
153
|
+
]
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
editor.TraitManager.addType('href-next', {
|
|
159
|
+
createInput({ trait }) {
|
|
160
|
+
// Create a new element container and add some content
|
|
161
|
+
const el = document.createElement('div');
|
|
162
|
+
// update the UI when a page is added/renamed/removed
|
|
163
|
+
editor.on('page', () => doRenderCurrent(el));
|
|
164
|
+
doRenderCurrent(el);
|
|
165
|
+
// this will be the element passed to onEvent and onUpdate
|
|
166
|
+
return el;
|
|
167
|
+
},
|
|
168
|
+
// Update the component based on UI changes
|
|
169
|
+
// `elInput` is the result HTMLElement you get from `createInput`
|
|
170
|
+
onEvent({ elInput, component, event }) {
|
|
171
|
+
const inputType = elInput.querySelector('.href-next__type');
|
|
172
|
+
let href = '';
|
|
173
|
+
// Compute the new HREF value
|
|
174
|
+
switch (inputType.value) {
|
|
175
|
+
case 'page':
|
|
176
|
+
const valPage = elInput.querySelector('.href-next__page')?.value;
|
|
177
|
+
href = valPage || getDefaultHref('page');
|
|
178
|
+
break;
|
|
179
|
+
case 'url':
|
|
180
|
+
const valUrl = elInput.querySelector('.href-next__url')?.value;
|
|
181
|
+
href = valUrl || getDefaultHref('url');
|
|
182
|
+
break;
|
|
183
|
+
case 'email':
|
|
184
|
+
const valEmail = elInput.querySelector('.href-next__email')?.value;
|
|
185
|
+
const valSubj = elInput.querySelector('.href-next__email-subject')?.value;
|
|
186
|
+
href = valEmail ? `mailto:${valEmail}${valSubj ? `?subject=${valSubj}` : ''}` : getDefaultHref('email');
|
|
187
|
+
break;
|
|
188
|
+
default:
|
|
189
|
+
href = '';
|
|
190
|
+
}
|
|
191
|
+
// Store the new HREF value
|
|
192
|
+
component.addAttributes({ href });
|
|
193
|
+
// Handle the tag name
|
|
194
|
+
if (href === '') {
|
|
195
|
+
// Not a link
|
|
196
|
+
if (component.get('tagName').toUpperCase() === 'A') {
|
|
197
|
+
// Retrieve the original stored value
|
|
198
|
+
const original = component.get('originalTagName') ?? 'DIV';
|
|
199
|
+
// Case of the inline A tags inserted by the text bar
|
|
200
|
+
const value = original.toUpperCase() === 'A' ? 'SPAN' : original;
|
|
201
|
+
component.set('tagName', value);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
// Link
|
|
206
|
+
if (component.get('tagName').toUpperCase() !== 'A') {
|
|
207
|
+
component.set('originalTagName', component.get('tagName'));
|
|
208
|
+
component.set('tagName', 'A');
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
},
|
|
212
|
+
// Update UI on the component change
|
|
213
|
+
onUpdate({ elInput, component }) {
|
|
214
|
+
const href = component.getAttributes().href || '';
|
|
215
|
+
doRender(elInput, href);
|
|
216
|
+
},
|
|
217
|
+
});
|
|
218
|
+
};
|
|
219
|
+
//# sourceMappingURL=internal-links.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internal-links.js","sourceRoot":"","sources":["../../../../../src/ts/client/grapesjs/internal-links.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Silex website builder, free/libre no-code tool for makers.
|
|
3
|
+
* Copyright (c) 2023 lexoyo and Silex Labs foundation
|
|
4
|
+
*
|
|
5
|
+
* This program is free software: you can redistribute it and/or modify
|
|
6
|
+
* it under the terms of the GNU Affero General Public License as published by
|
|
7
|
+
* the Free Software Foundation, either version 3 of the License, or any later version.
|
|
8
|
+
*
|
|
9
|
+
* This program is distributed in the hope that it will be useful,
|
|
10
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
12
|
+
* GNU Affero General Public License for more details.
|
|
13
|
+
*
|
|
14
|
+
* You should have received a copy of the GNU Affero General Public License
|
|
15
|
+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
16
|
+
*/
|
|
17
|
+
import * as grapesjs from 'grapesjs/dist/grapes.min.js';
|
|
18
|
+
import { html, render } from 'lit-html';
|
|
19
|
+
import { live } from 'lit-html/directives/live.js';
|
|
20
|
+
const name = 'new-page-dialog';
|
|
21
|
+
const el = document.createElement('div');
|
|
22
|
+
let modal;
|
|
23
|
+
export const cmdOpenNewPageDialog = 'new-page-dialog';
|
|
24
|
+
export const newPageDialog = grapesjs.plugins.add(name, (editor, opts) => {
|
|
25
|
+
editor.Commands.add(cmdOpenNewPageDialog, {
|
|
26
|
+
run: (_, sender, { page }) => {
|
|
27
|
+
modal = editor.Modal.open({
|
|
28
|
+
title: 'New Page',
|
|
29
|
+
content: '',
|
|
30
|
+
attributes: { class: 'new-page-dialog' },
|
|
31
|
+
})
|
|
32
|
+
.onceClose(() => {
|
|
33
|
+
editor.stopCommand(cmdOpenNewPageDialog); // apparently this is needed to be able to run the command several times
|
|
34
|
+
});
|
|
35
|
+
displayDialog(editor, opts, page);
|
|
36
|
+
modal.setContent(el);
|
|
37
|
+
const form = el.querySelector('form');
|
|
38
|
+
form.onsubmit = event => {
|
|
39
|
+
event.preventDefault();
|
|
40
|
+
saveDialog(editor, opts, page);
|
|
41
|
+
editor.stopCommand(cmdOpenNewPageDialog);
|
|
42
|
+
};
|
|
43
|
+
form.querySelector('input')?.focus();
|
|
44
|
+
return modal;
|
|
45
|
+
},
|
|
46
|
+
stop: () => {
|
|
47
|
+
modal.close();
|
|
48
|
+
// el.innerHTML = ''
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
function onImport(editor, page) {
|
|
53
|
+
editor.Pages.select(page);
|
|
54
|
+
editor.runCommand('gjs-open-import-webpage');
|
|
55
|
+
}
|
|
56
|
+
function displayDialog(editor, config, page) {
|
|
57
|
+
render(html `
|
|
58
|
+
<form class="silex-form">
|
|
59
|
+
<label class="silex-form__element">
|
|
60
|
+
<h3>Name</h3>
|
|
61
|
+
<input type="text" name="name" .value=${live(page.getName() || '')}/>
|
|
62
|
+
</label>
|
|
63
|
+
<footer>
|
|
64
|
+
<input class="silex-button" type="button" @click=${e => onImport(editor, page)} value="Import from website">
|
|
65
|
+
<input class="silex-button" type="button" @click=${e => editor.stopCommand(cmdOpenNewPageDialog)} value="Cancel">
|
|
66
|
+
<input class="silex-button" type="submit" value="Ok">
|
|
67
|
+
</footer>
|
|
68
|
+
</form>
|
|
69
|
+
`, el);
|
|
70
|
+
}
|
|
71
|
+
function saveDialog(editor, config, page) {
|
|
72
|
+
const form = el.querySelector('form');
|
|
73
|
+
const formData = new FormData(form);
|
|
74
|
+
const data = Array.from(formData)
|
|
75
|
+
.reduce((aggregate, [key, value]) => {
|
|
76
|
+
aggregate[key] = value;
|
|
77
|
+
return aggregate;
|
|
78
|
+
}, {});
|
|
79
|
+
page.set(data);
|
|
80
|
+
// save if auto save is on
|
|
81
|
+
editor.getModel().set('changesCount', editor.getDirtyCount() + 1);
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=new-page-dialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"new-page-dialog.js","sourceRoot":"","sources":["../../../../../src/ts/client/grapesjs/new-page-dialog.ts"],"names":[],"mappings":"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"}
|