function getCookie(name) { var cookieValue = null; if (document.cookie && document.cookie !== '') { var cookies = document.cookie.split(';'); for (var i = 0; i < cookies.length; i++) { var cookie = jQuery.trim(cookies[i]); // Does this cookie string begin with the name we want? if (cookie.substring(0, name.length + 1) === (name + '=')) { cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); break; } } } return cookieValue; } $(document).ready(function(){ // var endpoint = 'http://127.0.0.1:8000/api/comments/' var dataUrl = $(".cfe-load-comments").attr("data-url") var endpoint = $(".cfe-load-comments").attr("data-api-endpoint") || "/api/comments/" var loginUrl = $(".cfe-load-comments").attr("data-login") || '/accounts/login/' // console.log(endpoint) var isUser = false; var authUsername; $(".cfe-load-comments").after("
") getComments(dataUrl) function renderCommentLine(object){ var authorImage = '
' + '...
' var author = ""; if (object.user) { author = "via " + object.user.username + "" } var timestamp = new Date(object.timestamp).toLocaleString() var htmlStart = "
" + authorImage + "
" + "

" + object.content + "

" + author + " on " + timestamp if (object.user) { if (object.user.username == authUsername){ htmlStart = htmlStart + ' | Edit' } } var html_ = htmlStart + "
" return html_ } function getComments(requestUrl){ // console.log(getCookie('isUser')) isUser = $.parseJSON(getCookie('isUser')); authUsername = String(getCookie('authUsername')); $(".cfe-load-comments").html('

Comments

') $.ajax({ method: "GET", url: endpoint, data: { url: requestUrl, }, success: function(data){ if (data.length > 0){ $.each(data, function(index, object){ $(".cfe-load-comments").append(renderCommentLine(object)) }) } var formHtml = generateForm() $(".form-container").html(formHtml) }, error: function(data){ console.log('error') console.log(data) } }) } function generateForm(){ var html_ = "
" + "
" + "
" if (isUser){ return html_ } else { html_ = '
Login Required to Comment
' return html_ } } function formatErrorMsg(jsonResponse){ var message = "" $.each(jsonResponse, function(key, value){ if (key == 'detail'){ message += value + "
" } else { message += key + ": " + value + "
" } }) var formattedMsg = '
'+ '' + message + "
" return formattedMsg } function handleForm(formData){ $.ajax({ url: endpoint + "create/", method: "POST", data: formData + "&url=" + dataUrl, success: function(data){ console.log(data) // getComments(dataUrl) $(".cfe-load-comments").append(renderCommentLine(data)) var formHtml = generateForm() $(".form-container").html(formHtml) }, error: function(data){ console.log('error') console.log(data.responseJSON) var formErrorExists = $('.srvup-alert-error') if (formErrorExists.length > 0){ formErrorExists.remove() } var msg = formatErrorMsg(data.responseJSON) $(".comment-form textarea").before(msg) } }) } $(document).on('submit', '.comment-form', function(e){ e.preventDefault() var formData = $(this).serialize() handleForm(formData) }) // CFE INLINE Reply Edit $(document).on('click', '.cfe-media-edit', function(e){ e.preventDefault() // render the form $(this).fadeOut() var contentHolder = $(this).parent().parent().find(".cfe-media-content") var contentTxt = contentHolder.text() var objectId = contentHolder.attr('data-id') $(this).after(generateEditForm(contentTxt, objectId)) }) $(document).on('submit', '.comment-edit-form', function(e){ e.preventDefault() var formData = $(this).serialize() var objectId = $(this).attr("data-id") handleEditForm(formData, objectId) }) function generateEditForm(content, objectId){ var html_ = "
" + "

" + "" + "" + ""+ "
" return html_ } $(document).on('click', '.comment-edit-cancel', function(e){ $(this).parent().parent().find('.cfe-media-edit').fadeIn(); $(this).parent().remove() }) $(document).on('click', '.comment-delete', function(e){ e.preventDefault() var dataId = $(this).parent().attr('data-id') $.ajax({ method:"DELETE", url: endpoint + dataId + "/", success: function(){ getComments(dataUrl) } }) }) function handleEditForm(formData, objectId){ $.ajax({ url: endpoint + objectId + "/", method: "PUT", data: formData, success: function(data){ getComments(dataUrl) }, error: function(data){ console.log('error') console.log(data.responseJSON) var msg = formatErrorMsg(data.responseJSON) $("[data-id='" + objectId + "'] textarea").before(msg) } }) } })