From 8ef7f513f08e299b2ad5737c66cec24043a55c83 Mon Sep 17 00:00:00 2001 From: Adam Rainsby Date: Mon, 11 Jan 2016 14:04:16 +0000 Subject: [PATCH 1/4] Add options to select date for yearly recurrence rule --- .../recurring_select_dialog.js.coffee.erb | 61 +++++++++++++++++++ app/assets/stylesheets/recurring_select.scss | 2 +- lib/recurring_select.rb | 4 ++ 3 files changed, 66 insertions(+), 1 deletion(-) diff --git a/app/assets/javascripts/recurring_select_dialog.js.coffee.erb b/app/assets/javascripts/recurring_select_dialog.js.coffee.erb index baeccd6a..8a94c707 100644 --- a/app/assets/javascripts/recurring_select_dialog.js.coffee.erb +++ b/app/assets/javascripts/recurring_select_dialog.js.coffee.erb @@ -139,6 +139,11 @@ window.RecurringSelectDialog = interval_input = section.find('.rs_yearly_interval') interval_input.val(@current_rule.hash.interval) interval_input.on "change keyup", @intervalChanged + + @current_rule.hash.validations ||= {} + @current_rule.hash.validations.day_of_month ||= [] + @current_rule.hash.validations.day_of_week ||= {} + @init_calendar_year(section) section.show() @@ -220,6 +225,17 @@ window.RecurringSelectDialog = @content.find(".rs_calendar_week").toggle(week_mode) @content.find(".rs_calendar_day").toggle(!week_mode) + init_calendar_year: (section) => + yearly_calendar = section.find(".rs_calendar_year") + yearly_calendar.html "" + for num in [1..31] + yearly_calendar.append (day_link = $(document.createElement("a")).text(num)) + if $.inArray(num, @current_rule.hash.validations.day_of_month) != -1 + day_link.addClass("selected") + + section.find("#rs_yearly_months").on "change", @monthSelectedChanged + yearly_calendar.find("a").on "click tap", @dateOfYearChanged + # ========================= Change callbacks =============================== freqChanged: => @@ -298,6 +314,36 @@ window.RecurringSelectDialog = @summaryUpdate() false + monthSelectedChanged: (event) => + selected_month = @content.find("#rs_yearly_months").val() + days_in_month = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] + + yearly_calendar = @content.find(".rs_calendar_year") + yearly_calendar.html "" + for num in [1..days_in_month[selected_month]] + yearly_calendar.append (day_link = $(document.createElement("a")).text(num)) + if $.inArray(num, @current_rule.hash.validations.day_of_month) != -1 + day_link.addClass("selected") + yearly_calendar.find("a").on "click tap", @dateOfYearChanged + false + + dateOfYearChanged: (event) => + selected_month = parseInt(@content.find("#rs_yearly_months").val()) + 1 + yearly_calendar = @content.find(".rs_calendar_year") + yearly_calendar.find("a").removeClass("selected") + $(event.currentTarget).toggleClass("selected") + @current_rule.str = null + @current_rule.hash ||= {} + @current_rule.hash.validations = {} + raw_days = @content.find(".yearly_options .rs_calendar_year a.selected").map -> + res = if $(this).text() == $.fn.recurring_select.texts["last_day"] then -1 else parseInt($(this).text()) + res + @current_rule.hash.validations.day_of_month = raw_days.get() + @current_rule.hash.validations.month_of_year = selected_month + @summaryUpdate() + false + + # ========================= Change callbacks =============================== template: () -> @@ -358,6 +404,21 @@ window.RecurringSelectDialog = #{$.fn.recurring_select.texts["years"]}

+ +

