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(), }); }); }