Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add event to close popover when clicking on select icon. #1741

Merged
merged 53 commits into from
May 23, 2017
Merged
Show file tree
Hide file tree
Changes from 51 commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
34ec576
Add tools service and unit test.
jkmarx May 4, 2017
e475c3f
Fix bug due to duplicate module names.
jkmarx May 4, 2017
a34a102
Fix service name to reflect api.
jkmarx May 4, 2017
82c257a
Rename module for clarity.
jkmarx May 4, 2017
cd90091
Seperate and rename module for clarity.
jkmarx May 4, 2017
ab74fa9
Fix group index bug.
jkmarx May 8, 2017
bd74d68
Fix indexing.
jkmarx May 8, 2017
c1699f8
Add generate list config.
jkmarx May 8, 2017
4f28897
Resolve merge conflict.
jkmarx May 8, 2017
8bd072d
Launch visualization tool.
jkmarx May 9, 2017
610f8d9
Add template generator helper function.
jkmarx May 10, 2017
02f8115
Launch config tested for simple tools.
jkmarx May 11, 2017
a7fe07e
Update unit test.
jkmarx May 11, 2017
56f553a
Remove empty sets helper method.
jkmarx May 11, 2017
7d71ae5
Add generate template unit test.
jkmarx May 11, 2017
d5c08a6
Refactor and add additional unit test.
jkmarx May 12, 2017
dc2fdf8
Add postToolLaunch unit test.
jkmarx May 12, 2017
53429f0
Update API to accept a str instead a str of str uuids.
jkmarx May 12, 2017
7ac7488
Add unit tests for generating file str.
jkmarx May 15, 2017
ae0dafe
Add insert comma method and update unit test.
jkmarx May 15, 2017
996038d
Remove unused attribute.
jkmarx May 15, 2017
ea77f41
Update indices name for clarity.
jkmarx May 15, 2017
288fa6d
Remove unneccessary code.
jkmarx May 15, 2017
27d2ee8
Add comments.
jkmarx May 15, 2017
a8c3aa2
Fix edge case by generating correct size template.
jkmarx May 16, 2017
97b3372
Add comments.
jkmarx May 16, 2017
cdcd542
Update index name for clarity.
jkmarx May 16, 2017
4c25bc4
Update description.
jkmarx May 16, 2017
77e0db7
Refactor.
jkmarx May 16, 2017
38e611f
Add comments.
jkmarx May 16, 2017
7539fe8
Replace method with underscore method.
jkmarx May 16, 2017
e88ac71
Rename for clarity.
jkmarx May 16, 2017
dde84ad
Add inner nav directive for popover.
jkmarx May 17, 2017
4795c98
Adjust css.
jkmarx May 17, 2017
6878445
Add unit tests.
jkmarx May 17, 2017
28867ca
Add validation method.
jkmarx May 17, 2017
473ccd2
Add validation method.
jkmarx May 18, 2017
3709227
Add unit tests.
jkmarx May 18, 2017
411cfc8
Merge branch 'develop' of https://github.com/refinery-platform/refine…
jkmarx May 18, 2017
20e35a8
Remove unneccessary group info.
jkmarx May 19, 2017
3d540c3
Add color data obj for input file types.
jkmarx May 19, 2017
8014b1b
Update input-group in ctrl panel.
jkmarx May 19, 2017
fc0a593
Sync up input file type colors.
jkmarx May 19, 2017
4a149c5
Fix nav bug due to incorrect length.
jkmarx May 19, 2017
ff9761a
Merge conflicts resolved.
jkmarx May 19, 2017
772d627
Update unit test.
jkmarx May 19, 2017
0f0c184
Update unit tests.
jkmarx May 19, 2017
4cb7f48
Add edge case for 1 type deep tools.
jkmarx May 19, 2017
0400b81
Fix missing style.
jkmarx May 19, 2017
f12c479
Add event to close popover when clicking on select icon.
jkmarx May 22, 2017
82ef905
Add comments.
jkmarx May 22, 2017
0a37d38
Resolve merge conflicts.
jkmarx May 23, 2017
241477b
Remove extra line space.
jkmarx May 23, 2017
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
16 changes: 12 additions & 4 deletions refinery/ui/source/js/file-browser/ctrls/ctrl.js
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@
gridFooterTemplate: '<rp-is-assay-files-loading></rp-is-assay-files-loading>'
};
vm.gridOptions.onRegisterApi = gridRegister;
vm.inputFileTypeColor = fileService.inputFileTypeColor;
vm.lastPage = 0; // variable supporting ui-grid dynamic scrolling
vm.nodeSelectCollection = fileService.nodeSelectCollection;
vm.openSelectionPopover = openSelectionPopover;
Expand Down Expand Up @@ -243,10 +244,16 @@
* @param nodeUuid
*/
function openSelectionPopover (nodeRow) {
angular.copy(nodeRow, nodesService.activeNodeRow);
vm.activeNodeRow = nodesService.activeNodeRow;
angular.element('#' + nodeRow.uuid).popover('show');
angular.element('.ui-grid-selection-row-header-buttons').popover('disable');
if (_.isEmpty(nodesService.activeNodeRow)) {
// active nodes are cleared after popovers are closed
angular.copy(nodeRow, nodesService.activeNodeRow);
vm.activeNodeRow = nodesService.activeNodeRow;
angular.element('#' + nodeRow.uuid).popover('show');
angular.element('.ui-grid-selection-row-header-buttons').popover('disable');
} else {
// user selects a different row, triggers closing all open popovers
fileService.hideNodePopover = true;
}
}

