From 2f8f44bd92c222c47923357ab06ad82397d04704 Mon Sep 17 00:00:00 2001 From: Tom Kazimiers Date: Fri, 12 May 2017 23:32:53 -0400 Subject: [PATCH] Node filters: move general rule settings to rules table The merge mode setting as well as the skeleton ID and name constraints have been moved out of the UI for new rules to the filter rule table. Those settings can be rather confusing if one doesn't know their effect. It seems much clearer with those settings being only modifiable for existing rules and are presented in the context of other rules. All three fields are editable right in the table. Also the first row doesn't show any merge mode anymore, because the setting makes sense only for rules coming after the first one. --- django/applications/catmaid/static/js/dom.js | 101 ++++++++++++++----- 1 file changed, 74 insertions(+), 27 deletions(-) diff --git a/django/applications/catmaid/static/js/dom.js b/django/applications/catmaid/static/js/dom.js index bdc49b76dd..4a78fc68b1 100644 --- a/django/applications/catmaid/static/js/dom.js +++ b/django/applications/catmaid/static/js/dom.js @@ -465,7 +465,7 @@ orderable: false, render: function(data, type, row, meta) { var checked = !row.skip; - return ' ' : '/>'); + return ' ' : '/>'); } }, { @@ -475,8 +475,18 @@ { orderable: false, render: function(data, type, row, meta) { - return row.mergeMode === CATMAID.UNION ? "Union" : - (row.mergeMode === CATMAID.INTERSECTION ? "Intersection" : row.mergeMode); + if (type === "display") { + if (meta.row === 0) { + return "-"; + } else { + return ''; + } + } else { + return row.mergeMode; + } } }, { @@ -488,13 +498,25 @@ { orderable: false, render: function(data, type, row, meta) { - return row.validOnlyForSkid ? row.validOnlyForSkid : "-"; + var value = row.validOnlyForSkid ? row.validOnlyForSkid : ''; + if (type === "display") { + return ''; + } else { + return value; + } } }, { orderable: false, render: function(data, type, row, meta) { - return row.validOnlyForName ? row.validOnlyForName : "-"; + var value = row.validOnlyForName ? row.validOnlyForName : ''; + if (type === "display") { + return ''; + } else { + return value; + } } }, { @@ -514,7 +536,7 @@ }); // Updated skipping of rules - $(table).on('change', 'td', function(e) { + $(table).on('change', 'input[data-action=skip]', function(e) { var tr = $(this).closest("tr"); var rule = datatable.row(tr).data(); rule.skip = !e.target.checked; @@ -534,6 +556,24 @@ // Trigger client update CATMAID.tools.callIfFn(options.update); } + }).on('change', 'select[data-action=merge-mode]', function(e) { + var tr = $(this).closest("tr"); + var rule = datatable.row(tr).data(); + rule.mergeMode = this.value; + CATMAID.tools.callIfFn(options.update); + return false; + }).on('change', 'input[data-action=skeleton]', function(e) { + var tr = $(this).closest("tr"); + var rule = datatable.row(tr).data(); + rule.validOnlyForSkid = this.value; + CATMAID.tools.callIfFn(options.update); + return false; + }).on('change', 'input[data-action=name]', function(e) { + var tr = $(this).closest("tr"); + var rule = datatable.row(tr).data(); + rule.validOnlyForName = this.value; + CATMAID.tools.callIfFn(options.update); + return false; }); // Get available filter strategeis @@ -575,7 +615,8 @@ }); }; - DOM.appendNewNodeFilterControls = function(nodeFilters, target, onNewRule) { + DOM.appendNewNodeFilterControls = function(nodeFilters, target, onNewRule, + showMergeModeField, showSkeletonIdField, showNameField) { var $target = $(target); var nodeFilterSettingsContainer = document.createElement('span'); var nodeFilterSettings = CATMAID.DOM.createLabeledControl("", @@ -596,27 +637,33 @@ // Show UI for selected filte CATMAID.DOM.removeAllChildren(nodeFilterSettingsContainer); // Add general settings - var $mergeMode = CATMAID.DOM.createSelectSetting("Merge operation", mergeRules, - "Rules are applied in a left-associative fashion. This selects which operation to use for this.", - function() { - newRuleMergeMode = this.value; - }); - var $skeletonId = CATMAID.DOM.createInputSetting( - "Apply only to skeleton ID (Optional)", "", - "If a valid skeleton ID is provided, this rule will apply to this skeleton exclusively.", - function() { - newRuleSkeletonID = this.value; - }); - var $skeletonName = CATMAID.DOM.createInputSetting( - "... having this name (Optional)", "", - "Along with a skeleton ID a name can also be used. If supplied, skeletons are also checked againsts it and only if skeleton ID and name match, the rule will be applied.", - function() { - newRuleSkeletonName = this.value; - }); var $nodeFilterSettingsContainer = $(nodeFilterSettingsContainer); - $nodeFilterSettingsContainer.append($mergeMode); - $nodeFilterSettingsContainer.append($skeletonId); - $nodeFilterSettingsContainer.append($skeletonName); + if (showMergeModeField) { + var $mergeMode = CATMAID.DOM.createSelectSetting("Merge operation", mergeRules, + "Rules are applied in a left-associative fashion. This selects which operation to use for this.", + function() { + newRuleMergeMode = this.value; + }); + $nodeFilterSettingsContainer.append($mergeMode); + } + if (showSkeletonIdField) { + var $skeletonId = CATMAID.DOM.createInputSetting( + "Apply only to skeleton ID (Optional)", "", + "If a valid skeleton ID is provided, this rule will apply to this skeleton exclusively.", + function() { + newRuleSkeletonID = this.value; + }); + $nodeFilterSettingsContainer.append($skeletonId); + } + if (showNameField) { + var $skeletonName = CATMAID.DOM.createInputSetting( + "... having this name (Optional)", "", + "Along with a skeleton ID a name can also be used. If supplied, skeletons are also checked againsts it and only if skeleton ID and name match, the rule will be applied.", + function() { + newRuleSkeletonName = this.value; + }); + $nodeFilterSettingsContainer.append($skeletonName); + } // Add filter specific settings var createSettings = CATMAID.NodeFilterSettingFactories[strategy];