Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
d0de3b6
fix: update to MEI v5.1
yinanazhou Feb 7, 2025
d8c130d
fix: group all-zero dummy syl to first syllable
yinanazhou Feb 7, 2025
12cdcfa
fix: add `liquescent` element inside `nc`
yinanazhou Feb 10, 2025
febe15a
chore: format using prettier
yinanazhou Feb 21, 2025
8d813b0
fix: add delete confirm window
yinanazhou Feb 25, 2025
e5e7ffb
Merge pull request #1256 from DDMAL/delete-fix
yinanazhou Feb 25, 2025
dbe17f7
fix: generate zone for syl only when syllable gets inserted
yinanazhou Feb 28, 2025
786853b
test: update MEI encoding test result
yinanazhou Feb 28, 2025
8344a78
Merge pull request #1257 from DDMAL/fix-mei
yinanazhou Mar 1, 2025
62a75eb
Added job for single staff finding
DeannaLC Mar 1, 2025
0461aab
Added if case for 1 staff to Miyao Staff Finding
DeannaLC Mar 6, 2025
99827cd
Removed branch for 1 line from Miyao Staff Finding, renamed One Staff…
DeannaLC Mar 25, 2025
fa83497
fixed json formatting error
DeannaLC Mar 26, 2025
0e39139
Fixed MEI Encoding to handle different num_lines
DeannaLC Mar 26, 2025
85c5dac
Revert "fixed json formatting error"
DeannaLC Mar 26, 2025
2171896
fixed json formatting error
DeannaLC Mar 27, 2025
6eab11d
Merge pull request #1269 from DDMAL/release-v3.2.0
homework36 Mar 31, 2025
b7abec2
chore: reformat
yinanazhou Mar 14, 2025
c24e815
style: fix workflow job position x offset after reload
yinanazhou Apr 11, 2025
beb7682
chore: reformat
yinanazhou Apr 11, 2025
ceb7a9c
fix: add delete confirm window for workflow
yinanazhou Apr 11, 2025
c94213c
Merge pull request #1281 from DDMAL/workflow-pos
yinanazhou Apr 13, 2025
e32bd60
Merge pull request #1283 from DDMAL/del-workflow
yinanazhou Apr 13, 2025
57bf729
fix: Modifies MEI Encoding to read from JSOMR for number of staff lin…
DeannaLC Apr 14, 2025
784dd1e
fix: hide dropdown menus on click away
yinanazhou Apr 18, 2025
fbc16e5
fix: tab & navigation status
yinanazhou Apr 18, 2025
70b3a13
Merge pull request #1285 from DDMAL/workflow-dp
yinanazhou Apr 18, 2025
c9c83a9
Merge pull request #1286 from DDMAL/tab-fix
yinanazhou Apr 18, 2025
093183c
docs: comment in build_mei_file.py line 251 about resolving issue htt…
DeannaLC Apr 28, 2025
95f170e
fix: changes bounding box size to surround whole staff section
DeannaLC Apr 28, 2025
e5dcceb
docs: updated setting for neume height to be 3 * neume height
DeannaLC May 7, 2025
fe93fc5
fix: sorts staff lines based on y height
DeannaLC May 31, 2025
c16b184
use DDMAL forked packages
homework36 Jun 18, 2025
74ef753
docs: comments in aquitanian_ref_line_finding.py to document function…
DeannaLC Jun 19, 2025
d25bd71
use temporary test branch for calamari
homework36 Jun 19, 2025
d0b9e3f
add direct tensorflow link before calamari install
homework36 Jun 19, 2025
ba753ba
use packaged calamari release instead of branch
homework36 Jun 19, 2025
3a531c5
Merge pull request #1278 from DDMAL/mei-line-fix
DeannaLC Jun 22, 2025
79206cc
fix: adds an image input to column splitting to be used with interact…
DeannaLC Jun 24, 2025
8f894e6
Merge pull request #1307 from DDMAL/fix_text_alignment_requirements
homework36 Jul 2, 2025
4f3e53e
Update prod tag in Makefile to v3.2.0
homework36 Jul 7, 2025
e7250c5
Merge pull request #1313 from DDMAL/fix-release-version
homework36 Jul 10, 2025
bbf0b5c
docs: updated image port name, added comment on 3 and 4 channels work…
DeannaLC Jul 12, 2025
1473d04
fix: removed RGB Image from All Layers output
DeannaLC Jul 12, 2025
a8fc9b9
point apt sources to Debian archive for buster
homework36 Jul 14, 2025
cb23436
force default setting for debian package install to prevent potential…
homework36 Jul 14, 2025
c4776ee
fix FromAsCasing mismatch
homework36 Jul 14, 2025
50df7c8
Merge pull request #1272 from DDMAL/one-staff-finding
DeannaLC Jul 14, 2025
af5cacd
Merge pull request #1317 from DDMAL/fix-dockerfile-debian-repo
homework36 Jul 15, 2025
700a4d6
Merge pull request #1310 from DDMAL/column-split-fix
DeannaLC Jul 16, 2025
3b07489
update prod ver from v3.2.0 to v3.3.0
homework36 Jul 16, 2025
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
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ REPLACE := perl -i -pe
RODAN_PATH := ./rodan-main/code/rodan
JOBS_PATH := $(RODAN_PATH)/jobs

