mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-12 06:25:51 +03:00
91a0c7c666
closes #2550 - Added new API module named 'mail' - Added routes for the mail endpoint - Added 'send a test email' button to the debug settigns page - Added handler to this button which sends and AJAX request to the mail API endpoint
190 lines
7.8 KiB
JavaScript
190 lines
7.8 KiB
JavaScript
/*global Ghost, $ */
|
|
(function () {
|
|
"use strict";
|
|
|
|
Ghost.Views.Debug = Ghost.View.extend({
|
|
events: {
|
|
"click .settings-menu a": "handleMenuClick",
|
|
"click #startupload": "handleUploadClick",
|
|
"click .js-delete": "handleDeleteClick",
|
|
"click #sendtestmail": "handleSendTestMailClick"
|
|
},
|
|
|
|
initialize: function () {
|
|
var view = this;
|
|
|
|
this.uploadButton = this.$el.find('#startupload');
|
|
|
|
// Disable import button and initizalize BlueImp file upload
|
|
this.uploadButton.prop('disabled', 'disabled');
|
|
$('#importfile').fileupload({
|
|
url: Ghost.paths.apiRoot + '/db/',
|
|
limitMultiFileUploads: 1,
|
|
replaceFileInput: false,
|
|
headers: {
|
|
'X-CSRF-Token': $("meta[name='csrf-param']").attr('content')
|
|
},
|
|
dataType: 'json',
|
|
add: function (e, data) {
|
|
/*jshint unused:false*/
|
|
|
|
// Bind the upload data to the view, so it is
|
|
// available to the click handler, and enable the
|
|
// upload button.
|
|
view.fileUploadData = data;
|
|
data.context = view.uploadButton.removeProp('disabled');
|
|
},
|
|
done: function (e, data) {
|
|
/*jshint unused:false*/
|
|
$('#startupload').text('Import');
|
|
if (!data.result) {
|
|
throw new Error('No response received from server.');
|
|
}
|
|
if (!data.result.message) {
|
|
throw new Error('Unknown error');
|
|
}
|
|
|
|
Ghost.notifications.addItem({
|
|
type: 'success',
|
|
message: data.result.message,
|
|
status: 'passive'
|
|
});
|
|
},
|
|
error: function (response) {
|
|
$('#startupload').text('Import');
|
|
var responseJSON = response.responseJSON,
|
|
message = responseJSON && responseJSON.error ? responseJSON.error : 'unknown';
|
|
Ghost.notifications.addItem({
|
|
type: 'error',
|
|
message: ['A problem was encountered while importing new content to your blog. Error: ', message].join(''),
|
|
status: 'passive'
|
|
});
|
|
}
|
|
|
|
});
|
|
|
|
},
|
|
|
|
handleMenuClick: function (ev) {
|
|
ev.preventDefault();
|
|
|
|
var $target = $(ev.currentTarget);
|
|
|
|
// Hide the current content
|
|
this.$(".settings-content").hide();
|
|
|
|
// Show the clicked content
|
|
this.$("#debug-" + $target.attr("class")).show();
|
|
|
|
return false;
|
|
},
|
|
|
|
handleUploadClick: function (ev) {
|
|
ev.preventDefault();
|
|
|
|
if (!this.uploadButton.prop('disabled')) {
|
|
this.fileUploadData.context = this.uploadButton.text('Importing');
|
|
this.fileUploadData.submit();
|
|
}
|
|
|
|
// Prevent double post by disabling the button.
|
|
this.uploadButton.prop('disabled', 'disabled');
|
|
},
|
|
|
|
handleDeleteClick: function (ev) {
|
|
ev.preventDefault();
|
|
this.addSubview(new Ghost.Views.Modal({
|
|
model: {
|
|
options: {
|
|
close: true,
|
|
confirm: {
|
|
accept: {
|
|
func: function () {
|
|
$.ajax({
|
|
url: Ghost.paths.apiRoot + '/db/',
|
|
type: 'DELETE',
|
|
headers: {
|
|
'X-CSRF-Token': $("meta[name='csrf-param']").attr('content')
|
|
},
|
|
success: function onSuccess(response) {
|
|
if (!response) {
|
|
throw new Error('No response received from server.');
|
|
}
|
|
if (!response.message) {
|
|
throw new Error(response.detail || 'Unknown error');
|
|
}
|
|
|
|
Ghost.notifications.addItem({
|
|
type: 'success',
|
|
message: response.message,
|
|
status: 'passive'
|
|
});
|
|
|
|
},
|
|
error: function onError(response) {
|
|
var responseText = JSON.parse(response.responseText),
|
|
message = responseText && responseText.error ? responseText.error : 'unknown';
|
|
Ghost.notifications.addItem({
|
|
type: 'error',
|
|
message: ['A problem was encountered while deleting content from your blog. Error: ', message].join(''),
|
|
status: 'passive'
|
|
});
|
|
|
|
}
|
|
});
|
|
},
|
|
text: "Delete",
|
|
buttonClass: "button-delete"
|
|
},
|
|
reject: {
|
|
func: function () {
|
|
return true;
|
|
},
|
|
text: "Cancel",
|
|
buttonClass: "button"
|
|
}
|
|
},
|
|
type: "action",
|
|
style: ["wide", "centered"],
|
|
animation: 'fade'
|
|
},
|
|
content: {
|
|
template: 'blank',
|
|
title: 'Would you really like to delete all content from your blog?',
|
|
text: '<p>This is permanent! No backups, no restores, no magic undo button. <br /> We warned you, ok?</p>'
|
|
}
|
|
}
|
|
}));
|
|
},
|
|
|
|
handleSendTestMailClick: function (ev) {
|
|
ev.preventDefault();
|
|
|
|
$.ajax({
|
|
url: Ghost.paths.apiRoot + '/mail/test/',
|
|
type: 'POST',
|
|
headers: {
|
|
'X-CSRF-Token': $("meta[name='csrf-param']").attr('content')
|
|
},
|
|
success: function onSuccess(response) {
|
|
Ghost.notifications.addItem({
|
|
type: 'success',
|
|
message: ['Check your email for the test message: ', response.message].join(''),
|
|
status: 'passive'
|
|
});
|
|
},
|
|
error: function onError(response) {
|
|
var responseText = JSON.parse(response.responseText),
|
|
message = responseText && responseText.error ? responseText.error : 'unknown';
|
|
Ghost.notifications.addItem({
|
|
type: 'error',
|
|
message: ['A problem was encountered while sending the test email: ', message].join(''),
|
|
status: 'passive'
|
|
});
|
|
|
|
}
|
|
});
|
|
},
|
|
});
|
|
}());
|