Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 | 2x 2x 2x | import Node from 'type/node';
import SystemId from 'system/enum/id';
import PageTemplate, { Breadcrumb, PageTemplateInput } from 'template/page';
interface Input extends PageTemplateInput {
readonly node: Node;
readonly type_nodes: Node[];
}
class NodeDetailsTemplate extends PageTemplate<Input> {
protected getBreadcrumbs(): Breadcrumb[] {
const type_id = this.getTypeId();
const type_url = this.getTypeUrl();
const node_id = this.getNodeId();
return [
{
label: type_id,
url: type_url
},
{
label: node_id
}
];
}
protected getContentTitle(): string {
return this.getNodeId();
}
protected getContentHtml(): string {
const creator_url = this.getCreatorUrl();
const creator_id = this.getCreatorId();
const created_at = this.serializeCreatedAt();
const updated_at = this.serializeUpdatedAt();
const field_table_html = this.getFieldTableHtml();
const links_html = this.getLinksHtml();
return `
<section>
<small>
<p>
Created by
<a href="${creator_url}">${creator_id}</a>
on <time>${created_at}</time>.
</p>
<p>
Last modified on <time>${updated_at}</time>.
</p>
</small>
</section>
<section>
<h3>Fields:</h3>
${field_table_html}
</section>
<section>
<h3>Links:</h3>
${links_html}
</section>
`;
}
private getFieldTableHtml(): string {
/*
const node = this.getNode();
const type_nodes = this.getTypeNodes();
const serializer = new NodeDetailsFieldTableSerializer(node, type_nodes);
return serializer.serialize();
*/
return 'field table';
}
private getLinksHtml(): string {
const list_link_html = this.getListLinkHtml();
const edit_link_html = this.getEditLinkHtml();
const new_link_html = this.getNewLinkHtml();
return `
<ul>
${edit_link_html}
${list_link_html}
${new_link_html}
</ul>
`;
}
private getEditLinkHtml(): string {
const edit_url = this.getEditUrl();
const node_type = this.getNodeType();
return `
<li>
<a href="${edit_url}">Edit this ${node_type}</a>
</li>
`;
}
private getListLinkHtml(): string {
if (this.isInstanceNode()) {
return '';
}
const list_url = this.getListUrl();
const node_id = this.getNodeId();
return `
<li>
<a href="${list_url}">View list of ${node_id} instances</a>
</li>
`;
}
private getNewLinkHtml(): string {
if (this.isInstanceNode()) {
return '';
}
const new_url = this.getNewUrl();
const node_id = this.getNodeId();
return `
<li>
<a href="${new_url}">Create new ${node_id} instance</a>
</li>
`;
}
private getEditUrl(): string {
const node_url = this.getNodeUrl();
return `${node_url}/edit`;
}
private getListUrl(): string {
const node_id = this.getNodeId();
return this.buildUrl(node_id, 'list');
}
private getNewUrl(): string {
const node_id = this.getNodeId();
return this.buildUrl(node_id, 'new');
}
private getNodeUrl(): string {
const type_id = this.getTypeId();
const node_id = this.getNodeId();
return this.buildUrl(type_id, node_id);
}
private isInstanceNode(): boolean {
return !this.isTypeNode();
}
private isTypeNode(): boolean {
const type_id = this.getTypeId();
return type_id === SystemId.GENERIC_TYPE;
}
private getTypeUrl(): string {
const type_id = this.getTypeId();
return this.buildUrl(SystemId.GENERIC_TYPE, type_id);
}
private getTypeId(): string {
const node = this.getNode();
return node.type_id;
}
private getCreatorId(): string {
const creator_url = this.getCreatorUrl();
const parts = creator_url.split('/');
return parts.pop() as string;
}
private getCreatorUrl(): string {
const node = this.getNode();
return node.creator;
}
private serializeCreatedAt(): string {
const created_at = this.getCreatedAt();
return this.serializeTimestamp(created_at);
}
private serializeUpdatedAt(): string {
const updated_at = this.getUpdatedAt();
return this.serializeTimestamp(updated_at);
}
private serializeTimestamp(timestamp: number): string {
const date = new Date(timestamp);
return date.toString();
}
private getCreatedAt(): number {
const node = this.getNode();
return node.created_at;
}
private getUpdatedAt(): number {
const node = this.getNode();
return node.updated_at;
}
private getNodeId(): string {
const node = this.getNode();
return node.id;
}
private getNodeType(): string {
if (this.isTypeNode()) {
return 'type';
} else {
return 'instance';
}
}
private getNode(): Node {
const input = this.getInput();
return input.node;
}
}
export default NodeDetailsTemplate;
|