diff --git a/packages/api/src/controllers/files.js b/packages/api/src/controllers/files.js
index a05ee697c..74e6c81ed 100644
--- a/packages/api/src/controllers/files.js
+++ b/packages/api/src/controllers/files.js
@@ -5,10 +5,6 @@ const hasPermission = require('../utility/hasPermission');
const socket = require('../utility/socket');
const scheduler = require('./scheduler');
-const markdownAutorunRegex = /<\!--.*@autorun\s*(\n.*-->|-->)/s;
-const markdownButtonRegex = /<\!--.*@button\s+([^\n]+)(\n.*-->|-->)/s;
-const markdownIconRegex = /<\!--.*@icon\s+([^\n]+)(\n.*-->|-->)/s;
-
function serialize(format, data) {
if (format == 'text') return data;
if (format == 'json') return JSON.stringify(data);
@@ -84,29 +80,4 @@ module.exports = {
}
return res;
},
-
- markdownManifest_meta: 'get',
- async markdownManifest() {
- if (!hasPermission(`files/markdown/read`)) return [];
- const dir = path.join(filesdir(), 'markdown');
- if (!(await fs.exists(dir))) return [];
- const files = await fs.readdir(dir);
- const res = [];
- for (const file of files) {
- const filePath = path.join(dir, file);
- const text = await fs.readFile(filePath, { encoding: 'utf-8' });
- const autorun = text.match(markdownAutorunRegex);
- const button = text.match(markdownButtonRegex);
- const icon = text.match(markdownIconRegex);
- if (autorun || button) {
- res.push({
- file,
- autorun: !!autorun,
- button: button ? button[1].trim() : undefined,
- icon: icon ? icon[1].trim() : undefined,
- });
- }
- }
- return res;
- },
};
diff --git a/packages/web/src/appobj/FavoriteFileAppObject.js b/packages/web/src/appobj/FavoriteFileAppObject.js
index 54eecc173..0eaade630 100644
--- a/packages/web/src/appobj/FavoriteFileAppObject.js
+++ b/packages/web/src/appobj/FavoriteFileAppObject.js
@@ -6,10 +6,45 @@ import axios from '../utility/axios';
import useOpenNewTab from '../utility/useOpenNewTab';
import { SavedFileAppObjectBase } from './SavedFileAppObject';
+export function useOpenFavorite() {
+ const openNewTab = useOpenNewTab();
+
+ const openFavorite = React.useCallback(
+ async (favorite) => {
+ const { icon, tabComponent, title, props, tabdata } = favorite;
+ let tabdataNew = tabdata;
+ if (props.savedFile) {
+ const resp = await axios.post('files/load', {
+ folder: props.savedFolder,
+ file: props.savedFile,
+ format: props.savedFormat,
+ });
+ tabdataNew = {
+ ...tabdata,
+ editor: resp.data,
+ };
+ }
+ openNewTab(
+ {
+ title,
+ icon: icon || 'img favorite',
+ props,
+ tabComponent,
+ },
+ tabdataNew
+ );
+ },
+ [openNewTab]
+ );
+
+ return openFavorite;
+}
+
export function FavoriteFileAppObject({ data, commonProps }) {
const { icon, tabComponent, title, props, tabdata } = data;
const openNewTab = useOpenNewTab();
const showModal = useShowModal();
+ const openFavorite = useOpenFavorite();
const editFavorite = () => {
showModal((modalState) => );
@@ -24,27 +59,7 @@ export function FavoriteFileAppObject({ data, commonProps }) {
title={title}
disableRename
onLoad={async (data) => {
- let tabdataNew = tabdata;
- if (props.savedFile) {
- const resp = await axios.post('files/load', {
- folder: props.savedFolder,
- file: props.savedFile,
- format: props.savedFormat,
- });
- tabdataNew = {
- ...tabdata,
- editor: resp.data,
- };
- }
- openNewTab(
- {
- title,
- icon: icon || 'img favorite',
- props,
- tabComponent,
- },
- tabdataNew
- );
+ openFavorite(data);
}}
menuExt={Edit}
/>
diff --git a/packages/web/src/modals/FavoriteModal.js b/packages/web/src/modals/FavoriteModal.js
index 342166997..ce11f57e5 100644
--- a/packages/web/src/modals/FavoriteModal.js
+++ b/packages/web/src/modals/FavoriteModal.js
@@ -26,6 +26,8 @@ export default function FavoriteModal({ modalState, editingData = undefined, sav
return {
title: editingData.title,
icon: editingData.icon,
+ showInToolbar: editingData.showInToolbar,
+ openOnStartup: editingData.openOnStartup,
};
}
}, []);
diff --git a/packages/web/src/utility/metadataLoaders.js b/packages/web/src/utility/metadataLoaders.js
index 6d0077a99..ff35eea7c 100644
--- a/packages/web/src/utility/metadataLoaders.js
+++ b/packages/web/src/utility/metadataLoaders.js
@@ -52,12 +52,6 @@ const favoritesLoader = () => ({
reloadTrigger: 'files-changed-favorites',
});
-const markdownManifestLoader = () => ({
- url: 'files/markdown-manifest',
- params: {},
- reloadTrigger: 'files-changed-markdown',
-});
-
// const sqlObjectListLoader = ({ conid, database }) => ({
// url: 'metadata/list-objects',
// params: { conid, database },
@@ -282,13 +276,6 @@ export function useFiles(args) {
return useCore(filesLoader, args);
}
-export function getMarkdownManifest(args) {
- return getCore(markdownManifestLoader, args);
-}
-export function useMarkdownManifest(args) {
- return useCore(markdownManifestLoader, args);
-}
-
export function getFavorites(args) {
return getCore(favoritesLoader, args);
}
diff --git a/packages/web/src/widgets/Toolbar.js b/packages/web/src/widgets/Toolbar.js
index 1c88bab4a..42faf46da 100644
--- a/packages/web/src/widgets/Toolbar.js
+++ b/packages/web/src/widgets/Toolbar.js
@@ -4,7 +4,7 @@ import ConnectionModal from '../modals/ConnectionModal';
import styled from 'styled-components';
import ToolbarButton, { ToolbarButtonExternalImage } from './ToolbarButton';
import useNewQuery from '../query/useNewQuery';
-import { useConfig, useMarkdownManifest } from '../utility/metadataLoaders';
+import { useConfig, useFavorites } from '../utility/metadataLoaders';
import { useSetOpenedTabs, useOpenedTabs, useCurrentTheme, useSetCurrentTheme } from '../utility/globalState';
import useNewFreeTable from '../freetable/useNewFreeTable';
import ImportExportModal from '../modals/ImportExportModal';
@@ -16,6 +16,7 @@ import AboutModal from '../modals/AboutModal';
import useOpenNewTab from '../utility/useOpenNewTab';
import tabs from '../tabs';
import FavoriteModal from '../modals/FavoriteModal';
+import { useOpenFavorite } from '../appobj/FavoriteFileAppObject';
const ToolbarContainer = styled.div`
display: flex;
@@ -36,7 +37,8 @@ export default function ToolBar({ toolbarPortalRef }) {
const setCurrentTheme = useSetCurrentTheme();
const extensions = useExtensions();
const electron = getElectron();
- const markdownManifest = useMarkdownManifest();
+ const favorites = useFavorites();
+ const openFavorite = useOpenFavorite();
const currentTab = openedTabs.find((x) => x.selected);
@@ -84,45 +86,46 @@ export default function ToolBar({ toolbarPortalRef }) {
showModal((modalState) => );
};
- function openTabFromButton(page) {
- if (
- openedTabs.find(
- (x) => x.tabComponent == 'MarkdownViewTab' && x.props && x.props.file == page.file && x.closedTime == null
- )
- ) {
- setOpenedTabs((tabs) =>
- tabs.map((tab) => ({
- ...tab,
- selected: tab.tabComponent == 'MarkdownViewTab' && tab.props && tab.props.file == page.file,
- }))
- );
- } else {
- openNewTab({
- title: page.button || page.file,
- tabComponent: 'MarkdownViewTab',
- icon: page.icon || 'img markdown',
- props: {
- file: page.file,
- },
- });
- }
+ function openTabFromButton(favorite) {
+ openFavorite(favorite);
+ // if (
+ // openedTabs.find(
+ // (x) => x.tabComponent == 'MarkdownViewTab' && x.props && x.props.file == page.file && x.closedTime == null
+ // )
+ // ) {
+ // setOpenedTabs((tabs) =>
+ // tabs.map((tab) => ({
+ // ...tab,
+ // selected: tab.tabComponent == 'MarkdownViewTab' && tab.props && tab.props.file == page.file,
+ // }))
+ // );
+ // } else {
+ // openNewTab({
+ // title: page.button || page.file,
+ // tabComponent: 'MarkdownViewTab',
+ // icon: page.icon || 'img markdown',
+ // props: {
+ // file: page.file,
+ // },
+ // });
+ // }
}
React.useEffect(() => {
- for (const page of (markdownManifest || []).filter((x) => x.autorun)) {
- openTabFromButton(page);
+ for (const fav of (favorites || []).filter((x) => x.openOnStartup)) {
+ openTabFromButton(fav);
}
- }, [markdownManifest]);
+ }, [favorites]);
return (
{!electron && }
- {(markdownManifest || [])
- .filter((x) => x.button)
+ {(favorites || [])
+ .filter((x) => x.showInToolbar)
.map((x) => (
- openTabFromButton(x)} icon={x.icon || 'icon markdown'}>
- {x.button}
+ openTabFromButton(x)} icon={x.icon || 'icon favorite'}>
+ {x.title}
))}
{config.runAsPortal == false && (