You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

169 lines
4.9 KiB

var editor = new MediumEditor('.editable', {
buttons: ['bold', 'italic', 'anchor', 'header1', 'header2', 'quote', 'unorderedlist', 'pre'],
placeholder: {text: 'Write something nice...'},
paste: {
// This example includes the default options for paste, if nothing is passed this is what it used
forcePlainText: false,
cleanPastedHTML: true,
cleanReplacements: [],
cleanAttrs: ['class', 'style', 'dir'],
cleanTags: ['meta']
}
});
$(function() {
$('.editable').mediumInsert({
editor: editor,
beginning: true,
addons: {
images: {
deleteScript: '/editor/delete-file',
fileUploadOptions: {
url: '/editor/upload'
}
},
embeds: {
oembedProxy: '/editor/oembed'
}
}
});
$.post('/editor/test-login', {}, function(response) {
if(response.logged_in) {
$('.publish-dropdown .action-publish').removeClass('hidden');
$('.publish-dropdown .action-signin').addClass('hidden');
} else {
$('.publish-dropdown .action-publish').addClass('hidden');
$('.publish-dropdown .action-signin').removeClass('hidden');
}
});
$('#publish_btn').click(function(){
if($('.publish-dropdown').hasClass('hidden')) {
$('.publish-dropdown').removeClass('hidden');
$('#publish-confirm').show();
$('#publish-success').addClass('hidden');
$('#publish-error').addClass('hidden');
$('#publish-help').removeClass('hidden');
} else {
$('.publish-dropdown').addClass('hidden');
}
});
$('#new_btn').click(function(){
if(confirm('This will discard your current post. Are you sure?')) {
reset_page();
}
});
$('#signin-domain').on('keydown', function(e){
if(e.keyCode == 13) {
$('#signin-btn').click();
}
});
$('#signin-btn').click(function(){
window.location = '/auth/start?me=' + encodeURIComponent($('#signin-domain').val()) + '&redirect=/editor';
});
$('#publish-confirm').click(function(){
$('#publish-help').addClass('hidden');
$('#publish-in-progress').removeClass('hidden');
$.post('/editor/publish', {
name: $("#post-name").val(),
body: editor.serialize().content.value
}, function(response) {
if(response.location) {
reset_page().then(function(){
$('#publish-success-url').attr('href', response.location);
$('#publish-in-progress').addClass('hidden');
$('#publish-error-debug').html('').addClass('hidden');
$('#publish-error').addClass('hidden');
$('#publish-success').removeClass('hidden');
});
} else {
$('#publish-in-progress').addClass('hidden');
$('#publish-error-debug').html(response.response).removeClass('hidden');
$('#publish-error').removeClass('hidden');
$('#publish-success').addClass('hidden');
}
});
});
$("#micropub-html-btn").click(function(){
$.post('/settings/html-content', {
html: 1
}, function(data){
$('.micropub-html-warning').hide();
});
});
$.getJSON('/settings/html-content', function(data){
if(data.html == '0') {
$('.micropub-html-warning').show();
}
});
});
function reset_page() {
$("#post-name").val('');
$("#content").html('');
$("#draft-status").text("New");
$("#publish-confirm").hide();
return localforage.setItem('currentdraft', {});
}
function onUpdateReady() {
// Show the notice that says there is a new version of the app
$("#new_version_available").show();
}
window.applicationCache.addEventListener('updateready', onUpdateReady);
if(window.applicationCache.status === window.applicationCache.UPDATEREADY) {
onUpdateReady();
}
/* ************************************************ */
/* autosave loop */
var autosaveTimeout = false;
function contentChanged() {
clearTimeout(autosaveTimeout);
$("#draft-status").text("Draft");
autosaveTimeout = setTimeout(doAutoSave, 1000);
}
function doAutoSave() {
autosaveTimeout = false;
var savedData = {
title: $("#post-name").val(),
body: editor.serialize().content.value
}
localforage.setItem('currentdraft', savedData).then(function(){
$("#draft-status").text("Saved");
});
}
$(function(){
// Restore draft if present
localforage.getItem('currentdraft', function(err,val){
if(val && val.body) {
$("#post-name").val(val.title);
$("#content").html(val.body);
$("#draft-status").text("Restored");
// drop the cursor into the editor which clears the placeholder text
$("#content").focus().click();
}
});
});
/* ************************************************ */
// Not sure why this isn't working
// editor.subscribe('editableInput', function(ev, editable) {
// console.log("stuff changed");
// });
// This one works okay tho, but misses changes from the image uploader
editor.on(document.getElementById('content'), 'input', function(){
contentChanged();
});
$(function(){
$('#post-name').on('keyup', contentChanged);
});