/**
Expand Down Expand Up @@ -487,6 +494,7 @@
},
function () {
vm.nodeSelectCollection = fileService.nodeSelectCollection;
vm.inputFileTypeColor = fileService.inputFileTypeColor;
}
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
// selectedNodes ordered by group indicies
vm.groupCollection = fileService.groupCollection;
vm.inputFileTypes = fileService.inputFileTypes; // current tool's inputFileTypes
vm.inputFileTypeColor = fileService.inputFileTypeColor;
// selectedNodes ordered by group indicies
vm.nodeSelection = fileService.nodeSelectCollection;
vm.selectNode = selectNode; // method
Expand Down Expand Up @@ -85,6 +86,7 @@
function () {
vm.currentGroup = fileService.currentGroup;
vm.currentTypes = fileService.currentTypes;
vm.inputFileTypeColor = fileService.inputFileTypeColor;
}
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
expect(ctrl.currentTypes).toEqual([]);
expect(ctrl.groupCollection).toEqual({});
expect(ctrl.inputFileTypes).toEqual([]);
expect(ctrl.inputFileTypeColor).toEqual({});
expect(ctrl.nodeSelection).toEqual({});
expect(ctrl.selectionObj).toEqual({});
});
Expand Down
Original file line number Diff line number Diff line change
@@ -1,91 +1,95 @@
<div id="node-selection-popover">
<div class="node-input-group">
<ul>
<form name="inputNodeForm">
<div ng-if="NSPCtrl.currentTypes[NSPCtrl.currentTypes.length-1]=='PAIR'">
<li ng-repeat="inputType in NSPCtrl.inputFileTypes track by $index">
<div class="checkbox">
<label>
<!-- Deselect: user can currently deselect any node in the current group-->
<span
ng-if="NSPCtrl.groupCollection[NSPCtrl.currentGroup] &&
NSPCtrl.groupCollection[NSPCtrl.currentGroup][inputType.uuid].length > 0"
class="wrap-word">
<span ng-repeat="selectedFile in NSPCtrl.groupCollection[NSPCtrl.currentGroup][inputType.uuid]">
<input
type="checkbox"
ng-click="NSPCtrl.selectNode(inputType.uuid, selectedFile.uuid)"
ng-model="NSPCtrl.selectionObj[NSPCtrl.currentGroup][inputType.uuid][selectedFile.uuid]">
{{ selectedFile[NSPCtrl.attributes.Name] }}
</span>
<div class="node-input-group">
<ul>
<form name="inputNodeForm">
<div ng-if="NSPCtrl.currentTypes[NSPCtrl.currentTypes.length-1]=='PAIR'">
<li
ng-repeat="inputType in NSPCtrl.inputFileTypes track by $index"
ng-style="{'color': NSPCtrl.inputFileTypeColor[inputType.uuid],
'border-color': NSPCtrl.inputFileTypeColor[inputType.uuid]}">
<div class="checkbox">
<label>
<!-- Deselect: user can currently deselect any node in the current group-->
<span
ng-if="NSPCtrl.groupCollection[NSPCtrl.currentGroup] &&
NSPCtrl.groupCollection[NSPCtrl.currentGroup][inputType.uuid].length > 0"
class="wrap-word">
<span ng-repeat="selectedFile in NSPCtrl.groupCollection[NSPCtrl.currentGroup][inputType.uuid]">
<input
type="checkbox"
ng-click="NSPCtrl.selectNode(inputType.uuid, selectedFile.uuid)"
ng-model="NSPCtrl.selectionObj[NSPCtrl.currentGroup][inputType.uuid][selectedFile.uuid]">
{{ selectedFile[NSPCtrl.attributes.Name] }}
</span>
<!-- Select: If there's NOT a group already started for the inputFileType than checkbox not selected-->
<span
ng-if="!NSPCtrl.groupCollection[NSPCtrl.currentGroup] ||
!NSPCtrl.groupCollection[NSPCtrl.currentGroup][inputType.uuid] ||
NSPCtrl.groupCollection[NSPCtrl.currentGroup][inputType.uuid].length == 0">
<input
type="checkbox"
ng-click="NSPCtrl.selectNode(inputType.uuid)"
ng-model="NSPCtrl.selectionObj[NSPCtrl.currentGroup][inputType.uuid][NSPCtrl.activeNode.uuid]">
{{ inputType.name }}
</span>
</label>
</div>
</li>
</div>
<!-- Select: If there's NOT a group already started for the inputFileType than checkbox not selected-->
<span
ng-if="!NSPCtrl.groupCollection[NSPCtrl.currentGroup] ||
!NSPCtrl.groupCollection[NSPCtrl.currentGroup][inputType.uuid] ||
NSPCtrl.groupCollection[NSPCtrl.currentGroup][inputType.uuid].length == 0">
<input
type="checkbox"
ng-click="NSPCtrl.selectNode(inputType.uuid)"
ng-model="NSPCtrl.selectionObj[NSPCtrl.currentGroup][inputType.uuid][NSPCtrl.activeNode.uuid]">
{{ inputType.name }}
</span>
</label>
</div>
</li>
</div>

<div ng-if="NSPCtrl.currentTypes[NSPCtrl.currentTypes.length-1]=='LIST'">
<li>
<span>
<!-- active row selection, for list is always showing -->
<div ng-if="NSPCtrl.currentTypes[NSPCtrl.currentTypes.length-1]=='LIST'">
<li
ng-style="{'color': NSPCtrl.inputFileTypeColor[NSPCtrl.inputFileTypes[0].uuid],
'border-color': NSPCtrl.inputFileTypeColor[NSPCtrl.inputFileTypes[0].uuid]}">
<span>
<!-- active row selection, for list is always showing -->
<div class="checkbox">
<label>
<input
type="checkbox"
ng-click="NSPCtrl.selectNode(NSPCtrl.inputFileTypes[0].uuid)"
ng-model="NSPCtrl.selectionObj[NSPCtrl.currentGroup][NSPCtrl.inputFileTypes[0].uuid][NSPCtrl.activeNode.uuid]">
{{ NSPCtrl.inputFileTypes[0].name }}
</label>
</span>
<!-- Select/Deselect nodes in the list -->
<span
ng-if="NSPCtrl.groupCollection[NSPCtrl.currentGroup] &&
NSPCtrl.groupCollection[NSPCtrl.currentGroup][NSPCtrl.inputFileTypes[0].uuid].length > 0">
{{ inputType.uuid }}
<div ng-repeat="selectedFile in NSPCtrl.groupCollection[NSPCtrl.currentGroup][NSPCtrl.inputFileTypes[0].uuid]">
<div class="checkbox">
<label>
<label class="wrap-word">
<input
type="checkbox"
ng-click="NSPCtrl.selectNode(NSPCtrl.inputFileTypes[0].uuid)"
ng-model="NSPCtrl.selectionObj[NSPCtrl.currentGroup][NSPCtrl.inputFileTypes[0].uuid][NSPCtrl.activeNode.uuid]">
{{ NSPCtrl.inputFileTypes[0].name }}
ng-click="NSPCtrl.selectNode(NSPCtrl.inputFileTypes[0].uuid, selectedFile.uuid)"
ng-model="NSPCtrl.selectionObj[NSPCtrl.currentGroup][NSPCtrl.inputFileTypes[0].uuid][selectedFile.uuid]">
{{ selectedFile[NSPCtrl.attributes.Name] }}
</label>
</span>
<!-- Select/Deselect nodes in the list -->
<span
ng-if="NSPCtrl.groupCollection[NSPCtrl.currentGroup] &&
NSPCtrl.groupCollection[NSPCtrl.currentGroup][NSPCtrl.inputFileTypes[0].uuid].length > 0">
{{ inputType.uuid }}
<div ng-repeat="selectedFile in NSPCtrl.groupCollection[NSPCtrl.currentGroup][NSPCtrl.inputFileTypes[0].uuid]">
<div class="checkbox">
<label class="wrap-word">
<input
type="checkbox"
ng-click="NSPCtrl.selectNode(NSPCtrl.inputFileTypes[0].uuid, selectedFile.uuid)"
ng-model="NSPCtrl.selectionObj[NSPCtrl.currentGroup][NSPCtrl.inputFileTypes[0].uuid][selectedFile.uuid]">
{{ selectedFile[NSPCtrl.attributes.Name] }}
</label>
</div>
</div>
</span>
</li>
</div>
</form>
</ul>
</div>
<div>
<span ng-if="NSPCtrl.currentTypes.length > 1">
<div class="refinery-subheader">
<h4>
{{ NSPCtrl.currentTypes[NSPCtrl.currentTypes.length - 2] }} Nav:
Group {{ NSPCtrl.currentGroup[NSPCtrl.currentGroup.length - 2] + 1 }}
</h4>
</div>
</span>
</li>
</div>
<rp-input-control-inner-nav></rp-input-control-inner-nav>
</span>
<div class="p-t-1 text-right">
<button
class="refinery-base btn btn-default btn-xs"
ng-click="closeSelectionPopover()">
Close
</button>
</form>
</ul>
</div>
<div>
<span ng-if="NSPCtrl.currentTypes.length > 1">
<div class="refinery-subheader">
<h4>
{{ NSPCtrl.currentTypes[NSPCtrl.currentTypes.length - 2] }} Nav:
Group {{ NSPCtrl.currentGroup[NSPCtrl.currentGroup.length - 1] + 1 }}
</h4>
</div>
<rp-input-control-inner-nav></rp-input-control-inner-nav>
</span>
<div class="p-t-1 text-right">
<button
class="refinery-base btn btn-default btn-xs"
ng-click="closeSelectionPopover()">
Close
</button>
</div>
</div>

9 changes: 7 additions & 2 deletions refinery/ui/source/js/file-browser/services/factory.js
Original file line number Diff line number Diff line change
Expand Up @@ -252,9 +252,14 @@ function fileBrowserFactory (
'class="selected-node" ' +
'title="{{grid.appScope.nodeSelectCollection[row.entity.uuid].groupList}}">' +
'<div class="paragraph ui-grid-cell-contents" ' +
'ng-if="grid.appScope.nodeSelectCollection[row.entity.uuid].groupList[0].length > 1"> ' +
'ng-if="grid.appScope.nodeSelectCollection[row.entity.uuid].groupList[0].length > 0"> ' +
'<span ng-repeat="group in grid.appScope.nodeSelectCollection[row.entity.uuid].groupList ' +
'track by $index">{{group}} &nbsp </span></div></div></div>';
'track by $index">' +
'<span ng-style="{\'color\':grid.appScope.inputFileTypeColor[' +
'grid.appScope.nodeSelectCollection[row.entity.uuid].inputTypeList[$index]]}">' +
'{{group[group.length - 1]}}</span>' +
'<span ng-if="$index < grid.appScope.nodeSelectCollection[row.entity.uuid]' +
'.groupList.length - 1">, &nbsp</span> </span></div></div></div>';

return {
name: _columnName,
Expand Down
2 changes: 2 additions & 0 deletions refinery/ui/source/js/tool-launch/ctrls/input-group-ctrl.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
vm.currentTypes = fileService.currentTypes;
vm.groupCollection = fileService.groupCollection;
vm.inputFileTypes = fileService.inputFileTypes;
vm.inputFileTypeColor = fileService.inputFileTypeColor;
vm.isGroupPopulated = isGroupPopulated;
vm.isNavCollapsed = false;
vm.isObjEmpty = isObjEmpty;
Expand Down Expand Up @@ -105,6 +106,7 @@
function () {
vm.groupCollection = fileService.groupCollection;
vm.currentGroup = fileService.currentGroup;
vm.inputFileTypeColor = fileService.inputFileTypeColor;
}
);
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
expect(ctrl.currentTypes).toEqual([]);
expect(ctrl.groupCollection).toEqual({});
expect(ctrl.inputFileTypes).toEqual([]);
expect(ctrl.inputFileTypeColor).toEqual({});
expect(ctrl.isNavCollapsed).toEqual(false);
});

Expand Down
Original file line number Diff line number Diff line change
@@ -1,24 +1,24 @@
<div>
<button
class="btn btn-default btn-xs outline"
ng-disabled="$ctrl.currentGroup[$ctrl.currentGroup.length-2] == 0"
ng-click="$ctrl.navLeft($ctrl.currentGroup.length-2)">
ng-disabled="$ctrl.currentGroup[$ctrl.currentGroup.length-1] == 0"
ng-click="$ctrl.navLeft($ctrl.currentGroup.length-1)">
<i class="fa fa-backward"></i>
</button>
<span ng-if="$ctrl.currentTypes[$ctrl.currentTypes.length - 2] == 'PAIR'">
<button
class="btn btn-default btn-xs outline"
ng-disabled="$ctrl.currentGroup[$ctrl.currentGroup.length-2] == 1 ||
ng-disabled="$ctrl.currentGroup[$ctrl.currentGroup.length-1] == 1 ||
$ctrl.needMoreNodes()"
ng-click="$ctrl.navRight($ctrl.currentGroup.length-2)">
ng-click="$ctrl.navRight($ctrl.currentGroup.length-1)">
<i class="fa fa-forward"></i>
</button>
</span>
<span ng-if="$ctrl.currentTypes[$ctrl.currentTypes.length - 2] == 'LIST'">
<button
class="btn btn-default btn-xs outline"
ng-disabled="$ctrl.needMoreNodes()"
ng-click="$ctrl.navRight($ctrl.currentGroup.length-2)">
ng-click="$ctrl.navRight($ctrl.currentGroup.length-1)">
<i class="fa fa-forward"></i>
</button>
</span>
Expand Down
18 changes: 11 additions & 7 deletions refinery/ui/source/js/tool-launch/partials/input-control.html
Original file line number Diff line number Diff line change
Expand Up @@ -36,36 +36,40 @@ <h4 class="panel-title">
<rp-input-group></rp-input-group>
</div>

<div ng-if="$index == 1" class="p-a-1-2">
<rp-input-control-inner-nav></rp-input-control-inner-nav>
</div>

<div
ng-if="$index > 0"
ng-if="$index > 1"
class="tree-panel"
ng-style="{'margin-left': 10*$index+'px'}">
<hr>
<div>
<h5>
{{ $ctrl.currentGroup[$ctrl.currentGroup.length-$index-1] }}
{{ $ctrl.currentGroup[$ctrl.currentGroup.length-$index] + 1 }}
of groups in {{ groupType }}
</h5>
</div>
<div>
<button
class="btn btn-default btn-xs outline"
ng-disabled="$ctrl.currentGroup[$ctrl.currentGroup.length-$index-1] == 0"
ng-click="$ctrl.navLeft($ctrl.currentGroup.length-$index-1)">
ng-disabled="$ctrl.currentGroup[$ctrl.currentGroup.length-$index] == 0"
ng-click="$ctrl.navLeft($ctrl.currentGroup.length-$index)">
<i class="fa fa-backward"></i>
</button>
<span ng-if="groupType == 'PAIR'">
<button
class="btn btn-default btn-xs outline"
ng-disabled="$ctrl.currentGroup[$ctrl.currentGroup.length-$index-1] == 1"
ng-click="$ctrl.navRight($ctrl.currentGroup.length-$index-1)">
ng-disabled="$ctrl.currentGroup[$ctrl.currentGroup.length-$index] == 1"
ng-click="$ctrl.navRight($ctrl.currentGroup.length-$index)">
<i class="fa fa-forward"></i>
</button>
</span>
<span ng-if="groupType == 'LIST'">
<button
class="btn btn-default btn-xs outline"
ng-click="$ctrl.navRight($ctrl.currentGroup.length-$index-1)">
ng-click="$ctrl.navRight($ctrl.currentGroup.length-$index)">
<i class="fa fa-forward"></i>
</button>
</span>
Expand Down
15 changes: 10 additions & 5 deletions refinery/ui/source/js/tool-launch/partials/input-group.html
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,17 @@

<ul>
<div ng-if="$ctrl.currentTypes[$ctrl.currentTypes.length-1]=='PAIR'">
<li ng-repeat="inputFile in $ctrl.inputFileTypes track by $index">
<span class="wrap-word" ng-if="$ctrl.isGroupPopulated(inputFile.uuid)">
<li
ng-repeat="inputFile in $ctrl.inputFileTypes track by $index"
ng-style="{'color': $ctrl.inputFileTypeColor[inputFile.uuid],
'border-color': $ctrl.inputFileTypeColor[inputFile.uuid]}">
<span class="wrap-word" ng-if="$ctrl.isGroupPopulated(inputFile.uuid)">
<span ng-repeat="node in $ctrl.groupCollection[$ctrl.currentGroup][inputFile.uuid]">
{{ node[$ctrl.attributes.Name] }}
</span>
</span>
<span ng-if="!$ctrl.isGroupPopulated(inputFile.uuid)">
<span ng-if="!$ctrl.isGroupPopulated(inputFile.uuid)">
{{ inputFile.name }}:
<
<div
class='fileTypes'
ng-repeat="fileObj in inputFile.allowed_filetypes">
Expand All @@ -30,7 +32,10 @@
</div>

<div ng-if="$ctrl.currentTypes[$ctrl.currentTypes.length-1]=='LIST'">
<li class="wrap-word">
<li
class="wrap-word"
ng-style="{'color': $ctrl.inputFileTypeColor[$ctrl.inputFileTypes[0].uuid],
'border-color': $ctrl.inputFileTypeColor[$ctrl.inputFileTypes[0].uuid]}">
<div ng-if="!$ctrl.isGroupPopulated($ctrl.inputFileTypes[0].uuid)">
{{ $ctrl.inputFileTypes[0].name }}:
<
Expand Down