scinote-web/app/assets/javascripts/protocols/steps.js.erb
sboursen-scinote 9b24bf9504 Fix Protocols.io modal not loading any protocols [SCI-9468]
The JavaScript responsible for loading the list was attached to a
Partial that by itself was loaded using and AJAX request. Therefore,
The JavaScript was not being executed (no page reload). It was thus moved
to the parent partial (loaded on page reload) and called when the required
HTML is appended to the DOM.
2023-10-05 12:03:05 +02:00

121 lines
4.1 KiB
Text

//= require Sortable.min
var protocolSteps = function() {
(function(global) {
'use strict';
// Creates handsontable where needed
function initHandsOnTable(root) {
root.find("[data-role='hot-table']").each(function() {
var $container = $(this).find("[data-role='step-hot-table']");
var contents = $(this).find('.hot-contents');
$container.handsontable({
startRows: <%= Constants::HANDSONTABLE_INIT_ROWS_CNT %>,
startCols: <%= Constants::HANDSONTABLE_INIT_COLS_CNT %>,
rowHeaders: true,
colHeaders: true,
fillHandle: false,
formulas: true,
cells: function (row, col, prop) {
var cellProperties = {};
if (col >= 0)
cellProperties.readOnly = true;
else
cellProperties.readOnly = false;
return cellProperties;
}
});
var hot = $container.handsontable('getInstance');
if (contents.attr("value")) {
var data = JSON.parse(contents.attr("value"));
if (Array.isArray(data.data)) hot.loadData(data.data);
setTimeout(() => {
hot.render()
}, 0)
}
});
}
// On init
initHandsOnTable($(document));
SmartAnnotation.preventPropagation('.atwho-user-popover');
$(function () {
$("[data-action='collapse-steps']").click(function () {
$('.step .panel-collapse').collapse('hide');
});
});
global.initHandsOnTable = initHandsOnTable;
})(window);
(function() {
// Reorder attachments
function reorderAttachmentsInit() {
$('#steps').on('click', '.attachments-actions .change-order', function(e){
var orderDropdown = $(this).closest('.dropdown-menu');
var assetsContainer = $(`.attachments[data-step-id=${orderDropdown.data('step-id')}]`)
var order = $(this).data('order');
e.preventDefault();
assetsContainer.data('order', order);
orderDropdown.find('.change-order').removeClass('selected');
$(this).addClass('selected');
assetsContainer.trigger('reorder');
$.post(orderDropdown.data('state-save-url'), {
assets: { order: order }
});
})
$('#steps').on('reorder', '.attachments', function() {
var assets = $(`.attachments[data-step-id=${$(this).data('step-id')}] .asset`);
var order = $(this).data('order');
var sortedAssets = assets.sort(function(a, b) {
if (a.dataset.assetOrder == b.dataset.assetOrder) {
if (order == 'new') {
return b.dataset.assetUpdatedAt - a.dataset.assetUpdatedAt;
} if (order == 'old') {
return a.dataset.assetUpdatedAt - b.dataset.assetUpdatedAt;
} if (order == 'atoz') {
return a.dataset.assetFileName.toLowerCase() > b.dataset.assetFileName.toLowerCase() ? 1 : -1;
} if (order == 'ztoa') {
return b.dataset.assetFileName.toLowerCase() > a.dataset.assetFileName.toLowerCase() ? 1 : -1;
}
}
return a.dataset.assetOrder > b.dataset.assetOrder ? 1 : -1
})
$.each(sortedAssets, function(i, element){
element.style.order = i
})
})
.on('DOMSubtreeModified', '.attachments', function() {
$(this).trigger('reorder');
})
$('.attachments').trigger('reorder');
}
function initAssetViewModeToggle(){
$('#steps').on('click', '.attachments-actions .attachments-view-mode', function () {
var viewModeBtn = $(this);
$.post(viewModeBtn.closest('.dropdown-menu').data('view-mode-url'), {
assets_view_mode: viewModeBtn.data('assets-view-mode')
}, function(result) {
viewModeBtn.closest('.dropdown-menu').find('.attachments-view-mode').removeClass('selected');
viewModeBtn.addClass('selected');
viewModeBtn.closest('.step').find('.attachments').html(result.html);
PdfPreview.initCanvas();
})
})
}
reorderAttachmentsInit();
initAssetViewModeToggle();
});
}