mirror of https://github.com/abpframework/abp.git
13 changed files with 3745 additions and 188 deletions
File diff suppressed because it is too large
@ -1,182 +1,173 @@ |
|||
|
|||
|
|||
$(function () { |
|||
|
|||
var l = abp.localization.getResource("CmsKit"); |
|||
$(function () { |
|||
|
|||
var commentsService = volo.cmsKit.admin.comments.commentAdmin; |
|||
var l = abp.localization.getResource("CmsKit"); |
|||
|
|||
var detailsModal = new abp.ModalManager(abp.appPath + "CmsKit/Comments/DetailsModal"); |
|||
var commentsService = volo.cmsKit.admin.comments.commentAdmin; |
|||
|
|||
moment()._locale.preparse = (string) => string; |
|||
moment()._locale.postformat = (string) => string; |
|||
|
|||
var getFormattedDate = function ($datePicker) { |
|||
if (!$datePicker.val()) { |
|||
return null; |
|||
} |
|||
var momentDate = moment($datePicker.val(), $datePicker.data('daterangepicker').locale.format); |
|||
return momentDate.isValid() ? momentDate.toISOString() : null; |
|||
}; |
|||
|
|||
|
|||
//var defaultStartDate = moment().add(-7, 'days');
|
|||
//$("#CreationStartDate").val(defaultStartDate.format('L'));
|
|||
|
|||
$('.singledatepicker').daterangepicker({ |
|||
"singleDatePicker": true, |
|||
"showDropdowns": true, |
|||
"autoUpdateInput": false, |
|||
"autoApply": true, |
|||
"opens": "center", |
|||
"drops": "auto" |
|||
}); |
|||
var detailsModal = new abp.ModalManager(abp.appPath + "CmsKit/Comments/DetailsModal"); |
|||
|
|||
moment()._locale.preparse = (string) => string; |
|||
moment()._locale.postformat = (string) => string; |
|||
|
|||
|
|||
$('.singledatepicker').attr('autocomplete', 'off'); |
|||
|
|||
$('.singledatepicker').on('apply.daterangepicker', function (ev, picker) { |
|||
$(this).val(picker.startDate.format('l')); |
|||
}); |
|||
|
|||
|
|||
var filterForm = $('#CmsKitCommentsFilterForm'); |
|||
|
|||
var getFilter = function () { |
|||
var filterObj = filterForm.serializeFormToObject(); |
|||
|
|||
filterObj.creationStartDate = getFormattedDate($('#CreationStartDate')); |
|||
filterObj.creationEndDate = getFormattedDate($('#CreationEndDate')); |
|||
|
|||
return filterObj; |
|||
}; |
|||
|
|||
|
|||
var _dataTable = $('#CommentsTable').DataTable(abp.libs.datatables.normalizeConfiguration({ |
|||
processing: true, |
|||
serverSide: true, |
|||
paging: true, |
|||
scrollX: true, |
|||
searching: false, |
|||
scrollCollapse: true, |
|||
ajax: abp.libs.datatables.createAjax(commentsService.getWaitingCommentsWithReplies, getFilter), |
|||
columnDefs: [ |
|||
{ |
|||
width: "10%", |
|||
title: l("Actions"), |
|||
targets: 0, |
|||
orderable: false, |
|||
rowAction: { |
|||
items: [ |
|||
{ |
|||
text: function (data) { |
|||
return l('Approve'); |
|||
}, |
|||
action: function (data) { |
|||
var newApprovalStatus = true; |
|||
|
|||
commentsService |
|||
.updateApprovalStatus(data.record.id, { IsApproved: newApprovalStatus }) |
|||
.then(function () { |
|||
_dataTable.ajax.reloadEx(); |
|||
var message = newApprovalStatus ? l('ApprovedSuccessfully') : l('ApprovalRevokedSuccessfully'); |
|||
abp.notify.success(message); |
|||
}) |
|||
.catch(function (error) { |
|||
abp.notify.error(error.message); |
|||
}); |
|||
} |
|||
}, |
|||
{ |
|||
text: function (data) { |
|||
return l('Disapproved') ; |
|||
var getFormattedDate = function ($datePicker) { |
|||
if (!$datePicker.val()) { |
|||
return null; |
|||
} |
|||
var momentDate = moment($datePicker.val(), $datePicker.data('daterangepicker').locale.format); |
|||
return momentDate.isValid() ? momentDate.toISOString() : null; |
|||
}; |
|||
|
|||
|
|||
$('.singledatepicker').daterangepicker({ |
|||
"singleDatePicker": true, |
|||
"showDropdowns": true, |
|||
"autoUpdateInput": false, |
|||
"autoApply": true, |
|||
"opens": "center", |
|||
"drops": "auto" |
|||
}); |
|||
|
|||
|
|||
|
|||
$('.singledatepicker').attr('autocomplete', 'off'); |
|||
|
|||
$('.singledatepicker').on('apply.daterangepicker', function (ev, picker) { |
|||
$(this).val(picker.startDate.format('l')); |
|||
}); |
|||
|
|||
|
|||
var filterForm = $('#CmsKitCommentsFilterForm'); |
|||
|
|||
var getFilter = function () { |
|||
var filterObj = filterForm.serializeFormToObject(); |
|||
|
|||
filterObj.creationStartDate = getFormattedDate($('#CreationStartDate')); |
|||
filterObj.creationEndDate = getFormattedDate($('#CreationEndDate')); |
|||
|
|||
return filterObj; |
|||
}; |
|||
|
|||
|
|||
var _dataTable = $('#CommentsTable').DataTable(abp.libs.datatables.normalizeConfiguration({ |
|||
processing: true, |
|||
serverSide: true, |
|||
paging: true, |
|||
scrollX: true, |
|||
searching: false, |
|||
scrollCollapse: true, |
|||
ajax: abp.libs.datatables.createAjax(commentsService.getWaitingCommentsWithReplies, getFilter), |
|||
columnDefs: [ |
|||
{ |
|||
width: "10%", |
|||
title: l("Actions"), |
|||
targets: 0, |
|||
orderable: false, |
|||
rowAction: { |
|||
items: [ |
|||
{ |
|||
text: function (data) { |
|||
return l('Approve'); |
|||
}, |
|||
action: function (data) { |
|||
var newApprovalStatus = true; |
|||
|
|||
commentsService |
|||
.updateApprovalStatus(data.record.id, { IsApproved: newApprovalStatus }) |
|||
.then(function () { |
|||
_dataTable.ajax.reloadEx(); |
|||
var message = newApprovalStatus ? l('ApprovedSuccessfully') : l('ApprovalRevokedSuccessfully'); |
|||
abp.notify.success(message); |
|||
}) |
|||
.catch(function (error) { |
|||
abp.notify.error(error.message); |
|||
}); |
|||
} |
|||
}, |
|||
action: function (data) { |
|||
var newApprovalStatus = false; |
|||
|
|||
commentsService |
|||
.updateApprovalStatus(data.record.id, { IsApproved: newApprovalStatus }) |
|||
.then(function () { |
|||
_dataTable.ajax.reloadEx(); |
|||
var message = newApprovalStatus ? l('ApprovedSuccessfully') : l('ApprovalRevokedSuccessfully'); |
|||
abp.notify.success(message); |
|||
}) |
|||
.catch(function (error) { |
|||
abp.notify.error(error.message); |
|||
}); |
|||
{ |
|||
text: function (data) { |
|||
return l('Disapproved'); |
|||
}, |
|||
action: function (data) { |
|||
var newApprovalStatus = false; |
|||
|
|||
commentsService |
|||
.updateApprovalStatus(data.record.id, { IsApproved: newApprovalStatus }) |
|||
.then(function () { |
|||
_dataTable.ajax.reloadEx(); |
|||
var message = newApprovalStatus ? l('ApprovedSuccessfully') : l('ApprovalRevokedSuccessfully'); |
|||
abp.notify.success(message); |
|||
}) |
|||
.catch(function (error) { |
|||
abp.notify.error(error.message); |
|||
}); |
|||
} |
|||
} |
|||
] |
|||
} |
|||
}, |
|||
{ |
|||
width: "10%", |
|||
title: l("Username"), |
|||
orderable: false, |
|||
data: "author.userName", |
|||
render: function (data) { |
|||
if (data !== null) { |
|||
return GetFilterableDatatableContent('#Author', $.fn.dataTable.render.text().display(data)); //prevent against possible XSS
|
|||
} |
|||
] |
|||
} |
|||
}, |
|||
{ |
|||
width: "10%", |
|||
title: l("Username"), |
|||
orderable: false, |
|||
data: "author.userName", |
|||
render: function (data) { |
|||
if (data !== null) { |
|||
return GetFilterableDatatableContent('#Author', $.fn.dataTable.render.text().display(data)); //prevent against possible XSS
|
|||
return ""; |
|||
} |
|||
return ""; |
|||
} |
|||
}, |
|||
{ |
|||
width: "15%", |
|||
title: l("EntityType"), |
|||
orderable: false, |
|||
data: "entityType", |
|||
render: function (data) { |
|||
if (data !== null) { |
|||
return GetFilterableDatatableContent('#EntityType', $.fn.dataTable.render.text().display(data)); |
|||
}, |
|||
{ |
|||
width: "15%", |
|||
title: l("EntityType"), |
|||
orderable: false, |
|||
data: "entityType", |
|||
render: function (data) { |
|||
if (data !== null) { |
|||
return GetFilterableDatatableContent('#EntityType', $.fn.dataTable.render.text().display(data)); |
|||
} |
|||
return ""; |
|||
} |
|||
return ""; |
|||
} |
|||
}, |
|||
{ |
|||
title: l("Text"), |
|||
data: "text", |
|||
orderable: false, |
|||
render: function (data) { |
|||
//var markdownData = marked(data || "");
|
|||
//var sanitizedData = DOMPurify.sanitize(markdownData);
|
|||
data = $.fn.dataTable.render.text().display(data || ""); |
|||
|
|||
return ( |
|||
'<span data-toggle="tooltip" title="' + |
|||
data + |
|||
'" style="white-space: normal; word-break: break-all;">' + |
|||
data + |
|||
"</span>" |
|||
); |
|||
}, |
|||
{ |
|||
title: l("Text"), |
|||
data: "text", |
|||
orderable: false, |
|||
render: function (data) { |
|||
|
|||
var converter = new showdown.Converter(); |
|||
var htmlContent = converter.makeHtml(data); |
|||
return (htmlContent); |
|||
} |
|||
}, |
|||
{ |
|||
width: "15%", |
|||
title: l("CreationTime"), |
|||
data: "creationTime", |
|||
orderable: true, |
|||
dataFormat: "datetime" |
|||
} |
|||
}, |
|||
{ |
|||
width: "15%", |
|||
title: l("CreationTime"), |
|||
data: "creationTime", |
|||
orderable: true, |
|||
dataFormat: "datetime" |
|||
} |
|||
] |
|||
})); |
|||
] |
|||
})); |
|||
|
|||
function GetFilterableDatatableContent(filterSelector, data) { |
|||
return '<span class="datatableCell" data-field="' + filterSelector + '" data-val="' + data + '">' + data + '</span>'; |
|||
} |
|||
function GetFilterableDatatableContent(filterSelector, data) { |
|||
return '<span class="datatableCell" data-field="' + filterSelector + '" data-val="' + data + '">' + data + '</span>'; |
|||
} |
|||
|
|||
$(document).on('click', '.datatableCell', function () { |
|||
var inputSelector = $(this).attr('data-field'); |
|||
var value = $(this).attr('data-val'); |
|||
$(document).on('click', '.datatableCell', function () { |
|||
var inputSelector = $(this).attr('data-field'); |
|||
var value = $(this).attr('data-val'); |
|||
|
|||
$(inputSelector).val(value); |
|||
$(inputSelector).val(value); |
|||
|
|||
_dataTable.ajax.reloadEx(); |
|||
}); |
|||
_dataTable.ajax.reloadEx(); |
|||
}); |
|||
|
|||
filterForm.submit(function (e) { |
|||
e.preventDefault(); |
|||
_dataTable.ajax.reloadEx(); |
|||
filterForm.submit(function (e) { |
|||
e.preventDefault(); |
|||
_dataTable.ajax.reloadEx(); |
|||
}); |
|||
}); |
|||
}); |
|||
Loading…
Reference in new issue