diff --git a/app/assets/stylesheets/recurring_select.scss b/app/assets/stylesheets/recurring_select.scss index 4d5bd72f..adf782f1 100644 --- a/app/assets/stylesheets/recurring_select.scss +++ b/app/assets/stylesheets/recurring_select.scss @@ -53,7 +53,7 @@ select { } } - .rs_calendar_day, .rs_calendar_week { + .rs_calendar_day, .rs_calendar_week, .rs_calendar_year { width:155px; a {display:inline-block; text-align:center; width:15px; padding:5px 3px; font-size:12px; border-style:solid; border-color:#ccc; border-width:1px 1px 1px 1px; margin:-1px 0 0 -1px; line-height:10px; background-color:#fff; font-weight:bold; &.selected {background-color:#89a; color:#fff; @include gradiant(#9ab, #789); @include inset_shadows(0px, 1px, 2px, rgba(0,0,0,0.2)); text-shadow:0 1px 1px #333;} diff --git a/lib/recurring_select.rb b/lib/recurring_select.rb index 5f727ed4..53eedec6 100644 --- a/lib/recurring_select.rb +++ b/lib/recurring_select.rb @@ -78,6 +78,10 @@ def self.filter_params(params) params[:validations][:day_of_year] = params[:validations][:day_of_year].collect(&:to_i) end + if params[:validations][:month_of_year] + params[:validations][:month_of_year] = params[:validations][:month_of_year].to_i + end + params end end From cfee2a36b5676719fb49c704af8896d33a21cf42 Mon Sep 17 00:00:00 2001 From: Adam Rainsby Date: Mon, 11 Jan 2016 15:31:17 +0000 Subject: [PATCH 2/4] Change labels and change date on rule when month is changed --- .../javascripts/recurring_select.js.coffee | 4 ++-- .../javascripts/recurring_select/fr.js.coffee | 6 +++--- .../recurring_select_dialog.js.coffee.erb | 19 ++++++++++++++----- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/app/assets/javascripts/recurring_select.js.coffee b/app/assets/javascripts/recurring_select.js.coffee index d4932139..e56dbce2 100644 --- a/app/assets/javascripts/recurring_select.js.coffee +++ b/app/assets/javascripts/recurring_select.js.coffee @@ -91,8 +91,8 @@ $.fn.recurring_select.texts = { every: "Every" days: "day(s)" weeks_on: "week(s) on" - months: "month(s)" - years: "year(s)" + months_on: "month(s) on" + years_on: "year(s) on" day_of_month: "Day of month" day_of_week: "Day of week" cancel: "Cancel" diff --git a/app/assets/javascripts/recurring_select/fr.js.coffee b/app/assets/javascripts/recurring_select/fr.js.coffee index 687890cf..77fa3446 100644 --- a/app/assets/javascripts/recurring_select/fr.js.coffee +++ b/app/assets/javascripts/recurring_select/fr.js.coffee @@ -10,8 +10,8 @@ $.fn.recurring_select.texts = { every: "Tous les" days: "jour(s)" weeks_on: "semaine(s) le" - months: "mois" - years: "année(s)" + months_on: "mois le" + years_on: "année(s) le" cancel: "Annuler" day_of_month: "Jour du mois" day_of_week: "Jour de la semaine" @@ -22,4 +22,4 @@ $.fn.recurring_select.texts = { days_first_letter: ["D", "L", "M", "M", "J", "V", "S" ] order: ["1er", "2ème", "3ème", "4ème", "5ème", "Dernier"] show_week: [true, true, true, true, false, false] -} \ No newline at end of file +} diff --git a/app/assets/javascripts/recurring_select_dialog.js.coffee.erb b/app/assets/javascripts/recurring_select_dialog.js.coffee.erb index 8a94c707..96486dc1 100644 --- a/app/assets/javascripts/recurring_select_dialog.js.coffee.erb +++ b/app/assets/javascripts/recurring_select_dialog.js.coffee.erb @@ -325,25 +325,34 @@ window.RecurringSelectDialog = if $.inArray(num, @current_rule.hash.validations.day_of_month) != -1 day_link.addClass("selected") yearly_calendar.find("a").on "click tap", @dateOfYearChanged + @selectMonthAndDay() false dateOfYearChanged: (event) => - selected_month = parseInt(@content.find("#rs_yearly_months").val()) + 1 yearly_calendar = @content.find(".rs_calendar_year") yearly_calendar.find("a").removeClass("selected") $(event.currentTarget).toggleClass("selected") + @selectMonthAndDay() + false + + selectMonthAndDay: () => + selected_month = parseInt(@content.find("#rs_yearly_months").val()) + 1 @current_rule.str = null @current_rule.hash ||= {} @current_rule.hash.validations = {} raw_days = @content.find(".yearly_options .rs_calendar_year a.selected").map -> res = if $(this).text() == $.fn.recurring_select.texts["last_day"] then -1 else parseInt($(this).text()) res - @current_rule.hash.validations.day_of_month = raw_days.get() - @current_rule.hash.validations.month_of_year = selected_month + if raw_days.get().length != 0 + @current_rule.hash.validations.day_of_month = raw_days.get() + @current_rule.hash.validations.month_of_year = selected_month + else + @current_rule.hash.validations = null @summaryUpdate() false + # ========================= Change callbacks =============================== template: () -> @@ -389,7 +398,7 @@ window.RecurringSelectDialog =

#{$.fn.recurring_select.texts["every"]} - #{$.fn.recurring_select.texts["months"]}: + #{$.fn.recurring_select.texts["months_on"]}:

@@ -402,7 +411,7 @@ window.RecurringSelectDialog =

#{$.fn.recurring_select.texts["every"]} - #{$.fn.recurring_select.texts["years"]} + #{$.fn.recurring_select.texts["years_on"]}