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"]}