2019-11-24 01:09:37 +01:00
|
|
|
import DataUtils, { REQUEST_TYPE_POST, CONTENT_TYPE_JSON } from '../utils/DataUtils';
|
|
|
|
import StringUtils from '../utils/StringUtils';
|
|
|
|
import * as DataEvent from '../events/DataEvent';
|
2019-11-25 01:11:12 +01:00
|
|
|
import { isMaster } from 'cluster';
|
2019-11-24 21:23:01 +01:00
|
|
|
var uuidv4 = require('uuid/v4');
|
2019-11-22 07:36:18 +01:00
|
|
|
export default class PostActions {
|
|
|
|
//--------------------------
|
|
|
|
// constructor
|
|
|
|
//--------------------------
|
|
|
|
constructor() {
|
|
|
|
this.dataUtils = new DataUtils();
|
|
|
|
}
|
|
|
|
//--------------------------
|
|
|
|
// methods
|
|
|
|
//--------------------------
|
2019-11-25 01:11:12 +01:00
|
|
|
collectInfo(image) {
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
let pageInfo = new FormData();
|
|
|
|
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
|
|
|
|
pageInfo.append(
|
|
|
|
'page_id',
|
|
|
|
document.getElementById('post-edit-index').getAttribute('data-index')
|
|
|
|
);
|
|
|
|
pageInfo.append(
|
|
|
|
'page_uuid',
|
|
|
|
document.getElementById('post-edit-index').getAttribute('data-uuid')
|
|
|
|
);
|
|
|
|
pageInfo.append('content', html);
|
|
|
|
pageInfo.append('title', document.getElementById('post_title').value);
|
|
|
|
pageInfo.append(
|
|
|
|
'created',
|
|
|
|
document.getElementById('post-date').getAttribute('data-raw')
|
|
|
|
);
|
|
|
|
pageInfo.append(
|
|
|
|
'slug',
|
|
|
|
new StringUtils().cleanString(document.getElementById('post_title').value)
|
|
|
|
);
|
|
|
|
pageInfo.append('tags', document.getElementById('post_tags').value);
|
|
|
|
pageInfo.append(
|
|
|
|
'pageStatus',
|
|
|
|
document.getElementById('option-page').getAttribute('data-active')
|
|
|
|
);
|
|
|
|
pageInfo.append(
|
|
|
|
'featureStatus',
|
|
|
|
document.getElementById('option-feature').getAttribute('data-active')
|
|
|
|
);
|
|
|
|
pageInfo.append(
|
|
|
|
'publishedStatus',
|
|
|
|
document.getElementById('option-published').getAttribute('data-active')
|
|
|
|
);
|
|
|
|
if (image != null || image != undefined) {
|
|
|
|
if (image.type.match('image.*')) {
|
|
|
|
pageInfo.append('feature_image', image, image.name);
|
|
|
|
} else {
|
|
|
|
reject('Not an image file');
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
//check to see if image exists
|
|
|
|
var imageURL = document.getElementById('featured-image').src;
|
|
|
|
imageURL != null || imageURL != undefined
|
|
|
|
? pageInfo.append('feature_image', imageURL)
|
|
|
|
: pageInfo.append('feature_image', null);
|
|
|
|
}
|
|
|
|
|
|
|
|
resolve(pageInfo);
|
|
|
|
});
|
|
|
|
}
|
2019-11-22 07:36:18 +01:00
|
|
|
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) {
|
|
|
|
let self = this;
|
|
|
|
body.deleted = new Date().toString();
|
|
|
|
return new Promise(function(resolve, reject) {
|
|
|
|
self.dbUtils
|
|
|
|
.archivePost(id, body)
|
|
|
|
.then(response => {
|
|
|
|
//console.log(response);
|
|
|
|
resolve(response);
|
|
|
|
})
|
|
|
|
.catch(err => {
|
|
|
|
//console.log(err);
|
|
|
|
reject(err);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
updateNav(add, id, post) {
|
|
|
|
var self = this;
|
|
|
|
this.dataUtils
|
|
|
|
.request('/api/settings/nav', DataEvent.SETTINGS_LOADED)
|
|
|
|
.then(response => {
|
|
|
|
let menu = JSON.parse(response.request['response']);
|
|
|
|
let item = {
|
|
|
|
id: id,
|
|
|
|
uuid: post.uuid,
|
|
|
|
title: post.title,
|
|
|
|
slug: post.slug
|
|
|
|
};
|
|
|
|
if (add) {
|
|
|
|
menu.push(item);
|
|
|
|
} else {
|
|
|
|
for (let index = 0; index < menu.length; index++) {
|
|
|
|
if (menu[index].id == id) {
|
|
|
|
menu.splice(index, 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
self.dataUtils
|
|
|
|
.request(
|
|
|
|
'/api/settings/nav-sync',
|
|
|
|
DataEvent.SETTINGS_UPDATED,
|
|
|
|
REQUEST_TYPE_POST,
|
|
|
|
CONTENT_TYPE_JSON,
|
|
|
|
menu
|
|
|
|
)
|
|
|
|
.then(() => {
|
|
|
|
//console.log(response);
|
|
|
|
})
|
|
|
|
.catch(() => {
|
|
|
|
//console.log(err);
|
|
|
|
});
|
|
|
|
})
|
|
|
|
.catch(() => {
|
|
|
|
//console.log(err);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
//--------------------------
|
|
|
|
// event handlers
|
|
|
|
//--------------------------
|
|
|
|
}
|