Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

For 3.11.0 #661

Merged
merged 57 commits into from
Nov 17, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
04fdfab
Implement annotation editor on view screen
NAL-DungDT Jun 18, 2023
ce48249
Replace with sanitized file input
CGDogan Jun 21, 2023
d1125b0
Validate on message content processing not on header
CGDogan Jun 21, 2023
48e9166
Likewise for batch loader
CGDogan Jun 22, 2023
809f2b3
Add annotation assistant UI
NAL-DungDT Jun 26, 2023
4999d3b
Merge branch 'feature/add-editable-polygon' into gsoc/ml_assistant
NAL-DungDT Jun 26, 2023
07a027d
Merge branch 'feature/annotation-assistants' into gsoc/ml_assistant
NAL-DungDT Jun 26, 2023
d06742f
don't want submodules here
birm Jun 27, 2023
069cb9e
wait for pathdb code in redir.js
birm Jun 29, 2023
2c928ef
add ending paren
birm Jun 29, 2023
72affc7
Add machine learning assistant draw mode
NAL-DungDT Jul 8, 2023
ca997d0
Update machine learning draw assistant
NAL-DungDT Jul 12, 2023
c9585a4
Remove console log
NAL-DungDT Jul 12, 2023
e1cd0a7
optimize machine learning assistant and add multi annotation function
NAL-DungDT Jul 23, 2023
e1f760e
Fix add add modal modal and modal info load method
NAL-DungDT Jul 24, 2023
df69428
Fix asynchornous in endNewFeature function
NAL-DungDT Jul 24, 2023
991d169
fix undo functions with annotation assistant
NAL-DungDT Jul 24, 2023
5bf9206
Fix disable assistant mode when assistant menu close
NAL-DungDT Jul 24, 2023
ddeaa54
Fix multiple points annotation points
NAL-DungDT Jul 24, 2023
0624c55
DCM type: batchloader.js
CGDogan Jul 26, 2023
dd400df
DCM type: batchloader.html
CGDogan Jul 26, 2023
c9d201c
DCM type: table.js
CGDogan Jul 26, 2023
84c2f92
don't wait for thumbnail to return before allowing post
birm Aug 1, 2023
afb7d87
Merge pull request #647 from CGDogan/patch-3
birm Aug 2, 2023
ef2f409
Change UI of annotation assistant UI and openning method
NAL-DungDT Aug 4, 2023
7125099
Intergrate annotation assistant into brush preset label
NAL-DungDT Aug 4, 2023
cdeac8c
optimize find contour algorithm
NAL-DungDT Aug 9, 2023
78a679d
Merge pull request #640 from CGDogan/patch-1
birm Aug 10, 2023
b46a095
fix non array and inaccurate grids return from ml assistant
NAL-DungDT Aug 13, 2023
94dbb20
change edit mouse up handler of annotation edit tool
NAL-DungDT Aug 14, 2023
44a7665
Remove and add annotation point for annotation edit function
NAL-DungDT Aug 14, 2023
4d27c00
Disable undo when open mlassistant on presetlabel
NAL-DungDT Aug 17, 2023
91a37bf
clean console.log
NAL-DungDT Aug 17, 2023
bf91174
Fix preset label saving multiple annotation bugs
NAL-DungDT Aug 17, 2023
b5f0edf
Refer to iipsrv rather than OpenSlide
CGDogan Aug 19, 2023
3ac47b1
Merge pull request #651 from CGDogan/CGDogan-patch-1
birm Aug 21, 2023
fcbedc7
BioFormats files
CGDogan Aug 27, 2023
7b89e37
BioFormats extensions batchloader.js
CGDogan Aug 27, 2023
1799c88
bioformats extensions batchloader.html
CGDogan Aug 27, 2023
ab43e1f
Merge pull request #653 from CGDogan/patch-4
birm Aug 27, 2023
b711883
images in subdirs
CGDogan Sep 6, 2023
87fb0a5
Merge pull request #655 from CGDogan/subdir
birm Sep 11, 2023
737173f
DICOM button
CGDogan Sep 18, 2023
c141349
Merge pull request #656 from CGDogan/dicom
birm Sep 18, 2023
7849cd4
lintfix code, clean style
birm Oct 10, 2023
f4a6366
fix pkgs
birm Oct 10, 2023
50c9ac9
update dependent actions
birm Oct 10, 2023
cdf716b
cleanup unused files
birm Oct 10, 2023
3a7f5f2
Merge pull request #643 from BryanGsep/gsoc/ml_assistant
birm Oct 10, 2023
c9e6e5f
Merge branch 'develop' into gsoc/ml_assistant
birm Oct 10, 2023
cec0dee
style changes to assistant
birm Oct 10, 2023
78157bb
some guidance to ml model upload
birm Oct 10, 2023
86f977f
hide the smart pen icon
nanli-emory Nov 8, 2023
d31295c
Merge pull request #658 from camicroscope/gsoc/ml_assistant
nanli-emory Nov 8, 2023
4f1dd57
bump year to 2023
birm Nov 9, 2023
1262a6e
Update HISTORY.md for 3.11.0
birm Nov 17, 2023
a46d702
Index doesn't work, remove it.
birm Nov 17, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,4 @@ apps/landing/jquery.min.js
apps/landing/jquery.scrollex.min.js
apps/segment/opencv.js
common/bootstrap-tour-standalone/bootstrap-tour-standalone.min.js
apps/viewer/turf.min.js
7 changes: 3 additions & 4 deletions .github/workflows/node.js.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,15 @@ jobs:

