Support for custom HTML editors

This commit is contained in:
witzig 2017-03-02 18:52:40 +01:00
parent 78d262ac8d
commit a11d95f3d7
22 changed files with 255 additions and 133 deletions

View file

@ -62,8 +62,12 @@ router.get('/:campaign/:list/:subscription', passport.csrfProtection, (req, res,
}
let renderHtml = (html, renderTags) => {
res.render('archive/view', {
layout: 'archive/layout',
let sfx = '';
if (campaign.editorName !== 'summernote' && campaign.editorName !== 'codeeditor') {
sfx = '-raw';
}
res.render('archive/view' + sfx, {
layout: 'archive/layout' + sfx,
message: renderTags ? tools.formatMessage(serviceUrl, campaign, list, subscription, html) : html,
campaign,
list,

View file

@ -1,5 +1,6 @@
'use strict';
let config = require('config');
let express = require('express');
let router = new express.Router();
let lists = require('../lib/models/lists');
@ -115,7 +116,10 @@ router.post('/create', passport.parseForm, passport.csrfProtection, (req, res) =
return res.redirect('/campaigns/create?' + tools.queryParams(req.body));
}
req.flash('success', 'Campaign “' + req.body.name + '” created');
res.redirect('/campaigns/view/' + id);
res.redirect((req.body.type === 'rss')
? '/campaigns/edit/' + id
: '/campaigns/edit/' + id + '?tab=template'
);
});
});
@ -159,6 +163,8 @@ router.get('/edit/:id', passport.csrfProtection, (req, res, next) => {
campaign.csrfToken = req.csrfToken();
campaign.listItems = listItems;
campaign.useEditor = true;
campaign.editorName = campaign.editorName || 'summernote';
campaign.editorConfig = config[campaign.editorName];
campaign.disableWysiwyg = configItems.disableWysiwyg;
campaign.showGeneral = req.query.tab === 'general' || !req.query.tab;

View file

@ -1,5 +1,6 @@
'use strict';
let config = require('config');
let express = require('express');
let router = new express.Router();
let templates = require('../lib/models/templates');
@ -66,6 +67,23 @@ router.get('/create', passport.csrfProtection, (req, res, next) => {
data.text = data.text || rendererText(configItems);
data.disableWysiwyg = configItems.disableWysiwyg;
data.editors = config.editors || [['summernote', 'Summernote']];
data.editors = data.editors.map(ed => {
let editor = {
name: ed[0],
label: ed[1],
};
if (config[editor.name] && config[editor.name].templates) {
editor.templates = config[editor.name].templates.map(tmpl => {
return {
name: tmpl[0],
label: tmpl[1],
}
});
}
return editor;
});
res.render('templates/create', data);
});
});
@ -79,7 +97,7 @@ router.post('/create', passport.parseForm, passport.csrfProtection, (req, res) =
return res.redirect('/templates/create?' + tools.queryParams(req.body));
}
req.flash('success', 'Template created');
res.redirect('/templates');
res.redirect('/templates/edit/' + id);
});
});
@ -95,6 +113,8 @@ router.get('/edit/:id', passport.csrfProtection, (req, res, next) => {
}
template.csrfToken = req.csrfToken();
template.useEditor = true;
template.editorName = template.editorName || 'summernote';
template.editorConfig = config[template.editorName];
template.disableWysiwyg = configItems.disableWysiwyg;
res.render('templates/edit', template);
});