From 0beeeb9582b3d7bc023cbce7a6fc417dcdef6285 Mon Sep 17 00:00:00 2001 From: Jori Lallo Date: Sun, 22 May 2016 14:31:21 -0700 Subject: [PATCH] Added document previews and fixed saving --- package.json | 1 + server/api/documents.js | 4 +++- server/presenters.js | 4 +++- server/utils/truncate.js | 18 ++++++++++++++++++ 4 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 server/utils/truncate.js diff --git a/package.json b/package.json index eaa5b57d0..0e4a66178 100644 --- a/package.json +++ b/package.json @@ -59,6 +59,7 @@ "sequelize": "^3.21.0", "sequelize-cli": "^2.3.1", "sequelize-encrypted": "^0.1.0", + "truncate-html": "0.0.6", "uuid": "^2.0.2", "validator": "^5.2.0" }, diff --git a/server/api/documents.js b/server/api/documents.js index ee4fde880..85077f66c 100644 --- a/server/api/documents.js +++ b/server/api/documents.js @@ -38,7 +38,8 @@ router.post('documents.create', auth(), async (ctx) => { ctx.assertPresent(title, 'title is required'); ctx.assertPresent(text, 'text is required'); - const team = await ctx.state.user.getTeam(); + const user = ctx.state.user; + const team = await user.getTeam(); const ownerAtlas = await Atlas.findOne({ where: { id: atlas, @@ -51,6 +52,7 @@ router.post('documents.create', auth(), async (ctx) => { const document = await Document.create({ atlasId: ownerAtlas.id, teamId: team.id, + userId: user.id, title: title, text: text, }); diff --git a/server/presenters.js b/server/presenters.js index 353c93822..58aa898c8 100644 --- a/server/presenters.js +++ b/server/presenters.js @@ -1,4 +1,5 @@ import marked from 'marked'; +import { truncateMarkdown } from './utils/truncate'; import Document from './models/Document'; @@ -45,7 +46,7 @@ export function presentAtlas(atlas, includeRecentDocuments=false) { let recentDocuments = []; await Promise.all(documents.map(async (document) => { - recentDocuments.push(await presentDocument(document)); + recentDocuments.push(await presentDocument(document, true)); })) data.recentDocuments = recentDocuments; } @@ -60,6 +61,7 @@ export async function presentDocument(document, includeAtlas=false) { title: document.title, text: document.text, html: marked(document.text), + preview: truncateMarkdown(document.text, 160), createdAt: document.createdAt, updatedAt: document.updatedAt, atlas: document.atlaId, diff --git a/server/utils/truncate.js b/server/utils/truncate.js new file mode 100644 index 000000000..2dd378fbc --- /dev/null +++ b/server/utils/truncate.js @@ -0,0 +1,18 @@ +import truncate from 'truncate-html'; +import marked from 'marked'; + +truncate.defaultOptions = { + stripTags: false, + ellipsis: '...', + decodeEntities: false, + excludes: ['h1', 'pre',], +}; + +const truncateMarkdown = (text, length) => { + const html = marked(text); + return truncate(html, length); +}; + +export { + truncateMarkdown +};