From 1a6578b46071e0b46bbf94ffc3dd4c265d38d537 Mon Sep 17 00:00:00 2001 From: Giga Chubinidze Date: Mon, 9 Oct 2023 11:33:54 +0400 Subject: [PATCH 01/41] Missing file preview [SCI-9433] --- app/views/assets/_asset_list.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/assets/_asset_list.html.erb b/app/views/assets/_asset_list.html.erb index cfa09d650..2956b2c7d 100644 --- a/app/views/assets/_asset_list.html.erb +++ b/app/views/assets/_asset_list.html.erb @@ -4,7 +4,7 @@ data-asset-updated-at="<%= asset.updated_at.to_i %>" data-asset-order="1" > - <%= file_extension_icon_html(asset) %> + <%= image_tag asset.medium_preview || rails_blob_path(asset.file, disposition: 'attachment') %> <%= link_to rails_blob_path(asset.file, disposition: 'attachment'), class: "file-preview-link file-name", id: "modal_link#{asset.id}", From face69e960afbc64c467fbc4588dcc902825035a Mon Sep 17 00:00:00 2001 From: Giga Chubinidze Date: Mon, 9 Oct 2023 15:15:54 +0400 Subject: [PATCH 02/41] changed controller action & javascript --- app/controllers/assets_controller.rb | 15 ++------------- .../shared/content/attachments/context_menu.vue | 6 ------ app/views/assets/_asset_list.html.erb | 2 +- 3 files changed, 3 insertions(+), 20 deletions(-) diff --git a/app/controllers/assets_controller.rb b/app/controllers/assets_controller.rb index 85a28583d..057e449ff 100644 --- a/app/controllers/assets_controller.rb +++ b/app/controllers/assets_controller.rb @@ -36,19 +36,8 @@ class AssetsController < ApplicationController def toggle_view_mode @asset.view_mode = toggle_view_mode_params[:view_mode] @asset.save!(touch: false) - gallery_view_id = if @assoc.is_a?(Step) - @assoc.id - elsif @assoc.is_a?(Result) - @assoc.my_module.id - end - render json: { - html: render_to_string( - partial: 'assets/asset', locals: { - asset: @asset, - gallery_view_id: gallery_view_id - } - ) - } + + render json: AssetSerializer.new(@asset, scope: { user: current_user }).as_json end def load_asset diff --git a/app/javascript/vue/shared/content/attachments/context_menu.vue b/app/javascript/vue/shared/content/attachments/context_menu.vue index bb50a66e4..ee1aa9d76 100644 --- a/app/javascript/vue/shared/content/attachments/context_menu.vue +++ b/app/javascript/vue/shared/content/attachments/context_menu.vue @@ -139,12 +139,6 @@ type: 'PATCH', dataType: 'json', data: { asset: { view_mode: viewMode } } - }).done(data => { - this.$nextTick(function() { - $(`.asset[data-asset-id=${this.attachment.id}] img`) - .replaceWith($(data.html).find(`.asset[data-asset-id=${this.attachment.id}] img`)); - ActiveStoragePreviews.reloadPreview(`.asset[data-asset-id=${this.attachment.id}] img`); - }) }); }, deleteAttachment() { diff --git a/app/views/assets/_asset_list.html.erb b/app/views/assets/_asset_list.html.erb index 2956b2c7d..cfa09d650 100644 --- a/app/views/assets/_asset_list.html.erb +++ b/app/views/assets/_asset_list.html.erb @@ -4,7 +4,7 @@ data-asset-updated-at="<%= asset.updated_at.to_i %>" data-asset-order="1" > - <%= image_tag asset.medium_preview || rails_blob_path(asset.file, disposition: 'attachment') %> + <%= file_extension_icon_html(asset) %> <%= link_to rails_blob_path(asset.file, disposition: 'attachment'), class: "file-preview-link file-name", id: "modal_link#{asset.id}", From a93c35a3befb4e6bb6f8a61e84d55f17681f7c77 Mon Sep 17 00:00:00 2001 From: Ivan Kljun Date: Tue, 17 Oct 2023 16:49:19 +0200 Subject: [PATCH 03/41] Add a listener for when TinyMCE is opened and adjust headers [SCI-9449] --- app/javascript/packs/tiny_mce.js | 19 ++-- .../vue/mixins/stackableHeadersMixin.js | 89 +++++++++++++++++-- 2 files changed, 95 insertions(+), 13 deletions(-) diff --git a/app/javascript/packs/tiny_mce.js b/app/javascript/packs/tiny_mce.js index d93fce4b5..3c73ede79 100644 --- a/app/javascript/packs/tiny_mce.js +++ b/app/javascript/packs/tiny_mce.js @@ -178,10 +178,12 @@ window.TinyMCE = (() => { if (typeof tinyMCE !== 'undefined') { // Hide element containing HTML view of RTE field const tinyMceContainer = $(selector).closest('form').find('.tinymce-view'); + const editorForm = $(selector).closest('form'); const tinyMceInitSize = tinyMceContainer.height(); - $(selector).closest('.form-group, .tinymce-editor-container') - .before(`
`); + + editorForm.parent().height(tinyMceInitSize); tinyMceContainer.addClass('hidden'); + const plugins = ` image table autosave autoresize link advlist codesample code autolink lists charmap anchor searchreplace wordcount visualblocks visualchars @@ -301,11 +303,14 @@ window.TinyMCE = (() => { const editorForm = editorContainer.closest('form'); const menuBar = editorForm.find('.tox-menubar'); - $('.tinymce-placeholder').css('height', `${$(editor.editorContainer).height()}px`); - setTimeout(() => { - editorContainer.addClass('tox-tinymce--loaded'); - $('.tinymce-placeholder').remove(); - }, 400); + editorContainer.addClass('tox-tinymce--loaded'); + const event = new CustomEvent('tinyMCEOpened', { + detail: { + target: editorForm.parent(), + } + }); + window.dispatchEvent(event); + editorForm.parent().css('height', ''); // Init saved status label if (editor.getContent() !== '') { diff --git a/app/javascript/vue/mixins/stackableHeadersMixin.js b/app/javascript/vue/mixins/stackableHeadersMixin.js index b5e14b3b0..4477b2ce3 100644 --- a/app/javascript/vue/mixins/stackableHeadersMixin.js +++ b/app/javascript/vue/mixins/stackableHeadersMixin.js @@ -22,20 +22,97 @@ export default { mounted() { this.secondaryNavigation = document.querySelector('#taskSecondaryMenu'); - this.resizeObserver = new ResizeObserver((entries) => { - entries.forEach((entry) => { - this.taskSecondaryMenuHeight = entry.target.offsetHeight; + if (this.secondaryNavigation) { + this.resizeObserver = new ResizeObserver((entries) => { + entries.forEach((entry) => { + this.taskSecondaryMenuHeight = entry.target.offsetHeight; + }); }); - }); - this.resizeObserver.observe(this.secondaryNavigation); + this.resizeObserver.observe(this.secondaryNavigation); + } + window.addEventListener('tinyMCEOpened', (e) => { + this.handleTinyMCEOpened(e.detail.target); + }); }, beforeDestroy() { if (this.resizeObserver) { this.resizeObserver.disconnect(); } + window.removeEventListener('tinyMCEOpened', this.handleTinyMCEOpened); }, methods: { + handleTinyMCEOpened(target) { + const getVisibleHeight = (elemTop, elemHeight) => { + let visibleHeight = 0; + if (elemTop >= 0) { + visibleHeight = Math.min(elemHeight, window.innerHeight - elemTop); + } else if (elemTop + elemHeight > 0) { + visibleHeight = elemTop + elemHeight; + } + return visibleHeight; + }; + + let headerHeight = 0; + let headerTop = 0; + let secondaryNavigationHeight = 0; + let secondaryNavigationTop = 0; + + if (this.headerRef) { + headerHeight = this.headerRef.offsetHeight; + headerTop = this.headerRef.getBoundingClientRect().top; + } + + if (this.secondaryNavigation) { + secondaryNavigationHeight = this.secondaryNavigation.offsetHeight; + secondaryNavigationTop = this.secondaryNavigation.getBoundingClientRect().top; + } + + const editorHeaderTop = target.offset().top; + let totalHeight = 0; + + const visibleHeaderHeight = getVisibleHeight(headerTop, headerHeight); + if (headerTop + visibleHeaderHeight < editorHeaderTop) { + totalHeight += visibleHeaderHeight; + } + + const visibleSecondaryNavHeight = getVisibleHeight(secondaryNavigationTop, secondaryNavigationHeight); + if (secondaryNavigationTop + visibleSecondaryNavHeight < editorHeaderTop) { + totalHeight += visibleSecondaryNavHeight; + } + + const editorHeader = $('.tox-editor-header'); + + // For Protocol Templates only reset the left value + if (!this.headerRef && !this.secondaryNavigation) { + editorHeader.css('left', ''); + return; + } + + // Handle opening TinyMCE toolbars when only a small bottom area of editor is visible + const targetBottom = target[0].getBoundingClientRect().bottom; + if (targetBottom < 3 * headerHeight) { + $('html, body').animate({ + scrollTop: target.offset().top, + }, 800); + return; + } + + // Handle showing TinyMCE toolbar for fixed/static position of toolbar + if (editorHeader.css('position') === 'fixed') { + editorHeader.css({ + top: totalHeight - 1, + left: '', + }); + } else if (headerTop < (visibleHeaderHeight + visibleSecondaryNavHeight) + && target[0].getBoundingClientRect().top <= headerTop) { + $('html, body').animate({ + scrollTop: editorHeader.offset().top + }, 800); + } + + target.focus(); + }, initStackableHeaders() { const header = this.headerRef; const headerHeight = header.offsetHeight; @@ -93,7 +170,7 @@ export default { // Apply TinyMCE offset $('.tox-editor-header').css( 'top', - stickyNavigationHeight + parseInt($(this.secondaryNavigation).css('top'), 10) + stickyNavigationHeight + parseInt($(this.secondaryNavigation).css('top'), 10) - 1, ); this.lastScrollTop = window.scrollY; // Save last scroll position to when user scroll up/down }, From b93baeb7304f135a4ae56743079462c366631410 Mon Sep 17 00:00:00 2001 From: sboursen-scinote Date: Fri, 27 Oct 2023 16:02:45 +0200 Subject: [PATCH 04/41] Replace Scinote Icons [SCI-9557] --- app/assets/images/favicon copy.ico | Bin 0 -> 34494 bytes app/assets/images/favicon-114x114.png | Bin 0 -> 2690 bytes app/assets/images/favicon-120x120.png | Bin 0 -> 2820 bytes app/assets/images/favicon-144x144.png | Bin 0 -> 3394 bytes app/assets/images/favicon-152x152.png | Bin 0 -> 3505 bytes app/assets/images/favicon-16.png | Bin 481 -> 0 bytes app/assets/images/favicon-180x180.png | Bin 0 -> 4199 bytes app/assets/images/favicon-32.png | Bin 912 -> 0 bytes app/assets/images/favicon-48.png | Bin 1012 -> 0 bytes app/assets/images/favicon-57x57.png | Bin 0 -> 1418 bytes app/assets/images/favicon-72x72.png | Bin 0 -> 1780 bytes app/assets/images/favicon-76x76.png | Bin 0 -> 1876 bytes app/assets/images/favicon.ico | Bin 1150 -> 34494 bytes app/assets/images/logo.png | Bin 3767 -> 83161 bytes app/assets/images/scinote_logo.svg | 39 +++++++++++++++------ app/views/layouts/application.html.erb | 12 +++++-- app/views/layouts/shareable_links.html.erb | 11 ++++-- app/views/layouts/sign_in_halt.html.erb | 11 ++++-- public/favicon-114x114.png | Bin 0 -> 2690 bytes public/favicon-120x120.png | Bin 0 -> 2820 bytes public/favicon-144x144.png | Bin 0 -> 3394 bytes public/favicon-152x152.png | Bin 0 -> 3505 bytes public/favicon-16.png | Bin 481 -> 0 bytes public/favicon-180x180.png | Bin 0 -> 4199 bytes public/favicon-32.png | Bin 912 -> 0 bytes public/favicon-48.png | Bin 1012 -> 0 bytes public/favicon-57x57.png | Bin 0 -> 1418 bytes public/favicon-72x72.png | Bin 0 -> 1780 bytes public/favicon-76x76.png | Bin 0 -> 1876 bytes public/favicon.ico | Bin 1150 -> 34494 bytes public/images/scinote_icon.svg | 34 +++++++++++++++--- public/images/scinote_logo.svg | 39 +++++++++++++++------ 32 files changed, 112 insertions(+), 34 deletions(-) create mode 100644 app/assets/images/favicon copy.ico create mode 100644 app/assets/images/favicon-114x114.png create mode 100644 app/assets/images/favicon-120x120.png create mode 100644 app/assets/images/favicon-144x144.png create mode 100644 app/assets/images/favicon-152x152.png delete mode 100644 app/assets/images/favicon-16.png create mode 100644 app/assets/images/favicon-180x180.png delete mode 100644 app/assets/images/favicon-32.png delete mode 100644 app/assets/images/favicon-48.png create mode 100644 app/assets/images/favicon-57x57.png create mode 100644 app/assets/images/favicon-72x72.png create mode 100644 app/assets/images/favicon-76x76.png create mode 100644 public/favicon-114x114.png create mode 100644 public/favicon-120x120.png create mode 100644 public/favicon-144x144.png create mode 100644 public/favicon-152x152.png delete mode 100644 public/favicon-16.png create mode 100644 public/favicon-180x180.png delete mode 100644 public/favicon-32.png delete mode 100644 public/favicon-48.png create mode 100644 public/favicon-57x57.png create mode 100644 public/favicon-72x72.png create mode 100644 public/favicon-76x76.png diff --git a/app/assets/images/favicon copy.ico b/app/assets/images/favicon copy.ico new file mode 100644 index 0000000000000000000000000000000000000000..1bd5bed50a6a146d395ebebf1f3e19830f500171 GIT binary patch literal 34494 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 y|7QO;`+w)^^Dm1CD;s8Kdc^f%!-1%;EpmE3Uc# literal 0 HcmV?d00001 diff --git a/app/assets/images/favicon-114x114.png b/app/assets/images/favicon-114x114.png new file mode 100644 index 0000000000000000000000000000000000000000..e1aa0b6eb695db0818ede12f588b411f90922000 GIT binary patch literal 2690 zcmbuB=|2?u7stnzeZLr8OU9Bl`$(3^3^PhZma#MjjWEbAOVp5IvP_nyYm2guMw6ZF z+fa%kitJ<;Vvyx>d;R``--Gu#56hTg|#>XJvafE(#tUV?d1dnd^{W$EFNDM*nKN8tQ<6GK7EYRZOxfc`! z3vastG8s#jaRhEw(h_OaVB4D&cEH4lv8+Pa zeWJ^*0sCWdG(*k(dA4;0)qCm}kPUKzzg3(?nzHsv>=|#*&!P}x_7ozvQ50O}Bq4b9 za8Z9c*j=tFIoV{pYo{}3Rq_ccdS+3X5H_n%o*<=oWhU6`UvSHqzJiwfvi337_2UJi zR^H{p#}q7=NfUBzOQ@4tM>9~&2x$iRT)<9h2jY66U@#cIlH5KIt7PXC0{~2Wbb~5t zBgq8roZ;3ekF$j`w+If?nYG7nx!A$q+o=7YYqwr6DLtwJE8=iQL1x|!T;+MK3_P?t zyjoH0JoG4Vj>%YAAOGtuTe|eQb%fFZ=<{pZifcjhi`thQQv>nNz{1qt!RJ&XpIG2Qu;5(MeCyr!34B*~6k@vcfcKgcd~8-xcdl5Zc`&?b;*Q% zJp|Lx#mEZaeX(j&QMc9^cbpl_*xw~EE~R7zV>9PI`=GK&ZS?IrCf2KDMwQ0E%o=~J zW3;VuFVHvZI80=o@e+0X$KH8=+WH}{7#{^|k~Gu(qUaKYVj${X*ai|lQ=8@_Q$<9wcu$B{ieK$XK5InR^pJr1-b(m`_T~PV8_}xfxyniGn<)IPk~cR)^v-JY9wT^)Ad z<*$3*PQBTwX@w$O68U=G4{cc0COYuL|E|=yZ2{arDEP|mLv6e4w@}5Vt%j)fQ7_r9 z$0B)}Y64>RulhpONLzL0o*N%inM6VG0QU%b@p2SjjXCNDtE>{qz+}oh4iO98{B;pH zG73RA{CpL{Q*)l3v#%}Kj3=|txOWLi%zT!BTqb$)oUP*n5nu{#@^lxU!VVAnq8$F7H|dy~&C^p+RW){pF6Qq+CT`)L%^%q4`0}e#<;%Ld z+V_6quVH^@&5Yc=i1c=sfBFu(w4Xk?(XsA_6ihz{3f8=&?z;{2+K@VrahPS5j2u$b z2(|x)tNo6+n|Ua{qI(2eyi%vJPg}+lS$e{${O4eJc$CwR}{Pid8u>mz18~@Y0IsY*K(HaqDybCoGy09klVz+0|Q4(06J}Rax;&U!T%?Ar-mkf3Z=Q+c<_#Yt~NVzE4_WXTuwzTl<1i zAQ6bMOS<7VAfVgv+rpUmwDNJI`47#LzOMV!vBLa}--WcMqE^G_{UGF#!)G9VW>if&!t^@S{Ok~sYHbr@s#v)I^Vdh z9xNIqRb@8P&5-wTPIip2Q1W3Upx$Chhd;KH)AK6CVlve6ZB~-e<=nsUz7yMeZ{xUQ z%WH~ua2SjrXwNxk5d7elp32MIXVVohS3SFDn--3H-K6h>hf>n|G9oqV{y%5GF3+9g zXm=j?6q>c~$E~PT@7dk&>6NEkAsD86SYRp2TbW?tq#U_TXKUMNOD}1}fVq}{B`58! zH{`!zV}IIZB;`_R^isl{IT&ngIl6LjhXVu??~LxbRIm(9|vvg9X7^vRXW4@OflKjxha2`?kGx2!_B#pQXC z%^MD5J@1FO2q(|42a~#0dq#iD9JNJYwv2oCX-Tl`Yc76+@WYLZBm!oi8Lt?)W;ue1 zsF1O7v3_773+bKD&W?J+0LZy62wZb}u&g%TR9Y%@F3k4K^p2a$>ukAw+5-J&TkaR6 zrQOp@RcG!s*R;kMwr!vl5Sb|5^{tm4&U#}PBxSjhNIpgqhD%QV!#~X-Z4MzTs1CpdG&z|U zt2nie!k_FSU||381l$yN#ilP=88PYUw$I;~9&|d2B{MfnH0~9k zVmt-lcdknv3T0;){Ldi$pB5`V*pS(Py&&(ij*OI)r@1`Qg7f C;0M+K literal 0 HcmV?d00001 diff --git a/app/assets/images/favicon-120x120.png b/app/assets/images/favicon-120x120.png new file mode 100644 index 0000000000000000000000000000000000000000..e12a8ca52400b7b9ea5e8e18464cfc49e2b6c90f GIT binary patch literal 2820 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 GV*dfCFDpp^ literal 0 HcmV?d00001 diff --git a/app/assets/images/favicon-152x152.png b/app/assets/images/favicon-152x152.png new file mode 100644 index 0000000000000000000000000000000000000000..07ff3209c976e99a0f113abaf206d9f53cf65300 GIT binary patch literal 3505 zcmai1XHXN&77a>o0)9v^AYBCn6GVz4NJI#|h;$|N76M2UDMA3H1Stvx6s0Ok3x*;} zO9%m^_aaRxi9+ZlNb$wzd_TVTX5Ra8&z&=S?%ti9-95AMCPq43?5EiQ005UROv{X( zF~5VAnT|k$s2Dx5`NFLI0RV2|?_fxm zT-udQwKtE>ciTQ+g4DVb4Rnm>6yoL}J+d3atULI4FlTS0d-uYZKddLF;v_Tz=7R z=kyPGORf4Mrvy*<&D!za+vpTa{cNtz{J0xs?B>O|uj;tmyn}_1Ybh_dg|EgBi3GPN z<#eef4{ggfJ60;nkL}#qUvFE#b|9*pU?Ug^Lht8_zMAwKOe}Ch2#BqsyqkOHtW=iEv zabAMBqlx9r^|bE^aF(8Hq~g{$YgUGLMoS90Upzb(oahO>hQuH0#NFLVx;xeIJ;52x z5p-b2_PXp!vUaMLtbn<>MRE#-lVtmTYM9UP^ zzj1-c=lW@}RsW>lF9$K**IamK1yMy+j?3GIS4^=2J{)V*BQ@=0Yg@}?Y@AhGb~a2w z$^mf(v6=<7YnSsHY0NmwOqoL-S7y02W&2mNR4--RyzjI)8-XJg?H*O zKuVW8{%%tUNY>)vV@$07mYKp?a)+YK*vA=UNqur=qSUFdA+D%~iO5dVNsN+`uJ4*1 zFJJI9^sYnoKwHIIALvBtu`Up~$34$`&*R*|{x)eg>QGm~Fd((|jKx<^%~-wt80Jr6 z*Q5cf+a9}mb%4m;x!FSoYHD53`LislC0p078ml9A0=KEuBDjiZOMPqST2&S2&quF6 z>1#7yO+C~qqDCJI@o02&2-SG%gPGNoM!J3^L5`m2t@@MwE}u~^^P0|87w1IEZ^X)9 ztRPOt>Wil9=_&+rWIVMmAK0-E{}#1azEWw`{I0jb0Z|;b8nI^-f@|#TOG)0=)o&(u zR>a{1)r-p9Gq(^llt=YTg^Lj99L)H@M^c#~>h2TYz z4AQP*FUmxqnEKgh>Z%Mj?aL0OQn%Wsq$K1pS*aUrk^Gm%g&NHBgVW(I9#NOs`r)_* zf$`KWPQ=tYXp29v+8NEdI5c5ZL?!!lX`5O%Oy5Q|Rh&@&6@Vhp-rtsP@BUO$oA%bp zfD{LxMq0>t+tW{I-lp;FQ2Lt(mTbKK>d|h&dnaoNB<+}+#N0g1;@ULGR2oFw%49W2 zX7$zu_ht-+6P?&ej9)(2-Qzo~sCGs`I$j^{h>%o%X}<=jw6BO#-)zc2SAbA~9zM)7 ze){#qUS6d4ID72#gQ{J#30jut^?pGkt403)vRUH}f~K$;-K_?9;o#dLri?xKWzw=KP}W zItmi2D=Qz=%6*+?6`YQf%D$0ff=+587mRkbz{a1q-OsL4=*ot$HHOzOkP6KN2?gIw zZO)3~F{n-lG1oMfCsN#+_Q9YeJD7Jg5Taq%+J5t#>4m;!30EN{ke4N~nLsc=)*F~S zS!=)FU_kBH#UHJx+m-n`FTj_dfFkkNzC@Nq#eU?db77?^2-hXQQ?yC({xaq;Ja9g? zLQo}qM_dUxZiIRpEjI0qb?X2)`<#A4F;?pvY}G4!pZ-i)biRaB?Y>z_KSAgem`CIx zPbv82v-g7ImOd%)AB4Bnki{hbwpS&`efQt=(;T8MzCIBg_35eV93kC;9kRZJb4Ls; zZ)Wv#kej=U3MMgD7f8!-R_2zY^lH+`i)5aMI+8tGr158>ljB!T+ZG&v{i{F^RBXZb zqJ8P^V)5&NZNcd9=RO|k_yioBBTur`fxP;tby7iWI*b*PvV)nsz&6uQhbf+mTT zDDBQ}I$INAf9CVM)0ZE}t>oOnQaVjy*Q0fgh`pb7p28=H1R_8poLY&jIe{!nf=&>Q z)`F_d_Eff^kO*}@`#G}4!dxX#q21UatRumBeqlxeAHZ;29)yqJh8eS8|BMg;uB*yW zn|>`jCB52AykK?Jc5hIT3o1sp7}39!(%>JDB{CUsF2~vD&oE>b8~~}FnoK`p9J_<} zEix*)P~DwPkELYObip@aE(&qkg?izbFxAP(GeH<&ahQ6emblYFy3ywiqlY44N-p&T z8r^<Hbe9BlD%^~8bpR9eiM7z z0Rsbo!!rzF{3K<*x17A7i*p6E!4G~-W_y|+VW^=S!4U9)3cGn&RtHv{8t|?!G$dp; z(R%PNl5vjuFOoC9hUVt&;u(2@`HI7m-*CpYC$8zUV?}&h0hQ3}6*ZLaj%;s~NLWP( zAhSg~yZ~6l51r??n49cYIPj}1wq7-y#ad&)h0#6yVHC8kioZMu8Fz1<1d4(3Ei>_o zd~^yX-B2v1{kWIK+1_(eCn%zBLVk^IvHf{T@jd)%k6TC+>6Jhw*R<)zEFFnEl7On( zOWN}>$Sc8qizGFo(MldJcBVW@*g`&uk%PWZI#w_@#yv`pfnp+)AI5Ob0PU^8>A4Lx zd5{-0R6?;3H*HQ>dJosdW`dRG9lgvSN*e5#mg=@-!ms&HPqv`9I3?=N8EZ)bQg zQB843X=+O%X=AHXUoBO*tLo%f*;+dWLKO)TnT=*z4SW6V&hJkHY@WwI>u@eE^(Nrn zX`7G6iz3pXbenH+#mDtV#l|xrG6o6+G9!?XSo{FD8s{QngHE&oTaIAxH0q^Ars)G+So_}J3DQYLE+7Wy9ypnKCu Js~ieP{R;pVkr)5~ literal 0 HcmV?d00001 diff --git a/app/assets/images/favicon-16.png b/app/assets/images/favicon-16.png deleted file mode 100644 index 93a5b366dbce02a5d3483dd7707a41c88ce806d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 481 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 y|7QO;`+w)^^Dm1CD;s8Kdc^f%!-1%;EpmE3Uc# literal 1150 zcmdtf&nv@m9LMp`jQN!s&0@YZqRc@k5?Yd4B&Mc@GLq7Y+J)QVKTt|JIIx3Sjic+# zO>QV9nv^(@9ab)y=li=K%4JRt-s`dN`tJ4a^ZtB3N*VZ=&5CckS}s(|s+4L4uXvMw z&qFEx`)_sN)|%i!06sLbM+1g1g6ys>{Pv<5xgsCKZRUBy^I~Vz)=uCEXDCGpw($uc zaz)+=JIXMH{;fQc`xBWHxkg- zC+kN7Yl!0ta(<^b6MZ9%71=9l$)VT4pA zT{RzhZ9P fZ+iYJli~!k^qVSXWnqHcf*4Fo#mPp$^V0VPT%@0i diff --git a/app/assets/images/logo.png b/app/assets/images/logo.png index 6d54bb8822e2aa114470b816f849be621d9266aa..8c449a06243cec8cfbb8b45a53ee045f645cada8 100644 GIT binary patch literal 83161 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 diff --git a/app/assets/images/scinote_logo.svg b/app/assets/images/scinote_logo.svg index 2733831ae..34320d59a 100644 --- a/app/assets/images/scinote_logo.svg +++ b/app/assets/images/scinote_logo.svg @@ -1,10 +1,29 @@ - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 2230140a2..79d372aaf 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -33,9 +33,15 @@ <% end %> <%= favicon_link_tag "favicon.ico" %> - <%= favicon_link_tag "favicon-16.png", type: "image/png", size: "16x16" %> - <%= favicon_link_tag "favicon-32.png", type: "image/png", size: "32x32" %> - <%= favicon_link_tag "favicon-48.png", type: "image/png", size: "48x48" %> + <%= favicon_link_tag "favicon-57x57.png", type: "image/png", size: "57x57" %> + <%= favicon_link_tag "favicon-72x72.png", type: "image/png", size: "72x72" %> + <%= favicon_link_tag "favicon-76x76.png", type: "image/png", size: "76x76" %> + <%= favicon_link_tag "favicon-114x114.png", type: "image/png", size: "114x114" %> + <%= favicon_link_tag "favicon-120x120.png", type: "image/png", size: "120x120" %> + <%= favicon_link_tag "favicon-144x144.png", type: "image/png", size: "144x144" %> + <%= favicon_link_tag "favicon-152x152.png", type: "image/png", size: "152x152" %> + <%= favicon_link_tag "favicon-180x180.png", type: "image/png", size: "180x180" %> + <%= stylesheet_link_tag 'fontawesome' %> <%= stylesheet_link_tag 'prism' %> diff --git a/app/views/layouts/shareable_links.html.erb b/app/views/layouts/shareable_links.html.erb index b37b65a44..8077241c4 100644 --- a/app/views/layouts/shareable_links.html.erb +++ b/app/views/layouts/shareable_links.html.erb @@ -14,9 +14,14 @@ <%= stylesheet_link_tag 'datatables' %> <%= favicon_link_tag "favicon.ico" %> - <%= favicon_link_tag "favicon-16.png", type: "image/png", size: "16x16" %> - <%= favicon_link_tag "favicon-32.png", type: "image/png", size: "32x32" %> - <%= favicon_link_tag "favicon-48.png", type: "image/png", size: "48x48" %> + <%= favicon_link_tag "favicon-57x57.png", type: "image/png", size: "57x57" %> + <%= favicon_link_tag "favicon-72x72.png", type: "image/png", size: "72x72" %> + <%= favicon_link_tag "favicon-76x76.png", type: "image/png", size: "76x76" %> + <%= favicon_link_tag "favicon-114x114.png", type: "image/png", size: "114x114" %> + <%= favicon_link_tag "favicon-120x120.png", type: "image/png", size: "120x120" %> + <%= favicon_link_tag "favicon-144x144.png", type: "image/png", size: "144x144" %> + <%= favicon_link_tag "favicon-152x152.png", type: "image/png", size: "152x152" %> + <%= favicon_link_tag "favicon-180x180.png", type: "image/png", size: "180x180" %> <%= stylesheet_link_tag 'fontawesome' %> <%= stylesheet_link_tag 'prism' %> diff --git a/app/views/layouts/sign_in_halt.html.erb b/app/views/layouts/sign_in_halt.html.erb index a8eb9d209..95bc5b63e 100644 --- a/app/views/layouts/sign_in_halt.html.erb +++ b/app/views/layouts/sign_in_halt.html.erb @@ -19,9 +19,14 @@ <%= stylesheet_link_tag 'application', media: 'all' %> <%= favicon_link_tag "favicon.ico" %> - <%= favicon_link_tag "favicon-16.png", type: "image/png", size: "16x16" %> - <%= favicon_link_tag "favicon-32.png", type: "image/png", size: "32x32" %> - <%= favicon_link_tag "favicon-48.png", type: "image/png", size: "48x48" %> + <%= favicon_link_tag "favicon-57x57.png", type: "image/png", size: "57x57" %> + <%= favicon_link_tag "favicon-72x72.png", type: "image/png", size: "72x72" %> + <%= favicon_link_tag "favicon-76x76.png", type: "image/png", size: "76x76" %> + <%= favicon_link_tag "favicon-114x114.png", type: "image/png", size: "114x114" %> + <%= favicon_link_tag "favicon-120x120.png", type: "image/png", size: "120x120" %> + <%= favicon_link_tag "favicon-144x144.png", type: "image/png", size: "144x144" %> + <%= favicon_link_tag "favicon-152x152.png", type: "image/png", size: "152x152" %> + <%= favicon_link_tag "favicon-180x180.png", type: "image/png", size: "180x180" %> <%= csrf_meta_tags %> diff --git a/public/favicon-114x114.png b/public/favicon-114x114.png new file mode 100644 index 0000000000000000000000000000000000000000..e1aa0b6eb695db0818ede12f588b411f90922000 GIT binary patch literal 2690 zcmbuB=|2?u7stnzeZLr8OU9Bl`$(3^3^PhZma#MjjWEbAOVp5IvP_nyYm2guMw6ZF z+fa%kitJ<;Vvyx>d;R``--Gu#56hTg|#>XJvafE(#tUV?d1dnd^{W$EFNDM*nKN8tQ<6GK7EYRZOxfc`! z3vastG8s#jaRhEw(h_OaVB4D&cEH4lv8+Pa zeWJ^*0sCWdG(*k(dA4;0)qCm}kPUKzzg3(?nzHsv>=|#*&!P}x_7ozvQ50O}Bq4b9 za8Z9c*j=tFIoV{pYo{}3Rq_ccdS+3X5H_n%o*<=oWhU6`UvSHqzJiwfvi337_2UJi zR^H{p#}q7=NfUBzOQ@4tM>9~&2x$iRT)<9h2jY66U@#cIlH5KIt7PXC0{~2Wbb~5t zBgq8roZ;3ekF$j`w+If?nYG7nx!A$q+o=7YYqwr6DLtwJE8=iQL1x|!T;+MK3_P?t zyjoH0JoG4Vj>%YAAOGtuTe|eQb%fFZ=<{pZifcjhi`thQQv>nNz{1qt!RJ&XpIG2Qu;5(MeCyr!34B*~6k@vcfcKgcd~8-xcdl5Zc`&?b;*Q% zJp|Lx#mEZaeX(j&QMc9^cbpl_*xw~EE~R7zV>9PI`=GK&ZS?IrCf2KDMwQ0E%o=~J zW3;VuFVHvZI80=o@e+0X$KH8=+WH}{7#{^|k~Gu(qUaKYVj${X*ai|lQ=8@_Q$<9wcu$B{ieK$XK5InR^pJr1-b(m`_T~PV8_}xfxyniGn<)IPk~cR)^v-JY9wT^)Ad z<*$3*PQBTwX@w$O68U=G4{cc0COYuL|E|=yZ2{arDEP|mLv6e4w@}5Vt%j)fQ7_r9 z$0B)}Y64>RulhpONLzL0o*N%inM6VG0QU%b@p2SjjXCNDtE>{qz+}oh4iO98{B;pH zG73RA{CpL{Q*)l3v#%}Kj3=|txOWLi%zT!BTqb$)oUP*n5nu{#@^lxU!VVAnq8$F7H|dy~&C^p+RW){pF6Qq+CT`)L%^%q4`0}e#<;%Ld z+V_6quVH^@&5Yc=i1c=sfBFu(w4Xk?(XsA_6ihz{3f8=&?z;{2+K@VrahPS5j2u$b z2(|x)tNo6+n|Ua{qI(2eyi%vJPg}+lS$e{${O4eJc$CwR}{Pid8u>mz18~@Y0IsY*K(HaqDybCoGy09klVz+0|Q4(06J}Rax;&U!T%?Ar-mkf3Z=Q+c<_#Yt~NVzE4_WXTuwzTl<1i zAQ6bMOS<7VAfVgv+rpUmwDNJI`47#LzOMV!vBLa}--WcMqE^G_{UGF#!)G9VW>if&!t^@S{Ok~sYHbr@s#v)I^Vdh z9xNIqRb@8P&5-wTPIip2Q1W3Upx$Chhd;KH)AK6CVlve6ZB~-e<=nsUz7yMeZ{xUQ z%WH~ua2SjrXwNxk5d7elp32MIXVVohS3SFDn--3H-K6h>hf>n|G9oqV{y%5GF3+9g zXm=j?6q>c~$E~PT@7dk&>6NEkAsD86SYRp2TbW?tq#U_TXKUMNOD}1}fVq}{B`58! zH{`!zV}IIZB;`_R^isl{IT&ngIl6LjhXVu??~LxbRIm(9|vvg9X7^vRXW4@OflKjxha2`?kGx2!_B#pQXC z%^MD5J@1FO2q(|42a~#0dq#iD9JNJYwv2oCX-Tl`Yc76+@WYLZBm!oi8Lt?)W;ue1 zsF1O7v3_773+bKD&W?J+0LZy62wZb}u&g%TR9Y%@F3k4K^p2a$>ukAw+5-J&TkaR6 zrQOp@RcG!s*R;kMwr!vl5Sb|5^{tm4&U#}PBxSjhNIpgqhD%QV!#~X-Z4MzTs1CpdG&z|U zt2nie!k_FSU||381l$yN#ilP=88PYUw$I;~9&|d2B{MfnH0~9k zVmt-lcdknv3T0;){Ldi$pB5`V*pS(Py&&(ij*OI)r@1`Qg7f C;0M+K literal 0 HcmV?d00001 diff --git a/public/favicon-120x120.png b/public/favicon-120x120.png new file mode 100644 index 0000000000000000000000000000000000000000..e12a8ca52400b7b9ea5e8e18464cfc49e2b6c90f GIT binary patch literal 2820 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 GV*dfCFDpp^ literal 0 HcmV?d00001 diff --git a/public/favicon-152x152.png b/public/favicon-152x152.png new file mode 100644 index 0000000000000000000000000000000000000000..07ff3209c976e99a0f113abaf206d9f53cf65300 GIT binary patch literal 3505 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 Js~ieP{R;pVkr)5~ literal 0 HcmV?d00001 diff --git a/public/favicon-16.png b/public/favicon-16.png deleted file mode 100644 index 93a5b366dbce02a5d3483dd7707a41c88ce806d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 481 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 y|7QO;`+w)^^Dm1CD;s8Kdc^f%!-1%;EpmE3Uc# literal 1150 zcmdtf&nv@m9LMp`jQN!s&0@YZqRc@k5?Yd4B&Mc@GLq7Y+J)QVKTt|JIIx3Sjic+# zO>QV9nv^(@9ab)y=li=K%4JRt-s`dN`tJ4a^ZtB3N*VZ=&5CckS}s(|s+4L4uXvMw z&qFEx`)_sN)|%i!06sLbM+1g1g6ys>{Pv<5xgsCKZRUBy^I~Vz)=uCEXDCGpw($uc zaz)+=JIXMH{;fQc`xBWHxkg- zC+kN7Yl!0ta(<^b6MZ9%71=9l$)VT4pA zT{RzhZ9P fZ+iYJli~!k^qVSXWnqHcf*4Fo#mPp$^V0VPT%@0i diff --git a/public/images/scinote_icon.svg b/public/images/scinote_icon.svg index a50cd9114..34320d59a 100644 --- a/public/images/scinote_icon.svg +++ b/public/images/scinote_icon.svg @@ -1,5 +1,29 @@ - - - - - + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/images/scinote_logo.svg b/public/images/scinote_logo.svg index 2733831ae..34320d59a 100644 --- a/public/images/scinote_logo.svg +++ b/public/images/scinote_logo.svg @@ -1,10 +1,29 @@ - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + From 9cb1e45302b7877a94f337145547ba976371a830 Mon Sep 17 00:00:00 2001 From: Giga Chubinidze Date: Mon, 30 Oct 2023 04:53:55 +0400 Subject: [PATCH 05/41] Filter by archived result does not find anything --- app/controllers/results_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/results_controller.rb b/app/controllers/results_controller.rb index 3ae55f84e..19ca74efa 100644 --- a/app/controllers/results_controller.rb +++ b/app/controllers/results_controller.rb @@ -164,7 +164,7 @@ class ResultsController < ApplicationController def apply_filters! if params[:query].present? - @results = @results.search(current_user, params[:archived] == 'true', params[:query], params[:page] || 1) + @results = @results.search(current_user, params[:view_mode] == 'archived', params[:query], params[:page] || 1) end @results = @results.where('created_at >= ?', params[:created_at_from]) if params[:created_at_from] From c1e3472d4636b71a73b10bef95e409e36e5c161a Mon Sep 17 00:00:00 2001 From: ajugo Date: Mon, 30 Oct 2023 09:42:49 +0100 Subject: [PATCH 06/41] Fix failing api test because of randomness [SCI-9569] (#6549) --- .../api/v1/experiments_controller_spec.rb | 2 +- .../api/v1/projects_controller_spec.rb | 2 +- .../v1/protocol_templates_controller_spec.rb | 29 ++++++++++--------- spec/requests/api/v1/tasks_controller_spec.rb | 2 +- 4 files changed, 18 insertions(+), 17 deletions(-) diff --git a/spec/requests/api/v1/experiments_controller_spec.rb b/spec/requests/api/v1/experiments_controller_spec.rb index e76d41697..0fcaef14d 100644 --- a/spec/requests/api/v1/experiments_controller_spec.rb +++ b/spec/requests/api/v1/experiments_controller_spec.rb @@ -241,7 +241,7 @@ RSpec.describe "Api::V1::ExperimentsController", type: :request do describe 'PATCH experiment, #update' do before :all do @valid_headers['Content-Type'] = 'application/json' - @experiment = @valid_project.experiments.first + @experiment = @valid_project.experiments.active.first end let(:action) do diff --git a/spec/requests/api/v1/projects_controller_spec.rb b/spec/requests/api/v1/projects_controller_spec.rb index 696247759..25fcaea14 100644 --- a/spec/requests/api/v1/projects_controller_spec.rb +++ b/spec/requests/api/v1/projects_controller_spec.rb @@ -238,7 +238,7 @@ RSpec.describe 'Api::V1::ProjectsController', type: :request do describe 'PATCH project, #update' do before :all do @valid_headers['Content-Type'] = 'application/json' - @project = @user.teams.first.projects.first + @project = @user.teams.first.projects.active.first end let(:action) do diff --git a/spec/requests/api/v1/protocol_templates_controller_spec.rb b/spec/requests/api/v1/protocol_templates_controller_spec.rb index 7fa54470f..debd0ba3c 100644 --- a/spec/requests/api/v1/protocol_templates_controller_spec.rb +++ b/spec/requests/api/v1/protocol_templates_controller_spec.rb @@ -27,13 +27,14 @@ RSpec.describe 'Api::V1::ProtocolTemplateController', type: :request do team_id: @team.id ), headers: @valid_headers expect { hash_body = json }.not_to raise_exception - expect(hash_body[:data]).to match( - JSON.parse( - ActiveModelSerializers::SerializableResource - .new(Protocol.latest_available_versions(@team), each_serializer: Api::V1::ProtocolTemplateSerializer) - .to_json - )['data'] - ) + + parsed_data = JSON.parse( + ActiveModelSerializers::SerializableResource + .new(Protocol.latest_available_versions(@team), each_serializer: Api::V1::ProtocolTemplateSerializer) + .to_json + )['data'] + + expect(hash_body[:data]).to match_array(parsed_data) end it 'When invalid request, user in not member of the team' do @@ -63,13 +64,13 @@ RSpec.describe 'Api::V1::ProtocolTemplateController', type: :request do get api_v1_team_protocol_template_path(id: @protocol_published_original.id, team_id: @team.id), headers: @valid_headers expect { hash_body = json }.not_to raise_exception - expect(hash_body[:data]).to match( - JSON.parse( - ActiveModelSerializers::SerializableResource - .new(@protocol_published_original, serializer: Api::V1::ProtocolTemplateSerializer) - .to_json - )['data'] - ) + parsed_data = JSON.parse( + ActiveModelSerializers::SerializableResource + .new(@protocol_published_original, serializer: Api::V1::ProtocolTemplateSerializer) + .to_json + )['data'] + + expect(hash_body[:data]).to match_array(parsed_data) end it 'When invalid request, user in not member of the team' do diff --git a/spec/requests/api/v1/tasks_controller_spec.rb b/spec/requests/api/v1/tasks_controller_spec.rb index 0b43c1976..52f525fa4 100644 --- a/spec/requests/api/v1/tasks_controller_spec.rb +++ b/spec/requests/api/v1/tasks_controller_spec.rb @@ -285,7 +285,7 @@ RSpec.describe 'Api::V1::TasksController', type: :request do @valid_headers['Content-Type'] = 'application/json' end - let(:task) { @valid_experiment.my_modules.take } + let(:task) { @valid_experiment.my_modules.active.first } let(:action) do patch( From e73543dd90d53ba5aa34a68aecb774a0665a0dea Mon Sep 17 00:00:00 2001 From: ajugo Date: Mon, 30 Oct 2023 12:54:55 +0100 Subject: [PATCH 07/41] Fix team permission scope for service API [SCI-9611] (#6554) --- app/controllers/api/service/base_controller.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/controllers/api/service/base_controller.rb b/app/controllers/api/service/base_controller.rb index ec0be0f9c..3640ce881 100644 --- a/app/controllers/api/service/base_controller.rb +++ b/app/controllers/api/service/base_controller.rb @@ -73,6 +73,7 @@ module Api def load_team @team = current_user.teams.find(params.require(:team_id)) + current_user.permission_team = @team raise PermissionError.new(Team, :read) unless can_read_team?(@team) end From 6dd917552eb579de9a869f01894f7d0cfee9031f Mon Sep 17 00:00:00 2001 From: Ivan Kljun Date: Mon, 30 Oct 2023 14:54:35 +0100 Subject: [PATCH 08/41] Add timestap to bypass Chrome cache for TinyMCE images [SCI-9597] --- app/javascript/packs/tiny_mce.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/javascript/packs/tiny_mce.js b/app/javascript/packs/tiny_mce.js index d93fce4b5..06fc977e3 100644 --- a/app/javascript/packs/tiny_mce.js +++ b/app/javascript/packs/tiny_mce.js @@ -205,6 +205,12 @@ window.TinyMCE = (() => { cache_suffix: '?v=6.5.1-19', // This suffix should be changed any time library is updated selector, skin: false, + editimage_fetch_image: img => new Promise((resolve) => { + // Appending a timestamp to an image URL bypasses Chrome’s cache, resolving occasional CORS errors + fetch(img.src + '?t=' + new Date().getTime()) + .then(response => response.blob()) + .then(blob => resolve(blob)); + }), content_css: false, content_style: contentStyle, convert_urls: false, From d3ba70c2bfe39f0ce1b1cc18d15790f06d301481 Mon Sep 17 00:00:00 2001 From: Alex Kriuchykhin Date: Mon, 30 Oct 2023 17:28:53 +0100 Subject: [PATCH 09/41] Fix file previews in project exports [SCI-9619] (#6548) --- app/jobs/team_zip_export_job.rb | 14 +++++++++++--- app/models/asset.rb | 2 +- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/app/jobs/team_zip_export_job.rb b/app/jobs/team_zip_export_job.rb index b2367294d..de060b852 100644 --- a/app/jobs/team_zip_export_job.rb +++ b/app/jobs/team_zip_export_job.rb @@ -187,11 +187,19 @@ class TeamZipExportJob < ZipExportJob def prepare_preview(asset) if asset.previewable? && !asset.list? preview = asset.inline? ? asset.large_preview : asset.medium_preview - return unless preview.image.attached? begin - file_name = preview.image.filename.to_s - file_data = preview.image.download + if preview.is_a?(ActiveStorage::Preview) + return unless preview.image.attached? + + file_name = preview.image.filename.to_s + file_data = preview.image.download + else + return unless preview.processed? + + file_name = preview.filename.to_s + file_data = preview.download + end rescue ActiveStorage::FileNotFoundError => e Rails.logger.error(e.message) Rails.logger.error(e.backtrace.join("\n")) diff --git a/app/models/asset.rb b/app/models/asset.rb index 64a9e1235..4e85c9093 100644 --- a/app/models/asset.rb +++ b/app/models/asset.rb @@ -473,7 +473,7 @@ class Asset < ApplicationRecord def previewable_image? preview_image.attached? || - file.blob&.content_type =~ %r{^image/#{Regexp.union(Constants::WHITELISTED_IMAGE_TYPES)}} + file.blob&.content_type&.match?(%r{^image/#{Regexp.union(Constants::WHITELISTED_IMAGE_TYPES)}}) end def step_or_result_or_repository_asset_value From 16ebf0cbe8f6a9f2636f458ef92a7795ff94cdd8 Mon Sep 17 00:00:00 2001 From: Martin Artnik <85488244+artoscinote@users.noreply.github.com> Date: Thu, 2 Nov 2023 13:18:50 +0100 Subject: [PATCH 10/41] Revert "Revert "Refocus on tinymce editor after marvinjs img update [SCI-9515]"" --- app/assets/javascripts/sitewide/marvinjs_editor.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/assets/javascripts/sitewide/marvinjs_editor.js b/app/assets/javascripts/sitewide/marvinjs_editor.js index 863539ed9..1a1ae02eb 100644 --- a/app/assets/javascripts/sitewide/marvinjs_editor.js +++ b/app/assets/javascripts/sitewide/marvinjs_editor.js @@ -201,6 +201,8 @@ var MarvinJsEditorApi = (function() { $('#modal_link' + json.id + ' .attachment-label').text(json.file_name); } $(marvinJsModal).modal('hide'); + + config.editor.focus(); config.button.dataset.inProgress = false; if (MarvinJsEditor.saveCallback) MarvinJsEditor.saveCallback(); From 0861b7ac0be2aeab5cb8d6cd090c69ebf1a319fd Mon Sep 17 00:00:00 2001 From: Ivan Kljun Date: Thu, 2 Nov 2023 13:38:12 +0100 Subject: [PATCH 11/41] Move base64 SN-icon-font to reports_pdf.sass.scss [SCI-9567] --- app/assets/stylesheets/reports.scss | 5 ----- app/assets/stylesheets/reports_pdf.sass.scss | 5 +++++ 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/assets/stylesheets/reports.scss b/app/assets/stylesheets/reports.scss index 8bd08cdcc..5b6c58477 100644 --- a/app/assets/stylesheets/reports.scss +++ b/app/assets/stylesheets/reports.scss @@ -1,11 +1,6 @@ // scss-lint:disable SelectorDepth // scss-lint:disable NestingDepth -@font-face { - font-family: "SN-icon-font"; - src: url(data:font/woff2;base64,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); -} - /* Index page */ .report-table { margin-top: 20px; diff --git a/app/assets/stylesheets/reports_pdf.sass.scss b/app/assets/stylesheets/reports_pdf.sass.scss index d4b8723a0..7dc4a0091 100644 --- a/app/assets/stylesheets/reports_pdf.sass.scss +++ b/app/assets/stylesheets/reports_pdf.sass.scss @@ -2,6 +2,11 @@ * Additional rules when generating PDF from the reports. */ +@font-face { + font-family: "SN-icon-font"; + src: url(data:font/woff2;base64,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); +} + // Hide all fas icons .fas { display: none; From d82ec3a705cdee68c65eeaa992e5259054b49ceb Mon Sep 17 00:00:00 2001 From: ajugo Date: Fri, 3 Nov 2023 10:11:19 +0100 Subject: [PATCH 12/41] Fix zebra label printing order [SCI-9575] (#6574) --- .../javascripts/sitewide/zebra_print.js | 52 +++++++++++-------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/app/assets/javascripts/sitewide/zebra_print.js b/app/assets/javascripts/sitewide/zebra_print.js index baea8b41c..23cb1ebce 100644 --- a/app/assets/javascripts/sitewide/zebra_print.js +++ b/app/assets/javascripts/sitewide/zebra_print.js @@ -128,31 +128,33 @@ var zebraPrint = (function() { + printingStatus)); } - function print(device, progressModal, numberOfCopies, printerName, labels) { - var counter = 0; + function print(device, progressModal, numberOfCopies, printerName, labels, labelIndex) { + if (labels.length <= labelIndex) { + updateProgressModalData(progressModal, printerName, PRINTER_STATUS_READY, PRINTER_STATUS_DONE); + return; + } + + const label = labels[labelIndex]; + + function printNextLabel() { + print(device, progressModal, numberOfCopies, printerName, labels, labelIndex + 1); + } + + function unsuccessfulPrint() { + updateProgressModalData(progressModal, printerName, PRINTER_STATUS_ERROR, PRINTER_STATUS_ERROR); + } + try { updateProgressModalData(progressModal, printerName, PRINTER_STATUS_READY, PRINTER_STATUS_PRINTING); - labels.forEach(function(label) { - for (counter = 0; counter < numberOfCopies; counter += 1) { - if (counter + 1 === parseInt(numberOfCopies, 10)) { - device.sendThenRead( - label, - () => { - updateProgressModalData(progressModal, printerName, PRINTER_STATUS_READY, PRINTER_STATUS_DONE); - }, - (error)=> { - updateProgressModalData(progressModal, printerName, PRINTER_STATUS_ERROR, PRINTER_STATUS_ERROR); - } - ); - } else { - device.send(label, ()=>{}, (error)=> { - updateProgressModalData(progressModal, printerName, PRINTER_STATUS_ERROR, PRINTER_STATUS_ERROR); - }); - } + for (let counter = 0; counter < numberOfCopies; counter += 1) { + if (counter + 1 === parseInt(numberOfCopies, 10)) { + device.sendThenRead(label, printNextLabel, unsuccessfulPrint); + } else { + device.send(label, () => {}, unsuccessfulPrint); } - }); + } } catch (error) { - updateProgressModalData(progressModal, printerName, PRINTER_STATUS_ERROR, PRINTER_STATUS_ERROR); + unsuccessfulPrint(); } } @@ -204,8 +206,12 @@ var zebraPrint = (function() { getPrinterStatus(device).then((device) => { if (device.status === I18n.t('label_printers.modal_printing_status.printer_status.ready')) { print( - device, progressModal, printData.number_of_copies, - printData.printer_name, dataZebra.responseJSON.labels + device, + progressModal, + printData.number_of_copies, + printData.printer_name, + dataZebra.responseJSON.labels, + 0, ); } else { updateProgressModalData(progressModal, printData.printer_name, PRINTER_STATUS_ERROR, PRINTER_STATUS_ERROR); From 31814b7d32a74e11665658beebe37d3f8fc467ce Mon Sep 17 00:00:00 2001 From: Gregor Lasnibat <143816208+lasniscinote@users.noreply.github.com> Date: Fri, 3 Nov 2023 10:33:40 +0100 Subject: [PATCH 13/41] Fixed multiple subsequent MSOffice files being created [SCI-9516] (#6572) --- .../content/attachments/mixins/wopi_file_modal.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/app/javascript/vue/shared/content/attachments/mixins/wopi_file_modal.js b/app/javascript/vue/shared/content/attachments/mixins/wopi_file_modal.js index a699616ab..13d93f9df 100644 --- a/app/javascript/vue/shared/content/attachments/mixins/wopi_file_modal.js +++ b/app/javascript/vue/shared/content/attachments/mixins/wopi_file_modal.js @@ -19,16 +19,17 @@ export default { } }); - $wopiModal.find('form') - .on('submit', () => { - animateSpinner(null, true); - }) + $wopiModal.find('form').on('submit', () => { + animateSpinner(null, true); + }) .on( 'ajax:success', (e, data, status) => { animateSpinner(null, false); if (status === 'success') { $wopiModal.modal('hide'); + $wopiModal.find('form').off('submit'); + $wopiModal.find('form').off('ajax:success'); window.open(data.edit_url, '_blank'); window.focus(); } else { @@ -36,7 +37,8 @@ export default { } requestCallback(e, data, status); } - ).on('ajax:error', function(ev, response) { + ) + .on('ajax:error', function(ev, response) { let element; let msg; From c1beaf0acd90a5ecf2b083475544de98363333c5 Mon Sep 17 00:00:00 2001 From: Soufiane Date: Fri, 3 Nov 2023 10:35:15 +0100 Subject: [PATCH 14/41] Save Hot table content when cell is changed [SCI-9641] (#6573) - Changing selected cell using Tab/Enter/Click/arrow keys saves table data. - Show warning message when unloading the window is data is not yet saved. --- app/javascript/vue/shared/content/table.vue | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/app/javascript/vue/shared/content/table.vue b/app/javascript/vue/shared/content/table.vue index 7bb693f82..421ceb067 100644 --- a/app/javascript/vue/shared/content/table.vue +++ b/app/javascript/vue/shared/content/table.vue @@ -125,6 +125,14 @@ return menu; } }, + created() { + window.addEventListener('beforeunload', (e) => { + if (this.editingTable) { + e.preventDefault(); + e.returnValue = ''; + } + }); + }, updated() { if(!this.updatingTableData) this.loadTableData(); }, @@ -257,6 +265,14 @@ afterUnlisten: () => { this.updatingTableData = true; setTimeout(this.updateTable, 100) // delay makes cancel button work + }, + afterSelectionEnd: () => { + if (this.editingTable == false) return; + this.updatingTableData = true; + + this.$nextTick(() => { + this.update(); + }); } }); this.$nextTick(this.tableObject.render); From 21c2cf4e5c2dd40081793f29c5ce56ab4fd5fce6 Mon Sep 17 00:00:00 2001 From: Martin Artnik Date: Fri, 3 Nov 2023 11:49:06 +0100 Subject: [PATCH 15/41] When unassigning users from task, also delete designated users [SCI-8587] --- app/jobs/user_assignments/project_group_un_assignment_job.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/jobs/user_assignments/project_group_un_assignment_job.rb b/app/jobs/user_assignments/project_group_un_assignment_job.rb index 33fe1d8e7..d3be08aee 100644 --- a/app/jobs/user_assignments/project_group_un_assignment_job.rb +++ b/app/jobs/user_assignments/project_group_un_assignment_job.rb @@ -28,6 +28,7 @@ module UserAssignments .where(user_assignments: { user: users }) .where(projects: project) # rubocop:disable Rails/SkipsModelValidations + UserMyModule.where(user: users, my_module: my_modules).delete_all # remove designated users UserAssignment.where(assignable_type: 'MyModule', assignable_id: my_modules, user: users).delete_all my_modules.update_all(updated_at: Time.current) # rubocop:enable Rails/SkipsModelValidations From e6e7805c29f185fbdc90ee4449280e4f6688a3c0 Mon Sep 17 00:00:00 2001 From: ivanscinote <138504771+ivanscinote@users.noreply.github.com> Date: Fri, 3 Nov 2023 13:19:46 +0100 Subject: [PATCH 16/41] Apply layout for Grover PDF library [SCI-9566] (#6547) --- app/assets/stylesheets/reports.scss | 1 + app/assets/stylesheets/reports_pdf.sass.scss | 1 + app/controllers/reports_controller.rb | 2 +- app/helpers/reports_helper.rb | 10 +- app/jobs/reports/pdf_job.rb | 301 ++++++++++++------ .../layouts/reports/footer_header.html.erb | 1 - app/views/reports/report.html.erb | 24 +- .../scinote_template/footer.html.erb | 4 +- .../scinote_template/header.html.erb | 48 ++- 9 files changed, 254 insertions(+), 138 deletions(-) diff --git a/app/assets/stylesheets/reports.scss b/app/assets/stylesheets/reports.scss index 5b6c58477..592aba862 100644 --- a/app/assets/stylesheets/reports.scss +++ b/app/assets/stylesheets/reports.scss @@ -233,6 +233,7 @@ label { /* GLOBAL REPORT ELEMENT STYLE */ .report-element { width: 100%; + max-width: 270mm; margin-bottom: 15px; diff --git a/app/assets/stylesheets/reports_pdf.sass.scss b/app/assets/stylesheets/reports_pdf.sass.scss index 7dc4a0091..f811678e9 100644 --- a/app/assets/stylesheets/reports_pdf.sass.scss +++ b/app/assets/stylesheets/reports_pdf.sass.scss @@ -16,6 +16,7 @@ .print-report { overflow-y: hidden !important; overflow-x: hidden !important; + padding-top: 0; } } diff --git a/app/controllers/reports_controller.rb b/app/controllers/reports_controller.rb index dafa45d00..f05261718 100644 --- a/app/controllers/reports_controller.rb +++ b/app/controllers/reports_controller.rb @@ -53,7 +53,7 @@ class ReportsController < ApplicationController report = current_team.reports.new(project: @project) end - if lookup_context.template_exists?("reports/templates/#{template}/edit") + if Rails.root.join('app', 'views', 'reports', 'templates', template, 'edit.html.erb').exist? render json: { html: render_to_string( template: "reports/templates/#{template}/edit", diff --git a/app/helpers/reports_helper.rb b/app/helpers/reports_helper.rb index f789d50d6..48a276c2f 100644 --- a/app/helpers/reports_helper.rb +++ b/app/helpers/reports_helper.rb @@ -64,12 +64,10 @@ module ReportsHelper "[#{text}]".html_safe end - def font_awesome_cdn_link_tag - stylesheet_link_tag( - 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.9.0/css/fontawesome.min.css', - 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.9.0/css/regular.min.css', - 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.9.0/css/solid.min.css' - ) + def font_awesome_links + [{ url: 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.9.0/css/fontawesome.min.css' }, + { url: 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.9.0/css/regular.min.css' }, + { url: 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.9.0/css/solid.min.css' }] end def filter_steps_for_report(steps, settings) diff --git a/app/jobs/reports/pdf_job.rb b/app/jobs/reports/pdf_job.rb index d2069d36f..86c166794 100644 --- a/app/jobs/reports/pdf_job.rb +++ b/app/jobs/reports/pdf_job.rb @@ -15,97 +15,171 @@ module Reports PREVIEW_EXTENSIONS = %w(docx pdf).freeze def perform(report_id, user_id:) - report = Report.find(report_id) - user = User.find(user_id) - file = Tempfile.new(['report', '.pdf'], binmode: true) - begin - template = - if Extends::REPORT_TEMPLATES.key?(report.settings[:template]&.to_sym) - report.settings[:template] - else - Extends::REPORT_TEMPLATES.keys.first.to_s - end - - raise StandardError, 'Report template not found!' if template.blank? - - I18n.backend.date_format = user.settings[:date_format] - ActionController::Renderer::RACK_KEY_TRANSLATION['warden'] ||= 'warden' - proxy = Warden::Proxy.new({}, Warden::Manager.new({})) - proxy.set_user(user, scope: :user, store: false) - ApplicationController.renderer.defaults[:http_host] = Rails.application.routes.default_url_options[:host] - renderer = ApplicationController.renderer.new(warden: proxy) - Rails.application.config.x.custom_sanitizer_config = build_custom_sanitizer_config - - header_html = renderer.render_to_string( - template: "reports/templates/#{template}/header", - layout: false, - locals: { report: report, user: user, logo: report_logo } - ) - footer_html = renderer.render_to_string( - template: "reports/templates/#{template}/footer", - layout: false, - locals: { report: report, user: user, logo: report_logo } - ) - report_html = renderer.render_to_string( - template: 'reports/report', - layout: false, - assigns: { settings: report.settings }, - locals: { report: report, user: user } - ) - - Grover.new( - report_html, - format: 'A4', - print_background: true, - margin: { top: '2cm', bottom: '5cm', left: '1cm', right: '2cm' }, - display_header_footer: true, - header_template: header_html, - footer_template: footer_html - ).to_pdf(file.path) - - file.rewind - - file = prepend_title_page(file, template, report, renderer) - - file = append_result_asset_previews(report, file, user) if report.settings.dig(:task, :file_results_previews) - - report.pdf_file.attach(io: file, filename: 'report.pdf') - report.pdf_ready! - - report_path = Rails.application.routes.url_helpers - .reports_path(team: report.team.id, preview_report_id: report.id, preview_type: :pdf) - notification = Notification.create( - type_of: :deliver, - title: I18n.t('projects.reports.index.generation.completed_pdf_notification_title'), - message: I18n.t('projects.reports.index.generation.completed_notification_message', - report_link: "#{escape_input(report.name)}", - team_name: escape_input(report.team.name)) - ) - notification.create_user_notification(user) - ensure - Rails.application.config.x.custom_sanitizer_config = nil - I18n.backend.date_format = nil - file.close(true) - end + @report = Report.find(report_id) + @user = User.find(user_id) + @file = Tempfile.new(['report', '.pdf'], binmode: true) + initialize_template + set_renderer_context + generate_pdf_content + process_attach_pdf_report_and_notify rescue StandardError => e - raise e if report.blank? + raise e if @report.blank? ActiveRecord::Base.no_touching do - report.pdf_error! + @report.pdf_error! end - Rails.logger.error("Couldn't generate PDF for Report with id: #{report.id}. Error:\n #{e.message}") + Rails.logger.error("Couldn't generate PDF for Report with id: #{@report.id}. Error:\n #{e.message}") raise e + ensure + Rails.application.config.x.custom_sanitizer_config = nil + I18n.backend.date_format = nil + @file.close(true) end private - def append_result_asset_previews(report, report_file, user) + def initialize_template + @template = if Extends::REPORT_TEMPLATES.key?(@report.settings[:template]&.to_sym) + @report.settings[:template] + else + Extends::REPORT_TEMPLATES.keys.first.to_s + end + + raise StandardError, 'Report template not found!' if @template.blank? + end + + def set_renderer_context + I18n.backend.date_format = @user.settings[:date_format] + ActionController::Renderer::RACK_KEY_TRANSLATION['warden'] ||= 'warden' + proxy = Warden::Proxy.new({}, Warden::Manager.new({})) + proxy.set_user(@user, scope: :user, store: false) + ApplicationController.renderer.defaults[:http_host] = Rails.application.routes.default_url_options[:host] + @renderer = ApplicationController.renderer.new(warden: proxy) + Rails.application.config.x.custom_sanitizer_config = build_custom_sanitizer_config + end + + def generate_pdf_content + @has_cover = Rails.root.join('app', 'views', 'reports', 'templates', @template, 'cover.html.erb').exist? + + render_header_footer_and_report + + gather_styles_and_scripts + + generate_pdf_file + end + + def render_header_footer_and_report + @header_html = @renderer.render_to_string( + template: "reports/templates/#{@template}/header", + layout: false, + locals: { report: @report, user: @user, logo: report_logo } + ) + @footer_html = @renderer.render_to_string( + template: "reports/templates/#{@template}/footer", + layout: false, + locals: { report: @report, user: @user, logo: report_logo } + ) + @report_html = @renderer.render_to_string( + template: 'reports/report', + layout: false, + assigns: { settings: @report.settings }, + locals: { report: @report, user: @user, has_cover: @has_cover } + ) + end + + def gather_styles_and_scripts + css_files = [ + 'application', + 'reports_pdf', + 'bootstrap_pack', + 'handsontable.formula' + ] + + javascript_files = [ + 'jquery_bundle', + 'handsontable.full', + 'lodash', + 'numeral', + 'numeric', + 'md5', + 'jstat', + 'formula', + 'parser', + 'ruleJS', + 'big.min', + 'handsontable.formula', + 'reports/content', + 'reports/template_helpers' + ] + + @style_tag_options = [] + @script_tag_options = [] + + @style_tag_options = css_files.map do |file_name| + { content: fetch_asset_content("#{file_name}.css") } + end + + @style_tag_options.concat(font_awesome_links) + + @script_tag_options = javascript_files.map do |file_name| + { content: fetch_asset_content("#{file_name}.js") } + end + end + + def generate_pdf_file + current_margin = extract_margins_from_header || + { top: '2cm', bottom: '2cm', left: '1cm', right: '1.5cm' } + + cover_pages_shift = cover_page_shift_from_template + + Grover.new( + @report_html, + format: 'A4', + print_background: true, + margin: current_margin, + display_header_footer: true, + header_template: @header_html, + footer_template: @footer_html, + style_tag_options: @style_tag_options, + script_tag_options: @script_tag_options, + page_ranges: "#{cover_pages_shift}-999999", + emulate_media: 'screen', + display_url: "#{Rails.application.config.force_ssl ? 'https' : 'http'}://" \ + "#{Rails.application.routes.default_url_options[:host]}" + ).to_pdf(@file.path) + end + + def process_attach_pdf_report_and_notify + @file.rewind + @file = prepend_title_page if @has_cover + @file = append_result_asset_previews if @report.settings.dig(:task, :file_results_previews) + + @report.pdf_file.attach(io: @file, filename: 'report.pdf') + @report.pdf_ready! + + create_notification_for_user + end + + def create_notification_for_user + report_path = Rails.application.routes.url_helpers + .reports_path(team: @report.team.id, preview_report_id: @report.id, preview_type: :pdf) + notification = Notification.create( + type_of: :deliver, + title: I18n.t('projects.reports.index.generation.completed_pdf_notification_title'), + message: I18n.t('projects.reports.index.generation.completed_notification_message', + report_link: "#{escape_input(@report.name)}", + team_name: escape_input(@report.team.name)) + ) + notification.create_user_notification(@user) + end + + def append_result_asset_previews Dir.mktmpdir do |tmp_dir| - report.report_elements.my_module.each do |my_module_element| - next unless can_read_my_module?(user, my_module_element.my_module) + @report.report_elements.my_module.each do |my_module_element| + next unless can_read_my_module?(@user, my_module_element.my_module) results = my_module_element.my_module.results - order_results_for_report(results, report.settings.dig(:task, :result_order)).each do |result| + order_results_for_report(results, @report.settings.dig(:task, :result_order)).each do |result| result.assets.each do |asset| next unless PREVIEW_EXTENSIONS.include?(asset.file.blob.filename.extension) @@ -114,13 +188,13 @@ module Reports asset.reload end asset.file_pdf_preview.open(tmpdir: tmp_dir) do |file| - report_file = merge_pdf_files(file, report_file) + @file = merge_pdf_files(file, @file) end end end end end - report_file + @file end def merge_pdf_files(file, report_file) @@ -149,14 +223,10 @@ module Reports merged_file end - def prepend_title_page(file, template, report, renderer) - unless File.exist?(Rails.root.join('app', 'views', 'reports', 'templates', template, 'cover')) - return file - end - + def prepend_title_page total_pages = 0 - IO.popen(['pdfinfo', file.path], 'r+') do |f| + IO.popen(['pdfinfo', @file.path], 'r+') do |f| total_pages = f.read.split("\n") .find { |i| i.split(':')[0] == 'Pages' } .gsub(/[^0-9]/, '') @@ -165,27 +235,33 @@ module Reports title_page = Tempfile.new(['title_page', '.pdf'], binmode: true) merged_file = Tempfile.new(['report', '.pdf'], binmode: true) - title_page_html = renderer.render_to_string( - template: "reports/templates/#{template}/cover", + title_page_html = @renderer.render_to_string( + template: "reports/templates/#{@template}/cover", layout: false, formats: :html, - locals: { report: report, total_pages: total_pages.to_i, logo: report_logo } + locals: { report: @report, total_pages: total_pages.to_i, logo: report_logo } ) Grover.new( title_page_html, - format: 'A4' + format: 'A4', + style_tag_options: @style_tag_options, + script_tag_options: @script_tag_options, + emulate_media: 'screen', + print_background: true, + display_url: "#{Rails.application.config.force_ssl ? 'https' : 'http'}://" \ + "#{Rails.application.routes.default_url_options[:host]}" ).to_pdf(title_page.path) title_page.rewind success = system( - 'pdfunite', title_page.path, file.path, merged_file.path + 'pdfunite', title_page.path, @file.path, merged_file.path ) raise StandardError, 'There was an error merging report and title page' unless success && File.file?(merged_file) - file.close(true) + @file.close(true) title_page.close(true) merged_file @@ -226,5 +302,44 @@ module Reports report_link: "#{escape_input(report.name)}", team_name: escape_input(report.team.name)) end + + def fetch_asset_content(asset_name) + Rails.application + .assets_manifest + .find_sources(asset_name) + .first + .to_s + .force_encoding(Encoding::UTF_8) + end + + def extract_margins_from_header + header_file_path = Rails.root.join('app', 'views', 'reports', 'templates', @template, 'header.html.erb') + return nil unless header_file_path.exist? + + content = File.read(header_file_path) + + margin_comment = content.match(//) + return nil unless margin_comment + + margins = {} + margin_comment[1].split(',').each do |margin_pair| + key, value = margin_pair.split(':').map(&:strip) + margins[key.to_sym] = value + end + + margins + end + + def cover_page_shift_from_template + cover_file_path = Rails.root.join('app', 'views', 'reports', 'templates', @template, 'cover.html.erb') + return 1 unless cover_file_path.exist? + + content = File.read(cover_file_path) + + cover_pages_comment = content.match(//) + return 2 unless cover_pages_comment + + cover_pages_comment[1].to_i + 1 + end end end diff --git a/app/views/layouts/reports/footer_header.html.erb b/app/views/layouts/reports/footer_header.html.erb index dc172d968..31ef3d159 100644 --- a/app/views/layouts/reports/footer_header.html.erb +++ b/app/views/layouts/reports/footer_header.html.erb @@ -5,6 +5,5 @@ <%= yield %> - <%= javascript_include_tag wicked_pdf_asset_base64("reports/template_helpers") %> diff --git a/app/views/reports/report.html.erb b/app/views/reports/report.html.erb index 997e976f3..742d6e7ee 100644 --- a/app/views/reports/report.html.erb +++ b/app/views/reports/report.html.erb @@ -1,32 +1,16 @@ - <%= wicked_pdf_stylesheet_link_tag "application" %> - <%= wicked_pdf_stylesheet_link_tag "reports_pdf" %> - <%= wicked_pdf_stylesheet_link_tag "bootstrap_pack" %> - <%= font_awesome_cdn_link_tag %> - <%= wicked_pdf_javascript_include_tag "jquery_bundle" %> - <%= wicked_pdf_javascript_include_tag "handsontable.full" %> - - <%= wicked_pdf_javascript_include_tag "lodash" %> - <%= wicked_pdf_javascript_include_tag "numeral" %> - <%= wicked_pdf_javascript_include_tag "numeric" %> - <%= wicked_pdf_javascript_include_tag "md5" %> - <%= wicked_pdf_javascript_include_tag "jstat" %> - <%= wicked_pdf_javascript_include_tag "formula" %> - <%= wicked_pdf_javascript_include_tag "parser" %> - <%= wicked_pdf_javascript_include_tag "ruleJS" %> - <%= wicked_pdf_javascript_include_tag "big.min" %> - <%= wicked_pdf_javascript_include_tag "handsontable.formula" %> - <%= wicked_pdf_stylesheet_link_tag "handsontable.formula" %> + + <% if has_cover %> +
+ <% end %> - - <%= wicked_pdf_javascript_include_tag "reports/content" %> diff --git a/app/views/reports/templates/scinote_template/footer.html.erb b/app/views/reports/templates/scinote_template/footer.html.erb index fa89161dd..c04b93659 100644 --- a/app/views/reports/templates/scinote_template/footer.html.erb +++ b/app/views/reports/templates/scinote_template/footer.html.erb @@ -1,8 +1,10 @@ diff --git a/app/views/reports/templates/scinote_template/header.html.erb b/app/views/reports/templates/scinote_template/header.html.erb index 4757469e1..1a7cebde0 100644 --- a/app/views/reports/templates/scinote_template/header.html.erb +++ b/app/views/reports/templates/scinote_template/header.html.erb @@ -1,24 +1,40 @@ + +
-
+
{{ i18n.t('nav.notifications.today') }}
- -
+ +
{{ i18n.t('nav.notifications.older') }}
- +
- +
@@ -47,12 +49,17 @@ export default { }, mounted() { let container = this.$refs.scrollContainer.$el + document.body.style.overflow = 'hidden' + container.addEventListener('ps-scroll-y', (e) => { if (e.target.scrollTop + e.target.clientHeight >= e.target.scrollHeight - 20) { this.loadNotifications(); } }) }, + destroyed() { + document.body.style.overflow = 'scroll' + }, computed: { filteredNotifications() { this.loadNotifications(); From fcefb64666df8469ad10d3e7deccd5d9e652b929 Mon Sep 17 00:00:00 2001 From: Martin Artnik Date: Fri, 10 Nov 2023 14:33:50 +0100 Subject: [PATCH 32/41] Allow data-turbolinks attribute in sanitization [SCI-9683] --- config/initializers/constants.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/config/initializers/constants.rb b/config/initializers/constants.rb index dc55a76a6..27b0721f4 100644 --- a/config/initializers/constants.rb +++ b/config/initializers/constants.rb @@ -328,6 +328,7 @@ class Constants config[:attributes][:all] << 'contenteditable' config[:attributes]['img'] << 'data-mce-token' config[:attributes]['img'] << 'data-source-type' + config[:attributes]['a'] << 'data-turbolinks' config[:protocols]['img']['src'] << 'data' INPUT_SANITIZE_CONFIG = Sanitize::Config.freeze_config(config) From 67ec9b63f3d73b66a47526b4d5aa11f5e91bdc58 Mon Sep 17 00:00:00 2001 From: wandji Date: Fri, 10 Nov 2023 14:55:43 +0100 Subject: [PATCH 33/41] Fix overlapping filename in inventory table [SCI-9199] (#6579) --- app/assets/stylesheets/repositories.scss | 1 - 1 file changed, 1 deletion(-) diff --git a/app/assets/stylesheets/repositories.scss b/app/assets/stylesheets/repositories.scss index 8ea425b8a..d6e3a79f1 100644 --- a/app/assets/stylesheets/repositories.scss +++ b/app/assets/stylesheets/repositories.scss @@ -226,7 +226,6 @@ .file-preview-link { display: inline-block; - min-width: 140px; padding-left: 5px; } } From cc5bbcde2fd96e9dd2759bc44284da33551629fa Mon Sep 17 00:00:00 2001 From: Martin Artnik Date: Fri, 10 Nov 2023 15:44:27 +0100 Subject: [PATCH 34/41] Fix results search [SCI-9596] --- app/models/result.rb | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/app/models/result.rb b/app/models/result.rb index 564f1f8d3..5474706f1 100644 --- a/app/models/result.rb +++ b/app/models/result.rb @@ -43,9 +43,16 @@ class Result < ApplicationRecord new_query = Result .distinct - .left_outer_joins(:result_texts) + .left_outer_joins(:result_texts, result_tables: :table) .where(results: { my_module_id: module_ids }) - .where_attributes_like(['results.name', 'result_texts.text'], query, options) + .where_attributes_like( + [ + 'results.name', + 'result_texts.name', + 'result_texts.text', + 'tables.name' + ], query, options + ) new_query = new_query.active unless include_archived From eea386cb2031137a9b8c81e266913ed1ce924dae Mon Sep 17 00:00:00 2001 From: sboursen-scinote Date: Fri, 10 Nov 2023 17:11:39 +0100 Subject: [PATCH 35/41] Disable autocomplete for input-with-history [SCI-9661] --- app/javascript/vue/shared/input_with_history.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/app/javascript/vue/shared/input_with_history.vue b/app/javascript/vue/shared/input_with_history.vue index 8ec4b481b..d770cd6c4 100644 --- a/app/javascript/vue/shared/input_with_history.vue +++ b/app/javascript/vue/shared/input_with_history.vue @@ -7,6 +7,7 @@ :placeholder="placeholder" :id="id" type="text" + autocomplete="off" class="sci-input-field" @focus="showHistory" @blur="hideHistory" From 2580e1e1eb74ba276dc30ab3b854b5946baedf7a Mon Sep 17 00:00:00 2001 From: ivanscinote <138504771+ivanscinote@users.noreply.github.com> Date: Tue, 14 Nov 2023 09:48:29 +0100 Subject: [PATCH 36/41] Fix display_url for Grover gem and add html format for r epository_rows show [SCI-9566] (#6632) * Apply layout for Grover PDF library [SCI-9566] * Fix display_url for Grover gem and add html format for repository_rows show [SCI-9566] --- app/controllers/repository_rows_controller.rb | 46 +++++++++++-------- app/jobs/reports/pdf_job.rb | 6 +-- 2 files changed, 29 insertions(+), 23 deletions(-) diff --git a/app/controllers/repository_rows_controller.rb b/app/controllers/repository_rows_controller.rb index df30b23fe..a73c96396 100644 --- a/app/controllers/repository_rows_controller.rb +++ b/app/controllers/repository_rows_controller.rb @@ -46,27 +46,35 @@ class RepositoryRowsController < ApplicationController @repository_row = @repository.repository_rows.find_by(id: params[:id]) return render_404 unless @repository_row - @my_module = if params[:my_module_id].present? - MyModule.repository_row_assignable_by_user(current_user).find_by(id: params[:my_module_id]) - end - return render_403 if @my_module && !can_read_my_module?(@my_module) + respond_to do |format| + format.html do + redirect_to repository_path(@repository) + end - if @my_module - @my_module_assign_error = if !can_assign_my_module_repository_rows?(@my_module) - I18n.t('repository_row.modal_info.assign_to_task_error.no_access') - elsif @repository_row.my_modules.where(id: @my_module.id).any? - I18n.t('repository_row.modal_info.assign_to_task_error.already_assigned') - end + format.json do + @my_module = if params[:my_module_id].present? + MyModule.repository_row_assignable_by_user(current_user).find_by(id: params[:my_module_id]) + end + return render_403 if @my_module && !can_read_my_module?(@my_module) + + if @my_module + @my_module_assign_error = if !can_assign_my_module_repository_rows?(@my_module) + I18n.t('repository_row.modal_info.assign_to_task_error.no_access') + elsif @repository_row.my_modules.where(id: @my_module.id).any? + I18n.t('repository_row.modal_info.assign_to_task_error.already_assigned') + end + end + + @assigned_modules = @repository_row.my_modules + .joins(experiment: :project) + .joins(:my_module_repository_rows) + .select('my_module_repository_rows.created_at, my_modules.*') + .order('my_module_repository_rows.created_at': :desc) + .distinct + @viewable_modules = @assigned_modules.viewable_by_user(current_user, current_user.teams) + @reminders_present = @repository_row.repository_cells.with_active_reminder(@current_user).any? + end end - - @assigned_modules = @repository_row.my_modules - .joins(experiment: :project) - .joins(:my_module_repository_rows) - .select('my_module_repository_rows.created_at, my_modules.*') - .order('my_module_repository_rows.created_at': :desc) - .distinct - @viewable_modules = @assigned_modules.viewable_by_user(current_user, current_user.teams) - @reminders_present = @repository_row.repository_cells.with_active_reminder(@current_user).any? end def create diff --git a/app/jobs/reports/pdf_job.rb b/app/jobs/reports/pdf_job.rb index 86c166794..e14c83a2b 100644 --- a/app/jobs/reports/pdf_job.rb +++ b/app/jobs/reports/pdf_job.rb @@ -144,8 +144,7 @@ module Reports script_tag_options: @script_tag_options, page_ranges: "#{cover_pages_shift}-999999", emulate_media: 'screen', - display_url: "#{Rails.application.config.force_ssl ? 'https' : 'http'}://" \ - "#{Rails.application.routes.default_url_options[:host]}" + display_url: Rails.application.routes.default_url_options[:host] ).to_pdf(@file.path) end @@ -249,8 +248,7 @@ module Reports script_tag_options: @script_tag_options, emulate_media: 'screen', print_background: true, - display_url: "#{Rails.application.config.force_ssl ? 'https' : 'http'}://" \ - "#{Rails.application.routes.default_url_options[:host]}" + display_url: Rails.application.routes.default_url_options[:host] ).to_pdf(title_page.path) title_page.rewind From 83eb4eeb1674b03a6965c7a49a080f653632dd04 Mon Sep 17 00:00:00 2001 From: Martin Artnik Date: Tue, 14 Nov 2023 11:54:50 +0100 Subject: [PATCH 37/41] Make task description TinyMCE init in line with the vue one [SCI-9682] --- app/assets/javascripts/my_modules/protocols.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/assets/javascripts/my_modules/protocols.js b/app/assets/javascripts/my_modules/protocols.js index b294dec22..97f9d581a 100644 --- a/app/assets/javascripts/my_modules/protocols.js +++ b/app/assets/javascripts/my_modules/protocols.js @@ -12,7 +12,12 @@ var selectedRow = null; function initEditMyModuleDescription() { var viewObject = $('#my_module_description_view'); viewObject.on('click', function(e) { - if ($(e.target).hasClass('record-info-link') || $(e.target).parent().hasClass('record-info-link')) return; + if (e && $(e.target).prop("tagName") === 'A') return; + if (e && $(e.target).hasClass('atwho-user-popover')) return; + if (e && $(e.target).hasClass('record-info-link')) return; + if (e && $(e.target).parent().hasClass('record-info-link')) return; + if (e && $(e.target).parent().hasClass('atwho-inserted')) return; + TinyMCE.init( '#my_module_description_textarea', { From 4c82e037a27225231c4cf029de10cecd407a9357 Mon Sep 17 00:00:00 2001 From: Oleksii Kriuchykhin Date: Tue, 14 Nov 2023 16:38:51 +0100 Subject: [PATCH 38/41] Switch to install of yarn from system packages --- Dockerfile | 10 ++++++---- Dockerfile.production | 15 +++++++-------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/Dockerfile b/Dockerfile index 82c960073..4dc87507a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,7 +8,6 @@ RUN apt-get update -qq && \ libjemalloc2 \ libssl-dev \ nodejs \ - npm \ postgresql-client \ default-jre-headless \ poppler-utils \ @@ -21,12 +20,15 @@ RUN apt-get update -qq && \ fonts-wqy-microhei \ fonts-wqy-zenhei \ libfile-mimeinfo-perl \ - chromium-driver && \ - npm install -g yarn && \ - yarn add puppeteer@npm:puppeteer-core && \ + chromium-driver \ + yarnpkg && \ ln -s /usr/lib/x86_64-linux-gnu/libvips.so.42 /usr/lib/x86_64-linux-gnu/libvips.so && \ rm -rf /var/lib/apt/lists/* +ENV PATH=/usr/share/nodejs/yarn/bin:$PATH + +RUN yarn add puppeteer@npm:puppeteer-core + ENV BUNDLE_PATH /usr/local/bundle/ # create app directory diff --git a/Dockerfile.production b/Dockerfile.production index 8384a8c79..b5a7a99fb 100644 --- a/Dockerfile.production +++ b/Dockerfile.production @@ -9,14 +9,13 @@ RUN \ apt-get install -y --no-install-recommends \ libssl-dev \ nodejs \ - npm \ - postgresql-client && \ - npm install -g yarn + yarnpkg \ + postgresql-client ENV APP_HOME /usr/src/app ENV RAILS_ENV=production ENV GEM_HOME=$APP_HOME/vendor/bundle/ruby/3.2.0 -ENV PATH=$GEM_HOME/bin:$PATH +ENV PATH=$GEM_HOME/bin:/usr/share/nodejs/yarn/bin:$PATH ENV BUNDLE_APP_CONFIG=.bundle ENV BUNDLE_BUILD__SASSC=--disable-march-tune-native @@ -69,7 +68,7 @@ RUN \ libjemalloc2 \ groff-base \ postgresql-client \ - npm \ + nodejs \ awscli \ netcat-openbsd \ poppler-utils \ @@ -77,9 +76,9 @@ RUN \ libvips42 \ graphviz \ chromium \ - libfile-mimeinfo-perl && \ - npm install -g yarn && \ - yarn add puppeteer@npm:puppeteer-core && \ + libfile-mimeinfo-perl \ + yarnpkg && \ + /usr/share/nodejs/yarn/bin/yarn add puppeteer@npm:puppeteer-core && \ apt-get install -y libreoffice && \ ln -s /usr/lib/x86_64-linux-gnu/libvips.so.42 /usr/lib/x86_64-linux-gnu/libvips.so From 3ff7e691090c9cd0e86082a4fffaaba5ffe22aa4 Mon Sep 17 00:00:00 2001 From: Martin Artnik Date: Tue, 14 Nov 2023 16:57:57 +0100 Subject: [PATCH 39/41] Fix result settings for reports [SCI-9693] --- .../elements/_my_module_element.html.erb | 51 ++++++++++--------- 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/app/views/reports/elements/_my_module_element.html.erb b/app/views/reports/elements/_my_module_element.html.erb index 5d91b2d0a..e3504a250 100644 --- a/app/views/reports/elements/_my_module_element.html.erb +++ b/app/views/reports/elements/_my_module_element.html.erb @@ -71,34 +71,37 @@
<%= t('projects.reports.elements.module.results') %>

- <% end %> - <% order_results_for_report(my_module.results, @settings.dig('task', 'result_order')).each do |result| %> -
- <%= result.name.presence || I18n.t('projects.reports.unnamed') %> - <% if result.archived? %> - <%= t('search.index.archived') %> - <% end %> -
+ <% order_results_for_report(my_module.results, @settings.dig('task', 'result_order')).each do |result| %> +
+ <%= result.name.presence || I18n.t('projects.reports.unnamed') %> + <% if result.archived? %> + <%= t('search.index.archived') %> + <% end %> +
- <% result.result_orderable_elements.each do |element| %> - <% if element.orderable_type == "ResultTable" %> - <%= render partial: 'reports/elements/my_module_result_table_element', locals: { result: result, export_all: export_all, element: element} %> - <% elsif element.orderable_type == "ResultText" %> - <%= render partial: 'reports/elements/my_module_result_text_element', locals: { result: result, export_all: export_all, element: element } %> + <% result.result_orderable_elements.each do |element| %> + <% if element.orderable_type == "ResultTable" && @settings.dig('task', 'table_results') %> + <%= render partial: 'reports/elements/my_module_result_table_element', locals: { result: result, export_all: export_all, element: element} %> + <% elsif element.orderable_type == "ResultText" && @settings.dig('task', 'text_results') %> + <%= render partial: 'reports/elements/my_module_result_text_element', locals: { result: result, export_all: export_all, element: element } %> + <% end %> <% end %> + + <% if @settings.dig('task', 'file_results') %> + <%= render partial: 'reports/elements/my_module_result_asset_element', locals: { result: result, report: report, export_all: export_all } %> + <% end %> + +
+ <%= t('projects.reports.elements.result.user_time', user: result.user.full_name, timestamp: l(result.created_at, format: :full)) %> +
+ +
+ <% if @settings.dig('task', 'result_comments') %> + <%= render partial: 'reports/elements/result_comments_element', locals: { result: result } %> + <% end %> +
<% end %> - - <%= render partial: 'reports/elements/my_module_result_asset_element', locals: { result: result, report: report, export_all: export_all } %> -
- <%= t('projects.reports.elements.result.user_time', user: result.user.full_name, timestamp: l(result.created_at, format: :full)) %> -
- -
- <% if @settings.dig('task', 'result_comments') %> - <%= render partial: 'reports/elements/result_comments_element', locals: { result: result } %> - <% end %> -
<% end %>

From 9db6fb2ef53bec38642cf8af312ba4ceafaaa899 Mon Sep 17 00:00:00 2001 From: Martin Artnik <85488244+artoscinote@users.noreply.github.com> Date: Wed, 15 Nov 2023 09:23:38 +0100 Subject: [PATCH 40/41] Revert "Fix result settings for reports [SCI-9693]" --- .../elements/_my_module_element.html.erb | 49 +++++++++---------- 1 file changed, 23 insertions(+), 26 deletions(-) diff --git a/app/views/reports/elements/_my_module_element.html.erb b/app/views/reports/elements/_my_module_element.html.erb index e3504a250..5d91b2d0a 100644 --- a/app/views/reports/elements/_my_module_element.html.erb +++ b/app/views/reports/elements/_my_module_element.html.erb @@ -71,37 +71,34 @@
<%= t('projects.reports.elements.module.results') %>

+ <% end %> - <% order_results_for_report(my_module.results, @settings.dig('task', 'result_order')).each do |result| %> -
- <%= result.name.presence || I18n.t('projects.reports.unnamed') %> - <% if result.archived? %> - <%= t('search.index.archived') %> - <% end %> -
- - <% result.result_orderable_elements.each do |element| %> - <% if element.orderable_type == "ResultTable" && @settings.dig('task', 'table_results') %> - <%= render partial: 'reports/elements/my_module_result_table_element', locals: { result: result, export_all: export_all, element: element} %> - <% elsif element.orderable_type == "ResultText" && @settings.dig('task', 'text_results') %> - <%= render partial: 'reports/elements/my_module_result_text_element', locals: { result: result, export_all: export_all, element: element } %> - <% end %> + <% order_results_for_report(my_module.results, @settings.dig('task', 'result_order')).each do |result| %> +
+ <%= result.name.presence || I18n.t('projects.reports.unnamed') %> + <% if result.archived? %> + <%= t('search.index.archived') %> <% end %> +
- <% if @settings.dig('task', 'file_results') %> - <%= render partial: 'reports/elements/my_module_result_asset_element', locals: { result: result, report: report, export_all: export_all } %> + <% result.result_orderable_elements.each do |element| %> + <% if element.orderable_type == "ResultTable" %> + <%= render partial: 'reports/elements/my_module_result_table_element', locals: { result: result, export_all: export_all, element: element} %> + <% elsif element.orderable_type == "ResultText" %> + <%= render partial: 'reports/elements/my_module_result_text_element', locals: { result: result, export_all: export_all, element: element } %> <% end %> - -
- <%= t('projects.reports.elements.result.user_time', user: result.user.full_name, timestamp: l(result.created_at, format: :full)) %> -
- -
- <% if @settings.dig('task', 'result_comments') %> - <%= render partial: 'reports/elements/result_comments_element', locals: { result: result } %> - <% end %> -
<% end %> + + <%= render partial: 'reports/elements/my_module_result_asset_element', locals: { result: result, report: report, export_all: export_all } %> +
+ <%= t('projects.reports.elements.result.user_time', user: result.user.full_name, timestamp: l(result.created_at, format: :full)) %> +
+ +
+ <% if @settings.dig('task', 'result_comments') %> + <%= render partial: 'reports/elements/result_comments_element', locals: { result: result } %> + <% end %> +
<% end %>
From d16b48b1cfbd82e57a809762a8948dc478f9afe5 Mon Sep 17 00:00:00 2001 From: Martin Artnik <85488244+artoscinote@users.noreply.github.com> Date: Wed, 15 Nov 2023 10:27:56 +0100 Subject: [PATCH 41/41] Bump version to 1.29.2 --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 0bb3ab4d7..412114252 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.29.1.1 +1.29.2