@silexlabs/silex 3.0.0-alpha.96 → 3.0.0
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 +2 -1
- package/README.md +31 -9
- package/dist/client/client/api.d.ts +5 -0
- package/dist/client/client/assetUrl.d.ts +3 -0
- package/dist/client/client/config.d.ts +31 -0
- package/dist/client/client/events.d.ts +7 -1
- package/dist/client/client/grapesjs/PublicationManager.d.ts +2 -1
- package/dist/client/client/grapesjs/css-props.d.ts +6 -0
- package/dist/client/client/grapesjs/img.d.ts +6 -0
- package/dist/client/client/grapesjs/index.d.ts +2 -2
- package/dist/client/client/grapesjs/new-page-dialog.d.ts +1 -1
- package/dist/client/client/grapesjs/page-panel.d.ts +1 -1
- package/dist/client/client/grapesjs/project-bar.d.ts +16 -0
- package/dist/client/client/grapesjs/resize-panel.d.ts +1 -0
- package/dist/client/client/grapesjs/rich-text.d.ts +4 -1
- package/dist/client/client/grapesjs/semantic.d.ts +1 -1
- package/dist/client/client/grapesjs/settings-sections.d.ts +15 -0
- package/dist/client/client/grapesjs/settings.d.ts +3 -1
- package/dist/client/client/grapesjs/symbolDialogs.d.ts +1 -1
- 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 +4 -3
- 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 +4 -0
- package/dist/client/constants.d.ts +1 -0
- package/dist/client/css/admin.css +273 -32
- package/dist/client/index.html +2 -1
- package/dist/client/js/main.js +164 -123
- package/dist/client/js/main.js.LICENSE.txt +15 -1
- package/dist/client/types.d.ts +12 -7
- package/dist/plugins/client/client/events.d.ts +7 -1
- package/dist/plugins/client/client/events.js +7 -1
- package/dist/plugins/client/client/events.js.map +1 -1
- package/dist/plugins/client/plugins/client/template.js +108 -58
- package/dist/plugins/client/plugins/client/template.js.map +1 -1
- package/dist/plugins/client/types.d.ts +12 -7
- package/dist/plugins/client/types.js +6 -0
- package/dist/plugins/client/types.js.map +1 -1
- package/dist/plugins/server/constants.d.ts +1 -0
- package/dist/plugins/server/constants.js +2 -1
- package/dist/plugins/server/constants.js.map +1 -1
- package/dist/plugins/server/plugins/server/FtpConnector.d.ts +1 -0
- package/dist/plugins/server/plugins/server/FtpConnector.js +12 -1
- package/dist/plugins/server/plugins/server/FtpConnector.js.map +1 -1
- package/dist/plugins/server/plugins/server/GitlabConnector.d.ts +3 -0
- package/dist/plugins/server/plugins/server/GitlabConnector.js +72 -35
- package/dist/plugins/server/plugins/server/GitlabConnector.js.map +1 -1
- package/dist/plugins/server/server/config.js +3 -3
- package/dist/plugins/server/server/config.js.map +1 -1
- package/dist/plugins/server/server/connectors/FsHosting.d.ts +1 -0
- package/dist/plugins/server/server/connectors/FsHosting.js +13 -1
- package/dist/plugins/server/server/connectors/FsHosting.js.map +1 -1
- package/dist/plugins/server/server/connectors/FsStorage.d.ts +2 -1
- package/dist/plugins/server/server/connectors/FsStorage.js +29 -25
- package/dist/plugins/server/server/connectors/FsStorage.js.map +1 -1
- package/dist/plugins/server/server/connectors/connectors.d.ts +1 -0
- package/dist/plugins/server/server/jobs.js +4 -2
- package/dist/plugins/server/server/jobs.js.map +1 -1
- package/dist/plugins/server/types.d.ts +12 -7
- package/dist/plugins/server/types.js +7 -1
- package/dist/plugins/server/types.js.map +1 -1
- package/dist/server/constants.js +2 -1
- package/dist/server/server/api/publicationApi.js +3 -5
- package/dist/server/server/api/websiteApi.js +26 -7
- package/dist/server/server/cli.js +9 -6
- package/dist/server/server/config.js +3 -3
- package/dist/server/server/connectors/FsHosting.js +13 -1
- package/dist/server/server/connectors/FsStorage.js +28 -25
- package/dist/server/server/jobs.js +4 -2
- package/dist/server/types.js +7 -1
- package/package.json +35 -31
- package/public/assets/favicon.ico +0 -0
- package/public/assets/favicon.png +0 -0
- package/public/assets/logo-silex-small.png +0 -0
- package/src/css/_variables.scss +5 -3
- package/src/css/dialog.scss +22 -1
- package/src/css/fonts.scss +31 -0
- package/src/css/footer.scss +1 -1
- package/src/css/grapesjs-plugins.scss +34 -0
- package/src/css/grapesjs.scss +26 -11
- package/src/css/index.scss +1 -0
- package/src/css/project-bar.scss +11 -7
- package/src/css/silex.scss +58 -5
- package/src/html/index.pug +2 -2
- package/src/ts/client/api.ts +14 -9
- package/src/ts/client/assetUrl.test.ts +145 -42
- package/src/ts/client/assetUrl.ts +29 -10
- package/src/ts/client/config.ts +85 -4
- package/src/ts/client/events.ts +15 -9
- package/src/ts/client/grapesjs/PublicationManager.ts +71 -38
- package/src/ts/client/grapesjs/PublicationUi.ts +13 -11
- package/src/ts/client/grapesjs/css-props.ts +544 -0
- package/src/ts/client/grapesjs/eleventy.ts +2 -5
- package/src/ts/client/grapesjs/footer.ts +24 -9
- package/src/ts/client/grapesjs/img.ts +147 -0
- package/src/ts/client/grapesjs/index.ts +63 -25
- package/src/ts/client/grapesjs/internal-links.test.ts +2 -1
- package/src/ts/client/grapesjs/internal-links.ts +0 -1
- package/src/ts/client/grapesjs/new-page-dialog.ts +2 -3
- package/src/ts/client/grapesjs/page-panel.ts +28 -3
- package/src/ts/client/grapesjs/project-bar.ts +83 -64
- package/src/ts/client/grapesjs/resize-panel.ts +20 -0
- package/src/ts/client/grapesjs/rich-text.ts +21 -13
- package/src/ts/client/grapesjs/semantic.ts +3 -3
- package/src/ts/client/grapesjs/settings-sections.ts +117 -0
- package/src/ts/client/grapesjs/settings.ts +120 -77
- package/src/ts/client/grapesjs/symbolDialogs.ts +2 -3
- package/src/ts/client/grapesjs/view-buttons.ts +42 -0
- package/src/ts/client/index.ts +13 -6
- package/src/ts/client/publication-transformers.test.ts +13 -5
- package/src/ts/client/publication-transformers.ts +60 -47
- package/{dist/plugins/client/client/utils.js → src/ts/client/publish-custom-code-block.ts} +14 -8
- package/{dist/plugins/client/page.js → src/ts/client/publish-fonts.ts} +19 -14
- package/src/ts/client/utils.ts +18 -0
- package/src/ts/constants.ts +1 -0
- package/src/ts/plugins/client/template.ts +112 -60
- package/src/ts/plugins/server/FtpConnector.ts +14 -2
- package/src/ts/plugins/server/GitlabConnector.ts +71 -32
- package/src/ts/server/api/publicationApi.ts +5 -5
- package/src/ts/server/api/websiteApi.ts +51 -17
- package/src/ts/server/cli.ts +7 -5
- package/src/ts/server/config.ts +4 -4
- package/src/ts/server/connectors/FsHosting.ts +11 -5
- package/src/ts/server/connectors/FsStorage.ts +33 -4
- package/src/ts/server/connectors/connectors.ts +1 -1
- package/src/ts/server/jobs.ts +4 -2
- package/src/ts/types.ts +10 -7
- package/dist/plugins/client/client/api.d.ts +0 -85
- package/dist/plugins/client/client/api.js +0 -114
- package/dist/plugins/client/client/api.js.map +0 -1
- package/dist/plugins/client/client/assetUrl.d.ts +0 -51
- package/dist/plugins/client/client/assetUrl.js +0 -224
- package/dist/plugins/client/client/assetUrl.js.map +0 -1
- package/dist/plugins/client/client/config.d.ts +0 -58
- package/dist/plugins/client/client/config.js +0 -90
- package/dist/plugins/client/client/config.js.map +0 -1
- package/dist/plugins/client/client/grapesjs/LoginDialog.d.ts +0 -15
- package/dist/plugins/client/client/grapesjs/LoginDialog.js +0 -195
- package/dist/plugins/client/client/grapesjs/LoginDialog.js.map +0 -1
- package/dist/plugins/client/client/grapesjs/PublicationManager.d.ts +0 -72
- package/dist/plugins/client/client/grapesjs/PublicationManager.js +0 -356
- package/dist/plugins/client/client/grapesjs/PublicationManager.js.map +0 -1
- package/dist/plugins/client/client/grapesjs/PublicationUi.d.ts +0 -62
- package/dist/plugins/client/client/grapesjs/PublicationUi.js +0 -336
- package/dist/plugins/client/client/grapesjs/PublicationUi.js.map +0 -1
- package/dist/plugins/client/client/grapesjs/blocks.d.ts +0 -1
- package/dist/plugins/client/client/grapesjs/blocks.js +0 -37
- package/dist/plugins/client/client/grapesjs/blocks.js.map +0 -1
- package/dist/plugins/client/client/grapesjs/breadcrumbs.d.ts +0 -1
- package/dist/plugins/client/client/grapesjs/breadcrumbs.js +0 -75
- package/dist/plugins/client/client/grapesjs/breadcrumbs.js.map +0 -1
- package/dist/plugins/client/client/grapesjs/footer.d.ts +0 -2
- package/dist/plugins/client/client/grapesjs/footer.js +0 -28
- package/dist/plugins/client/client/grapesjs/footer.js.map +0 -1
- package/dist/plugins/client/client/grapesjs/index.d.ts +0 -5
- package/dist/plugins/client/client/grapesjs/index.js +0 -313
- package/dist/plugins/client/client/grapesjs/index.js.map +0 -1
- package/dist/plugins/client/client/grapesjs/internal-links.d.ts +0 -1
- package/dist/plugins/client/client/grapesjs/internal-links.js +0 -219
- package/dist/plugins/client/client/grapesjs/internal-links.js.map +0 -1
- package/dist/plugins/client/client/grapesjs/new-page-dialog.d.ts +0 -2
- package/dist/plugins/client/client/grapesjs/new-page-dialog.js +0 -83
- package/dist/plugins/client/client/grapesjs/new-page-dialog.js.map +0 -1
- package/dist/plugins/client/client/grapesjs/openImport.d.ts +0 -9
- package/dist/plugins/client/client/grapesjs/openImport.js +0 -74
- package/dist/plugins/client/client/grapesjs/openImport.js.map +0 -1
- package/dist/plugins/client/client/grapesjs/page-panel.d.ts +0 -3
- package/dist/plugins/client/client/grapesjs/page-panel.js +0 -113
- package/dist/plugins/client/client/grapesjs/page-panel.js.map +0 -1
- package/dist/plugins/client/client/grapesjs/project-bar.d.ts +0 -1
- package/dist/plugins/client/client/grapesjs/project-bar.js +0 -104
- package/dist/plugins/client/client/grapesjs/project-bar.js.map +0 -1
- package/dist/plugins/client/client/grapesjs/rich-text.d.ts +0 -1
- package/dist/plugins/client/client/grapesjs/rich-text.js +0 -31
- package/dist/plugins/client/client/grapesjs/rich-text.js.map +0 -1
- package/dist/plugins/client/client/grapesjs/semantic.d.ts +0 -1
- package/dist/plugins/client/client/grapesjs/semantic.js +0 -110
- package/dist/plugins/client/client/grapesjs/semantic.js.map +0 -1
- package/dist/plugins/client/client/grapesjs/settings.d.ts +0 -2
- package/dist/plugins/client/client/grapesjs/settings.js +0 -198
- package/dist/plugins/client/client/grapesjs/settings.js.map +0 -1
- package/dist/plugins/client/client/grapesjs/storage.d.ts +0 -1
- package/dist/plugins/client/client/grapesjs/storage.js +0 -126
- package/dist/plugins/client/client/grapesjs/storage.js.map +0 -1
- package/dist/plugins/client/client/grapesjs/symbolDialogs.d.ts +0 -3
- package/dist/plugins/client/client/grapesjs/symbolDialogs.js +0 -36
- package/dist/plugins/client/client/grapesjs/symbolDialogs.js.map +0 -1
- package/dist/plugins/client/client/publication-transformers.d.ts +0 -41
- package/dist/plugins/client/client/publication-transformers.js +0 -238
- package/dist/plugins/client/client/publication-transformers.js.map +0 -1
- package/dist/plugins/client/client/utils.d.ts +0 -2
- package/dist/plugins/client/client/utils.js.map +0 -1
- package/dist/plugins/client/constants.d.ts +0 -29
- package/dist/plugins/client/constants.js +0 -46
- package/dist/plugins/client/constants.js.map +0 -1
- package/dist/plugins/client/page.d.ts +0 -2
- package/dist/plugins/client/page.js.map +0 -1
- package/dist/plugins/client/plugins/client/11ty.d.ts +0 -17
- package/dist/plugins/client/plugins/client/11ty.js +0 -86
- package/dist/plugins/client/plugins/client/11ty.js.map +0 -1
- package/dist/plugins/client/plugins/client/publicationRenderer.d.ts +0 -2
- package/dist/plugins/client/plugins/client/publicationRenderer.js +0 -170
- package/dist/plugins/client/plugins/client/publicationRenderer.js.map +0 -1
- package/src/ts/plugins/client/11ty.ts +0 -104
- package/src/ts/plugins/client/publicationRenderer.ts +0 -174
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
18
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
-
exports.JobStatus = exports.ConnectorType = exports.ClientSideFileType = exports.Unit = exports.defaultWebsiteData = exports.ApiError = void 0;
|
|
19
|
+
exports.JobStatus = exports.ConnectorType = exports.Initiator = exports.ClientSideFileType = exports.Unit = exports.defaultWebsiteData = exports.ApiError = void 0;
|
|
20
20
|
class ApiError extends Error {
|
|
21
21
|
httpStatusCode;
|
|
22
22
|
constructor(message, httpStatusCode) {
|
|
@@ -57,7 +57,13 @@ var ClientSideFileType;
|
|
|
57
57
|
ClientSideFileType["HTML"] = "html";
|
|
58
58
|
ClientSideFileType["ASSET"] = "asset";
|
|
59
59
|
ClientSideFileType["CSS"] = "css";
|
|
60
|
+
ClientSideFileType["OTHER"] = "other";
|
|
60
61
|
})(ClientSideFileType || (exports.ClientSideFileType = ClientSideFileType = {}));
|
|
62
|
+
var Initiator;
|
|
63
|
+
(function (Initiator) {
|
|
64
|
+
Initiator["HTML"] = "html";
|
|
65
|
+
Initiator["CSS"] = "css";
|
|
66
|
+
})(Initiator || (exports.Initiator = Initiator = {}));
|
|
61
67
|
/**
|
|
62
68
|
* Enum to express if the connector is a storage or a hosting
|
|
63
69
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/ts/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAmBH,MAAa,QAAS,SAAQ,KAAK;IACY;IAA7C,YAAY,OAAe,EAAkB,cAAsB;QACjE,KAAK,CAAC,OAAO,CAAC,CAAA;QAD6B,mBAAc,GAAd,cAAc,CAAQ;QAEjE,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,OAAO,CAAC,CAAA;IACpD,CAAC;CACF;AALD,4BAKC;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/ts/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAmBH,MAAa,QAAS,SAAQ,KAAK;IACY;IAA7C,YAAY,OAAe,EAAkB,cAAsB;QACjE,KAAK,CAAC,OAAO,CAAC,CAAA;QAD6B,mBAAc,GAAd,cAAc,CAAQ;QAEjE,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,OAAO,CAAC,CAAA;IACpD,CAAC;CACF;AALD,4BAKC;AAgDD,KAAK;AACL,cAAc;AACD,QAAA,kBAAkB,GAAgB;AAC7C,YAAY;AACZ,aAAa;AACb,aAAa;AACb,eAAe;AACf,YAAY;AACZ,cAAc;AACd,kBAAkB;CACJ,CAAA;AAuDhB,0BAA0B;AAC1B,oDAAoD;AACpD,4BAA4B;AAC5B,GAAG;AACH,EAAE;AACF,8BAA8B;AAC9B,iBAAiB;AACjB,qBAAqB;AACrB,0CAA0C;AAC1C,4BAA4B;AAC5B,GAAG;AAEH,IAAY,IAEX;AAFD,WAAY,IAAI;IACd,iBAAS,CAAA;AACX,CAAC,EAFW,IAAI,oBAAJ,IAAI,QAEf;AAkCD,IAAY,kBAKX;AALD,WAAY,kBAAkB;IAC5B,mCAAa,CAAA;IACb,qCAAe,CAAA;IACf,iCAAW,CAAA;IACX,qCAAe,CAAA;AACjB,CAAC,EALW,kBAAkB,kCAAlB,kBAAkB,QAK7B;AAED,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,0BAAa,CAAA;IACb,wBAAW,CAAA;AACb,CAAC,EAHW,SAAS,yBAAT,SAAS,QAGpB;AA2CD;;GAEG;AACH,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,oCAAmB,CAAA;IACnB,oCAAmB,CAAA;AACrB,CAAC,EAHW,aAAa,6BAAb,aAAa,QAGxB;AAuDD;;GAEG;AACH,IAAY,SAIX;AAJD,WAAY,SAAS;IACnB,wCAA2B,CAAA;IAC3B,gCAAmB,CAAA;IACnB,4BAAe,CAAA;AACjB,CAAC,EAJW,SAAS,yBAAT,SAAS,QAIpB"}
|
package/dist/server/constants.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.API_WEBSITE_META_WRITE = exports.API_WEBSITE_META_READ = exports.API_WEBSITE_ASSETS_WRITE = exports.API_WEBSITE_ASSET_READ = exports.API_WEBSITE_LIST = exports.API_WEBSITE_DELETE = exports.API_WEBSITE_CREATE = exports.API_WEBSITE_WRITE = exports.API_WEBSITE_READ = exports.API_WEBSITE_PATH = exports.API_PUBLICATION_STATUS = exports.API_PUBLICATION_PUBLISH = exports.API_PUBLICATION_PATH = exports.API_CONNECTOR_LOGIN_CALLBACK = exports.API_CONNECTOR_SETTINGS = exports.API_CONNECTOR_LOGIN = exports.API_CONNECTOR_LOGOUT = exports.API_CONNECTOR_LIST = exports.API_CONNECTOR_USER = exports.API_CONNECTOR_PATH = exports.API_PATH = exports.CLIENT_CONFIG_FILE_NAME = exports.DEFAULT_LANGUAGE = exports.DEFAULT_WEBSITE_ID = exports.WEBSITE_META_DATA_FILE = exports.WEBSITE_DATA_FILE = void 0;
|
|
3
|
+
exports.API_WEBSITE_META_WRITE = exports.API_WEBSITE_META_READ = exports.API_WEBSITE_ASSETS_WRITE = exports.API_WEBSITE_ASSET_READ = exports.API_WEBSITE_LIST = exports.API_WEBSITE_DUPLICATE = exports.API_WEBSITE_DELETE = exports.API_WEBSITE_CREATE = exports.API_WEBSITE_WRITE = exports.API_WEBSITE_READ = exports.API_WEBSITE_PATH = exports.API_PUBLICATION_STATUS = exports.API_PUBLICATION_PUBLISH = exports.API_PUBLICATION_PATH = exports.API_CONNECTOR_LOGIN_CALLBACK = exports.API_CONNECTOR_SETTINGS = exports.API_CONNECTOR_LOGIN = exports.API_CONNECTOR_LOGOUT = exports.API_CONNECTOR_LIST = exports.API_CONNECTOR_USER = exports.API_CONNECTOR_PATH = exports.API_PATH = exports.CLIENT_CONFIG_FILE_NAME = exports.DEFAULT_LANGUAGE = exports.DEFAULT_WEBSITE_ID = exports.WEBSITE_META_DATA_FILE = exports.WEBSITE_DATA_FILE = void 0;
|
|
4
4
|
exports.WEBSITE_DATA_FILE = 'website.json';
|
|
5
5
|
exports.WEBSITE_META_DATA_FILE = 'meta.json';
|
|
6
6
|
exports.DEFAULT_WEBSITE_ID = 'default';
|
|
@@ -22,6 +22,7 @@ exports.API_WEBSITE_READ = '/';
|
|
|
22
22
|
exports.API_WEBSITE_WRITE = '/';
|
|
23
23
|
exports.API_WEBSITE_CREATE = '/';
|
|
24
24
|
exports.API_WEBSITE_DELETE = '/';
|
|
25
|
+
exports.API_WEBSITE_DUPLICATE = '/duplicate';
|
|
25
26
|
exports.API_WEBSITE_LIST = '/';
|
|
26
27
|
exports.API_WEBSITE_ASSET_READ = '/assets';
|
|
27
28
|
exports.API_WEBSITE_ASSETS_WRITE = '/assets';
|
|
@@ -74,16 +74,14 @@ function default_1(config) {
|
|
|
74
74
|
const hostingConnector = await getHostingConnector(session, config, hostingId);
|
|
75
75
|
const storage = await getStorageConnector(session, config, storageId);
|
|
76
76
|
const filesList = await Promise.all(files.map(async (file) => {
|
|
77
|
-
const prefix = constants_1.API_WEBSITE_ASSET_READ;
|
|
78
77
|
const fileWithContent = file;
|
|
79
78
|
const fileWithSrc = file;
|
|
80
79
|
if (!fileWithContent.content && !fileWithSrc.src)
|
|
81
80
|
throw new PublicationError('Missing content or src in file', 400);
|
|
82
|
-
const src = fileWithSrc.src
|
|
81
|
+
const src = fileWithSrc.src;
|
|
83
82
|
return {
|
|
84
|
-
path: file.path,
|
|
85
|
-
content: fileWithContent.content ??
|
|
86
|
-
await storage.readAsset(session, websiteId, src),
|
|
83
|
+
path: file.permalink ?? file.path,
|
|
84
|
+
content: fileWithContent.content ?? await storage.readAsset(session, websiteId, fileWithSrc.src),
|
|
87
85
|
};
|
|
88
86
|
}));
|
|
89
87
|
res.json({
|
|
@@ -175,6 +175,23 @@ function default_1(config, opts = {}) {
|
|
|
175
175
|
}
|
|
176
176
|
}
|
|
177
177
|
});
|
|
178
|
+
router.post(constants_1.API_WEBSITE_DUPLICATE, async (req, res) => {
|
|
179
|
+
try {
|
|
180
|
+
const query = req.query;
|
|
181
|
+
const websiteId = (0, validation_1.requiredParam)(query.websiteId, 'New website id');
|
|
182
|
+
await duplicateWebsite(req['session'], websiteId, query.connectorId);
|
|
183
|
+
res.status(200).json({ message: 'Website duplicated' });
|
|
184
|
+
}
|
|
185
|
+
catch (e) {
|
|
186
|
+
console.error('Error duplicating website data', e);
|
|
187
|
+
if (e.httpStatusCode) {
|
|
188
|
+
res.status(e.httpStatusCode).json({ message: e.message });
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
res.status(500).json({ message: e.message });
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
});
|
|
178
195
|
router.get(constants_1.API_WEBSITE_ASSET_READ + '/:path', async (req, res) => {
|
|
179
196
|
{
|
|
180
197
|
try {
|
|
@@ -207,7 +224,6 @@ function default_1(config, opts = {}) {
|
|
|
207
224
|
const query = req.query;
|
|
208
225
|
const websiteId = (0, validation_1.requiredParam)(query.websiteId, 'Website id');
|
|
209
226
|
const form = (0, formidable_1.default)({
|
|
210
|
-
filename: (name, ext, part, _form) => `${name}${ext}`,
|
|
211
227
|
multiples: true,
|
|
212
228
|
keepExtensions: true,
|
|
213
229
|
});
|
|
@@ -232,10 +248,10 @@ function default_1(config, opts = {}) {
|
|
|
232
248
|
config.emit(events_1.ServerEvent.WEBSITE_ASSET_STORE_START, { files, websiteId, connectorId });
|
|
233
249
|
const result = await writeAssets(req['session'], websiteId, files, connectorId);
|
|
234
250
|
const baseUrl = new URL(config.url).pathname.replace(/\/$/, '');
|
|
251
|
+
const data = result.map(path => (0, path_1.join)(baseUrl, constants_1.API_PATH, constants_1.API_WEBSITE_PATH, constants_1.API_WEBSITE_ASSET_READ, path)
|
|
252
|
+
+ `?websiteId=${websiteId}&connectorId=${connectorId ? connectorId : ''}`);
|
|
235
253
|
res.json({
|
|
236
|
-
data
|
|
237
|
-
+ path
|
|
238
|
-
+ `?websiteId=${websiteId}&connectorId=${connectorId ? connectorId : ''}`),
|
|
254
|
+
data,
|
|
239
255
|
});
|
|
240
256
|
config.emit(events_1.ServerEvent.WEBSITE_ASSET_STORE_END, null);
|
|
241
257
|
}
|
|
@@ -276,6 +292,10 @@ function default_1(config, opts = {}) {
|
|
|
276
292
|
const storageConnector = await getStorageConnector(session, connectorId);
|
|
277
293
|
return storageConnector.deleteWebsite(session, websiteId);
|
|
278
294
|
}
|
|
295
|
+
async function duplicateWebsite(session, websiteId, connectorId) {
|
|
296
|
+
const storageConnector = await getStorageConnector(session, connectorId);
|
|
297
|
+
return storageConnector.duplicateWebsite(session, websiteId);
|
|
298
|
+
}
|
|
279
299
|
async function readAsset(session, websiteId, fileName, connectorId) {
|
|
280
300
|
const storageConnector = await getStorageConnector(session, connectorId);
|
|
281
301
|
return storageConnector.readAsset(session, websiteId, `/${fileName}`);
|
|
@@ -287,9 +307,8 @@ function default_1(config, opts = {}) {
|
|
|
287
307
|
path: file.path.replace('/assets/', '/'),
|
|
288
308
|
}));
|
|
289
309
|
const result = await storageConnector.writeAssets(session, websiteId, cleanPathFiles);
|
|
290
|
-
return files
|
|
291
|
-
?
|
|
292
|
-
: path}?websiteId=${websiteId}`);
|
|
310
|
+
return files
|
|
311
|
+
.map(({ path }, idx) => result && result[idx] ? result[idx] : path);
|
|
293
312
|
}
|
|
294
313
|
return router;
|
|
295
314
|
}
|
|
@@ -11,11 +11,12 @@ const options = (0, cli_1.parse)({
|
|
|
11
11
|
'host': ['', 'Sets the host param of the express module "cookie-session".', 'string'],
|
|
12
12
|
'port': ['p', 'Port to listen to', 'int'],
|
|
13
13
|
'protocol': ['', 'Sets the protocol param of the express module "cookie-session".', 'string'],
|
|
14
|
-
'config': ['
|
|
15
|
-
'client-config': ['', 'Path to client config file to be served on .silex-client.js', '
|
|
16
|
-
'fs-root': ['', 'Path to the root folder where to store websites. Used by the default connector (fs).', 'string'],
|
|
14
|
+
'server-config': ['s', 'Path for the server side config file to load at startup', 'file'],
|
|
15
|
+
'client-config': ['c', 'Path to client config file to be served on .silex-client.js', 'file'],
|
|
16
|
+
'fs-root': ['', 'Path to the root folder where to store websites. Used by the default storage connector (fs).', 'string'],
|
|
17
|
+
'fs-hosting-root': ['', 'Path to the root folder where to publish websites. Used by the default hosting connector (fs).', 'string'],
|
|
17
18
|
'session-name': ['', 'Sets the name param of the express module "cookie-session".', 'string'],
|
|
18
|
-
'session-secret': ['
|
|
19
|
+
'session-secret': ['', 'Session secret', 'string'],
|
|
19
20
|
'ssl-port': [false, 'Port to listen to for SSL/HTTPS', 'int'],
|
|
20
21
|
'force-https': [false, 'Force HTTPS', 'boolean'],
|
|
21
22
|
'ssl-private-key': [false, 'Path to private key for SSL', 'file'],
|
|
@@ -35,12 +36,14 @@ if (options.port)
|
|
|
35
36
|
process.env.SILEX_PORT = options.port;
|
|
36
37
|
if (options['protocol'])
|
|
37
38
|
process.env.SILEX_PROTOCOL = options['protocol'];
|
|
38
|
-
if (options
|
|
39
|
-
process.env.
|
|
39
|
+
if (options['server-config'])
|
|
40
|
+
process.env.SILEX_SERVER_CONFIG = options['server-config'];
|
|
40
41
|
if (options['client-config'])
|
|
41
42
|
process.env.SILEX_CLIENT_CONFIG = options['client-config'];
|
|
42
43
|
if (options['fs-root'])
|
|
43
44
|
process.env.SILEX_FS_ROOT = options['fs-root'];
|
|
45
|
+
if (options['fs-hosting-root'])
|
|
46
|
+
process.env.SILEX_FS_HOSTING_ROOT = options['fs-hosting-root'];
|
|
44
47
|
if (options['session-name'])
|
|
45
48
|
process.env.SILEX_SESSION_NAME = options['session-name'];
|
|
46
49
|
if (options['session-secret'])
|
|
@@ -21,7 +21,7 @@ class ServerConfig extends silex_plugins_1.Config {
|
|
|
21
21
|
port = process.env.SILEX_PORT;
|
|
22
22
|
debug = process.env.SILEX_DEBUG === 'true';
|
|
23
23
|
url = process.env.SILEX_URL?.replace(/\/$/, '') ?? `${process.env.SILEX_PROTOCOL}://${process.env.SILEX_HOST}:${process.env.SILEX_PORT}`;
|
|
24
|
-
userConfigPath = process.env.
|
|
24
|
+
userConfigPath = process.env.SILEX_SERVER_CONFIG;
|
|
25
25
|
configFilePath = (0, path_1.resolve)(__dirname, '../../../.silex.js');
|
|
26
26
|
getConnectors(type = null) {
|
|
27
27
|
if (!type) {
|
|
@@ -107,12 +107,12 @@ class ServerConfig extends silex_plugins_1.Config {
|
|
|
107
107
|
async initDefaultConnectors() {
|
|
108
108
|
if (!this.storageConnectors.length) {
|
|
109
109
|
this.addStorageConnector(new FsStorage_1.FsStorage(null, {
|
|
110
|
-
path: process.env.SILEX_FS_ROOT,
|
|
110
|
+
path: process.env.SILEX_FS_ROOT || (0, path_1.join)(process.cwd(), '/silex/storage'),
|
|
111
111
|
}));
|
|
112
112
|
}
|
|
113
113
|
if (!this.hostingConnectors.length) {
|
|
114
114
|
this.addHostingConnector(new FsHosting_1.FsHosting(null, {
|
|
115
|
-
path: process.env.
|
|
115
|
+
path: process.env.SILEX_FS_HOSTING_ROOT || (0, path_1.join)(process.cwd(), '/silex/hosting'),
|
|
116
116
|
}));
|
|
117
117
|
}
|
|
118
118
|
}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.FsHosting = void 0;
|
|
7
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
|
4
8
|
const path_1 = require("path");
|
|
5
9
|
const FsStorage_1 = require("./FsStorage");
|
|
6
10
|
const types_1 = require("../../types");
|
|
@@ -8,11 +12,19 @@ class FsHosting extends FsStorage_1.FsStorage {
|
|
|
8
12
|
connectorId = 'fs-hosting';
|
|
9
13
|
displayName = 'File system hosting';
|
|
10
14
|
connectorType = types_1.ConnectorType.HOSTING;
|
|
15
|
+
async initFs() {
|
|
16
|
+
const stat = await promises_1.default.stat(this.options.path).catch(() => null);
|
|
17
|
+
if (!stat) {
|
|
18
|
+
await promises_1.default.mkdir((0, path_1.join)(this.options.path, 'assets'), { recursive: true });
|
|
19
|
+
await promises_1.default.mkdir((0, path_1.join)(this.options.path, 'css'), { recursive: true });
|
|
20
|
+
console.info(`> [FsHosting] Created folders assets/ and css/ in ${this.options.path}`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
11
23
|
async publish(session, id, files, { startJob, jobSuccess, jobError }) {
|
|
12
24
|
const job = startJob(`Publishing to ${this.displayName}`);
|
|
13
25
|
job.logs = [[`Publishing to ${this.displayName}`]];
|
|
14
26
|
job.errors = [[]];
|
|
15
|
-
this.write(session, '', files, '', async ({ status, message }) => {
|
|
27
|
+
await this.write(session, '', files, '', async ({ status, message }) => {
|
|
16
28
|
job.status = status;
|
|
17
29
|
job.message = message;
|
|
18
30
|
job.logs[0].push(message);
|
|
@@ -1,30 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var
|
|
3
|
-
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
24
4
|
};
|
|
25
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
6
|
exports.FsStorage = void 0;
|
|
27
|
-
const promises_1 =
|
|
7
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
|
28
8
|
const fs_1 = require("fs");
|
|
29
9
|
const connectors_1 = require("./connectors");
|
|
30
10
|
const path_1 = require("path");
|
|
@@ -38,6 +18,17 @@ if (!globalThis.__dirname) {
|
|
|
38
18
|
globalThis.__dirname = (0, path_1.dirname)(process.cwd() + '/src/ts/server/connectors/FsStorage.ts');
|
|
39
19
|
console.info('Redefining __dirname', globalThis.__dirname);
|
|
40
20
|
}
|
|
21
|
+
async function copyDir(src, dest) {
|
|
22
|
+
await promises_1.default.mkdir(dest, { recursive: true });
|
|
23
|
+
const entries = await promises_1.default.readdir(src, { withFileTypes: true });
|
|
24
|
+
for (const entry of entries) {
|
|
25
|
+
const srcPath = (0, path_1.join)(src, entry.name);
|
|
26
|
+
const destPath = (0, path_1.join)(dest, entry.name);
|
|
27
|
+
entry.isDirectory() ?
|
|
28
|
+
await copyDir(srcPath, destPath) :
|
|
29
|
+
await promises_1.default.copyFile(srcPath, destPath);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
41
32
|
const USER_ICON = 'data:image/svg+xml,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' height=\'1em\' viewBox=\'0 0 448 512\'%3E%3Cpath d=\'M304 128a80 80 0 1 0 -160 0 80 80 0 1 0 160 0zM96 128a128 128 0 1 1 256 0A128 128 0 1 1 96 128zM49.3 464H398.7c-8.9-63.3-63.3-112-129-112H178.3c-65.7 0-120.1 48.7-129 112zM0 482.3C0 383.8 79.8 304 178.3 304h91.4C368.2 304 448 383.8 448 482.3c0 16.4-13.3 29.7-29.7 29.7H29.7C13.3 512 0 498.7 0 482.3z\'/%3E%3C/svg%3E';
|
|
42
33
|
const FILE_ICON = 'data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M6%202L6%2022%2018%2022%2018%207%2012%202%206%202Z%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M18%202L12%202%2012%208%2018%208%2018%202Z%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E';
|
|
43
34
|
class FsStorage {
|
|
@@ -64,6 +55,7 @@ class FsStorage {
|
|
|
64
55
|
await promises_1.default.mkdir((0, path_1.join)(this.options.path, id, this.options.assetsFolder), { recursive: true });
|
|
65
56
|
await this.setWebsiteMeta({}, id, { name: 'Default website', connectorUserSettings: {} });
|
|
66
57
|
await this.updateWebsite({}, id, types_1.defaultWebsiteData);
|
|
58
|
+
console.info(`> [FsStorage] Created ${id} in ${this.options.path}`);
|
|
67
59
|
}
|
|
68
60
|
}
|
|
69
61
|
updateStatus(filesStatuses, status, statusCbk) {
|
|
@@ -110,7 +102,7 @@ class FsStorage {
|
|
|
110
102
|
}
|
|
111
103
|
async getWebsiteMeta(session, id) {
|
|
112
104
|
const websiteId = (0, validation_1.requiredParam)(id, 'website id');
|
|
113
|
-
const fileStat = await
|
|
105
|
+
const fileStat = await promises_1.default.stat((0, path_1.join)(this.options.path, websiteId));
|
|
114
106
|
const path = (0, path_1.join)(this.options.path, websiteId, constants_1.WEBSITE_META_DATA_FILE);
|
|
115
107
|
const content = await promises_1.default.readFile(path);
|
|
116
108
|
const meta = await JSON.parse(content.toString());
|
|
@@ -146,6 +138,17 @@ class FsStorage {
|
|
|
146
138
|
const path = (0, path_1.join)(this.options.path, id);
|
|
147
139
|
return promises_1.default.rmdir(path, { recursive: true });
|
|
148
140
|
}
|
|
141
|
+
async duplicateWebsite(session, websiteId) {
|
|
142
|
+
const newWebsiteId = (0, uuid_1.v4)();
|
|
143
|
+
const from = (0, path_1.join)(this.options.path, websiteId);
|
|
144
|
+
const to = (0, path_1.join)(this.options.path, newWebsiteId);
|
|
145
|
+
await copyDir(from, to);
|
|
146
|
+
const meta = await this.getWebsiteMeta(session, websiteId);
|
|
147
|
+
await this.setWebsiteMeta(session, newWebsiteId, {
|
|
148
|
+
...meta,
|
|
149
|
+
name: `${meta.name} copy`,
|
|
150
|
+
});
|
|
151
|
+
}
|
|
149
152
|
async listWebsites(session) {
|
|
150
153
|
const list = await promises_1.default.readdir(this.options.path);
|
|
151
154
|
return Promise.all(list.map(async (fileName) => {
|
|
@@ -171,7 +174,7 @@ class FsStorage {
|
|
|
171
174
|
fileStatus.message = 'Writing';
|
|
172
175
|
this.updateStatus(filesStatuses, types_1.JobStatus.IN_PROGRESS, statusCbk);
|
|
173
176
|
try {
|
|
174
|
-
await promises_1.default.writeFile(path, file.content
|
|
177
|
+
await promises_1.default.writeFile(path, file.content);
|
|
175
178
|
}
|
|
176
179
|
catch (err) {
|
|
177
180
|
fileStatus.message = `Error (${err})`;
|
|
@@ -4,6 +4,7 @@ exports.jobManager = exports.killJob = exports.jobError = exports.jobSuccess = e
|
|
|
4
4
|
const types_1 = require("../types");
|
|
5
5
|
const TIME_TO_KEEP_AFTER_STOP = 60 * 10 * 1000;
|
|
6
6
|
const jobs = new Array();
|
|
7
|
+
const timers = new WeakMap();
|
|
7
8
|
const processKey = Math.ceil(Math.random() * 1000000);
|
|
8
9
|
let nextJobId = 0;
|
|
9
10
|
function startJob(message = '') {
|
|
@@ -30,7 +31,8 @@ function jobError(id, message = '') {
|
|
|
30
31
|
}
|
|
31
32
|
exports.jobError = jobError;
|
|
32
33
|
function killJob(job) {
|
|
33
|
-
clearTimeout(job
|
|
34
|
+
clearTimeout(timers.get(job));
|
|
35
|
+
timers.delete(job);
|
|
34
36
|
jobs.splice(jobs.findIndex(j => job.jobId === j.jobId), 1);
|
|
35
37
|
}
|
|
36
38
|
exports.killJob = killJob;
|
|
@@ -40,7 +42,7 @@ function end(id, status, message = '') {
|
|
|
40
42
|
job.status = status;
|
|
41
43
|
if (message)
|
|
42
44
|
job.message = message;
|
|
43
|
-
job
|
|
45
|
+
timers.set(job, setTimeout(() => killJob(job), TIME_TO_KEEP_AFTER_STOP));
|
|
44
46
|
return true;
|
|
45
47
|
}
|
|
46
48
|
return false;
|
package/dist/server/types.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.JobStatus = exports.ConnectorType = exports.ClientSideFileType = exports.Unit = exports.defaultWebsiteData = exports.ApiError = void 0;
|
|
3
|
+
exports.JobStatus = exports.ConnectorType = exports.Initiator = exports.ClientSideFileType = exports.Unit = exports.defaultWebsiteData = exports.ApiError = void 0;
|
|
4
4
|
class ApiError extends Error {
|
|
5
5
|
httpStatusCode;
|
|
6
6
|
constructor(message, httpStatusCode) {
|
|
@@ -20,7 +20,13 @@ var ClientSideFileType;
|
|
|
20
20
|
ClientSideFileType["HTML"] = "html";
|
|
21
21
|
ClientSideFileType["ASSET"] = "asset";
|
|
22
22
|
ClientSideFileType["CSS"] = "css";
|
|
23
|
+
ClientSideFileType["OTHER"] = "other";
|
|
23
24
|
})(ClientSideFileType || (exports.ClientSideFileType = ClientSideFileType = {}));
|
|
25
|
+
var Initiator;
|
|
26
|
+
(function (Initiator) {
|
|
27
|
+
Initiator["HTML"] = "html";
|
|
28
|
+
Initiator["CSS"] = "css";
|
|
29
|
+
})(Initiator || (exports.Initiator = Initiator = {}));
|
|
24
30
|
var ConnectorType;
|
|
25
31
|
(function (ConnectorType) {
|
|
26
32
|
ConnectorType["STORAGE"] = "STORAGE";
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@silexlabs/silex",
|
|
3
3
|
"description": "Free and easy website builder for everyone.",
|
|
4
|
-
"version": "3.0.0
|
|
4
|
+
"version": "3.0.0",
|
|
5
5
|
"version:backwardcompat": "3.0.0",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Alex Hoyau",
|
|
@@ -16,7 +16,6 @@
|
|
|
16
16
|
"src/",
|
|
17
17
|
"public",
|
|
18
18
|
".silex.js",
|
|
19
|
-
".silex",
|
|
20
19
|
".env.default",
|
|
21
20
|
"package.json",
|
|
22
21
|
"package-lock.json",
|
|
@@ -77,9 +76,11 @@
|
|
|
77
76
|
},
|
|
78
77
|
"scripts": {
|
|
79
78
|
"release": "",
|
|
79
|
+
"dev": "run-p watch start:debug start:http-server",
|
|
80
80
|
"watch": "npm-watch",
|
|
81
81
|
"start": "node dist/server/server/",
|
|
82
|
-
"start:debug": "cross-env SILEX_FS_ROOT=`pwd
|
|
82
|
+
"start:debug": "cross-env SILEX_FS_ROOT=`pwd`/silex SILEX_DEBUG=true SILEX_CLIENT_CONFIG=examples/client-config-transformers.js nodemon --watch dist/server dist/server/server/",
|
|
83
|
+
"start:http-server": "http-server silex/hosting",
|
|
83
84
|
"prepublishOnly": "$npm_execpath run lint && $npm_execpath test && $npm_execpath run build",
|
|
84
85
|
"preversion": "$npm_execpath run prepublishOnly",
|
|
85
86
|
"build": "run-s build:css:release build:html build:client:release build:server:release build:plugins:client build:plugins:server",
|
|
@@ -100,18 +101,18 @@
|
|
|
100
101
|
"test:watch": "$npm_execpath test -- --watch"
|
|
101
102
|
},
|
|
102
103
|
"dependencies": {
|
|
103
|
-
"@fontsource/ubuntu": "^5.0.
|
|
104
|
-
"@fortawesome/fontawesome-free": "6.4.
|
|
105
|
-
"@
|
|
106
|
-
"@silexlabs/grapesjs-fonts": "1.0.
|
|
107
|
-
"@silexlabs/grapesjs-loading": "1.0.
|
|
108
|
-
"@silexlabs/grapesjs-storage-rate-limit": "^1.0.
|
|
109
|
-
"@silexlabs/grapesjs-symbols": "1.0.
|
|
104
|
+
"@fontsource/ubuntu": "^5.0.8",
|
|
105
|
+
"@fortawesome/fontawesome-free": "6.4.2",
|
|
106
|
+
"@silexlabs/grapesjs-filter-styles": "^1.0.0",
|
|
107
|
+
"@silexlabs/grapesjs-fonts": "^1.0.15",
|
|
108
|
+
"@silexlabs/grapesjs-loading": "1.0.9",
|
|
109
|
+
"@silexlabs/grapesjs-storage-rate-limit": "^1.0.8",
|
|
110
|
+
"@silexlabs/grapesjs-symbols": "1.0.39",
|
|
110
111
|
"@silexlabs/grapesjs-ui-suggest-classes": "1.0.23",
|
|
111
112
|
"@silexlabs/silex-plugins": "1.0.10",
|
|
112
|
-
"@types/archiver": "^
|
|
113
|
+
"@types/archiver": "^6.0.1",
|
|
113
114
|
"adm-zip": "0.5.10",
|
|
114
|
-
"archiver": "^
|
|
115
|
+
"archiver": "^6.0.1",
|
|
115
116
|
"basic-ftp": "^5.0.3",
|
|
116
117
|
"body-parser": "1.20.2",
|
|
117
118
|
"cli": "1.0.1",
|
|
@@ -124,46 +125,49 @@
|
|
|
124
125
|
"dotenv": "^16.3.1",
|
|
125
126
|
"express": "4.18.2",
|
|
126
127
|
"express-force-ssl": "0.3.2",
|
|
127
|
-
"formidable": "
|
|
128
|
+
"formidable": "3.5.1",
|
|
128
129
|
"fs-extra": "^11.1.1",
|
|
129
|
-
"grapesjs": "0.21.
|
|
130
|
+
"grapesjs": "0.21.7",
|
|
130
131
|
"grapesjs-blocks-basic": "1.0.2",
|
|
131
132
|
"grapesjs-custom-code": "1.0.2",
|
|
132
133
|
"grapesjs-plugin-forms": "2.0.6",
|
|
133
|
-
"grapesjs-style-
|
|
134
|
+
"grapesjs-style-bg": "^2.0.2",
|
|
135
|
+
"grapesjs-style-border": "1.0.4",
|
|
136
|
+
"grapesjs-style-filter": "^1.0.2",
|
|
134
137
|
"html-minifier": "^4.0.0",
|
|
135
|
-
"lit-html": "
|
|
138
|
+
"lit-html": "3.0.2",
|
|
136
139
|
"mkdirp": "3.0.1",
|
|
137
140
|
"node_modules-path": "2.0.7",
|
|
138
141
|
"node-fetch": "2.6.9",
|
|
139
142
|
"normalize.css": "8.0.1",
|
|
140
143
|
"object-path": "0.11.8",
|
|
141
144
|
"promise-sequential": "1.1.1",
|
|
142
|
-
"sass": "1.
|
|
145
|
+
"sass": "1.69.5",
|
|
143
146
|
"serve-static": "1.15.0",
|
|
144
|
-
"uuid": "^9.0.
|
|
147
|
+
"uuid": "^9.0.1"
|
|
145
148
|
},
|
|
146
149
|
"devDependencies": {
|
|
147
|
-
"@types/express": "4.17.
|
|
148
|
-
"@types/jest": "^29.5.
|
|
149
|
-
"@types/node": "20.
|
|
150
|
-
"@typescript-eslint/eslint-plugin": "
|
|
151
|
-
"@typescript-eslint/parser": "
|
|
150
|
+
"@types/express": "4.17.21",
|
|
151
|
+
"@types/jest": "^29.5.8",
|
|
152
|
+
"@types/node": "20.9.0",
|
|
153
|
+
"@typescript-eslint/eslint-plugin": "6.10.0",
|
|
154
|
+
"@typescript-eslint/parser": "6.10.0",
|
|
152
155
|
"css-loader": "6.8.1",
|
|
153
|
-
"eslint": "8.
|
|
156
|
+
"eslint": "8.53.0",
|
|
154
157
|
"file-loader": "6.2.0",
|
|
155
|
-
"
|
|
156
|
-
"jest
|
|
158
|
+
"http-server": "^14.1.1",
|
|
159
|
+
"jest": "29.7.0",
|
|
160
|
+
"jest-environment-jsdom": "29.7.0",
|
|
157
161
|
"livereload": "0.9.3",
|
|
158
|
-
"nodemon": "
|
|
162
|
+
"nodemon": "3.0.1",
|
|
159
163
|
"npm-run-all": "4.1.5",
|
|
160
164
|
"npm-watch": "0.11.0",
|
|
161
165
|
"pug-cli": "1.0.0-alpha6",
|
|
162
166
|
"style-loader": "3.3.3",
|
|
163
|
-
"ts-jest": "29.1.
|
|
164
|
-
"ts-loader": "9.
|
|
165
|
-
"typescript": "5.
|
|
166
|
-
"webpack": "5.
|
|
167
|
+
"ts-jest": "29.1.1",
|
|
168
|
+
"ts-loader": "9.5.0",
|
|
169
|
+
"typescript": "5.2.2",
|
|
170
|
+
"webpack": "5.89.0",
|
|
167
171
|
"webpack-cli": "5.1.4"
|
|
168
172
|
},
|
|
169
173
|
"repository": {
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/src/css/_variables.scss
CHANGED
|
@@ -11,15 +11,16 @@ $topBarHeight: 40px;
|
|
|
11
11
|
$projectBarWidth: 35px;
|
|
12
12
|
$projectPanelWidth: 13%;
|
|
13
13
|
$projectPanelMinWidth: 150px;
|
|
14
|
-
$viewsPanelWidth:
|
|
14
|
+
$viewsPanelWidth: 25%; // 15% is grapesjs default
|
|
15
15
|
$footerHeight: 30px;
|
|
16
|
-
$transitionSpeedMedium: .
|
|
17
|
-
$transitionSpeedSlow: .
|
|
16
|
+
$transitionSpeedMedium: .15s;
|
|
17
|
+
$transitionSpeedSlow: .30s;
|
|
18
18
|
$prefix: 'gjs-';
|
|
19
19
|
$pn-prefix: '#{$prefix}pn-';
|
|
20
20
|
$cv-prefix: '#{$prefix}cv-';
|
|
21
21
|
$z-dialog-inline: 10;
|
|
22
22
|
$z-loader: 10;
|
|
23
|
+
$z-views-options-buttons: 5;
|
|
23
24
|
|
|
24
25
|
$fontFamily: 'Ubuntu', sans-serif;
|
|
25
26
|
|
|
@@ -30,4 +31,5 @@ $fontFamily: 'Ubuntu', sans-serif;
|
|
|
30
31
|
--quaternaryColor: #{$quaternaryColor};
|
|
31
32
|
--darkerPrimaryColor: #{$darkerPrimaryColor};
|
|
32
33
|
--lighterPrimaryColor: #{$lighterPrimaryColor};
|
|
34
|
+
--viewsPanelWidth: #{$viewsPanelWidth};
|
|
33
35
|
}
|
package/src/css/dialog.scss
CHANGED
|
@@ -18,19 +18,24 @@
|
|
|
18
18
|
background-color: variables.$primaryColor;
|
|
19
19
|
z-index: variables.$z-dialog-inline;
|
|
20
20
|
border-radius: 3px;
|
|
21
|
-
border: 2px solid
|
|
21
|
+
border: 2px solid variables.$lighterPrimaryColor;
|
|
22
|
+
box-shadow: 0 0 10px 0 variables.$lighterPrimaryColor;
|
|
22
23
|
display: flex;
|
|
23
24
|
flex-direction: column;
|
|
24
25
|
header {
|
|
25
26
|
padding: 10px;
|
|
27
|
+
border-bottom: 1px solid variables.$lighterPrimaryColor;
|
|
26
28
|
}
|
|
27
29
|
main {
|
|
28
30
|
flex-grow: 1;
|
|
29
31
|
padding: 10px;
|
|
32
|
+
max-height: 50vh;
|
|
33
|
+
overflow-y: auto;
|
|
30
34
|
}
|
|
31
35
|
footer {
|
|
32
36
|
padding: 10px;
|
|
33
37
|
text-align: right;
|
|
38
|
+
border-top: 1px solid variables.$lighterPrimaryColor;
|
|
34
39
|
}
|
|
35
40
|
a {
|
|
36
41
|
color: variables.$quaternaryColor;
|
|
@@ -39,3 +44,19 @@
|
|
|
39
44
|
margin: 0;
|
|
40
45
|
}
|
|
41
46
|
}
|
|
47
|
+
|
|
48
|
+
.silex-help {
|
|
49
|
+
margin: 10px 0;
|
|
50
|
+
padding: 10px;
|
|
51
|
+
border: 1px solid variables.$lighterPrimaryColor;
|
|
52
|
+
border-radius: 3px;
|
|
53
|
+
background-color: variables.$lighterPrimaryColor;
|
|
54
|
+
color: variables.$secondaryColor;
|
|
55
|
+
font-size: small;
|
|
56
|
+
p {
|
|
57
|
+
margin: 0;
|
|
58
|
+
}
|
|
59
|
+
a {
|
|
60
|
+
color: variables.$quaternaryColor;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
@use "variables" as *;
|
|
2
|
+
.fonts-dialog {
|
|
3
|
+
.gjs-mdl-dialog {
|
|
4
|
+
width: 100%;
|
|
5
|
+
max-width: unset;
|
|
6
|
+
min-height: 100%;
|
|
7
|
+
display: flex;
|
|
8
|
+
flex-direction: column;
|
|
9
|
+
}
|
|
10
|
+
.gjs-mdl-content {
|
|
11
|
+
flex: 1 1 auto;
|
|
12
|
+
}
|
|
13
|
+
.silex-form__element {
|
|
14
|
+
margin-bottom: 80px;
|
|
15
|
+
}
|
|
16
|
+
.silex-list li {
|
|
17
|
+
border-bottom: none;
|
|
18
|
+
}
|
|
19
|
+
h2 {
|
|
20
|
+
border-radius: 0;
|
|
21
|
+
background-color: transparent;
|
|
22
|
+
}
|
|
23
|
+
footer {
|
|
24
|
+
position: fixed;
|
|
25
|
+
bottom: 0;
|
|
26
|
+
left: 0;
|
|
27
|
+
right: 0;
|
|
28
|
+
padding: 20px !important;
|
|
29
|
+
background-color: $primaryColor;
|
|
30
|
+
}
|
|
31
|
+
}
|