diff --git a/README.md b/README.md
index 9adc5296e..bbb541777 100644
--- a/README.md
+++ b/README.md
@@ -9,7 +9,7 @@
[Publii](https://getpublii.com/) is a desktop-based CMS for Windows, Mac and Linux that makes creating static websites fast
and hassle-free, even for beginners.
-**Current version: 0.39.0 (build 15465)**
+**Current version: 0.39.1 (build 15483)**
## Why Publii?
Unlike static-site generators that are often unwieldy and difficult to use, Publii provides an
diff --git a/app/back-end/builddata.json b/app/back-end/builddata.json
index a58c91f2a..89b43feb8 100644
--- a/app/back-end/builddata.json
+++ b/app/back-end/builddata.json
@@ -1 +1 @@
-{"version":"0.39.0","build":15465}
\ No newline at end of file
+{"version":"0.39.1","build":15483}
\ No newline at end of file
diff --git a/app/back-end/modules/deploy/google-cloud.js b/app/back-end/modules/deploy/google-cloud.js
index 7ce405c87..95e1f442b 100644
--- a/app/back-end/modules/deploy/google-cloud.js
+++ b/app/back-end/modules/deploy/google-cloud.js
@@ -32,8 +32,14 @@ class GoogleCloud {
return;
}
+ let keyData = require(keyFilePath);
+
let gcs = new Storage({
- credentials: require(keyFilePath)
+ projectId: keyData.project_id,
+ credentials: {
+ client_email: keyData.client_email,
+ private_key: keyData.private_key
+ }
});
this.connection = gcs.bucket(bucketName);
@@ -268,8 +274,14 @@ class GoogleCloud {
return;
}
+ let keyData = require(keyFilePath);
+
let gcs = new Storage({
- credentials: require(keyFilePath)
+ projectId: keyData.project_id,
+ credentials: {
+ client_email: keyData.client_email,
+ private_key: keyData.private_key
+ }
});
let bucket = gcs.bucket(bucketName);
diff --git a/app/back-end/modules/render-html/contexts/post-preview.js b/app/back-end/modules/render-html/contexts/post-preview.js
index d0601c3dd..2d2969263 100644
--- a/app/back-end/modules/render-html/contexts/post-preview.js
+++ b/app/back-end/modules/render-html/contexts/post-preview.js
@@ -41,7 +41,7 @@ class RendererContextPostPreview extends RendererContext {
let postURL = this.siteConfig.domain + '/preview.html';
let preparedText = this.prepareContent(this.renderer.postData.text, this.renderer.postData.id);
let hasCustomExcerpt = false;
- let readmoreMatches = preparedText.match(/\
/gmi);
+ let readmoreMatches = preparedText.match(/\
/gmi);
if (readmoreMatches && readmoreMatches.length) {
hasCustomExcerpt = true;
@@ -53,7 +53,7 @@ class RendererContextPostPreview extends RendererContext {
slug: this.renderer.postData.slug,
author: this.renderer.cachedItems.authors[this.renderer.postData.author],
url: postURL,
- text: preparedText.replace(/\
/gmi, ''),
+ text: preparedText.replace(/\
/gmi, ''),
excerpt: ContentHelper.prepareExcerpt(this.themeConfig.config.excerptLength, preparedText),
createdAt: this.renderer.postData.creationDate,
modifiedAt: this.renderer.postData.modificationDate,
@@ -485,7 +485,7 @@ class RendererContextPostPreview extends RendererContext {
preparedText = preparedText.replace(/contentEditable="true"/gi, '');
// Remove read more text
- preparedText = preparedText.replace(/\
/gmi, '');
+ preparedText = preparedText.replace(/\
/gmi, '');
// Remove the last empty paragraph
preparedText = preparedText.replace(/ <\/p>\s?$/gmi, '');
diff --git a/app/back-end/modules/render-html/helpers/content.js b/app/back-end/modules/render-html/helpers/content.js
index ec745b084..458dcbee5 100644
--- a/app/back-end/modules/render-html/helpers/content.js
+++ b/app/back-end/modules/render-html/helpers/content.js
@@ -162,10 +162,10 @@ class ContentHelper {
*/
static prepareExcerpt(length, text) {
// Detect readmore
- let readmoreMatches = text.match(/\
/gmi);
+ let readmoreMatches = text.match(/\
/gmi);
if(readmoreMatches && readmoreMatches.length) {
- text = text.split(/\
/gmi);
+ text = text.split(/\
/gmi);
text = text[0];
return text;
}
diff --git a/app/back-end/modules/render-html/items/post.js b/app/back-end/modules/render-html/items/post.js
index f09c1574d..696b4fd5c 100644
--- a/app/back-end/modules/render-html/items/post.js
+++ b/app/back-end/modules/render-html/items/post.js
@@ -39,17 +39,17 @@ class PostItem {
let preparedExcerpt = ContentHelper.prepareExcerpt(this.themeConfig.config.excerptLength, preparedText);
preparedExcerpt = ContentHelper.setInternalLinks(preparedExcerpt, this.renderer);
let hasCustomExcerpt = false;
- let readmoreMatches = preparedText.match(/\
/gmi);
+ let readmoreMatches = preparedText.match(/\
/gmi);
if (readmoreMatches && readmoreMatches.length) {
hasCustomExcerpt = true;
// Detect if hide of the custom excerpt is enabled
if (this.renderer.siteConfig.advanced.postUseTextWithoutCustomExcerpt) {
- preparedText = preparedText.split(/\
/gmi);
+ preparedText = preparedText.split(/\
/gmi);
preparedText = preparedText[1];
} else {
- preparedText = preparedText.replace(/\
/gmi, '');
+ preparedText = preparedText.replace(/\
/gmi, '');
}
}
diff --git a/app/back-end/site.js b/app/back-end/site.js
index 294845c9f..afe5a95c4 100644
--- a/app/back-end/site.js
+++ b/app/back-end/site.js
@@ -363,7 +363,7 @@ class Site {
return;
}
- if(data.type === 'finished') {
+ if (data.type === 'finished') {
sender.send('app-site-regenerate-thumbnails-success', true);
}
});
diff --git a/app/back-end/workers/thumbnails/regenerate.js b/app/back-end/workers/thumbnails/regenerate.js
index 951fcb673..1a5ff7dd8 100644
--- a/app/back-end/workers/thumbnails/regenerate.js
+++ b/app/back-end/workers/thumbnails/regenerate.js
@@ -83,7 +83,7 @@ function regenerateImage (images, fullPath, catalog) {
if (promises[0] === 'NO-RESPONSIVE-IMAGES') {
process.send({
type: 'progress',
- value: 100,
+ value: parseInt((context.totalProgress / context.numberOfImages) * 100, 10),
files: [
{
translation: 'core.images.responsiveImagesDisabled'
@@ -91,7 +91,14 @@ function regenerateImage (images, fullPath, catalog) {
]
});
- finishProcess();
+ context.totalProgress++;
+
+ if (context.totalProgress >= context.numberOfImages) {
+ finishProcess();
+ } else {
+ regenerateImage(images, fullPath, catalog);
+ }
+
return;
}
@@ -213,6 +220,8 @@ function getImageType(context, image, catalog) {
* @private
*/
function finishProcess() {
+ console.log('Finish process...');
+
process.send({
type: 'finished'
});
diff --git a/app/default-files/default-themes/simple/assets/css/main.css b/app/default-files/default-themes/simple/assets/css/main.css
index 0acb423a4..7f8723fb9 100644
--- a/app/default-files/default-themes/simple/assets/css/main.css
+++ b/app/default-files/default-themes/simple/assets/css/main.css
@@ -1121,7 +1121,7 @@ textarea {
color: var(--nav-link-color) !important;
}
.navbar .navbar__toggle {
- background: var(--dark);
+ background: var(--section-bg);
-webkit-box-shadow: none;
box-shadow: none;
border: none;
@@ -1233,7 +1233,7 @@ textarea {
}
.navbar_mobile_overlay {
- background: var(--white);
+ background: var(--page-bg);
height: calc(100vh - 4.4rem);
left: 0;
opacity: 1;
@@ -1307,7 +1307,7 @@ textarea {
}
.navbar_mobile_sidebar {
- background: var(--white);
+ background: var(--page-bg);
-webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.25);
box-shadow: 0 0 5px rgba(0, 0, 0, 0.25);
height: 100vh;
diff --git a/app/default-files/default-themes/simple/config.json b/app/default-files/default-themes/simple/config.json
index dc4eabfe0..8182404b1 100755
--- a/app/default-files/default-themes/simple/config.json
+++ b/app/default-files/default-themes/simple/config.json
@@ -1,6 +1,6 @@
{
"name": "Simple",
- "version": "2.4.0.0",
+ "version": "2.4.1.0",
"author": "TidyCustoms ",
"menus": {
"mainMenu": "Main menu"
diff --git a/app/package-lock.json b/app/package-lock.json
index 01fd600f4..06aae2f0c 100644
--- a/app/package-lock.json
+++ b/app/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "Publii",
- "version": "0.39.0",
+ "version": "0.39.1",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "Publii",
- "version": "0.39.0",
+ "version": "0.39.1",
"license": "GPL-3.0",
"dependencies": {
"@gitbeaker/node": "28.0.4",
diff --git a/app/package.json b/app/package.json
index 202ee3502..f766a9a7c 100644
--- a/app/package.json
+++ b/app/package.json
@@ -1,7 +1,7 @@
{
"productName": "Publii",
"name": "Publii",
- "version": "0.39.0",
+ "version": "0.39.1",
"description": "Static Site CMS",
"main": "main.js",
"scripts": {
diff --git a/app/src/components/LanguagesListItem.vue b/app/src/components/LanguagesListItem.vue
index e420c23f0..62b90d419 100644
--- a/app/src/components/LanguagesListItem.vue
+++ b/app/src/components/LanguagesListItem.vue
@@ -61,7 +61,10 @@ export default {
return false;
},
isOutdated () {
- if (compare(this.languageData.publiiSupport, this.$store.state.app.versionInfo.version) === -1) {
+ let publiiSupport = this.languageData.publiiSupport.split('.').slice(0, 2).join('.');
+ let currentMajorVersion = this.$store.state.app.versionInfo.version.split('.').slice(0, 2).join('.');
+
+ if (compare(publiiSupport, currentMajorVersion) === -1) {
return true;
}
diff --git a/app/src/components/SyncPopup.vue b/app/src/components/SyncPopup.vue
index 82d58e973..660716139 100644
--- a/app/src/components/SyncPopup.vue
+++ b/app/src/components/SyncPopup.vue
@@ -55,7 +55,7 @@