diff options
Diffstat (limited to 'public/editor-files/editor.js')
-rw-r--r-- | public/editor-files/editor.js | 171 |
1 files changed, 171 insertions, 0 deletions
diff --git a/public/editor-files/editor.js b/public/editor-files/editor.js new file mode 100644 index 0000000..a01f33a --- /dev/null +++ b/public/editor-files/editor.js @@ -0,0 +1,171 @@ +var editor = new MediumEditor('.editable', { + toolbar: { + buttons: ['bold', 'italic', 'anchor', 'h1', 'h2', '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: '/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); +}); |