@silexlabs/silex 3.0.1-alpha.0 → 3.0.1
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 +20 -0
- package/.silex.js +67 -8
- package/LICENSE +661 -203
- package/README.md +37 -35
- package/dist/client/client/api.d.ts +90 -0
- package/dist/client/client/assetUrl.d.ts +54 -0
- package/dist/client/client/config.d.ts +102 -0
- package/dist/client/client/events.d.ts +23 -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 +73 -0
- package/dist/client/client/grapesjs/PublicationUi.d.ts +59 -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/css-props.d.ts +6 -0
- package/dist/client/client/grapesjs/footer.d.ts +2 -0
- package/dist/client/client/grapesjs/img.d.ts +6 -0
- package/dist/client/client/grapesjs/index.d.ts +9 -0
- package/dist/client/client/grapesjs/internal-links.d.ts +1 -0
- package/dist/client/client/grapesjs/keymaps.d.ts +123 -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 +9 -0
- package/dist/client/client/grapesjs/project-bar.d.ts +21 -0
- package/dist/client/client/grapesjs/resize-panel.d.ts +1 -0
- package/dist/client/client/grapesjs/rich-text.d.ts +4 -0
- package/dist/client/client/grapesjs/semantic.d.ts +1 -0
- package/dist/client/client/grapesjs/settings-sections.d.ts +16 -0
- package/dist/client/client/grapesjs/settings.d.ts +4 -0
- package/dist/client/client/grapesjs/storage.d.ts +2 -0
- package/dist/client/client/grapesjs/symbolDialogs.d.ts +3 -0
- package/dist/client/client/grapesjs/view-buttons.d.ts +1 -0
- package/dist/client/client/index.d.ts +10 -0
- package/dist/client/client/publication-transformers.d.ts +42 -0
- package/dist/client/client/publish-custom-code-block.d.ts +4 -0
- package/dist/client/client/publish-fonts.d.ts +4 -0
- package/dist/client/client/utils.d.ts +22 -0
- package/dist/client/constants.d.ts +32 -0
- package/dist/client/css/admin.css +1114 -328
- package/dist/client/css/admin.css.map +1 -0
- package/dist/client/grapesjs-filter-styles/dist/index.d.ts +4 -0
- package/dist/client/grapesjs-fonts/dist/index.d.ts +4 -0
- package/dist/client/grapesjs-fonts/src/commands.d.ts +3 -0
- package/dist/client/grapesjs-fonts/src/fonts.d.ts +4 -0
- package/dist/client/grapesjs-storage-rate-limit/dist/index.d.ts +4 -0
- package/dist/client/grapesjs-ui-suggest-classes/dist/index.d.ts +4 -0
- package/dist/client/index.html +3 -2
- package/dist/client/js/main.js +356 -131
- package/dist/client/js/main.js.LICENSE.txt +15 -1
- package/dist/client/page.d.ts +2 -0
- package/dist/client/silex-lib/src/ts/client/api.d.ts +90 -0
- package/dist/client/silex-lib/src/ts/client/assetUrl.d.ts +54 -0
- package/dist/client/silex-lib/src/ts/client/config.d.ts +102 -0
- package/dist/client/silex-lib/src/ts/client/events.d.ts +23 -0
- package/dist/client/silex-lib/src/ts/client/expose.d.ts +8 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/LoginDialog.d.ts +15 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/PublicationManager.d.ts +73 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/PublicationUi.d.ts +59 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/blocks.d.ts +1 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/breadcrumbs.d.ts +1 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/css-props.d.ts +6 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/footer.d.ts +2 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/img.d.ts +6 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/index.d.ts +9 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/internal-links.d.ts +1 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/keymaps.d.ts +123 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/new-page-dialog.d.ts +2 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/openImport.d.ts +9 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/page-panel.d.ts +9 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/project-bar.d.ts +21 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/resize-panel.d.ts +1 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/rich-text.d.ts +4 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/semantic.d.ts +1 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/settings-sections.d.ts +16 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/settings.d.ts +4 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/storage.d.ts +2 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/symbolDialogs.d.ts +3 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/view-buttons.d.ts +1 -0
- package/dist/client/silex-lib/src/ts/client/index.d.ts +10 -0
- package/dist/client/silex-lib/src/ts/client/publication-transformers.d.ts +42 -0
- package/dist/client/silex-lib/src/ts/client/publish-custom-code-block.d.ts +4 -0
- package/dist/client/silex-lib/src/ts/client/publish-fonts.d.ts +4 -0
- package/dist/client/silex-lib/src/ts/client/utils.d.ts +22 -0
- package/dist/client/silex-lib/src/ts/constants.d.ts +32 -0
- package/dist/client/silex-lib/src/ts/page.d.ts +2 -0
- package/dist/client/silex-lib/src/ts/types.d.ts +339 -0
- package/dist/client/types.d.ts +339 -0
- package/dist/plugins/client/client/events.d.ts +23 -0
- package/dist/plugins/client/client/events.js +43 -0
- package/dist/plugins/client/client/events.js.map +1 -0
- package/dist/plugins/client/plugins/client/template.d.ts +2 -0
- package/dist/plugins/client/plugins/client/template.js +234 -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 +339 -0
- package/dist/plugins/client/types.js +80 -0
- package/dist/plugins/client/types.js.map +1 -0
- package/dist/plugins/server/constants.d.ts +32 -0
- package/dist/plugins/server/constants.js +76 -0
- package/dist/plugins/server/constants.js.map +1 -0
- package/dist/plugins/server/plugins/server/Cache.d.ts +2 -0
- package/dist/plugins/server/plugins/server/Cache.js +36 -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 +127 -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 +536 -0
- package/dist/plugins/server/plugins/server/FtpConnector.js.map +1 -0
- package/dist/plugins/server/plugins/server/GitlabConnector.d.ts +135 -0
- package/dist/plugins/server/plugins/server/GitlabConnector.js +649 -0
- package/dist/plugins/server/plugins/server/GitlabConnector.js.map +1 -0
- package/dist/plugins/server/plugins/server/GitlabHostingConnector.d.ts +16 -0
- package/dist/plugins/server/plugins/server/GitlabHostingConnector.js +209 -0
- package/dist/plugins/server/plugins/server/GitlabHostingConnector.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 +8 -0
- package/dist/plugins/server/plugins/server/StaticPlugin.js +45 -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 +14 -0
- package/dist/plugins/server/server/connectors/FsHosting.js +66 -0
- package/dist/plugins/server/server/connectors/FsHosting.js.map +1 -0
- package/dist/plugins/server/server/connectors/FsStorage.d.ts +44 -0
- package/dist/plugins/server/server/connectors/FsStorage.js +261 -0
- package/dist/plugins/server/server/connectors/FsStorage.js.map +1 -0
- package/dist/plugins/server/server/connectors/connectors.d.ts +86 -0
- package/dist/plugins/server/server/connectors/connectors.js +126 -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 +79 -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 +37 -0
- package/dist/plugins/server/server/utils/validation.js.map +1 -0
- package/dist/plugins/server/types.d.ts +339 -0
- package/dist/plugins/server/types.js +84 -0
- package/dist/plugins/server/types.js.map +1 -0
- package/dist/server/constants.js +55 -0
- package/dist/server/plugins/server/Cache.js +19 -0
- package/dist/server/server/api/api.js +20 -0
- package/dist/server/server/api/connectorApi.js +334 -0
- package/dist/server/server/api/publicationApi.js +106 -0
- package/dist/server/server/api/websiteApi.js +315 -0
- package/dist/server/server/cli.js +71 -0
- package/dist/server/server/config.js +120 -0
- package/dist/server/server/connectors/FsHosting.js +47 -0
- package/dist/server/server/connectors/FsStorage.js +228 -0
- package/dist/server/server/connectors/connectors.js +88 -0
- package/dist/server/server/events.js +14 -0
- package/dist/server/server/expose.js +27 -0
- package/dist/server/server/express.js +46 -0
- package/dist/server/server/index.js +94 -0
- package/dist/server/server/jobs.js +50 -0
- package/dist/server/server/utils/validation.js +14 -0
- package/dist/server/types.js +40 -0
- package/package.json +99 -49
- package/public/assets/download.png +0 -0
- package/public/assets/favicon.ico +0 -0
- package/public/assets/favicon.png +0 -0
- package/public/assets/ftp.png +0 -0
- package/public/assets/gitlab.png +0 -0
- package/public/assets/gitlab2.png +0 -0
- package/public/assets/laptop.png +0 -0
- package/public/assets/logo-silex-small.png +0 -0
- package/public/silex.js +22 -23
- package/src/css/_variables.scss +24 -20
- package/src/css/dialog.scss +35 -2
- package/src/css/fonts.scss +31 -0
- package/src/css/footer.scss +12 -0
- package/src/css/grapesjs-light.scss +180 -0
- package/src/css/grapesjs-plugins.scss +227 -0
- package/src/css/grapesjs.scss +159 -1
- package/src/css/index.scss +12 -1
- package/src/css/light.scss +7 -0
- package/src/css/loader.scss +2 -0
- package/src/css/project-bar.scss +32 -16
- package/src/css/silex.scss +79 -5
- package/src/css/website-info.scss +14 -0
- package/src/html/index.pug +3 -3
- package/src/html/templates/includes.pug +0 -1
- package/src/ts/client/api.ts +156 -0
- package/src/ts/client/assetUrl.test.ts +164 -0
- package/src/ts/client/assetUrl.ts +254 -0
- package/src/ts/client/config.ts +175 -13
- package/src/ts/client/events.ts +43 -0
- package/src/ts/client/expose.ts +27 -1
- package/src/ts/client/grapesjs/LoginDialog.ts +204 -0
- package/src/ts/client/grapesjs/PublicationManager.ts +433 -0
- package/src/ts/client/grapesjs/PublicationUi.ts +366 -0
- package/src/ts/client/grapesjs/blocks.ts +17 -0
- package/src/ts/client/grapesjs/breadcrumbs.ts +79 -0
- package/src/ts/client/grapesjs/css-props.ts +910 -0
- package/src/ts/client/grapesjs/eleventy.ts +30 -7
- package/src/ts/client/grapesjs/footer.ts +42 -0
- package/src/ts/client/grapesjs/img.ts +147 -0
- package/src/ts/client/grapesjs/index.ts +311 -122
- package/src/ts/client/grapesjs/internal-links.test.ts +19 -1
- package/src/ts/client/grapesjs/internal-links.ts +31 -7
- package/src/ts/client/grapesjs/keymaps.ts +207 -0
- package/src/ts/client/grapesjs/new-page-dialog.ts +19 -3
- package/src/ts/client/grapesjs/openImport.ts +22 -0
- package/src/ts/client/grapesjs/page-panel.ts +109 -7
- package/src/ts/client/grapesjs/project-bar.ts +133 -72
- package/src/ts/client/grapesjs/resize-panel.ts +20 -0
- package/src/ts/client/grapesjs/rich-text.ts +38 -13
- package/src/ts/client/grapesjs/semantic.ts +20 -3
- package/src/ts/client/grapesjs/settings-sections.ts +117 -0
- package/src/ts/client/grapesjs/settings.ts +191 -96
- package/src/ts/client/grapesjs/storage.ts +187 -0
- package/src/ts/client/grapesjs/symbolDialogs.ts +21 -5
- package/src/ts/client/grapesjs/view-buttons.ts +42 -0
- package/src/ts/client/index.ts +80 -21
- package/src/ts/client/publication-transformers.test.ts +207 -0
- package/src/ts/client/publication-transformers.ts +280 -0
- package/src/ts/client/publish-custom-code-block.ts +31 -0
- package/src/ts/client/publish-fonts.ts +36 -0
- package/src/ts/client/utils.ts +70 -1
- package/src/ts/constants.ts +78 -0
- package/src/ts/externs.ts +17 -0
- package/src/ts/page.ts +20 -3
- package/src/ts/plugins/client/template.ts +246 -0
- package/src/ts/plugins/client/website-info.ts +84 -0
- package/src/ts/plugins/server/Cache.ts +32 -0
- package/src/ts/plugins/server/DownloadConnector.ts +146 -0
- package/src/ts/plugins/server/FtpConnector.test.ts +82 -0
- package/src/ts/plugins/server/FtpConnector.ts +621 -0
- package/src/ts/plugins/server/GitlabConnector.ts +749 -0
- package/src/ts/plugins/server/GitlabHostingConnector.ts +215 -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 +45 -0
- package/src/ts/server/api/api.ts +19 -0
- package/src/ts/server/api/connectorApi.ts +464 -0
- package/src/ts/server/api/publicationApi.ts +159 -0
- package/src/ts/server/api/websiteApi.ts +462 -0
- package/src/ts/server/cli.ts +48 -14
- package/src/ts/server/config.ts +158 -60
- package/src/ts/server/connectors/FsHosting.ts +66 -0
- package/src/ts/server/connectors/FsStorage.test.ts +51 -0
- package/src/ts/server/connectors/FsStorage.ts +290 -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 +57 -5
- package/src/ts/server/index.ts +79 -16
- package/src/ts/server/jobs.test.ts +75 -0
- package/src/ts/server/jobs.ts +89 -0
- package/src/ts/server/utils/BackwardCompat.ts +546 -528
- package/src/ts/server/utils/validation.ts +34 -0
- package/src/ts/types.ts +295 -85
- package/.dockerignore +0 -5
- package/.editorconfig +0 -14
- package/.eslintrc.json +0 -43
- package/.github/FUNDING.yml +0 -13
- package/.github/workflows/docker-hub-publish.yml +0 -36
- package/.github/workflows/npm-publish.yml +0 -19
- package/.github/workflows/test.yml +0 -26
- package/.nvmrc +0 -1
- package/.silex/default/.silex.data.json +0 -1
- package/CODE_OF_CONDUCT.md +0 -128
- package/CONTRIBUTING.md +0 -131
- package/Dockerfile +0 -15
- package/directus.silex.js +0 -7
- package/dist/constants.js +0 -4
- package/dist/events.js +0 -5
- package/dist/page.js +0 -15
- package/dist/server/cli.js +0 -43
- package/dist/server/config.js +0 -70
- package/dist/server/express.js +0 -18
- package/dist/server/index.js +0 -58
- package/dist/types.js +0 -34
- package/jest.config.js +0 -10
- package/logos/logo_by_ceubri/silex-icon-2018@200px.png +0 -0
- package/logos/logo_by_ceubri/silex-icon-2018@4x.png +0 -0
- package/logos/logo_by_ceubri/silex-logo-2018-white-transp.pdf +0 -0
- package/logos/logo_by_ceubri/silex-logo-2018-white.jpg +0 -0
- package/logos/logo_by_ceubri/silex-logo-2018-white.pdf +0 -0
- package/logos/logo_by_ceubri/silex-logo-2018-white.png +0 -0
- package/logos/logo_by_ceubri/silex-logo-2018-white@0.5x.png +0 -0
- package/logos/logo_by_ceubri/silex-logo-2018-white@0.75x.png +0 -0
- package/logos/logo_by_ceubri/silex-logo-2018-white@4x.jpg +0 -0
- package/logos/logo_by_ceubri/silex-logo-2018-white@4x.png +0 -0
- package/logos/logo_by_ceubri/silex-logo-2018.ai +5 -2521
- package/logos/logo_by_ceubri/silex-logo-2018.jpg +0 -0
- package/logos/logo_by_ceubri/silex-logo-2018.pdf +0 -0
- package/logos/logo_by_ceubri/silex-logo-2018.png +0 -0
- package/logos/logo_by_ceubri/silex-logo-2018@0.5x.png +0 -0
- package/logos/logo_by_ceubri/silex-logo-2018@0.75x.png +0 -0
- package/logos/logo_by_ceubri/silex-logo-2018@4x.jpg +0 -0
- package/logos/logo_by_ceubri/silex-logo-2018@4x.png +0 -0
- package/logos/silexlabs.png +0 -0
- package/src/example-client-config.js +0 -47
- package/src/plugins/AuthPlugin.js +0 -21
- package/src/plugins/Cache.js +0 -11
- package/src/plugins/DefaultBackend.js +0 -149
- package/src/plugins/ExpressPlugin.js +0 -39
- package/src/plugins/HooksPlugin.js +0 -58
- package/src/plugins/PublishPlugin.js +0 -69
- package/src/plugins/SslPlugin.js +0 -66
- package/src/plugins/StaticPlugin.js +0 -48
- package/src/plugins/WebsitePlugin.js +0 -207
- package/src/ts/client/grapesjs/publish.ts +0 -386
- package/src/ts/client/grapesjs/template.ts +0 -166
- package/src/ts/events.ts +0 -2
- package/tsconfig-server-debug.json +0 -19
- package/tsconfig-server-release.json +0 -19
- package/tsconfig.jest.json +0 -9
- package/tsconfig.json +0 -26
- package/webpack.config.js +0 -28
- package/webpack.debug.config.js +0 -8
|
@@ -1,8 +1,23 @@
|
|
|
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
|
+
|
|
1
18
|
import {html, render} from 'lit-html'
|
|
2
19
|
import {map} from 'lit-html/directives/map.js'
|
|
3
20
|
import grapesjs from 'grapesjs/dist/grapes.min.js'
|
|
4
|
-
|
|
5
|
-
import { Page } from '../../types'
|
|
6
21
|
import { getPageLink } from '../../page'
|
|
7
22
|
|
|
8
23
|
// constants
|
|
@@ -15,7 +30,7 @@ const options: grapesjs.SelectOption = [
|
|
|
15
30
|
]
|
|
16
31
|
|
|
17
32
|
// plugin code
|
|
18
|
-
export const internalLinksPlugin =
|
|
33
|
+
export const internalLinksPlugin = (editor, opts) => {
|
|
19
34
|
// update links when a page link changes
|
|
20
35
|
function onAll(cbk) {
|
|
21
36
|
editor.Pages.getAll()
|
|
@@ -41,12 +56,21 @@ export const internalLinksPlugin = grapesjs.plugins.add(pluginName, (editor, opt
|
|
|
41
56
|
// mark all links as issues
|
|
42
57
|
const issues = []
|
|
43
58
|
onAll(component => {
|
|
44
|
-
console.log(component.getAttributes().href, getPageLink(page.previous('name')), page.previous('name'))
|
|
45
59
|
if(component.getAttributes().href === getPageLink(page.previous('name'))) {
|
|
46
60
|
issues.push(component)
|
|
47
61
|
}
|
|
48
62
|
})
|
|
49
|
-
|
|
63
|
+
// Add a notification for the issues
|
|
64
|
+
if(issues.length) {
|
|
65
|
+
issues.forEach(component => {
|
|
66
|
+
editor.runCommand('notifications:add', {
|
|
67
|
+
type: 'error',
|
|
68
|
+
message: `Page ${page.previous('name')} was removed, please fix the following links:`,
|
|
69
|
+
componentId: component.getId(),
|
|
70
|
+
group: 'Broken internal links',
|
|
71
|
+
})
|
|
72
|
+
})
|
|
73
|
+
}
|
|
50
74
|
break
|
|
51
75
|
}
|
|
52
76
|
})
|
|
@@ -92,7 +116,7 @@ export const internalLinksPlugin = grapesjs.plugins.add(pluginName, (editor, opt
|
|
|
92
116
|
function getDefaultHref(type) {
|
|
93
117
|
switch(type) {
|
|
94
118
|
case 'email': return 'mailto:'
|
|
95
|
-
case 'page': return getPageLink()
|
|
119
|
+
case 'page': return getPageLink(null)
|
|
96
120
|
case 'url': return 'https://'
|
|
97
121
|
}
|
|
98
122
|
}
|
|
@@ -207,4 +231,4 @@ export const internalLinksPlugin = grapesjs.plugins.add(pluginName, (editor, opt
|
|
|
207
231
|
doRender(elInput, href)
|
|
208
232
|
},
|
|
209
233
|
})
|
|
210
|
-
}
|
|
234
|
+
}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import {Editor, PluginOptions} from 'grapesjs'
|
|
2
|
+
import {isTextOrInputField, selectBody} from '../utils'
|
|
3
|
+
import {PublishableEditor} from './PublicationManager'
|
|
4
|
+
|
|
5
|
+
// Utility functions
|
|
6
|
+
|
|
7
|
+
function setButton(editor: Editor, panel_id: string, btn_id: string, active?: boolean): void {
|
|
8
|
+
const button = editor.Panels.getButton(panel_id, btn_id)
|
|
9
|
+
button.set('active', active ?? !button.get('active'))
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Opens the Publish dialog and publishes the website.
|
|
14
|
+
* @param editor The editor.
|
|
15
|
+
*/
|
|
16
|
+
function publish(editor: Editor): void {
|
|
17
|
+
setButton(editor, 'options', 'publish-button', true)
|
|
18
|
+
editor.runCommand('publish')
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Closes any open left panel.
|
|
23
|
+
* @param editor The editor.
|
|
24
|
+
*/
|
|
25
|
+
function resetPanel(editor: Editor): void {
|
|
26
|
+
const projectBarBtns = editor.Panels.getPanels().get('project-bar-panel').buttons
|
|
27
|
+
projectBarBtns.forEach(button => button.set('active', false))
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Escapes the current context in this order : modal, Publish dialog, left panel.
|
|
32
|
+
* If none of these are open, it selects the body.
|
|
33
|
+
* @param editor The editor.
|
|
34
|
+
*/
|
|
35
|
+
function escapeContext(editor: Editor): void {
|
|
36
|
+
const publishDialog = (editor as PublishableEditor).PublicationManager.dialog
|
|
37
|
+
const projectBarPanel = editor.Panels.getPanel('project-bar-panel')
|
|
38
|
+
|
|
39
|
+
if (editor.Modal.isOpen()) {
|
|
40
|
+
editor.Modal.close()
|
|
41
|
+
} else if (publishDialog && publishDialog.isOpen) {
|
|
42
|
+
publishDialog.closeDialog()
|
|
43
|
+
} else if (projectBarPanel.buttons.some(b => b.get('active'))) {
|
|
44
|
+
resetPanel(editor)
|
|
45
|
+
} else {
|
|
46
|
+
selectBody(editor)
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function whenNoFocus(editor: Editor, cbk: () => void): void {
|
|
51
|
+
if(editor.getEditing()) return
|
|
52
|
+
if(editor.Modal.isOpen()) return
|
|
53
|
+
const target = document.activeElement as HTMLElement | null
|
|
54
|
+
if (target && target.tagName === 'INPUT' && target.getAttribute('type') === 'submit') return
|
|
55
|
+
if (target && isTextOrInputField(target)) return
|
|
56
|
+
cbk()
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Constants
|
|
60
|
+
|
|
61
|
+
export const cmdSelectBody = 'select-body'
|
|
62
|
+
export let prefixKey = 'shift'
|
|
63
|
+
|
|
64
|
+
export const defaultKms = {
|
|
65
|
+
kmOpenSettings: {
|
|
66
|
+
id: 'general:open-settings',
|
|
67
|
+
keys: 'alt+s',
|
|
68
|
+
handler: editor => setButton(editor, 'project-bar-panel', 'settings-dialog-btn')
|
|
69
|
+
},
|
|
70
|
+
kmOpenPublish: {
|
|
71
|
+
id: 'general:open-publish',
|
|
72
|
+
keys: 'alt+p',
|
|
73
|
+
handler: editor => setButton(editor, 'options', 'publish-button')
|
|
74
|
+
},
|
|
75
|
+
kmOpenFonts: {
|
|
76
|
+
id: 'general:open-fonts',
|
|
77
|
+
keys: 'alt+f',
|
|
78
|
+
handler: editor => setButton(editor, 'project-bar-panel', 'font-dialog-btn')
|
|
79
|
+
},
|
|
80
|
+
kmPreviewMode: {
|
|
81
|
+
id: 'general:preview-mode',
|
|
82
|
+
keys: 'tab',
|
|
83
|
+
handler: editor => whenNoFocus(editor, () => setButton(editor, 'options', 'preview'))
|
|
84
|
+
},
|
|
85
|
+
kmLayers: {
|
|
86
|
+
id: 'panels:layers',
|
|
87
|
+
keys: prefixKey + '+l',
|
|
88
|
+
handler: editor => setButton(editor, 'project-bar-panel', 'layer-manager-btn')
|
|
89
|
+
},
|
|
90
|
+
kmBlocks: {
|
|
91
|
+
id: 'panels:blocks',
|
|
92
|
+
keys: prefixKey + '+a',
|
|
93
|
+
handler: editor => setButton(editor, 'project-bar-panel', 'block-manager-btn')
|
|
94
|
+
},
|
|
95
|
+
kmNotifications: {
|
|
96
|
+
id: 'panels:notifications',
|
|
97
|
+
keys: prefixKey + '+n',
|
|
98
|
+
handler: editor => setButton(editor, 'project-bar-panel', 'notifications-btn')
|
|
99
|
+
},
|
|
100
|
+
kmPages: {
|
|
101
|
+
id: 'panels:pages',
|
|
102
|
+
keys: prefixKey + '+p',
|
|
103
|
+
handler: editor => setButton(editor, 'project-bar-panel', 'page-panel-btn')
|
|
104
|
+
},
|
|
105
|
+
kmSymbols: {
|
|
106
|
+
id: 'panels:symbols',
|
|
107
|
+
keys: prefixKey + '+s',
|
|
108
|
+
handler: editor => setButton(editor, 'project-bar-panel', 'symbols-btn')
|
|
109
|
+
},
|
|
110
|
+
kmStyleManager: {
|
|
111
|
+
id: 'panels:style-manager',
|
|
112
|
+
keys: 'r',
|
|
113
|
+
handler: editor => setButton(editor, 'views', 'open-sm', true)
|
|
114
|
+
},
|
|
115
|
+
kmTraitsManager: {
|
|
116
|
+
id: 'panels:traits',
|
|
117
|
+
keys: 't',
|
|
118
|
+
handler: editor => setButton(editor, 'views', 'open-tm', true)
|
|
119
|
+
},
|
|
120
|
+
kmClosePanel: {
|
|
121
|
+
id: 'panels:close-panel',
|
|
122
|
+
keys: 'escape',
|
|
123
|
+
handler: escapeContext
|
|
124
|
+
},
|
|
125
|
+
kmSelectBody: {
|
|
126
|
+
id: 'workflow:select-body',
|
|
127
|
+
keys: prefixKey + '+b',
|
|
128
|
+
handler: cmdSelectBody
|
|
129
|
+
},
|
|
130
|
+
kmDuplicateSelection: {
|
|
131
|
+
id: 'workflow:duplicate-selection',
|
|
132
|
+
keys: 'ctrl+d',
|
|
133
|
+
handler: 'tlb-clone',
|
|
134
|
+
},
|
|
135
|
+
kmPublish: {
|
|
136
|
+
id: 'workflow:publish',
|
|
137
|
+
keys: 'ctrl+alt+p',
|
|
138
|
+
handler: publish
|
|
139
|
+
},
|
|
140
|
+
kmAddPage: {
|
|
141
|
+
id: 'pages:add-page',
|
|
142
|
+
keys: 'ctrl+alt+n',
|
|
143
|
+
handler: 'pages:add'
|
|
144
|
+
},
|
|
145
|
+
kmRemovePage: {
|
|
146
|
+
id: 'pages:remove-page',
|
|
147
|
+
keys: 'ctrl+alt+backspace',
|
|
148
|
+
handler: 'pages:remove'
|
|
149
|
+
},
|
|
150
|
+
kmClonePage: {
|
|
151
|
+
id: 'pages:clone-page',
|
|
152
|
+
keys: 'ctrl+alt+d',
|
|
153
|
+
handler: 'pages:clone'
|
|
154
|
+
},
|
|
155
|
+
kmSelectNextPage: {
|
|
156
|
+
id: 'pages:select-next',
|
|
157
|
+
keys: 'ctrl+alt+j',
|
|
158
|
+
handler: 'pages:select-next'
|
|
159
|
+
},
|
|
160
|
+
kmSelectPrevPage: {
|
|
161
|
+
id: 'pages:select-previous',
|
|
162
|
+
keys: 'ctrl+alt+k',
|
|
163
|
+
handler: 'pages:select-prev'
|
|
164
|
+
},
|
|
165
|
+
kmSelectFirstPage: {
|
|
166
|
+
id: 'pages:select-first',
|
|
167
|
+
keys: 'ctrl+alt+h',
|
|
168
|
+
handler: 'pages:select-first'
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// Main part
|
|
173
|
+
|
|
174
|
+
export function keymapsPlugin(editor: Editor, opts: PluginOptions): void {
|
|
175
|
+
// Commands
|
|
176
|
+
editor.Commands.add(cmdSelectBody, selectBody)
|
|
177
|
+
|
|
178
|
+
if (opts.disableKeymaps) return
|
|
179
|
+
if (opts.prefixKey) prefixKey = opts.prefixKey
|
|
180
|
+
|
|
181
|
+
const km = editor.Keymaps
|
|
182
|
+
|
|
183
|
+
// Default keymaps
|
|
184
|
+
for (const keymap in defaultKms) {
|
|
185
|
+
km.add(defaultKms[keymap].id, defaultKms[keymap].keys, defaultKms[keymap].handler, {
|
|
186
|
+
prevent: true,
|
|
187
|
+
...defaultKms[keymap].options
|
|
188
|
+
})
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// Handling the Escape keymap during text edition
|
|
192
|
+
document.addEventListener('keydown', event => {
|
|
193
|
+
if (event.key.toLowerCase() === defaultKms.kmClosePanel.keys) {
|
|
194
|
+
const target = event.target as HTMLElement | null
|
|
195
|
+
if(editor.getEditing()) return // Close the rich text edition
|
|
196
|
+
if(editor.Modal.isOpen()) {
|
|
197
|
+
editor.Modal.close()
|
|
198
|
+
} else if (target) { // If target exists...
|
|
199
|
+
if (target.tagName === 'INPUT' && target.getAttribute('type') === 'submit') { // If it's a submit button...
|
|
200
|
+
escapeContext(editor)
|
|
201
|
+
} else if (isTextOrInputField(target)) { // If it's a text field...
|
|
202
|
+
target.blur()
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
})
|
|
207
|
+
}
|
|
@@ -1,4 +1,20 @@
|
|
|
1
|
-
|
|
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
|
+
|
|
2
18
|
import {html, render} from 'lit-html'
|
|
3
19
|
import {live} from 'lit-html/directives/live.js'
|
|
4
20
|
|
|
@@ -9,7 +25,7 @@ let modal
|
|
|
9
25
|
|
|
10
26
|
export const cmdOpenNewPageDialog = 'new-page-dialog'
|
|
11
27
|
|
|
12
|
-
export const newPageDialog =
|
|
28
|
+
export const newPageDialog = (editor, opts) => {
|
|
13
29
|
editor.Commands.add(cmdOpenNewPageDialog, {
|
|
14
30
|
run: (_, sender, {page}) => {
|
|
15
31
|
modal = editor.Modal.open({
|
|
@@ -36,7 +52,7 @@ export const newPageDialog = grapesjs.plugins.add(name, (editor, opts) => {
|
|
|
36
52
|
// el.innerHTML = ''
|
|
37
53
|
},
|
|
38
54
|
})
|
|
39
|
-
}
|
|
55
|
+
}
|
|
40
56
|
|
|
41
57
|
function onImport(editor, page) {
|
|
42
58
|
editor.Pages.select(page)
|
|
@@ -1,3 +1,25 @@
|
|
|
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
|
+
|
|
18
|
+
/**
|
|
19
|
+
* @fileoverview Import feature
|
|
20
|
+
* Let the user import HTML code when she creates a new page
|
|
21
|
+
*
|
|
22
|
+
*/
|
|
1
23
|
// from https://github.com/artf/grapesjs-preset-webpage/blob/3e5a9e12998c9a32b6f1199953084163678e6c17/src/commands/openImport.js
|
|
2
24
|
export default function openImport(editor, config) {
|
|
3
25
|
const pfx = editor.getConfig('stylePrefix')
|
|
@@ -1,27 +1,75 @@
|
|
|
1
|
-
|
|
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
|
+
|
|
18
|
+
import { Editor } from 'grapesjs'
|
|
2
19
|
import {html, render} from 'lit-html'
|
|
20
|
+
import {ref} from 'lit-html/directives/ref.js'
|
|
3
21
|
|
|
4
22
|
const pluginName = 'page-panel'
|
|
5
23
|
let open
|
|
6
24
|
|
|
7
25
|
export const cmdTogglePages = 'pages:open-panel'
|
|
8
26
|
export const cmdAddPage = 'pages:add'
|
|
27
|
+
export const cmdRemovePage = 'pages:remove'
|
|
28
|
+
export const cmdClonePage = 'pages:clone'
|
|
29
|
+
export const cmdSelectNextPage = 'pages:select-next'
|
|
30
|
+
export const cmdSelectPrevPage = 'pages:select-prev'
|
|
31
|
+
export const cmdSelectFirstPage = 'pages:select-first'
|
|
9
32
|
|
|
10
33
|
function selectPage(editor, page) {
|
|
11
34
|
editor.Pages.select(page)
|
|
12
35
|
}
|
|
13
36
|
function addPage(editor, config) {
|
|
14
37
|
const pages = editor.Pages.getAll()
|
|
38
|
+
// Get a name
|
|
15
39
|
let idx = 1
|
|
16
40
|
const newPageName = config.newPageName || 'New page'
|
|
17
41
|
let pageName = newPageName
|
|
18
42
|
while(pages.find(p => p.getName() === pageName)) {
|
|
19
43
|
pageName = `${newPageName} ${idx++}`
|
|
20
44
|
}
|
|
45
|
+
// Add page
|
|
21
46
|
const page = editor.Pages.add({ name: pageName })
|
|
47
|
+
// Select the new page
|
|
48
|
+
editor.Pages.select(page)
|
|
49
|
+
// Open page settings to edit the name
|
|
22
50
|
editor.runCommand(config.cmdOpenNewPageDialog, {page})
|
|
23
51
|
}
|
|
24
52
|
|
|
53
|
+
function clonePage(editor, page) {
|
|
54
|
+
const pages = editor.Pages.getAll()
|
|
55
|
+
// Get a name
|
|
56
|
+
let idx = 1
|
|
57
|
+
const newPageName = (page.getName() || 'main') + ' copy'
|
|
58
|
+
let pageName = newPageName
|
|
59
|
+
while(pages.find(p => p.getName() === pageName)) {
|
|
60
|
+
pageName = `${newPageName} ${idx++}`
|
|
61
|
+
}
|
|
62
|
+
// Clone components
|
|
63
|
+
const body = page.getMainComponent().clone()
|
|
64
|
+
// Add page
|
|
65
|
+
const newPage = editor.Pages.add({
|
|
66
|
+
name: pageName,
|
|
67
|
+
component: body,
|
|
68
|
+
})
|
|
69
|
+
// Select the new page
|
|
70
|
+
editor.Pages.select(newPage)
|
|
71
|
+
}
|
|
72
|
+
|
|
25
73
|
function removePage(editor, page) {
|
|
26
74
|
if(editor.Pages.getAll().length === 1) {
|
|
27
75
|
console.error('can not delete the only page')
|
|
@@ -35,6 +83,54 @@ function removePage(editor, page) {
|
|
|
35
83
|
}
|
|
36
84
|
}
|
|
37
85
|
|
|
86
|
+
function removePageWithConfirm(editor, page) {
|
|
87
|
+
const content = document.createElement('div')
|
|
88
|
+
const modal = editor.Modal.open({
|
|
89
|
+
title: 'Are you sure?',
|
|
90
|
+
content,
|
|
91
|
+
})
|
|
92
|
+
render(html`
|
|
93
|
+
<p>Do you really want to remove this page?</p>
|
|
94
|
+
<footer>
|
|
95
|
+
<button
|
|
96
|
+
${ref((el: HTMLButtonElement) => {
|
|
97
|
+
console.log('focus', el)
|
|
98
|
+
setTimeout(() => el.focus())
|
|
99
|
+
})}
|
|
100
|
+
@click=${() => {
|
|
101
|
+
removePage(editor, page)
|
|
102
|
+
modal.close()
|
|
103
|
+
}}
|
|
104
|
+
class="silex-button silex-button--primary">Delete page</button>
|
|
105
|
+
<button
|
|
106
|
+
@click=${() => modal.close()}
|
|
107
|
+
class="silex-button silex-button--secondary">Cancel</button
|
|
108
|
+
</footer>
|
|
109
|
+
`, content)
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
function selectNextPage(editor) {
|
|
113
|
+
const pages = editor.Pages.getAll()
|
|
114
|
+
const selected = editor.Pages.getSelected()
|
|
115
|
+
const idx = pages.indexOf(selected)
|
|
116
|
+
if(idx < pages.length - 1) {
|
|
117
|
+
selectPage(editor, pages[idx + 1])
|
|
118
|
+
} else {
|
|
119
|
+
selectPage(editor, pages[0])
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
function selectPrevPage(editor) {
|
|
124
|
+
const pages = editor.Pages.getAll()
|
|
125
|
+
const selected = editor.Pages.getSelected()
|
|
126
|
+
const idx = pages.indexOf(selected)
|
|
127
|
+
if(idx > 0) {
|
|
128
|
+
selectPage(editor, pages[idx - 1])
|
|
129
|
+
} else {
|
|
130
|
+
selectPage(editor, pages[pages.length - 1])
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
38
134
|
function settingsPage(editor, config, page) {
|
|
39
135
|
editor.runCommand(config.cmdOpenSettings, {page})
|
|
40
136
|
}
|
|
@@ -59,6 +155,7 @@ function renderPages(editor, config) {
|
|
|
59
155
|
${ name }
|
|
60
156
|
</div>
|
|
61
157
|
<i class="pages__icon pages__remove-btn fa fa-trash" @click=${e => removePage(editor, getPageFromEvent(e))}></i>
|
|
158
|
+
<i class="pages__icon pages__clone-btn fa fa-clone" @click=${e => clonePage(editor, getPageFromEvent(e))}></i>
|
|
62
159
|
<i class="pages__icon fa fa-cog" @click=${e => settingsPage(editor, config, getPageFromEvent(e))}></i>
|
|
63
160
|
</div>
|
|
64
161
|
</div>
|
|
@@ -72,7 +169,7 @@ function renderPages(editor, config) {
|
|
|
72
169
|
</main></section>`
|
|
73
170
|
}
|
|
74
171
|
|
|
75
|
-
export const pagePanelPlugin =
|
|
172
|
+
export const pagePanelPlugin = (editor: Editor, opts) => {
|
|
76
173
|
// create wrapper
|
|
77
174
|
const el = document.createElement('div')
|
|
78
175
|
el.classList.add('pages__wrapper')
|
|
@@ -83,9 +180,9 @@ export const pagePanelPlugin = grapesjs.plugins.add(pluginName, (editor, opts) =
|
|
|
83
180
|
})
|
|
84
181
|
editor.on('load', () => {
|
|
85
182
|
open = false
|
|
86
|
-
document.querySelector(opts.appendTo)
|
|
87
|
-
.appendChild(el)
|
|
183
|
+
document.querySelector(opts.appendTo).appendChild(el)
|
|
88
184
|
doRender()
|
|
185
|
+
|
|
89
186
|
// click anywhere close it
|
|
90
187
|
// const close = (event) => {
|
|
91
188
|
// if(open) {
|
|
@@ -94,8 +191,13 @@ export const pagePanelPlugin = grapesjs.plugins.add(pluginName, (editor, opts) =
|
|
|
94
191
|
// }
|
|
95
192
|
// }
|
|
96
193
|
// document.addEventListener('mousedown', close)
|
|
97
|
-
|
|
194
|
+
|
|
195
|
+
// add useful commands
|
|
98
196
|
editor.Commands.add(cmdAddPage, () => addPage(editor, opts))
|
|
197
|
+
editor.Commands.add(cmdRemovePage, () => removePageWithConfirm(editor, editor.Pages.getSelected()))
|
|
198
|
+
editor.Commands.add(cmdClonePage, () => clonePage(editor, editor.Pages.getSelected()))
|
|
199
|
+
editor.Commands.add(cmdSelectNextPage, () => selectNextPage(editor))
|
|
200
|
+
editor.Commands.add(cmdSelectPrevPage, () => selectPrevPage(editor))
|
|
201
|
+
editor.Commands.add(cmdSelectFirstPage, () => selectPage(editor, editor.Pages.getAll()[0]))
|
|
99
202
|
})
|
|
100
|
-
}
|
|
101
|
-
|
|
203
|
+
}
|