2022-11-07 18:46:54 +08:00
|
|
|
/* global I18n GLOBAL_CONSTANTS InfiniteScroll */
|
2022-10-24 21:25:02 +08:00
|
|
|
|
2022-11-07 18:49:25 +08:00
|
|
|
var ExperimnetTable = {
|
|
|
|
permissions: ['editable', 'archivable', 'restorable', 'moveable'],
|
2022-10-20 16:42:38 +08:00
|
|
|
selectedId: [],
|
|
|
|
table: '.experiment-table',
|
|
|
|
render: {},
|
2022-11-07 18:49:25 +08:00
|
|
|
selectedMyModules: [],
|
2022-11-07 18:46:54 +08:00
|
|
|
pageSize: GLOBAL_CONSTANTS.DEFAULT_ELEMENTS_PER_PAGE,
|
|
|
|
loadPlaceholder: function() {
|
|
|
|
let placeholder = '';
|
|
|
|
$.each(Array(this.pageSize), function() {
|
|
|
|
placeholder += $('#experimentTablePlaceholder').html();
|
|
|
|
});
|
|
|
|
$(placeholder).insertAfter($(this.table).find('.table-body'));
|
|
|
|
},
|
|
|
|
appendRows: function(result) {
|
|
|
|
$.each(result, (id, data) => {
|
|
|
|
// Checkbox selector
|
|
|
|
let row = `
|
|
|
|
<div class="table-body-cell">
|
2022-11-07 18:49:25 +08:00
|
|
|
<div class="sci-checkbox-container">
|
|
|
|
<input type="checkbox" class="sci-checkbox my-module-selector" data-my-module="${id}">
|
|
|
|
<span class="sci-checkbox-label"></span>
|
|
|
|
</div>
|
2022-11-07 18:46:54 +08:00
|
|
|
</div>`;
|
|
|
|
// Task columns
|
|
|
|
$.each(data, (_i, cell) => {
|
|
|
|
row += `
|
2022-10-20 16:42:38 +08:00
|
|
|
<div class="table-body-cell">
|
2022-11-07 18:46:54 +08:00
|
|
|
${ExperimnetTable.render[cell.column_type](cell.data)}
|
2022-10-20 16:42:38 +08:00
|
|
|
</div>
|
2022-11-07 18:46:54 +08:00
|
|
|
`;
|
|
|
|
});
|
|
|
|
// Menu
|
|
|
|
row += '<div class="table-body-cell"></div>';
|
2022-11-07 18:49:25 +08:00
|
|
|
$(`<div class="table-row" data-id="${id}">${row}</div>`).appendTo(`${this.table} .table-body`);
|
|
|
|
});
|
|
|
|
},
|
|
|
|
checkActionPermission: function(permission) {
|
|
|
|
let allMyModules;
|
|
|
|
|
|
|
|
allMyModules = this.selectedMyModules.every((id) => {
|
|
|
|
return $(`.table-row[data-id="${id}"]`).data(permission);
|
|
|
|
});
|
|
|
|
|
|
|
|
return allMyModules;
|
|
|
|
},
|
|
|
|
initSelectAllCheckbox: function() {
|
|
|
|
$(this.table).on('click', '.select-all-checkboxes .sci-checkbox', (e1) => {
|
|
|
|
$.each($('.my-module-selector'), (_i, e2) => {
|
|
|
|
if (e1.target.checked !== e2.checked) e2.click();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
},
|
|
|
|
initSelector: function() {
|
|
|
|
$(this.table).on('click', '.my-module-selector', (e) => {
|
|
|
|
let checkbox = e.target;
|
|
|
|
let myModuleId = checkbox.dataset.myModule;
|
|
|
|
let row = $(`.table-row[data-id="${myModuleId}"]`);
|
|
|
|
let index = $.inArray(myModuleId, this.selectedMyModules);
|
|
|
|
|
|
|
|
// If checkbox is checked and row ID is not in list of selected project IDs
|
|
|
|
if (checkbox.checked && index === -1) {
|
|
|
|
$(checkbox).closest('.table-row').addClass('selected');
|
|
|
|
this.selectedMyModules.push(myModuleId);
|
|
|
|
// Otherwise, if checkbox is not checked and ID is in list of selected IDs
|
|
|
|
} else if (!this.checked && index !== -1) {
|
|
|
|
$(checkbox).closest('.table-row').removeClass('selected');
|
|
|
|
this.selectedMyModules.splice(index, 1);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (checkbox.checked) {
|
|
|
|
$.get($(`.table-row[data-id="${myModuleId}"] .my-module-urls`).data('url-permissions'), (result) => {
|
|
|
|
this.permissions.forEach((permission) => {
|
|
|
|
row.data(permission, result[permission]);
|
|
|
|
});
|
|
|
|
this.updateExperimentToolbar();
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
this.updateExperimentToolbar();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
},
|
|
|
|
updateExperimentToolbar: function() {
|
|
|
|
let experimentToolbar = $('.toolbar-row');
|
|
|
|
|
|
|
|
if (this.selectedMyModules.length === 0) {
|
|
|
|
experimentToolbar.find('.single-object-action, .multiple-object-action').addClass('hidden');
|
|
|
|
} else if (this.selectedMyModules.length === 1) {
|
|
|
|
experimentToolbar.find('.single-object-action, .multiple-object-action').removeClass('hidden');
|
|
|
|
} else {
|
|
|
|
experimentToolbar.find('.single-object-action').addClass('hidden');
|
|
|
|
experimentToolbar.find('.multiple-object-action').removeClass('hidden');
|
|
|
|
}
|
|
|
|
|
|
|
|
this.permissions.forEach((permission) => {
|
|
|
|
if (!this.checkActionPermission(permission)) {
|
|
|
|
experimentToolbar.find(`.btn[data-for="${permission}"]`).addClass('hidden');
|
|
|
|
}
|
2022-11-07 18:46:54 +08:00
|
|
|
});
|
|
|
|
},
|
|
|
|
init: function() {
|
|
|
|
var dataUrl = $(this.table).data('my-modules-url');
|
|
|
|
this.loadPlaceholder();
|
2022-11-07 18:49:25 +08:00
|
|
|
this.initSelector();
|
|
|
|
this.initSelectAllCheckbox();
|
2022-11-07 18:46:54 +08:00
|
|
|
$.get(dataUrl, (result) => {
|
|
|
|
$(this.table).find('.table-row').remove();
|
|
|
|
this.appendRows(result.data);
|
|
|
|
InfiniteScroll.init(this.table, {
|
|
|
|
url: dataUrl,
|
|
|
|
eventTarget: window,
|
|
|
|
placeholderTemplate: '#experimentTablePlaceholder',
|
|
|
|
endOfListTemplate: '#experimentTableEndOfList',
|
|
|
|
pageSize: this.pageSize,
|
|
|
|
lastPage: !result.next_page,
|
|
|
|
customResponse: (response) => {
|
|
|
|
this.appendRows(response.data);
|
|
|
|
}
|
2022-10-20 16:42:38 +08:00
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
ExperimnetTable.render.task_name = function(data) {
|
|
|
|
return `<a href="${data.url}">${data.name}</a>`;
|
|
|
|
};
|
|
|
|
|
|
|
|
ExperimnetTable.render.id = function(data) {
|
2022-11-07 18:49:25 +08:00
|
|
|
let element = $(`<div class="my-module-urls">${data.id}</div>`);
|
|
|
|
$.each(data.urls, (name, url) => {
|
|
|
|
element.attr(`data-url-${name}`, url);
|
|
|
|
});
|
|
|
|
return element.prop('outerHTML');
|
2022-10-20 16:42:38 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
ExperimnetTable.render.due_date = function(data) {
|
|
|
|
return data;
|
|
|
|
};
|
|
|
|
|
|
|
|
ExperimnetTable.render.age = function(data) {
|
|
|
|
return data;
|
|
|
|
};
|
|
|
|
|
|
|
|
ExperimnetTable.render.results = function(data) {
|
|
|
|
return `<a href="${data.url}">${data.count}</a>`;
|
|
|
|
};
|
|
|
|
|
|
|
|
ExperimnetTable.render.status = function(data) {
|
|
|
|
return `<div class="my-module-status" style="background-color: ${data.color}">${data.name}</div>`;
|
|
|
|
};
|
|
|
|
|
|
|
|
ExperimnetTable.render.assigned = function(data) {
|
2022-10-24 21:25:02 +08:00
|
|
|
let users = '';
|
|
|
|
$.each(data.users, (_i, user) => {
|
|
|
|
users += `
|
|
|
|
<span class="global-avatar-container">
|
|
|
|
<img src=${user.image_url} title=${user.title}>
|
|
|
|
</span>
|
|
|
|
`;
|
|
|
|
});
|
|
|
|
|
|
|
|
if (data.length > 3) {
|
|
|
|
users += `
|
|
|
|
<span class="more-users" title="${data.more_users_title}">
|
|
|
|
+${data.length - 3}
|
|
|
|
</span>
|
|
|
|
`;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (data.manage_url) {
|
|
|
|
users = `
|
|
|
|
<a href="${data.manage_url}" class= 'my-module-users-link', data-action='remote-modal'>
|
|
|
|
${users}
|
|
|
|
<span class="new-user global-avatar-container">
|
|
|
|
<i class="fas fa-plus"></i>
|
|
|
|
</span>
|
|
|
|
</a>
|
|
|
|
`;
|
|
|
|
}
|
|
|
|
|
|
|
|
return users;
|
2022-10-20 16:42:38 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
ExperimnetTable.render.tags = function(data) {
|
2022-11-02 22:17:10 +08:00
|
|
|
const value = parseInt(data.tags, 10) === 0 ? I18n.t('experiments.table.add_tag') : data.tags;
|
2022-11-07 18:49:25 +08:00
|
|
|
return `<a href="${data.edit_url}"
|
|
|
|
id="myModuleTags${data.my_module_id}"
|
|
|
|
data-remote="true"
|
|
|
|
class="edit-tags-link">${value}</a>`;
|
2022-10-20 16:42:38 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
ExperimnetTable.render.comments = function(data) {
|
2022-11-02 22:17:10 +08:00
|
|
|
return `<a href="#"
|
|
|
|
class="open-comments-sidebar" id="comment-count-${data.id}"
|
2022-10-27 20:41:35 +08:00
|
|
|
data-object-type="MyModule" data-object-id="${data.id}">
|
|
|
|
${data.count > 0 ? data.count : '+'}
|
|
|
|
${data.count_unseen > 0 ? `<span class="unseen-comments"> ${data.count_unseen} </span>` : ''}
|
|
|
|
</a>`;
|
2022-10-20 16:42:38 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
ExperimnetTable.init();
|