scinote-web/app/assets/javascripts/repository_columns/index.js

216 lines
7.7 KiB
JavaScript
Raw Normal View History

2019-11-26 16:31:32 +08:00
/* global I18n HelperModule animateSpinner RepositoryListColumnType RepositoryStatusColumnType
RepositoryDateTimeColumnType*/
2019-10-21 18:40:53 +08:00
/* eslint-disable no-restricted-globals */
2019-10-14 21:27:03 +08:00
var RepositoryColumns = (function() {
2019-11-11 15:44:08 +08:00
var manageModal = '#manage-repository-column';
2019-11-19 23:07:10 +08:00
var columnTypeClassNames = {
RepositoryListValue: 'RepositoryListColumnType',
2019-11-26 16:31:32 +08:00
RepositoryStatusValue: 'RepositoryStatusColumnType',
RepositoryDateValue: 'RepositoryDateTimeColumnType',
RepositoryDateTimeValue: 'RepositoryDateTimeColumnType',
RepositoryTimeValue: 'RepositoryDateTimeColumnType'
2019-11-19 23:07:10 +08:00
};
2019-10-15 22:11:37 +08:00
2019-10-21 18:40:53 +08:00
function initColumnTypeSelector() {
var $manageModal = $(manageModal);
2019-10-25 16:39:12 +08:00
$manageModal.off('change', '#repository-column-data-type').on('change', '#repository-column-data-type', function() {
2019-10-21 18:40:53 +08:00
$('.column-type').hide();
2019-11-26 16:31:32 +08:00
$('.' + $(this).val()).show();
2019-10-14 21:27:03 +08:00
});
}
function removeElementFromDom(column) {
2019-10-21 18:40:53 +08:00
$('.repository-column-edtior .list-group-item[data-id="' + column.id + '"]').remove();
2019-10-14 21:27:03 +08:00
if ($('.list-group-item').length === 0) {
location.reload();
}
}
2019-10-21 18:40:53 +08:00
function initDeleteSubmitAction() {
var $manageModal = $(manageModal);
$manageModal.off('click', '#delete-repo-column-submit').on('click', '#delete-repo-column-submit', function() {
2019-10-14 21:27:03 +08:00
animateSpinner();
2019-10-21 18:40:53 +08:00
$manageModal.modal('hide');
$.ajax({
url: $(this).data('delete-url'),
type: 'DELETE',
dataType: 'json',
success: (result) => {
removeElementFromDom(result);
HelperModule.flashAlertMsg(result.message, 'success');
animateSpinner(null, false);
},
error: (result) => {
animateSpinner(null, false);
HelperModule.flashAlertMsg(result.responseJSON.error, 'danger');
}
2019-10-14 21:27:03 +08:00
});
});
}
2019-11-11 05:36:17 +08:00
function checkData() {
2019-11-19 22:05:54 +08:00
var currentPartial = $('#repository-column-data-type').val();
2019-11-11 16:04:36 +08:00
2019-11-19 23:07:10 +08:00
if (columnTypeClassNames[currentPartial]) {
return eval(columnTypeClassNames[currentPartial])
2019-11-11 16:04:36 +08:00
.checkValidation();
}
return true;
2019-11-11 05:36:17 +08:00
}
2019-11-19 23:07:10 +08:00
function addSpecificParams(type, params) {
var allParams = params;
var columnParams;
var specificParams;
var currentPartial = $('#repository-column-data-type').val();
if (columnTypeClassNames[currentPartial]) {
specificParams = eval(columnTypeClassNames[currentPartial]).loadParams();
columnParams = Object.assign(params.repository_column, specificParams);
allParams.repository_column = columnParams;
}
return allParams;
}
2019-10-14 21:27:03 +08:00
2019-10-21 18:40:53 +08:00
function insertNewListItem(column) {
2019-10-22 19:20:05 +08:00
var attributes = column.attributes;
2019-10-21 18:40:53 +08:00
var html = `<li class="list-group-item row" data-id="${column.id}">
2019-10-14 21:27:03 +08:00
<div class="col-xs-8">
2019-10-22 19:20:05 +08:00
<span class="pull-left column-name">${attributes.name}</span>
2019-10-14 21:27:03 +08:00
</div>
<div class="col-xs-4">
<span class="controlls pull-right">
2019-10-22 19:20:05 +08:00
<button class="btn btn-default edit-repo-column manage-repo-column"
2019-10-21 18:40:53 +08:00
data-action="edit"
2019-10-22 19:20:05 +08:00
data-modal-url="${attributes.edit_html_url}"
2019-10-21 18:40:53 +08:00
>
<span class="fas fa-pencil-alt"></span>
2019-10-22 17:18:31 +08:00
${ I18n.t('libraries.repository_columns.index.edit_column')}
2019-10-21 18:40:53 +08:00
</button>
2019-10-22 19:20:05 +08:00
<button class="btn btn-default delete-repo-column manage-repo-column"
2019-10-21 18:40:53 +08:00
data-action="destroy"
2019-10-22 19:20:05 +08:00
data-modal-url="${attributes.destroy_html_url}"
2019-10-21 18:40:53 +08:00
>
2019-10-21 19:01:31 +08:00
<span class="fas fa-trash-alt"></span>
2019-10-22 17:18:31 +08:00
${ I18n.t('libraries.repository_columns.index.delete_column')}
2019-10-14 21:27:03 +08:00
</button>
</span>
</div>
</li>`;
// remove element if already persent
$('[data-id="' + column.id + '"]').remove();
2019-10-15 22:11:37 +08:00
$(html).insertBefore('.repository-columns-body ul li:first');
2019-10-14 21:27:03 +08:00
// remove 'no column' list item
$('[data-attr="no-columns"]').remove();
}
2019-10-25 16:39:12 +08:00
function updateListItem(column) {
var name = column.attributes.name;
2019-11-19 22:05:54 +08:00
$('li[data-id=' + column.id + ']').find('span').first().html(name);
2019-10-25 16:39:12 +08:00
}
2019-10-21 18:40:53 +08:00
function initCreateSubmitAction() {
var $manageModal = $(manageModal);
$manageModal.off('click', '#new-repo-column-submit').on('click', '#new-repo-column-submit', function() {
var url = $('#repository-column-data-type').find(':selected').data('create-url');
var params = { repository_column: { name: $('#repository-column-name').val() } };
2019-11-19 22:05:54 +08:00
var selectedType = $('#repository-column-data-type').val();
2019-11-19 23:07:10 +08:00
params = addSpecificParams(selectedType, params);
2019-11-20 22:24:16 +08:00
if (!checkData()) return;
2019-11-11 05:36:17 +08:00
$.ajax({
url: url,
type: 'POST',
data: JSON.stringify(params),
contentType: 'application/json',
success: function(result) {
var data = result.data;
insertNewListItem(data);
HelperModule.flashAlertMsg(data.attributes.message, 'success');
$manageModal.modal('hide');
},
error: function(error) {
$('#new-repository-column').renderFormErrors('repository_column', error.responseJSON.repository_column, true);
}
2019-10-22 17:18:31 +08:00
});
2019-10-16 19:31:14 +08:00
});
}
2019-10-21 18:40:53 +08:00
function initEditSubmitAction() {
var $manageModal = $(manageModal);
2019-10-25 16:39:12 +08:00
$manageModal.off('click', '#update-repo-column-submit').on('click', '#update-repo-column-submit', function() {
var url = $('#repository-column-data-type').find(':selected').data('edit-url');
var params = { repository_column: { name: $('#repository-column-name').val() } };
2019-11-19 22:05:54 +08:00
var selectedType = $('#repository-column-data-type').val();
2019-11-19 23:07:10 +08:00
params = addSpecificParams(selectedType, params);
2019-11-20 22:24:16 +08:00
if (!checkData()) return;
2019-11-11 05:36:17 +08:00
2019-10-25 16:39:12 +08:00
$.ajax({
url: url,
type: 'PUT',
data: JSON.stringify(params),
dataType: 'json',
contentType: 'application/json',
2019-10-25 16:39:12 +08:00
success: function(result) {
var data = result.data;
updateListItem(data);
HelperModule.flashAlertMsg(data.attributes.message, 'success');
$manageModal.modal('hide');
},
error: function(error) {
$('#new-repository-column').renderFormErrors('repository_column', error.responseJSON.repository_column, true);
}
});
2019-10-21 18:40:53 +08:00
});
}
2019-10-15 22:11:37 +08:00
2019-10-21 18:40:53 +08:00
function initManageColumnModal() {
var $manageModal = $(manageModal);
$('.repository-column-edtior').off('click', '.manage-repo-column').on('click', '.manage-repo-column', function() {
var button = $(this);
var modalUrl = button.data('modal-url');
var columnType;
2019-10-21 18:40:53 +08:00
$.get(modalUrl, (data) => {
$manageModal.modal('show').find('.modal-content').html(data.html)
.find('#repository-column-name')
.focus();
columnType = $('#repository-column-data-type').val();
2019-11-19 23:07:10 +08:00
$manageModal
.trigger('columnModal::partialLoadedFor' + columnType);
2019-10-21 18:40:53 +08:00
if (button.data('action') === 'new') {
2019-11-26 16:31:32 +08:00
$('.RepositoryTextValue').show();
2019-10-25 16:39:12 +08:00
$('#new-repo-column-submit').show();
} else {
$('#update-repo-column-submit').show();
2019-11-26 16:31:32 +08:00
$('.' + columnType).show();
2019-10-21 18:40:53 +08:00
}
}).fail(function() {
HelperModule.flashAlertMsg(I18n.t('libraries.repository_columns.no_permissions'), 'danger');
2019-10-14 21:27:03 +08:00
});
});
}
return {
init: () => {
2019-10-15 22:11:37 +08:00
if ($('.repository-columns-header').length > 0) {
2019-10-21 18:40:53 +08:00
initColumnTypeSelector();
initEditSubmitAction();
initCreateSubmitAction();
initDeleteSubmitAction();
initManageColumnModal();
2019-10-25 23:38:15 +08:00
RepositoryListColumnType.init();
2019-11-06 23:45:07 +08:00
RepositoryStatusColumnType.init();
2019-11-26 16:31:32 +08:00
RepositoryDateTimeColumnType.init();
2019-10-15 16:59:43 +08:00
}
2019-10-14 21:27:03 +08:00
}
};
}());
$(document).on('turbolinks:load', function() {
RepositoryColumns.init();
});