Skip to content

Commit

Permalink
Fix positioning when only a header is present
Browse files Browse the repository at this point in the history
  • Loading branch information
noatpad committed Sep 13, 2023
1 parent b603034 commit 7d1e07a
Show file tree
Hide file tree
Showing 6 changed files with 21 additions and 17 deletions.
9 changes: 3 additions & 6 deletions src/banner/Banner.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
export let x = 0.5;
export let y = 0.5;
export let icon: IconString | undefined = undefined;
export let header: string | boolean | undefined = undefined;
export let header: string | undefined = undefined;
export let lock = false;
export let viewType: 'editing' | 'reading';
Expand Down Expand Up @@ -54,7 +54,7 @@
const toggleLock = () => updateBannerData(file, { lock: !lock || undefined });
const openIconModal = () => new IconModal(file).open();
$: height = getBannerHeight(heights, source, icon);
$: height = getBannerHeight(heights, source, icon, header);
$: if (sizerEl) {
const marginTop = getSizerHeight(heights, source, header, icon, headerVerticalAlignment);
sizerEl.setCssStyles({ marginTop });
Expand All @@ -63,9 +63,6 @@
$: bannerY = y ?? 0.5;
$: isEmbed = !!embed;
$: lockValue = lock ?? false;
$: headerText = (typeof header === 'boolean')
? (header ? file.basename : undefined)
: header;
</script>

<header
Expand Down Expand Up @@ -97,8 +94,8 @@
{#if icon || header}
<Header
{icon}
{header}
{isEmbed}
header={headerText}
on:open-icon-modal={openIconModal}
/>
{/if}
Expand Down
4 changes: 2 additions & 2 deletions src/banner/Header.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import { getSetting } from 'src/settings';
import settings from 'src/settings/store';
import Icon from './Icon.svelte';
import { getIconTransform } from './utils';
import { getHeaderTransform } from './utils';
export let icon: IconString | undefined;
export let isEmbed: boolean;
Expand All @@ -22,7 +22,7 @@
$: hTransform = getSetting('headerHorizontalTransform', headerHorizontalTransform);
$: vertical = getSetting('headerVerticalAlignment', headerVerticalAlignment);
$: vTransform = getSetting('headerVerticalTransform', headerVerticalTransform);
$: transform = getIconTransform(horizontal, hTransform, vertical, vTransform);
$: transform = getHeaderTransform(horizontal, hTransform, vertical, vTransform);
$: fontSize = getSetting('headerSize', headerSize);
</script>

Expand Down
11 changes: 6 additions & 5 deletions src/banner/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,14 +57,15 @@ export const getHeights = (embedded: Embedded, _deps?: any[]): Heights => {
export const getBannerHeight = (
heights: Heights,
source: string | undefined,
icon: IconString | undefined
icon: IconString | undefined,
header: string | undefined
): string => {
if (source) return heights.banner;
else if (icon) return heights.icon;
else if (icon || header) return heights.icon;
return '';
};

const getIconExtraOffset = (offset: string, alignment: HeaderVerticalAlignmentOption): string => {
const getHeaderExtraOffset = (offset: string, alignment: HeaderVerticalAlignmentOption): string => {
switch (alignment) {
case 'center':
case 'above': return '0px';
Expand All @@ -83,7 +84,7 @@ export const getSizerHeight = (
): string => {
if (source) {
if (icon || header) {
const extraOffset = getIconExtraOffset(heights.icon, iconAlignment);
const extraOffset = getHeaderExtraOffset(heights.icon, iconAlignment);
return `calc(${heights.banner} + ${extraOffset})`;
}
else return heights.banner;
Expand All @@ -93,7 +94,7 @@ export const getSizerHeight = (
return '';
};

export const getIconTransform = (
export const getHeaderTransform = (
horizontal: HeaderHorizontalAlignmentOption,
hTransform: string,
vertical: HeaderVerticalAlignmentOption,
Expand Down
6 changes: 6 additions & 0 deletions src/bannerData/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -117,3 +117,9 @@ export const updateBannerData = async (file: TFile, bannerData: Partial<BannerMe
}
});
};

// Helper on whether a banner element should be displayed or not
export const shouldDisplayBanner = (bannerData: Partial<BannerMetadata>): boolean => {
const { source, icon, header } = bannerData;
return !!source || !!icon || !!header;
};
4 changes: 2 additions & 2 deletions src/editing/extensions/bannerExtender.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { EditorState, StateEffect } from '@codemirror/state';
import { editorInfoField } from 'obsidian';
import { extractBannerDataFromState } from 'src/bannerData';
import { extractBannerDataFromState, shouldDisplayBanner } from 'src/bannerData';
import {
assignBannerEffect,
hasEffect,
Expand All @@ -20,7 +20,7 @@ const bannerExtender = EditorState.transactionExtender.of((transaction) => {

const bannerData = extractBannerDataFromState(state);
const newEffects: StateEffect<any>[] = [];
const effectFromData = (bannerData.source || bannerData.icon)
const effectFromData = shouldDisplayBanner(bannerData)
? upsertBannerEffect.of(bannerData)
: removeBannerEffect.of(null);
if (hasEffect(effects, openNoteEffect)) {
Expand Down
4 changes: 2 additions & 2 deletions src/reading/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import type { MarkdownPostProcessor } from 'obsidian';
import { extractBannerData } from 'src/bannerData';
import { extractBannerData, shouldDisplayBanner } from 'src/bannerData';
import { plug } from 'src/main';
import { getSetting } from 'src/settings';
import { registerSettingChangeEvent } from 'src/utils';
Expand Down Expand Up @@ -56,7 +56,7 @@ const postprocessor: MarkdownPostProcessor = (el, ctx) => {
const file = plug.app.metadataCache.getFirstLinkpathDest(sourcePath, '/')!;
const bannerData = extractBannerData(frontmatter, file);

if (bannerData.source || bannerData.icon) {
if (shouldDisplayBanner(bannerData)) {
const banner = new BannerRenderChild(el, ctx, bannerData, file, embed);
if (currentBanners[docId]) currentBanners[docId].prepareSwap();
ctx.addChild(banner);
Expand Down

0 comments on commit 7d1e07a

Please sign in to comment.