From f6369506977f95deab565aab9c6b9eea2a3c1e97 Mon Sep 17 00:00:00 2001 From: Sarah A LaFrance Date: Thu, 5 Nov 2015 14:44:09 -0800 Subject: [PATCH 1/3] cherrypicking editonly changes --- app/signals.js | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/app/signals.js b/app/signals.js index 3dd5784d7..1974037b5 100644 --- a/app/signals.js +++ b/app/signals.js @@ -1,4 +1,5 @@ //tnr: little webpack trick to require all the action files and add them to the 'a' object +var each = require('lodash/collection/each'); var reqContext = require.context('./actions/', true, /^((?!test).)*$/); var a = {}; reqContext.keys().forEach(function(key) { @@ -6,7 +7,7 @@ reqContext.keys().forEach(function(key) { }); //add all the signals to the cerebral controller here -export default function registerSignals(controller, options) { +export default function registerSignals(controller) { //tnr: WORKING: controller.signal('copySelection', [a.getData('selectionLayer', 'sequenceData'), a.copySelection, { success: a.setData('clipboardData'), @@ -71,5 +72,41 @@ export default function registerSignals(controller, options) { controller.signal('addAnnotations', [a.addAnnotations]); controller.signal('jumpToRow', [a.jumpToRow]); + var editModeOnlySignals = { + 'backspacePressed': [ + a.getData('selectionLayer', 'sequenceLength', 'sequenceData'), + a.checkLayerIsSelected, { + selected: [a.deleteSequence], + notSelected: [a.getData('caretPosition'), a.prepDeleteOneBack, a.deleteSequence] + } + ], + 'sequenceDataInserted': [ + a.getData('selectionLayer', 'sequenceLength', 'sequenceData'), + a.checkLayerIsSelected, { + selected: [a.deleteSequence], + notSelected: [a.getData('caretPosition')] + }, + a.insertSequenceData, + a.setData('caretPosition', 'sequenceData') + ] + } +} +function addEditModeOnlySignal(signalsObj) { + var newSignalsObj = {}; + each(signalsObj, function(actionArray, signalName) { + newSignalsObj[signalName] = [ + a.checkIfEditAllowed, { + success: actionArray, + error: a.displayError('Unable to complete action while in Read Only mode') + } + ] + }) + return newSignalsObj; +} + +function attachSignalObjectsToController (signalsObj, controller) { + each(signalsObj, function(actionArray, signalName) { + controller.signal(signalName, actionArray); + }) } \ No newline at end of file From 7565814fffb809afdcd785a116fb531c8670122c Mon Sep 17 00:00:00 2001 From: Sarah A LaFrance Date: Thu, 12 Nov 2015 11:31:37 -0800 Subject: [PATCH 2/3] updating from master --- app/actions/checkIfEditAllowed.js | 10 ++++ app/state.js | 81 ++++++++++++++++--------------- 2 files changed, 52 insertions(+), 39 deletions(-) create mode 100644 app/actions/checkIfEditAllowed.js diff --git a/app/actions/checkIfEditAllowed.js b/app/actions/checkIfEditAllowed.js new file mode 100644 index 000000000..ce2ef731e --- /dev/null +++ b/app/actions/checkIfEditAllowed.js @@ -0,0 +1,10 @@ +export default function checkIfEditAllowed({ selectionLayer }, tree, output) { + if (tree.get('readOnly')) { + tree.set('readOnly', false); + // console.log("set false"); + } else { + tree.set('readOnly', true); + // console.log("set true"); + } +} +checkIfEditAllowed.outputs = ['editAllowed', 'readOnly']; \ No newline at end of file diff --git a/app/state.js b/app/state.js index db435a82d..825d0be7d 100644 --- a/app/state.js +++ b/app/state.js @@ -12,41 +12,65 @@ var getCutsitesFromSequence = require('ve-sequence-utils/getCutsitesFromSequence var enzymeList = require('ve-sequence-utils/enzymeList.json'); module.exports = { - rowToJumpTo: null, - topSpacerHeight: 0, - bottomSpacerHeight: 0, + //sl: begin obsessive alphabetization :p + // simple vars + allowPartialAnnotationsOnCopy: false, + annotationHeight: 15, averageRowHeight: 100, + bottomSpacerHeight: 0, + caretPosition: 0, charWidth: 15, charHeight: 15, - displayLinear: true, + clipboardData: null, displayCircular: true, + displayLinear: true, displayRow: true, - annotationHeight: 15, - minimumOrfSize: 20, - tickSpacing: 10, mapViewTickSpacing: 40, - spaceBetweenAnnotations: 3, - showOrfs: true, - allowPartialAnnotationsOnCopy: false, + minimumOrfSize: 20, + readOnly: true, + rowToJumpTo: null, + showAxis: true, showCutsites: true, - showParts: true, showFeatures: true, - showTranslations: true, - showAxis: true, - showSequence: true, + showOrfs: true, + showParts: true, showReverseSequence: true, - rowViewDimensions: { + showSequence: true, + showTranslations: true, + spaceBetweenAnnotations: 3, + tickSpacing: 10, + topSpacerHeight: 0, + // complex vars + circularViewDimensions: { height: 500, width: 500 }, + cutsiteLabelSelectionLayer: { + start: -1, + end: -1, + selected: false, + cursorAtEnd: true + }, mapViewDimensions: { height: 500, width: 500 }, - circularViewDimensions: { + rowViewDimensions: { height: 500, width: 500 }, + selectionLayer: { + start: -1, + end: -1, + selected: false, + cursorAtEnd: true + }, + sequenceData: {//tnr: sequence data gets passed in and overrides this object + sequence: '', + features: [], + translations: [], + parts: [], + }, userEnzymeList: [ 'rsplkii', 'bme216i', @@ -57,30 +81,11 @@ module.exports = { height: 500, width: 500 }, - selectionLayer: { - start: -1, - end: -1, - selected: false, - cursorAtEnd: true - }, - cutsiteLabelSelectionLayer: { - start: -1, - end: -1, - selected: false, - cursorAtEnd: true - }, - caretPosition: 0, visibleRows: { start: 0, end: 0 }, - sequenceData: {//tnr: sequence data gets passed in and overrides this object - sequence: '', - features: [], - translations: [], - parts: [], - }, - clipboardData: null, + // derived data - can't alphabetize because of dependencies :( bpsPerRow: deriveData([ ['rowViewDimensions', 'width' @@ -89,8 +94,7 @@ module.exports = { function(rowViewDimensionsWidth, charWidth) { return Math.floor(rowViewDimensionsWidth / charWidth); } - ]), - + ]), userEnzymes: deriveData([ ['userEnzymeList'], function(userEnzymeList) { @@ -164,7 +168,6 @@ module.exports = { return selectedSequenceString.length * 10 } ]), - orfData: deriveData([ ['sequenceData', 'sequence'], ['sequenceData', 'circular'], //decide on what to call this.. From 6364e595767ef0debad579b7007adfcfd35594e9 Mon Sep 17 00:00:00 2001 From: Sarah A LaFrance Date: Fri, 13 Nov 2015 13:34:39 -0800 Subject: [PATCH 3/3] checking for read only and disabling actions --- app/StatusBar.js | 12 +++++++++++- app/actions/checkIfEditAllowed.js | 6 ++---- app/actions/setEditState.js | 8 ++++++++ app/signals.js | 18 ++++++++++++++---- app/state.js | 2 +- 5 files changed, 36 insertions(+), 10 deletions(-) create mode 100644 app/actions/setEditState.js diff --git a/app/StatusBar.js b/app/StatusBar.js index 2a4fc4e56..a24765281 100644 --- a/app/StatusBar.js +++ b/app/StatusBar.js @@ -10,12 +10,14 @@ import styles from './status-bar.css'; selectedSeqMeltingTemp: ['selectedSeqMeltingTemp'], caretPosition: ['caretPosition'], selectionLayer: ['selectionLayer'], + readOnly: ['readOnly'] }) @propTypes({ sequenceLength: PropTypes.number.isRequired, selectedSeqMeltingTemp: PropTypes.number.isRequired, caretPosition: PropTypes.number.isRequired, selectionLayer: PropTypes.object.isRequired, + readOnly: PropTypes.bool.isRequired }) export default class StatusBar extends React.Component { @@ -24,7 +26,9 @@ export default class StatusBar extends React.Component { sequenceLength, selectedSeqMeltingTemp, caretPosition, - selectionLayer + selectionLayer, + readOnly, + signals } = this.props; var selectionStart = (selectionLayer.start != -1) ? selectionLayer.start : '--'; @@ -33,6 +37,12 @@ export default class StatusBar extends React.Component { return (
+
+ + +
Length
{sequenceLength}
diff --git a/app/actions/checkIfEditAllowed.js b/app/actions/checkIfEditAllowed.js index ce2ef731e..1fe75dd65 100644 --- a/app/actions/checkIfEditAllowed.js +++ b/app/actions/checkIfEditAllowed.js @@ -1,10 +1,8 @@ export default function checkIfEditAllowed({ selectionLayer }, tree, output) { if (tree.get('readOnly')) { - tree.set('readOnly', false); - // console.log("set false"); + output.readOnly(); } else { - tree.set('readOnly', true); - // console.log("set true"); + output.editAllowed(); } } checkIfEditAllowed.outputs = ['editAllowed', 'readOnly']; \ No newline at end of file diff --git a/app/actions/setEditState.js b/app/actions/setEditState.js new file mode 100644 index 000000000..e67b9e860 --- /dev/null +++ b/app/actions/setEditState.js @@ -0,0 +1,8 @@ +export default function setEditState(input, tree, output) { + // + console.log("setting edit state to read only"); + console.log("readOnly: " + tree.get('readOnly')); + tree.set('readOnly', true); +} + +// setEditState.outputs = ['shiftHeld', 'shiftNotHeld']; \ No newline at end of file diff --git a/app/signals.js b/app/signals.js index e3f113f51..ecce83ec4 100644 --- a/app/signals.js +++ b/app/signals.js @@ -88,8 +88,15 @@ export default function registerSignals(controller) { //lower priority controller.signal('addAnnotations', [a.addAnnotations]); controller.signal('jumpToRow', [a.jumpToRow]); + // sl: in progress + controller.signal('setEditState', [a.setEditState]); var editModeOnlySignals = { + 'testSignal' :[ + function(input, tree, output) { + console.log("test signal"); + } + ], 'backspacePressed': [ a.getData('selectionLayer', 'sequenceLength', 'sequenceData'), a.checkLayerIsSelected, { @@ -107,22 +114,25 @@ export default function registerSignals(controller) { a.setData('caretPosition', 'sequenceData') ] } + // prepend edit mode check to all edit only mode signals, then instantiate on controller + var processedEditModeSignals = addEditModeOnlyToSignal(editModeOnlySignals); + attachSignalsObjectToController(processedEditModeSignals, controller); } -function addEditModeOnlySignal(signalsObj) { +function addEditModeOnlyToSignal(signalsObj) { var newSignalsObj = {}; each(signalsObj, function(actionArray, signalName) { newSignalsObj[signalName] = [ a.checkIfEditAllowed, { - success: actionArray, - error: a.displayError('Unable to complete action while in Read Only mode') + editAllowed: actionArray, + readOnly: [function (input, tree, output) {console.log('Unable to complete action while in Read Only mode')}] } ] }) return newSignalsObj; } -function attachSignalObjectsToController (signalsObj, controller) { +function attachSignalsObjectToController (signalsObj, controller) { each(signalsObj, function(actionArray, signalName) { controller.signal(signalName, actionArray); }) diff --git a/app/state.js b/app/state.js index 825d0be7d..4a36b0f0f 100644 --- a/app/state.js +++ b/app/state.js @@ -27,7 +27,7 @@ module.exports = { displayRow: true, mapViewTickSpacing: 40, minimumOrfSize: 20, - readOnly: true, + readOnly: false, rowToJumpTo: null, showAxis: true, showCutsites: true,