import DataUtils, { REQUEST_TYPE_POST, CONTENT_TYPE_JSON } from '../utils/DataUtils'; import StringUtils from '../utils/StringUtils'; import * as DataEvent from '../events/DataEvent'; 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 //-------------------------- }