From 21a73302e8a8b9f22e51f1707a306f04d3faad07 Mon Sep 17 00:00:00 2001 From: Sean McGivern Date: Thu, 18 Aug 2016 14:12:48 +0100 Subject: [PATCH] Add MemberExpirationDate JS helper This helper adds a datepicker to all `js-access-expiration-date` elements. If that element is a child of a `clearable-input` element and has a sibling `js-clear-input` element, then it will show a working clear button to the right of the input field. --- .../javascripts/member_expiration_date.js | 2 ++ app/assets/stylesheets/pages/projects.scss | 26 +++++++++++++++++++ .../projects/project_members/update.js.haml | 1 + app/views/shared/members/_member.html.haml | 6 ++--- 4 files changed, 32 insertions(+), 3 deletions(-) diff --git a/app/assets/javascripts/member_expiration_date.js b/app/assets/javascripts/member_expiration_date.js index fdcf3b115b7..93c34d5ccd7 100644 --- a/app/assets/javascripts/member_expiration_date.js +++ b/app/assets/javascripts/member_expiration_date.js @@ -8,6 +8,8 @@ $('.js-access-expiration-date').each(function(i, element) { var expirationDateInput = $(element); + if (expirationDateInput.hasClass('hasDatepicker')) { return; } + function toggleClearInput() { expirationDateInput.parent().toggleClass('has-value', !!expirationDateInput.val()); } diff --git a/app/assets/stylesheets/pages/projects.scss b/app/assets/stylesheets/pages/projects.scss index 4409477916f..abda079ad4c 100644 --- a/app/assets/stylesheets/pages/projects.scss +++ b/app/assets/stylesheets/pages/projects.scss @@ -714,3 +714,29 @@ pre.light-well { width: 300px; } } + +.clearable-input { + position: relative; + + .clear-icon { + @extend .fa-times; + display: none; + position: absolute; + right: 7px; + top: 7px; + color: $location-icon-color; + + &:before { + font-family: FontAwesome; + font-weight: normal; + font-style: normal; + } + } + + &.has-value { + .clear-icon { + cursor: pointer; + display: block; + } + } +} diff --git a/app/views/projects/project_members/update.js.haml b/app/views/projects/project_members/update.js.haml index 45f8ef89060..833954bc039 100644 --- a/app/views/projects/project_members/update.js.haml +++ b/app/views/projects/project_members/update.js.haml @@ -1,2 +1,3 @@ :plain $("##{dom_id(@project_member)}").replaceWith('#{escape_javascript(render('shared/members/member', member: @project_member))}'); + new MemberExpirationDate(); diff --git a/app/views/shared/members/_member.html.haml b/app/views/shared/members/_member.html.haml index c959c41b221..1c081bcdc17 100644 --- a/app/views/shared/members/_member.html.haml +++ b/app/views/shared/members/_member.html.haml @@ -79,12 +79,12 @@ %br = form_for member, remote: true, html: { class: 'form-horizontal' } do |f| .form-group - = label_tag :expires_at, 'Project access', class: 'control-label' + = label_tag "member_access_level_#{member.id}", 'Project access', class: 'control-label' .col-sm-10 - = f.select :access_level, options_for_select(member.class.access_level_roles, member.access_level), {}, class: 'form-control' + = f.select :access_level, options_for_select(member.class.access_level_roles, member.access_level), {}, class: 'form-control', id: "member_access_level_#{member.id}" - if member.is_a?(ProjectMember) .form-group - = label_tag :expires_at, 'Access expiration date', class: 'control-label' + = label_tag "member_expires_at_#{member.id}", 'Access expiration date', class: 'control-label' .col-sm-10 .clearable-input = f.text_field :expires_at, class: 'form-control js-access-expiration-date', placeholder: 'Select access expiration date', id: "member_expires_at_#{member.id}"