Skip to content

Commit

Permalink
Merge pull request #459 from camicroscope/develop
Browse files Browse the repository at this point in the history
For 3.8.3
  • Loading branch information
birm committed Dec 3, 2020
2 parents 9cc49a9 + bb33221 commit b61df7f
Show file tree
Hide file tree
Showing 10 changed files with 177 additions and 53 deletions.
10 changes: 8 additions & 2 deletions HISTORY.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
* **Version 1**
* [1.0.x](#camicroscope-10)

### caMicroscope [Unreleased](https://github.com/camicroscope/camicroscope/compare/v3.8.2...camicroscope:develop)
### caMicroscope [Unreleased](https://github.com/camicroscope/camicroscope/compare/v3.8.3...camicroscope:develop)
###### TBD
* TBD
*

### caMicroscope [Unreleased](https://github.com/camicroscope/camicroscope/compare/v3.8.2...camicroscope:v3.8.3)
###### 2020-12-03
* Bugfix: Model Failed to read coordinates [#454](https://github.com/camicroscope/caMicroscope/pull/454)[#455](https://github.com/camicroscope/caMicroscope/pull/455)
* multislide explorer [#456](https://github.com/camicroscope/caMicroscope/pull/456)
* Model Class List Edit Field Defaults [#457](https://github.com/camicroscope/caMicroscope/pull/457)

### caMicroscope [3.8.2](https://github.com/camicroscope/camicroscope/compare/v3.8.1...camicroscope:v3.8.2)
###### 2020-11-10
Expand Down
15 changes: 8 additions & 7 deletions apps/model/model.js
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ async function initUIcomponents() {
provideContent: true,
content: `
<div class = "message" >
<h3> Please select a model</h3></div><br>
<table id = 'roitable'>
<thead>
Expand Down Expand Up @@ -503,7 +503,7 @@ function camicStopDraw(e) {
const viewer = $CAMIC.viewer;
const canvasDraw = viewer.canvasDrawInstance;
const imgColl = canvasDraw.getImageFeatureCollection();
if (imgColl.features.length > 0) {
if (imgColl.features.length > 0 && imgColl.features[0].bound.coordinates[0].length >= 5) {
// Check size first
const box = checkSize(imgColl, viewer.imagingHelper);

Expand Down Expand Up @@ -539,8 +539,8 @@ function checkSize(imgColl, imagingHelper) {
// slide images svsslide images svs
// get position on viewer

const topLeft = imgColl.features[0].bound[0];
const bottomRight = imgColl.features[0].bound[2];
const topLeft = imgColl.features[0].bound.coordinates[0][0];
const bottomRight = imgColl.features[0].bound.coordinates[0][2];
const min = imagingHelper._viewer.viewport.imageToViewportCoordinates(topLeft[0], topLeft[1]);
const max = imagingHelper._viewer.viewport.imageToViewportCoordinates(bottomRight[0], bottomRight[1]);
const rect = new OpenSeadragon.Rect(min.x, min.y, max.x-min.x, max.y-min.y);
Expand Down Expand Up @@ -956,7 +956,7 @@ async function showInfo() {
deleteModel(name);
});
document.getElementById('chngClassListBtn' + modelCount).addEventListener('click', () => {
showNewClassInput(name);
showNewClassInput(name, classes);
});
modelCount += 1;
};
Expand All @@ -968,12 +968,13 @@ async function showInfo() {
}


function showNewClassInput(name) {
function showNewClassInput(name, classes) {
const self = $UI.chngClassLst;
self.body.innerHTML = `
<input id ="new_classList" type="text"/>
<button class="btn btn-primary btn-xs my-xs-btn btn-final-change" id='chngbtn' type="button">Change Class List</button>
`;
document.getElementById('new_classList').defaultValue = classes;
$UI.chngClassLst.open(); // Open the box to take input from user
document.getElementById('chngbtn').addEventListener('click', () => {
// $UI.chngClassLst.close();
Expand Down Expand Up @@ -1061,7 +1062,7 @@ function dataURItoBlob(dataURI) {
* Convert image coordinates
*/
function convertCoordinates(imagingHelper, bound) {
const newArray = bound.map(function(arr) {
const newArray = bound.coordinates[0].map(function(arr) {
return arr.slice(); // copy
});

Expand Down
16 changes: 16 additions & 0 deletions apps/multi/multi.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="../../core/openseadragon/openseadragon.js"></script>
<script src="../../core/Store.js"></script>
<script src="../../common/PathdbMods.js"></script>
<link rel="stylesheet" href="./style.css">
<title>Select an Image</title>
</head>
<body>
<h1> Images </h1>
<div id="pages"></div>
<div id="workspace" class="flex-grid"></div>
</body>
<script src="./multi.js"></script>
</html>
90 changes: 90 additions & 0 deletions apps/multi/multi.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
// initalize dependencies and params
let store = new Store('../../data/');
const urlParams = new URLSearchParams(window.location.search);
const page = parseInt(urlParams.get('p'), 10) || 0;
const mode = urlParams.get('mode');
const MAX_TILES = parseInt(urlParams.get('mt'), 10) || 16;
const prefixUrl = 'https://cdn.jsdelivr.net/npm/openseadragon@2.3/build/openseadragon/images/';
let query = JSON.parse(urlParams.get('q') || '{}');
let list = JSON.parse(urlParams.get('l') || '[]');

let viewers = [];

// run the pathdb mods as needed
if (mode == 'pathdb') {
PathDbMods();
}

const workspace = document.getElementById('workspace');

function addTile(url, i, name, dest) {
let d = document.createElement('div');
d.id = 'osd' + i;
d.className = 'osd col';
// tile size, and hidden to start
d.style = 'min-width: 400px; width:22%; height:400px';
// add link to slide
let b = document.createElement('a');
b.id = 'link' + i;
b.innerText = name;
b.href=dest;
d.appendChild(b);
d.appendChild(document.createElement('br'));
workspace.appendChild(d);
viewers[i] = OpenSeadragon({
id: d.id,
prefixUrl: prefixUrl,
tileSources: url,
});
}

function onInit() {
let promises = [];
if (list.length) {
for (j of list) {
promises.push(store.getSlide(j));
}
} else {
promises.push(store.findSlide(null, null, null, null, query));
}
Promise.all(promises).then((xx)=>{
let x = xx.flat();
// pagination
// previous?
if (page > 0) {
let p = document.createElement('a');
let prevParam = new URLSearchParams(window.location.search);
p.id = 'prevPage';
prevParam.set('p', page-1);
p.innerText = 'Prev';
p.href = './multi.html?' + prevParam.toString();
document.getElementById('pages').append(p);
}
// next?
if (page < Math.floor(x.length/MAX_TILES)-1) {
let p = document.createElement('a');
let nextParam = new URLSearchParams(window.location.search);
p.id = 'nextPage';
nextParam.set('p', page+1);
p.innerText = 'Next';
p.href = './multi.html?' + nextParam.toString();
document.getElementById('pages').append(p);
}
// tiles
let start = MAX_TILES * page;
let stop = Math.min(x.length, start+MAX_TILES);
for (let n = start; n < stop; n++) {
let item = x[n];
let loc = '../../img/IIP/raw/?DeepZoom=' + item.location + '.dzi';
let dest = '../viewer/viewer.html?slideId=' + item._id['$oid'];
if (mode == 'pathdb') {
dest += '&mode=pathdb';
}
addTile(loc, n, item.name, dest);
}
});
}

// TODO pagination

window.onload = onInit;
16 changes: 16 additions & 0 deletions apps/multi/style.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
body{
margin: 25px;
}
.flex-grid {
display: flex;
flex-wrap: wrap;
}
.col {
flex: 1;
}

.osd{
margin: 10px;
padding: 10px;
background-color: HoneyDew;
}
6 changes: 3 additions & 3 deletions apps/segment/segment.js
Original file line number Diff line number Diff line change
Expand Up @@ -574,8 +574,8 @@ function checkSize(imgColl, imagingHelper) {

// get position on viewer

const topLeft = imgColl.features[0].bound[0];
const bottomRight = imgColl.features[0].bound[2];
const topLeft = imgColl.features[0].bound.coordinates[0][0];
const bottomRight = imgColl.features[0].bound.coordinates[0][2];
const min = imagingHelper._viewer.viewport.imageToViewportCoordinates(topLeft[0], topLeft[1]);
const max = imagingHelper._viewer.viewport.imageToViewportCoordinates(bottomRight[0], bottomRight[1]);
const rect = new OpenSeadragon.Rect(min.x, min.y, max.x-min.x, max.y-min.y);
Expand Down Expand Up @@ -1377,7 +1377,7 @@ function dataURItoBlob(dataURI) {
* Convert image coordinates
*/
function convertCoordinates(imagingHelper, bound) {
const newArray = bound.map(function(arr) {
const newArray = bound.coordinates[0].map(function(arr) {
return arr.slice(); // copy
});

Expand Down
18 changes: 10 additions & 8 deletions common/PathdbMods.js
Original file line number Diff line number Diff line change
Expand Up @@ -124,14 +124,16 @@ function PathDbMods() {
})
}

StatesHelper.prototype.default_getCurrentStatesURL = StatesHelper.prototype.getCurrentStatesURL;
getCurrentStatesURL = function(isImageCoordinate=false){
let states = StatesHelper.getCurrentStates(isImageCoordinate);
if(!states)return;
console.log(states);
states = StatesHelper.encodeStates(states);
return `${location.origin}${location.pathname}?slideId=${$D.params.slideId}&states=${$D.params.states}&mode=${$D.params.mode}`
};
if (!(typeof StatesHelper === 'undefined')){
StatesHelper.prototype.default_getCurrentStatesURL = StatesHelper.prototype.getCurrentStatesURL;
getCurrentStatesURL = function(isImageCoordinate=false){
let states = StatesHelper.getCurrentStates(isImageCoordinate);
if(!states)return;
console.log(states);
states = StatesHelper.encodeStates(states);
return `${location.origin}${location.pathname}?slideId=${$D.params.slideId}&states=${$D.params.states}&mode=${$D.params.mode}`
};
}

console.warn("This Setup Is Intended For Pathdb")
}
38 changes: 22 additions & 16 deletions core/Store.js
Original file line number Diff line number Diff line change
Expand Up @@ -547,27 +547,33 @@ class Store {

/**
* find overlays matching name and/or type
* @param {string} [name] - the slide name
* @param {string} [location] - the slide location, supporting regex match
* @param {string} [name] - the slide's name
* @param {string} [specimen] - the slide's noted specimen
* @param {string} [study] - the slide's noted study
* @param {string} [location] - the slide's file location
* @param {string} [q] - override query - ignores all other params if set
* @return {promise} - promise which resolves with data
**/
findSlide(slide, specimen, study, location) {
findSlide(slide, specimen, study, location, q) {
let query;
const suffix = 'Slide/find';
const url = this.base + suffix;
const query = {};
if (slide) {
query.slide = slide;
}
if (study) {
query.study = study;
}
if (specimen) {
query.specimen = specimen;
}
if (location) {
query.location = location;
if (q) {
query = q;
} else {
if (slide) {
query.slide = slide;
}
if (study) {
query.study = study;
}
if (specimen) {
query.specimen = specimen;
}
if (location) {
query.location = location;
}
}

return fetch(url + '?' + objToParamStr(query), {
credentials: 'include',
mode: 'cors',
Expand Down
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
"description": "",
"scripts": {
"test": "mocha test --recursive",
"lint": "eslint ./core/*.js ./components/**/*.js ./apps/*.js ./apps/port/*.js ./apps/heatmap/*.js ./apps/labeling/*.js ./apps/loader/*.js ./apps/model/*.js ./apps/segment/*.js ./apps/model/**/*.js ./apps/segment/**/*.js ./apps/viewer/*.js --quiet",
"lint-fix": "eslint ./core/*.js ./components/**/*.js ./apps/*.js ./apps/port/*.js ./apps/heatmap/*.js ./apps/labeling/*.js ./apps/loader/*.js ./apps/model/*.js ./apps/segment/*.js ./apps/model/**/*.js ./apps/segment/**/*.js ./apps/viewer/*.js --quiet --fix"
"lint": "eslint ./core/*.js ./components/**/*.js ./apps/*.js ./apps/port/*.js ./apps/heatmap/*.js ./apps/multi/*.js ./apps/labeling/*.js ./apps/loader/*.js ./apps/model/*.js ./apps/segment/*.js ./apps/model/**/*.js ./apps/segment/**/*.js ./apps/viewer/*.js --quiet",
"lint-fix": "eslint ./core/*.js ./components/**/*.js ./apps/*.js ./apps/port/*.js ./apps/heatmap/*.js ./apps/multi/*.js ./apps/labeling/*.js ./apps/loader/*.js ./apps/model/*.js ./apps/segment/*.js ./apps/model/**/*.js ./apps/segment/**/*.js ./apps/viewer/*.js --quiet --fix"
},
"author": "",
"license": "NONE",
Expand Down
17 changes: 2 additions & 15 deletions test/ui/operationpanel-test-cases.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,18 +42,7 @@ describe('Operation Panel Component',function(){

//
describe('constructor:options', function () {
// let singleElt;
// let multipleElt;
// before(function(){
// singleElt = dom.window.document.getElementById('single');
// multipleElt = dom.window.document.getElementById('multiple');
// });
// Options Error: No Schema Error
// it('Options Error: No Schema Error', function () {
// let error = dom.window.document.getElementById('error1');
// assert.equal(error.textContent,'OperationPanel:No Form Schema ...');
// });


// Options Error: No Action Error
it('Options Error: No Action Error', function () {
let error = dom.window.document.getElementById('error2');
Expand All @@ -65,10 +54,8 @@ describe('Operation Panel Component',function(){
const btn1 = singleElt.querySelector('.action');
const btn2 = multipleElt.querySelector('.action');
assert.equal(btn1.textContent,'Save');
//assert.equal(btn1.disabled,true);
assert.equal(btn2.textContent,'Submit');
//assert.equal(btn2.disabled,true);
});
});

// check callback
it('Options:check callback',function(){
Expand Down

0 comments on commit b61df7f

Please sign in to comment.