view: separate view logic from template code
moved code that creates the view dom elements into its own module. deliberately not in ui.ts as view.ts is imported early and has almost no dependecies except for nostr-tools and ./utilspull/81/head
parent
5039b3dece
commit
da3c1b02b2
@ -0,0 +1,58 @@
|
|||||||
|
|
||||||
|
import {nip19} from 'nostr-tools';
|
||||||
|
import {elem} from './utils/dom';
|
||||||
|
|
||||||
|
export type DOMMap = {
|
||||||
|
[id: string]: HTMLElement
|
||||||
|
};
|
||||||
|
|
||||||
|
export type ViewTemplateOptions = {
|
||||||
|
type: 'feed'
|
||||||
|
} | {
|
||||||
|
type: 'note';
|
||||||
|
id: string;
|
||||||
|
} | {
|
||||||
|
type: 'profile';
|
||||||
|
id: string;
|
||||||
|
} | {
|
||||||
|
type: 'event';
|
||||||
|
id: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const renderViewTemplate = (options: ViewTemplateOptions) => {
|
||||||
|
const content = elem('div', {className: 'content'});
|
||||||
|
const dom: DOMMap = {};
|
||||||
|
switch (options.type) {
|
||||||
|
case 'profile':
|
||||||
|
const pubkey = options.id;
|
||||||
|
const detail = elem('p', {data: {'profileDetails': pubkey}});
|
||||||
|
dom[`detail-${pubkey}`] = detail;
|
||||||
|
const header = elem('header', {className: 'hero'}, [
|
||||||
|
elem('small', {}, nip19.npubEncode(pubkey)),
|
||||||
|
elem('h1', {}, pubkey),
|
||||||
|
detail,
|
||||||
|
elem('footer', {}, [
|
||||||
|
elem('span', {data:{following: pubkey}})
|
||||||
|
])
|
||||||
|
]);
|
||||||
|
dom[pubkey] = header;
|
||||||
|
content.append(header);
|
||||||
|
document.title = pubkey;
|
||||||
|
break;
|
||||||
|
case 'note':
|
||||||
|
break;
|
||||||
|
case 'feed':
|
||||||
|
break;
|
||||||
|
case 'event':
|
||||||
|
const id = options.id;
|
||||||
|
const eventHeader = elem('header', {className: 'hero'}, [
|
||||||
|
elem('h1', {}, id),
|
||||||
|
]);
|
||||||
|
dom[id] = eventHeader;
|
||||||
|
content.append(eventHeader);
|
||||||
|
document.title = id;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
const view = elem('section', {className: 'view'}, [content]);
|
||||||
|
return {content, dom, view};
|
||||||
|
};
|
Loading…
Reference in New Issue