PROD_TAG := v3.1.0
PROD_TAG := v3.3.0

DOCKER_TAG := nightly

Expand Down
13 changes: 9 additions & 4 deletions nginx/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
ARG VERSION
FROM ddmal/rodan-main:${VERSION} as rodan-static
FROM ddmal/rodan-main:${VERSION} AS rodan-static

RUN touch /code/Rodan/database.log /code/Rodan/rodan.log

Expand All @@ -18,10 +18,15 @@ RUN export DJANGO_SECRET_KEY=localdev \
###########################################################
FROM nginx:1.19

# prevents interactive prompts during package installation that would otherwise hang or break automated builds
ENV DEBIAN_FRONTEND=noninteractive

# Install OS dependencies
RUN apt-get -qq update \
&& apt-get -qq install openssl certbot unzip -y \
&& rm -rf /var/lib/apt/lists/*
RUN sed -i 's|http://deb.debian.org/debian|http://archive.debian.org/debian|g' /etc/apt/sources.list && \
sed -i 's|http://security.debian.org/debian-security|http://archive.debian.org/debian-security|g' /etc/apt/sources.list && \
apt-get -o Acquire::Check-Valid-Until=false update && \
apt-get install -y openssl certbot unzip && \
rm -rf /var/lib/apt/lists/*

# Add configuration files.
COPY ./config/nginx.conf /etc/nginx/nginx.conf
Expand Down
12 changes: 6 additions & 6 deletions production.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ version: "3.4"
services:

nginx:
image: "ddmal/nginx:v3.2.0"
image: "ddmal/nginx:v3.3.0"
deploy:
replicas: 1
resources:
Expand Down Expand Up @@ -37,7 +37,7 @@ services:
- "resources:/rodan/data"

rodan-main:
image: "ddmal/rodan-main:v3.2.0"
image: "ddmal/rodan-main:v3.3.0"
deploy:
replicas: 1
resources:
Expand Down Expand Up @@ -78,7 +78,7 @@ services:
- "resources:/rodan/data"

celery:
image: "ddmal/rodan-main:v3.2.0"
image: "ddmal/rodan-main:v3.3.0"
deploy:
replicas: 1
resources:
Expand Down Expand Up @@ -109,7 +109,7 @@ services:
- "resources:/rodan/data"

py3-celery:
image: "ddmal/rodan-python3-celery:v3.2.0"
image: "ddmal/rodan-python3-celery:v3.3.0"
deploy:
replicas: 1
resources:
Expand Down Expand Up @@ -139,7 +139,7 @@ services:
- "resources:/rodan/data"

gpu-celery:
image: "ddmal/rodan-gpu-celery:v3.2.0"
image: "ddmal/rodan-gpu-celery:v3.3.0"
deploy:
replicas: 1
resources:
Expand Down Expand Up @@ -195,7 +195,7 @@ services:
TZ: America/Toronto

postgres:
image: "ddmal/postgres-plpython:v3.2.0"
image: "ddmal/postgres-plpython:v3.3.0"
deploy:
replicas: 1
endpoint_mode: dnsrr
Expand Down
14 changes: 14 additions & 0 deletions rodan-client/.prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"printWidth": 200,
"tabWidth": 4,
"useTabs": false,
"semi": true,
"singleQuote": true,
"quoteProps": "as-needed",
"trailingComma": "none",
"bracketSpacing": true,
"bracketSameLine": false,
"arrowParens": "avoid",
"endOfLine": "lf",
"singleAttributePerLine": false
}
437 changes: 265 additions & 172 deletions rodan-client/code/src/js/Controllers/ControllerProject.js

Large diffs are not rendered by default.

141 changes: 71 additions & 70 deletions rodan-client/code/src/js/Controllers/ControllerResource.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS';
import Radio from 'backbone.radio';
import Resource from 'js/Models/Resource';
import ResourceCollection from 'js/Collections/ResourceCollection';
import ViewDeleteConfirm from '../Views/Master/Main/Shared/ViewDeleteConfirm';
import ViewResource from 'js/Views/Master/Main/Resource/Individual/ViewResource';
import ViewResourceMulti from 'js/Views/Master/Main/Resource/Individual/ViewResourceMulti';
import ViewResourceCollection from 'js/Views/Master/Main/Resource/Collection/ViewResourceCollection';
Expand All @@ -14,20 +15,18 @@ import ViewProject from '../Views/Master/Main/Project/Individual/ViewProject';
/**
* Controller for Resources.
*/
export default class ControllerResource extends BaseController
{
export default class ControllerResource extends BaseController {
initialize() {
this._selectedResources = new Set();
this._baseSelectResource = null;
this._selectedResources = new Set();
this._baseSelectResource = null;
}
///////////////////////////////////////////////////////////////////////////////////////
// PRIVATE METHODS
///////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////
// PRIVATE METHODS
///////////////////////////////////////////////////////////////////////////////////////
/**
* Initialize Radio.
*/
_initializeRadio()
{
_initializeRadio() {
// Events
Radio.channel('rodan').on(RODAN_EVENTS.EVENT__RESOURCE_SELECTED_COLLECTION, options => this._handleEventCollectionSelected(options));
Radio.channel('rodan').on(RODAN_EVENTS.EVENT__RESOURCE_SELECTED, options => this._handleEventItemSelected(options));
Expand All @@ -39,6 +38,7 @@ export default class ControllerResource extends BaseController
Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__RESOURCE_SHOWLAYOUTVIEW, options => this._handleCommandShowLayoutView(options));
Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__RESOURCE_CREATE, options => this._handleRequestResourceCreate(options));
Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__RESOURCE_DELETE, options => this._handleCommandResourceDelete(options));
Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__RESOURCE_DELETE_CONFIRM, options => this._handleCommandResourceDeleteConfirm(options));
Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__RESOURCE_DOWNLOAD, options => this._handleRequestResourceDownload(options));
Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__RESOURCE_SAVE, options => this._handleCommandResourceSave(options));
Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__RESOURCE_VIEWER_ACQUIRE, options => this._handleRequestViewer(options));
Expand All @@ -50,35 +50,32 @@ export default class ControllerResource extends BaseController
/**
* Handle show LayoutView.
*/
_handleCommandShowLayoutView(options)
{
_handleCommandShowLayoutView(options) {
this._projectView = options.projectView;
}

/**
* Handle collection selection.
*/
_handleEventCollectionSelected(options)
{
_handleEventCollectionSelected(options) {
this._collection = new ResourceCollection();
this._collection.fetch({data: {project: options.project.id}});
this._collection.fetch({ data: { project: options.project.id } });

Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__UPDATER_SET_COLLECTIONS, {collections: [this._collection]});
Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__UPDATER_SET_COLLECTIONS, { collections: [this._collection] });

const activeProject = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__PROJECT_GET_ACTIVE);
this._projectView = new ViewProject({model: activeProject});
this._projectView = new ViewProject({ model: activeProject });

Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MAINREGION_SHOW_VIEW, {view: this._projectView});
Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MAINREGION_SHOW_VIEW, { view: this._projectView });

