Ghost/ghost/admin/views/debug.js

190 lines
7.8 KiB
JavaScript
Raw Normal View History

/*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'
});
}
});
},
});
}());