var editor = new MediumEditor('.editable', {
|
|
toolbar: {
|
|
buttons: ['bold', 'italic', 'anchor', 'h2', 'h3', 'quote', 'pre', 'unorderedlist']
|
|
},
|
|
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: null
|
|
}
|
|
}
|
|
});
|
|
|
|
$.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');
|
|
$('#publish-fields').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');
|
|
$('#publish-fields').addClass('hidden');
|
|
|
|
var category = $("#post-tags").tokenfield("getTokens").map(function(t){ return t.value});
|
|
|
|
$.post('/editor/publish', {
|
|
name: $("#post-name").val(),
|
|
body: editor.serialize().content.value,
|
|
category: category,
|
|
slug: $("#post-slug").val(),
|
|
status: $("#post-status").val(),
|
|
publish: $("#post-publish-date").val()
|
|
}, 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');
|
|
$('#publish-fields').removeClass('hidden');
|
|
}
|
|
});
|
|
});
|
|
|
|
$("#micropub-html-btn").click(function(){
|
|
$.post('/settings/html-content', {
|
|
html: 1
|
|
}, function(data){
|
|
$('.micropub-html-warning').hide();
|
|
});
|
|
});
|
|
|
|
$("#post-status").change(function(){
|
|
$("#published-status-warning").removeClass("hidden");
|
|
});
|
|
|
|
$("#post-publish-date").change(function(){
|
|
if($("#post-publish-date").val() == "") {
|
|
$("#post-publish-date").val("now");
|
|
} else {
|
|
// Parse and verify the publish date when it's changed
|
|
$.post('/editor/parse-date', {
|
|
date: $("#post-publish-date").val(),
|
|
tzoffset: (new Date().getTimezoneOffset())
|
|
}, function(response) {
|
|
if(response.date) {
|
|
$("#post-publish-date").val(response.date);
|
|
} else {
|
|
$("#post-publish-date").val("now");
|
|
}
|
|
});
|
|
}
|
|
});
|
|
|
|
$.getJSON('/settings/html-content', function(data){
|
|
if(data.html == '0') {
|
|
$('.micropub-html-warning').show();
|
|
}
|
|
});
|
|
});
|
|
|
|
function reset_page() {
|
|
$("#post-name").val('');
|
|
$("#post-slug").val('');
|
|
$("#post-tags").tokenfield('setTokens',[]);
|
|
$("#post-status").val('published');
|
|
$("#post-publish-date").val('now');
|
|
$("#content").html('');
|
|
$("#draft-status").text("New");
|
|
$("#publish-confirm").hide();
|
|
return localforage.setItem('currentdraft', {});
|
|
}
|
|
|
|
/* ************************************************ */
|
|
/* 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,
|
|
tags: $("#post-tags").tokenfield('getTokensList'),
|
|
slug: $("#post-slug").val(),
|
|
status: $("#post-status").val(),
|
|
publish: $("#post-publish-date").val()
|
|
}
|
|
localforage.setItem('currentdraft', savedData).then(function(){
|
|
$("#draft-status").text("Saved");
|
|
});
|
|
}
|
|
function activateTokenField() {
|
|
$("#post-tags").tokenfield({
|
|
createTokensOnBlur: true,
|
|
beautify: true
|
|
}).on('tokenfield:createdtoken', contentChanged)
|
|
.on('tokenfield:removedtoken', contentChanged);
|
|
}
|
|
$(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");
|
|
$("#post-tags").val(val.tags);
|
|
$("#post-slug").val(val.slug);
|
|
$("#post-status").val(val.status);
|
|
$("#post-publish-date").val(val.publish);
|
|
// drop the cursor into the editor which clears the placeholder text
|
|
$("#content").focus().click();
|
|
activateTokenField();
|
|
} else {
|
|
activateTokenField();
|
|
}
|
|
});
|
|
});
|
|
/* ************************************************ */
|
|
|
|
|
|
// 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, #post-tags, #post-slug, #post-publish-date').on('keyup', contentChanged);
|
|
});
|