this._viewCollection = new ViewResourceCollection({collection: this._collection});
this._viewCollection = new ViewResourceCollection({ collection: this._collection });
this._projectView.showCollection(this._viewCollection);
}

/**
* Handle item selection.
*/
_handleEventItemSelected(options)
{
_handleEventItemSelected(options) {
if (!options.multiple && !options.range) {
this._selectedResources.clear();
this._baseSelectResource = null;
Expand All @@ -87,70 +84,83 @@ export default class ControllerResource extends BaseController
if (options.multiple && this._selectedResources.has(options.resource)) {
this._selectedResources.delete(options.resource);
this._baseSelectResource = null;
}
else if (options.range && this._baseSelectResource !== null) {
} else if (options.range && this._baseSelectResource !== null) {
let indexBase = this._collection.indexOf(this._baseSelectResource);
let indexRes = this._collection.indexOf(options.resource);
this._selectedResources.clear();
for (let n = Math.min(indexBase, indexRes); n <= Math.max(indexBase, indexRes); n++) {
this._selectedResources.add(this._collection.at(n));
}
}
else {
} else {
this._selectedResources.add(options.resource);
this._baseSelectResource = options.resource;
}

if (this._selectedResources.size === 0) {
this._projectView.clearCollectionItemInfoView();
}
else if (this._selectedResources.size === 1) {
this._projectView.showCollectionItemInfo(new ViewResource({model: this._selectedResources.values().next().value}));
}
else {
this._projectView.showCollectionItemInfo(new ViewResourceMulti({models: this._selectedResources}));
} else if (this._selectedResources.size === 1) {
this._projectView.showCollectionItemInfo(new ViewResource({ model: this._selectedResources.values().next().value }));
} else {
this._projectView.showCollectionItemInfo(new ViewResourceMulti({ models: this._selectedResources }));
}
}

/**
* Handle command add Resource.
*/
_handleRequestResourceCreate(options)
{
Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW_IMPORTANT, {title: 'Creating Resource', content: 'Please wait...'});
_handleRequestResourceCreate(options) {
Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW_IMPORTANT, { title: 'Creating Resource', content: 'Please wait...' });
var resource = null;
let opts = {
project: options.project.get('url'),
file: options.file,
project: options.project.get('url'),
file: options.file
};
if (options.resourcetype)
{
if (options.resourcetype) {
opts['resource_type'] = options.resourcetype;
}
if (options.label_names !== undefined)
{
if (options.label_names !== undefined) {
opts['label_names'] = options.label_names;
}
resource = new Resource(opts);
var jqXHR = resource.save({}, {success: (model) => this._handleCreateSuccess(model, this._collection)});
Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__TRANSFERMANAGER_MONITOR_UPLOAD, {request: jqXHR, file: options.file});
var jqXHR = resource.save({}, { success: model => this._handleCreateSuccess(model, this._collection) });
Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__TRANSFERMANAGER_MONITOR_UPLOAD, { request: jqXHR, file: options.file });
}

/**
* Handle command delete Resource.
*/
_handleCommandResourceDelete(options)
{
Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW_IMPORTANT, {title: 'Deleting Resource', content: 'Please wait...'});
_handleCommandResourceDelete(options) {
Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW_IMPORTANT, { title: 'Deleting Resource', content: 'Please wait...' });
this._projectView.clearCollectionItemInfoView();
options.resource.destroy({success: (model) => this._handleDeleteSuccess(model, this._collection)});
if (options.resource.size) {
options.resource.forEach(resource => resource.destroy({ success: model => this._handleDeleteSuccess(model, this._collection) }));
} else {
options.resource.destroy({ success: model => this._handleDeleteSuccess(model, this._collection) });
}
}

