|
@@ -14,6 +14,13 @@ function renderActionCards(actions) {
|
|
|
if (content.type === 'tombstone') return false;
|
|
|
if (content.type === 'post' && content.private === true) return false;
|
|
|
if (content.type === 'tribe' && content.isAnonymous === true) return false;
|
|
|
+ if (content.type === 'task' && content.isPublic === "PRIVATE") return false;
|
|
|
+ if (content.type === 'event' && content.isPublic === "private") return false;
|
|
|
+ if (content.type === 'market') {
|
|
|
+ if (content.stock === 0 && content.status !== 'SOLD') {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
return true;
|
|
|
})
|
|
|
.sort((a, b) => b.ts - a.ts);
|
|
@@ -32,493 +39,386 @@ function renderActionCards(actions) {
|
|
|
const content = action.content || {};
|
|
|
const cardBody = [];
|
|
|
|
|
|
- if (type === 'votes') {
|
|
|
- const { question, deadline, status, votes, totalVotes } = content;
|
|
|
- const votesList = votes && typeof votes === 'object'
|
|
|
- ? Object.entries(votes).map(([option, count]) => ({ option, count }))
|
|
|
- : [];
|
|
|
- cardBody.push(
|
|
|
- h2({ class: 'type-label' }, `[${typeLabel}]`),
|
|
|
- form({ method: "GET", action: `/votes/${encodeURIComponent(action.id)}` },
|
|
|
- button({ type: "submit", class: "filter-btn" }, i18n.viewDetails)
|
|
|
- ),
|
|
|
- h2(`${question}`),
|
|
|
- p(`${i18n.deadline}: ${deadline ? new Date(deadline).toLocaleString() : ''}`),
|
|
|
- h2(`${i18n.voteTotalVotes}: ${totalVotes}`),
|
|
|
- table(
|
|
|
+ if (type === 'votes') {
|
|
|
+ const { question, deadline, status, votes, totalVotes } = content;
|
|
|
+ const votesList = votes && typeof votes === 'object'
|
|
|
+ ? Object.entries(votes).map(([option, count]) => ({ option, count }))
|
|
|
+ : [];
|
|
|
+ cardBody.push(
|
|
|
+ div({ class: 'card-section votes' },
|
|
|
+ div({ class: 'card-field' }, span({ class: 'card-label' }, i18n.question + ':'), span({ class: 'card-value' }, question)),
|
|
|
+ div({ class: 'card-field' }, span({ class: 'card-label' }, i18n.deadline + ':'), span({ class: 'card-value' }, deadline ? new Date(deadline).toLocaleString() : '')),
|
|
|
+ div({ class: 'card-field' }, span({ class: 'card-label' }, i18n.voteTotalVotes + ':'), span({ class: 'card-value' }, totalVotes)),
|
|
|
+ table(
|
|
|
tr(...votesList.map(({ option }) => th(i18n[option] || option))),
|
|
|
tr(...votesList.map(({ count }) => td(count)))
|
|
|
+ )
|
|
|
)
|
|
|
- );
|
|
|
- }
|
|
|
-
|
|
|
- if (type === 'transfer') {
|
|
|
- const { from, to, concept, amount, deadline, status, tags, confirmedBy } = content;
|
|
|
- const validTags = Array.isArray(tags) ? tags : [];
|
|
|
- cardBody.push(
|
|
|
- h2({ class: 'type-label' }, `[${typeLabel}]`),
|
|
|
- form({ method: "GET", action: `/transfers/${encodeURIComponent(action.id)}` },
|
|
|
- button({ type: "submit", class: "filter-btn" }, i18n.viewDetails)
|
|
|
- ),
|
|
|
- h2(i18n.concept + ": " + concept),
|
|
|
- p(i18n.from + ": ", a({ href: `/author/${encodeURIComponent(from)}`, target: "_blank" }, from)),
|
|
|
- p(i18n.to + ": ", a({ href: `/author/${encodeURIComponent(to)}`, target: "_blank" }, to)),
|
|
|
- h2(i18n.amount + ": " + amount),
|
|
|
- p(i18n.deadline + ": " + (deadline ? new Date(deadline).toLocaleString() : "")),
|
|
|
- p(i18n.status + ": " + status),
|
|
|
- p(`${i18n.transfersConfirmations}: ${confirmedBy.length}/2`),
|
|
|
- validTags.length
|
|
|
- ? div(validTags.map(tag =>
|
|
|
- a({ href: `/search?query=%23${encodeURIComponent(tag)}`, class: "tag-link" }, `#${tag}`)
|
|
|
- ))
|
|
|
- : ""
|
|
|
);
|
|
|
}
|
|
|
-
|
|
|
- if (type === 'pixelia') {
|
|
|
- const { author } = content;
|
|
|
+
|
|
|
+ if (type === 'transfer') {
|
|
|
+ const { from, to, concept, amount, deadline, status, confirmedBy } = content;
|
|
|
cardBody.push(
|
|
|
- h2({ class: 'type-label' }, `[${typeLabel}]`),
|
|
|
- form({ method: "GET", action: `/pixelia` },
|
|
|
- button({ type: "submit", class: "filter-btn" }, i18n.viewDetails)
|
|
|
- ),
|
|
|
- p(`${i18n.activityPixelia} ${i18n.pixeliaBy}: `, a({ href: `/author/${encodeURIComponent(author)}` }, author)),
|
|
|
+ div({ class: 'card-section transfer' },
|
|
|
+ div({ class: 'card-field' }, span({ class: 'card-label' }, i18n.concept + ':'), span({ class: 'card-value' }, concept)),
|
|
|
+ div({ class: 'card-field' }, span({ class: 'card-label' }, i18n.deadline + ':'), span({ class: 'card-value' }, deadline ? new Date(deadline).toLocaleString() : '')),
|
|
|
+ div({ class: 'card-field' }, span({ class: 'card-label' }, i18n.status + ':'), span({ class: 'card-value' }, status)),
|
|
|
+ div({ class: 'card-field' }, span({ class: 'card-label' }, i18n.amount + ':'), span({ class: 'card-value' }, amount)),
|
|
|
+ br,
|
|
|
+ div({ class: 'card-field' }, span({ class: 'card-label' }, i18n.from + ': '), a({ class: 'user-link', href: `/author/${encodeURIComponent(from)}`, target: "_blank" }, from)),
|
|
|
+ div({ class: 'card-field' }, span({ class: 'card-label' }, i18n.to + ': '), a({ class: 'user-link', href: `/author/${encodeURIComponent(to)}`, target: "_blank" }, to)),
|
|
|
+ div({ class: 'card-field' }, h2({ class: 'card-label' }, i18n.transfersConfirmations + ': ' + `${confirmedBy.length}/2`)),
|
|
|
+ )
|
|
|
);
|
|
|
}
|
|
|
|
|
|
+ if (type === 'pixelia') {
|
|
|
+ const { author } = content;
|
|
|
+ cardBody.push(
|
|
|
+ div({ class: 'card-section pixelia' },
|
|
|
+ div({ class: 'card-field' },
|
|
|
+ a({ href: `/author/${encodeURIComponent(author)}`, class: 'activityVotePost' }, author)
|
|
|
+ )
|
|
|
+ )
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
if (type === 'tribe') {
|
|
|
- const { title, description, image, location, tags, isLARP, isAnonymous, members, createdAt, author } = content;
|
|
|
+ const { title, image, description, tags, isLARP, inviteMode, isAnonymous, members } = content;
|
|
|
const validTags = Array.isArray(tags) ? tags : [];
|
|
|
cardBody.push(
|
|
|
- h2({ class: 'type-label' }, `[${typeLabel}]`),
|
|
|
- form({ method: "GET", action: `/tribe/${encodeURIComponent(action.id)}` },
|
|
|
- button({ type: "submit", class: "filter-btn" }, i18n.viewDetails)
|
|
|
- ),
|
|
|
- h2(`${title}`),
|
|
|
- p(`${description || ''}`),
|
|
|
- image
|
|
|
- ? img({ src: `/blob/${encodeURIComponent(image)}`, class: 'feed-image' })
|
|
|
- : img({ src: '/assets/images/default-tribe.png', class: 'feed-image' }),
|
|
|
- p(`${i18n.location || 'Location'}: ${location || ''}`),
|
|
|
- typeof isLARP === 'boolean' ? p(`LARP: ${isLARP ? 'Yes' : 'No'}`) : "",
|
|
|
- typeof isAnonymous === 'boolean' ? p(`Anonymous: ${isAnonymous ? 'Yes' : 'No'}`) : "",
|
|
|
- Array.isArray(members) ? h2(`${i18n.tribeMembersCount || 'Members'}: ${members.length}`) : "",
|
|
|
- createdAt ? p(`${i18n.createdAt}: ${new Date(createdAt).toLocaleString()}`) : "",
|
|
|
- author ? p(`${i18n.author}: `, a({ href: `/author/${encodeURIComponent(author)}` }, author)) : "",
|
|
|
- validTags.length
|
|
|
- ? div(validTags.map(tag =>
|
|
|
- a({ href: `/search?query=%23${encodeURIComponent(tag)}`, class: "tag-link" }, `#${tag}`)
|
|
|
- ))
|
|
|
+ div({ class: 'card-section tribe' },
|
|
|
+ h2({ class: 'tribe-title' },
|
|
|
+ a({ href: `/tribe/${encodeURIComponent(action.id)}`, class: "user-link" }, title)
|
|
|
+ ),
|
|
|
+ p({ class: 'tribe-description' }, description || ''),
|
|
|
+ image
|
|
|
+ ? img({ src: `/blob/${encodeURIComponent(image)}`, class: 'feed-image tribe-image' })
|
|
|
+ : img({ src: '/assets/images/default-tribe.png', class: 'feed-image tribe-image' }),
|
|
|
+ br(),
|
|
|
+ typeof isAnonymous === 'boolean' ? div({ class: 'card-field' }, span({ class: 'card-label' }, i18n.tribeIsAnonymousLabel+ ':'), span({ class: 'card-value' }, isAnonymous ? i18n.tribePrivate : i18n.tribePublic)) : "",
|
|
|
+ inviteMode ? div({ class: 'card-field' }, span({ class: 'card-label' }, (i18n.tribeModeLabel) + ':'), span({ class: 'card-value' }, inviteMode.toUpperCase())) : "",
|
|
|
+ typeof isLARP === 'boolean' ? div({ class: 'card-field' }, span({ class: 'card-label' }, i18n.tribeLARPLabel+ ':'), span({ class: 'card-value' }, isLARP ? i18n.tribeYes : i18n.tribeNo)) : "",
|
|
|
+ Array.isArray(members) ? div({ class: 'card-field' }, span({ class: 'card-label' }, (i18n.tribeMembersCount) + ':'), span({ class: 'card-value' }, members.length)) : "",
|
|
|
+ validTags.length
|
|
|
+ ? div({ class: 'card-tags' }, validTags.map(tag =>
|
|
|
+ a({ href: `/search?query=%23${encodeURIComponent(tag)}`, class: "tag-link" }, `#${tag}`)))
|
|
|
: ""
|
|
|
+ )
|
|
|
);
|
|
|
}
|
|
|
|
|
|
if (type === 'curriculum') {
|
|
|
- const { author, name, description, photo, personalSkills, personalExperiences, oasisExperiences, oasisSkills, educationExperiences, educationalSkills, languages, professionalExperiences, professionalSkills, location, status, preferences, createdAt} = content;
|
|
|
+ const { author, name, description, photo, personalSkills, oasisSkills, educationalSkills, languages, professionalSkills, status, preferences} = content;
|
|
|
cardBody.push(
|
|
|
- h2({ class: 'type-label' }, `[${typeLabel}]`),
|
|
|
- form({ method: "GET", action: `/inhabitant/${encodeURIComponent(action.author)}` },
|
|
|
- button({ type: "submit", class: "filter-btn" }, i18n.viewDetails)
|
|
|
- ),
|
|
|
- h2(`${name}`),
|
|
|
- description ? p(`${i18n.description}: ${description}`) : "",
|
|
|
- photo ? img({ src: `/blob/${encodeURIComponent(photo)}`, class: 'feed-image' }) : "",
|
|
|
- location ? p(`${i18n.cvLocationLabel || 'Location'}: ${location}`) : "",
|
|
|
- languages ? p(`${i18n.cvLanguagesLabel || 'Languages'}: ${languages}`) : "",
|
|
|
- createdAt ? p(`${i18n.cvCreatedAt}: ${new Date(createdAt).toLocaleString()}`) : "".
|
|
|
- br,
|
|
|
- personalExperiences ? p(`${i18n.cvPersonalExperiencesLabel || 'Personal Experiences'}: ${personalExperiences}`) : "",
|
|
|
- personalSkills && personalSkills.length
|
|
|
- ? div(personalSkills.map(skill =>
|
|
|
- a({ href: `/search?query=%23${encodeURIComponent(skill)}`, class: "tag-link" }, `#${skill}`)
|
|
|
- )) : "",
|
|
|
- oasisExperiences ? p(`${i18n.cvOasisExperiencesLabel || 'Oasis Experiences'}: ${oasisExperiences}`) : "",
|
|
|
- oasisSkills && oasisSkills.length
|
|
|
- ? div(oasisSkills.map(skill =>
|
|
|
- a({ href: `/search?query=%23${encodeURIComponent(skill)}`, class: "tag-link" }, `#${skill}`)
|
|
|
- )) : "",
|
|
|
- educationExperiences ? p(`${i18n.cvEducationExperiencesLabel || 'Education Experiences'}: ${educationExperiences}`) : "",
|
|
|
- educationalSkills && educationalSkills.length
|
|
|
- ? div(educationalSkills.map(skill =>
|
|
|
- a({ href: `/search?query=%23${encodeURIComponent(skill)}`, class: "tag-link" }, `#${skill}`)
|
|
|
- )) : "",
|
|
|
- professionalExperiences ? p(`${i18n.cvProfessionalExperiencesLabel || 'Professional Experiences'}: ${professionalExperiences}`) : "",
|
|
|
- professionalSkills && professionalSkills.length
|
|
|
- ? div(professionalSkills.map(skill =>
|
|
|
- a({ href: `/search?query=%23${encodeURIComponent(skill)}`, class: "tag-link" }, `#${skill}`)
|
|
|
- )) : "",
|
|
|
- status ? h2(`${i18n.cvStatusLabel}: ${status}`) : "",
|
|
|
- preferences ? p(`${i18n.cvPreferencesLabel || 'Preferences'}: ${preferences}`) : "",
|
|
|
- h2(`${i18n.activityContact}: `, a({ href: `/author/${encodeURIComponent(action.author)}` }, action.author))
|
|
|
+ div({ class: 'card-section curriculum' },
|
|
|
+ h2(a({ href: `/author/${encodeURIComponent(author)}`, class: "user-link" }, `@`, name)),
|
|
|
+ status ? div({ class: 'card-field' }, span({ class: 'card-label' }, i18n.cvStatusLabel + ':'), span({ class: 'card-value' }, status)) : "",
|
|
|
+ preferences ? div({ class: 'card-field' }, span({ class: 'card-label' }, (i18n.cvPreferencesLabel || 'Preferences') + ':'), span({ class: 'card-value' }, preferences)) : "",
|
|
|
+ languages ? div({ class: 'card-field' }, span({ class: 'card-label' }, (i18n.cvLanguagesLabel || 'Languages') + ':'), span({ class: 'card-value' }, languages)) : "",
|
|
|
+ br(),
|
|
|
+ photo ? img({ class: "cv-photo", src: `/blob/${encodeURIComponent(photo)}` }) : "",
|
|
|
+ br(),
|
|
|
+ description ? div({ class: 'card-field' }, span({ class: 'card-value' }, description)) : "",
|
|
|
+ br(),
|
|
|
+ personalSkills && personalSkills.length
|
|
|
+ ? div({ class: 'card-tags' }, personalSkills.map(skill =>
|
|
|
+ a({ href: `/search?query=%23${encodeURIComponent(skill)}`, class: "tag-link" }, `#${skill}`)
|
|
|
+ )) : "",
|
|
|
+ oasisSkills && oasisSkills.length
|
|
|
+ ? div({ class: 'card-tags' }, oasisSkills.map(skill =>
|
|
|
+ a({ href: `/search?query=%23${encodeURIComponent(skill)}`, class: "tag-link" }, `#${skill}`)
|
|
|
+ )) : "",
|
|
|
+ educationalSkills && educationalSkills.length
|
|
|
+ ? div({ class: 'card-tags' }, educationalSkills.map(skill =>
|
|
|
+ a({ href: `/search?query=%23${encodeURIComponent(skill)}`, class: "tag-link" }, `#${skill}`)
|
|
|
+ )) : "",
|
|
|
+ professionalSkills && professionalSkills.length
|
|
|
+ ? div({ class: 'card-tags' }, professionalSkills.map(skill =>
|
|
|
+ a({ href: `/search?query=%23${encodeURIComponent(skill)}`, class: "tag-link" }, `#${skill}`)
|
|
|
+ )) : "",
|
|
|
+ )
|
|
|
);
|
|
|
}
|
|
|
|
|
|
if (type === 'image') {
|
|
|
- const { url, title, description, tags, meme } = content;
|
|
|
- const validTags = Array.isArray(tags) ? tags : [];
|
|
|
- cardBody.push(
|
|
|
- h2({ class: 'type-label' }, `[${typeLabel}]`),
|
|
|
- form({ method: "GET", action: `/images/${encodeURIComponent(action.id)}` },
|
|
|
- button({ type: "submit", class: "filter-btn" }, i18n.viewDetails)
|
|
|
- ),
|
|
|
- title ? h2(title) : "",
|
|
|
- description ? p(description) : "",
|
|
|
- meme ? h2(`${i18n.trendingCategory}: ${i18n.meme}`) : "",
|
|
|
- img({ src: `/blob/${encodeURIComponent(url)}`, class: 'feed-image' }),
|
|
|
- br,
|
|
|
- validTags.length
|
|
|
- ? div(validTags.map(tag =>
|
|
|
- a({ href: `/search?query=%23${encodeURIComponent(tag)}`, class: "tag-link" }, `#${tag}`)
|
|
|
- ))
|
|
|
- : ""
|
|
|
+ const { url } = content;
|
|
|
+ cardBody.push(
|
|
|
+ div({ class: 'card-section image' },
|
|
|
+ img({ src: `/blob/${encodeURIComponent(url)}`, class: 'feed-image img-content' })
|
|
|
+ )
|
|
|
);
|
|
|
}
|
|
|
|
|
|
if (content.type === 'audio') {
|
|
|
- const { url, mimeType, title, description, tags } = content;
|
|
|
- const validTags = Array.isArray(tags) ? tags : [];
|
|
|
+ const { url, mimeType, title } = content;
|
|
|
cardBody.push(
|
|
|
- h2({ class: 'type-label' }, `[${typeLabel}]`),
|
|
|
- form({ method: "GET", action: `/audios/${encodeURIComponent(action.id)}` },
|
|
|
- button({ type: "submit", class: "filter-btn" }, i18n.viewDetails)
|
|
|
- ),
|
|
|
- title?.trim() ? h2(title) : "",
|
|
|
- description?.trim() ? p(description) : "",
|
|
|
- url
|
|
|
- ? div({ class: "audio-container" },
|
|
|
- audioHyperaxe({
|
|
|
- controls: true,
|
|
|
- src: `/blob/${encodeURIComponent(url)}`,
|
|
|
- type: mimeType
|
|
|
- })
|
|
|
- )
|
|
|
- : p(i18n.audioNoFile),
|
|
|
- validTags.length
|
|
|
- ? div(validTags.map(tag =>
|
|
|
- a({ href: `/search?query=%23${encodeURIComponent(tag)}`, class: "tag-link" }, `#${tag}`)
|
|
|
- ))
|
|
|
- : ""
|
|
|
+ div({ class: 'card-section audio' },
|
|
|
+ title?.trim() ? h2({ class: 'audio-title' }, title) : "",
|
|
|
+ url
|
|
|
+ ? div({ class: "audio-container" },
|
|
|
+ audioHyperaxe({
|
|
|
+ controls: true,
|
|
|
+ src: `/blob/${encodeURIComponent(url)}`,
|
|
|
+ type: mimeType
|
|
|
+ })
|
|
|
+ )
|
|
|
+ : p(i18n.audioNoFile),
|
|
|
+ )
|
|
|
);
|
|
|
}
|
|
|
|
|
|
if (content.type === 'video') {
|
|
|
- const { url, mimeType, title, description, tags } = content;
|
|
|
- const validTags = Array.isArray(tags) ? tags : [];
|
|
|
+ const { url, mimeType, title } = content;
|
|
|
cardBody.push(
|
|
|
- h2({ class: 'type-label' }, `[${typeLabel}]`),
|
|
|
- form({ method: "GET", action: `/videos/${encodeURIComponent(action.id)}` },
|
|
|
- button({ type: "submit", class: "filter-btn" }, i18n.viewDetails)
|
|
|
- ),
|
|
|
- title?.trim() ? h2(title) : "",
|
|
|
- description?.trim() ? p(description) : "",
|
|
|
- url
|
|
|
- ? div({ class: "video-container" },
|
|
|
- videoHyperaxe({
|
|
|
- controls: true,
|
|
|
- src: `/blob/${encodeURIComponent(url)}`,
|
|
|
- type: mimeType,
|
|
|
- preload: 'metadata',
|
|
|
- width: '640',
|
|
|
- height: '360'
|
|
|
- })
|
|
|
- )
|
|
|
- : p(i18n.videoNoFile),
|
|
|
- validTags.length
|
|
|
- ? div(validTags.map(tag =>
|
|
|
- a({ href: `/search?query=%23${encodeURIComponent(tag)}`, class: "tag-link" }, `#${tag}`)
|
|
|
- ))
|
|
|
- : ""
|
|
|
+ div({ class: 'card-section video' },
|
|
|
+ title?.trim() ? h2({ class: 'video-title' }, title) : "",
|
|
|
+ url
|
|
|
+ ? div({ class: "video-container" },
|
|
|
+ videoHyperaxe({
|
|
|
+ controls: true,
|
|
|
+ src: `/blob/${encodeURIComponent(url)}`,
|
|
|
+ type: mimeType,
|
|
|
+ preload: 'metadata',
|
|
|
+ width: '640',
|
|
|
+ height: '360'
|
|
|
+ })
|
|
|
+ )
|
|
|
+ : p(i18n.videoNoFile)
|
|
|
+ )
|
|
|
);
|
|
|
}
|
|
|
|
|
|
if (content.type === 'document') {
|
|
|
- const { url, title, description, tags, key } = content;
|
|
|
- const validTags = Array.isArray(tags) ? tags : [];
|
|
|
- cardBody.push(
|
|
|
- h2({ class: 'type-label' }, `[${typeLabel}]`),
|
|
|
- form({ method: "GET", action: `/documents/${encodeURIComponent(action.id)}` },
|
|
|
- button({ type: "submit", class: "filter-btn" }, i18n.viewDetails)
|
|
|
- ),
|
|
|
- title?.trim() ? h2(title) : "",
|
|
|
- description?.trim() ? p(description) : "",
|
|
|
- div({
|
|
|
- id: `pdf-container-${key || url}`,
|
|
|
- class: 'pdf-viewer-container',
|
|
|
- 'data-pdf-url': `/blob/${encodeURIComponent(url)}`
|
|
|
- }),
|
|
|
- tags.length
|
|
|
- ? div(validTags.map(tag =>
|
|
|
- a({ href: `/search?query=%23${encodeURIComponent(tag)}`, class: "tag-link" }, `#${tag}`)
|
|
|
- ))
|
|
|
- : null
|
|
|
+ const { url, title, key } = content;
|
|
|
+ cardBody.push(
|
|
|
+ div({ class: 'card-section document' },
|
|
|
+ title?.trim() ? h2({ class: 'document-title' }, title) : "",
|
|
|
+ div({
|
|
|
+ id: `pdf-container-${key || url}`,
|
|
|
+ class: 'pdf-viewer-container',
|
|
|
+ 'data-pdf-url': `/blob/${encodeURIComponent(url)}`
|
|
|
+ })
|
|
|
+ )
|
|
|
);
|
|
|
}
|
|
|
|
|
|
if (type === 'bookmark') {
|
|
|
- const { author, url, tags, description, category, lastVisit } = content;
|
|
|
- const validTags = Array.isArray(tags) ? tags : [];
|
|
|
+ const { url, description, lastVisit } = content;
|
|
|
cardBody.push(
|
|
|
- h2({ class: 'type-label' }, `[${typeLabel}]`),
|
|
|
- form({ method: "GET", action: `/bookmarks/${encodeURIComponent(action.id)}` },
|
|
|
- button({ type: "submit", class: "filter-btn" }, i18n.viewDetails)
|
|
|
- ),
|
|
|
- description ? p(`${description}`) : "",
|
|
|
- h2(url ? p(a({ href: url, target: '_blank', class: "bookmark-url" }, url)) : ""),
|
|
|
- category ? p(`${i18n.bookmarkCategory}: ${category}`) : "",
|
|
|
- lastVisit ? p(`${i18n.bookmarkLastVisit}: ${new Date(lastVisit).toLocaleString()}`) : "",
|
|
|
- validTags.length
|
|
|
- ? div(validTags.map(tag =>
|
|
|
- a({ href: `/search?query=%23${encodeURIComponent(tag)}`, class: "tag-link" }, `#${tag}`)
|
|
|
- ))
|
|
|
- : ""
|
|
|
- );
|
|
|
+ div({ class: 'card-section bookmark' },
|
|
|
+ description ? div({ class: 'card-field' }, span({ class: 'card-label' }, i18n.bookmarkDescriptionLabel + ':'), span({ class: 'card-value' }, description)) : "",
|
|
|
+ h2(url ? p(a({ href: url, target: '_blank', class: "bookmark-url" }, url)) : ""),
|
|
|
+ lastVisit ? div({ class: 'card-field' }, span({ class: 'card-label' }, i18n.bookmarkLastVisit + ':'), span({ class: 'card-value' }, new Date(lastVisit).toLocaleString())) : ""
|
|
|
+ )
|
|
|
+ );
|
|
|
}
|
|
|
|
|
|
if (type === 'event') {
|
|
|
- const { title, description, date, location, price, url: eventUrl, attendees, tags, organizer, status, isPublic } = content;
|
|
|
- const validTags = Array.isArray(tags) ? tags : [];
|
|
|
- cardBody.push(
|
|
|
- h2({ class: 'type-label' }, `[${typeLabel}]`),
|
|
|
- form({ method: "GET", action: `/events/${encodeURIComponent(action.id)}` },
|
|
|
- button({ type: "submit", class: "filter-btn" }, i18n.viewDetails)
|
|
|
- ),
|
|
|
- p(`${i18n.title}: ${title}`),
|
|
|
- description ? p(`${i18n.description}: ${description}`) : "",
|
|
|
- date ? p(`${i18n.date}: ${new Date(date).toLocaleString()}`) : "",
|
|
|
- location ? p(`${i18n.location || 'Location'}: ${location}`) : "",
|
|
|
- status ? p(`${i18n.status}: ${status}`) : "",
|
|
|
- typeof isPublic === 'boolean' ? p(`${i18n.isPublic || 'Public'}: ${isPublic ? 'Yes' : 'No'}`) : "",
|
|
|
- price ? p(`${i18n.price || 'Price'}: ${price} ECO`) : "",
|
|
|
- eventUrl ? p(`${i18n.trendingUrl}: `, a({ href: eventUrl, target: '_blank' }, eventUrl)) : "",
|
|
|
- organizer ? p(`${i18n.organizer || 'Organizer'}: `, a({ href: `/author/${encodeURIComponent(organizer)}` }, organizer)) : "",
|
|
|
- Array.isArray(attendees) ? p(`${i18n.attendees}: ${attendees.length}`) : "",
|
|
|
- validTags.length
|
|
|
- ? div(validTags.map(tag =>
|
|
|
- a({ href: `/search?query=%23${encodeURIComponent(tag)}`, class: "tag-link" }, `#${tag}`)
|
|
|
- ))
|
|
|
- : "",
|
|
|
- );
|
|
|
+ const { title, description, date, location, price, url: eventUrl, attendees, organizer, status, isPublic } = content;
|
|
|
+ cardBody.push(
|
|
|
+ div({ class: 'card-section event' },
|
|
|
+ div({ class: 'card-field' }, span({ class: 'card-label' }, i18n.title + ':'), span({ class: 'card-value' }, title)),
|
|
|
+ description ? div({ class: 'card-field' }, span({ class: 'card-label' }, i18n.description + ':'), span({ class: 'card-value' }, description)) : "",
|
|
|
+ date ? div({ class: 'card-field' }, span({ class: 'card-label' }, i18n.date + ':'), span({ class: 'card-value' }, new Date(date).toLocaleString())) : "",
|
|
|
+ location ? div({ class: 'card-field' }, span({ class: 'card-label' }, (i18n.location || 'Location') + ':'), span({ class: 'card-value' }, location)) : "",
|
|
|
+ status ? div({ class: 'card-field' }, span({ class: 'card-label' }, i18n.status + ':'), span({ class: 'card-value' }, status)) : "",
|
|
|
+ typeof isPublic === 'boolean' ? div({ class: 'card-field' }, span({ class: 'card-label' }, (i18n.isPublic || 'Public') + ':'), span({ class: 'card-value' }, isPublic ? 'Yes' : 'No')) : "",
|
|
|
+ price ? div({ class: 'card-field' }, span({ class: 'card-label' }, (i18n.price || 'Price') + ':'), span({ class: 'card-value' }, price + " ECO")) : "",
|
|
|
+ eventUrl ? div({ class: 'card-field' }, span({ class: 'card-label' }, i18n.trendingUrl + ':'), a({ href: eventUrl, target: '_blank' }, eventUrl)) : "",
|
|
|
+ br,
|
|
|
+ organizer ? div({ class: 'card-field' }, span({ class: 'card-label' }, (i18n.organizer || 'Organizer') + ': '), a({ class: "user-link", href: `/author/${encodeURIComponent(organizer)}` }, organizer)) : "",
|
|
|
+ Array.isArray(attendees) ? h2({ class: 'card-label' }, (i18n.attendees || 'Attendees') + ': ' + attendees.length) : "",
|
|
|
+ )
|
|
|
+ );
|
|
|
}
|
|
|
|
|
|
if (type === 'task') {
|
|
|
- const { title, description, startTime, endTime, priority, location, tags, isPublic, assignees, status, author } = content;
|
|
|
- const validTags = Array.isArray(tags) ? tags : [];
|
|
|
- cardBody.push(
|
|
|
- h2({ class: 'type-label' }, `[${typeLabel}]`),
|
|
|
- form({ method: "GET", action: `/tasks/${encodeURIComponent(action.id)}` },
|
|
|
- button({ type: "submit", class: "filter-btn" }, i18n.viewDetails)
|
|
|
- ),
|
|
|
- p(`${i18n.title}: ${title}`),
|
|
|
- description ? p(`${i18n.description}: ${description}`) : "",
|
|
|
- startTime ? p(`${i18n.startTime || 'Start'}: ${new Date(startTime).toLocaleString()}`) : "",
|
|
|
- endTime ? p(`${i18n.endTime || 'End'}: ${new Date(endTime).toLocaleString()}`) : "",
|
|
|
- priority ? p(`${i18n.priority || 'Priority'}: ${priority}`) : "",
|
|
|
- location ? p(`${i18n.location || 'Location'}: ${location}`) : "",
|
|
|
- validTags.length
|
|
|
- ? div(validTags.map(tag =>
|
|
|
- a({ href: `/search?query=%23${encodeURIComponent(tag)}`, class: "tag-link" }, `#${tag}`)
|
|
|
- ))
|
|
|
- : "",
|
|
|
- typeof isPublic === 'boolean' ? p(`${i18n.isPublic || 'Public'}: ${isPublic ? 'Yes' : 'No'}`) : "",
|
|
|
- Array.isArray(assignees) ? p(`${i18n.taskAssignees || 'Assignees'}: ${assignees.length}`) : "",
|
|
|
- status ? p(`${i18n.status}: ${status}`) : "",
|
|
|
- author ? p(`${i18n.author || 'Author'}: `, a({ href: `/author/${encodeURIComponent(author)}` }, author)) : ""
|
|
|
- );
|
|
|
+ const { title, startTime, endTime, priority, status, author } = content;
|
|
|
+ cardBody.push(
|
|
|
+ div({ class: 'card-section task' },
|
|
|
+ div({ class: 'card-field' }, span({ class: 'card-label' }, i18n.title + ':'), span({ class: 'card-value' }, title)),
|
|
|
+ status ? div({ class: 'card-field' }, span({ class: 'card-label' }, i18n.status + ':'), span({ class: 'card-value' }, status)) : "",
|
|
|
+ priority ? div({ class: 'card-field' }, span({ class: 'card-label' }, (i18n.priority || 'Priority') + ':'), span({ class: 'card-value' }, priority)) : "",
|
|
|
+ startTime ? div({ class: 'card-field' }, span({ class: 'card-label' }, (i18n.taskStartTimeLabel || 'Start') + ':'), span({ class: 'card-value' }, new Date(startTime).toLocaleString())) : "",
|
|
|
+ endTime ? div({ class: 'card-field' }, span({ class: 'card-label' }, (i18n.taskEndTimeLabel || 'End') + ':'), span({ class: 'card-value' }, new Date(endTime).toLocaleString())) : "",
|
|
|
+ )
|
|
|
+ );
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
if (type === 'feed') {
|
|
|
- const { text, author, createdAt, opinions, opinions_inhabitants, refeeds, refeeds_inhabitants } = content;
|
|
|
+ const { text, refeeds } = content;
|
|
|
cardBody.push(
|
|
|
- h2({ class: 'type-label' }, `[${typeLabel}]`),
|
|
|
- h2(text),
|
|
|
- p(i18n.author + ": ", a({ href: `/author/${encodeURIComponent(author)}`, target: "_blank" }, author)),
|
|
|
- p(i18n.createdAt + ": " + new Date(createdAt).toLocaleString()),
|
|
|
- h2(i18n.tribeFeedRefeeds + ": " + refeeds)
|
|
|
+ div({ class: 'card-section feed' },
|
|
|
+ h2({ class: 'feed-title' }, text),
|
|
|
+ h2({ class: 'card-field' }, span({ class: 'card-label' }, i18n.tribeFeedRefeeds + ': '), span({ class: 'card-label' }, refeeds))
|
|
|
+ )
|
|
|
);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
if (type === 'post') {
|
|
|
const { contentWarning, text } = content;
|
|
|
cardBody.push(
|
|
|
- h2({ class: 'type-label' }, `[${typeLabel}]`),
|
|
|
- form({ method: "GET", action: `/thread/${encodeURIComponent(action.id)}#${encodeURIComponent(action.id)}` },
|
|
|
- button({ type: "submit", class: "filter-btn" }, i18n.viewDetails)
|
|
|
- ),
|
|
|
- contentWarning ? h2(contentWarning) : '',
|
|
|
- p({ innerHTML: text })
|
|
|
- );
|
|
|
- }
|
|
|
-
|
|
|
- if (type === 'vote') {
|
|
|
- const { vote } = content;
|
|
|
- cardBody.push(
|
|
|
- h2({ class: 'type-label' }, `[${typeLabel}]`),
|
|
|
- p(
|
|
|
- a({ href: `/author/${encodeURIComponent(action.author)}` }, action.author),
|
|
|
- ` ${i18n.activitySpread} `,
|
|
|
- a({ href: `/thread/${encodeURIComponent(vote.link)}#${encodeURIComponent(vote.link)}` }, vote.link)
|
|
|
- )
|
|
|
- );
|
|
|
- }
|
|
|
-
|
|
|
- if (type === 'about') {
|
|
|
- const { about, name, description } = content;
|
|
|
- cardBody.push(
|
|
|
- h2({ class: 'type-label' }, `[${typeLabel}]`),
|
|
|
- form({ method: "GET", action: `/author/${encodeURIComponent(action.author)}` },
|
|
|
- button({ type: "submit", class: "filter-btn" }, i18n.viewDetails)
|
|
|
- ),
|
|
|
- h2(a({ href: `/author/${encodeURIComponent(about)}` },`@`,name)),
|
|
|
- p(description)
|
|
|
- );
|
|
|
- }
|
|
|
-
|
|
|
- if (type === 'contact') {
|
|
|
- const { contact } = content;
|
|
|
- cardBody.push(
|
|
|
- h2({ class: 'type-label' }, `[${typeLabel}]`),
|
|
|
- form({ method: "GET", action: `/inhabitants` },
|
|
|
- button({ type: "submit", class: "filter-btn" }, i18n.viewDetails)
|
|
|
- ),
|
|
|
- p(
|
|
|
- `${i18n.activitySupport}: `,
|
|
|
- a({ href: `/author/${encodeURIComponent(action.author)}` }, action.author),
|
|
|
- span({ class: 'action-meta' }, " <-> "),
|
|
|
- a({ href: `/author/${encodeURIComponent(contact)}` }, contact)
|
|
|
- )
|
|
|
+ div({ class: 'card-section post' },
|
|
|
+ contentWarning ? h2({ class: 'content-warning' }, contentWarning) : '',
|
|
|
+ p({ innerHTML: text })
|
|
|
+ )
|
|
|
);
|
|
|
}
|
|
|
-
|
|
|
- if (type === 'pub') {
|
|
|
- const { address } = content;
|
|
|
- const { host, key } = address;
|
|
|
+
|
|
|
+ if (type === 'vote') {
|
|
|
+ const { vote } = content;
|
|
|
cardBody.push(
|
|
|
- h2({ class: 'type-label' }, `[${typeLabel}]`),
|
|
|
- form({ method: "GET", action: `/invites` },
|
|
|
- button({ type: "submit", class: "filter-btn" }, i18n.viewDetails)
|
|
|
- ),
|
|
|
- p(
|
|
|
- ` ${i18n.activityJoin}: `,
|
|
|
- a({ href: `/author/${encodeURIComponent(action.author)}` }, action.author),
|
|
|
- span({ class: 'action-meta' }, " -> "),
|
|
|
- a({ href: `/author/${encodeURIComponent(key)}` }, key),
|
|
|
- ` (`,
|
|
|
- host,
|
|
|
- `)`
|
|
|
- )
|
|
|
+ div({ class: 'card-section vote' },
|
|
|
+ p(
|
|
|
+ a({ href: `/thread/${encodeURIComponent(vote.link)}#${encodeURIComponent(vote.link)}`, class: 'activityVotePost' }, vote.link)
|
|
|
+ )
|
|
|
+ )
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ if (type === 'about') {
|
|
|
+ const { about, name, description, image } = content;
|
|
|
+ cardBody.push(
|
|
|
+ div({ class: 'card-section about' },
|
|
|
+ h2(a({ href: `/author/${encodeURIComponent(about)}`, class: "user-link" }, `@`, name)),
|
|
|
+ image
|
|
|
+ ? img({ src: `/blob/${encodeURIComponent(image)}` })
|
|
|
+ : img({ src: '/assets/images/default-avatar.png', alt: name })
|
|
|
+ )
|
|
|
);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
+ if (type === 'contact') {
|
|
|
+ const { contact } = content;
|
|
|
+ cardBody.push(
|
|
|
+ div({ class: 'card-section contact' },
|
|
|
+ p({ class: 'card-field' },
|
|
|
+ a({ href: `/author/${encodeURIComponent(contact)}`, class: 'activitySpreadInhabitant2' }, contact)
|
|
|
+ )
|
|
|
+ )
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ if (type === 'pub') {
|
|
|
+ const { address } = content;
|
|
|
+ const { host, key } = address;
|
|
|
+ cardBody.push(
|
|
|
+ div({ class: 'card-section pub' },
|
|
|
+ p({ class: 'card-field' },
|
|
|
+ a({ href: `/author/${encodeURIComponent(key)}`, class: 'activitySpreadInhabitant2' }, key)
|
|
|
+ )
|
|
|
+ )
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
if (type === 'market') {
|
|
|
- const { item_type, title, description, price, tags, status, item_status, deadline, includesShipping, seller, image, auctions_poll } = content;
|
|
|
- const validTags = Array.isArray(tags) ? tags : [];
|
|
|
+ const { item_type, title, price, status, deadline, stock, image, auctions_poll } = content;
|
|
|
cardBody.push(
|
|
|
- h2({ class: 'type-label' }, `[${typeLabel}]`),
|
|
|
- form({ method: "GET", action: `/market/${encodeURIComponent(action.id)}` },
|
|
|
- button({ type: "submit", class: "filter-btn" }, i18n.viewDetails)
|
|
|
- ),
|
|
|
- p(i18n.marketItemTitle + ": " + title),
|
|
|
- p(i18n.marketItemDescription + ": " + description),
|
|
|
- image
|
|
|
+ div({ class: 'card-section market' },
|
|
|
+ div({ class: 'card-field' }, span({ class: 'card-label' }, i18n.marketItemTitle + ':'), span({ class: 'card-value' }, title)),
|
|
|
+ div({ class: 'card-field' }, span({ class: 'card-label' }, i18n.marketItemType + ':'), span({ class: 'card-value' }, item_type.toUpperCase())),
|
|
|
+ div({ class: 'card-field' }, span({ class: 'card-label' }, i18n.marketItemStatus + ": " ), span({ class: 'card-value' }, status.toUpperCase())),
|
|
|
+ div({ class: 'card-field' }, span({ class: 'card-label' }, i18n.marketItemStock + ':'), span({ class: 'card-value' }, stock)),
|
|
|
+ div({ class: 'card-field' }, span({ class: 'card-label' }, i18n.deadline + ':'), span({ class: 'card-value' }, deadline ? new Date(deadline).toLocaleString() : "")),
|
|
|
+ br,
|
|
|
+ image
|
|
|
? img({ src: `/blob/${encodeURIComponent(image)}` })
|
|
|
: img({ src: '/assets/images/default-market.png', alt: title }),
|
|
|
- p(i18n.marketItemType + ": " + item_type),
|
|
|
- p(i18n.marketItemCondition + ": " + item_status),
|
|
|
- p(i18n.marketItemIncludesShipping + ": " + (includesShipping ? i18n.YESLabel : i18n.NOLabel)),
|
|
|
- p(i18n.deadline + ": " + (deadline ? new Date(deadline).toLocaleString() : "")),
|
|
|
- p(`${i18n.marketItemSeller}: `, a({ href: `/author/${encodeURIComponent(seller)}` }, seller)),
|
|
|
- validTags.length
|
|
|
- ? div(validTags.map(tag =>
|
|
|
- a({ href: `/search?query=%23${encodeURIComponent(tag)}`, class: "tag-link" }, `#${tag}`)
|
|
|
- ))
|
|
|
- : "",
|
|
|
- h2(i18n.marketItemStatus + ": " + status),
|
|
|
- div({ class: "market-card price" },
|
|
|
- p(`${i18n.marketItemPrice}: ${price} ECO`)
|
|
|
- ),
|
|
|
- );
|
|
|
- if (item_type === 'auction') {
|
|
|
- if (status !== 'SOLD' && status !== 'DISCARDED') {
|
|
|
- cardBody.push(
|
|
|
- div({ class: "auction-info" },
|
|
|
- auctions_poll && auctions_poll.length > 0
|
|
|
- ? [
|
|
|
- p({ class: "auction-bid-text" }, i18n.marketAuctionBids),
|
|
|
- table({ class: 'auction-bid-table' },
|
|
|
- tr(
|
|
|
- th(i18n.marketAuctionBidTime),
|
|
|
- th(i18n.marketAuctionUser),
|
|
|
- th(i18n.marketAuctionBidAmount)
|
|
|
- ),
|
|
|
- auctions_poll.map(bid => {
|
|
|
- const [userId, bidAmount, bidTime] = bid.split(':');
|
|
|
- return tr(
|
|
|
- td(moment(bidTime).format('YYYY-MM-DD HH:mm:ss')),
|
|
|
- td(a({ href: `/author/${encodeURIComponent(userId)}` }, userId)),
|
|
|
- td(`${parseFloat(bidAmount).toFixed(6)} ECO`)
|
|
|
- );
|
|
|
- })
|
|
|
- )
|
|
|
- ]
|
|
|
- : p(i18n.marketNoBids),
|
|
|
- form({ method: "POST", action: `/market/bid/${encodeURIComponent(action.id)}` },
|
|
|
- input({ type: "number", name: "bidAmount", step: "0.000001", min: "0.000001", placeholder: i18n.marketYourBid, required: true }),
|
|
|
- br(),
|
|
|
- button({ class: "buy-btn", type: "submit" }, i18n.marketPlaceBidButton)
|
|
|
- )
|
|
|
- )
|
|
|
- );
|
|
|
- }
|
|
|
- }
|
|
|
- if (item_type === 'exchange') {
|
|
|
- if (status !== 'SOLD' && status !== 'DISCARDED') {
|
|
|
- cardBody.push(
|
|
|
- form({ method: "POST", action: `/market/buy/${encodeURIComponent(action.id)}` },
|
|
|
- button({ class: "buy-btn", type: "submit" }, i18n.marketActionsBuy)
|
|
|
+ br,
|
|
|
+ div({ class: "market-card price" },
|
|
|
+ p(`${i18n.marketItemPrice}: ${price} ECO`)
|
|
|
+ ),
|
|
|
+ item_type === 'auction' && status !== 'SOLD' && status !== 'DISCARDED'
|
|
|
+ ? div({ class: "auction-info" },
|
|
|
+ auctions_poll && auctions_poll.length > 0
|
|
|
+ ? [
|
|
|
+ p({ class: "auction-bid-text" }, i18n.marketAuctionBids),
|
|
|
+ table({ class: 'auction-bid-table' },
|
|
|
+ tr(
|
|
|
+ th(i18n.marketAuctionBidTime),
|
|
|
+ th(i18n.marketAuctionUser),
|
|
|
+ th(i18n.marketAuctionBidAmount)
|
|
|
+ ),
|
|
|
+ ...auctions_poll.map(bid => {
|
|
|
+ const [userId, bidAmount, bidTime] = bid.split(':');
|
|
|
+ return tr(
|
|
|
+ td(moment(bidTime).format('YYYY-MM-DD HH:mm:ss')),
|
|
|
+ td(a({ href: `/author/${encodeURIComponent(userId)}` }, userId)),
|
|
|
+ td(`${parseFloat(bidAmount).toFixed(6)} ECO`)
|
|
|
+ );
|
|
|
+ })
|
|
|
+ )
|
|
|
+ ]
|
|
|
+ : p(i18n.marketNoBids),
|
|
|
+ form({ method: "POST", action: `/market/bid/${encodeURIComponent(action.id)}` },
|
|
|
+ input({ type: "number", name: "bidAmount", step: "0.000001", min: "0.000001", placeholder: i18n.marketYourBid, required: true }),
|
|
|
+ br(),
|
|
|
+ button({ class: "buy-btn", type: "submit" }, i18n.marketPlaceBidButton)
|
|
|
)
|
|
|
- );
|
|
|
- }
|
|
|
+ ) : "",
|
|
|
+ item_type === 'exchange' && status !== 'SOLD' && status !== 'DISCARDED'
|
|
|
+ ? form({ method: "POST", action: `/market/buy/${encodeURIComponent(action.id)}` },
|
|
|
+ button({ class: "buy-btn", type: "submit" }, i18n.marketActionsBuy)
|
|
|
+ ) : ""
|
|
|
+ )
|
|
|
+ );
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
if (type === 'report') {
|
|
|
- const { title, description, category, createdAt, author, image, tags, confirmations, severity, status, isAnonymous } = content;
|
|
|
- const validTags = Array.isArray(tags) ? tags : [];
|
|
|
- cardBody.push(
|
|
|
- h2({ class: 'type-label' }, `[${typeLabel}]`),
|
|
|
- form({ method: "GET", action: `/reports/${encodeURIComponent(action.id)}` },
|
|
|
- button({ type: "submit", class: "filter-btn" }, i18n.viewDetails)
|
|
|
- ),
|
|
|
- p(`${i18n.title}: ${title}`),
|
|
|
- description ? p(`${i18n.description}: ${description}`) : "",
|
|
|
- category ? p(`${i18n.category}: ${category}`) : "",
|
|
|
- severity ? p(`${i18n.severity || 'Severity'}: ${severity}`) : "",
|
|
|
- status ? p(`${i18n.status}: ${status}`) : "",
|
|
|
- image ? img({ src: `/blob/${encodeURIComponent(image)}`, class: 'feed-image' }) : "",
|
|
|
- createdAt ? p(`${i18n.reportsCreatedAt}: ${new Date(createdAt).toLocaleString()}`) : "",
|
|
|
- p(`${i18n.author || 'Author'}: `,
|
|
|
- typeof isAnonymous === 'boolean'
|
|
|
- ? (isAnonymous
|
|
|
- ? i18n.reportsAnonymousAuthor || 'Anonymous'
|
|
|
- : a({ href: `/author/${encodeURIComponent(author)}`, target: '_blank' }, author))
|
|
|
- : author ? a({ href: `/author/${encodeURIComponent(author)}`, target: '_blank' }, author) : ""
|
|
|
- ),
|
|
|
- Array.isArray(confirmations) ? h2(`${i18n.confirmations || 'Confirmations'}: ${confirmations.length}`) : "",
|
|
|
- validTags.length
|
|
|
- ? div(validTags.map(tag =>
|
|
|
- a({ href: `/search?query=%23${encodeURIComponent(tag)}`, class: "tag-link" }, `#${tag}`)
|
|
|
- ))
|
|
|
- : ""
|
|
|
- );
|
|
|
+ const { title, confirmations, severity, status } = content;
|
|
|
+ cardBody.push(
|
|
|
+ div({ class: 'card-section report' },
|
|
|
+ div({ class: 'card-field' }, span({ class: 'card-label' }, i18n.title + ':'), span({ class: 'card-value' }, title)),
|
|
|
+ status ? div({ class: 'card-field' }, span({ class: 'card-label' }, i18n.status + ':'), span({ class: 'card-value' }, status)) : "",
|
|
|
+ severity ? div({ class: 'card-field' }, span({ class: 'card-label' }, (i18n.severity || 'Severity') + ':'), span({ class: 'card-value' }, severity.toUpperCase())) : "",
|
|
|
+ Array.isArray(confirmations) ? h2({ class: 'card-label' }, (i18n.transfersConfirmations) + ': ' + confirmations.length) : "",
|
|
|
+ )
|
|
|
+ );
|
|
|
}
|
|
|
|
|
|
- return div({ class: 'action-card' },
|
|
|
- p({ class: 'action-meta' }, `${date} ${i18n.performed} `, userLink),
|
|
|
- ...cardBody
|
|
|
- );
|
|
|
+return div({ class: 'card card-rpg' },
|
|
|
+ div({ class: 'card-header' },
|
|
|
+ h2({ class: 'card-label' }, `[${typeLabel}]`),
|
|
|
+ type !== 'feed' ? form({ method: "GET", action: getViewDetailsAction(type, action) },
|
|
|
+ button({ type: "submit", class: "filter-btn" }, i18n.viewDetails)
|
|
|
+ ) : ''
|
|
|
+ ),
|
|
|
+ div({ class: 'card-body' }, ...cardBody),
|
|
|
+ p({ class: 'card-footer' },
|
|
|
+ span({ class: 'date-link' }, `${date} ${i18n.performed} `),
|
|
|
+ a({ href: `/author/${encodeURIComponent(action.author)}`, class: 'user-link' }, `${action.author}`)
|
|
|
+ )
|
|
|
+);
|
|
|
+
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+function getViewDetailsAction(type, action) {
|
|
|
+ switch (type) {
|
|
|
+ case 'votes': return `/votes/${encodeURIComponent(action.id)}`;
|
|
|
+ case 'transfer': return `/transfers/${encodeURIComponent(action.id)}`;
|
|
|
+ case 'pixelia': return `/pixelia`;
|
|
|
+ case 'tribe': return `/tribe/${encodeURIComponent(action.id)}`;
|
|
|
+ case 'curriculum': return `/inhabitant/${encodeURIComponent(action.author)}`;
|
|
|
+ case 'image': return `/images/${encodeURIComponent(action.id)}`;
|
|
|
+ case 'audio': return `/audios/${encodeURIComponent(action.id)}`;
|
|
|
+ case 'video': return `/videos/${encodeURIComponent(action.id)}`;
|
|
|
+ case 'document': return `/documents/${encodeURIComponent(action.id)}`;
|
|
|
+ case 'bookmark': return `/bookmarks/${encodeURIComponent(action.id)}`;
|
|
|
+ case 'event': return `/events/${encodeURIComponent(action.id)}`;
|
|
|
+ case 'task': return `/tasks/${encodeURIComponent(action.id)}`;
|
|
|
+ case 'about': return `/author/${encodeURIComponent(action.author)}`;
|
|
|
+ case 'post': return `/thread/${encodeURIComponent(action.id)}#${encodeURIComponent(action.id)}`;
|
|
|
+ case 'vote': return `/thread/${encodeURIComponent(action.content.vote.link)}#${encodeURIComponent(action.content.vote.link)}`;
|
|
|
+ case 'contact': return `/inhabitants`;
|
|
|
+ case 'pub': return `/invites`;
|
|
|
+ case 'market': return `/market/${encodeURIComponent(action.id)}`;
|
|
|
+ case 'report': return `/reports/${encodeURIComponent(action.id)}`;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
exports.activityView = (actions, filter, userId) => {
|
|
|
const title = filter === 'mine' ? i18n.yourActivity : i18n.globalActivity;
|
|
|
const desc = i18n.activityDesc;
|
|
@@ -630,4 +530,3 @@ exports.activityView = (actions, filter, userId) => {
|
|
|
}
|
|
|
return html;
|
|
|
};
|
|
|
-
|