diff --git a/assets/public/js/app.min.js b/assets/public/js/app.min.js index 8168a6bd..6e5ddf1d 100644 --- a/assets/public/js/app.min.js +++ b/assets/public/js/app.min.js @@ -1 +1 @@ -$(document).ready(function(){$("#logout").click(function(a){return a.preventDefault(),$.ajax({type:"GET",url:"/admin",async:!1,username:"username",password:"password",headers:{Authorization:"Basic xxx"}}).fail(function(){window.location="/"}),!1}),$(document).pjax("a[data-pjax]","#content")}),$(document).on("ready pjax:end",function(){function a(){this.style.height="5px",this.style.height=this.scrollHeight+"px"}return $("#content").off(),document.title=document.getElementById("site-title").innerHTML,$("textarea").each(a),$("textarea").keyup(a),$(window).resize(function(){$("textarea").each(a)}),$("main").hasClass("browse")&&$(document).trigger("page:browse"),$(".editor")[0]&&$(document).trigger("page:editor"),!1}),$(document).on("page:browse",function(){var a="#foreground",b=new Object;b.selector="form#delete",b.form=$(b.selector),b.row="",b.button="",b.url="",$("#content").on("click",".delete",function(c){return c.preventDefault(),b.button=$(this),b.row=$(this).parent().parent(),$(a).fadeIn(200),b.url=b.row.find(".filename").text(),b.form.find("span").text(b.url),b.form.fadeIn(200),!1}),$("#content").on("submit",b.selector,function(c){c.preventDefault();var d=new XMLHttpRequest;return d.open("DELETE",b.button.data("file")),d.send(),d.onreadystatechange=function(){if(4==d.readyState){var c=JSON.parse(d.responseText),e="success",f=5e3;$(a).fadeOut(200),b.form.fadeOut(200),b.row.fadeOut(200),200!=d.status&&(e="error",f=!1),notification({text:c.message,type:e,timeout:f})}},!1}),$("#content").on("change",'input[type="file"]',function(a){a.preventDefault(),files=a.target.files;var b=new FormData;return $.each(files,function(a,c){b.append(a,c)}),$.ajax({url:window.location.pathname,type:"POST",data:b,cache:!1,dataType:"json",headers:{"X-Upload":"true"},processData:!1,contentType:!1}).done(function(a){notification({text:"File(s) uploaded successfully.",type:"success",timeout:5e3}),$.pjax({url:window.location.pathname,container:"#content"})}).fail(function(a){notification({text:"Something went wrong.",type:"error"}),console.log(a)}),!1}),$("#content").on("click","#upload",function(a){return a.preventDefault(),$('.actions input[type="file"]').click(),!1});var c=new Object;c.selector="form#new",c.form=$(c.selector),c.input=c.selector+' input[type="text"]',c.button="",c.url="",$("#content").on("click",".new",function(b){return b.preventDefault(),c.button=$(this),$(a).fadeIn(200),c.form.fadeIn(200),!1}),$("#content").on("keypress",c.input,function(a){return 13==a.keyCode?(a.preventDefault(),$(c.form).submit(),!1):void 0}),$("#content").on("submit",c.selector,function(a){a.preventDefault();var b=c.form.find('input[type="text"]').val(),d=b.split(":"),e="",f="";if(""==b)return notification({text:"You have to write something. If you want to close the box, click the button again.",type:"warning",timeout:5e3}),!1;if(1==d.length)e=b;else{if(2!=d.length)return notification({text:"Hmm... I don't understand you. Try writing something like 'name[:archetype]'.",type:"error"}),!1;e=d[0],f=d[1]}var g={filename:e,archetype:f},h=new XMLHttpRequest;return h.open("POST",window.location.pathname),h.setRequestHeader("Content-Type","application/json;charset=UTF-8"),h.send(JSON.stringify(g)),h.onreadystatechange=function(){if(4==h.readyState){var a=JSON.parse(h.responseText),b="success",c=5e3;200!=h.status&&(b="error",c=!1),notification({text:a.message,type:b,timeout:c}),200==h.status&&$.pjax({url:data.Location,container:"#content"})}},!1});var d=new Object;d.selector="form#rename",d.form=$(d.selector),d.input=d.selector+' input[type="text"]',d.button="",d.url="",$("#content").on("click",".rename",function(b){return b.preventDefault(),d.button=$(this),$(a).fadeIn(200),d.url=$(this).parent().parent().find(".filename").text(),d.form.fadeIn(200),d.form.find("span").text(d.url),d.form.find('input[type="text"]').val(d.url),!1}),$("#content").on("keypress",d.input,function(a){return 13==a.keyCode?(a.preventDefault(),$(d.form).submit(),!1):void 0}),$("#content").on("submit",d.selector,function(a){a.preventDefault();var b=d.form.find('input[type="text"]').val();if(""===b)return!1;"/"!=b.substring(0,1)&&(b=window.location.pathname.replace("/admin/browse/","")+"/"+b);var c={filename:b},e=new XMLHttpRequest;return e.open("PUT",d.url),e.setRequestHeader("Content-Type","application/json;charset=UTF-8"),e.send(JSON.stringify(c)),e.onreadystatechange=function(){if(4==e.readyState){var a=JSON.parse(e.responseText),b="success",c=5e3;200!=e.status&&(b="error",c=!1),$.pjax({url:window.location.pathname,container:"#content"}),notification({text:a.message,type:b,timeout:c})}},!1});var e=new Object;e.selector="form#git",e.form=$(e.selector),e.input=e.selector+' input[type="text"]',$("#content").on("click","button.git",function(b){return b.preventDefault(),$(a).fadeIn(200),e.form.fadeIn(200),!1}),$("#content").on("keypress",e.input,function(a){return 13==a.keyCode?(a.preventDefault(),$(e.form).submit(),!1):void 0}),$("#content").on("submit",e.selector,function(a){a.preventDefault();var b=e.form.find('input[type="text"]').val();if(""==b)return notification({text:"You have to write something. If you want to close the box, click outside of the box.",type:"warning",timeout:5e3}),!1;var c=new XMLHttpRequest;return c.open("POST","/admin/git"),c.setRequestHeader("Content-Type","application/json;charset=UTF-8"),c.send(JSON.stringify({command:b})),c.onreadystatechange=function(){if(4==c.readyState){var a=JSON.parse(c.responseText);200==c.status?notification({text:a.message,type:"success"}):notification({text:a.message,type:"error"})}},!1}),$("#content").on("click",".close",function(b){return b.preventDefault(),$(this).parent().parent().fadeOut(200),$(a).click(),!1}),$("#content").on("click",a,function(f){return f.preventDefault(),$(a).fadeOut(200),c.form.fadeOut(200),d.form.fadeOut(200),b.form.fadeOut(200),e.form.fadeOut(200),!1})}),$(document).on("page:editor",function(){var a=$(".editor"),b=$("#editor-preview"),c=$("#editor-source");if(a.hasClass("complete")&&$("#content").on("keyup","#site-title",function(){$(".frontmatter #title").val($(this).val())}),!a.hasClass("frontmatter-only")){var d=$("#editor-source").data("mode"),e=$('textarea[name="content"]').hide(),f=ace.edit("editor-source");f.getSession().setMode("ace/mode/"+d),f.getSession().setValue(e.val()),f.getSession().on("change",function(){e.val(f.getSession().getValue())}),f.setOptions({wrap:!0,maxLines:1/0,theme:"ace/theme/github",showPrintMargin:!1,fontSize:"1em",minLines:20}),$("#content").on("click","#see-source",function(a){a.preventDefault(),b.hide(),c.fadeIn(),$(this).addClass("active"),$("#see-preview").removeClass("active"),$("#see-preview").data("previewing","false")}),$("#content").on("click","#see-preview",function(a){if(a.preventDefault(),"true"==$(this).data("previewing"))b.hide(),c.fadeIn(),$(this).removeClass("active"),$("#see-source").addClass("active"),$(this).data("previewing","false");else{var d=new showdown.Converter,e=f.getValue(),g=d.makeHtml(e);c.hide(),b.html(g).fadeIn(),$(this).addClass("active"),$("#see-source").removeClass("active"),$(this).data("previewing","true")}return!1})}$("#content").on("keypress","input",function(a){return 13==a.keyCode?(a.preventDefault(),$('input[value="Save"]').focus().click(),!1):void 0}),$("#content").on("submit","form",function(d){d.preventDefault(),a.hasClass("frontmatter-only")||(b.html("").fadeOut(),$("#see-preview").data("previewing","false"),c.fadeIn());var e=$(this).find("input[type=submit]:focus"),f={content:$(this).serializeJSON(),type:e.data("type"),schedule:e.data("schedule"),regenerate:e.data("regenerate")},g=new XMLHttpRequest;return g.open("POST",window.location),g.setRequestHeader("Content-Type","application/json;charset=UTF-8"),g.send(JSON.stringify(f)),g.onreadystatechange=function(){if(4==g.readyState){var a=JSON.parse(g.responseText),b="success",c=5e3;200==g.status&&(a.message=e.data("message")),200!=g.status&&(b="error",c=!1),notification({text:a.message,type:b,timeout:c})}},!1}),$("#content").on("click",".add",function(a){if(a.preventDefault(),defaultID="lorem-ipsum-sin-dolor-amet",newItem=$("#"+defaultID),newItem.length&&newItem.remove(),block=$(this).parent().parent(),blockType=block.data("type"),blockID=block.attr("id"),"array"==blockType&&(newID=blockID+"[]",input=blockID,input=input.replace(/\[/,"\\["),input=input.replace(/\]/,"\\]"),block.append('
div").length+'" data-type="array-item">
'),console.log("New array item added.")),block.is("div")&&block.hasClass("frontmatter")&&(block=$(".blocks"),blockType="object"),"object"==blockType){if(block.append('
'),newItem=$("#"+defaultID),newItem.html(''),field=$("#name-"+defaultID),!document.cookie.replace(/(?:(?:^|.*;\s*)placeholdertip\s*\=\s*([^;]*).*$)|^.*$/,"$1")){var b=new Date;b.setDate(b.getDate()+365),document.cookie="placeholdertip=true; expires="+b.toUTCString+"; path=/",notification({text:'Write the field name and then press enter. If you want to create an array or an object, end the name with ":array" or ":object".',type:"information"})}$(field).keypress(function(a){return 13==a.which?(a.preventDefault(),value=field.val(),""==value?(newItem.remove(),!1):(elements=value.split(":"),elements.length>2?(notification({text:"Invalid syntax. It must be 'name[:type]'.",type:"error"}),!1):2==elements.length&&"array"!=elements[1]&&"object"!=elements[1]?(notification({text:"Only arrays and objects are allowed.",type:"error"}),!1):(field.remove(),"undefined"==typeof blockID?blockID=elements[0]:blockID=blockID+"["+elements[0]+"]",1==elements.length?(newItem.attr("id","block-"+blockID),newItem.append('
'),newItem.prepend(' ')):(type="","array"==elements[1]?type="array":type="object",template='

${elements[0]}

',template=template.replace("${blockID}",blockID),template=template.replace("${elements[0]}",elements[0]),template=template.replace("${type}",type),newItem.after(template),newItem.remove(),console.log('"'+blockID+'" block of type "'+type+'" added.')),!1))):void 0})}return!1}),$("#content").on("click",".delete",function(a){return a.preventDefault(),button=$(this),name=button.parent().parent().attr("for")||button.parent().parent().attr("id")||button.parent().parent().parent().attr("id"),name=name.replace(/\[/,"\\["),name=name.replace(/\]/,"\\]"),console.log(name),$('label[for="'+name+'"]').fadeOut().remove(),$("#"+name).fadeOut().remove(),!1})}),$.noty.themes.admin={name:"admin",helpers:{},modal:{css:{position:"fixed",width:"100%",height:"100%",backgroundColor:"#000",zIndex:1e4,opacity:.6,display:"none",left:0,top:0}}},$.noty.defaults={layout:"topRight",theme:"admin",dismissQueue:!0,animation:{open:"animated bounceInRight",close:"animated fadeOut",easing:"swing",speed:500},timeout:!1,force:!1,modal:!1,maxVisible:5,killer:!1,closeWith:["click"],callback:{onShow:function(){},afterShow:function(){},onClose:function(){},afterClose:function(){},onCloseClick:function(){}},buttons:!1},notification=function(a){var b;switch(a.type){case"success":b='';break;case"error":b='';break;case"warning":b='';break;case"information":b='';break;default:b=''}var c={template:'
'+b+'
'};if(a=$.extend({},c,a),noty(a),!document.cookie.replace(/(?:(?:^|.*;\s*)stickynoties\s*\=\s*([^;]*).*$)|^.*$/,"$1")&&!a.timeout){var d=new Date;d.setDate(d.getDate()+365),document.cookie="stickynoties=true; expires="+d.toUTCString+"; path=/",notification({text:"Some notifications are sticky. If it doesn't go away, click to dismiss it.",type:"information"})}}; \ No newline at end of file +$(document).ready(function(){$("#logout").click(function(a){return a.preventDefault(),$.ajax({type:"GET",url:"/admin",async:!1,username:"username",password:"password",headers:{Authorization:"Basic xxx"}}).fail(function(){window.location="/"}),!1}),$(document).pjax("a[data-pjax]","#content")}),$(document).on("ready pjax:end",function(){function a(){this.style.height="5px",this.style.height=this.scrollHeight+"px"}return $("#content").off(),document.title=document.getElementById("site-title").innerHTML,$("textarea").each(a),$("textarea").keyup(a),$(window).resize(function(){$("textarea").each(a)}),$("main").hasClass("browse")&&$(document).trigger("page:browse"),$(".editor")[0]&&$(document).trigger("page:editor"),!1}),$(document).on("page:browse",function(){var a="#foreground",b=new Object;b.selector="form#delete",b.form=$(b.selector),b.row="",b.button="",b.url="",$("#content").on("click",".delete",function(c){return c.preventDefault(),b.button=$(this),b.row=$(this).parent().parent(),$(a).fadeIn(200),b.url=b.row.find(".filename").text(),b.form.find("span").text(b.url),b.form.fadeIn(200),!1}),$("#content").on("submit",b.selector,function(c){c.preventDefault();var d=new XMLHttpRequest;return d.open("DELETE",b.button.data("file")),d.send(),d.onreadystatechange=function(){if(4==d.readyState){var c=JSON.parse(d.responseText),e="success",f=5e3;$(a).fadeOut(200),b.form.fadeOut(200),b.row.fadeOut(200),200!=d.status&&(e="error",f=!1),notification({text:c.message,type:e,timeout:f})}},!1}),$("#content").on("change",'input[type="file"]',function(a){a.preventDefault(),files=a.target.files;var b=new FormData;return $.each(files,function(a,c){b.append(a,c)}),$.ajax({url:window.location.pathname,type:"POST",data:b,cache:!1,dataType:"json",headers:{"X-Upload":"true"},processData:!1,contentType:!1}).done(function(a){notification({text:"File(s) uploaded successfully.",type:"success",timeout:5e3}),$.pjax({url:window.location.pathname,container:"#content"})}).fail(function(a){notification({text:"Something went wrong.",type:"error"}),console.log(a)}),!1}),$("#content").on("click","#upload",function(a){return a.preventDefault(),$('.actions input[type="file"]').click(),!1});var c=new Object;c.selector="form#new",c.form=$(c.selector),c.input=c.selector+' input[type="text"]',c.button="",c.url="",$("#content").on("click",".new",function(b){return b.preventDefault(),c.button=$(this),$(a).fadeIn(200),c.form.fadeIn(200),!1}),$("#content").on("keypress",c.input,function(a){return 13==a.keyCode?(a.preventDefault(),$(c.form).submit(),!1):void 0}),$("#content").on("submit",c.selector,function(a){a.preventDefault();var b=c.form.find('input[type="text"]').val(),d=b.split(":"),e="",f="";if(""==b)return notification({text:"You have to write something. If you want to close the box, click the button again.",type:"warning",timeout:5e3}),!1;if(1==d.length)e=b;else{if(2!=d.length)return notification({text:"Hmm... I don't understand you. Try writing something like 'name[:archetype]'.",type:"error"}),!1;e=d[0],f=d[1]}var g={filename:e,archetype:f},h=new XMLHttpRequest;return h.open("POST",window.location.pathname),h.setRequestHeader("Content-Type","application/json;charset=UTF-8"),h.send(JSON.stringify(g)),h.onreadystatechange=function(){if(4==h.readyState){var a=JSON.parse(h.responseText),b="success",c=5e3;200!=h.status&&(b="error",c=!1),notification({text:a.message,type:b,timeout:c}),200==h.status&&$.pjax({url:data.Location,container:"#content"})}},!1});var d=new Object;d.selector="form#rename",d.form=$(d.selector),d.input=d.selector+' input[type="text"]',d.button="",d.url="",$("#content").on("click",".rename",function(b){return b.preventDefault(),d.button=$(this),$(a).fadeIn(200),d.url=$(this).parent().parent().find(".filename").text(),d.form.fadeIn(200),d.form.find("span").text(d.url),d.form.find('input[type="text"]').val(d.url),!1}),$("#content").on("keypress",d.input,function(a){return 13==a.keyCode?(a.preventDefault(),$(d.form).submit(),!1):void 0}),$("#content").on("submit",d.selector,function(a){a.preventDefault();var b=d.form.find('input[type="text"]').val();if(""===b)return!1;"/"!=b.substring(0,1)&&(b=window.location.pathname.replace("/admin/browse/","")+"/"+b);var c={filename:b},e=new XMLHttpRequest;return e.open("PUT",d.url),e.setRequestHeader("Content-Type","application/json;charset=UTF-8"),e.send(JSON.stringify(c)),e.onreadystatechange=function(){if(4==e.readyState){var a=JSON.parse(e.responseText),b="success",c=5e3;200!=e.status&&(b="error",c=!1),$.pjax({url:window.location.pathname,container:"#content"}),notification({text:a.message,type:b,timeout:c})}},!1});var e=new Object;e.selector="form#git",e.form=$(e.selector),e.input=e.selector+' input[type="text"]',$("#content").on("click","button.git",function(b){return b.preventDefault(),$(a).fadeIn(200),e.form.fadeIn(200),!1}),$("#content").on("keypress",e.input,function(a){return 13==a.keyCode?(a.preventDefault(),$(e.form).submit(),!1):void 0}),$("#content").on("submit",e.selector,function(a){a.preventDefault();var b=e.form.find('input[type="text"]').val();if(""==b)return notification({text:"You have to write something. If you want to close the box, click outside of the box.",type:"warning",timeout:5e3}),!1;var c=new XMLHttpRequest;return c.open("POST","/admin/git"),c.setRequestHeader("Content-Type","application/json;charset=UTF-8"),c.send(JSON.stringify({command:b})),c.onreadystatechange=function(){if(4==c.readyState){var a=JSON.parse(c.responseText);200==c.status?notification({text:a.message,type:"success"}):notification({text:a.message,type:"error"})}},!1}),$("#content").on("click",".close",function(b){return b.preventDefault(),$(this).parent().parent().fadeOut(200),$(a).click(),!1}),$("#content").on("click",a,function(f){return f.preventDefault(),$(a).fadeOut(200),c.form.fadeOut(200),d.form.fadeOut(200),b.form.fadeOut(200),e.form.fadeOut(200),!1})}),$(document).on("page:editor",function(){var a=$(".editor"),b=$("#editor-preview"),c=$("#editor-source");if(a.hasClass("complete")&&$("#content").on("keyup","#site-title",function(){$(".frontmatter #title").val($(this).val())}),!a.hasClass("frontmatter-only")){var d=$("#editor-source").data("mode"),e=$('textarea[name="content"]').hide(),f=ace.edit("editor-source");f.getSession().setMode("ace/mode/"+d),f.getSession().setValue(e.val()),f.getSession().on("change",function(){e.val(f.getSession().getValue())}),f.setOptions({wrap:!0,maxLines:1/0,theme:"ace/theme/github",showPrintMargin:!1,fontSize:"1em",minLines:20}),$("#content").on("click","#see-source",function(a){a.preventDefault(),b.hide(),c.fadeIn(),$(this).addClass("active"),$("#see-preview").removeClass("active"),$("#see-preview").data("previewing","false")}),$("#content").on("click","#see-preview",function(a){if(a.preventDefault(),"true"==$(this).data("previewing"))b.hide(),c.fadeIn(),$(this).removeClass("active"),$("#see-source").addClass("active"),$(this).data("previewing","false");else{var d=new showdown.Converter,e=f.getValue(),g=d.makeHtml(e);c.hide(),b.html(g).fadeIn(),$(this).addClass("active"),$("#see-source").removeClass("active"),$(this).data("previewing","true")}return!1})}$("#content").on("keypress","input",function(a){return 13==a.keyCode?(a.preventDefault(),$('input[value="Save"]').focus().click(),!1):void 0}),$("#content").on("submit","form",function(d){d.preventDefault(),a.hasClass("frontmatter-only")||(b.html("").fadeOut(),$("#see-preview").data("previewing","false"),c.fadeIn());var e=$(this).find("input[type=submit]:focus"),f={content:$(this).serializeJSON(),contentType:e.data("type"),schedule:e.data("schedule"),regenerate:e.data("regenerate")},g=new XMLHttpRequest;return g.open("POST",window.location),g.setRequestHeader("Content-Type","application/json;charset=UTF-8"),g.send(JSON.stringify(f)),g.onreadystatechange=function(){if(4==g.readyState){var a=JSON.parse(g.responseText),b="success",c=5e3;200==g.status&&(a.message=e.data("message")),200!=g.status&&(b="error",c=!1),notification({text:a.message,type:b,timeout:c})}},!1}),$("#content").on("click",".add",function(a){if(a.preventDefault(),defaultID="lorem-ipsum-sin-dolor-amet",newItem=$("#"+defaultID),newItem.length&&newItem.remove(),block=$(this).parent().parent(),blockType=block.data("type"),blockID=block.attr("id"),"array"==blockType&&(newID=blockID+"[]",input=blockID,input=input.replace(/\[/,"\\["),input=input.replace(/\]/,"\\]"),block.append('
div").length+'" data-type="array-item">
'),console.log("New array item added.")),block.is("div")&&block.hasClass("frontmatter")&&(block=$(".blocks"),blockType="object"),"object"==blockType){if(block.append('
'),newItem=$("#"+defaultID),newItem.html(''),field=$("#name-"+defaultID),!document.cookie.replace(/(?:(?:^|.*;\s*)placeholdertip\s*\=\s*([^;]*).*$)|^.*$/,"$1")){var b=new Date;b.setDate(b.getDate()+365),document.cookie="placeholdertip=true; expires="+b.toUTCString+"; path=/",notification({text:'Write the field name and then press enter. If you want to create an array or an object, end the name with ":array" or ":object".',type:"information"})}$(field).keypress(function(a){return 13==a.which?(a.preventDefault(),value=field.val(),""==value?(newItem.remove(),!1):(elements=value.split(":"),elements.length>2?(notification({text:"Invalid syntax. It must be 'name[:type]'.",type:"error"}),!1):2==elements.length&&"array"!=elements[1]&&"object"!=elements[1]?(notification({text:"Only arrays and objects are allowed.",type:"error"}),!1):(field.remove(),"undefined"==typeof blockID?blockID=elements[0]:blockID=blockID+"["+elements[0]+"]",1==elements.length?(newItem.attr("id","block-"+blockID),newItem.append('
'),newItem.prepend(' ')):(type="","array"==elements[1]?type="array":type="object",template='

${elements[0]}

',template=template.replace("${blockID}",blockID),template=template.replace("${elements[0]}",elements[0]),template=template.replace("${type}",type),newItem.after(template),newItem.remove(),console.log('"'+blockID+'" block of type "'+type+'" added.')),!1))):void 0})}return!1}),$("#content").on("click",".delete",function(a){return a.preventDefault(),button=$(this),name=button.parent().parent().attr("for")||button.parent().parent().attr("id")||button.parent().parent().parent().attr("id"),name=name.replace(/\[/,"\\["),name=name.replace(/\]/,"\\]"),console.log(name),$('label[for="'+name+'"]').fadeOut().remove(),$("#"+name).fadeOut().remove(),!1})}),$.noty.themes.admin={name:"admin",helpers:{},modal:{css:{position:"fixed",width:"100%",height:"100%",backgroundColor:"#000",zIndex:1e4,opacity:.6,display:"none",left:0,top:0}}},$.noty.defaults={layout:"topRight",theme:"admin",dismissQueue:!0,animation:{open:"animated bounceInRight",close:"animated fadeOut",easing:"swing",speed:500},timeout:!1,force:!1,modal:!1,maxVisible:5,killer:!1,closeWith:["click"],callback:{onShow:function(){},afterShow:function(){},onClose:function(){},afterClose:function(){},onCloseClick:function(){}},buttons:!1},notification=function(a){var b;switch(a.type){case"success":b='';break;case"error":b='';break;case"warning":b='';break;case"information":b='';break;default:b=''}var c={template:'
'+b+'
'};if(a=$.extend({},c,a),noty(a),!document.cookie.replace(/(?:(?:^|.*;\s*)stickynoties\s*\=\s*([^;]*).*$)|^.*$/,"$1")&&!a.timeout){var d=new Date;d.setDate(d.getDate()+365),document.cookie="stickynoties=true; expires="+d.toUTCString+"; path=/",notification({text:"Some notifications are sticky. If it doesn't go away, click to dismiss it.",type:"information"})}}; \ No newline at end of file diff --git a/assets/public_src/js/editor.js b/assets/public_src/js/editor.js index d015366e..b87fb31e 100644 --- a/assets/public_src/js/editor.js +++ b/assets/public_src/js/editor.js @@ -92,7 +92,7 @@ $(document).on('page:editor', function() { var button = $(this).find("input[type=submit]:focus"); var data = { content: $(this).serializeJSON(), - type: button.data("type"), + contentType: button.data("type"), schedule: button.data("schedule"), regenerate: button.data("regenerate") } diff --git a/assets/templates/editor.tmpl b/assets/templates/editor.tmpl index 10732ba0..8916a5d4 100644 --- a/assets/templates/editor.tmpl +++ b/assets/templates/editor.tmpl @@ -49,7 +49,7 @@ {{ if and (eq .Class "complete") ( .IsPost ) }} {{ end }} - +

diff --git a/routes/editor/editor.go b/routes/editor/editor.go index 8b1b0df3..4c8ad09e 100644 --- a/routes/editor/editor.go +++ b/routes/editor/editor.go @@ -8,16 +8,22 @@ import ( "github.com/hacdias/caddy-hugo/config" ) +var ( + filename string + conf *config.Config +) + // ServeHTTP serves the editor page func ServeHTTP(w http.ResponseWriter, r *http.Request, c *config.Config) (int, error) { - filename := strings.Replace(r.URL.Path, "/admin/edit/", "", 1) + conf = c + filename = strings.Replace(r.URL.Path, "/admin/edit/", "", 1) filename = c.Path + filename switch r.Method { case "POST": - return POST(w, r, c, filename) + return POST(w, r) case "GET": - return GET(w, r, c, filename) + return GET(w, r) default: return http.StatusMethodNotAllowed, errors.New("Invalid method.") } diff --git a/routes/editor/get.go b/routes/editor/get.go index 88568930..7786409f 100644 --- a/routes/editor/get.go +++ b/routes/editor/get.go @@ -28,7 +28,7 @@ type editor struct { } // GET handles the GET method on editor page -func GET(w http.ResponseWriter, r *http.Request, c *config.Config, filename string) (int, error) { +func GET(w http.ResponseWriter, r *http.Request) (int, error) { // Check if the file format is supported. If not, send a "Not Acceptable" // header and an error if !templates.CanBeEdited(filename) { @@ -55,8 +55,8 @@ func GET(w http.ResponseWriter, r *http.Request, c *config.Config, filename stri // Create a new editor variable and set the extension page := new(editor) page.Mode = strings.TrimPrefix(filepath.Ext(filename), ".") - page.Name = strings.Replace(filename, c.Path, "", 1) - page.Config = c + page.Name = strings.Replace(filename, conf.Path, "", 1) + page.Config = conf page.IsPost = false // Sanitize the extension diff --git a/routes/editor/post.go b/routes/editor/post.go index aa6bac09..5242ff20 100644 --- a/routes/editor/post.go +++ b/routes/editor/post.go @@ -10,7 +10,6 @@ import ( "strings" "time" - "github.com/hacdias/caddy-hugo/config" "github.com/hacdias/caddy-hugo/tools/hugo" "github.com/hacdias/caddy-hugo/tools/server" "github.com/robfig/cron" @@ -18,54 +17,34 @@ import ( "github.com/spf13/hugo/parser" ) -var schedule, contentType, regenerate string +var data info + +type info struct { + ContentType string + Schedule bool + Regenerate bool + Content map[string]interface{} +} // POST handles the POST method on editor page -func POST(w http.ResponseWriter, r *http.Request, c *config.Config, filename string) (int, error) { +func POST(w http.ResponseWriter, r *http.Request) (int, error) { // Get the JSON information sent using a buffer rawBuffer := new(bytes.Buffer) rawBuffer.ReadFrom(r.Body) + err := json.Unmarshal(rawBuffer.Bytes(), &data) - // Creates the data map using the JSON - var data map[string]interface{} - json.Unmarshal(rawBuffer.Bytes(), &data) - - // Checks if all the all data is defined - if _, ok := data["type"]; !ok { + if err != nil { return server.RespondJSON(w, map[string]string{ - "message": "Content type not set.", - }, http.StatusBadRequest, nil) + "message": "Error decrypting json.", + }, http.StatusInternalServerError, err) } - if _, ok := data["content"]; !ok { - return server.RespondJSON(w, map[string]string{ - "message": "Content not sent.", - }, http.StatusBadRequest, nil) - } - - if _, ok := data["schedule"]; !ok { - return server.RespondJSON(w, map[string]string{ - "message": "Schedule information not sent.", - }, http.StatusBadRequest, nil) - } - - if _, ok := data["regenerate"]; !ok { - return server.RespondJSON(w, map[string]string{ - "message": "Regenerate information not sent.", - }, http.StatusBadRequest, nil) - } - - rawFile := data["content"].(map[string]interface{}) - contentType = data["type"].(string) - schedule = data["schedule"].(string) - regenerate = data["regenerate"].(string) - // Initializes the file content to write var file []byte - switch contentType { + switch data.ContentType { case "frontmatter-only": - f, code, err := parseFrontMatterOnlyFile(rawFile, filename) + f, code, err := parseFrontMatterOnlyFile() if err != nil { return server.RespondJSON(w, map[string]string{ "message": err.Error(), @@ -75,12 +54,12 @@ func POST(w http.ResponseWriter, r *http.Request, c *config.Config, filename str file = f case "content-only": // The main content of the file - mainContent := rawFile["content"].(string) + mainContent := data.Content["content"].(string) mainContent = strings.TrimSpace(mainContent) file = []byte(mainContent) case "complete": - f, code, err := parseCompleteFile(r, c, rawFile, filename) + f, code, err := parseCompleteFile() if err != nil { return server.RespondJSON(w, map[string]string{ "message": err.Error(), @@ -95,7 +74,7 @@ func POST(w http.ResponseWriter, r *http.Request, c *config.Config, filename str } // Write the file - err := ioutil.WriteFile(filename, file, 0666) + err = ioutil.WriteFile(filename, file, 0666) if err != nil { return server.RespondJSON(w, map[string]string{ @@ -103,14 +82,14 @@ func POST(w http.ResponseWriter, r *http.Request, c *config.Config, filename str }, http.StatusInternalServerError, err) } - if regenerate == "true" { - go hugo.Run(c, false) + if data.Regenerate { + go hugo.Run(conf, false) } - return server.RespondJSON(w, map[string]string{}, http.StatusOK, nil) + return server.RespondJSON(w, nil, http.StatusOK, nil) } -func parseFrontMatterOnlyFile(rawFile map[string]interface{}, filename string) ([]byte, int, error) { +func parseFrontMatterOnlyFile() ([]byte, int, error) { frontmatter := strings.TrimPrefix(filepath.Ext(filename), ".") var mark rune @@ -125,7 +104,7 @@ func parseFrontMatterOnlyFile(rawFile map[string]interface{}, filename string) ( return []byte{}, http.StatusBadRequest, errors.New("Can't define the frontmatter.") } - f, err := parser.InterfaceToFrontMatter(rawFile, mark) + f, err := parser.InterfaceToFrontMatter(data.Content, mark) fString := string(f) // If it's toml or yaml, strip frontmatter identifier @@ -148,25 +127,25 @@ func parseFrontMatterOnlyFile(rawFile map[string]interface{}, filename string) ( return f, http.StatusOK, nil } -func parseCompleteFile(r *http.Request, c *config.Config, rawFile map[string]interface{}, filename string) ([]byte, int, error) { +func parseCompleteFile() ([]byte, int, error) { // The main content of the file - mainContent := rawFile["content"].(string) + mainContent := data.Content["content"].(string) mainContent = "\n\n" + strings.TrimSpace(mainContent) + "\n" // Removes the main content from the rest of the frontmatter - delete(rawFile, "content") + delete(data.Content, "content") // Schedule the post - if schedule == "true" { - t := cast.ToTime(rawFile["date"].(string)) + if data.Schedule { + t := cast.ToTime(data.Content["date"].(string)) scheduler := cron.New() scheduler.AddFunc(t.In(time.Now().Location()).Format("05 04 15 02 01 *"), func() { // Set draft to false - rawFile["draft"] = false + data.Content["draft"] = false // Converts the frontmatter in JSON - jsonFrontmatter, err := json.Marshal(rawFile) + jsonFrontmatter, err := json.Marshal(data.Content) if err != nil { return @@ -187,13 +166,13 @@ func parseCompleteFile(r *http.Request, c *config.Config, rawFile map[string]int return } - go hugo.Run(c, false) + go hugo.Run(conf, false) }) scheduler.Start() } // Converts the frontmatter in JSON - jsonFrontmatter, err := json.Marshal(rawFile) + jsonFrontmatter, err := json.Marshal(data.Content) if err != nil { return []byte{}, http.StatusInternalServerError, err diff --git a/tools/server/response.go b/tools/server/response.go index cc440deb..3f118b42 100644 --- a/tools/server/response.go +++ b/tools/server/response.go @@ -6,8 +6,12 @@ import ( "net/http" ) -// RespondJSON +// RespondJSON used to send JSON responses to the web server func RespondJSON(w http.ResponseWriter, message map[string]string, code int, err error) (int, error) { + if message == nil { + message = map[string]string{} + } + msg, msgErr := json.Marshal(message) if msgErr != nil {