Merge branch 'develop' into gc_SCI_8645

This commit is contained in:
G-Chubinidze 2023-06-23 11:34:10 +04:00 committed by GitHub
commit 6e4d5db975
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
196 changed files with 1659 additions and 596 deletions

View file

@ -14,6 +14,7 @@
//= require bootstrap-select
//= require_directory ./repository_columns/columns_initializers
//= require datatables
//= require jquery.dataTables.colResize
//= require clndr.min
//= require ajax-bootstrap-select.min
//= require underscore
@ -319,19 +320,16 @@ $(document).on('shown.bs.modal', '.modal', function() {
let userNamePopover;
const renderUserNamePopover = (url, fullName, email, html) => {
return `<div class="user-name-popover-wrapper">
<div class='col-xs-4'>
<div class='col-xs-3'>
<img
class='avatar'
src='${url}'
alt='thumb'>
</div>
<div class='col-xs-8'>
<div class='col-xs-9'>
<div class='row'>
<div class='col-xs-9 text-left'>
<h5 class='full-name'>${fullName}</h5>
</div>
<div class='col-xs-3 text-right'>
<span class='sn-icon sn-icon-close' aria-hidden='true'></span>
<div class='col-xs-12 text-left font-bold'>
${fullName}
</div>
</div>
<div class='row'>

View file

@ -6,11 +6,11 @@ var DasboardCalendarWidget = (function() {
return `<script id="calendar-template" type="text/template">
<div class="controls">
<div class="clndr-previous-button">
<div class="btn btn-light icon-btn"><i class="sn-icon sn-icon-double-navigate-before"></i></div>
<div class="btn btn-light icon-btn"><i class="sn-icon sn-icon-left"></i></div>
</div>
<div class="clndr-title"><%= month %> <%= year %></div>
<div class="clndr-next-button">
<div class="btn btn-light icon-btn"><i class="sn-icon sn-icon sn-icon-double-navigate-after"></i></div>
<div class="btn btn-light icon-btn"><i class="sn-icon sn-icon sn-icon-right"></i></div>
</div>
</div>
<div class="days-container">

View file

@ -88,7 +88,7 @@ var DasboardQuickStartWidget = (function() {
}
});
$(createTaskButton).click((e) => {
$(createTaskButton).one('click', (e) => {
var params = {};
if (dropdownSelector.getValues(projectFilter) === '0') {
params.project = {

View file

@ -204,7 +204,7 @@ var ExperimnetTable = {
$(this.table).on('click', '.duplicate-my-module', (e) => {
e.preventDefault();
e.stopPropagation();
this.duplicateMyModules($('#duplicateTasks').data('url'), e.currentTarget.dataset.id);
this.duplicateMyModules(e.currentTarget.href, e.currentTarget.dataset.id);
});
$(this.table).on('click', '.move-my-module', (e) => {

View file

@ -228,18 +228,18 @@ var globalActivities = (function() {
${dateContainer[0].dataset.periodLabel}
${$('.ga-side .date-selector.filter-block')[0].dataset.periodSelect}
</div>
<i class="sn-icon sn-icon-close"></i>
<i class="sn-icon sn-icon-close-small"></i>
</div>`).appendTo('.ga-top .ga-tags')
.find('.fa-times').click(() => {
.find('.sn-icon-close-small').click(() => {
$('.date-selector .date.clear').click();
});
}
$.each($('.ga-side .ds-tags'), function(index, tag) {
var newTag = $(tag.outerHTML).appendTo('.ga-top .ga-tags');
newTag.find('.fa-times')
newTag.find('.sn-icon-close-small')
.click(function() {
newTag.addClass('closing');
$(tag).find('.fa-times').click();
$(tag).find('.sn-icon-close-small').click();
});
});
}

View file

@ -253,6 +253,13 @@ var MyModuleRepositories = (function() {
SIMPLE_TABLE.ajax.reload(null, false);
}
function addRepositorySearch() {
$(`<div id="inventorySearchComponent">
<repository_search_container/>
</div>`).appendTo('.filter-container');
initRepositorySearch();
}
function renderFullViewTable(tableContainer, options = {}) {
if (FULL_VIEW_TABLE) FULL_VIEW_TABLE.destroy();
SELECTED_ROWS = {};
@ -285,7 +292,8 @@ var MyModuleRepositories = (function() {
fnInitComplete: function() {
var dataTableWrapper = $(tableContainer).closest('.dataTables_wrapper');
DataTableHelpers.initLengthAppearance(dataTableWrapper);
DataTableHelpers.initSearchField(dataTableWrapper, I18n.t('repositories.show.filter_inventory_items'));
$('.dataTables_filter').addClass('hidden');
addRepositorySearch();
$("<i class='sn-icon sn-icon-barcode'></i>").appendTo($('.search-container'));
dataTableWrapper.find('.main-actions, .pagination-row').removeClass('hidden');
if (options.assign_mode) {
@ -756,6 +764,8 @@ var MyModuleRepositories = (function() {
UPDATE_REPOSITORY_MODAL.data('update-url', data.update_url);
UPDATE_REPOSITORY_MODAL.modal('show');
});
$(document).on('hidden.bs.modal', '#updateRepositoryRecordModal', () => $('body').addClass('modal-open'));
}
function submitUpdateRepositoryRecord(options = {}) {

View file

@ -567,12 +567,12 @@ var ProjectsIndex = (function() {
let $textFilter = $('#textSearchFilterInput', $projectsFilter);
function getFilterValues() {
createdOnFromFilter = selectDate($createdOnFromFilter);
createdOnToFilter = selectDate($createdOnToFilter);
membersFilter = dropdownSelector.getValues($('.members-filter'));
lookInsideFolders = $foldersCB.prop('checked') ? 'true' : '';
archivedOnFromFilter = selectDate($archivedOnFromFilter);
archivedOnToFilter = selectDate($archivedOnToFilter);
createdOnFromFilter = selectDate($createdOnFromFilter) || $createdOnFromFilter.val();
createdOnToFilter = selectDate($createdOnToFilter) || $createdOnToFilter.val();
membersFilter = dropdownSelector.getData($('.members-filter'));
lookInsideFolders = !!$foldersCB.prop('checked');
archivedOnFromFilter = selectDate($archivedOnFromFilter) || $archivedOnFromFilter.val();
archivedOnToFilter = selectDate($archivedOnToFilter) || $archivedOnToFilter.val();
projectsViewSearch = $textFilter.val();
}
@ -580,13 +580,13 @@ var ProjectsIndex = (function() {
getFilterValues();
currentFilters = {
createdOnFromFilter: selectDate($createdOnFromFilter),
createdOnToFilter: selectDate($createdOnToFilter),
membersFilter: dropdownSelector.getData($('.members-filter')),
lookInsideFolders: !!$foldersCB.prop('checked'),
archivedOnFromFilter: selectDate($archivedOnFromFilter),
archivedOnToFilter: selectDate($archivedOnToFilter),
projectsViewSearch: $textFilter.val()
createdOnFromFilter: createdOnFromFilter,
createdOnToFilter: createdOnToFilter,
membersFilter: membersFilter,
lookInsideFolders: lookInsideFolders,
archivedOnFromFilter: archivedOnFromFilter,
archivedOnToFilter: archivedOnToFilter,
projectsViewSearch: projectsViewSearch
};
}
@ -650,10 +650,10 @@ var ProjectsIndex = (function() {
currentFilters = null;
dropdownSelector.clearData($membersFilter);
if ($createdOnFromFilter.data('DateTimePicker')) $createdOnFromFilter.data('DateTimePicker').clear();
if ($createdOnToFilter.data('DateTimePicker')) $createdOnToFilter.data('DateTimePicker').clear();
if ($archivedOnFromFilter.data('DateTimePicker')) $archivedOnFromFilter.data('DateTimePicker').clear();
if ($archivedOnToFilter.data('DateTimePicker')) $archivedOnToFilter.data('DateTimePicker').clear();
$createdOnFromFilter.val('');
$createdOnToFilter.val('');
$archivedOnFromFilter.val('');
$archivedOnToFilter.val('');
$foldersCB.prop('checked', false);
$textFilter.val('');
});

View file

@ -25,7 +25,7 @@
if (data.error) {
let oldLink = '';
if (data.preview_url) {
oldLink = `<a href="#" class="file-preview-link docx" data-preview-url="${data.preview_url}">
oldLink = `<a href="#" class="file-preview-link flex items-center gap-1 docx hover:no-underline whitespace-nowrap" data-preview-url="${data.preview_url}">
(<i class="fas fa-file-docx"></i>
${I18n.t('projects.reports.index.previous_docx')})
</a>`;
@ -43,7 +43,7 @@
}
if (data.preview_url) {
return `<a href="#" class="file-preview-link docx" data-preview-url="${data.preview_url}">
return `<a href="#" class="file-preview-link flex items-center gap-1 docx hover:no-underline whitespace-nowrap" data-preview-url="${data.preview_url}">
<i class="sn-icon sn-icon-file-word"></i>
${I18n.t('projects.reports.index.docx')}
</a>`;
@ -55,7 +55,7 @@
if (data.error) {
let oldLink = '';
if (data.preview_url) {
oldLink = `<a href="#" class="file-preview-link pdf" data-preview-url="${data.preview_url}">
oldLink = `<a href="#" class="file-preview-link flex items-center gap-1 pdf hover:no-underline whitespace-nowrap" data-preview-url="${data.preview_url}">
(<i class="fas fa-file-pdf"></i>
${I18n.t('projects.reports.index.previous_pdf')})
</a>`;
@ -73,7 +73,7 @@
}
if (data.preview_url) {
return `<a href="#" class="file-preview-link pdf" data-preview-url="${data.preview_url}">
return `<a href="#" class="file-preview-link flex items-center gap-1 pdf hover:no-underline whitespace-nowrap" data-preview-url="${data.preview_url}">
<i class="fas fa-file-pdf"></i>
${I18n.t('projects.reports.index.pdf')}
</a>`;

View file

@ -23,4 +23,4 @@ function pageNumbers() {
});
}
$('#reports-footer-header-template').on('load', pageNumbers);
pageNumbers();

View file

@ -1,8 +0,0 @@
(function() {
'use strict';
$('.delete-repo-option').initSubmitModal('#delete-repo-modal', 'repository');
$('.rename-repo-option').initSubmitModal('#rename-repo-modal', 'repository');
$('.share-repo-option').initSubmitModal('.share-repo-modal', 'repository');
$('.copy-repo-option').initSubmitModal('#copy-repo-modal', 'repository');
})();

View file

@ -159,8 +159,38 @@
var inputField = $('#repository_name');
var value = inputField.val();
inputField.focus().val('').val(value);
}).on('shown.bs.modal', '#export-repositories-modal', function() {
const selectedInventoriesCount = CHECKBOX_SELECTOR.selectedRows.length;
const firstDescription = $(this).find('.description-p1');
const teamName = firstDescription.data('team-name');
const exportButton = $(this).find('#export-repositories-modal-submit');
const exportURL = exportButton.data('export-url');
firstDescription.html(I18n.t(
'repositories.index.modal_export.description_p1_html',
{
team_name: teamName,
count: selectedInventoriesCount
}
));
exportButton.on('click', function() {
$.ajax({
url: exportURL,
method: 'POST',
data: { repository_ids: CHECKBOX_SELECTOR.selectedRows },
success: function(data) {
HelperModule.flashAlertMsg(data.message, 'success');
CHECKBOX_SELECTOR.clearSelection();
$('#export-repositories-modal').modal('hide');
},
error: function(data) {
HelperModule.flashAlertMsg(data.responseJSON.message, 'danger');
}
});
});
});
$('.create-new-repository').initSubmitModal('#create-repo-modal', 'repository');
if (notTurbolinksPreview()) {
initRepositoriesDataTable('#repositoriesList', $('.repositories-index').hasClass('archived'));

View file

@ -20,6 +20,7 @@ var RepositoryDatatable = (function(global) {
var rowsSelected = [];
var rowsLocked = [];
var colSizeMap = {};
// Tells whether we're currently viewing or editing table
var currentMode = 'viewMode';
@ -50,6 +51,18 @@ var RepositoryDatatable = (function(global) {
return rowsSelected.every(r => visibleRowIds.includes(r));
}
function updateColSizeMap(state) {
if (!state.ColSizes) return;
for (let i = 0; i < state.ColSizes.length; i += 1) {
colSizeMap[state.ColReorder[i]] = state.ColSizes[i];
}
}
function restoreColumnSizes() {
TABLE.colResize.restore();
}
// Enable/disable edit button
function updateButtons() {
if (window.actionToolbarComponent) {
@ -171,14 +184,21 @@ var RepositoryDatatable = (function(global) {
TABLE.button(0).enable(true);
$('#saveRecord').attr('disabled', false);
$(TABLE_WRAPPER_ID).find('tr').removeClass('blocked');
if (TABLE.ColSizes) {
$(TABLE_WRAPPER_ID).find('.table').addClass('table--resizable-columns');
}
updateButtons();
disableCheckboxToggleOnCheckboxPreview();
restoreColumnSizes();
}
function changeToEditMode() {
$('#newRepoNameField').focus();
currentMode = 'editMode';
$(TABLE_WRAPPER_ID).find('.table').removeClass('table--resizable-columns');
adjustTableHeader();
clearRowSelection();
updateButtons();
initEditRowForms();
@ -464,6 +484,29 @@ var RepositoryDatatable = (function(global) {
initRepositorySearch();
}
function saveState(state) {
// Send an Ajax request to the server with the state object
let repositoryId = $(TABLE_ID).data('repository-id');
var viewType = $('.repository-show').hasClass('archived') ? 'archived' : 'active';
localStorage.setItem(
`datatables_repositories_state/${repositoryId}/${viewType}`,
JSON.stringify(state)
);
$.ajax({
url: '/repositories/' + repositoryId + '/state_save',
contentType: 'application/json',
data: JSON.stringify({ state: state }),
dataType: 'json',
type: 'POST'
});
TABLE.ColSizes = state.ColSizes;
restoreColumnSizes();
}
function dataTableInit() {
TABLE = $(TABLE_ID).DataTable({
dom: "R<'repository-toolbar hidden'<'repository-search-container'f>>t<'pagination-row hidden'<'pagination-info'li><'pagination-actions'p>>",
@ -476,7 +519,54 @@ var RepositoryDatatable = (function(global) {
stateDuration: 0,
colReorder: {
fixedColumnsLeft: 2,
realtime: false
realtime: false,
disabledClass: 'dt-colresizable-hover'
},
colResize: {
isEnabled: true,
saveState: true,
hasBoundCheck: false,
isResizable: (column) => {
return column.idx > 0;
},
onResize: function(column) {
// enforce min-width
let width = parseInt(column.width, 10);
let $headerColumn = $(TABLE.column(column.idx).header());
let minWidth = parseInt($headerColumn.css('min-width'), 10);
// get actual column index taking into account hidden columns
let trueColumnIndex = $(`${TABLE_WRAPPER_ID} .dataTables_scrollHeadInner tr`).children().index($headerColumn);
$(
`${TABLE_WRAPPER_ID} th:nth-child(${trueColumnIndex + 1})`
).toggleClass('width-out-of-bounds', width < minWidth);
},
stateSaveCallback: (_, data) => {
$(TABLE_ID).data('col-sizes', data);
let state = TABLE.state();
// force width of checkbox column
data[0] = 30;
state.ColSizes = data;
$(TABLE_WRAPPER_ID).find('.table').addClass('table--resizable-columns');
updateColSizeMap(state);
saveState(state);
},
stateLoadCallback: (state) => {
if (!TABLE.ColSizes) return;
let colSizes = TABLE.ColSizes;
// force width of checkbox column
colSizes[0] = 30;
return colSizes;
},
hoverClass: 'dt-colresizable-hover'
},
destroy: true,
ajax: {
@ -499,6 +589,7 @@ var RepositoryDatatable = (function(global) {
return JSON.stringify(d);
},
complete: restoreColumnSizes,
global: false,
type: 'POST'
},
@ -644,27 +735,26 @@ var RepositoryDatatable = (function(global) {
if (json.state.columns[7]) json.state.columns[7].visible = archived;
if (json.state.search) delete json.state.search;
if (json.state.ColSizes) {
$(TABLE_WRAPPER_ID).find('.table').addClass('table--resizable-columns');
TABLE.ColSizes = json.state.ColSizes;
updateColSizeMap(json.state);
}
callback(json.state);
}
});
},
stateSaveCallback: function(settings, data) {
// Send an Ajax request to the server with the state object
let repositoryId = $(TABLE_ID).data('repository-id');
var viewType = $('.repository-show').hasClass('archived') ? 'archived' : 'active';
if (Object.keys(colSizeMap).length === 0) return;
localStorage.setItem(
`datatables_repositories_state/${repositoryId}/${viewType}`,
JSON.stringify(data)
);
let colSizes = [];
$.ajax({
url: '/repositories/' + repositoryId + '/state_save',
contentType: 'application/json',
data: JSON.stringify({ state: data }),
dataType: 'json',
type: 'POST'
});
for (let i = 0; i < data.ColReorder.length; i += 1) {
colSizes.push(colSizeMap[data.ColReorder[i]]);
}
saveState({ ...data, ColSizes: colSizes });
},
fnInitComplete: function() {
window.initActionToolbar();
@ -699,10 +789,11 @@ var RepositoryDatatable = (function(global) {
rowsLocked.push(parseInt($(e).attr('id'), 10));
});
$(TABLE_WRAPPER_ID).find('.table thead th:not(:first-child)').prepend($('<i class="sn-icon sn-icon-drag column-grip"></i>'));
// go back to manage columns index in modal, on column save, after table loads
$('#manage-repository-column .back-to-column-modal').trigger('click');
initAssignedTasksDropdown(TABLE_ID);
initReminderDropdown(TABLE_ID);
@ -711,6 +802,14 @@ var RepositoryDatatable = (function(global) {
// setTimeout(function() {
// adjustTableHeader();
// }, 500);
let resizeTimeout;
window.addEventListener('resize', () => {
clearTimeout(resizeTimeout);
resizeTimeout = setTimeout(restoreColumnSizes, 200);
});
restoreColumnSizes();
}
});
@ -744,11 +843,6 @@ var RepositoryDatatable = (function(global) {
initRowSelection();
updateSelectedRowsForAssignments();
// $(window).resize(() => {
// setTimeout(() => {
// adjustTableHeader();
// }, 500);
// });
return TABLE;
}
@ -879,7 +973,6 @@ var RepositoryDatatable = (function(global) {
});
changeToEditMode();
// adjustTableHeader();
})
.on('click', '#assignRepositoryRecords', function(e) {
e.preventDefault();

View file

@ -101,8 +101,6 @@
.text(I18n.t('repositories.show.archived_view_label.active', { repository_name: viewValue }));
});
$('.create-new-repository').initSubmitModal('#create-repo-modal', 'repository');
function initArchivingActionsInDropdown() {
$('.archive-repository-option').on('click', function(event) {
event.preventDefault();

View file

@ -247,14 +247,14 @@ var RepositoryColumns = (function() {
if (column.header.id !== 'row-name') {
if (column.visible()) {
self.addClass('fa-eye-slash');
self.removeClass('fa-eye');
self.addClass('sn-icon-visibility-hide');
self.removeClass('sn-icon-visibility-show');
li.addClass('col-invisible');
column.visible(false);
TABLE.setColumnSearchable(column.index(), false);
} else {
self.addClass('fa-eye');
self.removeClass('fa-eye-slash');
self.addClass('sn-icon-visibility-show');
self.removeClass('sn-icon-visibility-hide');
li.removeClass('col-invisible');
column.visible(true);
TABLE.setColumnSearchable(column.index(), true);
@ -321,7 +321,9 @@ var RepositoryColumns = (function() {
<span class="vis sn-icon ${visClass}" title="${visText}"></span>
</span>
<span class="text">${generateColumnNameTooltip(thederName)}</span>
<span class="column-type pull-right">${getColumnTypeText(el, colId)}</span>
<span class="column-type pull-right">${
getColumnTypeText(el, colId) || '<i class="sn-icon sn-icon-locked-task"></i>'
}</span>
<span class="sci-btn-group manage-controls pull-right" data-view-mode="active">
<button class="btn icon-btn btn-light edit-repo-column manage-repo-column"
data-action="edit"

View file

@ -26,10 +26,12 @@ var SmartAnnotation = (function() {
var $html = $(html);
var $liText = $html.find('.item-text, .sa-type');
if ($liText.length === 0 || !query) return html;
const highlightRegex = new RegExp(query.replace(/[()]/g, '\\$&')
.split(' ')
.join('|'), 'gi');
$.each($liText, function(i, item) {
$(item).html($(item).text().replace(new RegExp(query.split(' ').join('|'), 'gi'),
'<span class="atwho-highlight">$&</span>'));
$.each($liText, function(_i, item) {
$(item).html($(item).text().replace(highlightRegex, '<span class="atwho-highlight">$&</span>'));
});
return $html;
@ -111,10 +113,12 @@ var SmartAnnotation = (function() {
}
a = decodeURI('%C3%80');
y = decodeURI('%C3%BF');
regexp = new RegExp(`${cleanedFlag}$|${cleanedFlag}(\\S[A-Za-z${a}-${y}0-9_/:\\s+-]*)$|${cleanedFlag}(\\S[^\\x00-\\xff]*)$`, 'gi');
regexp = new RegExp(`${cleanedFlag}$|` +
`${cleanedFlag}(\\S[A-Za-z${a}-${y}0-9_/:\\s\\)\\(.+-]*)$|` +
`${cleanedFlag}(\\S[^\\x00-\\xff]*)$`, 'gi');
match = regexp.exec(subtext);
if (match) {
return match[1] || '';
return (match[1] || '').trim();
}
return null;
}

View file

@ -108,7 +108,7 @@
<span class="input-group-addon" id="image-name"></span></div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">${I18n.t('general.cancel')}</button>
<button type="button" class="btn btn-secondary" data-dismiss="modal">${I18n.t('general.cancel')}</button>
<button type="button" class="btn btn-success" data-action="addImageFormClipboard">${I18n.t('assets.from_clipboard.add_image')}</button>
</div>
</div>

View file

@ -286,7 +286,7 @@ var dropdownSelector = (function() {
selectedOption.removeClass('highlight').next().next().addClass('highlight');
}
} else if (pressedKey === 8 && e.target.value === '') { // backspace
deleteTag(selector, container, container.find('.ds-tags .sn-icon-close').last());
deleteTag(selector, container, container.find('.ds-tags .sn-icon-close-small').last());
}
});
}
@ -743,7 +743,7 @@ var dropdownSelector = (function() {
var tag = $(`<div class="${tagAppearance} ${customClass}" style="${customStyle ? customStyle(data) : ''}" >
<div class="tag-label">
</div>
<i class="sn-icon sn-icon-close ${selector.data('config').singleSelect ? 'hidden' : ''}"></i>
<i class="sn-icon sn-icon-close-small ${selector.data('config').singleSelect ? 'hidden' : ''}"></i>
</div>`).insertBefore(container.find('.input-field .search-field'));
@ -758,7 +758,7 @@ var dropdownSelector = (function() {
}
// Now we need add delete action to tag
tag.find('.sn-icon-close').click(function(e) {
tag.find('.sn-icon-close-small').click(function(e) {
e.stopPropagation();
deleteTag(selector, container, $(this));
});

View file

@ -35,10 +35,11 @@ var PdfPreview = (function() {
.on('click', '.pdf-viewer .zoom-out', function() {
var zoomSelector = $(this).closest('.pdf-viewer').find('.zoom-page-selector');
var $canvas = $(this).closest('.pdf-viewer').find('.pdf-canvas');
if (zoomSelector.val() === 'auto') {
var zoomValue = dropdownSelector.getValues(zoomSelector);
if (zoomValue === 'auto') {
dropdownSelector.selectValues(zoomSelector, DEFAULT_ZOOM);
} else {
dropdownSelector.selectValues(zoomSelector, parseFloat(zoomSelector.val()) - ZOOM_STEP);
dropdownSelector.selectValues(zoomSelector, parseFloat(zoomValue) - ZOOM_STEP);
}
renderPdfPage($canvas[0], $canvas.data('current-page'));
})
@ -46,10 +47,11 @@ var PdfPreview = (function() {
.on('click', '.pdf-viewer .zoom-in', function() {
var zoomSelector = $(this).closest('.pdf-viewer').find('.zoom-page-selector');
var $canvas = $(this).closest('.pdf-viewer').find('.pdf-canvas');
if (zoomSelector.val() === 'auto') {
var zoomValue = dropdownSelector.getValues(zoomSelector);
if (zoomValue === 'auto') {
dropdownSelector.selectValues(zoomSelector, DEFAULT_ZOOM);
} else {
dropdownSelector.selectValues(zoomSelector, parseFloat(zoomSelector.val()) + ZOOM_STEP);
dropdownSelector.selectValues(zoomSelector, parseFloat(zoomValue) + ZOOM_STEP);
}
renderPdfPage($canvas[0], $canvas.data('current-page'));
})
@ -94,8 +96,9 @@ var PdfPreview = (function() {
function refreshZoomButtons(canvas) {
var $viewer = $(canvas).closest('.pdf-viewer');
var zoomSelector = $viewer.find('.zoom-page-selector');
$viewer.find('.zoom-out').attr('disabled', parseFloat(zoomSelector.val()) === MIN_ZOOM);
$viewer.find('.zoom-in').attr('disabled', parseFloat(zoomSelector.val()) === MAX_ZOOM);
var zoomValue = parseFloat(dropdownSelector.getValues(zoomSelector));
$viewer.find('.zoom-out').attr('disabled', zoomValue === MIN_ZOOM);
$viewer.find('.zoom-in').attr('disabled', zoomValue === MAX_ZOOM);
}
function renderPdfPreview(canvas) {
@ -136,7 +139,7 @@ var PdfPreview = (function() {
pdfDocument.getPage(page).then(function(pdfPage) {
var ctx;
var renderTask;
var userScale = $(canvas).closest('.pdf-viewer').find('.zoom-page-selector').val();
var userScale = dropdownSelector.getValues($(canvas).closest('.pdf-viewer').find('.zoom-page-selector'));
var $layersContainer = $(canvas).closest('.pdf-viewer').find('.layers-container');
var scale = userScale === 'auto' ? DEFAULT_ZOOM : userScale;
var viewport = pdfPage.getViewport({ scale: scale });

View file

@ -1,5 +1,5 @@
function initShowPassword() {
$('.fas.fa-eye.show-password').remove();
$('.sn-icon.sn-icon-visibility-show.show-password').remove();
$.each($('input[type="password"]'), function(i, e) {
$(`<i class="sn-icon sn-icon-visibility-show show-password"
style="
@ -17,11 +17,11 @@ $(document).on('turbolinks:load', function() {
$(document).on('click', '.show-password', function() {
let $icon = $(this);
if ($icon.hasClass('fa-eye')) {
$icon.removeClass('fa-eye').addClass('fa-eye-slash');
if ($icon.hasClass('sn-icon-visibility-show')) {
$icon.removeClass('sn-icon-visibility-show').addClass('sn-icon-visibility-hide');
$icon.parent().find('input[type=password]').attr('type', 'text');
} else {
$icon.removeClass('fa-eye-slash').addClass('fa-eye');
$icon.removeClass('sn-icon-visibility-hide').addClass('sn-icon-visibility-show');
$icon.parent().find('input[type=text]').attr('type', 'password');
}
});

View file

@ -3,11 +3,6 @@
#user_assignments_modal {
.btn-role-select {
padding: 0 0 0 16px;
&:hover {
background-color: $color-concrete;
}
&:focus {
box-shadow: none;

View file

@ -8,6 +8,7 @@
}
.actions-container {
align-items: center;
display: flex;
flex-grow: 1;
padding-left: 10px;
@ -114,12 +115,6 @@
}
}
}
&.filters-applied::after {
@include red-dot;
right: .45em;
top: .4em;
}
}
.widget-placeholder {

View file

@ -12,14 +12,11 @@
.dashboard-view {
--dashboard-widgets-gap: 30px;
padding: 15px
var(--dashboard-widgets-gap)
15px
var(--dashboard-widgets-gap);
padding: 1.5rem 0;
}
.dashboard-header {
padding-bottom: 15px;
padding-bottom: 1.5rem;
}
.dashboard-container {

View file

@ -40,7 +40,7 @@
.panel-footer {
.nav > li > a {
padding: 6px 15px;
padding: 1px 15px;
}
.btn {
@ -48,18 +48,15 @@
}
.badge-indicator {
background: $brand-accent;
border-radius: $border-radius-tag;
color: $color-black;
background: var(--sn-science-blue);
border-radius: 50%;
color: var(--sn-white);
font-size: 10px;
margin-left: -8px;
}
}
}
.view-switch-button {
margin-right: .25em;
}
.canvas-preview-img,
.canvas-preview-rect {

View file

@ -45,8 +45,10 @@
.left,
.middle,
.right {
align-items: center;
display: flex;
flex-direction: inherit;
gap: .5rem;
}
}
}

View file

@ -33,6 +33,7 @@
justify-content: space-between;
.toolbar-left-block {
align-items: center;
display: flex;
.btn {
@ -56,7 +57,6 @@
.view-switch-button {
outline: 1px solid $color-alto;
margin-right: .25em;
}
.view-switch,
@ -308,6 +308,7 @@
img {
border-radius: 50%;
width: 24px;
}
}
}
@ -340,7 +341,7 @@
}
.new-user {
color: $color-silver-chalice;
color: var(--sn-black);
line-height: 24px;
&:not(:first-child) {

View file

@ -283,7 +283,7 @@
}
&.list {
grid-auto-rows: 1px minmax(4em, auto);
grid-auto-rows: 1px minmax(3em, auto);
grid-template-columns: max-content minmax(100px, auto) minmax(80px, max-content) repeat(calc(var(--list-columns-number) - 4), minmax(100px, auto)) max-content;
grid-template-rows: 3em;

View file

@ -1,12 +1,38 @@
// scss-lint:disable SelectorDepth QualifyingElement NestingDepth
// Data table
.dataTables_scrollBody {
.column-grip {
display: none !important;
}
}
.table.dataTable {
table-layout: initial;
text-overflow: initial;
width: 100%;
word-break: initial;
&.table--reorderable-columns {
thead tr th:not(:first-child) {
padding-left: 24px;
.column-grip {
color: $color-volcano;
cursor: grab;
display: block;
left: 0;
opacity: 0;
position: absolute;
top: 6px;
}
&:hover .column-grip {
opacity: 1;
}
}
}
thead {
tr {
th {
@ -29,14 +55,8 @@
opacity: 1;
}
&.sorting::after {
opacity: 0;
}
&.sorting:hover {
&::after {
opacity: 1;
}
background-color: $color-alto;
}
&:first-child {
@ -137,32 +157,32 @@
}
&.previous {
align-items: center;
display: inline-flex;
&::before {
@include font-awesome;
content: $font-fas-angle-left;
left: 0;
line-height: 36px;
padding: 0 8px;
position: absolute;
@include font-sn-icon;
content: $sn-icon-left;
}
a {
padding-left: 23px;
min-height: unset;
padding-left: .25rem;
}
}
&.next {
&::before {
@include font-awesome;
content: $font-fas-angle-right;
line-height: 36px;
padding: 0 8px;
position: absolute;
right: 0;
align-items: center;
display: inline-flex;
&::after {
@include font-sn-icon;
content: $sn-icon-right;
}
a {
padding-right: 23px;
min-height: unset;
padding-right: .25rem;
}
}
}

View file

@ -192,14 +192,13 @@
text-decoration: none;
}
.fas {
.sn-icon {
display: inline-block;
margin-right: 3px;
text-align: center;
width: 10px;
}
&:not(.collapsed) .fas {
&:not(.collapsed) .sn-icon {
@include rotate(90deg);
}
}
@ -207,7 +206,7 @@
.activity-card {
cursor: default;
margin-right: 15px;
padding: 5px 0 5px 40px;
padding: 5px 0 5px 5px;
&:hover {
background-color: $color-concrete;
@ -231,17 +230,6 @@
width: 20px;
}
}
&:nth-child(1) {
height: 20px;
margin-left: -35px;
.global-avatar-container {
margin: 0 5px 0 0;
position: relative;
top: 10px;
}
}
}
}
@ -363,14 +351,13 @@
border: 0;
cursor: pointer;
float: left;
justify-content: start;
margin: 0;
opacity: .7;
text-align: left;
width: calc(50% - 25px);
&.selected {
background: $color-alto;
opacity: 1;
background: var(--sn-super-light-grey);
}
&:nth-child(even) {

View file

@ -63,7 +63,7 @@
}
.protocol-description {
margin-bottom: 2em;
padding-left: 1.5em;
padding-left: 2.5rem;
}
.protocol-steps {

View file

@ -75,10 +75,10 @@
.task-section-caret {
align-items: center;
color: $color-volcano;
color: var(--sn-black);
display: inline-flex;
gap: .5rem;
padding: .5em;
padding: .5rem;
text-decoration: none;
.fas {
@ -183,6 +183,8 @@
}
.task-details {
padding-left: 2.5rem;
.fas.block-icon {
margin-right: 8px;
}
@ -355,7 +357,7 @@
right: 0;
text-align: right;
top: 0;
width: 120px;
width: 130px;
z-index: 20;
&.hidden {
@ -363,24 +365,13 @@
}
a {
align-items: center;
color: inherit;
display: inline-block;
line-height: 36px;
display: inline-flex;
gap: .25rem;
height: 36px;
opacity: .7;
text-decoration: none;
i {
float: left;
font-size: 16px;
line-height: 36px;
margin-right: 5px;
padding-top: 1px;
}
span {
float: left;
line-height: 36px;
}
}
}
}
@ -417,6 +408,7 @@
.task-notes {
display: inline-block;
padding-left: 2rem;
position: relative;
width: 100%;

View file

@ -11,6 +11,7 @@
}
#assigned-items-container {
padding-left: 2.5rem;
padding-top: 10px;
.assigned-repository {

View file

@ -49,7 +49,8 @@
.fa-long-arrow-alt-right {
color: $color-silver-chalice;
padding: .5em 0;
padding: 1.5em 0;
z-index: 1;
}
.status-container {

View file

@ -24,8 +24,16 @@
text-decoration: none;
width: 100%;
.sn-icon-dot-small {
color: var(--sn-grey);
}
&:not([data-active='true']):hover {
background-color: var(--sn-super-light-grey);
.sn-icon-dot-small {
color: var(--sn-black);
}
}
.show-submenu {

View file

@ -42,7 +42,7 @@
padding: 1.5rem;
position: absolute;
right: 0;
top: calc(var(--top-navigation-height) - .5em);
top: calc(var(--top-navigation-height) - 1.5rem);
width: 400px;
.sci--navigation--notificaitons-flyout-title {

View file

@ -21,10 +21,6 @@ $color-module-hover: $brand-primary;
align-items: center;
display: flex;
#edit-canvas-button, .new-my-module-button {
margin-right: 5px;
}
.actions-button {
margin-right: 15px;
@ -54,28 +50,21 @@ $color-module-hover: $brand-primary;
}
#canvas-new-module {
.hbtn-default {
opacity: 1;
width: 0;
float: none;
.hbtn-new {
display: inline;
}
.hbtn-hover {
opacity: 0;
width: 0;
height: 0;
float: left;
.hbtn-drag {
display: none;
}
&:hover {
.hbtn-default {
opacity: 0;
height: 0;
float: left;
.hbtn-new {
display: none;
}
.hbtn-hover {
opacity: 1;
float: none;
.hbtn-drag {
display: inline;
}
}
}
@ -699,7 +688,7 @@ li.module-hover {
.card {
.project-users-link {
align-items: center;
color: $color-silver-chalice;
color: var(--sn-black);
display: flex;
gap: .25rem;
@ -734,6 +723,16 @@ li.module-hover {
color: $color-volcano;
display: contents;
text-decoration: none;
.name {
-webkit-box-orient: vertical;
display: -webkit-box;
-webkit-line-clamp: 1;
}
.table-cell {
overflow-wrap: break-word;
}
}
}
@ -929,7 +928,7 @@ li.module-hover {
}
&.list {
grid-auto-rows: minmax(4em, auto) 1px;
grid-auto-rows: minmax(3em, auto) 1px;
grid-template-columns: max-content repeat(calc(var(--list-columns-number) - 2), minmax(100px, auto)) max-content max-content;
.projects-group {
@ -980,8 +979,8 @@ li.module-hover {
.name {
align-items: center;
display: flex;
grid-column: 6 span;
line-height: 3em;
grid-column: 1 span;
line-height: 1.25em;
}
.description {
@ -1186,7 +1185,7 @@ li.module-hover {
&.list {
--list-columns-number: 8;
grid-auto-rows: minmax(4em, auto) 1px;
grid-auto-rows: minmax(3em, auto) 1px;
grid-template-columns: max-content repeat(calc(var(--list-columns-number) - 3), minmax(100px, auto)) max-content max-content;
.card {

View file

@ -103,8 +103,9 @@
.users-access-cell {
.protocol-users-link {
align-items: center;
color: $color-silver-chalice;
color: var(--sn-black);
display: flex;
gap: .25rem;
&:hover {
text-decoration: none;
@ -113,34 +114,30 @@
.global-avatar-container {
align-items: center;
border: 2px solid $color-white;
display: flex;
height: 32px;
height: 28px;
justify-content: center;
line-height: 28px;
margin-right: -.5em;
width: 32px;
width: 28px;
}
.more-users {
background: $color-volcano;
border: 2px solid $color-white;
border-radius: 50%;
color: $color-white;
height: 32px;
line-height: 28px;
margin-right: -.5em;
height: 2em;
line-height: 2em;
margin-right: .25em;
text-align: center;
text-decoration: none;
width: 32px;
width: 2em;
}
.new-user {
background: $color-concrete;
margin-left: .75em;
text-align: center;
line-height: 24px;
height: 28px;
line-height: 24px;
text-align: center;
width: 28px;
}
}

View file

@ -34,6 +34,7 @@
justify-content: space-between;
.left-section {
align-items: center;
column-gap: 32px;
display: flex;
justify-content: space-between;

View file

@ -47,16 +47,18 @@
}
.protocol-section-caret {
color: $color-volcano;
display: inline-block;
padding: .5em;
align-items: center;
color: var(--sn-black);
display: inline-flex;
gap: .5rem;
padding: .5rem;
text-decoration: none;
.fas {
margin-right: 5px;
}
&:not(.collapsed) .fas {
&:not(.collapsed) .sn-icon {
@include rotate(90deg);
}
}
@ -103,7 +105,7 @@
}
.protocol-details {
padding-left: 20px;
padding-left: 2.5rem;
}
}

View file

@ -116,6 +116,8 @@
}
.dataTables_scrollBody {
flex-grow: 1;
thead th#checkbox {
opacity: 0;
}
@ -143,7 +145,7 @@
.dataTables_length {
margin-right: 24px;
width: 170px;
width: 180px;
.dropdown-selector-container {
width: inherit;
@ -169,7 +171,10 @@
}
.breadcrumb.breadcrumb-repository {
align-items: center;
background-color: $color-concrete;
display: flex;
gap: .5rem;
margin-bottom: 15px;
}
@ -347,7 +352,7 @@
}
.share-repo-container {
padding: 15px 30px;
padding: 15px 0 0;
// Main structure css
.header,
@ -363,6 +368,7 @@
.all-teams,
.teams-list {
display: flex;
padding: 0 30px;
width: 100%;
}
@ -384,18 +390,19 @@
.permission-selector {
display: flex;
flex-basis: 55px;
flex-basis: 60px;
flex-shrink: 0;
justify-content: center;
}
.team-selector {
align-items: center;
align-items: baseline;
display: flex;
flex-grow: 1;
.sci-checkbox-container {
margin-right: 5px;
margin-right: 8px;
top: 3px;
}
}
@ -404,14 +411,14 @@
align-items: center;
font-size: 14px;
font-weight: bold;
padding: 5px 0 0;
padding: 5px 30px 0;
}
.all-teams {
align-items: center;
border-bottom: 1px solid $color-gainsboro;
margin-left: -10px;
padding: 5px 10px;
padding: 5px 40px;
user-select: none;
width: calc(100% + 20px);
}
@ -424,13 +431,6 @@
}
}
.barcode-scanner {
cursor: pointer;
position: absolute;
right: 12px;
top: 12px;
}
.search-container {
.search-field {
padding-right: 32px;

View file

@ -73,7 +73,7 @@
padding: 1px 8px;
position: relative;
.fas.fa-pencil-alt {
.sn-icon.sn-icon-edit {
line-height: 35px;
text-align: center;
width: 30px;

View file

@ -85,7 +85,9 @@
}
.toolbar-left-block {
align-items: center;
display: flex;
gap: .25rem;
>* {
margin-left: .25em;
@ -104,7 +106,7 @@
.toolbar-right-block {
display: flex;
flex-shrink: 0;
gap: .25rem;
gap: .5rem;
.active-reminders-filter {
align-items: center;
@ -164,8 +166,9 @@
.repository-toolbar {
.btn:not(.prevent-shrink) {
padding: 7px;
width: 36px;
height: 40px;
padding: .5rem;
width: 40px;
.button-text {
display: none;

View file

@ -125,7 +125,7 @@
.repo-columns-list {
@include font-button;
height: 390px;
height: 385px;
margin-bottom: 0;
overflow-y: auto;
padding: 0;
@ -166,14 +166,6 @@
&:last-of-type {
border-bottom: 0;
}
&:not(.editable) {
.column-type::before {
@include font-awesome;
content: $font-fas-lock;
padding-right: 4px;
}
}
}
[data-position] {
@ -218,8 +210,8 @@
margin-left: 10px;
margin-right: 5px;
&:not(.fa-eye):not(.fa-eye-slash) {
padding-right: 15px;
&:not(.sn-icon-visibility-show):not(.sn-icon-visibility-hide) {
padding-right: 1.5rem;
}
}
}

View file

@ -16,7 +16,7 @@
position: sticky;
position: -webkit-sticky;
top: var(--navbar-height);
z-index: 150;
z-index: 250;
}
.title-row {
@ -34,6 +34,7 @@
display: flex;
flex-grow: 1;
margin: 0;
max-width: calc(100% - 2rem);
}
.name-readonly-placeholder {
@ -112,11 +113,12 @@
width: calc(100% + 2em);
&.selected::after {
@include font-awesome;
content: $font-fas-check;
@include font-sn-icon;
content: $sn-icon-check;
margin-left: auto;
position: absolute;
right: 1em;
right: .5rem;
top: 0;
}
}
}
@ -137,7 +139,7 @@
.dropdown-menu {
@include font-button;
min-width: 200px;
min-width: 160px;
padding: .5em 0;
a {
@ -151,11 +153,12 @@
}
&.selected::after {
@include font-awesome;
content: $font-fas-check;
@include font-sn-icon;
content: $sn-icon-check;
margin-left: auto;
position: absolute;
right: 1em;
right: .5rem;
top: 0;
}
}

View file

@ -13,6 +13,7 @@
align-items: center;
display: flex;
flex-grow: 1;
gap: .25rem;
}
}
@ -84,6 +85,15 @@
.pagination-info,
.pagination-actions {
flex-grow: 1;
.pagination,
.dataTables_paginate {
align-items: center;
display: flex;
height: 36px;
justify-content: flex-end;
margin: 0;
}
}
.pagination-info {
@ -102,8 +112,9 @@
}
.dataTables_length {
height: 2.25rem;
margin-right: 24px;
width: 170px;
width: 180px;
.dropdown-selector-container {
width: inherit;
@ -174,3 +185,9 @@
}
}
}
div.dataTables_wrapper div.dataTables_paginate ul.pagination {
align-items: center;
display: flex;
justify-content: end;
}

View file

@ -0,0 +1,38 @@
table.dataTable thead th.dt-colresizable-hover {
cursor: col-resize;
position: relative;
+ th {
cursor: col-resize;
}
&::before {
background-color: $color-silver-chalice;
content: "";
display: block;
height: 100%;
position: absolute;
right: 0;
top: 0;
width: 2px;
}
}
table.dataTable.table--resizable-columns {
table-layout: fixed;
th {
box-sizing: border-box;
min-width: 140px;
overflow: hidden;
text-overflow: ellipsis;
&:first-child {
min-width: 0;
}
&.width-out-of-bounds {
width: 140px !important;
}
}
}

View file

@ -41,7 +41,7 @@
position: absolute;
right: 4px;
text-align: center;
top: 4px;
top: 6px;
&.sn-icon-search.simple-dropdown {
color: $brand-focus;
@ -327,7 +327,7 @@
}
}
.sn-icon-close {
.sn-icon-close-small {
display: none;
}
}
@ -344,7 +344,6 @@
}
.sn-icon-down {
margin-right: -6px;
transform: rotate(180deg);
}
}
@ -421,7 +420,7 @@
.input-field {
background: $color-white;
.ds-tags .sn-icon-close {
.ds-tags .sn-icon-close-small {
display: none;
}
}

View file

@ -52,10 +52,12 @@
.jstree-icon {
&.root-folder {
background-image: none !important;
color: $color-volcano;
}
&.icon-folder {
background-image: none !important;
color: $brand-primary-light;
}
}

View file

@ -209,6 +209,9 @@
padding-left: 2px;
text-decoration: none;
text-transform: uppercase;
vertical-align: super;
font-size: .625rem;
font-weight: 600;
&:hover {
text-decoration: none;
@ -218,6 +221,7 @@
.atwho-user-container {
.atwho-user-popover {
cursor: pointer;
line-height: 1.25rem;
}
.atwho-user-popover:focus {

View file

@ -27,6 +27,21 @@ $font-fas-exclamation-circle: "\f06a";
$font-fas-caret-up: "\f0d8";
$font-fas-plus: "\f02b";
$sn-icon-left: "\e932";
$sn-icon-right: "\e931";
$sn-icon-check: "\e95f";
/// Hack for old icons
.fas {
align-items: center;
display: inline-flex !important;
justify-content: center;
height: 24px;
width: 24px;
}
.sn-icon {
font-size: 24px !important;
vertical-align: middle;
@ -68,6 +83,11 @@ $font-fas-plus: "\f02b";
font-weight: 501;
}
@mixin font-sn-icon {
font-family: "SN-icon-font";
font-size: 24px !important;
}
html {
font-size: 16px !important;
}

View file

@ -37,8 +37,9 @@
.step-panel-collapse-link {
padding-left: 5px;
&:not(.collapsed) .fas {
&:not(.collapsed) .sn-icon {
@include rotate(90deg);
display: inline-block;
}
}

View file

@ -4,7 +4,7 @@
@import "components/*";
.step-container {
--left-component-padding: 24px;
--left-component-padding: 2rem;
border: $border-transparent;
margin: 6px 0 6px -1.5em;
padding: 8px 24px 8px 0;

View file

@ -1,10 +1,10 @@
@layer components {
.sci-btn-group {
@apply flex items-center gap-2;
@apply flex items-center gap-2 relative;
}
.btn {
@apply inline-flex items-center shrink-0 gap-2 justify-center leading-5 py-2 px-4 rounded border-0 appearance-none whitespace-nowrap cursor-pointer;
@apply relative inline-flex items-center text-sm shrink-0 gap-2 justify-center leading-5 py-2 px-4 rounded border-0 appearance-none whitespace-nowrap cursor-pointer;
}
.btn.icon-btn {
@ -43,7 +43,10 @@
@apply no-underline outline-none;
box-shadow: 0px 0px 0px 4px var(--sn-science-blue-hover);
color: var(--sn-white);
}
.btn:active {
box-shadow: none;
}
.btn:disabled,
@ -51,35 +54,43 @@
@apply cursor-not-allowed pointer-events-none;
}
.btn.btn-primary {
.btn.btn-primary,
.btn.btn-success {
background-color: var(--sn-blue);
color: var(--sn-white);
}
.btn.btn-primary:hover {
.btn.btn-primary:hover,
.btn.btn-success:hover{
background-color: var(--sn-blue-hover);
color: var(--sn-white);
}
.btn.btn-primary:disabled,
.btn.btn-primary.disabled {
.btn.btn-primary.disabled,
.btn.btn-success:disabled,
.btn.btn-success.disabled {
background-color: var(--sn-light-grey);
border: 1px solid var(--sn-light-grey);
color: var(--sn-sleepy-grey);
}
.btn.btn-secondary {
.btn.btn-secondary,
.btn.btn-default {
background-color: var(--sn-white);
border: 1px solid var(--sn-light-grey);
color: var(--sn-blue);
}
.btn.btn-secondary:hover {
.btn.btn-secondary:hover,
.btn.btn-default:hover {
border: 1px solid var(--sn-blue-hover);
}
.btn.btn-secondary:disabled,
.btn.btn-secondary.disabled {
.btn.btn-secondary.disabled,
.btn.btn-default:disabled,
.btn.btn-default.disabled {
background-color: var(--sn-white);
color: var(--sn-sleepy-grey);
}
@ -90,7 +101,15 @@
}
.btn.btn-light.btn-black {
color: var(--sb-black);
color: var(--sn-black);
}
.btn.btn-light.btn-white {
color: var(--sn-white);
}
.btn.btn-light.btn-white:hover {
background-color: transparent;
}
.btn.btn-light:hover {

View file

@ -231,7 +231,6 @@
}
.col-sm-4 {
padding-left: 5rem;
padding-top: .5rem;
word-break: break-word;
}

View file

@ -41,10 +41,14 @@ table {
#no-teams-jumbotron {
display: flex;
flex-direction: column;
align-items: center;
position: relative;
top: 100px;
justify-content: center;
align-items: center;
padding-top: 7rem;
img {
margin-bottom: 1.5rem;
max-width: 33%;
}
}
#alert-container {
@ -148,7 +152,8 @@ body {
}
.badge {
background-color: $brand-primary;
background-color: var(--sn-science-blue);
border-radius: 50% !important;
font-size: 11px;
border-radius: 5px;
}
@ -564,7 +569,9 @@ mark,.mark {
float: right;
.pagination {
margin: 2px 0;
align-items: center;
display: flex;
margin: 0;
}
}
@ -1014,13 +1021,9 @@ ul.content-activities {
.result-panel-collapse-link {
text-decoration: none;
&:not(.collapsed) .fas {
&:not(.collapsed) .sn-icon-right {
@include rotate(90deg);
}
.fas {
margin-right: 7px;
text-align: center;
display: inline-block;
}
}

View file

@ -71,6 +71,13 @@
.tinymce-cancel-button.tox-mbtn {
cursor: pointer;
button {
align-items: center;
cursor: pointer;
display: flex;
gap: .25rem;
}
.fas {
font-family: "Font Awesome 5 Free";
font-weight: 900;

View file

@ -68,7 +68,10 @@ module AccessPermissions
if user_assignment_params[:user_id] == 'all'
@project.update!(visibility: :visible, default_public_user_role_id: user_assignment_params[:user_role_id])
log_activity(:change_project_visibility, { visibility: t('projects.activity.visibility_visible') })
log_activity(:project_grant_access_to_all_team_members,
{ visibility: t('projects.activity.visibility_visible'),
role: @project.default_public_user_role.name,
team: @project.team.id })
else
user_assignment = UserAssignment.find_or_initialize_by(
assignable: @project,
@ -141,8 +144,13 @@ module AccessPermissions
if permitted_default_public_user_role_params[:default_public_user_role_id].blank?
# revoke all team members access
@project.visibility = :hidden
previous_user_role_name = @project.default_public_user_role.name
@project.default_public_user_role_id = nil
@project.save!
log_activity(:change_project_visibility, { visibility: t('projects.activity.visibility_hidden') })
log_activity(:project_remove_access_from_all_team_members,
{ visibility: t('projects.activity.visibility_hidden'),
role: previous_user_role_name,
team: @project.team.id })
render json: { flash: t('access_permissions.update.revoke_all_team_members') }
else
# update all team members access

View file

@ -0,0 +1,19 @@
# frozen_string_literal: true
module Doorkeeper
module ConnectedDeviceLogging
extend ActiveSupport::Concern
included do
after_action :log_connected_device, only: :create
end
private
def log_connected_device
return if @authorize_response.is_a?(Doorkeeper::OAuth::ErrorResponse)
ConnectedDevice.from_request_headers(request.headers, @authorize_response&.token)
end
end
end

View file

@ -5,7 +5,7 @@ class LabelPrintersController < ApplicationController
before_action :check_manage_permissions, except: %i(index index_zebra update_progress_modal)
before_action :find_label_printer, only: %i(edit update destroy)
before_action :set_breadcrumbs_items, only: %i(index_zebra)
before_action :set_breadcrumbs_items, only: %i(index_zebra index)
def index
@label_printers = LabelPrinter.all
@ -137,6 +137,9 @@ class LabelPrintersController < ApplicationController
def set_breadcrumbs_items
@breadcrumbs_items = []
printer_label = t('breadcrumbs.fluics_printer')
printer_label = t('breadcrumbs.label_printer') if action_name == 'index_zebra'
@breadcrumbs_items.push({
label: t('breadcrumbs.addons'),
url: addons_path
@ -148,7 +151,7 @@ class LabelPrintersController < ApplicationController
})
else
@breadcrumbs_items.push({
label: t('breadcrumbs.label_printer')
label: printer_label
})
end
end

View file

@ -184,7 +184,7 @@ class ProjectsController < ApplicationController
end
message_renamed = @project.name_changed?
message_visibility = if @project.visibility_changed?
message_visibility = if !@project.visibility_changed?
nil
elsif @project.visible?
t('projects.activity.visibility_visible')
@ -200,24 +200,38 @@ class ProjectsController < ApplicationController
'restore'
end
default_public_user_name = nil
if @project.visibility_changed? && @project.default_public_user_role_id_changed?
default_public_user_name = UserRole.find(project_params[:default_public_user_role_id])&.name
default_public_user_role_name = nil
if !@project.visibility_changed? && @project.default_public_user_role_id_changed?
default_public_user_role_name = UserRole.find(project_params[:default_public_user_role_id]).name
end
@project.last_modified_by = current_user
if !return_error && @project.save
# Add activities if needed
log_activity(:change_project_visibility, @project, visibility: message_visibility) if message_visibility.present?
if message_visibility.present? && @project.visible?
log_activity(:project_grant_access_to_all_team_members,
@project,
{ visibility: message_visibility,
role: @project.default_public_user_role.name,
team: @project.team.id })
end
if message_visibility.present? && !@project.visible?
log_activity(:project_remove_access_from_all_team_members,
@project,
{ visibility: message_visibility,
role: @project.default_public_user_role.name,
team: @project.team.id })
end
log_activity(:rename_project) if message_renamed.present?
log_activity(:archive_project) if message_archived == 'archive'
log_activity(:restore_project) if message_archived == 'restore'
if default_public_user_name.present?
if default_public_user_role_name.present?
log_activity(:project_access_changed_all_team_members,
@project,
{ team: @project.team.id, role: default_public_user_name })
{ team: @project.team.id, role: default_public_user_role_name })
end
flash_success = t('projects.update.success_flash', name: escape_input(@project.name))

View file

@ -9,13 +9,15 @@ class RepositoriesController < ApplicationController
include RepositoriesDatatableHelper
include MyModulesHelper
before_action :load_repository, except: %i(index create create_modal sidebar archive restore actions_toolbar)
before_action :load_repository, except: %i(index create create_modal sidebar archive restore actions_toolbar
export_modal export_repositories)
before_action :load_repositories, only: %i(index show sidebar)
before_action :load_repositories_for_archiving, only: :archive
before_action :load_repositories_for_restoring, only: :restore
before_action :check_view_all_permissions, only: %i(index sidebar)
before_action :check_view_permissions, except: %i(index create_modal create update destroy parse_sheet import_records
sidebar archive restore actions_toolbar)
before_action :check_view_permissions, except: %i(index create_modal create update destroy parse_sheet
import_records sidebar archive restore actions_toolbar
export_modal export_repositories)
before_action :check_manage_permissions, only: %i(rename_modal update)
before_action :check_delete_permissions, only: %i(destroy destroy_modal)
before_action :check_archive_permissions, only: %i(archive restore)
@ -235,6 +237,23 @@ class RepositoriesController < ApplicationController
end
end
def export_modal
return unless current_user.has_available_exports?
respond_to do |format|
format.json do
render json: {
html: render_to_string(
partial: 'export_repositories_modal.html.erb',
locals: { team_name: current_team.name,
export_limit: TeamZipExport.exports_limit,
num_of_requests_left: current_user.exports_left - 1 }
)
}
end
end
end
def copy
@tmp_repository = Repository.new(
team: current_team,
@ -384,7 +403,8 @@ class RepositoriesController < ApplicationController
def export_repositories
repositories = Repository.viewable_by_user(current_user, current_team).where(id: params[:repository_ids])
if repositories.present?
if repositories.present? && current_user.has_available_exports?
current_user.increase_daily_exports_counter!
RepositoriesExportJob.perform_later(repositories.pluck(:id), current_user, current_team)
render json: { message: t('zip_export.export_request_success') }
else

View file

@ -93,14 +93,14 @@ class TeamsDatatable < CustomDatatable
</span>"
owner_role = UserRole.find_by(name: UserRole.public_send('owner_role').name)
if current_user_team_role(record)&.owner? && record.user_assignments.where(user_role: owner_role).none?
button.prepend('<div class="btn btn-default btn-xs"
button.prepend('<div class="btn btn-secondary btn-xs"
type="button" disabled="disabled">')
button << '</div>'
else
button = link_to(
button.html_safe,
leave_user_team_html_path(current_user_team_assignment(record), format: :json, leave: true),
remote: true, class: 'btn btn-default btn-xs', type: 'button',
remote: true, class: 'btn btn-secondary btn-xs', type: 'button',
data: { action: 'leave-user-team' }
)
end

View file

@ -47,7 +47,7 @@ module ResultsHelper
if result.is_asset
'sn-icon sn-icon-files'
elsif result.is_text
'fas fa-font'
'sn-icon sn-icon-result-text'
elsif result.is_table
'sn-icon sn-icon-tables'
else

View file

@ -18,3 +18,8 @@ $(document).on('click', '.sci--layout--menu-item[data-submenu=true]', (e) => {
$(document).on('click', '.sci--layout--navigator-open', (e) => {
navigatorContainer.$data.navigatorCollapsed = false
});
$(document).on('click', '.btn', function() {
$(this).blur();
});

View file

@ -316,14 +316,20 @@ export default {
HelperModule.flashAlertMsg(this.i18n.t('repositories.modal_assign_items_to_task.assign.flash_assignments_failure'), 'danger');
}).always(() => {
this.resetSelectors();
this.deselectRows();
this.reloadTable();
});
},
setShowCallback(callback) {
this.showCallback = callback;
},
deselectRows() {
reloadTable() {
$('.repository-row-selector:checked').trigger('click');
$('.repository-table')
.find('table')
.dataTable()
.api()
.ajax
.reload();
}
}
};

View file

@ -10,12 +10,14 @@
<div v-if="!loading && actions.length === 0" class="sn-action-toolbar__message">
{{ i18n.t('action_toolbar.no_actions') }}
</div>
<div v-for="action in actions" :key="action.name" class="sn-action-toolbar__action">
<div v-for="action in actions" :key="action.name" class="sn-action-toolbar__action shrink-0">
<a :class="`rounded flex gap-2 items-center py-1.5 px-2.5 bg-sn-white color-sn-blue no-underline ${action.button_class}`"
:href="(['link', 'remote-modal']).includes(action.type) ? action.path : '#'"
:id="action.button_id"
:title="action.label"
:data-url="action.path"
:data-target="action.target"
:data-toggle="action.type === 'modal' && 'modal'"
:data-object-type="action.item_type"
:data-object-id="action.item_id"
:data-action="action.type"
@ -67,11 +69,11 @@
},
mounted() {
this.$nextTick(this.setWidth);
$(window).on('scroll', this.setLeftOffset);
window.addEventListener('scroll', this.setLeftOffset);
},
beforeDestroy() {
delete window.actionToolbarComponent;
window.removeEventListener('scroll', this.setLeftOffset);
},
computed: {
paramsAreBlank() {
@ -124,6 +126,8 @@
case 'link':
// do nothing, already handled by href
break;
case 'modal':
// do nothihg, boostrap modal handled by data-toggle="modal" and data-target
case 'remote-modal':
// do nothing, handled by the data-action="remote-modal" binding
break;

View file

@ -14,8 +14,8 @@
@change="switchTeam"
></Select>
</div>
<div v-if="user" class="dropdown" :title="i18n.t('nav.support')">
<button class="btn btn-light icon-btn btn-black" data-toggle="dropdown">
<div v-if="user" class="dropdown" >
<button class="btn btn-light icon-btn btn-black" data-toggle="dropdown" :title="i18n.t('nav.support')">
<i class="sn-icon sn-icon-help"></i>
</button>
<ul v-if="user" class="dropdown-menu dropdown-menu-right">
@ -26,8 +26,8 @@
</li>
</ul>
</div>
<div v-if="user" class="dropdown" :title="i18n.t('nav.settings')">
<button class="btn btn-light icon-btn btn-black" data-toggle="dropdown">
<div v-if="user" class="dropdown">
<button class="btn btn-light icon-btn btn-black" data-toggle="dropdown" :title="i18n.t('nav.settings')">
<i class="sn-icon sn-icon-settings"></i>
</button>
<ul class="dropdown-menu dropdown-menu-right">
@ -43,8 +43,9 @@
</li>
</ul>
</div>
<div v-if="user" class="sci--navigation--notificaitons-flyout-container" :title="i18n.t('nav.notifications.title')">
<div v-if="user" class="sci--navigation--notificaitons-flyout-container" >
<button class="btn btn-light icon-btn btn-black"
:title="i18n.t('nav.notifications.title')"
:class="{ 'has-unseen': unseenNotificationsCount > 0 }"
:data-unseen="unseenNotificationsCount"
data-toggle="dropdown"
@ -147,7 +148,7 @@
if (!newTeam) return;
$.post(this.teamSwitchUrl, {team_id: team}, (result) => {
this.currentTeam = result.currentTeam
this.currentTeam = result.current_team
dropdownSelector.selectValues('#sciNavigationTeamSelector', this.currentTeam);
$('body').attr('data-current-team-id', this.currentTeam);
window.open(this.rootUrl, '_self')

View file

@ -8,7 +8,7 @@
<div ref="actionsDropdownButton" class="dropdown sci-dropdown">
<button class="btn btn-light dropdown-toggle" type="button" id="dropdownAttachmentsOptions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
<span>{{ i18n.t("protocols.steps.attachments.manage") }}</span>
<span class="caret pull-right"></span>
<span class="sn-icon sn-icon-down"></span>
</button>
<ul ref="actionsDropdown" class="dropdown-menu dropdown-menu-right dropdown-attachment-options"
aria-labelledby="dropdownAttachmentsOptions"

View file

@ -17,12 +17,12 @@
<i class="sn-icon sn-icon-sort"></i>
</div>
<div v-else class="step-element-grip-placeholder"></div>
<a class="step-collapse-link"
<a class="step-collapse-link hover:no-underline focus:no-underline"
:href="'#stepBody' + step.id"
data-toggle="collapse"
data-remote="true"
@click="toggleCollapsed">
<span class="sn-icon sn-icon-right"></span>
<span class="sn-icon sn-icon-right "></span>
</a>
<div v-if="!inRepository" class="step-complete-container mx-1.5" :class="{ 'step-element--locked': !urls.state_url }">
<div :class="`step-state ${step.attributes.completed ? 'completed' : ''}`"
@ -86,7 +86,7 @@
{{ i18n.t('protocols.steps.insert.checklist') }}
</li>
<li class="action" @click="createElement('text')">
<i class="fas fa-font"></i>
<i class="sn-icon sn-icon-result-text"></i>
{{ i18n.t('protocols.steps.insert.text') }}
</li>
<li v-if="attachmentsReady" class="action" @click="showFileModal = true">

View file

@ -22,7 +22,7 @@
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" @click="cancel">{{i18n.t('general.cancel')}}</button>
<button type="button" class="btn btn-secondary" @click="cancel">{{i18n.t('general.cancel')}}</button>
<button type="button" class="btn btn-success" @click="uploadImage">{{i18n.t('assets.from_clipboard.add_image')}}</button>
</div>
</div>

View file

@ -1,6 +1,6 @@
<template>
<div class="dropdown asset-context-menu" ref="menu">
<button class="btn btn-light dropdown-toggle icon-btn" type="button" id="dropdownAssetContextMenu" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
<button class="btn btn-light btn-xs dropdown-toggle icon-btn" type="button" id="dropdownAssetContextMenu" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
<i class="sn-icon sn-icon-more-hori"></i>
</button>

View file

@ -13,7 +13,7 @@
<p>{{ i18n.t('assets.delete_file_modal.description_2') }}</p>
</div>
<div class="modal-footer">
<button type='button' class='btn btn-default' @click="cancel">
<button type='button' class='btn btn-secondary' @click="cancel">
{{ i18n.t('general.cancel') }}
</button>
<button type='button' class='btn btn-danger' @click="confirm">

View file

@ -63,7 +63,7 @@
</div>
</div>
<div class="modal-footer">
<button type='button' class='btn btn-default' @click="cancel">
<button type='button' class='btn btn-secondary' @click="cancel">
{{ i18n.t('general.cancel') }}
</button>
</div>

View file

@ -38,15 +38,14 @@
/>
</div>
<template v-if="attachment.attributes.wopi">
<div v-if="attachment.attributes.file_size > 0"
<div v-if="showWopi"
class="iframe-placeholder"
:data-iframe-url="attachment.attributes.urls.wopi_action"></div>
<div v-else class="empty-office-file">
<h2>{{ i18n.t('assets.empty_office_file.description') }}</h2>
<a :href="attachment.attributes.urls.load_asset"
class="btn btn-primary reload-asset"
@click.prevent="reloadAsset"
:params="{asset: {view_mode: attachment.attributes.view_mode}}">
@click.prevent="reloadAsset">
{{ i18n.t('assets.empty_office_file.reload') }}
</a>
</div>
@ -90,12 +89,28 @@
required: true
}
},
data() {
return {
showWopi: false
}
},
mounted() {
this.showWopi = this.attachment.attributes.file_size > 0;
},
methods: {
reloadAsset() {
$.ajax({
method: 'GET',
url: this.attachment.attributes.urls.load_asset
});
url: this.attachment.attributes.urls.load_asset,
data: {
asset: {view_mode: this.attachment.attributes.view_mode}
},
success: (data) => {
if (!(data.html.includes('empty-office-file'))) {
this.showWopi = true;
}
}
})
}
},
}

View file

@ -5,13 +5,13 @@
</div>
<div v-else class="step-element-grip-placeholder"></div>
<div class="buttons-container">
<button v-if="element.attributes.orderable.urls.update_url" class="btn icon-btn btn-light" tabindex="0" @click="enableEditMode($event)">
<button v-if="element.attributes.orderable.urls.update_url" class="btn icon-btn btn-light btn-sm" tabindex="0" @click="enableEditMode($event)">
<i class="sn-icon sn-icon-edit"></i>
</button>
<button v-if="element.attributes.orderable.urls.duplicate_url" class="btn icon-btn btn-light" tabindex="0" @click="duplicateElement">
<button v-if="element.attributes.orderable.urls.duplicate_url" class="btn icon-btn btn-light btn-sm" tabindex="0" @click="duplicateElement">
<i class="sn-icon sn-icon-duplicate"></i>
</button>
<button v-if="element.attributes.orderable.urls.delete_url" class="btn icon-btn btn-light" @click="showDeleteModal" tabindex="0">
<button v-if="element.attributes.orderable.urls.delete_url" class="btn icon-btn btn-light btn-sm" @click="showDeleteModal" tabindex="0">
<i class="sn-icon sn-icon-delete"></i>
</button>
</div>

View file

@ -62,7 +62,7 @@
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal"> {{ i18n.t('general.cancel') }}</button>
<button type="button" class="btn btn-secondary" data-dismiss="modal"> {{ i18n.t('general.cancel') }}</button>
<button class="btn btn-primary" @click="submitPrint">
{{ i18n.t(`repository_row.modal_print_label.${labelTemplateError ? 'print_anyway' : 'print_label'}`) }}
</button>

View file

@ -1,6 +1,6 @@
<template>
<div class="flex items-center mr-3 flex-nowrap">
<button v-if="!searchOpened" class="btn btn-light icon-btn" :title="i18n.t('repositories.show.search_button_tooltip')" @click="openSearch">
<button v-if="!searchOpened" class="btn btn-light icon-btn" :title="i18n.t('repositories.show.search_button_tooltip')" @click="openSearch">
<i class="sn-icon sn-icon-search"></i>
</button>
<div v-if="searchOpened || barcodeSearchOpened" class="w-52 flex">

View file

@ -48,6 +48,13 @@ module ArchivableModel
save!
end
def name_with_label
raise NotImplementedError, "Archivable model must implement the '.archived_branch?' method!" unless respond_to?(:archived_branch?)
return "#{I18n.t('labels.archived')} #{parent&.name || name}" if archived_branch?
parent&.name || name
end
protected
def set_archive_timestamp

View file

@ -385,6 +385,10 @@ class Protocol < ApplicationRecord
steps.count
end
def archived_branch?
archived? || parent&.archived?
end
def completed_steps
steps.where(completed: true)
end

View file

@ -23,7 +23,7 @@ module Toolbars
if @archived_state
[restore_action, delete_action]
else
[rename_action, duplicate_action, archive_action, share_action]
[rename_action, duplicate_action, export_action, archive_action, share_action]
end.compact
end
@ -55,6 +55,19 @@ module Toolbars
}
end
def export_action
return unless @repositories.all? { |repository| can_read_repository?(repository) }
{
name: 'export',
label: I18n.t('libraries.index.buttons.export'),
button_id: 'exportRepoBtn',
icon: 'sn-icon sn-icon-export',
path: export_modal_team_repositories_path(@current_team),
type: 'remote-modal'
}
end
def archive_action
return unless @repositories.all? { |repository| can_archive_repository?(repository) }
@ -75,7 +88,7 @@ module Toolbars
{
name: 'share',
label: I18n.t('repositories.index.share_inventory'),
icon: 'sn-icon sn-icon-user-menu-plus',
icon: 'sn-icon sn-icon-shared',
button_class: 'share-repository-button',
path: team_repository_share_modal_path(@current_team, repository_id: @repository),
type: 'remote-modal'

View file

@ -21,7 +21,7 @@
<% if assignable.top_level_assignable? %>
<div class="modal-footer">
<%= link_to new_assignment_path, class: 'btn btn-default pull-right', data: { action: 'swap-remote-container', target: '#user_assignments_modal' } do %>
<%= link_to new_assignment_path, class: 'btn btn-secondary pull-right', data: { action: 'swap-remote-container', target: '#user_assignments_modal' } do %>
<i class="sn-icon sn-icon-new-task"></i>
<%= t('access_permissions.grant_access') %>
<% end %>

View file

@ -14,7 +14,7 @@
</ul>
<% if @vars[:more_activities_url].present? && @vars[:page] == 1 %>
<div class="text-center">
<a class="btn btn-default btn-more-activities"
<a class="btn btn-secondary btn-more-activities"
href="<%= @vars[:more_activities_url] %>"
data-remote="true">
<%= t'activities.index.more_activities' %></a>

View file

@ -1,6 +1,6 @@
<% if can_manage_asset?(asset) %>
<div class="dropdown asset-context-menu">
<button class="btn btn-light dropdown-toggle icon-btn" type="button" id="dropdownAssetContextMenu" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
<button class="btn btn-light btn-xs dropdown-toggle icon-btn" type="button" id="dropdownAssetContextMenu" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
<i class="sn-icon sn-icon-more-hori"></i>
</button>
<ul class="dropdown-menu dropdown-menu-right"

View file

@ -12,7 +12,7 @@
<p><%= t('assets.delete_file_modal.description_2') %></p>
</div>
<div class="modal-footer">
<button type='button' class='btn btn-default' data-dismiss='modal'>
<button type='button' class='btn btn-secondary' data-dismiss='modal'>
<%= t('general.cancel')%>
</button>
<button type='button' class='btn btn-danger confirm-button' data-dismiss='modal'>

View file

@ -46,7 +46,7 @@
class: 'asset-inline-image',
style: 'opacity: 0' %>
</div>
<%= javascript_include_tag 'assets/asset_inline', nonce: true %>
<%= javascript_include_tag 'assets/asset_inline' %>
<% else %>
<div class="general-file-container">
<i class="fas <%= file_fa_icon_class(asset) if asset.file_name %>"></i>

View file

@ -18,7 +18,7 @@
<%= image_tag asset.medium_preview,
class: 'asset-thumbnail-image',
style: 'opacity: 0' %>
<%= javascript_include_tag 'assets/asset_thumbnail', nonce: true %>
<%= javascript_include_tag 'assets/asset_thumbnail' %>
<% else %>
<i class="fas <%= file_fa_icon_class(asset) if asset.file_name %>"></i>
<% end %>

View file

@ -43,6 +43,6 @@
<span id="frameholder"></span>
<%= javascript_include_tag 'assets/office_form', nonce: true %>
<%= javascript_include_tag 'assets/office_form' %>
</body>
</html>

View file

@ -43,7 +43,7 @@
<span id="frameholder"></span>
<%= javascript_include_tag 'assets/office_form', nonce: true %>
<%= javascript_include_tag 'assets/office_form' %>
</body>
</html>

View file

@ -30,19 +30,19 @@
<label><%= t('assets.create_wopi_file.type_select_label') %></label>
<div class="btn-group btn-group-toggle btn-group-justified"
data-toggle="buttons">
<label class="btn btn-default active" id="word-btn">
<label class="btn btn-secondary active" id="word-btn">
<%= image_tag 'office/ms-word-active.svg', class: 'act' %>
<%= image_tag 'office/ms-word-inactive.svg', class: 'inactive' %>
<input type="radio" name="file_type" value='docx' checked>
<span><%= t('assets.create_wopi_file.ms_word').html_safe %></span>
</label>
<label class="btn btn-default" id="excel-btn">
<label class="btn btn-secondary" id="excel-btn">
<%= image_tag 'office/ms-excel-active.svg', class: 'act' %>
<%= image_tag 'office/ms-excel-inactive.svg', class: 'inactive' %>
<input type="radio" name="file_type" value='xlsx'>
<span><%= t('assets.create_wopi_file.ms_excel').html_safe %></span>
</label>
<label class="btn btn-default" id='powerpoint-btn'>
<label class="btn btn-secondary" id='powerpoint-btn'>
<%= image_tag 'office/ms-pwrpt-active.svg', class: 'act' %>
<%= image_tag 'office/ms-pwrpt-inactive.svg', class: 'inactive' %>
<input type="radio" name="file_type" value='pptx'>

View file

@ -11,13 +11,15 @@
<%= bootstrap_form_tag url: canvas_experiment_url, method: "post", html: {class: "canvas-header"} do |f| %>
<% if @experiment_managable %>
<%=link_to "", type: "button", class: "btn btn-primary", id: "canvas-new-module" do %>
<span class="hbtn-default">
<span class="sn-icon sn-icon-new-task"></span>
<%= t("experiments.canvas.edit.new_module") %>
</span>
<span class="hbtn-hover">
<em class="hidden-xs"><%= t("experiments.canvas.edit.new_module_hover") %></em>
<span class="visible-xs-inline"><%= t("experiments.canvas.edit.new_module") %></span>
<span class="sn-icon sn-icon-new-task"></span>
<span>
<span class="hbtn-new">
<%= t("experiments.canvas.edit.new_module") %>
</span>
<span class="hbtn-drag">
<em class="hidden-xs"><%= t("experiments.canvas.edit.new_module_hover") %></em>
<span class="visible-xs-inline"><%= t("experiments.canvas.edit.new_module") %></span>
</span>
</span>
<% end %>
<% end %>

View file

@ -11,7 +11,7 @@
<% end %>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal"><%=t "general.cancel" %></button>
<button type="button" class="btn btn-secondary" data-dismiss="modal"><%=t "general.cancel" %></button>
<button type="button" class="btn btn-success" data-dismiss="modal" data-action="confirm"><%=t "experiments.canvas.edit.modal_new_module.confirm" %></button>
</div>
</div>

View file

@ -35,7 +35,7 @@
<div class="panel-heading">
<h3 class="panel-title">
<%= link_to my_module.name, protocols_my_module_path(my_module,
<%= link_to my_module.name, protocols_my_module_path(my_module,
view_mode: my_module.archived_branch? ? 'archived' : 'active'),
title: my_module.name, class: 'my-module-title' %>
</h3>
@ -79,7 +79,7 @@
<div class="panel-footer panel-footer-scinote buttons-container">
<ul class="nav nav-tabs nav-tabs-less" role="tablist">
<li role="presentation">
<a class="btn btn-link task-card-view-users" href="<%= designated_users_my_module_user_my_modules_url(my_module_id: my_module.id, format: :json) %>" aria-controls="<%= my_module.id %>_users" role="tab" data-remote="true">
<a class="btn btn-light task-card-view-users" href="<%= designated_users_my_module_user_my_modules_url(my_module_id: my_module.id, format: :json) %>" aria-controls="<%= my_module.id %>_users" role="tab" data-remote="true">
<span class="sn-icon sn-icon-users" aria-hidden="true"></span>
<span class="badge badge-indicator users-badge-indicator <%= 'hidden' unless my_module.designated_users_count.positive? %>"
data-linked-id="<%= my_module.id %>">
@ -88,12 +88,12 @@
</a>
</li>
<li role="presentation">
<a class="btn btn-link task-card-view-activities" href="<%= activities_my_module_url(id: my_module.id) %>" aria-controls="<%= my_module.id %>_activities" role="tab">
<a class="btn btn-light task-card-view-activities" href="<%= activities_my_module_url(id: my_module.id) %>" aria-controls="<%= my_module.id %>_activities" role="tab">
<span class="sn-icon sn-icon-activities" aria-hidden="true"></span>
</a>
</li>
<li role="presentation">
<a href="#" class="btn btn-link open-comments-sidebar" tabindex=0
<a href="#" class="btn btn-light open-comments-sidebar" tabindex=0
data-object-type="MyModule" data-object-id="<%= my_module.id %>">
<span class="sn-icon sn-icon-comments" aria-hidden="true"></span>
<span id="comment-count-<%= my_module.id %>" class="badge badge-indicator comments-badge-indicator <%= 'hidden' unless my_module.task_comments_count.positive? %>">

View file

@ -3,7 +3,7 @@
<div class="widget-title"><%= t("dashboard.current_tasks.title") %></div>
<div class="actions-container">
<div class="filter-container dropdown">
<div class="btn btn-light icon-btn filter-button" title="<%= t("filters_modal.title") %>" data-toggle="dropdown"><i class="sn-icon sn-icon-filter"></i></div>
<div class="btn btn-light btn-sm icon-btn filter-button" title="<%= t("filters_modal.title") %>" data-toggle="dropdown"><i class="sn-icon sn-icon-filter"></i></div>
<div class="dropdown-menu current-tasks-filters" role="menu" data-team-id="<%= current_team.id %>">
<div class="header">
<div class="title"><%= t("dashboard.current_tasks.filter.title") %></div>

View file

@ -34,7 +34,7 @@
<%= hidden_field_tag :scope, @pre_auth.scope %>
<%= hidden_field_tag :code_challenge, @pre_auth.code_challenge %>
<%= hidden_field_tag :code_challenge_method, @pre_auth.code_challenge_method %>
<%= submit_tag t('general.cancel'), class: "btn btn-default" %>
<%= submit_tag t('general.cancel'), class: "btn btn-secondary" %>
<% end %>
</div>
<div class="col-xs-6 col-sm-6 col-md-6 col-lg-6 text-left doorkeeper-actions-right">

View file

@ -2,7 +2,7 @@
<div class="title-row">
<i class="sn-icon sn-icon-navigator sci--layout--navigator-open cursor-pointer p-1.5 border rounded border-sn-light-grey mr-4"></i>
<h1 class="experimnet-name" data-toggle="tooltip" data-placement="bottom" title="<%= @experiment.name %>">
<% if @experiment.archived? %>
<% if @experiment.archived_branch? %>
<span><%= t('labels.archived')%></span>&nbsp;
<% end %>
<% if @inline_editable_title_config.present? %>

View file

@ -14,7 +14,7 @@
<input id="calendarDueDate<%= my_module.id %>"
type="datetime"
data-toggle='date-time-picker'
class="form-control calendar-input calendar-due-date"
class="form-control calendar-input calendar-due-date "
readonly
placeholder="<%= t('my_modules.details.no_due_date_placeholder') %>"
data-date-format="<%= datetime_picker_format_full %>"

View file

@ -36,7 +36,7 @@
<% end %>
<% if can_manage_experiment?(my_module.experiment) && my_module.active? %>
<li>
<a href="" class="duplicate-my-module" data-id="<%= my_module.id %>">
<a href="<%= batch_clone_my_modules_experiment_path(my_module.experiment) %>" class="duplicate-my-module" data-id="<%= my_module.id %>">
<i class="sn-icon sn-icon-duplicate"></i>
<%= t("experiments.table.my_module_actions.duplicate") %>
</a>

View file

@ -6,7 +6,7 @@
<%= button_to(view_type_experiment_path(@experiment, view_mode: 'archived'),
method: :put,
remote: true,
class: "btn button-to #{ action_name == 'table' ? 'btn-primary' : 'btn-light' } prevent-shrink",
class: "btn button-to #{ action_name == 'table' ? 'btn-primary' : 'btn-light' } prevent-shrink justify-start",
form_class: 'change-my-modules-view-type-form',
params: { experiment: { view_type: 'table', id: @experiment.id } }) do %>
<span class="<%= 'text-light' if action_name == 'table' %>">
@ -18,7 +18,7 @@
<%= button_to(view_type_experiment_path(@experiment, view_mode: 'archived'),
method: :put,
remote: true,
class: "btn button-to #{ action_name == 'module_archive' ? 'btn-primary' : 'btn-light'} prevent-shrink",
class: "btn button-to #{ action_name == 'module_archive' ? 'btn-primary' : 'btn-light'} prevent-shrink justify-start",
form_class: 'change-my-modules-view-type-form',
params: { experiment: { view_type: 'canvas', id: @experiment.id } }) do %>
<span class="<%= 'text-light' if action_name == 'module_archive' %>">
@ -31,7 +31,7 @@
<%= button_to(view_type_experiment_path(@experiment),
method: :put,
remote: true,
class: "btn button-to #{ action_name == 'table' ? 'btn-primary text-light' : 'btn-light' } prevent-shrink",
class: "btn button-to #{ action_name == 'table' ? 'btn-primary text-light' : 'btn-light' } prevent-shrink justify-start",
form_class: 'change-my-modules-view-type-form',
params: { experiment: { view_type: 'table', id: @experiment.id } }) do %>
<span class="<%= 'text-light' if action_name == 'table' %>">
@ -43,7 +43,7 @@
<%= button_to(view_type_experiment_path(@experiment),
method: :put,
remote: true,
class: "btn button-to #{ action_name == 'canvas' ? 'btn-primary text-light' : 'btn-light'} prevent-shrink",
class: "btn button-to #{ action_name == 'canvas' ? 'btn-primary text-light' : 'btn-light'} prevent-shrink justify-start",
form_class: 'change-my-modules-view-type-form',
params: { experiment: { view_type: 'canvas', id: @experiment.id } }) do %>
<span class="<%= 'text-light' if action_name == 'canvas' %>">
@ -53,7 +53,7 @@
</li>
<% end %>
<% end %>
<%= render partial: 'shared/state_view_switch', locals: {
disabled: false,
switchable: true,

View file

@ -73,6 +73,6 @@
<%= javascript_include_tag("experiments/show") %>
<!-- Include all the neccesary JS libraries -->
<%= javascript_include_tag("eventPause-min", nonce: true) %>
<%= javascript_include_tag("eventPause-min") %>
<%= javascript_include_tag("projects/canvas") %>

View file

@ -3,7 +3,7 @@
<div class="panel-heading">
<div class="dropdown pull-right">
<button class="btn btn-link dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
<button class="btn btn-light dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
<span class="caret"></span>
</button>
<% my_module_form = nil %>

View file

@ -9,6 +9,6 @@
<span class="sn-icon sn-icon-calendar"></span>
<input type="datetime" class="form-control calendar-input" name="calendar[<%= id %>]" id="calendar-<%= id %>" readonly="" data-ts="" placeholder="<%= placeholder %>" value="<%= defined?(setDate) ? setDate : '' %>"/>
<%= javascript_include_tag 'global_activities/date_picker', nonce: true %>
<%= javascript_include_tag 'global_activities/date_picker' %>
</div>

Some files were not shown because too many files have changed in this diff Show more