strategy:
matrix:
node-version: [14.x, 16.x, 18.x]
node-version: [16.x, 18.x]
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/

steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- run: npm ci
- run: npm install
- run: npm install jsdom
- run: npm install -g http-server
Expand Down
38 changes: 0 additions & 38 deletions .travis.yml

This file was deleted.

1 change: 0 additions & 1 deletion Caracal
Submodule Caracal deleted from 945e44
1 change: 0 additions & 1 deletion Distro
Submodule Distro deleted from 4f107a
27 changes: 6 additions & 21 deletions HISTORY.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,29 +5,14 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).


## Index
* **Version 3**
* [3.10.x](#camicroscope-3100)
* [3.9.x](#camicroscope-390)
* [3.8.x](#camicroscope-380)
* [3.7.x](#camicroscope-377)
* [3.7.x](#camicroscope-375)
* [3.6.x](#camicroscope-362)
* [3.5.x](#camicroscope-3510)
* [3.4.x](#camicroscope-343)
* [3.3.x](#camicroscope-334)
* [3.2.x](#camicroscope-322)
* [3.1.x](#camicroscope-311)
* [3.0.x](#camicroscope-300)
* **Version 2**
* [2.0.x](#camicroscope-201)
* **Version 1**
* [1.0.x](#camicroscope-10)

### caMicroscope [Unreleased](https://github.com/camicroscope/camicroscope/compare/v3.10.2...camicroscope:develop)
### caMicroscope [Unreleased](https://github.com/camicroscope/camicroscope/compare/v3.11.0...camicroscope:develop)
###### TBD

### caMicroscope [3.11.0](https://github.com/camicroscope/camicroscope/compare/v3.10.2...camicroscope:v3.11.0)
###### 2023-11-17
* Dicom and Bioformats Intergration (#647, #653, #655)
* Improved Machine Learning Toolkit (#658)

### caMicroscope [3.10.2](https://github.com/camicroscope/camicroscope/compare/v3.10.1...camicroscope:v3.10.2)
###### 2023-06-16
* point to point
Expand Down
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
BSD 3-Clause License

Copyright (c) 2012-2021, caMicroscope
Copyright (c) 2012-2023, caMicroscope
All rights reserved.

Redistribution and use in source and binary forms, with or without
Expand Down
25 changes: 20 additions & 5 deletions apps/batchloader/batchLoader.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ let finishUrl = '../../loader/upload/finish/';
let checkUrl = '../../loader/data/one/';
let chunkSize = 5*1024*1024;
let finishUploadSuccess = false;
const allowedExtensions = ['svs', 'tif', 'tiff', 'vms', 'vmu', 'ndpi', 'scn', 'mrxs', 'bif', 'svslide'];
const allowedExtensions = ["svs", "tif", "tiff", "vms", "vmu", "ndpi", "scn", "mrxs", "bif", "svslide", "jpg", "png", "dcm", "v3draw", "ano", "cfg", "csv", "htm", "rec", "tim", "zpo", "dic", "dicom", "jp2", "j2ki", "j2kr", "raw", "ima", "cr2", "crw", "thm", "wav", "dv", "r3d", "r3d_d3d", "log", "mvd2", "aisf", "aiix", "dat", "atsf", "tf2", "tf8", "btf", "pbm", "pgm", "ppm", "xdce", "xml", "xlog", "apl", "tnb", "mtb", "im", "mea", "res", "aim", "arf", "psd", "al3d", "gel", "am", "amiramesh", "grey", "hx", "labels", "img", "hdr", "sif", "afi", "exp", "h5", "1sc", "pic", "ims", "ch5", "vsi", "ets", "pnl", "htd", "c01", "dib", "cxd", "v", "eps", "epsi", "ps", "flex", "xlef", "fits", "fts", "dm2", "dm3", "dm4", "naf", "his", "ndpis", "txt", "i2i", "hed", "mod", "inr", "ipl", "ipm", "fff", "ics", "ids", "seq", "ips", "ipw", "frm", "par", "j2k", "jpf", "jpk", "jpx", "klb", "xv", "bip", "sxm", "fli", "lim", "msr", "lif", "lof", "lei", "l2d", "mnc", "stk", "nd", "scan", "vff", "mrw", "stp", "mng", "nii", "nrrd", "nhdr", "nd2", "nef", "obf", "omp2info", "oib", "oif", "pty", "lut", "oir", "sld", "spl", "liff", "top", "pcoraw", "pcx", "pict", "pct", "df3", "im3", "qptiff", "bin", "env", "spe", "afm", "sm2", "sm3", "spc", "set", "sdt", "spi", "xqd", "xqf", "db", "vws", "pst", "inf", "tfr", "ffr", "zfr", "zfp", "2fl", "tga", "pr3", "dti", "fdf", "hdf", "xys", "html", "acff", "wat", "bmp", "wpi", "czi", "lms", "lsm", "mdb", "zvi", "mrc", "st", "ali", "map", "mrcs", "jpeg", "gif", "ptif"];

// call on document ready
$(document).ready(function() {
Expand All @@ -21,8 +21,12 @@ $(document).ready(function() {
store.findSlide().then((response) => {
for (i=0; i<response.length; i++) {
existingSlides.push(response[i].name);
existingFiles.push((response[i].location).substring((response[i].location).lastIndexOf('/')+1,
if (response[i].filepath) {
existingFiles.push(response[i].filepath);
} else {
existingFiles.push((response[i].location).substring((response[i].location).lastIndexOf('/')+1,
(response[i].location).length));
}
}
}).catch((error) => {
console.log(error);
Expand Down Expand Up @@ -198,7 +202,7 @@ function checkNames() {
}
numErrors++;
} else if (!allowedExtensions.includes(fileNames[i].substring(fileNames[i].lastIndexOf('.')+1,
fileNames[i].length))) {
fileNames[i].length).toLowerCase())) {
let errorIcon = `<i id='fileNameError' class="fas fa-exclamation-circle text-danger" title='File extension not allowed'></i> &nbsp;&nbsp;`;
if ($('.fileNameEdit:eq('+i+')').prev().prev('#fileNameError').length == 0) {
$('.fileNameEdit:eq('+i+')').parent().prepend(errorIcon);
Expand Down Expand Up @@ -346,8 +350,11 @@ function finishBatch() {
}

async function handleUpload(selectedFile, filename, i) {
const token = await startUpload(filename);
const uploadMetadata = await startUpload(filename);
const token = uploadMetadata.upload_token;
tokens.push(token);
fileNames[i] = uploadMetadata.filename;
$('tr:eq('+(i+1)+') td:nth-child(2) span')[0].innerText = uploadMetadata.filename;
let j = 0;
$('.token').each(function() {
$(this).html(tokens[j++]);
Expand All @@ -371,7 +378,7 @@ async function startUpload(filename) {
}}).then((x)=>x.json());
try {
const a = await token;
return a['upload_token'];
return { upload_token: a['upload_token'], filename: a['filename'] };
} catch (e) {
console.log(e);
}
Expand All @@ -395,6 +402,14 @@ function finishUpload(token, filename, i) {
}});
regReq.then((x)=>x.json()).then((a)=>{
// changeStatus('UPLOAD | Finished', a, reset); reset = false;
if (a.filepath) {
const newName = a.filepath.slice(a.filepath.lastIndexOf('/')+1);
fileNames[i] = newName;
$('tr:eq('+(i+1)+') td:nth-child(2) span')[0].innerText = newName;
}
if (a.relpath) {
fileNames[i] = a.relpath;
}
if (typeof a === 'object' && a.error) {
finishUploadSuccess = false;
// $('#check_btn').hide();
Expand Down
2 changes: 1 addition & 1 deletion apps/batchloader/batchloader.html
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@
type="file"
class="custom-file-input"
id="filesInput"
accept=".svs, .tif, .tiff, .vms, .vmu, .ndpi, .scn, .mrxs, .bif, .svslide"
accept=".svs, .tif, .tiff, .vms, .vmu, .ndpi, .scn, .mrxs, .bif, .svslide, .jpg, .png, .dcm, .v3draw, .ano, .cfg, .csv, .htm, .rec, .tim, .zpo, .dic, .dicom, .jp2, .j2ki, .j2kr, .raw, .ima, .cr2, .crw, .thm, .wav, .dv, .r3d, .r3d_d3d, .log, .mvd2, .aisf, .aiix, .dat, .atsf, .tf2, .tf8, .btf, .pbm, .pgm, .ppm, .xdce, .xml, .xlog, .apl, .tnb, .mtb, .im, .mea, .res, .aim, .arf, .psd, .al3d, .gel, .am, .amiramesh, .grey, .hx, .labels, .img, .hdr, .sif, .afi, .exp, .h5, .1sc, .pic, .ims, .ch5, .vsi, .ets, .pnl, .htd, .c01, .dib, .cxd, .v, .eps, .epsi, .ps, .flex, .xlef, .fits, .fts, .dm2, .dm3, .dm4, .naf, .his, .ndpis, .txt, .i2i, .hed, .mod, .inr, .ipl, .ipm, .fff, .ics, .ids, .seq, .ips, .ipw, .frm, .par, .j2k, .jpf, .jpk, .jpx, .klb, .xv, .bip, .sxm, .fli, .lim, .msr, .lif, .lof, .lei, .l2d, .mnc, .stk, .nd, .scan, .vff, .mrw, .stp, .mng, .nii, .nrrd, .nhdr, .nd2, .nef, .obf, .omp2info, .oib, .oif, .pty, .lut, .oir, .sld, .spl, .liff, .top, .pcoraw, .pcx, .pict, .pct, .df3, .im3, .qptiff, .bin, .env, .spe, .afm, .sm2, .sm3, .spc, .set, .sdt, .spi, .xqd, .xqf, .db, .vws, .pst, .inf, .tfr, .ffr, .zfr, .zfp, .2fl, .tga, .pr3, .dti, .fdf, .hdf, .xys, .html, .acff, .wat, .bmp, .wpi, .czi, .lms, .lsm, .mdb, .zvi, .mrc, .st, .ali, .map, .mrcs, .jpeg, .gif, .ptif"
multiple
required
/>
Expand Down
19 changes: 13 additions & 6 deletions apps/loader/chunked_upload.js
Original file line number Diff line number Diff line change
Expand Up @@ -59,12 +59,13 @@ async function readFileChunks(file, token) {
async function handleUpload(selectedFiles) {
selectedFile = selectedFiles[0];
const filename = selectedFiles[0]['name'];
const token = await startUpload(filename);
const uploadMetadata = await startUpload(filename);
const token = uploadMetadata.upload_token;
$('#tokenRow').show(300);
const callback = continueUpload(token);
readFileChunks(selectedFile, token);
// parseFile(selectedFile, callback, 0, x=>(changeStatus("UPLOAD", "Finished Reading File")))
updateFormOnUpload(selectedFiles[0]['name'], token);
updateFormOnUpload(uploadMetadata.filename, token);

document.getElementById('fileUploadInput').colSpan = selectedFiles.length;
document.getElementById('controlButtons').colSpan = selectedFiles.length+1;
Expand All @@ -78,7 +79,7 @@ async function startUpload(filename) {
try {
const a = await token;
changeStatus('UPLOAD', 'Begun upload - Token:' + a['upload_token']);
return a['upload_token'];
return {upload_token: a['upload_token'], filename: a['filename']}; ;
} catch (e) {
changeStatus('UPLOAD | ERROR;', e);
}
Expand Down Expand Up @@ -130,6 +131,13 @@ function finishUpload() {
regReq.then((x)=>x.json()).then((a)=>{
changeStatus('UPLOAD | Finished', a, reset); reset = false;
console.log(a);
if (a.relpath) {
document.getElementById('filename'+0).value = a.relpath;
} else if (a.filename) {
document.getElementById('filename'+0).value = a.filename;
} else if (a.filepath) {
document.getElementById('filename'+0).value = a.filepath.slice(a.filepath.lastIndexOf('/')+1);
}
if (typeof a === 'object' && a.error) {
finishUploadSuccess = false;
$('#check_btn').hide();
Expand All @@ -143,6 +151,7 @@ function finishUpload() {
$('#check_btn').show();
$('#post_btn').hide();
}
validateForm(CheckBtn);
}
});
regReq.then((e)=> {
Expand All @@ -153,8 +162,6 @@ function finishUpload() {
changeStatus('UPLOAD | ERROR;', e);
reset = true;
console.log(e);
} else {
validateForm(CheckBtn);
}
},
);
Expand All @@ -163,7 +170,7 @@ function finishUpload() {

async function handleUrlUpload(url) {
$('#uploadLoading').css('display', 'block');
const token = await startUpload(url);
const token = (await startUpload(url)).upload_token;
await continueUrlUpload(token, url);
}

Expand Down
36 changes: 20 additions & 16 deletions apps/loader/loader.js
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,20 @@ function changeStatus(step, text, reset=true) {
}
}
if (step == 'CHECK') {
// During check, thumbnail needs to be fetched & added to the table
// show post button
if (text['location']) {
// indicating successful check
checkSuccess = true;
if (finishUploadSuccess === true) {
$('#post_btn').show();
} else {
$('#post_btn').hide();
}
} else {
checkSuccess = false;
$('#post_btn').hide();
}
// fetch thumbnail and add to table as we can
// In this case, text[col[col.length - 1]] is the filename
fetch(thumbUrl + text[col[col.length - 1]], {credentials: 'same-origin'}).then(
(response) => response.json(), // if the response is a JSON object
Expand All @@ -69,18 +82,6 @@ function changeStatus(step, text, reset=true) {
const img = new Image();
img.src = x.slide;
tabCell.appendChild(img);
if (text['location']) {
// indicating successful check
checkSuccess = true;
if (finishUploadSuccess === true) {
$('#post_btn').show();
} else {
$('#post_btn').hide();
}
} else {
checkSuccess = false;
$('#post_btn').hide();
}
});
}
}
Expand Down Expand Up @@ -121,12 +122,15 @@ function handleDownload(id) {
store.getSlide(id)
.then((response) => {
if (response[0]) {
return response[0]['location'];
if (response[0]['filepath']) {
return response[0]['filepath'];
}
let location = response[0]['location'];
return location.substring(location.lastIndexOf('/')+1, location.length);
} else {
throw new Error('Slide not found');
}
}).then((location) => {
fileName = location.substring(location.lastIndexOf('/')+1, location.length);
}).then((fileName) => {
console.log(fileName);
return fileName;
}).then((fileName) =>{
Expand Down
14 changes: 8 additions & 6 deletions apps/model/model.js
Original file line number Diff line number Diff line change
Expand Up @@ -408,15 +408,17 @@ function initCore() {

$CAMIC.store.getSlide($D.params.slideId).then((response) => {
if (response[0]) {
return response[0]['location'];
if (response[0]['filepath']) {
return response[0]['filepath'];
}
return location.substring(
location.lastIndexOf('/') + 1,
location.length,
);
} else {
throw new Error('Slide not found');
}
}).then((location) => {
fileName = location.substring(
location.lastIndexOf('/') + 1,
location.length,
);
}).then((fileName) => {
console.log(fileName);
});

Expand Down
Loading