conschedule 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (77) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +154 -0
  4. data/Rakefile +37 -0
  5. data/app/assets/config/conschedule_manifest.js +2 -0
  6. data/app/assets/fonts/icomoon.eot +0 -0
  7. data/app/assets/fonts/proxima_nova_100.eot +0 -0
  8. data/app/assets/fonts/proxima_nova_400.eot +0 -0
  9. data/app/assets/fonts/proxima_nova_700.eot +0 -0
  10. data/app/assets/images/conschedule/chosen-sprite-small.png +0 -0
  11. data/app/assets/images/conschedule/chosen-sprite.png +0 -0
  12. data/app/assets/images/conschedule/close.png +0 -0
  13. data/app/assets/images/conschedule/spinner-small.gif +0 -0
  14. data/app/assets/images/conschedule/spinner.gif +0 -0
  15. data/app/assets/javascripts/conschedule/application.js +22 -0
  16. data/app/assets/javascripts/conschedule/calendar.js +467 -0
  17. data/app/assets/javascripts/conschedule/date.js +104 -0
  18. data/app/assets/javascripts/conschedule/form.js +53 -0
  19. data/app/assets/javascripts/conschedule/home.js +149 -0
  20. data/app/assets/javascripts/conschedule/jquery-ui-datepicker.min.js +1674 -0
  21. data/app/assets/javascripts/conschedule/jquery.easing.min.js +44 -0
  22. data/app/assets/javascripts/conschedule/jquery.validate.js +1532 -0
  23. data/app/assets/javascripts/conschedule/js_time_zone.js +1433 -0
  24. data/app/assets/javascripts/conschedule/moment-timezone.js +1209 -0
  25. data/app/assets/javascripts/conschedule/moment.js +4195 -0
  26. data/app/assets/javascripts/conschedule/schedules.js +22 -0
  27. data/app/assets/javascripts/conschedule/time_zones_drop_down.js +609 -0
  28. data/app/assets/stylesheets/conschedule/application.css +4 -0
  29. data/app/assets/stylesheets/conschedule/common.css +816 -0
  30. data/app/assets/stylesheets/conschedule/home.css +2441 -0
  31. data/app/assets/stylesheets/conschedule/main.css +884 -0
  32. data/app/assets/stylesheets/conschedule/schedules.css +4 -0
  33. data/app/controllers/conschedule/application_controller.rb +49 -0
  34. data/app/controllers/conschedule/schedules_controller.rb +125 -0
  35. data/app/helpers/conschedule/application_helper.rb +15 -0
  36. data/app/helpers/conschedule/schedules_helper.rb +43 -0
  37. data/app/jobs/conschedule/application_job.rb +4 -0
  38. data/app/mailers/conschedule/schedules_mailer.rb +46 -0
  39. data/app/models/conschedule/application_record.rb +5 -0
  40. data/app/models/conschedule/schedule.rb +63 -0
  41. data/app/views/conschedule/schedules/_confirmation.html.erb +38 -0
  42. data/app/views/conschedule/schedules/_page_one.html.erb +75 -0
  43. data/app/views/conschedule/schedules/_page_three.html.erb +94 -0
  44. data/app/views/conschedule/schedules/_page_two.html.erb +22 -0
  45. data/app/views/conschedule/schedules/_schedules.html.erb +122 -0
  46. data/app/views/conschedule/schedules/create.js.erb +11 -0
  47. data/app/views/conschedule/schedules/index.html.erb +123 -0
  48. data/app/views/conschedule/schedules/index.js.erb +3 -0
  49. data/app/views/conschedule/schedules/new.html.erb +11 -0
  50. data/app/views/conschedule/schedules_mailer/send_cancel_email_owner.html.erb +61 -0
  51. data/app/views/conschedule/schedules_mailer/send_cancel_email_user.html.erb +29 -0
  52. data/app/views/conschedule/schedules_mailer/send_confirmation_email_owner.html.erb +77 -0
  53. data/app/views/conschedule/schedules_mailer/send_confirmation_email_user.html.erb +30 -0
  54. data/app/views/kaminari/custom_theme/_first_page.html.erb +3 -0
  55. data/app/views/kaminari/custom_theme/_gap.html.erb +1 -0
  56. data/app/views/kaminari/custom_theme/_last_page.html.erb +3 -0
  57. data/app/views/kaminari/custom_theme/_next_page.html.erb +1 -0
  58. data/app/views/kaminari/custom_theme/_page.html.erb +5 -0
  59. data/app/views/kaminari/custom_theme/_paginator.html.erb +23 -0
  60. data/app/views/kaminari/custom_theme/_prev_page.html.erb +1 -0
  61. data/app/views/layouts/conschedule/application.html.erb +14 -0
  62. data/app/views/layouts/conschedule/mailer.html.erb +11 -0
  63. data/app/views/layouts/conschedule/schedules.html.erb +14 -0
  64. data/config/initializers/assets.rb +11 -0
  65. data/config/routes.rb +11 -0
  66. data/db/migrate/20160812085505_create_conschedule_schedules.rb +27 -0
  67. data/lib/conschedule.rb +34 -0
  68. data/lib/conschedule/configuration.rb +25 -0
  69. data/lib/conschedule/engine.rb +5 -0
  70. data/lib/conschedule/gem_dependencies.rb +2 -0
  71. data/lib/conschedule/version.rb +3 -0
  72. data/lib/generators/conschedule/install_generator.rb +23 -0
  73. data/lib/generators/conschedule/views_generator.rb +45 -0
  74. data/lib/generators/templates/README +40 -0
  75. data/lib/generators/templates/initializer.rb +25 -0
  76. data/lib/tasks/conschedule_tasks.rake +4 -0
  77. metadata +182 -0
