Skip to content

Commit 64ee79c

Browse files
committed
fix #184
1 parent 4da9d3f commit 64ee79c

File tree

7 files changed

+74
-10
lines changed

7 files changed

+74
-10
lines changed

bun.lockb

1.17 KB
Binary file not shown.

package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,10 @@
3030
"@codemirror/view": "6.22.0",
3131
"@happy-dom/global-registrator": "^12.10.3",
3232
"@tsconfig/svelte": "^5.0.0",
33-
"@types/web": "^0.0.119",
33+
"@types/bun": "^1.0.2",
3434
"@typescript-eslint/eslint-plugin": "^6.0.0",
3535
"@typescript-eslint/parser": "^6.0.0",
3636
"builtin-modules": "^3.3.0",
37-
"bun-types": "1.0.15",
3837
"esbuild": "^0.19.5",
3938
"esbuild-plugin-copy-watch": "^2.0.0",
4039
"esbuild-svelte": "^0.8.0",

src/fields/inputFields/fields/Editor/EditorComponent.svelte

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
let inputEl: HTMLElement;
1010
1111
onMount(() => {
12-
renderEl.style.display = "block";
13-
inputEl.style.display = "none";
12+
renderEl.style.display = 'block';
13+
inputEl.style.display = 'none';
1414
render(renderEl, value);
1515
});
1616
@@ -20,15 +20,15 @@
2020
}
2121
2222
function focusOut() {
23-
renderEl.style.display = "block";
24-
inputEl.style.display = "none";
23+
renderEl.style.display = 'block';
24+
inputEl.style.display = 'none';
2525
render(renderEl, value);
2626
}
2727
2828
function focusIn() {
2929
// console.log('focus in');
30-
renderEl.style.display = "none";
31-
inputEl.style.display = "block";
30+
renderEl.style.display = 'none';
31+
inputEl.style.display = 'block';
3232
inputEl.focus();
3333
}
3434

src/settings/buttonTemplateSetting/ButtonTemplateSettingComponent.svelte

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import Icon from '../../utils/components/Icon.svelte';
55
import { ButtonConfig, ButtonStyleType } from '../../config/ButtonConfig';
66
import FlexRow from '../../utils/components/FlexRow.svelte';
7-
import { stringifyYaml } from 'obsidian';
7+
import { Notice, stringifyYaml } from 'obsidian';
88
import { ButtonBuilderModal } from '../../fields/button/ButtonBuilderModal';
99
import MetaBindPlugin from '../../main';
1010
@@ -29,6 +29,12 @@
2929
config: template,
3030
}).open();
3131
}
32+
33+
function copyTemplate(): void {
34+
const yaml = stringifyYaml(template);
35+
void navigator.clipboard.writeText(yaml);
36+
new Notice('meta-bind | Copied to Clipboard');
37+
}
3238
</script>
3339

3440
<div class="mb-card markdown-rendered">
@@ -37,6 +43,9 @@
3743
<Button on:click={() => editTemplate()} variant={ButtonStyleType.PRIMARY} tooltip="Edit">
3844
<Icon iconName="pen-line" />
3945
</Button>
46+
<Button on:click={() => copyTemplate()} variant={ButtonStyleType.DEFAULT} tooltip="Copy">
47+
<Icon iconName="copy" />
48+
</Button>
4049
<Button on:click={() => dispatchDeleteEvent()} variant={ButtonStyleType.DESTRUCTIVE} tooltip="Delete">
4150
<Icon iconName="x" />
4251
</Button>

src/settings/buttonTemplateSetting/ButtonTemplatesSettingComponent.svelte

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@
66
import { ButtonConfig } from '../../config/ButtonConfig';
77
import { ButtonTemplatesSettingModal } from './ButtonTemplatesSettingModal';
88
import ButtonTemplateSettingComponent from './ButtonTemplateSettingComponent.svelte';
9+
import { V_ButtonConfig } from '../../config/ButtonConfigValidators';
10+
import { fromZodError } from 'zod-validation-error';
11+
import { ErrorLevel, MetaBindButtonError } from '../../utils/errors/MetaBindErrors';
12+
import { DocsUtils } from '../../utils/DocsUtils';
13+
import { Notice, parseYaml } from 'obsidian';
914
1015
export let buttonConfigs: ButtonConfig[];
1116
export let modal: ButtonTemplatesSettingModal;
@@ -22,6 +27,49 @@
2227
buttonConfigs = buttonConfigs;
2328
}
2429
30+
async function addTemplateFromClipboard(): void {
31+
let unvalidatedConfig: ButtonConfig | undefined;
32+
try {
33+
unvalidatedConfig = parseYaml(await navigator.clipboard.readText());
34+
} catch (e) {
35+
console.warn(e);
36+
new Notice(
37+
'meta-bind | Can not parse button config. Check your button syntax. See the console for more details.',
38+
);
39+
return;
40+
}
41+
42+
const validationResult = V_ButtonConfig.safeParse(unvalidatedConfig);
43+
44+
if (!validationResult.success) {
45+
const niceError = fromZodError(validationResult.error, {
46+
unionSeparator: '\nOR ',
47+
issueSeparator: ' AND ',
48+
prefix: null,
49+
});
50+
51+
console.warn(
52+
new MetaBindButtonError({
53+
errorLevel: ErrorLevel.ERROR,
54+
effect: 'can not parse button config',
55+
cause: 'zod validation failed. Check your button syntax',
56+
positionContext: niceError.message,
57+
docs: [DocsUtils.linkToButtonConfig()],
58+
}),
59+
);
60+
console.warn(niceError);
61+
62+
new Notice(
63+
'meta-bind | Can not parse button config. Check your button syntax. See the console for more details.',
64+
);
65+
return;
66+
}
67+
68+
buttonConfigs.push(unvalidatedConfig as ButtonConfig);
69+
70+
buttonConfigs = buttonConfigs;
71+
}
72+
2573
function save(): void {
2674
errorCollection = modal.save(buttonConfigs);
2775
@@ -36,6 +84,8 @@
3684
</script>
3785

3886
<div>
87+
<h2>Meta Bind Button Templates</h2>
88+
3989
{#each buttonConfigs as template}
4090
<ButtonTemplateSettingComponent
4191
plugin={modal.plugin}
@@ -45,6 +95,11 @@
4595
{/each}
4696

4797
<Button on:click={() => addTemplate()} variant="primary" tooltip="Create New Template">Add Template</Button>
98+
<Button
99+
on:click={() => addTemplateFromClipboard()}
100+
variant="default"
101+
tooltip="Create New Template from YAML in Clipboard">Add Template from Clipboard</Button
102+
>
48103

49104
{#if errorCollection}
50105
<div>

src/settings/inputFieldTemplateSetting/InputFieldTemplateSettingComponent.svelte

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
const dispatch = createEventDispatcher();
1313
1414
function dispatchDeleteEvent(): void {
15-
console.log('dispatch');
1615
dispatch('delete-template', {
1716
template: template,
1817
});

src/settings/inputFieldTemplateSetting/InputFieldTemplatesSettingComponent.svelte

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@
3939
</script>
4040

4141
<div>
42+
<h2>Meta Bind Input Field Templates</h2>
43+
4244
{#each inputFieldTemplates as template}
4345
<InputFieldTemplateSettingComponent
4446
template={template}

0 commit comments

Comments
 (0)