From 7ffff9000525bf9917102ab71a0a487af9e5e755 Mon Sep 17 00:00:00 2001 From: Eliot Berriot <contact@eliotberriot.com> Date: Thu, 22 Feb 2018 22:02:19 +0100 Subject: [PATCH] Moment, markdown and truncate filters --- front/package.json | 2 ++ front/src/filters.js | 31 ++++++++++++++++ front/src/main.js | 1 + front/test/unit/specs/filters/filters.spec.js | 35 +++++++++++++++++++ 4 files changed, 69 insertions(+) create mode 100644 front/src/filters.js create mode 100644 front/test/unit/specs/filters/filters.spec.js diff --git a/front/package.json b/front/package.json index ac3895f6..042e332d 100644 --- a/front/package.json +++ b/front/package.json @@ -20,9 +20,11 @@ "js-logger": "^1.3.0", "jwt-decode": "^2.2.0", "lodash": "^4.17.4", + "moment": "^2.20.1", "moxios": "^0.4.0", "raven-js": "^3.22.3", "semantic-ui-css": "^2.2.10", + "showdown": "^1.8.6", "vue": "^2.3.3", "vue-lazyload": "^1.1.4", "vue-router": "^2.3.1", diff --git a/front/src/filters.js b/front/src/filters.js new file mode 100644 index 00000000..7695046e --- /dev/null +++ b/front/src/filters.js @@ -0,0 +1,31 @@ +import Vue from 'vue' + +import moment from 'moment' +import showdown from 'showdown' + +export function truncate (str, max, ellipsis) { + max = max || 100 + ellipsis = ellipsis || '…' + if (str.length <= max) { + return str + } + return str.slice(0, max) + ellipsis +} + +Vue.filter('truncate', truncate) + +export function markdown (str) { + const converter = new showdown.Converter() + return converter.makeHtml(str) +} + +Vue.filter('markdown', markdown) + +export function ago (date) { + const m = moment(date) + return m.fromNow() +} + +Vue.filter('ago', ago) + +export default {} diff --git a/front/src/main.js b/front/src/main.js index d1ff90c3..33e998de 100644 --- a/front/src/main.js +++ b/front/src/main.js @@ -13,6 +13,7 @@ import VueLazyload from 'vue-lazyload' import store from './store' import config from './config' import { sync } from 'vuex-router-sync' +import filters from '@/filters' // eslint-disable-line sync(store, router) diff --git a/front/test/unit/specs/filters/filters.spec.js b/front/test/unit/specs/filters/filters.spec.js new file mode 100644 index 00000000..227d6c88 --- /dev/null +++ b/front/test/unit/specs/filters/filters.spec.js @@ -0,0 +1,35 @@ +import {truncate, markdown, ago} from '@/filters' + +describe('filters', () => { + describe('truncate', () => { + it('leave strings as it if correct size', () => { + const input = 'Hello world' + let output = truncate(input, 100) + expect(output).to.equal(input) + }) + it('returns shorter string with character', () => { + const input = 'Hello world' + let output = truncate(input, 5) + expect(output).to.equal('Hello…') + }) + it('custom ellipsis', () => { + const input = 'Hello world' + let output = truncate(input, 5, ' pouet') + expect(output).to.equal('Hello pouet') + }) + }) + describe('markdown', () => { + it('renders markdown', () => { + const input = 'Hello world' + let output = markdown(input) + expect(output).to.equal('<p>Hello world</p>') + }) + }) + describe('ago', () => { + it('works', () => { + const input = new Date() + let output = ago(input) + expect(output).to.equal('a few seconds ago') + }) + }) +}) -- GitLab