diff --git a/vspace/src/main/java/edu/asu/diging/vspace/core/model/impl/Reference.java b/vspace/src/main/java/edu/asu/diging/vspace/core/model/impl/Reference.java index df3aef041..c84852f08 100644 --- a/vspace/src/main/java/edu/asu/diging/vspace/core/model/impl/Reference.java +++ b/vspace/src/main/java/edu/asu/diging/vspace/core/model/impl/Reference.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.List; +import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; @@ -54,6 +55,9 @@ public class Reference extends VSpaceElement implements IReference { private String note; + @Column(name = "isPublic") + private boolean isPublic = true; + @Override public String getTitle() { return title; @@ -164,6 +168,14 @@ public void setNote(String note) { this.note = note; } + public boolean isPublic() { + return isPublic; + } + + public void setPublic(boolean isPublic) { + this.isPublic = isPublic; + } + @Override public void setId(String id) { this.id = id; diff --git a/vspace/src/main/webapp/WEB-INF/views/staff/modules/slides/slide.html b/vspace/src/main/webapp/WEB-INF/views/staff/modules/slides/slide.html index e49a7189a..b8d539145 100644 --- a/vspace/src/main/webapp/WEB-INF/views/staff/modules/slides/slide.html +++ b/vspace/src/main/webapp/WEB-INF/views/staff/modules/slides/slide.html @@ -309,9 +309,9 @@ }, error: function(data) { var alert = $(''); - $('.error').append(alert); - $(".error").delay(4000).slideUp(500, function() { - $(".error").empty(); + $('#slide-error-container').append(alert); + $("#slide-error-container").delay(4000).slideUp(500, function() { + $("#slide-error-container").empty(); }); } }); @@ -348,7 +348,10 @@ var originalBiblioHtml = {}; - function biblioBlockDoubleClick(e) { + function biblioBlockEditClick(e) { + e.preventDefault(); + e.stopPropagation(); + $(".EasyMDEContainer").remove(); var biblioBlock = $(e.target).closest('.biblioDivStaff'); biblioBlock.addClass("open"); @@ -358,11 +361,9 @@ // Store the COMPLETE original HTML including all references originalBiblioHtml[blockId] = biblioBlock.html(); - var description = $("div.open p:eq(0)").text(); - defaultValue = description; - - var title = $("div.open p span:eq(0)").text(); - var desc = $("div.open p span:eq(1)").text(); + // Extract title from h4 strong tag and description from p tag + var title = $("div.open > .col-md-10 h4 strong").text().trim(); + var desc = $("div.open > .col-md-10 > p").text().trim(); // Showing the edit bibliography form with all the respective values $("#editBiblioAlert").show(); @@ -375,15 +376,20 @@ formDataCancel.append('biblioTitle', title); formDataCancel.append('description', desc); - // Remove card border + // Hide the block while editing (don't change overflow or height) $(".open").css('display', 'none'); - $(".open").css('overflow-y', 'scroll'); - $(".open").css('max-height', '200px'); } var originalReferenceHtml = {}; - function referenceBlockDoubleClick(e) { + function referenceBlockClick(e) { + if ($(e.target).closest('a[data-action], .btn, .icon-trash').length > 0) { + return; + } + + e.preventDefault(); + e.stopPropagation(); + var referenceBlock = $(e.target).closest('.referenceDivStaff'); currentRefId = referenceBlock.find('input[data-reference-id]').val(); @@ -812,7 +818,7 @@ $("#loginAlert").show(); } else { var alert = $(''); - $('.error').append(alert); + $('#slide-error-container').append(alert); } } }); @@ -1218,7 +1224,7 @@ }, error: function(data) { var alert = $(''); - $('.error').append(alert); + $('#slide-error-container').append(alert); } }); }); @@ -1657,10 +1663,10 @@ }, error: function(data) { var alert = $(''); - $('.error').append(alert); - $(".error").delay(4000).slideUp(500, function(){ - $(".error").empty(); - }); + $('#slide-error-container').append(alert); + $("#slide-error-container").delay(4000).slideUp(500, function(){ + $("#slide-error-container").empty(); + }); } }); }); @@ -1698,9 +1704,9 @@ }, error: function(data) { var alert = $(''); - $('.error').append(alert); - $(".error").delay(4000).slideUp(500, function(){ - $(".error").empty(); + $('#slide-error-container').append(alert); + $("#slide-error-container").delay(4000).slideUp(500, function(){ + $("#slide-error-container").empty(); }); } }); @@ -1729,9 +1735,9 @@ }, error: function(data) { var alert = $(''); - $('.error').append(alert); - $(".error").delay(4000).slideUp(500, function(){ - $(".error").empty(); + $('#slide-error-container').append(alert); + $("#slide-error-container").delay(4000).slideUp(500, function(){ + $("#slide-error-container").empty(); }); } }); @@ -1762,10 +1768,10 @@ }, error: function(data) { var alert = $(''); - $('.error').append(alert); - $(".error").delay(4000).slideUp(500, function(){ - $(".error").empty(); - }); + $('#slide-error-container').append(alert); + $("#slide-error-container").delay(4000).slideUp(500, function(){ + $("#slide-error-container").empty(); + }); } }); }); @@ -1784,10 +1790,10 @@ var blockId = $('#deleteImageId').val(); if(blockId == null || blockId == ''){ var alert = $(''); - $('.error').append(alert); - $(".error").delay(4000).slideUp(500, function(){ - $(".error").empty(); - }); + $('#slide-error-container').append(alert); + $("#slide-error-container").delay(4000).slideUp(500, function(){ + $("#slide-error-container").empty(); + }); } else{ $('#deleteImageId').remove(); // ------------- delete image content blocks ------------ @@ -1799,10 +1805,10 @@ }, error: function(data) { var alert = $(''); - $('.error').append(alert); - $(".error").delay(4000).slideUp(500, function(){ - $(".error").empty(); - }); + $('#slide-error-container').append(alert); + $("#slide-error-container").delay(4000).slideUp(500, function(){ + $("#slide-error-container").empty(); + }); } }); } @@ -1822,10 +1828,10 @@ var blockId = $('#deleteChoiceBlockId').val(); if(blockId == null || blockId == ''){ var alert = $(''); - $('.error').append(alert); - $(".error").delay(4000).slideUp(500, function(){ - $(".error").empty(); - }); + $('#slide-error-container').append(alert); + $("#slide-error-container").delay(4000).slideUp(500, function(){ + $("#slide-error-container").empty(); + }); } else{ $('#deleteChoiceBlockId').remove(); // ------------- delete choices content blocks ------------ @@ -1837,10 +1843,10 @@ }, error: function(data) { var alert = $(''); - $('.error').append(alert); - $(".error").delay(4000).slideUp(500, function(){ - $(".error").empty(); - }); + $('#slide-error-container').append(alert); + $("#slide-error-container").delay(4000).slideUp(500, function(){ + $("#slide-error-container").empty(); + }); } }); } @@ -1859,10 +1865,10 @@ if(blockId == null || blockId == ''){ var alert = $(''); - $('.error').append(alert); - $(".error").delay(4000).slideUp(500, function(){ - $(".error").empty(); - }); + $('#slide-error-container').append(alert); + $("#slide-error-container").delay(4000).slideUp(500, function(){ + $("#slide-error-container").empty(); + }); } else{ // ------------- delete video content blocks ------------ $.ajax({ @@ -1873,10 +1879,10 @@ }, error: function(data) { var alert = $(''); - $('.error').append(alert); - $(".error").delay(4000).slideUp(500, function(){ - $(".error").empty(); - }); + $('#slide-error-container').append(alert); + $("#slide-error-container").delay(4000).slideUp(500, function(){ + $("#slide-error-container").empty(); + }); } }); } @@ -1891,10 +1897,10 @@ var blockId = $('#deleteChoiceBlockId').attr('value'); if(blockId == null || blockId == ''){ var alert = $(''); - $('.error').append(alert); - $(".error").delay(4000).slideUp(500, function(){ - $(".error").empty(); - }); + $('#slide-error-container').append(alert); + $("#slide-error-container").delay(4000).slideUp(500, function(){ + $("#slide-error-container").empty(); + }); } else{ $('#deleteChoiceBlockId').remove() // ------------- delete choices content blocks ------------ @@ -1906,10 +1912,10 @@ }, error: function(data) { var alert = $(''); - $('.error').append(alert); - $(".error").delay(4000).slideUp(500, function(){ - $(".error").empty(); - }); + $('#slide-error-container').append(alert); + $("#slide-error-container").delay(4000).slideUp(500, function(){ + $("#slide-error-container").empty(); + }); } }); } @@ -1968,21 +1974,28 @@ // Updated biblioblock creation with data attributes var biblioblock = $( '
' + - '

' + - 'Bibliography Title: ' + data.biblioTitle + ',' + - 'Description: ' + data.description + '' + - '

' + + '
' + + '

' + data.biblioTitle + '

' + + '

' + data.description + '

' + + '
' + '' + - '' + + '
' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + '' + '' + - '+ New Reference' + - '
' + + '
' + + '
' + '
' + '
' ); - $(biblioblock[0]).mouseenter(onMouseEnter).mouseleave(onMouseLeave).dblclick(biblioBlockDoubleClick); + // Don't bind any click handlers to the block itself $('#slideSpace').append(biblioblock); }, error: function(data) { @@ -1991,7 +2004,7 @@ } else { var alert = $(''); - $('.error').append(alert); + $('#slide-error-container').append(alert); } } }); @@ -2060,10 +2073,11 @@ }, data: jsonData, success: function(data) { - // Updated with data attributes + // Updated with data attributes - Type should be FIRST var referenceblock = $( '
' + '

' + + 'Type: ' + data.type + ', ' + 'Reference Title: ' + data.title + ', ' + 'Author: ' + data.author + ', ' + 'Year: ' + data.year + ', ' + @@ -2073,17 +2087,16 @@ 'Issue: ' + data.issue + ', ' + 'Pages: ' + data.pages + ', ' + 'Editors: ' + data.editors + ', ' + - 'Type: ' + data.type + ', ' + 'Note: ' + data.note + '' + '

' + '' + - '' + + '' + '' + '
' ); - $(referenceblock[0]).mouseenter(onMouseEnter).mouseleave(onMouseLeave).dblclick(referenceBlockDoubleClick); - var elem = $('#' + biblioBlockId).find('#referenceSpace'); + $(referenceblock[0]).mouseenter(onMouseEnter).mouseleave(onMouseLeave).on('click', referenceBlockClick); + var elem = $('#' + biblioBlockId).find('.referenceSpace'); elem.append(referenceblock); // Remove the reference target ID input @@ -2095,7 +2108,7 @@ } else { var alert = $(''); - $('.error').append(alert); + $('#slide-error-container').append(alert); } } }); @@ -2219,7 +2232,7 @@ $("#loginAlert").show(); } else { var alert = $(''); - $('.error').append(alert); + $('#slide-error-container').append(alert); } } }); @@ -2289,7 +2302,7 @@ }, error: function(data) { var alert = $(''); - $('.error').append(alert); + $('#slide-error-container').append(alert); } }); $('#choiceForm')[0].reset(); @@ -2443,33 +2456,45 @@ // Rebuild bibliography header structure var biblioHtml = - '

' + - 'Bibliography Title: ' + formData.get('biblioTitle') + ', ' + - 'Description: ' + formData.get('description') + '' + - '

' + + '
' + + '

' + formData.get('biblioTitle') + '

' + + '

' + formData.get('description') + '

' + + '
' + '' + - '' + + '
' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + '' + '' + - '+ New Reference' + - '
'; + '
' + + '
'; $(".open").append(biblioHtml); // Restore ALL reference blocks with their complete HTML and event handlers if (allReferences.length > 0) { allReferences.each(function() { - $("#referenceSpace").append($(this)); + $(".open .referenceSpace").append($(this)); }); } - // Rebind event handlers for bibliography - $('.biblioDivStaff').mouseenter(onMouseEnter).mouseleave(onMouseLeave).dblclick(biblioBlockDoubleClick); + // Rebind event handlers for bibliography - no double click on block + $('[data-action="edit-biblio"]').off('click').on('click', biblioBlockEditClick); - // Rebind event handlers for all restored references - $('.referenceDivStaff').mouseenter(onMouseEnter).mouseleave(onMouseLeave).dblclick(referenceBlockDoubleClick); + // Rebind event handlers for all restored references - use click instead of dblclick + $('.referenceDivStaff').off('click').mouseenter(onMouseEnter).mouseleave(onMouseLeave).on('click', referenceBlockClick); - $(".open").css('display', 'flex'); + // Reset CSS properties that were set during edit + $(".open").css({ + 'display': 'flex', + 'overflow-y': 'visible', + 'max-height': 'none' + }); $(".open").removeClass("open"); } @@ -2484,11 +2509,8 @@ delete originalBiblioHtml[blockId]; } - // Reset styles and classes + // Reset display property $(".open").css('display', 'flex'); - $(".open").css('height', 'auto'); - $(".open").css('overflow-y', 'visible'); - $(".open").css('max-height', 'none'); $(".open").removeClass("open"); // Rebind all event handlers for the restored content @@ -2517,17 +2539,14 @@ }); function rebindBiblioEventHandlers() { - // Rebind bibliography block event handlers - $('.biblioDivStaff').off('mouseenter mouseleave dblclick') - .mouseenter(onMouseEnter) - .mouseleave(onMouseLeave) - .dblclick(biblioBlockDoubleClick); + // Rebind bibliography block edit button handlers + $('[data-action="edit-biblio"]').off('click').on('click', biblioBlockEditClick); - // Rebind reference block event handlers - $('.referenceDivStaff').off('mouseenter mouseleave dblclick') + // Rebind reference block event handlers - use click instead of dblclick + $('.referenceDivStaff').off('mouseenter mouseleave click') .mouseenter(onMouseEnter) .mouseleave(onMouseLeave) - .dblclick(referenceBlockDoubleClick); + .on('click', referenceBlockClick); } function updateReferenceBox(blockId, formData) { @@ -2549,6 +2568,7 @@ $(".open").append( '

' + + 'Type: ' + type + ', ' + 'Reference Title: ' + title + ', ' + 'Author: ' + author + ', ' + 'Year: ' + year + ', ' + @@ -2558,17 +2578,16 @@ 'Issue: ' + issue + ', ' + 'Pages: ' + pages + ', ' + 'Editors: ' + editors + ', ' + - 'Type: ' + type + ', ' + 'Note: ' + note + '' + '

' + '' + - '' + + '' + '' ); // Reset border of the card - // Rebind event handlers - $('.referenceDivStaff').mouseenter(onMouseEnter).mouseleave(onMouseLeave).dblclick(referenceBlockDoubleClick); + // Rebind event handlers - use click instead of dblclick + $('.referenceDivStaff').mouseenter(onMouseEnter).mouseleave(onMouseLeave).on('click', referenceBlockClick); $(".open").css('display', 'flex'); // Remove id from storage so it's not there on refresh @@ -2601,8 +2620,10 @@ $('.textDivStaff').mouseenter(onMouseEnter).mouseleave(onMouseLeave).dblclick(textBlockDoubleClick); $('.vidDiv').mouseenter(onMouseEnter).mouseleave(onMouseLeave); $('.SpaceDivStaff').mouseenter(onMouseEnter).mouseleave(onMouseLeave).dblclick(spaceBlockDoubleClick); - $('.biblioDivStaff').mouseenter(onMouseEnter).mouseleave(onMouseLeave).dblclick(biblioBlockDoubleClick); - $('.referenceDivStaff').mouseenter(onMouseEnter).mouseleave(onMouseLeave).dblclick(referenceBlockDoubleClick); + // Bind edit button for bibliography blocks, not the block itself + $('[data-action="edit-biblio"]').on('click', biblioBlockEditClick); + // Use click instead of dblclick for references + $('.referenceDivStaff').mouseenter(onMouseEnter).mouseleave(onMouseLeave).on('click', referenceBlockClick); $('#closeTextBlock').on('click', function() { $("#editTextAlert").hide(); @@ -2718,15 +2739,20 @@ e.preventDefault(); // ------------- editing bibliography blocks ------------ - var formData = new FormData(); var title = $("#editTitleBiblio").val(); var desc = $("#editDescBiblio").val(); var blockId = $(".open").attr("id"); var token = [[${_csrf.token}]]; + var requestData = { + biblioTitle: title, + description: desc, + id: blockId + }; + + var formData = new FormData(); formData.append('biblioTitle', title); formData.append('description', desc); - formData.append('biblioBlockId', blockId); $("#editBiblioAlert").hide(); @@ -2734,13 +2760,12 @@ url: "[(@{'/staff/module/'+${module.id}+'/slide/'+${slide.id}+'/bibliography/edit'})]", type: 'POST', cache: false, - contentType: false, + contentType: 'application/json; charset=utf-8', processData: false, - data: formData, + data: JSON.stringify(requestData), headers: { 'X-CSRF-Token': token }, - enctype: 'multipart/form-data', success: function(data) { // Replace bibliography box with new values updateBiblioBox(blockId, formData); @@ -2751,11 +2776,22 @@ } }, error: function(data) { + // Restore the block visibility on error + var openBlockId = $(".open").attr("id"); + if (originalBiblioHtml[openBlockId]) { + $(".open").html(originalBiblioHtml[openBlockId]); + delete originalBiblioHtml[openBlockId]; + } + $(".open").css('display', 'flex'); + $(".open").removeClass("open"); + rebindBiblioEventHandlers(); + + // Show error alert if (data.status == 403) { $("#loginAlert").show(); } else { var alert = $(''); - $('.error').append(alert); + $('#slide-error-container').append(alert); } } }); @@ -2837,10 +2873,11 @@ }); }); - // Use event delegation for reference blocks + // Use event delegation for reference blocks and biblio edit buttons $(document).on('mouseenter', '.referenceDivStaff', onMouseEnter); $(document).on('mouseleave', '.referenceDivStaff', onMouseLeave); - $(document).on('dblclick', '.referenceDivStaff', referenceBlockDoubleClick); + $(document).on('click', '.referenceDivStaff', referenceBlockClick); + $(document).on('click', '[data-action="edit-biblio"]', biblioBlockEditClick); $("#submitSpaceBlock").on("click", function(e){ e.preventDefault(); @@ -3005,7 +3042,7 @@ -
+