Loading CHANGELOG.md +4 −0 Original line number Diff line number Diff line ### nova-trame, 0.25.2 * NeutronDataSelector should now reset its state properly when changing the instrument or experiment (thanks to John Duggan). ### nova-trame, 0.25.1 * ExecutionButtons now supports binding to stop_btn and download_btn parameters (thanks to John Duggan). Loading pyproject.toml +1 −1 Original line number Diff line number Diff line [project] name = "nova-trame" version = "0.25.1" version = "0.25.2" description = "A Python Package for injecting curated themes and custom components into Trame applications" authors = [ { name = "John Duggan", email = "dugganjw@ornl.gov" }, Loading src/nova/trame/view/components/data_selector.py +1 −0 Original line number Diff line number Diff line Loading @@ -226,6 +226,7 @@ class DataSelector(datagrid.VGrid): self._vm.directories_bind.connect(self._directories_name) self._vm.datafiles_bind.connect(self._datafiles_name) self._vm.reset_bind.connect(self.reset) self._vm.reset_grid_bind.connect(self._reset_rv_grid) def refresh_contents(self) -> None: self._vm.update_view(refresh_directories=True) Loading src/nova/trame/view/components/ornl/neutron_data_selector.py +10 −1 Original line number Diff line number Diff line Loading @@ -154,6 +154,7 @@ class NeutronDataSelector(DataSelector): self._vm.directories_bind.connect(self._directories_name) self._vm.datafiles_bind.connect(self._datafiles_name) self._vm.reset_bind.connect(self.reset) self._vm.reset_grid_bind.connect(self._reset_rv_grid) self._vm.update_view() Loading Loading @@ -207,8 +208,12 @@ class NeutronDataSelector(DataSelector): @self.state.change(self._experiment[0].split(".")[0]) def on_experiment_change(**kwargs: Any) -> None: experiment = rgetdictvalue(kwargs, self._experiment[0]) if experiment != self._last_experiment: if experiment and experiment != self._last_experiment: self._last_experiment = experiment # See the note in the update_experiment method for why we call this twice. self._vm.set_binding_parameters( experiment=set_state_param(self.state, (self._selected_experiment_name,), ""), ) self._vm.set_binding_parameters( experiment=set_state_param(self.state, (self._selected_experiment_name,), experiment) ) Loading Loading @@ -244,6 +249,10 @@ class NeutronDataSelector(DataSelector): self._vm.reset() def update_experiment(self, experiment: str) -> None: # Setting the experiment to an empty string forces the treeview to clear it's selection state. self._vm.set_binding_parameters( experiment=set_state_param(self.state, (self._selected_experiment_name,), ""), ) self._vm.set_binding_parameters( experiment=set_state_param(self.state, (self._selected_experiment_name,), experiment), ) Loading src/nova/trame/view/theme/assets/js/revo_grid.js +24 −8 Original line number Diff line number Diff line Loading @@ -12,6 +12,11 @@ class RevoGrid { } updateCheckboxes() { // Wait for the DOM to update after the Trame state is updated. setTimeout(this._updateCheckboxes.bind(this), 10) } _updateCheckboxes() { const trameState = window.trame.state.state const modelValue = _.get(trameState, this.modelKey) const availableData = _.get(trameState, this.dataKey) Loading @@ -22,23 +27,34 @@ class RevoGrid { return } let allSelected = null rowCheckboxes.forEach((element) => { const input = element.querySelector('input') const rowIndex = element.dataset.rgrow if (availableData[rowIndex] !== undefined) { input.checked = modelValue.includes(availableData[rowIndex].path) } else { input.checked = false } if (allSelected === null && input.checked) { allSelected = true } else if (!input.checked) { allSelected = false } }) if (modelValue.length === 0) { selectAllCheckbox.checked = false selectAllCheckbox.indeterminate = false } else if (modelValue.length === availableData.length) { } else if (allSelected === true) { selectAllCheckbox.checked = true selectAllCheckbox.indeterminate = false } else { selectAllCheckbox.checked = false selectAllCheckbox.indeterminate = true } rowCheckboxes.forEach((element) => { const input = element.querySelector('input') const rowIndex = element.dataset.rgrow input.checked = modelValue.includes(availableData[rowIndex].path) }) } cellTemplate(createElement, props) { Loading Loading
CHANGELOG.md +4 −0 Original line number Diff line number Diff line ### nova-trame, 0.25.2 * NeutronDataSelector should now reset its state properly when changing the instrument or experiment (thanks to John Duggan). ### nova-trame, 0.25.1 * ExecutionButtons now supports binding to stop_btn and download_btn parameters (thanks to John Duggan). Loading
pyproject.toml +1 −1 Original line number Diff line number Diff line [project] name = "nova-trame" version = "0.25.1" version = "0.25.2" description = "A Python Package for injecting curated themes and custom components into Trame applications" authors = [ { name = "John Duggan", email = "dugganjw@ornl.gov" }, Loading
src/nova/trame/view/components/data_selector.py +1 −0 Original line number Diff line number Diff line Loading @@ -226,6 +226,7 @@ class DataSelector(datagrid.VGrid): self._vm.directories_bind.connect(self._directories_name) self._vm.datafiles_bind.connect(self._datafiles_name) self._vm.reset_bind.connect(self.reset) self._vm.reset_grid_bind.connect(self._reset_rv_grid) def refresh_contents(self) -> None: self._vm.update_view(refresh_directories=True) Loading
src/nova/trame/view/components/ornl/neutron_data_selector.py +10 −1 Original line number Diff line number Diff line Loading @@ -154,6 +154,7 @@ class NeutronDataSelector(DataSelector): self._vm.directories_bind.connect(self._directories_name) self._vm.datafiles_bind.connect(self._datafiles_name) self._vm.reset_bind.connect(self.reset) self._vm.reset_grid_bind.connect(self._reset_rv_grid) self._vm.update_view() Loading Loading @@ -207,8 +208,12 @@ class NeutronDataSelector(DataSelector): @self.state.change(self._experiment[0].split(".")[0]) def on_experiment_change(**kwargs: Any) -> None: experiment = rgetdictvalue(kwargs, self._experiment[0]) if experiment != self._last_experiment: if experiment and experiment != self._last_experiment: self._last_experiment = experiment # See the note in the update_experiment method for why we call this twice. self._vm.set_binding_parameters( experiment=set_state_param(self.state, (self._selected_experiment_name,), ""), ) self._vm.set_binding_parameters( experiment=set_state_param(self.state, (self._selected_experiment_name,), experiment) ) Loading Loading @@ -244,6 +249,10 @@ class NeutronDataSelector(DataSelector): self._vm.reset() def update_experiment(self, experiment: str) -> None: # Setting the experiment to an empty string forces the treeview to clear it's selection state. self._vm.set_binding_parameters( experiment=set_state_param(self.state, (self._selected_experiment_name,), ""), ) self._vm.set_binding_parameters( experiment=set_state_param(self.state, (self._selected_experiment_name,), experiment), ) Loading
src/nova/trame/view/theme/assets/js/revo_grid.js +24 −8 Original line number Diff line number Diff line Loading @@ -12,6 +12,11 @@ class RevoGrid { } updateCheckboxes() { // Wait for the DOM to update after the Trame state is updated. setTimeout(this._updateCheckboxes.bind(this), 10) } _updateCheckboxes() { const trameState = window.trame.state.state const modelValue = _.get(trameState, this.modelKey) const availableData = _.get(trameState, this.dataKey) Loading @@ -22,23 +27,34 @@ class RevoGrid { return } let allSelected = null rowCheckboxes.forEach((element) => { const input = element.querySelector('input') const rowIndex = element.dataset.rgrow if (availableData[rowIndex] !== undefined) { input.checked = modelValue.includes(availableData[rowIndex].path) } else { input.checked = false } if (allSelected === null && input.checked) { allSelected = true } else if (!input.checked) { allSelected = false } }) if (modelValue.length === 0) { selectAllCheckbox.checked = false selectAllCheckbox.indeterminate = false } else if (modelValue.length === availableData.length) { } else if (allSelected === true) { selectAllCheckbox.checked = true selectAllCheckbox.indeterminate = false } else { selectAllCheckbox.checked = false selectAllCheckbox.indeterminate = true } rowCheckboxes.forEach((element) => { const input = element.querySelector('input') const rowIndex = element.dataset.rgrow input.checked = modelValue.includes(availableData[rowIndex].path) }) } cellTemplate(createElement, props) { Loading