/**
* Handle command delete Resource confirm modal window.
*/
_handleCommandResourceDeleteConfirm(options) {
console.log(options.resource.size);
let names = options.resource.size ? [...options.resource].map(resource => resource.get('name')) : options.resource.get('name');
console.log(names);
var view = new ViewDeleteConfirm({
type: 'resource',
names: names,
toDelete: options.resource
});
Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW, {
content: view,
title: 'Deleting Resource'
});
}

/**
* Handle command download Resource.
*/
_handleRequestResourceDownload(options)
{
_handleRequestResourceDownload(options) {
var mimetype = options.resource.get('resource_type_full').mimetype;
var ext = options.resource.get('resource_type_full').extension;
var filename = options.resource.get('name') + '.' + ext;
Expand All @@ -166,14 +176,12 @@ export default class ControllerResource extends BaseController
/**
* Handle command save Resource.
*/
_handleCommandResourceSave(options)
{
Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW_IMPORTANT, {title: 'Saving Resource', content: 'Please wait...'});
options.resource.save(options.fields, {patch: true, success: (model) => Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__RESOURCE_SAVED, {resource: model})});
_handleCommandResourceSave(options) {
Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW_IMPORTANT, { title: 'Saving Resource', content: 'Please wait...' });
options.resource.save(options.fields, { patch: true, success: model => Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__RESOURCE_SAVED, { resource: model }) });
}

