|
|
- (function ($) {
-
- // #region Helpers
-
- function ConvertMarkupToValidXhtml(markup) {
- var docImplementation = document.implementation;
- var htmlDocument = docImplementation.createHTMLDocument("temp");
- var xHtmlDocument = docImplementation.createDocument('http://www.w3.org/1999/xhtml', 'html', null);
- var xhtmlBody = xHtmlDocument.createElementNS('http://www.w3.org/1999/xhtml', 'body');
-
- htmlDocument.body.innerHTML = "<div>" + markup + "</div>";
-
- xHtmlDocument.documentElement.appendChild(xhtmlBody);
- xHtmlDocument.importNode(htmlDocument.body, true);
- xhtmlBody.appendChild(htmlDocument.body.firstChild);
-
- /<body.*?><div>(.*?)<\/div><\/body>/im.exec(xHtmlDocument.documentElement.innerHTML);
- return RegExp.$1;
- }
-
- // #endregion
-
- var postId, isNew,
- txtTitle, txtContent, txtMessage, txtImage, chkPublish,
- btnNew, btnEdit, btnDelete, btnSave, btnCancel,
-
- editPost = function () {
- txtTitle.attr('contentEditable', true);
- txtContent.wysiwyg({ hotKeys: {}, activeToolbarClass: "active" });
- txtContent.css({ minHeight: "400px" });
- txtContent.focus();
-
- btnNew.attr("disabled", true);
- btnEdit.attr("disabled", true);
- btnSave.removeAttr("disabled");
- btnCancel.removeAttr("disabled");
- chkPublish.removeAttr("disabled");
-
- showCategoriesForEditing();
-
- toggleSourceView();
-
- $("#tools").fadeIn().css("display", "inline-block");
- },
- cancelEdit = function () {
- if (isNew) {
- if (confirm("Do you want to leave this page?")) {
- history.back();
- }
- } else {
- txtTitle.removeAttr('contentEditable');
- txtContent.removeAttr('contentEditable');
- btnCancel.focus();
-
- btnNew.removeAttr("disabled");
- btnEdit.removeAttr("disabled");
- btnSave.attr("disabled", true);
- btnCancel.attr("disabled", true);
- chkPublish.attr("disabled", true);
-
- showCategoriesForDisplay();
-
- $("#tools").fadeOut();
- }
- },
- toggleSourceView = function () {
- $(".source").bind("click", function () {
- var self = $(this);
- if (self.attr("data-cmd") === "source") {
- self.attr("data-cmd", "design");
- self.addClass("active");
- txtContent.text(txtContent.html());
- } else {
- self.attr("data-cmd", "source");
- self.removeClass("active");
- txtContent.html(txtContent.text());
- }
- });
- },
- savePost = function (e) {
- if ($(".source").attr("data-cmd") === "design") {
- $(".source").click();
- }
-
- txtContent.cleanHtml();
-
- var parsedDOM;
-
- /* IE9 doesn't support text/html MimeType https://github.com/madskristensen/MiniBlog/issues/35
-
- parsedDOM = new DOMParser().parseFromString(txtContent.html(), 'text/html');
- parsedDOM = new XMLSerializer().serializeToString(parsedDOM);
-
- /<body>(.*)<\/body>/im.exec(parsedDOM);
- parsedDOM = RegExp.$1;
-
- */
-
- /* When its time to drop IE9 support toggle commented region with
- the following statement and ConvertMarkupToXhtml function */
- parsedDOM = ConvertMarkupToValidXhtml(txtContent.html());
-
- $.post("/post.ashx?mode=save", {
- id: postId,
- isPublished: chkPublish[0].checked,
- title: txtTitle.text().trim(),
- content: parsedDOM,
- categories: getPostCategories(),
- token: document.querySelector("[data-token]").getAttribute("data-token")
- })
- .success(function (data) {
- if (isNew) {
- location.href = data;
- return;
- }
-
- showMessage(true, "The post was saved successfully");
- cancelEdit(e);
- })
- .fail(function (data) {
- if (data.status === 409) {
- showMessage(false, "The title is already in use");
- } else {
- showMessage(false, "Something bad happened. Server reported " + data.status + " " + data.statusText);
- }
- });
- },
- deletePost = function () {
- if (confirm("Are you sure you want to delete this post?")) {
- $.post("/post.ashx?mode=delete", { id: postId, token: document.querySelector("[data-token]").getAttribute("data-token") })
- .success(function () { location.href = "/"; })
- .fail(function () { showMessage(false, "Something went wrong. Please try again"); });
- }
- },
- showMessage = function (success, message) {
- var className = success ? "alert-success" : "alert-error";
- txtMessage.addClass(className);
- txtMessage.text(message);
- txtMessage.parent().fadeIn();
-
- setTimeout(function () {
- txtMessage.parent().fadeOut("slow", function () {
- txtMessage.removeClass(className);
- });
- }, 4000);
- },
- getPostCategories = function () {
- var categories = '';
-
- if ($("#txtCategories").length > 0) {
- categories = $("#txtCategories").val();
- } else {
- $("ul.categories li a").each(function (index, item) {
- if (categories.length > 0) {
- categories += ",";
- }
- categories += $(item).html();
- });
- }
- return categories;
- },
- showCategoriesForEditing = function () {
- var firstItemPassed = false;
- var categoriesString = getPostCategories();
- $("ul.categories li").each(function (index, item) {
- if (!firstItemPassed) {
- firstItemPassed = true;
- } else {
- $(item).remove();
- }
- });
- $("ul.categories").append("<li><input id='txtCategories' class='form-control' /></li>");
- $("#txtCategories").val(categoriesString);
- },
- showCategoriesForDisplay = function () {
- if ($("#txtCategories").length > 0) {
- var categoriesArray = $("#txtCategories").val().split(',');
- $("#txtCategories").parent().remove();
-
- $.each(categoriesArray, function (index, category) {
- $("ul.categories").append(' <li itemprop="articleSection" title="' + category + '"> <a href="/category/' + encodeURIComponent(category.toLowerCase()) + '">' + category + '</a> </li> ');
- });
- }
- };
-
- isNew = location.pathname.replace(/\//g, "") === "postnew";
-
- postId = $("[itemprop~='blogPost']").attr("data-id");
-
- txtTitle = $("[itemprop~='blogPost'] [itemprop~='name']");
- txtContent = $("[itemprop~='articleBody']");
- txtMessage = $("#admin .alert");
- txtImage = $("#admin #txtImage");
-
- btnNew = $("#btnNew");
- btnEdit = $("#btnEdit").bind("click", editPost);
- btnDelete = $("#btnDelete").bind("click", deletePost);
- btnSave = $("#btnSave").bind("click", savePost);
- btnCancel = $("#btnCancel").bind("click", cancelEdit);
- chkPublish = $("#ispublished").find("input[type=checkbox]");
-
- $(document).keyup(function (e) {
- if (!document.activeElement.isContentEditable) {
- if (e.keyCode === 46) { // Delete key
- deletePost();
- } else if (e.keyCode === 27) { // ESC key
- cancelEdit();
- }
- }
- });
-
- $('.uploadimage').click(function (e) {
- e.preventDefault();
- $('#txtImage').click();
- });
-
- if (isNew) {
- editPost();
- $("#ispublished").fadeIn();
- chkPublish[0].checked = true;
- } else if (txtTitle !== null && txtTitle.length === 1 && location.pathname.length > 1) {
- btnEdit.removeAttr("disabled");
- btnDelete.removeAttr("disabled");
- $("#ispublished").css({ "display": "inline" });
- }
- })(jQuery);
|