"use strict"; const views = require("../util/views.js"); const template = views.getTemplate("snapshots-page"); function _extend(target, source) { target.push.apply(target, source); } function _formatBasicChange(diff, text) { const lines = []; if (diff.type === "list change") { const addedItems = diff.added; const removedItems = diff.removed; if (addedItems && addedItems.length) { lines.push(`Added ${text} (${addedItems.join(", ")})`); } if (removedItems && removedItems.length) { lines.push(`Removed ${text} (${removedItems.join(", ")})`); } } else if (diff.type === "primitive change") { const oldValue = diff["old-value"]; const newValue = diff["new-value"]; lines.push(`Changed ${text} (${oldValue} → ${newValue})`); } else { lines.push(`Changed ${text}`); } return lines; } function _makeResourceLink(type, id) { if (type === "post") { return views.makePostLink(id, true); } else if (type === "tag") { return views.makeTagLink(id, true); } else if (type === "tag_category") { return 'category "' + id + '"'; } else if (type === "pool") { return views.makePoolLink(id, true); } } function _makeItemCreation(type, data) { const lines = []; for (let key of Object.keys(data)) { if (!data[key]) { continue; } let text = key[0].toUpperCase() + key.substr(1).toLowerCase(); if (Array.isArray(data[key])) { if (data[key].length) { lines.push(`${text}: ${data[key].join(", ")}`); } } else { lines.push(`${text}: ${data[key]}`); } } return lines.join("
"); } function _makeItemModification(type, data) { const lines = []; const diff = data.value; if (type === "tag_category") { if (diff.name) { _extend(lines, _formatBasicChange(diff.name, "name")); } if (diff.color) { _extend(lines, _formatBasicChange(diff.color, "color")); } if (diff.default) { _extend(lines, ["Made into default category"]); } } else if (type === "tag") { if (diff.names) { _extend(lines, _formatBasicChange(diff.names, "names")); } if (diff.category) { _extend(lines, _formatBasicChange(diff.category, "category")); } if (diff.suggestions) { _extend( lines, _formatBasicChange(diff.suggestions, "suggestions") ); } if (diff.implications) { _extend( lines, _formatBasicChange(diff.implications, "implications") ); } } else if (type === "post") { if (diff.checksum) { _extend(lines, ["Changed content"]); } if (diff.featured) { _extend(lines, ["Featured on front page"]); } if (diff.source) { _extend(lines, _formatBasicChange(diff.source, "source")); } if (diff.safety) { _extend(lines, _formatBasicChange(diff.safety, "safety")); } if (diff.tags) { _extend(lines, _formatBasicChange(diff.tags, "tags")); } if (diff.relations) { _extend(lines, _formatBasicChange(diff.relations, "relations")); } if (diff.notes) { _extend(lines, ["Changed notes"]); } if (diff.flags) { _extend(lines, ["Changed flags"]); } } else if (type === "pool") { if (diff.names) { _extend(lines, _formatBasicChange(diff.names, "names")); } if (diff.category) { _extend(lines, _formatBasicChange(diff.category, "category")); } if (diff.posts) { _extend(lines, _formatBasicChange(diff.posts, "posts")); } } return lines.join("
"); } class SnapshotsPageView { constructor(ctx) { views.replaceContent( ctx.hostNode, template( Object.assign( { makeResourceLink: _makeResourceLink, makeItemCreation: _makeItemCreation, makeItemModification: _makeItemModification, }, ctx ) ) ); } } module.exports = SnapshotsPageView;