_handleCurrentResources(options)
{
_handleCurrentResources(options) {
try {
if (this._collection_no_page['_lastData']['project'] === options.data.project) {
return this._collection_no_page;
Expand All @@ -189,8 +197,7 @@ export default class ControllerResource extends BaseController
/**
* Handle request Resources.
*/
_handleRequestResources(options)
{
_handleRequestResources(options) {
this._collection = new ResourceCollection();
this._collection.fetch(options);
return this._collection;
Expand All @@ -199,8 +206,7 @@ export default class ControllerResource extends BaseController
/**
* Handle request Resources.
*/
_handleRequestResourcesNoPagination(options)
{
_handleRequestResourcesNoPagination(options) {
options.data.no_page = true;
options.async = false;
this._collection_no_page = new ResourceCollection();
Expand All @@ -211,48 +217,43 @@ export default class ControllerResource extends BaseController
/**
* Handle request for Resource viewer.
*/
_handleRequestViewer(options)
{
_handleRequestViewer(options) {
var ajaxOptions = {
url: options.resource.get('url') + 'acquire/',
type: 'POST',
dataType: 'json',
success: (response) => this._handleSuccessAcquire(response)
success: response => this._handleSuccessAcquire(response)
};
$.ajax(ajaxOptions);
}

/**
* Handle acquire success.
*/
_handleSuccessAcquire(response)
{
_handleSuccessAcquire(response) {
window.open(response.working_url, '', '_blank');
}

/**
* Handle create success.
*/
_handleCreateSuccess(resource, collection)
{
_handleCreateSuccess(resource, collection) {
collection.add(resource);
Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__RESOURCE_CREATED, {resource: resource});
Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__RESOURCE_CREATED, { resource: resource });
}

/**
* Handle delete success.
*/
_handleDeleteSuccess(model, collection)
{
_handleDeleteSuccess(model, collection) {
collection.remove(model);
Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__RESOURCE_DELETED, {resource: model});
Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__RESOURCE_DELETED, { resource: model });
}

/**
* Handle generic success.
*/
_handleSuccessGeneric(options)
{
_handleSuccessGeneric(options) {
Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_HIDE);
Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__GLOBAL_RESOURCELABELS_LOAD, {});
}
Expand Down
Loading