aureus 1.3.1 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +4 -1
- data/Gemfile +9 -8
- data/Gemfile.lock +105 -104
- data/README.md +80 -0
- data/Rakefile +3 -16
- data/app/assets/javascripts/aureus/index.js +78 -20
- data/app/assets/stylesheets/aureus/index.scss +3 -35
- data/app/assets/stylesheets/aureus/skin/default.scss +52 -0
- data/app/assets/stylesheets/aureus/theme.scss +7 -0
- data/app/assets/stylesheets/aureus/theme/base.scss +19 -0
- data/app/assets/stylesheets/aureus/theme/content.scss +65 -0
- data/app/assets/stylesheets/aureus/{form.scss → theme/form.scss} +27 -27
- data/app/assets/stylesheets/aureus/theme/messages.scss +16 -0
- data/app/assets/stylesheets/aureus/theme/navigation.scss +42 -0
- data/app/assets/stylesheets/aureus/theme/table.scss +121 -0
- data/app/assets/stylesheets/aureus/theme/toolbar.scss +80 -0
- data/aureus.gemspec +21 -12
- data/config.ru +10 -0
- data/lib/aureus.rb +22 -18
- data/lib/aureus/components/box.rb +58 -0
- data/lib/aureus/components/content.rb +19 -0
- data/lib/aureus/components/data_table.rb +169 -0
- data/lib/aureus/components/listing.rb +43 -0
- data/lib/aureus/components/messages.rb +27 -0
- data/lib/aureus/components/navigation.rb +48 -0
- data/lib/aureus/components/row.rb +69 -0
- data/lib/aureus/components/simple_map.rb +21 -0
- data/lib/aureus/components/toolbar.rb +124 -0
- data/lib/aureus/engine.rb +8 -2
- data/lib/aureus/helper.rb +56 -55
- data/lib/aureus/renderable.rb +4 -12
- data/lib/aureus/version.rb +2 -2
- data/lib/generators/aureus/devise_i18n/devise_i18n_generator.rb +17 -12
- data/{config → lib/generators/aureus/devise_i18n}/locales/devise_base.de.yml +0 -0
- data/{config → lib/generators/aureus/devise_i18n}/locales/devise_base.en.yml +1 -1
- data/{config → lib/generators/aureus/devise_i18n}/locales/devise_mail.de.yml +1 -1
- data/{config → lib/generators/aureus/devise_i18n}/locales/devise_mail.en.yml +1 -1
- data/{config → lib/generators/aureus/devise_i18n}/locales/devise_ui.de.yml +0 -0
- data/{config → lib/generators/aureus/devise_i18n}/locales/devise_ui.en.yml +0 -0
- data/lib/generators/aureus/devise_invitable_i18n/devise_invitable_i18n_generator.rb +25 -0
- data/lib/generators/aureus/devise_invitable_i18n/locales/devise_invitable_base.de.yml +11 -0
- data/lib/generators/aureus/devise_invitable_i18n/locales/devise_invitable_base.en.yml +11 -0
- data/lib/generators/aureus/devise_invitable_i18n/locales/devise_invitable_mail.de.yml +9 -0
- data/lib/generators/aureus/devise_invitable_i18n/locales/devise_invitable_mail.en.yml +9 -0
- data/lib/generators/aureus/devise_invitable_i18n/locales/devise_invitable_ui.de.yml +12 -0
- data/lib/generators/aureus/devise_invitable_i18n/locales/devise_invitable_ui.en.yml +12 -0
- data/lib/generators/aureus/devise_invitable_views/devise_invitable_views_generator.rb +23 -0
- data/lib/generators/aureus/devise_invitable_views/templates/devise/invitations/edit.html.haml +9 -0
- data/lib/generators/aureus/devise_invitable_views/templates/devise/invitations/new.html.haml +8 -0
- data/lib/generators/aureus/devise_invitable_views/templates/devise/mailer/invitation_instructions.html.haml +5 -0
- data/lib/generators/aureus/devise_views/devise_views_generator.rb +17 -15
- data/lib/generators/aureus/devise_views/templates/devise/confirmations/new.html.haml +5 -5
- data/lib/generators/aureus/devise_views/templates/devise/mailer/confirmation_instructions.html.haml +3 -3
- data/lib/generators/aureus/devise_views/templates/devise/mailer/reset_password_instructions.html.haml +5 -5
- data/lib/generators/aureus/devise_views/templates/devise/mailer/unlock_instructions.html.haml +4 -4
- data/lib/generators/aureus/devise_views/templates/devise/passwords/edit.html.haml +7 -7
- data/lib/generators/aureus/devise_views/templates/devise/passwords/new.html.haml +5 -5
- data/lib/generators/aureus/devise_views/templates/devise/registrations/edit.html.haml +9 -9
- data/lib/generators/aureus/devise_views/templates/devise/registrations/new.html.haml +7 -7
- data/lib/generators/aureus/devise_views/templates/devise/sessions/new.html.haml +7 -7
- data/lib/generators/aureus/devise_views/templates/devise/shared/_links.html.haml +6 -6
- data/lib/generators/aureus/devise_views/templates/devise/unlocks/new.html.haml +5 -5
- data/lib/generators/aureus/layout/layout_generator.rb +10 -10
- data/lib/generators/aureus/layout/templates/layout.html.haml +8 -8
- data/lib/generators/aureus/views/templates/views/_form.html.haml +3 -3
- data/lib/generators/aureus/views/templates/views/_item.html.haml +2 -2
- data/lib/generators/aureus/views/templates/views/_list.html.haml +8 -8
- data/lib/generators/aureus/views/templates/views/edit.html.haml +4 -4
- data/lib/generators/aureus/views/templates/views/index.html.haml +3 -3
- data/lib/generators/aureus/views/templates/views/new.html.haml +4 -4
- data/lib/generators/aureus/views/templates/views/show.html.haml +4 -4
- data/lib/generators/aureus/views/views_generator.rb +70 -68
- data/spec/controllers/all_spec.rb +19 -0
- data/spec/internal/app/assets/javascripts/application.js +9 -0
- data/spec/internal/app/assets/stylesheets/application.scss +5 -0
- data/spec/internal/app/controllers/all_controller.rb +14 -0
- data/spec/internal/app/controllers/resources_controller.rb +2 -0
- data/spec/{lib/helper → internal/app/models}/resource.rb +0 -0
- data/spec/internal/app/views/all/centered.html.haml +5 -0
- data/spec/internal/app/views/all/index.html.haml +39 -0
- data/spec/internal/app/views/layouts/application.html.haml +24 -0
- data/spec/internal/app/views/layouts/naked.html.haml +10 -0
- data/spec/internal/config/database.yml +3 -0
- data/spec/internal/config/routes.rb +5 -0
- data/spec/internal/db/schema.rb +10 -0
- data/spec/internal/log/.gitignore +1 -0
- data/spec/internal/public/favicon.ico +0 -0
- data/spec/lib/generators/devise_i18n_spec.rb +19 -0
- data/spec/lib/generators/devise_invitable_i18n_spec.rb +19 -0
- data/spec/lib/generators/devise_invitable_views_spec.rb +19 -0
- data/spec/lib/generators/devise_views_spec.rb +25 -0
- data/spec/lib/generators/layout_spec.rb +17 -0
- data/spec/lib/generators/views_spec.rb +26 -0
- data/spec/requests/all_spec.rb +12 -0
- data/spec/spec_helper.rb +15 -0
- metadata +219 -78
- data/.rspec +0 -2
- data/Guardfile +0 -4
- data/Readme.md +0 -370
- data/TODO.md +0 -11
- data/app/assets/images/aureus/background.png +0 -0
- data/app/assets/images/aureus/topbar.png +0 -0
- data/app/assets/javascripts/aureus/defaults.js +0 -30
- data/app/assets/javascripts/aureus/extensions.js +0 -42
- data/app/assets/javascripts/aureus/functions.js +0 -67
- data/app/assets/javascripts/aureus/plugins/jquery-calendrical.js +0 -508
- data/app/assets/javascripts/aureus/plugins/jquery-datatables.js +0 -11838
- data/app/assets/javascripts/aureus/plugins/jquery-qtip.js +0 -15
- data/app/assets/stylesheets/aureus/base.scss +0 -48
- data/app/assets/stylesheets/aureus/content.scss +0 -100
- data/app/assets/stylesheets/aureus/mixins.scss +0 -43
- data/app/assets/stylesheets/aureus/navigation.scss +0 -43
- data/app/assets/stylesheets/aureus/reset.scss +0 -50
- data/app/assets/stylesheets/aureus/table.scss +0 -153
- data/app/assets/stylesheets/aureus/topbar.scss +0 -89
- data/app/assets/stylesheets/aureus/ui.scss +0 -98
- data/lib/aureus/box.rb +0 -54
- data/lib/aureus/content.rb +0 -15
- data/lib/aureus/data_table.rb +0 -148
- data/lib/aureus/listing.rb +0 -39
- data/lib/aureus/map.rb +0 -17
- data/lib/aureus/messages.rb +0 -23
- data/lib/aureus/navigation.rb +0 -42
- data/lib/aureus/row.rb +0 -65
- data/lib/aureus/toolbar.rb +0 -99
- data/spec/lib/helper/schema.rb +0 -6
- data/spec/lib/render_spec.rb +0 -16
- data/spec/lib/spec_helper.rb +0 -21
- data/spec/lib/views/box.haml +0 -14
- data/spec/lib/views/content.haml +0 -2
- data/spec/lib/views/datatable.haml +0 -11
- data/spec/lib/views/listing.haml +0 -5
- data/spec/lib/views/messages.haml +0 -2
- data/spec/lib/views/navigation.haml +0 -4
- data/spec/lib/views/row.haml +0 -28
- data/spec/lib/views/toolbar.haml +0 -11
@@ -1,67 +0,0 @@
|
|
1
|
-
function aureus_remove_messages_after(seconds) {
|
2
|
-
setTimeout(function() {
|
3
|
-
$("#messages p").fadeOut();
|
4
|
-
}, seconds*1000);
|
5
|
-
}
|
6
|
-
|
7
|
-
function aureus_setup_i18n(default_locale, current_locale) {
|
8
|
-
I18n.defaultLocale = default_locale;
|
9
|
-
I18n.locale = current_locale;
|
10
|
-
}
|
11
|
-
|
12
|
-
function aureus_datatables_decorate() {
|
13
|
-
$.fn.dataTableExt.oStdClasses.sWrapper = "datatable-wrapper";
|
14
|
-
$.fn.dataTableExt.oStdClasses.sLength = "datatable-length";
|
15
|
-
$.fn.dataTableExt.oStdClasses.sFilter = "datatable-filter";
|
16
|
-
$.fn.dataTableExt.oStdClasses.sInfo = "datatable-info";
|
17
|
-
$.fn.dataTableExt.oStdClasses.sPaging = "datatable-paging";
|
18
|
-
|
19
|
-
$(".datatable").each(function(){
|
20
|
-
$(this).dataTable({
|
21
|
-
sDom: "<'toolbar'fi>t",
|
22
|
-
oLanguage: aureus_datatable_language_config,
|
23
|
-
bPaginate: false,
|
24
|
-
aoColumns: aureus_datatables_column_configurator($(this))
|
25
|
-
});
|
26
|
-
});
|
27
|
-
|
28
|
-
$(".datatable-no-toolbar").each(function(){
|
29
|
-
$(this).dataTable({
|
30
|
-
sDom: "t",
|
31
|
-
oLanguage: aureus_datatable_language_config,
|
32
|
-
bPaginate: false,
|
33
|
-
aoColumns: aureus_datatables_column_configurator($(this))
|
34
|
-
});
|
35
|
-
});
|
36
|
-
}
|
37
|
-
|
38
|
-
function aureus_trigger_form(selector) {
|
39
|
-
$(selector).submit();
|
40
|
-
}
|
41
|
-
|
42
|
-
function aureus_datatables_translate() {
|
43
|
-
aureus_datatable_language_config = {
|
44
|
-
sSearch : I18n.t("aureus.datatables.search"),
|
45
|
-
sLengthMenu: I18n.t("aureus.datatables.lenght_menu"),
|
46
|
-
sZeroRecords: I18n.t("aureus.datatables.zero_records"),
|
47
|
-
sInfo: I18n.t("aureus.datatables.info"),
|
48
|
-
sInfoEmpty: I18n.t("aureus.datatables.info_empty"),
|
49
|
-
sInfoFiltered: I18n.t("aureus.datatables.info_filtered")
|
50
|
-
};
|
51
|
-
}
|
52
|
-
|
53
|
-
/* private */
|
54
|
-
|
55
|
-
function aureus_datatables_column_configurator(table) {
|
56
|
-
var ret = Array();
|
57
|
-
table.children("thead").children("tr").children("th").each(function(){
|
58
|
-
if($(this).hasClass("no-sorting")) {
|
59
|
-
ret.push({ bSortable: false });
|
60
|
-
} else if($(this).hasClass("date-sorting")) {
|
61
|
-
ret.push({ sType: "date-eu" });
|
62
|
-
} else {
|
63
|
-
ret.push(null);
|
64
|
-
}
|
65
|
-
});
|
66
|
-
return ret;
|
67
|
-
}
|
@@ -1,508 +0,0 @@
|
|
1
|
-
(function($) {
|
2
|
-
var monthNames = ['January', 'February', 'March', 'April', 'May', 'June',
|
3
|
-
'July', 'August', 'September', 'October', 'November', 'December'];
|
4
|
-
|
5
|
-
function getToday()
|
6
|
-
{
|
7
|
-
var date = new Date();
|
8
|
-
return new Date(date.getFullYear(), date.getMonth(), date.getDate());
|
9
|
-
}
|
10
|
-
|
11
|
-
function areDatesEqual(date1, date2)
|
12
|
-
{
|
13
|
-
return String(date1) == String(date2);
|
14
|
-
}
|
15
|
-
|
16
|
-
function daysInMonth(year, month)
|
17
|
-
{
|
18
|
-
if (year instanceof Date) return daysInMonth(year.getFullYear(), year.getMonth());
|
19
|
-
if (month == 1) {
|
20
|
-
var leapYear = (year % 4 == 0) &&
|
21
|
-
(!(year % 100 == 0) || (year % 400 == 0));
|
22
|
-
return leapYear ? 29 : 28;
|
23
|
-
} else if (month == 3 || month == 5 || month == 8 || month == 10) {
|
24
|
-
return 30;
|
25
|
-
} else {
|
26
|
-
return 31;
|
27
|
-
}
|
28
|
-
}
|
29
|
-
|
30
|
-
function dayAfter(date)
|
31
|
-
{
|
32
|
-
var year = date.getFullYear();
|
33
|
-
var month = date.getMonth();
|
34
|
-
var day = date.getDate();
|
35
|
-
var lastDay = daysInMonth(date);
|
36
|
-
return (day == lastDay) ?
|
37
|
-
((month == 11) ?
|
38
|
-
new Date(year + 1, 0, 1) :
|
39
|
-
new Date(year, month + 1, 1)
|
40
|
-
) :
|
41
|
-
new Date(year, month, day + 1);
|
42
|
-
}
|
43
|
-
|
44
|
-
function dayBefore(date)
|
45
|
-
{
|
46
|
-
var year = date.getFullYear();
|
47
|
-
var month = date.getMonth();
|
48
|
-
var day = date.getDate();
|
49
|
-
return (day == 1) ?
|
50
|
-
((month == 0) ?
|
51
|
-
new Date(year - 1, 11, daysInMonth(year - 1, 11)) :
|
52
|
-
new Date(year, month - 1, daysInMonth(year, month - 1))
|
53
|
-
) :
|
54
|
-
new Date(year, month, day - 1);
|
55
|
-
}
|
56
|
-
|
57
|
-
function monthAfter(year, month)
|
58
|
-
{
|
59
|
-
return (month == 11) ?
|
60
|
-
new Date(year + 1, 0, 1) :
|
61
|
-
new Date(year, month + 1, 1);
|
62
|
-
}
|
63
|
-
|
64
|
-
function formatDate(date, usa)
|
65
|
-
{
|
66
|
-
return (usa ?
|
67
|
-
((date.getMonth() + 1) + '/' + date.getDate()) :
|
68
|
-
(date.getDate() + '/' + (date.getMonth() + 1))
|
69
|
-
) + '/' + date.getFullYear();
|
70
|
-
}
|
71
|
-
|
72
|
-
function parseDate(date, usa)
|
73
|
-
{
|
74
|
-
if (usa) return new Date(date);
|
75
|
-
a = date.split(/[\.\-\/]/);
|
76
|
-
var day = a.shift();
|
77
|
-
var month = a.shift();
|
78
|
-
a.unshift(day);
|
79
|
-
a.unshift(month);
|
80
|
-
return new Date(a.join('/'));
|
81
|
-
}
|
82
|
-
|
83
|
-
function formatTime(hour, minute, options)
|
84
|
-
{
|
85
|
-
var printMinute = minute;
|
86
|
-
if (minute < 10) printMinute = '0' + minute;
|
87
|
-
|
88
|
-
if (options.isoTime) {
|
89
|
-
var printHour = hour
|
90
|
-
if (printHour < 10) printHour = '0' + hour;
|
91
|
-
return printHour + ':' + printMinute;
|
92
|
-
} else {
|
93
|
-
var printHour = hour % 12;
|
94
|
-
if (printHour == 0) printHour = 12;
|
95
|
-
|
96
|
-
if (options.meridiemUpperCase) {
|
97
|
-
var half = (hour < 12) ? 'AM' : 'PM';
|
98
|
-
} else {
|
99
|
-
var half = (hour < 12) ? 'am' : 'pm';
|
100
|
-
}
|
101
|
-
|
102
|
-
return printHour + ':' + printMinute + half;
|
103
|
-
}
|
104
|
-
}
|
105
|
-
|
106
|
-
function parseTime(text)
|
107
|
-
{
|
108
|
-
var match = match = /(\d+)\s*[:\-\.,]\s*(\d+)\s*(am|pm)?/i.exec(text);
|
109
|
-
if (match && match.length >= 3) {
|
110
|
-
var hour = Number(match[1]);
|
111
|
-
var minute = Number(match[2])
|
112
|
-
if (hour == 12 && match[3]) hour -= 12;
|
113
|
-
if (match[3] && match[3].toLowerCase() == 'pm') hour += 12;
|
114
|
-
return {
|
115
|
-
hour: hour,
|
116
|
-
minute: minute
|
117
|
-
};
|
118
|
-
} else {
|
119
|
-
return null;
|
120
|
-
}
|
121
|
-
}
|
122
|
-
|
123
|
-
function timeToMinutes(time)
|
124
|
-
{
|
125
|
-
return time && (time.hour * 60 + time.minute);
|
126
|
-
}
|
127
|
-
|
128
|
-
/**
|
129
|
-
* Generates calendar header, with month name, << and >> controls, and
|
130
|
-
* initials for days of the week.
|
131
|
-
*/
|
132
|
-
function renderCalendarHeader(element, year, month, options)
|
133
|
-
{
|
134
|
-
//Prepare thead element
|
135
|
-
var thead = $('<thead />');
|
136
|
-
var titleRow = $('<tr />').appendTo(thead);
|
137
|
-
|
138
|
-
//Generate << (back a month) link
|
139
|
-
$('<th />').addClass('monthCell').append(
|
140
|
-
$('<a href="javascript:;">«</a>')
|
141
|
-
.addClass('prevMonth')
|
142
|
-
.mousedown(function(e) {
|
143
|
-
renderCalendarPage(element,
|
144
|
-
month == 0 ? (year - 1) : year,
|
145
|
-
month == 0 ? 11 : (month - 1), options
|
146
|
-
);
|
147
|
-
e.preventDefault();
|
148
|
-
})
|
149
|
-
).appendTo(titleRow);
|
150
|
-
|
151
|
-
//Generate month title
|
152
|
-
$('<th />').addClass('monthCell').attr('colSpan', 5).append(
|
153
|
-
$('<a href="javascript:;">' + monthNames[month] + ' ' +
|
154
|
-
year + '</a>').addClass('monthName')
|
155
|
-
).appendTo(titleRow);
|
156
|
-
|
157
|
-
//Generate >> (forward a month) link
|
158
|
-
$('<th />').addClass('monthCell').append(
|
159
|
-
$('<a href="javascript:;">»</a>')
|
160
|
-
.addClass('nextMonth')
|
161
|
-
.mousedown(function() {
|
162
|
-
renderCalendarPage(element,
|
163
|
-
month == 11 ? (year + 1) : year,
|
164
|
-
month == 11 ? 0 : (month + 1), options
|
165
|
-
);
|
166
|
-
})
|
167
|
-
).appendTo(titleRow);
|
168
|
-
|
169
|
-
//Generate weekday initials row
|
170
|
-
var dayNames = $('<tr />').appendTo(thead);
|
171
|
-
$.each(String('SMTWTFS').split(''), function(k, v) {
|
172
|
-
$('<td />').addClass('dayName').append(v).appendTo(dayNames);
|
173
|
-
});
|
174
|
-
|
175
|
-
return thead;
|
176
|
-
}
|
177
|
-
|
178
|
-
function renderCalendarPage(element, year, month, options)
|
179
|
-
{
|
180
|
-
options = options || {};
|
181
|
-
|
182
|
-
var today = getToday();
|
183
|
-
|
184
|
-
var date = new Date(year, month, 1);
|
185
|
-
|
186
|
-
//Wind end date forward to saturday week after month
|
187
|
-
var endDate = monthAfter(year, month);
|
188
|
-
var ff = 6 - endDate.getDay();
|
189
|
-
if (ff < 6) ff += 7;
|
190
|
-
for (var i = 0; i < ff; i++) endDate = dayAfter(endDate);
|
191
|
-
|
192
|
-
var table = $('<table />');
|
193
|
-
renderCalendarHeader(element, year, month, options).appendTo(table);
|
194
|
-
|
195
|
-
var tbody = $('<tbody />').appendTo(table);
|
196
|
-
var row = $('<tr />');
|
197
|
-
|
198
|
-
//Rewind date to monday week before month
|
199
|
-
var rewind = date.getDay() + 7;
|
200
|
-
for (var i = 0; i < rewind; i++) date = dayBefore(date);
|
201
|
-
|
202
|
-
while (date <= endDate) {
|
203
|
-
var td = $('<td />')
|
204
|
-
.addClass('day')
|
205
|
-
.append(
|
206
|
-
$('<a href="javascript:;">' +
|
207
|
-
date.getDate() + '</a>'
|
208
|
-
).click((function() {
|
209
|
-
var thisDate = date;
|
210
|
-
|
211
|
-
return function() {
|
212
|
-
if (options && options.selectDate) {
|
213
|
-
options.selectDate(thisDate);
|
214
|
-
}
|
215
|
-
}
|
216
|
-
}()))
|
217
|
-
)
|
218
|
-
.appendTo(row);
|
219
|
-
|
220
|
-
var isToday = areDatesEqual(date, today);
|
221
|
-
var isSelected = options.selected &&
|
222
|
-
areDatesEqual(options.selected, date);
|
223
|
-
|
224
|
-
if (isToday) td.addClass('today');
|
225
|
-
if (isSelected) td.addClass('selected');
|
226
|
-
if (isToday && isSelected) td.addClass('today_selected');
|
227
|
-
if (date.getMonth() != month) td.addClass('nonMonth');
|
228
|
-
|
229
|
-
dow = date.getDay();
|
230
|
-
if (dow == 6) {
|
231
|
-
tbody.append(row);
|
232
|
-
row = $('<tr />');
|
233
|
-
}
|
234
|
-
date = dayAfter(date);
|
235
|
-
}
|
236
|
-
if (row.children().length) {
|
237
|
-
tbody.append(row);
|
238
|
-
} else {
|
239
|
-
row.remove();
|
240
|
-
}
|
241
|
-
|
242
|
-
element.empty().append(table);
|
243
|
-
}
|
244
|
-
|
245
|
-
function renderTimeSelect(element, options)
|
246
|
-
{
|
247
|
-
var minTime = timeToMinutes(options.minTime);
|
248
|
-
var maxTime = timeToMinutes(options.maxTime);
|
249
|
-
var defaultTime = timeToMinutes(options.defaultTime);
|
250
|
-
var selection = options.selection && timeToMinutes(parseTime(options.selection));
|
251
|
-
|
252
|
-
//Round selection to nearest time interval so that it matches a list item
|
253
|
-
selection = selection && (
|
254
|
-
(
|
255
|
-
Math.floor((selection - minTime) / options.timeInterval) *
|
256
|
-
options.timeInterval
|
257
|
-
) + minTime
|
258
|
-
);
|
259
|
-
|
260
|
-
var scrollTo; //Element to scroll the dropdown box to when shown
|
261
|
-
var ul = $('<ul />');
|
262
|
-
|
263
|
-
for (var time = minTime; time <= maxTime; time += options.timeInterval) {
|
264
|
-
(function(time) {
|
265
|
-
var hour = Math.floor(time / 60);
|
266
|
-
var minute = time % 60;
|
267
|
-
var timeText = formatTime(hour, minute, options);
|
268
|
-
var fullText = timeText;
|
269
|
-
if (options.showDuration) {
|
270
|
-
var duration = time - minTime;
|
271
|
-
if (duration < 60) {
|
272
|
-
fullText += ' (' + duration + ' mins)';
|
273
|
-
} else if (duration == 60) {
|
274
|
-
fullText += ' (1 hr)';
|
275
|
-
} else {
|
276
|
-
//Round partial hours to 1 decimal place
|
277
|
-
fullText += ' (' + (Math.round(duration / 60.0 * 10.0) / 10.0) + ' hrs)';
|
278
|
-
}
|
279
|
-
}
|
280
|
-
var li = $('<li />').append(
|
281
|
-
$('<a href="javascript:;">' + fullText + '</a>')
|
282
|
-
.click(function() {
|
283
|
-
if (options && options.selectTime) {
|
284
|
-
options.selectTime(timeText);
|
285
|
-
}
|
286
|
-
}).mousemove(function() {
|
287
|
-
$('li.selected', ul).removeClass('selected');
|
288
|
-
})
|
289
|
-
).appendTo(ul);
|
290
|
-
|
291
|
-
//Set to scroll to the default hour, unless already set
|
292
|
-
if (!scrollTo && time == defaultTime) scrollTo = li;
|
293
|
-
|
294
|
-
if (selection == time) {
|
295
|
-
//Highlight selected item
|
296
|
-
li.addClass('selected');
|
297
|
-
|
298
|
-
//Set to scroll to the selected hour
|
299
|
-
//
|
300
|
-
//This is set even if scrollTo is already set, since
|
301
|
-
//scrolling to selected hour is more important than
|
302
|
-
//scrolling to default hour
|
303
|
-
scrollTo = li;
|
304
|
-
}
|
305
|
-
})(time);
|
306
|
-
}
|
307
|
-
if (scrollTo) {
|
308
|
-
//Set timeout of zero so code runs immediately after any calling
|
309
|
-
//functions are finished (this is needed, since box hasn't been
|
310
|
-
//added to the DOM yet)
|
311
|
-
setTimeout(function() {
|
312
|
-
//Scroll the dropdown box so that scrollTo item is in
|
313
|
-
//the middle
|
314
|
-
element[0].scrollTop =
|
315
|
-
scrollTo[0].offsetTop - scrollTo.height() * 2;
|
316
|
-
}, 0);
|
317
|
-
}
|
318
|
-
element.empty().append(ul);
|
319
|
-
}
|
320
|
-
|
321
|
-
$.fn.calendricalDate = function(options)
|
322
|
-
{
|
323
|
-
options = options || {};
|
324
|
-
options.padding = options.padding || 4;
|
325
|
-
|
326
|
-
return this.each(function() {
|
327
|
-
var element = $(this);
|
328
|
-
var div;
|
329
|
-
var within = false;
|
330
|
-
|
331
|
-
element.bind('focus click', function() {
|
332
|
-
if (div) return;
|
333
|
-
var offset = element.position();
|
334
|
-
var padding = element.css('padding-left');
|
335
|
-
div = $('<div />')
|
336
|
-
.addClass('calendricalDatePopup')
|
337
|
-
.mouseenter(function() { within = true; })
|
338
|
-
.mouseleave(function() { within = false; })
|
339
|
-
.mousedown(function(e) {
|
340
|
-
e.preventDefault();
|
341
|
-
})
|
342
|
-
.css({
|
343
|
-
position: 'absolute',
|
344
|
-
left: offset.left,
|
345
|
-
top: offset.top + element.height() +
|
346
|
-
options.padding * 2
|
347
|
-
});
|
348
|
-
element.after(div);
|
349
|
-
|
350
|
-
var selected = parseDate(element.val(), options.usa);
|
351
|
-
if (!selected.getFullYear()) selected = getToday();
|
352
|
-
|
353
|
-
renderCalendarPage(
|
354
|
-
div,
|
355
|
-
selected.getFullYear(),
|
356
|
-
selected.getMonth(), {
|
357
|
-
selected: selected,
|
358
|
-
selectDate: function(date) {
|
359
|
-
within = false;
|
360
|
-
element.val(formatDate(date, options.usa));
|
361
|
-
div.remove();
|
362
|
-
div = null;
|
363
|
-
if (options.endDate) {
|
364
|
-
var endDate = parseDate(
|
365
|
-
options.endDate.val(), options.usa
|
366
|
-
);
|
367
|
-
if (endDate >= selected) {
|
368
|
-
options.endDate.val(formatDate(
|
369
|
-
new Date(
|
370
|
-
date.getTime() +
|
371
|
-
endDate.getTime() -
|
372
|
-
selected.getTime()
|
373
|
-
),
|
374
|
-
options.usa
|
375
|
-
));
|
376
|
-
}
|
377
|
-
}
|
378
|
-
}
|
379
|
-
}
|
380
|
-
);
|
381
|
-
}).blur(function() {
|
382
|
-
if (within){
|
383
|
-
if (div) element.focus();
|
384
|
-
return;
|
385
|
-
}
|
386
|
-
if (!div) return;
|
387
|
-
div.remove();
|
388
|
-
div = null;
|
389
|
-
});
|
390
|
-
});
|
391
|
-
};
|
392
|
-
|
393
|
-
$.fn.calendricalDateRange = function(options)
|
394
|
-
{
|
395
|
-
if (this.length >= 2) {
|
396
|
-
$(this[0]).calendricalDate($.extend({
|
397
|
-
endDate: $(this[1])
|
398
|
-
}, options));
|
399
|
-
$(this[1]).calendricalDate(options);
|
400
|
-
}
|
401
|
-
return this;
|
402
|
-
};
|
403
|
-
|
404
|
-
$.fn.calendricalTime = function(options)
|
405
|
-
{
|
406
|
-
options = options || {};
|
407
|
-
options.timeInterval = options.timeInterval || 30;
|
408
|
-
options.padding = options.padding || 4;
|
409
|
-
|
410
|
-
return this.each(function() {
|
411
|
-
var element = $(this);
|
412
|
-
var div;
|
413
|
-
var within = false;
|
414
|
-
|
415
|
-
element.bind('focus click', function() {
|
416
|
-
if (div) return;
|
417
|
-
|
418
|
-
var offset = element.position();
|
419
|
-
div = $('<div />')
|
420
|
-
.addClass('calendricalTimePopup')
|
421
|
-
.mouseenter(function() { within = true; })
|
422
|
-
.mouseleave(function() { within = false; })
|
423
|
-
.mousedown(function(e) {
|
424
|
-
e.preventDefault();
|
425
|
-
})
|
426
|
-
.css({
|
427
|
-
position: 'absolute',
|
428
|
-
left: offset.left,
|
429
|
-
top: offset.top + element.height() +
|
430
|
-
options.padding * 2
|
431
|
-
});
|
432
|
-
|
433
|
-
element.after(div);
|
434
|
-
|
435
|
-
var renderOptions = {
|
436
|
-
selection: element.val(),
|
437
|
-
selectTime: function(time) {
|
438
|
-
within = false;
|
439
|
-
element.val(time);
|
440
|
-
element.trigger("change");
|
441
|
-
div.remove();
|
442
|
-
div = null;
|
443
|
-
},
|
444
|
-
isoTime: options.isoTime || false,
|
445
|
-
meridiemUpperCase: options.meridiemUpperCase || false,
|
446
|
-
defaultTime: options.defaultTime || {hour: 8, minute: 0},
|
447
|
-
minTime: options.minTime || {hour: 0, minute: 0},
|
448
|
-
maxTime: options.maxTime || {hour: 23, minute: 59},
|
449
|
-
timeInterval: options.timeInterval || 30
|
450
|
-
};
|
451
|
-
|
452
|
-
if (options.startTime) {
|
453
|
-
var startTime = parseTime(options.startTime.val());
|
454
|
-
//Don't display duration if part of a datetime range,
|
455
|
-
//and start and end times are on different days
|
456
|
-
if (options.startDate && options.endDate &&
|
457
|
-
!areDatesEqual(parseDate(options.startDate.val()),
|
458
|
-
parseDate(options.endDate.val()))) {
|
459
|
-
startTime = null;
|
460
|
-
}
|
461
|
-
if (startTime) {
|
462
|
-
renderOptions.minTime = startTime;
|
463
|
-
renderOptions.showDuration = true;
|
464
|
-
div.addClass('calendricalEndTimePopup');
|
465
|
-
}
|
466
|
-
}
|
467
|
-
|
468
|
-
renderTimeSelect(div, renderOptions);
|
469
|
-
}).blur(function() {
|
470
|
-
if (within){
|
471
|
-
if (div) element.focus();
|
472
|
-
return;
|
473
|
-
}
|
474
|
-
if (!div) return;
|
475
|
-
div.remove();
|
476
|
-
div = null;
|
477
|
-
});
|
478
|
-
});
|
479
|
-
},
|
480
|
-
|
481
|
-
$.fn.calendricalTimeRange = function(options)
|
482
|
-
{
|
483
|
-
if (this.length >= 2) {
|
484
|
-
$(this[0]).calendricalTime(options);
|
485
|
-
$(this[1]).calendricalTime($.extend({
|
486
|
-
startTime: $(this[0])
|
487
|
-
}, options));
|
488
|
-
}
|
489
|
-
return this;
|
490
|
-
};
|
491
|
-
|
492
|
-
$.fn.calendricalDateTimeRange = function(options)
|
493
|
-
{
|
494
|
-
if (this.length >= 4) {
|
495
|
-
$(this[0]).calendricalDate($.extend({
|
496
|
-
endDate: $(this[2])
|
497
|
-
}, options));
|
498
|
-
$(this[1]).calendricalTime(options);
|
499
|
-
$(this[2]).calendricalDate(options);
|
500
|
-
$(this[3]).calendricalTime($.extend({
|
501
|
-
startTime: $(this[1]),
|
502
|
-
startDate: $(this[0]),
|
503
|
-
endDate: $(this[2])
|
504
|
-
}, options));
|
505
|
-
}
|
506
|
-
return this;
|
507
|
-
};
|
508
|
-
})(jQuery);
|