From a117c78a989e0f812841f0221b98216aa63d2a3d Mon Sep 17 00:00:00 2001 From: Devin Howard Date: Wed, 1 Mar 2017 22:00:18 -0800 Subject: [PATCH] nicer all/none buttons --- app/assets/stylesheets/application.scss.erb | 11 +++++- app/views/shared/_switchmetacodes.html.erb | 3 +- frontend/src/Metamaps/Create.js | 41 +++++++++++++++++---- 3 files changed, 44 insertions(+), 11 deletions(-) diff --git a/app/assets/stylesheets/application.scss.erb b/app/assets/stylesheets/application.scss.erb index 065c26ab..2045628c 100644 --- a/app/assets/stylesheets/application.scss.erb +++ b/app/assets/stylesheets/application.scss.erb @@ -2323,7 +2323,8 @@ and it won't be important on password protected instances */ padding: 0; .setDesc, - .selectAll { + .selectAll, + .selectNone { margin-bottom: 5px; font-family: 'din-medium', helvetica, sans-serif; color: #424242; @@ -2333,9 +2334,15 @@ and it won't be important on password protected instances */ display: inline-block; } - .selectAll { + .selectAll, + .selectNone { float: right; cursor: pointer; + + &:hover, + &.selected { + color: #00bcd4; + } } & > ul { diff --git a/app/views/shared/_switchmetacodes.html.erb b/app/views/shared/_switchmetacodes.html.erb index a8db6f55..9dbdabb6 100644 --- a/app/views/shared/_switchmetacodes.html.erb +++ b/app/views/shared/_switchmetacodes.html.erb @@ -92,7 +92,8 @@ <% end %>
Choose Your Metacodes
-
Select all
<%# hidden by default %> +
NONE
+
ALL
<% @list = '' %> <% metacodesInUse = user_metacodes() %> <% Metacode.order("name").all.each_with_index do |m, index| %> diff --git a/frontend/src/Metamaps/Create.js b/frontend/src/Metamaps/Create.js index d3bd9719..b01642c5 100644 --- a/frontend/src/Metamaps/Create.js +++ b/frontend/src/Metamaps/Create.js @@ -28,7 +28,8 @@ const Create = { }).addClass('ui-tabs-vertical ui-helper-clearfix') $('#metacodeSwitchTabs .ui-tabs-nav li').removeClass('ui-corner-top').addClass('ui-corner-left') $('.customMetacodeList li').click(self.toggleMetacodeSelected) // within the custom metacode set tab - $('.selectAll').click(self.metacodeSelectorToggleSelectAll) + $('.selectAll').click(self.metacodeSelectorSelectAll) + $('.selectNone').click(self.metacodeSelectorSelectNone) }, toggleMetacodeSelected: function() { var self = Create @@ -44,6 +45,33 @@ const Create = { self.newSelectedMetacodes.push($(this).attr('id')) 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 @@ -51,14 +79,11 @@ const Create = { if (!$('.customMetacodeList').is(':visible')) return // If all are selected, then select none. Otherwise, select all. - const anyToggledOff = $('.customMetacodeList li').toArray() - .map(li => $(li).is('.toggledOff')) - .reduce((curr, prev) => curr || prev) - if (anyToggledOff) { - $('.customMetacodeList li.toggledOff').each(Create.toggleMetacodeSelected) + if (Create.metacodeSelectorAreAllSelected()) { + Create.metacodeSelectorSelectNone() } else { - // this should be every single one - $('.customMetacodeList li').not('.toggledOff').each(Create.toggleMetacodeSelected) + // if some, but not all, are selected, it still runs this function + Create.metacodeSelectorSelectAll() } }, updateMetacodeSet: function(set, index, custom) {