forked from projects/fipamo
ro
a5cf8816f0
the themes tab has been brought into alignment with the new design, so the only thing that remains is redoing responsive styles for the settings page whew
292 lines
8.6 KiB
JavaScript
292 lines
8.6 KiB
JavaScript
import SettingsActions from '../actions/SettingsActions.js';
|
|
import Maintenance from './MaintenanceManager.js';
|
|
import FipamoAdminAPI, { TASK_SYNC_SETTNIGS } from '../../libraries/FipamoAdminAPI.js';
|
|
import * as DataEvent from '../../../dash/app/events/DataEvent.js';
|
|
import Mailer from '../actions/Mailer.js';
|
|
import Notifications from '../ui/Notifications.js';
|
|
const notify = new Notifications();
|
|
export default class SettingsIndex {
|
|
//--------------------------
|
|
// constructor
|
|
//--------------------------
|
|
constructor() {
|
|
this.processing = false;
|
|
this.start();
|
|
this.admin = new FipamoAdminAPI(null);
|
|
this.mm = new Maintenance(null, null);
|
|
}
|
|
//--------------------------
|
|
// methods
|
|
//--------------------------
|
|
start() {
|
|
let self = this;
|
|
//handle save button
|
|
document.getElementById('save-toggle').addEventListener('click', () =>
|
|
new SettingsActions()
|
|
.getInfo()
|
|
.then(data => {
|
|
notify.alert('Saving Settings', null);
|
|
self.admin.sync(TASK_SYNC_SETTNIGS, data).then(r => {
|
|
if (r.type == DataEvent.SETTINGS_UPDATED) {
|
|
notify.alert(r.message, true);
|
|
} else {
|
|
notify.alert(r.message, true);
|
|
}
|
|
});
|
|
})
|
|
.catch(() => {
|
|
//console.log(err);
|
|
})
|
|
);
|
|
//handle set up image uploads
|
|
document.querySelector('.avatar').addEventListener('click', () => {
|
|
document.getElementById('avatar-upload').click();
|
|
});
|
|
document.querySelector('.background').addEventListener('click', () => {
|
|
document.getElementById('background-upload').click();
|
|
});
|
|
|
|
document.getElementById('avatar-upload').addEventListener(
|
|
'change',
|
|
e => {
|
|
self.handleImageUpload(e.target.id, e.target.files);
|
|
},
|
|
false
|
|
);
|
|
document.getElementById('background-upload').addEventListener(
|
|
'change',
|
|
e => {
|
|
self.handleImageUpload(e.target.id, e.target.files);
|
|
},
|
|
false
|
|
);
|
|
//handle api access toggle
|
|
var apiButton = document.getElementById('api-access-toggle');
|
|
var apiStatus = document.getElementById('api-status');
|
|
apiButton.addEventListener('click', e => {
|
|
e.stopPropagation();
|
|
e.preventDefault();
|
|
if (apiButton.getAttribute('data-enabled') == 'false') {
|
|
apiButton.setAttribute('data-enabled', 'true');
|
|
apiStatus.innerHTML = 'API ACCESS IS ENABLED';
|
|
} else {
|
|
apiButton.setAttribute('data-enabled', 'false');
|
|
apiStatus.innerHTML = 'API ACCESS IS DISABLED';
|
|
}
|
|
});
|
|
|
|
//handle dynamic page rendering
|
|
var dynamicRenderButton = document.getElementById('dynamic-render-toggle');
|
|
var dynamicRenderStatus = document.getElementById('dynamic-render-status');
|
|
dynamicRenderButton.addEventListener('click', e => {
|
|
e.stopPropagation();
|
|
e.preventDefault();
|
|
if (dynamicRenderButton.getAttribute('data-enabled') == 'false') {
|
|
dynamicRenderButton.setAttribute('data-enabled', 'true');
|
|
dynamicRenderStatus.innerHTML = 'DYNAMIC PAGE RENDERING';
|
|
} else {
|
|
dynamicRenderButton.setAttribute('data-enabled', 'false');
|
|
dynamicRenderStatus.innerHTML = 'STATIC PAGE RENDERING';
|
|
}
|
|
});
|
|
|
|
//handle tabs
|
|
let tabBtn = document.querySelectorAll('.tab-button');
|
|
let tabs = document.querySelectorAll('.section-tab');
|
|
for (i = 0, length = tabBtn.length; i < length; i++) {
|
|
tabBtn[i].addEventListener('click', e => {
|
|
let tab = 'site-' + e.target.id;
|
|
for (i = 0, length = tabs.length; i < length; i++) {
|
|
let tabID = tabs[i].id;
|
|
if (tab == tabID) {
|
|
tabs[i].classList.add('show');
|
|
tabs[i].classList.remove('hide');
|
|
} else {
|
|
tabs[i].classList.add('hide');
|
|
tabs[i].classList.remove('show');
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
document
|
|
.getElementById('send-mail')
|
|
.addEventListener('click', e => this.handleMailer(e));
|
|
document
|
|
.getElementById('publish-pages')
|
|
.addEventListener('click', e => this.handlePublished(e));
|
|
//handle page render on save toggle
|
|
document
|
|
.getElementById('render-toggle')
|
|
.addEventListener('click', e => this.toggleRender(e));
|
|
//handle theme toggle
|
|
let themeBtns = document.querySelectorAll('.theme-select');
|
|
for (var i = 0, length = themeBtns.length; i < length; i++) {
|
|
themeBtns[i].addEventListener('click', e => this.handleThemes(e));
|
|
}
|
|
//handle mail options
|
|
let mailBtn = document.querySelectorAll('.mail-option');
|
|
for (i = 0, length = mailBtn.length; i < length; i++) {
|
|
mailBtn[i].addEventListener('click', e => this.handleMailOptions(e));
|
|
}
|
|
//handle backup from settings
|
|
document
|
|
.getElementById('create-backup')
|
|
.addEventListener('click', e => this.handleBackup(e));
|
|
}
|
|
//--------------------------
|
|
// event handlers
|
|
//--------------------------
|
|
togglePrivacy(e) {
|
|
e.stopPropagation();
|
|
e.preventDefault();
|
|
if (e.target.getAttribute('data-private') == 'false') {
|
|
e.target.setAttribute('data-private', 'true');
|
|
e.target.innerHTML = 'SITE IS PUBLIC';
|
|
} else {
|
|
e.target.setAttribute('data-private', 'false');
|
|
e.target.innerHTML = 'SITE IS PRIVATE';
|
|
}
|
|
}
|
|
toggleRender(e) {
|
|
e.stopPropagation();
|
|
e.preventDefault();
|
|
let button = document.getElementById('render-toggle');
|
|
if (button.getAttribute('data-render') == 'false') {
|
|
button.setAttribute('data-render', 'true');
|
|
//e.target.innerHTML = 'RENDER PAGES ON SAVE';
|
|
} else {
|
|
button.setAttribute('data-render', 'false');
|
|
//e.target.innerHTML = "DON'T RENDER PAGES ON SAVE";
|
|
}
|
|
}
|
|
handleMailer() {
|
|
let mailer = new Mailer();
|
|
mailer.testMail();
|
|
//mailer.sendMail();
|
|
}
|
|
handleThemes(e) {
|
|
e.stopPropagation();
|
|
e.preventDefault();
|
|
let themes = document.querySelectorAll('.theme-select');
|
|
for (var i = 0, length = themes.length; i < length; i++) {
|
|
let theme = e.target.id;
|
|
if (e.target.id == '') {
|
|
theme = e.target.getAttribute('for');
|
|
}
|
|
if (theme == themes[i].id) {
|
|
themes[i].setAttribute('data-enabled', 'true');
|
|
document.getElementById('label-' + themes[i].id).innerHTML =
|
|
'ACTIVE THEME';
|
|
} else {
|
|
themes[i].setAttribute('data-enabled', 'false');
|
|
document.getElementById('label-' + themes[i].id).innerHTML =
|
|
'INACTIVE THEME';
|
|
}
|
|
}
|
|
}
|
|
handleMailOptions(e) {
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
let smtp = document.getElementById('mail-smtp');
|
|
let mailgun = document.getElementById('mail-mg');
|
|
let mail = document.querySelectorAll('.mail-option');
|
|
for (var i = 0, length = mail.length; i < length; i++) {
|
|
if (e.target.id == mail[i].id) {
|
|
mail[i].setAttribute('data-enabled', 'true');
|
|
if (e.target.id == 'option-smtp') {
|
|
smtp.setAttribute('data-enabled', 'true');
|
|
mailgun.setAttribute('data-enabled', 'false');
|
|
} else if (e.target.id == 'option-none') {
|
|
smtp.setAttribute('data-enabled', 'false');
|
|
mailgun.setAttribute('data-enabled', 'false');
|
|
} else {
|
|
smtp.setAttribute('data-enabled', 'false');
|
|
mailgun.setAttribute('data-enabled', 'true');
|
|
}
|
|
} else {
|
|
mail[i].setAttribute('data-enabled', 'false');
|
|
}
|
|
}
|
|
}
|
|
handleImageUpload(type, files) {
|
|
notify.alert('Uploading Image... ', null);
|
|
let self = this;
|
|
notify.alert('Uploading Image', null);
|
|
let upload = new FormData();
|
|
upload.enctype = 'multipart/form-data';
|
|
upload.append('source', type);
|
|
upload.append('upload_files[]', files[0], files[0].name);
|
|
|
|
this.mm
|
|
.filesUpload(files[0].type, upload)
|
|
.then(r => {
|
|
if (type == 'avatar-upload') {
|
|
notify.alert(r.message, true);
|
|
document.querySelector('.avatar').style.background =
|
|
'url(' + r.filePath + ') no-repeat center center / cover';
|
|
} else {
|
|
notify.alert(r.message, true);
|
|
document.querySelector('.background').style.background =
|
|
'url(' + r.filePath + ') no-repeat center center / cover';
|
|
}
|
|
})
|
|
.catch(() => {
|
|
//console.log(err)
|
|
});
|
|
}
|
|
handlePublished(e) {
|
|
if (this.processing) return;
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
let self = this;
|
|
let task = { task: 'PUBLISH_ALL' };
|
|
this.processing = true;
|
|
notify.alert('Publishing site...', null);
|
|
this.admin
|
|
.publish(task)
|
|
.then(r => {
|
|
self.processing = false;
|
|
notify.alert(r.message, true);
|
|
})
|
|
.catch(err => {
|
|
self.processing = false;
|
|
notify.alert(err, false);
|
|
});
|
|
}
|
|
|
|
handleBackup(e) {
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
notify.alert('Creating backup', null);
|
|
this.mm
|
|
.backup()
|
|
.then(r => {
|
|
notify.alert(r.message, true);
|
|
})
|
|
.catch(err => {
|
|
notify.alert(err, false);
|
|
});
|
|
}
|
|
|
|
handleReindex(e) {
|
|
if (this.processing) return;
|
|
let self = this;
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
let task = { task: 'cleanup pages indexes' };
|
|
this.processing = true;
|
|
notify.alert('Cleaning up page indexes', null);
|
|
this.admin
|
|
.handleReindex(task)
|
|
.then(r => {
|
|
self.processing = false;
|
|
notify.alert(r.message, true);
|
|
})
|
|
.catch(err => {
|
|
self.processing = false;
|
|
notify.alert(err, false);
|
|
});
|
|
}
|
|
}
|