ability to select/unselect all metacodes in custom set with keyboard shortcut (fix #390) (#1078)

* ability to select/unselect all metacodes in custom set with keyboard shortcut

* select all button

* nicer all/none buttons
This commit is contained in:
Devin Howard 2017-03-05 00:51:51 +08:00 committed by Connor Turland
parent 529dec09a3
commit a6c1c0c730
4 changed files with 92 additions and 26 deletions

View file

@ -2311,6 +2311,9 @@ and it won't be important on password protected instances */
} }
/* switch metacode set */ /* switch metacode set */
#switchMetacodes > p {
margin: 16px 0 16px 0;
}
#metacodeSwitchTabs { #metacodeSwitchTabs {
width: 100%; width: 100%;
font-size: 17px; font-size: 17px;
@ -2318,29 +2321,44 @@ and it won't be important on password protected instances */
border: none; border: none;
background: none; background: none;
padding: 0; padding: 0;
}
#metacodeSwitchTabs .setDesc { .setDesc,
.selectAll,
.selectNone {
margin-bottom: 5px; margin-bottom: 5px;
font-family: 'din-medium', helvetica, sans-serif; font-family: 'din-medium', helvetica, sans-serif;
color: #424242; color: #424242;
font-size: 14px; font-size: 14px;
text-align: justify; text-align: justify;
padding-right: 16px; padding-right: 16px;
display: inline-block;
} }
#switchMetacodes > p {
margin: 16px 0 16px 0; .selectAll,
.selectNone {
float: right;
cursor: pointer;
&:hover,
&.selected {
color: #00bcd4;
} }
#metacodeSwitchTabs > ul { }
& > ul {
width: 130px; width: 130px;
}
#metacodeSwitchTabs > ul li { li {
font-size: 14px; font-size: 14px;
text-transform: uppercase; text-transform: uppercase;
} }
#metacodeSwitchTabs li.ui-state-active a { }
li.ui-state-active a {
color: #00BCD4; color: #00BCD4;
cursor: pointer; cursor: pointer;
} }
}
.metacodeSwitchTab { .metacodeSwitchTab {
max-height: 300px; max-height: 300px;
overflow-y: auto; overflow-y: auto;

View file

@ -91,7 +91,9 @@
</div> </div>
<% end %> <% end %>
<div id="metacodeSwitchTabsCustom"> <div id="metacodeSwitchTabsCustom">
<p class="setDesc">Choose Your Metacodes</p> <div class="setDesc">Choose Your Metacodes</div>
<div class="selectNone">NONE</div>
<div class="selectAll">ALL</div>
<% @list = '' %> <% @list = '' %>
<% metacodesInUse = user_metacodes() %> <% metacodesInUse = user_metacodes() %>
<% Metacode.order("name").all.each_with_index do |m, index| %> <% Metacode.order("name").all.each_with_index do |m, index| %>

View file

@ -28,6 +28,8 @@ const Create = {
}).addClass('ui-tabs-vertical ui-helper-clearfix') }).addClass('ui-tabs-vertical ui-helper-clearfix')
$('#metacodeSwitchTabs .ui-tabs-nav li').removeClass('ui-corner-top').addClass('ui-corner-left') $('#metacodeSwitchTabs .ui-tabs-nav li').removeClass('ui-corner-top').addClass('ui-corner-left')
$('.customMetacodeList li').click(self.toggleMetacodeSelected) // within the custom metacode set tab $('.customMetacodeList li').click(self.toggleMetacodeSelected) // within the custom metacode set tab
$('.selectAll').click(self.metacodeSelectorSelectAll)
$('.selectNone').click(self.metacodeSelectorSelectNone)
}, },
toggleMetacodeSelected: function() { toggleMetacodeSelected: function() {
var self = Create var self = Create
@ -43,6 +45,46 @@ const Create = {
self.newSelectedMetacodes.push($(this).attr('id')) self.newSelectedMetacodes.push($(this).attr('id'))
self.newSelectedMetacodeNames.push($(this).attr('data-name')) self.newSelectedMetacodeNames.push($(this).attr('data-name'))
} }
self.updateSelectAllColors()
},
updateSelectAllColors: function() {
$('.selectAll, .selectNone').removeClass('selected')
if (Create.metacodeSelectorAreAllSelected()) {
$('.selectAll').addClass('selected')
} else if (Create.metacodeSelectorAreNoneSelected()) {
$('.selectNone').addClass('selected')
}
},
metacodeSelectorSelectAll: function() {
$('.customMetacodeList li.toggledOff').each(Create.toggleMetacodeSelected)
Create.updateSelectAllColors()
},
metacodeSelectorSelectNone: function() {
$('.customMetacodeList li').not('.toggledOff').each(Create.toggleMetacodeSelected)
Create.updateSelectAllColors()
},
metacodeSelectorAreAllSelected: function() {
return $('.customMetacodeList li').toArray()
.map(li => !$(li).is('.toggledOff')) // note the ! on this line
.reduce((curr, prev) => curr && prev)
},
metacodeSelectorAreNoneSelected: function() {
return $('.customMetacodeList li').toArray()
.map(li => $(li).is('.toggledOff'))
.reduce((curr, prev) => curr && prev)
},
metacodeSelectorToggleSelectAll: function() {
// should be called when Create.isSwitchingSet is true and .customMetacodeList is visible
if (!Create.isSwitchingSet) return
if (!$('.customMetacodeList').is(':visible')) return
// If all are selected, then select none. Otherwise, select all.
if (Create.metacodeSelectorAreAllSelected()) {
Create.metacodeSelectorSelectNone()
} else {
// if some, but not all, are selected, it still runs this function
Create.metacodeSelectorSelectAll()
}
}, },
updateMetacodeSet: function(set, index, custom) { updateMetacodeSet: function(set, index, custom) {
if (custom && Create.newSelectedMetacodes.length === 0) { if (custom && Create.newSelectedMetacodes.length === 0) {
@ -114,7 +156,6 @@ const Create = {
} }
}) })
}, },
cancelMetacodeSetSwitch: function() { cancelMetacodeSetSwitch: function() {
var self = Create var self = Create
self.isSwitchingSet = false self.isSwitchingSet = false

View file

@ -1,6 +1,7 @@
/* global $ */ /* global $ */
import Active from './Active' import Active from './Active'
import Create from './Create'
import Control from './Control' import Control from './Control'
import DataModel from './DataModel' import DataModel from './DataModel'
import JIT from './JIT' import JIT from './JIT'
@ -35,7 +36,11 @@ const Listeners = {
Control.deleteSelected() Control.deleteSelected()
break break
case 65: // if a or A is pressed case 65: // if a or A is pressed
if ((e.ctrlKey || e.metaKey) && onCanvas) { if (Create.isSwitchingSet && e.ctrlKey || e.metaKey) {
Create.metacodeSelectorToggleSelectAll()
e.preventDefault()
break
} else if ((e.ctrlKey || e.metaKey) && onCanvas) {
const nodesCount = Object.keys(Visualize.mGraph.graph.nodes).length const nodesCount = Object.keys(Visualize.mGraph.graph.nodes).length
const selectedNodesCount = Selected.Nodes.length const selectedNodesCount = Selected.Nodes.length
e.preventDefault() e.preventDefault()