fipamo/src/com/actions/PageActions.js

206 lines
5.8 KiB
JavaScript

import DataUtils, { REQUEST_TYPE_POST, CONTENT_TYPE_JSON } from '../utils/DataUtils';
import StringUtils from '../utils/StringUtils';
import * as DataEvent from '../events/DataEvent';
import { isMaster } from 'cluster';
var uuidv4 = require('uuid/v4');
export default class PostActions {
//--------------------------
// constructor
//--------------------------
constructor() {
this.dataUtils = new DataUtils();
}
//--------------------------
// methods
//--------------------------
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);
});
}
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
//--------------------------
}