diff --git a/packages/api/src/controllers/files.js b/packages/api/src/controllers/files.js
index 49ec040cc..d44fb2863 100644
--- a/packages/api/src/controllers/files.js
+++ b/packages/api/src/controllers/files.js
@@ -195,8 +195,8 @@ module.exports = {
},
exportDiagram_meta: true,
- async exportDiagram({ filePath, html, css, themeType, themeClassName }) {
- await fs.writeFile(filePath, getDiagramExport(html, css, themeType, themeClassName));
+ async exportDiagram({ filePath, html, css, themeType, themeClassName, watermark }) {
+ await fs.writeFile(filePath, getDiagramExport(html, css, themeType, themeClassName, watermark));
return true;
},
diff --git a/packages/api/src/utility/getDiagramExport.js b/packages/api/src/utility/getDiagramExport.js
index 3e45fa459..f73b8bc0a 100644
--- a/packages/api/src/utility/getDiagramExport.js
+++ b/packages/api/src/utility/getDiagramExport.js
@@ -1,4 +1,11 @@
-const getDiagramExport = (html, css, themeType, themeClassName) => {
+const getDiagramExport = (html, css, themeType, themeClassName, watermark) => {
+ const watermarkHtml = watermark
+ ? `
+
+ ${watermark}
+
+ `
+ : '';
return `
@@ -17,6 +24,7 @@ const getDiagramExport = (html, css, themeType, themeClassName) => {
${html}
+ ${watermarkHtml}
`;
diff --git a/packages/tools/src/diagramTools.ts b/packages/tools/src/diagramTools.ts
index 5d20ed0d9..8fded94c2 100644
--- a/packages/tools/src/diagramTools.ts
+++ b/packages/tools/src/diagramTools.ts
@@ -59,3 +59,5 @@ export function chooseTopTables(tables: TableInfo[], count: number, tableFilter:
}
export const DIAGRAM_ZOOMS = [0.1, 0.15, 0.2, 0.3, 0.4, 0.5, 0.6, 0.8, 1, 1.25, 1.5, 1.75, 2];
+
+export const DIAGRAM_DEFAULT_WATERMARK = 'Powered by [dbgate.io](https://dbgate.io)';
diff --git a/packages/web/src/designer/Designer.svelte b/packages/web/src/designer/Designer.svelte
index 5a6d823b5..a1015c9e6 100644
--- a/packages/web/src/designer/Designer.svelte
+++ b/packages/web/src/designer/Designer.svelte
@@ -47,7 +47,7 @@
import { showModal } from '../modals/modalTools';
import ChooseColorModal from '../modals/ChooseColorModal.svelte';
import { currentThemeDefinition } from '../stores';
- import { chooseTopTables, DIAGRAM_ZOOMS, extendDatabaseInfoFromApps } from 'dbgate-tools';
+ import { chooseTopTables, DIAGRAM_DEFAULT_WATERMARK, DIAGRAM_ZOOMS, extendDatabaseInfoFromApps } from 'dbgate-tools';
import SearchInput from '../elements/SearchInput.svelte';
import CloseSearchButton from '../buttons/CloseSearchButton.svelte';
import DragColumnMemory from './DragColumnMemory.svelte';
@@ -763,6 +763,16 @@
);
}
+ function getWatermarkHtml() {
+ const replaceLinks = text => text.replace(/\[([^\]]+)\]\(([^)]+)\)/g, '$1');
+
+ if (value?.style?.omitExportWatermark) return null;
+ if (value?.style?.exportWatermark) {
+ return replaceLinks(value?.style?.exportWatermark);
+ }
+ return replaceLinks(DIAGRAM_DEFAULT_WATERMARK);
+ }
+
export async function exportDiagram() {
const cssLinks = ['global.css', 'build/bundle.css'];
let css = '';
@@ -784,6 +794,7 @@
css,
themeType: $currentThemeDefinition?.themeType,
themeClassName: $currentThemeDefinition?.themeClassName,
+ watermark: getWatermarkHtml(),
});
});
}