forked from projects/fipamo
cleaned up libraries file, polished page updating, added page creation
This commit is contained in:
parent
7103f5ca8e
commit
84542228a3
11 changed files with 130 additions and 184 deletions
|
@ -64,6 +64,7 @@
|
||||||
"globals": {
|
"globals": {
|
||||||
"_": false,
|
"_": false,
|
||||||
"hljs": false,
|
"hljs": false,
|
||||||
"Sortable": false
|
"Sortable": false,
|
||||||
|
"Prism": false
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -48,40 +48,10 @@ router.post('/login', function(req, res) {
|
||||||
} else {
|
} else {
|
||||||
res.json({
|
res.json({
|
||||||
type: DataEvent.REQUEST_LAME,
|
type: DataEvent.REQUEST_LAME,
|
||||||
message: 'MEMBER NOT FOUND'
|
message: 'Need to see some id, champ.'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
Models.User.findOne({
|
|
||||||
where: {
|
|
||||||
handle: req.body.handle
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.then(user => {
|
|
||||||
if (!isValidPassword(user, req.body.password)) {
|
|
||||||
return res.json({
|
|
||||||
message: 'CHECK YOUR PASSWORD'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
let token = jwt.sign({ id: user._id }, 'super-secret-string', {
|
|
||||||
expiresIn: 86400 // expires in 24 hours
|
|
||||||
});
|
|
||||||
|
|
||||||
let session = req.session;
|
|
||||||
session.user = user;
|
|
||||||
session.token = token;
|
|
||||||
|
|
||||||
res.json({ auth: 'Yes', token: session.token });
|
|
||||||
})
|
|
||||||
.catch(() => {
|
|
||||||
return res.json({
|
|
||||||
message: 'NOT FOUND, HAWS'
|
|
||||||
});
|
|
||||||
});
|
|
||||||
**/
|
|
||||||
});
|
});
|
||||||
|
|
||||||
//router.post('/logout', function(req, res) {});
|
//router.post('/logout', function(req, res) {});
|
||||||
|
|
|
@ -1,23 +1,13 @@
|
||||||
import Book from '../../data/Book';
|
import Book from '../../data/Book';
|
||||||
import StringUtils from '../../../src/com/utils/StringUtils';
|
|
||||||
import * as DataEvent from '../../../src/com/events/DataEvent';
|
import * as DataEvent from '../../../src/com/events/DataEvent';
|
||||||
import sanitize from 'sanitize-html';
|
|
||||||
import RightsManager, {
|
|
||||||
TASK_CREATE,
|
|
||||||
TASK_UPDATE,
|
|
||||||
OBJECT_POST
|
|
||||||
} from '../../../src/com/utils/RightsManager';
|
|
||||||
const express = require('express');
|
const express = require('express');
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
const multer = require('multer');
|
const multer = require('multer');
|
||||||
const md = require('markdown-it')('commonmark');
|
|
||||||
const fs = require('fs-extra');
|
const fs = require('fs-extra');
|
||||||
const moment = require('moment');
|
const moment = require('moment');
|
||||||
const rightsManager = new RightsManager();
|
|
||||||
const book = new Book();
|
const book = new Book();
|
||||||
const uploadPath =
|
const uploadPath =
|
||||||
'./public/assets/images/blog/' + moment().format('YYYY') + '/' + moment().format('MM');
|
'./public/assets/images/blog/' + moment().format('YYYY') + '/' + moment().format('MM');
|
||||||
const _ = require('lodash');
|
|
||||||
fs.ensureDir(uploadPath, () => {
|
fs.ensureDir(uploadPath, () => {
|
||||||
// dir has now been created, including the directory it is to be placed in
|
// dir has now been created, including the directory it is to be placed in
|
||||||
});
|
});
|
||||||
|
@ -50,12 +40,16 @@ router.get('/', (req, res) => {
|
||||||
/***
|
/***
|
||||||
Update Page
|
Update Page
|
||||||
*/
|
*/
|
||||||
router.post('/write', feature_upload, (req, res) => {
|
router.post('/write/:task?', feature_upload, (req, res) => {
|
||||||
var feature = '';
|
var feature = '';
|
||||||
if (req.files.lengh > 0) {
|
if (req.files.length > 0) {
|
||||||
|
var path = req.files[0].path;
|
||||||
|
feature = '/' + path.substring(7, path.length);
|
||||||
} else {
|
} else {
|
||||||
var url = req.body.feature_image;
|
var url = req.body.feature_image;
|
||||||
feature = url.substring(21, url.length);
|
url != null || url != undefined || url != ''
|
||||||
|
? (feature = url.substring(21, url.length))
|
||||||
|
: (feature = '');
|
||||||
}
|
}
|
||||||
|
|
||||||
var pageWrite =
|
var pageWrite =
|
||||||
|
@ -82,11 +76,14 @@ router.post('/write', feature_upload, (req, res) => {
|
||||||
req.session.user.handle +
|
req.session.user.handle +
|
||||||
'\n' +
|
'\n' +
|
||||||
'created: ' +
|
'created: ' +
|
||||||
req.body.created +
|
moment(req.body.created).format() +
|
||||||
'\n' +
|
'\n' +
|
||||||
'updated: ' +
|
'updated: ' +
|
||||||
moment(Date.now()).format() +
|
moment(Date.now()).format() +
|
||||||
'\n' +
|
'\n' +
|
||||||
|
'menu: ' +
|
||||||
|
req.body.pinToMenu +
|
||||||
|
'\n' +
|
||||||
'featured: ' +
|
'featured: ' +
|
||||||
req.body.featureStatus +
|
req.body.featureStatus +
|
||||||
'\n' +
|
'\n' +
|
||||||
|
@ -98,12 +95,20 @@ router.post('/write', feature_upload, (req, res) => {
|
||||||
'\n' +
|
'\n' +
|
||||||
'---\n\n' +
|
'---\n\n' +
|
||||||
req.body.content;
|
req.body.content;
|
||||||
fs.writeFile('content/pages/test.md', pageWrite, err => {
|
fs.writeFile('content/pages/' + req.body.slug + '.md', pageWrite, err => {
|
||||||
// throws an error, you could also catch it here
|
// throws an error, you could also catch it here
|
||||||
if (err) res.json({ type: DataEvent.PAGE_ERROR, message: err });
|
if (err) res.json({ type: DataEvent.PAGE_ERROR, message: err });
|
||||||
|
|
||||||
// success case, the file was saved
|
// success case, the file was saved
|
||||||
|
if (req.params.task === 'new') {
|
||||||
|
res.json({
|
||||||
|
type: DataEvent.PAGE_ADDED,
|
||||||
|
message: 'New Page Created',
|
||||||
|
id: req.body.page_uuid
|
||||||
|
});
|
||||||
|
} else {
|
||||||
res.json({ type: DataEvent.PAGE_UPDATED, message: 'Page Has been saved' });
|
res.json({ type: DataEvent.PAGE_UPDATED, message: 'Page Has been saved' });
|
||||||
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -3,9 +3,11 @@ const express = require('express');
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
const hljs = require('highlight.js/lib/highlight');
|
const hljs = require('highlight.js/lib/highlight');
|
||||||
const hljs_md = require('highlight.js/lib/languages/markdown');
|
const hljs_md = require('highlight.js/lib/languages/markdown');
|
||||||
hljs.registerLanguage('markdown', hljs_md);
|
|
||||||
const moment = require('moment');
|
const moment = require('moment');
|
||||||
const book = new Book();
|
const book = new Book();
|
||||||
|
const uuidv4 = require('uuid/v4');
|
||||||
|
const fs = require('fs-extra');
|
||||||
|
hljs.registerLanguage('markdown', hljs_md);
|
||||||
//--------------------------
|
//--------------------------
|
||||||
// POSTS
|
// POSTS
|
||||||
//--------------------------
|
//--------------------------
|
||||||
|
@ -33,15 +35,35 @@ router.get('/list/:filter?/:page?', function(req, res) {
|
||||||
//--------------------------
|
//--------------------------
|
||||||
router.get('/add/new', function(req, res) {
|
router.get('/add/new', function(req, res) {
|
||||||
if (req.session.user) {
|
if (req.session.user) {
|
||||||
res.render('dash/post-edit', {
|
fs.readJSON('site/settings.json')
|
||||||
title: 'Dashboard New Post',
|
.then(settings => {
|
||||||
|
//use current index as id, then updated current index and page count
|
||||||
|
|
||||||
|
let pageID = settings.library_stats.current_index;
|
||||||
|
settings.library_stats.current_index = ++settings.library_stats.current_index;
|
||||||
|
settings.library_stats.total_pages = ++settings.library_stats.total_pages;
|
||||||
|
fs.writeJson('site/settings.json', settings)
|
||||||
|
.then(() => {
|
||||||
|
res.render('page-edit', {
|
||||||
|
id: pageID,
|
||||||
|
uuid: uuidv4(),
|
||||||
|
title: 'Add New Page',
|
||||||
user_status: true,
|
user_status: true,
|
||||||
welcome: 'New Post',
|
welcome: 'Add New Page',
|
||||||
mode: 'admin',
|
date: moment(Date.now()).format('YYYY MMM DD'),
|
||||||
date: '',
|
page: [],
|
||||||
|
rawDate: Date.now(),
|
||||||
status: ['false', 'false', 'false'],
|
status: ['false', 'false', 'false'],
|
||||||
edit: false
|
edit: false
|
||||||
});
|
});
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
console.error('SAVING', err);
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
console.log('READING', err);
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
res.redirect('/@/dashboard');
|
res.redirect('/@/dashboard');
|
||||||
}
|
}
|
||||||
|
@ -59,16 +81,14 @@ router.get('/edit/:id', function(req, res) {
|
||||||
id: page.metadata.id,
|
id: page.metadata.id,
|
||||||
uuid: page.metadata.uuid,
|
uuid: page.metadata.uuid,
|
||||||
title: 'Edit Page',
|
title: 'Edit Page',
|
||||||
user_status: true,
|
|
||||||
welcome: 'Edit Page',
|
welcome: 'Edit Page',
|
||||||
mode: 'admin',
|
|
||||||
page: page.metadata,
|
page: page.metadata,
|
||||||
date: moment(page.metadata.created).format('YYYY MMM DD'),
|
date: moment(page.metadata.created).format('YYYY MMM DD'),
|
||||||
rawDate: page.metadata.created,
|
rawDate: page.metadata.created,
|
||||||
colored: pretty,
|
colored: pretty,
|
||||||
feature: page.metadata.feature,
|
feature: page.metadata.feature,
|
||||||
status: [
|
status: [
|
||||||
String(true),
|
String(page.metadata.menu),
|
||||||
String(page.metadata.featured),
|
String(page.metadata.featured),
|
||||||
String(page.metadata.published)
|
String(page.metadata.published)
|
||||||
],
|
],
|
||||||
|
|
|
@ -1,23 +1,5 @@
|
||||||
extends frame
|
extends frame
|
||||||
block main-content
|
block main-content
|
||||||
// move this to backend
|
|
||||||
-var post_title = ''
|
|
||||||
-var post_plaintext = ''
|
|
||||||
-var post_feature = 'null'
|
|
||||||
-var post_tags = ''
|
|
||||||
-var post_id = ''
|
|
||||||
-var post_date = date
|
|
||||||
-var post_status = ['false', 'false', 'false',]
|
|
||||||
|
|
||||||
if(edit)
|
|
||||||
-post_title = page.title
|
|
||||||
-post_plaintext = page.plaintext
|
|
||||||
-post_feature = page.feature
|
|
||||||
-post_tags = page.tags
|
|
||||||
-post_date = date
|
|
||||||
-post_status = status
|
|
||||||
|
|
||||||
form#test-form
|
|
||||||
#post-edit-index(data-index=id data-uuid=uuid)
|
#post-edit-index(data-index=id data-uuid=uuid)
|
||||||
#post-edit-index-wrapper
|
#post-edit-index-wrapper
|
||||||
//h2 EDIT
|
//h2 EDIT
|
||||||
|
@ -35,17 +17,17 @@ block main-content
|
||||||
svg#new-feature-upload(viewBox="0 0 20 20" class="icons")
|
svg#new-feature-upload(viewBox="0 0 20 20" class="icons")
|
||||||
use(xlink:href='/assets/images/global/sprite.svg#entypo-image-inverted')
|
use(xlink:href='/assets/images/global/sprite.svg#entypo-image-inverted')
|
||||||
#featured-image-drop
|
#featured-image-drop
|
||||||
img#featured-image(src=post_feature)
|
img#featured-image(src=page.feature)
|
||||||
#post-header.columns
|
#post-header.columns
|
||||||
#post-title.column
|
#post-title.column
|
||||||
textarea(id="post_title" type='text', name='post_title' class='post-edit', placeholder='title', required, autofocus)
|
textarea(id="post_title" type='text', name='post_title' class='post-edit', placeholder='title', required, autofocus)
|
||||||
=post_title
|
=page.title
|
||||||
#calendar-icon
|
#calendar-icon
|
||||||
svg(viewBox="0 0 20 20" class="icons")
|
svg(viewBox="0 0 20 20" class="icons")
|
||||||
use(xlink:href='/assets/images/global/sprite.svg#entypo-calendar')
|
use(xlink:href='/assets/images/global/sprite.svg#entypo-calendar')
|
||||||
input(id="post-date" type="text" value=post_date data-raw=rawDate)
|
input(id="post-date" type="text" value=date data-raw=rawDate)
|
||||||
#post-options
|
#post-options
|
||||||
button#option-page.option-inactive.post-option-btn(data-active= status[0])
|
button#option-menu-pin.option-inactive.post-option-btn(data-active= status[0])
|
||||||
svg#option-page-icon(viewBox="0 0 20 20" class="icons")
|
svg#option-page-icon(viewBox="0 0 20 20" class="icons")
|
||||||
use#option-page-icon(xlink:href='/assets/images/global/sprite.svg#entypo-pin')
|
use#option-page-icon(xlink:href='/assets/images/global/sprite.svg#entypo-pin')
|
||||||
button#option-feature.option-inactive.post-option-btn(data-active= status[1])
|
button#option-feature.option-inactive.post-option-btn(data-active= status[1])
|
||||||
|
@ -59,7 +41,7 @@ block main-content
|
||||||
use#option-preview-icon(xlink:href='/assets/images/global/sprite.svg#entypo-eye')
|
use#option-preview-icon(xlink:href='/assets/images/global/sprite.svg#entypo-eye')
|
||||||
#post-meta.column
|
#post-meta.column
|
||||||
textarea(id='post_tags' type='text', name='post_tags' class='form-control', placeholder='tags [comma seperated]', autofocus)
|
textarea(id='post_tags' type='text', name='post_tags' class='form-control', placeholder='tags [comma seperated]', autofocus)
|
||||||
=post_tags
|
=page.tags
|
||||||
include partials/editor
|
include partials/editor
|
||||||
input(id="featured-image-upload" type="file" name="featured-image-upload")
|
input(id="featured-image-upload" type="file" name="featured-image-upload")
|
||||||
input(id="post-image-upload" type="file" name="post-image-upload")
|
input(id="post-image-upload" type="file" name="post-image-upload")
|
||||||
|
|
|
@ -32,6 +32,6 @@
|
||||||
else
|
else
|
||||||
button#edit-save.post-sumbit-btn.submit-start.editor-button(data-action='blog-add' type='submit')
|
button#edit-save.post-sumbit-btn.submit-start.editor-button(data-action='blog-add' type='submit')
|
||||||
svg#submit-save(viewBox="0 0 20 20" class="icons")
|
svg#submit-save(viewBox="0 0 20 20" class="icons")
|
||||||
use#submit-save(xlink:href='/dash/assets/images/sprite.svg#entypo-plus' data-action='blog-add')
|
use#submit-save(xlink:href='/assets/images/global/sprite.svg#entypo-plus' data-action='blog-add')
|
||||||
|
|
||||||
|
|
|
@ -3,9 +3,9 @@
|
||||||
.recent-header
|
.recent-header
|
||||||
h3 Recent
|
h3 Recent
|
||||||
.index-menu
|
.index-menu
|
||||||
a(href='/@/dashboard/posts/list') View Posts
|
a(href='/@/dashboard/page/list') View Pages
|
||||||
| .
|
| .
|
||||||
a(href='/@/dashboard/posts/add/new') Create Post
|
a(href='/@/dashboard/page/add/new') Create Page
|
||||||
br
|
br
|
||||||
- var index = 0;
|
- var index = 0;
|
||||||
- var cap = 5; // number of posts to display, get rid of this and put it in the config
|
- var cap = 5; // number of posts to display, get rid of this and put it in the config
|
||||||
|
|
46
package-lock.json
generated
46
package-lock.json
generated
|
@ -2228,6 +2228,17 @@
|
||||||
"source-map": "~0.6.0"
|
"source-map": "~0.6.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"clipboard": {
|
||||||
|
"version": "2.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.4.tgz",
|
||||||
|
"integrity": "sha512-Vw26VSLRpJfBofiVaFb/I8PVfdI1OxKcYShe6fm0sP/DtmiWQNCjhM/okTvdCo0G+lMMm1rMYbk4IK4x1X+kgQ==",
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"good-listener": "^1.2.2",
|
||||||
|
"select": "^1.1.2",
|
||||||
|
"tiny-emitter": "^2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"cliui": {
|
"cliui": {
|
||||||
"version": "2.1.0",
|
"version": "2.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
|
||||||
|
@ -2567,6 +2578,12 @@
|
||||||
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
||||||
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
|
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
|
||||||
},
|
},
|
||||||
|
"delegate": {
|
||||||
|
"version": "3.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz",
|
||||||
|
"integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==",
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
"depd": {
|
"depd": {
|
||||||
"version": "1.1.2",
|
"version": "1.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
|
||||||
|
@ -3900,6 +3917,15 @@
|
||||||
"integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
|
"integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"good-listener": {
|
||||||
|
"version": "1.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz",
|
||||||
|
"integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=",
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"delegate": "^3.1.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
"graceful-fs": {
|
"graceful-fs": {
|
||||||
"version": "4.1.11",
|
"version": "4.1.11",
|
||||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
|
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
|
||||||
|
@ -5350,6 +5376,14 @@
|
||||||
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
|
||||||
"integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ="
|
"integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ="
|
||||||
},
|
},
|
||||||
|
"prismjs": {
|
||||||
|
"version": "1.17.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.17.1.tgz",
|
||||||
|
"integrity": "sha512-PrEDJAFdUGbOP6xK/UsfkC5ghJsPJviKgnQOoxaDbBjwc8op68Quupwt1DeAFoG8GImPhiKXAvvsH7wDSLsu1Q==",
|
||||||
|
"requires": {
|
||||||
|
"clipboard": "^2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"private": {
|
"private": {
|
||||||
"version": "0.1.8",
|
"version": "0.1.8",
|
||||||
"resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
|
"resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
|
||||||
|
@ -5855,6 +5889,12 @@
|
||||||
"integrity": "sha1-io6pbtN0G4WpKgSCQuniBxyePLE=",
|
"integrity": "sha1-io6pbtN0G4WpKgSCQuniBxyePLE=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"select": {
|
||||||
|
"version": "1.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz",
|
||||||
|
"integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=",
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
"semver": {
|
"semver": {
|
||||||
"version": "5.7.1",
|
"version": "5.7.1",
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
|
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
|
||||||
|
@ -6363,6 +6403,12 @@
|
||||||
"resolved": "https://registry.npmjs.org/tiny-date-picker/-/tiny-date-picker-3.2.8.tgz",
|
"resolved": "https://registry.npmjs.org/tiny-date-picker/-/tiny-date-picker-3.2.8.tgz",
|
||||||
"integrity": "sha512-XrZ2ujRDZLom3DtquzjtEh+kBLbivErqfbqbNG8sVA7ZCUxerIiorxfM87akQNbBnKttBaiXAZwZi46e2mFX7Q=="
|
"integrity": "sha512-XrZ2ujRDZLom3DtquzjtEh+kBLbivErqfbqbNG8sVA7ZCUxerIiorxfM87akQNbBnKttBaiXAZwZi46e2mFX7Q=="
|
||||||
},
|
},
|
||||||
|
"tiny-emitter": {
|
||||||
|
"version": "2.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz",
|
||||||
|
"integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==",
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
"to-fast-properties": {
|
"to-fast-properties": {
|
||||||
"version": "1.0.3",
|
"version": "1.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
"watch-front": "stylus -w -m -o themes/$npm_package_theme/assets/css themes/$npm_package_theme/src/styles/base.styl & parcel watch themes/$npm_package_theme/src/com/Start.js --out-dir themes/$npm_package_theme/assets/js --out-file start.min.js --public-url /$npm_package_theme/assets/js",
|
"watch-front": "stylus -w -m -o themes/$npm_package_theme/assets/css themes/$npm_package_theme/src/styles/base.styl & parcel watch themes/$npm_package_theme/src/com/Start.js --out-dir themes/$npm_package_theme/assets/js --out-file start.min.js --public-url /$npm_package_theme/assets/js",
|
||||||
"build-front-kit": "uglifyjs node_modules/scramble-text/dist/ScrambleText.min.js node_modules/animejs/anime.min.js node_modules/reframe.js/dist/reframe.min.js -c -o themes/$npm_package_theme/assets/js/toolkit.min.js",
|
"build-front-kit": "uglifyjs node_modules/scramble-text/dist/ScrambleText.min.js node_modules/animejs/anime.min.js node_modules/reframe.js/dist/reframe.min.js -c -o themes/$npm_package_theme/assets/js/toolkit.min.js",
|
||||||
"watch-back": "stylus -w -m -o public/assets/css src/styles/dash.styl & parcel watch src/com/Start.js --out-dir public/assets/scripts --out-file dash.min.js --public-url /assets/scripts",
|
"watch-back": "stylus -w -m -o public/assets/css src/styles/dash.styl & parcel watch src/com/Start.js --out-dir public/assets/scripts --out-file dash.min.js --public-url /assets/scripts",
|
||||||
"build-back-kit": "uglifyjs src/libraries/highlight.pack.js node_modules/sortablejs/Sortable.min.js node_modules/scramble-text/dist/ScrambleText.min.js node_modules/animejs/anime.min.js node_modules/reframe.js/dist/reframe.min.js -c -o themes/dash/assets/js/dashkit.min.js"
|
"build-back-kit": "uglifyjs src/libraries/highlight.pack.js node_modules/sortablejs/Sortable.min.js node_modules/scramble-text/dist/ScrambleText.min.js node_modules/reframe.js/dist/reframe.min.js -c -o public/assets/scripts/dashkit.min.js"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=10.16.0"
|
"node": ">=10.16.0"
|
||||||
|
@ -47,6 +47,7 @@
|
||||||
"nodemailer-mailgun-transport": "^1.4.0",
|
"nodemailer-mailgun-transport": "^1.4.0",
|
||||||
"pg": "^7.12.1",
|
"pg": "^7.12.1",
|
||||||
"pg-hstore": "^2.3.3",
|
"pg-hstore": "^2.3.3",
|
||||||
|
"prismjs": "^1.17.1",
|
||||||
"pug": "latest",
|
"pug": "latest",
|
||||||
"reframe.js": "^2.2.5",
|
"reframe.js": "^2.2.5",
|
||||||
"request": "^2.88.0",
|
"request": "^2.88.0",
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
import DataUtils, { REQUEST_TYPE_POST, CONTENT_TYPE_JSON } from '../utils/DataUtils';
|
import DataUtils, { REQUEST_TYPE_POST, CONTENT_TYPE_JSON } from '../utils/DataUtils';
|
||||||
import StringUtils from '../utils/StringUtils';
|
import StringUtils from '../utils/StringUtils';
|
||||||
import * as DataEvent from '../events/DataEvent';
|
import * as DataEvent from '../events/DataEvent';
|
||||||
var uuidv4 = require('uuid/v4');
|
|
||||||
export default class PostActions {
|
export default class PostActions {
|
||||||
//--------------------------
|
//--------------------------
|
||||||
// constructor
|
// constructor
|
||||||
|
@ -40,8 +39,8 @@ export default class PostActions {
|
||||||
);
|
);
|
||||||
pageInfo.append('tags', document.getElementById('post_tags').value);
|
pageInfo.append('tags', document.getElementById('post_tags').value);
|
||||||
pageInfo.append(
|
pageInfo.append(
|
||||||
'pageStatus',
|
'pinToMenu',
|
||||||
document.getElementById('option-page').getAttribute('data-active')
|
document.getElementById('option-menu-pin').getAttribute('data-active')
|
||||||
);
|
);
|
||||||
pageInfo.append(
|
pageInfo.append(
|
||||||
'featureStatus',
|
'featureStatus',
|
||||||
|
@ -68,80 +67,6 @@ export default class PostActions {
|
||||||
resolve(pageInfo);
|
resolve(pageInfo);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
update(id, data, files, lastKey) {
|
|
||||||
let self = this;
|
|
||||||
let freshData;
|
|
||||||
return new Promise(function(resolve, reject) {
|
|
||||||
let txt = document.createElement('textarea');
|
|
||||||
txt.innerHTML = document.getElementById('edit-post-text').innerHTML;
|
|
||||||
let html = txt.value;
|
|
||||||
html = html.replace(/<\/?span[^>]*>/g, ''); //removes highightjs styling
|
|
||||||
html = html.replace(/<\/?br[^>]*>/g, '\n'); //convert back to encoded line break for storage
|
|
||||||
data.title = document.getElementById('post_title').value;
|
|
||||||
data.slug = new StringUtils().cleanString(document.getElementById('post_title').value);
|
|
||||||
data.plaintext = html;
|
|
||||||
data.html = html;
|
|
||||||
data.created = document.getElementById('post-date').value;
|
|
||||||
data.tags = document.getElementById('post_tags').value;
|
|
||||||
data.page = document.getElementById('option-page').getAttribute('data-active');
|
|
||||||
data.featured = document.getElementById('option-feature').getAttribute('data-active');
|
|
||||||
data.published = document
|
|
||||||
.getElementById('option-published')
|
|
||||||
.getAttribute('data-active');
|
|
||||||
if (files.length != 0) {
|
|
||||||
for (var i = 0; i < files.length; i++) {
|
|
||||||
var file = files[i];
|
|
||||||
// Check the file type.
|
|
||||||
if (!file.type.match('image.*')) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
data.feature =
|
|
||||||
'/content/blog-images/' +
|
|
||||||
self.dateUtils.getDate('year', new Date()) +
|
|
||||||
'/' +
|
|
||||||
self.dateUtils.getDate('month', new Date()) +
|
|
||||||
'/' +
|
|
||||||
file.name;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (typeof data.feature == 'undefined') data.feature = '';
|
|
||||||
}
|
|
||||||
if (id == null) {
|
|
||||||
freshData = {
|
|
||||||
id: lastKey + 1,
|
|
||||||
post: {
|
|
||||||
uuid: uuidv4(),
|
|
||||||
title: data.title,
|
|
||||||
slug: data.slug,
|
|
||||||
plaintext: data.plaintext,
|
|
||||||
html: data.html,
|
|
||||||
feature: data.feature,
|
|
||||||
created: data.created,
|
|
||||||
tags: data.tags,
|
|
||||||
page: data.page,
|
|
||||||
featured: data.featured,
|
|
||||||
published: data.published,
|
|
||||||
deleted: '',
|
|
||||||
author: 'user'
|
|
||||||
}
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
freshData = data;
|
|
||||||
}
|
|
||||||
self.dbUtils
|
|
||||||
.modify(id, freshData)
|
|
||||||
.then(response => {
|
|
||||||
resolve(response);
|
|
||||||
if (id != null)
|
|
||||||
freshData.page == 'true'
|
|
||||||
? self.updateNav(true, id, freshData)
|
|
||||||
: self.updateNav(false, id, freshData);
|
|
||||||
})
|
|
||||||
.catch(err => {
|
|
||||||
reject(err);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
deletePost(id, body) {
|
deletePost(id, body) {
|
||||||
let self = this;
|
let self = this;
|
||||||
body.deleted = new Date().toString();
|
body.deleted = new Date().toString();
|
||||||
|
|
|
@ -9,8 +9,6 @@ import Notfications from '../ui/Notifications';
|
||||||
const data = new DataUtils();
|
const data = new DataUtils();
|
||||||
const notify = new Notfications();
|
const notify = new Notfications();
|
||||||
export default class PostEditor {
|
export default class PostEditor {
|
||||||
//TODO - FIX POST FEATURE URLS IN DB
|
|
||||||
|
|
||||||
//--------------------------
|
//--------------------------
|
||||||
// constructor
|
// constructor
|
||||||
//--------------------------
|
//--------------------------
|
||||||
|
@ -59,6 +57,7 @@ export default class PostEditor {
|
||||||
TinyDatePicker(document.getElementById('post-date'), {
|
TinyDatePicker(document.getElementById('post-date'), {
|
||||||
mode: 'dp-below',
|
mode: 'dp-below',
|
||||||
format(date) {
|
format(date) {
|
||||||
|
console.log('RAW DATE', date);
|
||||||
return self.dateUtils.getDate('origin', date);
|
return self.dateUtils.getDate('origin', date);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -98,8 +97,8 @@ export default class PostEditor {
|
||||||
let currentOption;
|
let currentOption;
|
||||||
switch (e.target.id) {
|
switch (e.target.id) {
|
||||||
case 'option-page-icon':
|
case 'option-page-icon':
|
||||||
case 'option-page':
|
case 'option-menu-pin':
|
||||||
currentOption = document.getElementById('option-page');
|
currentOption = document.getElementById('option-menu-pin');
|
||||||
break;
|
break;
|
||||||
case 'option-feature-icon':
|
case 'option-feature-icon':
|
||||||
case 'option-feature':
|
case 'option-feature':
|
||||||
|
@ -119,25 +118,17 @@ export default class PostEditor {
|
||||||
let self = this;
|
let self = this;
|
||||||
switch (e) {
|
switch (e) {
|
||||||
case EditorEvent.EDITOR_SAVE:
|
case EditorEvent.EDITOR_SAVE:
|
||||||
new PageActions()
|
|
||||||
.update(this.postID, this.post, PostEditor.uploadFiles, FINAL_KEY)
|
|
||||||
.then(response => {
|
|
||||||
setTimeout(() => {
|
|
||||||
self.dbUtils.getPost(Number(response.response.newPost)).then(r => {
|
|
||||||
window.location = '/@/dashboard/posts/edit/' + r.post.uuid;
|
|
||||||
});
|
|
||||||
}, 100);
|
|
||||||
})
|
|
||||||
.catch(() => {
|
|
||||||
//console.log("ERROR", err)
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
case EditorEvent.EDITOR_UPDATE:
|
case EditorEvent.EDITOR_UPDATE:
|
||||||
|
var apiUrl = '';
|
||||||
|
e === EditorEvent.EDITOR_SAVE
|
||||||
|
? (apiUrl = '/api/v1/page/write/new')
|
||||||
|
: (apiUrl = '/api/v1/page/write');
|
||||||
new PageActions()
|
new PageActions()
|
||||||
.collectInfo(document.getElementById('featured-image-upload').files[0])
|
.collectInfo(document.getElementById('featured-image-upload').files[0])
|
||||||
|
|
||||||
.then(page => {
|
.then(page => {
|
||||||
data.request(
|
data.request(
|
||||||
'/api/v1/page/write',
|
apiUrl,
|
||||||
DataEvent.API_PAGE_WRITE,
|
DataEvent.API_PAGE_WRITE,
|
||||||
REQUEST_TYPE_POST,
|
REQUEST_TYPE_POST,
|
||||||
CONTENT_TYPE_FORM,
|
CONTENT_TYPE_FORM,
|
||||||
|
@ -148,7 +139,12 @@ export default class PostEditor {
|
||||||
if (r.type === DataEvent.PAGE_ERROR) {
|
if (r.type === DataEvent.PAGE_ERROR) {
|
||||||
notify.alert(r.message, false);
|
notify.alert(r.message, false);
|
||||||
} else {
|
} else {
|
||||||
|
if (r.type === DataEvent.PAGE_UPDATED) {
|
||||||
notify.alert(r.message, true);
|
notify.alert(r.message, true);
|
||||||
|
} else {
|
||||||
|
notify.alert(r.message, true);
|
||||||
|
window.location = '/@/dashboard/page/edit/' + r.id;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(err => {
|
.catch(err => {
|
||||||
|
|
Loading…
Reference in a new issue