@@ -0,0 +1,94 @@
1
+ <div id="main-region">
2
+ <div>
3
+ <div class="header">
4
+ <div class="js-profile-region">
5
+ <div class="wrapper">
6
+ <div class="step-back icon-arrow-left js-step-back">&nbsp;</div>
7
+ <div class="label">
8
+ <%= @page_info[:main_heading] %>
9
+ <div class="js-popover-region"></div>
10
+ </div>
11
+ </div>
12
+ </div>
13
+ </div>
14
+ <hr class="mbl">
15
+ <div class="wrapper">
16
+ <div class="notification js-event-error-block mbl" style="display: none;">
17
+ <span class="js-event-error-message"></span>
18
+ <a class="button ghost js-step-back">Find a new spot</a>
19
+ </div>
20
+ <div class="row adaptive">
21
+ <div class="col1of2 hidden-phone prm mbm">
22
+ <div class="mbs row">
23
+ <% unless @page_info[:purpose].blank? %>
24
+ <div class="marker" style="background-color: #fff200"></div>
25
+ <div class="last-col">
26
+ <h2><%= @page_info[:purpose] %></h2>
27
+ </div>
28
+ <% end %>
29
+ </div>
30
+ <div class="iconed-text emphasis slot-details"></div>
31
+ <div class="iconed-text tz-details"></div>
32
+ <div class="iconed-text">
33
+ <% unless @page_info[:instructions].blank? %>
34
+ <i class="icon-description"></i>
35
+ <div class="last-col">
36
+ <%= @page_info[:instructions] %>
37
+ </div>
38
+ <% end %>
39
+ </div>
40
+ <div class="iconed-text">
41
+ <% unless @page_info[:location_details].blank? %>
42
+ <i class="icon-location-target"></i>
43
+ <div class="last-col">
44
+ <%= @page_info[:location_details] %>
45
+ </div>
46
+ <% end %>
47
+ </div>
48
+ </div>
49
+ <div class="col1of2 plm">
50
+ <div class="error_explanation"></div>
51
+ <h2 class="mbm">Enter Details</h2>
52
+ <%= f.hidden_field :slot_start_time %>
53
+ <%= f.hidden_field :slot_end_time %>
54
+ <%= f.hidden_field :app_tz_offset %>
55
+ <%= f.hidden_field :user_tz_offset %>
56
+ <div class="row">
57
+ <div class="col1of2 prs">
58
+ <div class="field mbm">
59
+ <label>First Name *</label>
60
+ <%= f.text_field :first_name, autocomplete: "off", autocorrect: "off", maxlength: "155" %>
61
+ <span data-error="first_name"></span>
62
+ </div>
63
+ </div>
64
+ <div class="col1of2 pls">
65
+ <div class="field mbm">
66
+ <label>Last Name</label>
67
+ <%= f.text_field :last_name, autocomplete: "off", autocorrect: "off", maxlength: "155" %>
68
+ <span data-error="last_name"></span>
69
+ </div>
70
+ </div>
71
+ </div>
72
+ <div class="field mbm">
73
+ <label>Your phone *</label>
74
+ <%= f.text_field :phone, autocomplete: "off" %>
75
+ <span data-error="phone"></span>
76
+ </div>
77
+ <div class="field mbm">
78
+ <label>Your e-mail address *</label>
79
+ <%= f.text_field :email, autocomplete: "off" %>
80
+ <span data-error="email"></span>
81
+ </div>
82
+ <div class="field mbm">
83
+ <label>Message</label>
84
+ <%= f.text_area :message, autocomplete: "off", maxlength: "255", class: "js-input" %>
85
+ <span data-error="message"></span>
86
+ </div>
87
+ <div class="ptm">
88
+ <%= f.submit "Schedule Event", :class => "button schedule-event" %>
89
+ </div>
90
+ </div>
91
+ </div>
92
+ </div>
93
+ </div>
94
+ </div>
@@ -0,0 +1,22 @@
1
+ <div id="main-region">
2
+ <div>
3
+ <div class="header">
4
+ <div class="wrapper">
5
+ <div class="step-back icon-arrow-left js-step-back">&nbsp;</div>
6
+ <h2 class="selected_day"></h2>
7
+ <div class="mbm selected_date"></div>
8
+ <div class="mbl selected_tz"></div>
9
+ </div>
10
+ </div>
11
+ <hr class="mbl">
12
+ <div class="wrapper narrow">
13
+ <div class="text-center mbm">
14
+ </div>
15
+ <div class="row mbm">
16
+ <h2 class="left">Select a Time</h2>
17
+ </div>
18
+ <div class="js-spot-list mbl">
19
+ </div>
20
+ </div>
21
+ </div>
22
+ </div>
@@ -0,0 +1,122 @@
1
+ <ul class="date-list mbl">
2
+ <% unless @grouped.blank? %>
3
+ <% @grouped.each do |key,values| %>
4
+ <li class="date">
5
+ <div class="heading">
6
+ <%= fdtime(key.to_date,:date) %>
7
+ <% if is_today?(key.to_date,@page_info[:system_time_zone]) %>
8
+ <strong class="mls">
9
+ TODAY
10
+ </strong>
11
+ <% end %>
12
+ </div>
13
+ <div class="js-events-region">
14
+ <div class="event-list">
15
+ <% values.each do |value| %>
16
+ <div class="event <%= value.status %> collapsed">
17
+ <div class="js-title-region js-content-toggle">
18
+ <div class="title row">
19
+ <div class="duration ">
20
+ <div>
21
+ <span class="h4 time">
22
+ <%= slot_start_end_time(value,"app") %>
23
+ </span>
24
+ <span class="marker" style="background: #fff200;"></span>
25
+ </div>
26
+ <div class="locked-time muted">
27
+ <%= slot_start_end_time(value,"user") %> (<%= value.user_time_zone %>)
28
+ </div>
29
+ </div>
30
+ <div class="description">
31
+ <div class="toggle">
32
+ <div class="expand">
33
+ Details
34
+ <i class="icon-angle-down"></i>
35
+ </div>
36
+ <div class="collapse">
37
+ Close
38
+ <i class="icon-close"></i>
39
+ </div>
40
+ </div>
41
+ <div class="primary">
42
+ <a class="h4">
43
+ <strong class="user-name">
44
+ <%= value.full_name %>
45
+ </strong>
46
+ </a>
47
+ <span class="muted">with you</span>
48
+ </div>
49
+ <div class="secondary">
50
+ Event type
51
+ <strong class="schedule-name"><%= value.event_name %></strong>
52
+ </div>
53
+ <% if value.cancelled? %>
54
+ <div class="pts">
55
+ <small class="text-danger">
56
+ Cancel Message:
57
+ </small>
58
+ <small class="muted">
59
+ <%= cancel_reason(value) %>
60
+ </small>
61
+ </div>
62
+ <% end %>
63
+ </div>
64
+ </div>
65
+ </div>
66
+ <div class="details row js-content-body">
67
+ <div class="controls">
68
+ <% if value.display_action? %>
69
+ <a class="action-button js-cancel-event-button" href="" data-sch-id="<%= value.id %>">
70
+ <i class="icon-trash"></i>
71
+ <span class="label">
72
+ Cancel Event
73
+ </span>
74
+ </a>
75
+ <% end %>
76
+ </div>
77
+ <div class="content pvm">
78
+ <div class="entry">
79
+ <label>
80
+ Email
81
+ </label>
82
+ <div>
83
+ <%= value.email %>
84
+ </div>
85
+ </div>
86
+ <div class="entry">
87
+ <label>
88
+ Location
89
+ </label>
90
+ <div class="text-wrap">
91
+ <%= value.location_details %>
92
+ </div>
93
+ </div>
94
+ <div class="timestamp">
95
+ created <%= fdtime(value.created_at,:month_date) %>
96
+ </div>
97
+ </div>
98
+ </div>
99
+ </div>
100
+ <% end %>
101
+ </div>
102
+ </div>
103
+ </li>
104
+ <% end %>
105
+ <% else %>
106
+ <div class="centered muted ptl">
107
+ <% if @filters_applied %>
108
+ <h3 class="pvl">
109
+ <%= @filter_message %> matching the filtered criteria.
110
+ </h3>
111
+ <h3 class="pbl">
112
+ Suggestion:
113
+ <a class="js-reset-filters">reset filters </a>to see all <%= @suggestion_message %>.
114
+ </h3>
115
+ <% else %>
116
+ <h3 class="pvl">
117
+ <%= @filter_message %>
118
+ </h3>
119
+ <% end %>
120
+ </div>
121
+ <% end %>
122
+ </ul>
@@ -0,0 +1,11 @@
1
+ $(".error_explanation").html("")
2
+ <% unless @schedule.errors.any? %>
3
+ $(".page-loaded").html("<%= escape_javascript(render 'confirmation') %>")
4
+ <% else %>
5
+ $(".error_explanation").append("<h2><%= pluralize(@schedule.errors.count, 'error')%> prohibited this form from being saved:</h2>")
6
+ $(".error_explanation").append("<p class='error-heading'>There were problems with the following fields:</p>")
7
+ $(".error_explanation").append("<ul class='form-errors'></ul>")
8
+ <% @schedule.errors.full_messages.each do |message| %>
9
+ $("ul.form-errors").append($("<li />").html("<%= message.html_safe %>"))
10
+ <% end %>
11
+ <% end %>
@@ -0,0 +1,123 @@
1
+ <div id="popup-region"></div>
2
+ <div class="main-wrapper">
3
+ <div class="body-content">
4
+ <div id="main-region" id="main-region">
5
+ <div class="dashboard">
6
+ <div class="controls">
7
+ <div class="wrapper">
8
+ <div class="scopes-row">
9
+ <div class="js-scope-filter-region">
10
+ <div class="tabs">
11
+ <div class="tab active" data-value="user">
12
+ My Schedules
13
+ </div>
14
+ </div>
15
+ </div>
16
+ <div class="js-daterangepicker-region">
17
+ <div class="daterange">
18
+ <div class="js-daterangepicker-toggle">
19
+ <%= @date_range_label %>
20
+ <i class="icon-angle-down"></i>
21
+ </div>
22
+ </div>
23
+ </div>
24
+ </div>
25
+ <div class="event-types-row">
26
+ <div class="js-event-types-region left">
27
+ <div class="quick-menu"></div>
28
+ </div>
29
+ <div class="js-filters-toggle-region last-col">
30
+ <div class="filters-toggle scope-user">
31
+ <span class="js-filters-toggle right">
32
+ <small class="label filter-label">Show Filter</small>
33
+ <i class="icon-manage"></i>
34
+ </span>
35
+ </div>
36
+ </div>
37
+ </div>
38
+ </div>
39
+ <div class="filters-row">
40
+ <div class="wrapper js-nested-filters-region" style="display:none;">
41
+ <div class="filters row">
42
+ <div class="row annotation">
43
+ <small>Show me events matching:</small>
44
+ </div>
45
+ <div class="row">
46
+ <div class="filters-list js-filters-list">
47
+ <div class="filter">
48
+ <div class="name">Status</div>
49
+ <span class="label muted js-label events-tab">
50
+ Active Events
51
+ <i class="icon-angle-down"></i>
52
+ </span>
53
+ <div class="js-content-region event-options" style="display:none;">
54
+ <div class="options-dropdown">
55
+ <div style="max-height: 260px;" class="scroller">
56
+ <ul class="checkbox-list js-filter-items">
57
+ <li class="checkbox-group">
58
+ <div class="present-items plm js-present-items-region">
59
+ <ul>
60
+ <li>
61
+ <div class="checkbox">
62
+ <input checked="checked" class="js-checkbox filter-active" id="option-c514" type="checkbox" data-filter-type="active">
63
+ <label for="option-c514">
64
+ Active events
65
+ </label>
66
+ </div>
67
+ </li>
68
+ <li>
69
+ <div class="checkbox">
70
+ <input class="js-checkbox filter-cancel" id="option-c515" type="checkbox" data-filter-type="canceled">
71
+ <label for="option-c515">
72
+ Cancelled events
73
+ </label>
74
+ </div>
75
+ </li>
76
+ </ul>
77
+ </div>
78
+ <div class="plm js-deleted-items-region"></div>
79
+ </li>
80
+ </ul>
81
+ <div class="empty muted hidden js-search-empty">
82
+ No Status match your search.
83
+ </div>
84
+ </div>
85
+ <div class="decision centered">
86
+ <button class="mrs js-apply">Apply</button>
87
+ <button class="hollow js-close">Cancel</button>
88
+ </div>
89
+ </div>
90
+ </div>
91
+ </div>
92
+ </div>
93
+ <span class="ghost-action js-clear-filters" style="display:none;">
94
+ Reset Filters
95
+ </span>
96
+ </div>
97
+ </div>
98
+ </div>
99
+ </div>
100
+ </div>
101
+ <div class="wrapper">
102
+ <div class="js-summary-region pagination-summary">
103
+ <div class="row muted">
104
+ <% unless @grouped.blank? %>
105
+ <strong class="pagination-entries">
106
+ <%= page_entries_info @schedules, entry_name: 'Event' %>
107
+ </strong>
108
+ <% end %>
109
+ </div>
110
+ </div>
111
+ <div class="js-results-region">
112
+ <div class="schedule">
113
+ <%= render 'schedules' %>
114
+ </div>
115
+ </div>
116
+ <div class="schedule-pagination">
117
+ <%= paginate @schedules, theme: 'custom_theme', remote: true %>
118
+ </div>
119
+ </div>
120
+ </div>
121
+ </div>
122
+ </div>
123
+ </div>
@@ -0,0 +1,3 @@
1
+ $('.schedule').html("<%= escape_javascript(render 'schedules') %>");
2
+ $('.schedule-pagination').html("<%= escape_javascript(paginate(@schedules, theme: 'custom_theme', remote: true).to_s) %>");
3
+ $('.pagination-entries').html("<%= escape_javascript(page_entries_info(@schedules, entry_name: 'Events')) %>");
@@ -0,0 +1,11 @@
1
+ <%= form_for @schedule, remote: true, html: {class: 'schedule_wizard'} do |f| %>
2
+ <fieldset class="section-division">
3
+ <%= render 'page_one', f: f %>
4
+ </fieldset>
5
+ <fieldset class="section-division">
6
+ <%= render 'page_two' %>
7
+ </fieldset>
8
+ <fieldset class="section-division">
9
+ <%= render 'page_three', f: f %>
10
+ </fieldset>
11
+ <% end %>
@@ -0,0 +1,61 @@
1
+ <div bgcolor="#ffffff" style="background-color:#ffffff">
2
+ <div style="padding:20px 0;margin:0 auto;max-width:600px">
3
+ <table style="width:80%;margin:0 auto;padding-bottom:20px;border-bottom:1px dashed #dadada">
4
+ <tbody>
5
+ <tr>
6
+ <td style="text-align:center">
7
+ </td>
8
+ </tr>
9
+ </tbody>
10
+ </table>
11
+ <table style="width:80%;margin:30px auto 0;font-size:16px">
12
+ <tbody>
13
+ <tr>
14
+ <td style="color:#666a7a;line-height:22px">
15
+ <p>Hi <%= Conschedule.contact_name %>,</p>
16
+ <p style="margin-top:20px">The event below has been canceled.</p>
17
+ <p style="margin-top:20px">
18
+ <strong style="font-size:14px">Invitee:</strong>
19
+ <br>
20
+ <span style="font-size:16px"><%= @schedule.full_name %></span>
21
+ </p>
22
+ <p style="margin-top:20px">
23
+ <strong style="font-size:14px">Invitee Email:</strong>
24
+ <br>
25
+ <span style="font-size:16px">
26
+ <a href="mailto:<%= @schedule.email %>" target="_blank"><%= @schedule.email %></a>
27
+ </span>
28
+ </p>
29
+ <p style="margin-top:20px">
30
+ <strong style="font-size:14px">Event Date/Time:</strong>
31
+ <br>
32
+ <span style="font-size:16px">
33
+ <span tabindex="0">
34
+ <span><%= @slot_start_time.strftime("%-l:%M%P") %></span>
35
+ </span> -
36
+ <span tabindex="0">
37
+ <span><%= @schedule.slot_start_time.strftime("%A, %B %-d, %Y") %></span>
38
+ </span> (<%= @schedule.app_tz_offset %>)
39
+ </span>
40
+ </p>
41
+ <% unless @schedule.cancel_reason.blank? %>
42
+ <p style="margin-top:20px;color:#e41600">
43
+ <strong style="font-size:14px">Cancellation Reason:</strong>
44
+ <br>
45
+ <span style="font-size:16px"><%= @schedule.cancel_reason %></span>
46
+ </p>
47
+ <% end %>
48
+ </td>
49
+ </tr>
50
+ </tbody>
51
+ </table>
52
+ <table style="width:80%;margin:30px auto;border-top:1px dashed #dadada">
53
+ <tbody>
54
+ <tr>
55
+ <td style="color:#a8a8a8;padding-top:15px">
56
+ </td>
57
+ </tr>
58
+ </tbody>
59
+ </table>
60
+ </div>
61
+ </div>