annotate query_builder/bootstrap/bootstrap-datepicker/js/bootstrap-datepicker.js @ 25:f82512502b31

Initial commit for query builder, still need to tailor for ISMI purposes
author alistair
date Mon, 23 Nov 2015 02:03:51 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
25
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1 /* =========================================================
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2 * bootstrap-datepicker.js
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3 * Repo: https://github.com/eternicode/bootstrap-datepicker/
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4 * Demo: http://eternicode.github.io/bootstrap-datepicker/
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5 * Docs: http://bootstrap-datepicker.readthedocs.org/
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6 * Forked from http://www.eyecon.ro/bootstrap-datepicker
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7 * =========================================================
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8 * Started by Stefan Petre; improvements by Andrew Rowls + contributors
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9 *
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10 * Licensed under the Apache License, Version 2.0 (the "License");
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
11 * you may not use this file except in compliance with the License.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
12 * You may obtain a copy of the License at
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
13 *
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
14 * http://www.apache.org/licenses/LICENSE-2.0
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
15 *
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
16 * Unless required by applicable law or agreed to in writing, software
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
17 * distributed under the License is distributed on an "AS IS" BASIS,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
18 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
19 * See the License for the specific language governing permissions and
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
20 * limitations under the License.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
21 * ========================================================= */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
22
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
23 (function(factory){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
24 if (typeof define === "function" && define.amd) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
25 define(["jquery"], factory);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
26 } else if (typeof exports === 'object') {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
27 factory(require('jquery'));
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
28 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
29 factory(jQuery);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
30 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
31 }(function($, undefined){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
32
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
33 function UTCDate(){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
34 return new Date(Date.UTC.apply(Date, arguments));
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
35 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
36 function UTCToday(){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
37 var today = new Date();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
38 return UTCDate(today.getFullYear(), today.getMonth(), today.getDate());
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
39 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
40 function isUTCEquals(date1, date2) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
41 return (
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
42 date1.getUTCFullYear() === date2.getUTCFullYear() &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
43 date1.getUTCMonth() === date2.getUTCMonth() &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
44 date1.getUTCDate() === date2.getUTCDate()
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
45 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
46 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
47 function alias(method){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
48 return function(){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
49 return this[method].apply(this, arguments);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
50 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
51 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
52 function isValidDate(d) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
53 return d && !isNaN(d.getTime());
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
54 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
55
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
56 var DateArray = (function(){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
57 var extras = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
58 get: function(i){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
59 return this.slice(i)[0];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
60 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
61 contains: function(d){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
62 // Array.indexOf is not cross-browser;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
63 // $.inArray doesn't work with Dates
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
64 var val = d && d.valueOf();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
65 for (var i=0, l=this.length; i < l; i++)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
66 if (this[i].valueOf() === val)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
67 return i;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
68 return -1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
69 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
70 remove: function(i){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
71 this.splice(i,1);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
72 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
73 replace: function(new_array){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
74 if (!new_array)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
75 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
76 if (!$.isArray(new_array))
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
77 new_array = [new_array];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
78 this.clear();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
79 this.push.apply(this, new_array);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
80 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
81 clear: function(){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
82 this.length = 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
83 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
84 copy: function(){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
85 var a = new DateArray();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
86 a.replace(this);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
87 return a;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
88 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
89 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
90
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
91 return function(){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
92 var a = [];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
93 a.push.apply(a, arguments);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
94 $.extend(a, extras);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
95 return a;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
96 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
97 })();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
98
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
99
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
100 // Picker object
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
101
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
102 var Datepicker = function(element, options){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
103 $(element).data('datepicker', this);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
104 this._process_options(options);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
105
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
106 this.dates = new DateArray();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
107 this.viewDate = this.o.defaultViewDate;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
108 this.focusDate = null;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
109
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
110 this.element = $(element);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
111 this.isInline = false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
112 this.isInput = this.element.is('input');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
113 this.component = this.element.hasClass('date') ? this.element.find('.add-on, .input-group-addon, .btn') : false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
114 this.hasInput = this.component && this.element.find('input').length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
115 if (this.component && this.component.length === 0)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
116 this.component = false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
117
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
118 this.picker = $(DPGlobal.template);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
119 this._buildEvents();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
120 this._attachEvents();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
121
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
122 if (this.isInline){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
123 this.picker.addClass('datepicker-inline').appendTo(this.element);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
124 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
125 else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
126 this.picker.addClass('datepicker-dropdown dropdown-menu');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
127 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
128
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
129 if (this.o.rtl){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
130 this.picker.addClass('datepicker-rtl');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
131 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
132
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
133 this.viewMode = this.o.startView;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
134
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
135 if (this.o.calendarWeeks)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
136 this.picker.find('thead .datepicker-title, tfoot .today, tfoot .clear')
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
137 .attr('colspan', function(i, val){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
138 return parseInt(val) + 1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
139 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
140
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
141 this._allow_update = false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
142
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
143 this.setStartDate(this._o.startDate);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
144 this.setEndDate(this._o.endDate);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
145 this.setDaysOfWeekDisabled(this.o.daysOfWeekDisabled);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
146 this.setDaysOfWeekHighlighted(this.o.daysOfWeekHighlighted);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
147 this.setDatesDisabled(this.o.datesDisabled);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
148
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
149 this.fillDow();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
150 this.fillMonths();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
151
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
152 this._allow_update = true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
153
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
154 this.update();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
155 this.showMode();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
156
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
157 if (this.isInline){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
158 this.show();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
159 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
160 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
161
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
162 Datepicker.prototype = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
163 constructor: Datepicker,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
164
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
165 _resolveViewName: function(view, default_value){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
166 if (view === 0 || view === 'days' || view === 'month') {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
167 return 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
168 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
169 if (view === 1 || view === 'months' || view === 'year') {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
170 return 1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
171 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
172 if (view === 2 || view === 'years' || view === 'decade') {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
173 return 2;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
174 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
175 if (view === 3 || view === 'decades' || view === 'century') {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
176 return 3;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
177 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
178 if (view === 4 || view === 'centuries' || view === 'millennium') {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
179 return 4;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
180 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
181 return default_value === undefined ? false : default_value;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
182 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
183
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
184 _process_options: function(opts){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
185 // Store raw options for reference
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
186 this._o = $.extend({}, this._o, opts);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
187 // Processed options
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
188 var o = this.o = $.extend({}, this._o);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
189
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
190 // Check if "de-DE" style date is available, if not language should
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
191 // fallback to 2 letter code eg "de"
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
192 var lang = o.language;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
193 if (!dates[lang]){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
194 lang = lang.split('-')[0];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
195 if (!dates[lang])
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
196 lang = defaults.language;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
197 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
198 o.language = lang;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
199
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
200 // Retrieve view index from any aliases
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
201 o.startView = this._resolveViewName(o.startView, 0);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
202 o.minViewMode = this._resolveViewName(o.minViewMode, 0);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
203 o.maxViewMode = this._resolveViewName(o.maxViewMode, 4);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
204
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
205 // Check that the start view is between min and max
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
206 o.startView = Math.min(o.startView, o.maxViewMode);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
207 o.startView = Math.max(o.startView, o.minViewMode);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
208
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
209 // true, false, or Number > 0
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
210 if (o.multidate !== true){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
211 o.multidate = Number(o.multidate) || false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
212 if (o.multidate !== false)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
213 o.multidate = Math.max(0, o.multidate);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
214 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
215 o.multidateSeparator = String(o.multidateSeparator);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
216
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
217 o.weekStart %= 7;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
218 o.weekEnd = (o.weekStart + 6) % 7;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
219
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
220 var format = DPGlobal.parseFormat(o.format);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
221 if (o.startDate !== -Infinity){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
222 if (!!o.startDate){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
223 if (o.startDate instanceof Date)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
224 o.startDate = this._local_to_utc(this._zero_time(o.startDate));
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
225 else
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
226 o.startDate = DPGlobal.parseDate(o.startDate, format, o.language, o.assumeNearbyYear);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
227 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
228 else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
229 o.startDate = -Infinity;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
230 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
231 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
232 if (o.endDate !== Infinity){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
233 if (!!o.endDate){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
234 if (o.endDate instanceof Date)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
235 o.endDate = this._local_to_utc(this._zero_time(o.endDate));
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
236 else
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
237 o.endDate = DPGlobal.parseDate(o.endDate, format, o.language, o.assumeNearbyYear);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
238 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
239 else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
240 o.endDate = Infinity;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
241 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
242 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
243
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
244 o.daysOfWeekDisabled = o.daysOfWeekDisabled||[];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
245 if (!$.isArray(o.daysOfWeekDisabled))
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
246 o.daysOfWeekDisabled = o.daysOfWeekDisabled.split(/[,\s]*/);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
247 o.daysOfWeekDisabled = $.map(o.daysOfWeekDisabled, function(d){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
248 return parseInt(d, 10);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
249 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
250
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
251 o.daysOfWeekHighlighted = o.daysOfWeekHighlighted||[];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
252 if (!$.isArray(o.daysOfWeekHighlighted))
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
253 o.daysOfWeekHighlighted = o.daysOfWeekHighlighted.split(/[,\s]*/);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
254 o.daysOfWeekHighlighted = $.map(o.daysOfWeekHighlighted, function(d){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
255 return parseInt(d, 10);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
256 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
257
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
258 o.datesDisabled = o.datesDisabled||[];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
259 if (!$.isArray(o.datesDisabled)) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
260 var datesDisabled = [];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
261 datesDisabled.push(DPGlobal.parseDate(o.datesDisabled, format, o.language, o.assumeNearbyYear));
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
262 o.datesDisabled = datesDisabled;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
263 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
264 o.datesDisabled = $.map(o.datesDisabled,function(d){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
265 return DPGlobal.parseDate(d, format, o.language, o.assumeNearbyYear);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
266 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
267
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
268 var plc = String(o.orientation).toLowerCase().split(/\s+/g),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
269 _plc = o.orientation.toLowerCase();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
270 plc = $.grep(plc, function(word){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
271 return /^auto|left|right|top|bottom$/.test(word);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
272 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
273 o.orientation = {x: 'auto', y: 'auto'};
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
274 if (!_plc || _plc === 'auto')
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
275 ; // no action
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
276 else if (plc.length === 1){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
277 switch (plc[0]){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
278 case 'top':
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
279 case 'bottom':
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
280 o.orientation.y = plc[0];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
281 break;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
282 case 'left':
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
283 case 'right':
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
284 o.orientation.x = plc[0];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
285 break;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
286 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
287 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
288 else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
289 _plc = $.grep(plc, function(word){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
290 return /^left|right$/.test(word);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
291 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
292 o.orientation.x = _plc[0] || 'auto';
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
293
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
294 _plc = $.grep(plc, function(word){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
295 return /^top|bottom$/.test(word);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
296 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
297 o.orientation.y = _plc[0] || 'auto';
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
298 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
299 if (o.defaultViewDate) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
300 var year = o.defaultViewDate.year || new Date().getFullYear();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
301 var month = o.defaultViewDate.month || 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
302 var day = o.defaultViewDate.day || 1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
303 o.defaultViewDate = UTCDate(year, month, day);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
304 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
305 o.defaultViewDate = UTCToday();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
306 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
307 o.showOnFocus = o.showOnFocus !== undefined ? o.showOnFocus : true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
308 o.zIndexOffset = o.zIndexOffset !== undefined ? o.zIndexOffset : 10;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
309 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
310 _events: [],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
311 _secondaryEvents: [],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
312 _applyEvents: function(evs){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
313 for (var i=0, el, ch, ev; i < evs.length; i++){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
314 el = evs[i][0];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
315 if (evs[i].length === 2){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
316 ch = undefined;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
317 ev = evs[i][1];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
318 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
319 else if (evs[i].length === 3){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
320 ch = evs[i][1];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
321 ev = evs[i][2];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
322 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
323 el.on(ev, ch);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
324 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
325 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
326 _unapplyEvents: function(evs){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
327 for (var i=0, el, ev, ch; i < evs.length; i++){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
328 el = evs[i][0];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
329 if (evs[i].length === 2){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
330 ch = undefined;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
331 ev = evs[i][1];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
332 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
333 else if (evs[i].length === 3){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
334 ch = evs[i][1];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
335 ev = evs[i][2];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
336 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
337 el.off(ev, ch);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
338 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
339 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
340 _buildEvents: function(){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
341 var events = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
342 keyup: $.proxy(function(e){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
343 if ($.inArray(e.keyCode, [27, 37, 39, 38, 40, 32, 13, 9]) === -1)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
344 this.update();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
345 }, this),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
346 keydown: $.proxy(this.keydown, this),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
347 paste: $.proxy(this.paste, this)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
348 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
349
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
350 if (this.o.showOnFocus === true) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
351 events.focus = $.proxy(this.show, this);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
352 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
353
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
354 if (this.isInput) { // single input
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
355 this._events = [
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
356 [this.element, events]
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
357 ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
358 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
359 else if (this.component && this.hasInput) { // component: input + button
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
360 this._events = [
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
361 // For components that are not readonly, allow keyboard nav
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
362 [this.element.find('input'), events],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
363 [this.component, {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
364 click: $.proxy(this.show, this)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
365 }]
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
366 ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
367 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
368 else if (this.element.is('div')){ // inline datepicker
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
369 this.isInline = true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
370 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
371 else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
372 this._events = [
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
373 [this.element, {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
374 click: $.proxy(this.show, this)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
375 }]
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
376 ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
377 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
378 this._events.push(
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
379 // Component: listen for blur on element descendants
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
380 [this.element, '*', {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
381 blur: $.proxy(function(e){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
382 this._focused_from = e.target;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
383 }, this)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
384 }],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
385 // Input: listen for blur on element
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
386 [this.element, {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
387 blur: $.proxy(function(e){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
388 this._focused_from = e.target;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
389 }, this)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
390 }]
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
391 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
392
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
393 if (this.o.immediateUpdates) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
394 // Trigger input updates immediately on changed year/month
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
395 this._events.push([this.element, {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
396 'changeYear changeMonth': $.proxy(function(e){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
397 this.update(e.date);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
398 }, this)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
399 }]);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
400 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
401
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
402 this._secondaryEvents = [
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
403 [this.picker, {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
404 click: $.proxy(this.click, this)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
405 }],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
406 [$(window), {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
407 resize: $.proxy(this.place, this)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
408 }],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
409 [$(document), {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
410 mousedown: $.proxy(function(e){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
411 // Clicked outside the datepicker, hide it
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
412 if (!(
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
413 this.element.is(e.target) ||
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
414 this.element.find(e.target).length ||
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
415 this.picker.is(e.target) ||
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
416 this.picker.find(e.target).length ||
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
417 this.picker.hasClass('datepicker-inline')
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
418 )){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
419 this.hide();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
420 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
421 }, this)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
422 }]
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
423 ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
424 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
425 _attachEvents: function(){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
426 this._detachEvents();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
427 this._applyEvents(this._events);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
428 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
429 _detachEvents: function(){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
430 this._unapplyEvents(this._events);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
431 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
432 _attachSecondaryEvents: function(){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
433 this._detachSecondaryEvents();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
434 this._applyEvents(this._secondaryEvents);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
435 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
436 _detachSecondaryEvents: function(){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
437 this._unapplyEvents(this._secondaryEvents);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
438 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
439 _trigger: function(event, altdate){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
440 var date = altdate || this.dates.get(-1),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
441 local_date = this._utc_to_local(date);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
442
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
443 this.element.trigger({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
444 type: event,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
445 date: local_date,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
446 dates: $.map(this.dates, this._utc_to_local),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
447 format: $.proxy(function(ix, format){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
448 if (arguments.length === 0){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
449 ix = this.dates.length - 1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
450 format = this.o.format;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
451 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
452 else if (typeof ix === 'string'){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
453 format = ix;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
454 ix = this.dates.length - 1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
455 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
456 format = format || this.o.format;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
457 var date = this.dates.get(ix);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
458 return DPGlobal.formatDate(date, format, this.o.language);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
459 }, this)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
460 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
461 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
462
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
463 show: function(){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
464 if (this.element.attr('readonly') && this.o.enableOnReadonly === false)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
465 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
466 if (!this.isInline)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
467 this.picker.appendTo(this.o.container);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
468 this.place();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
469 this.picker.show();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
470 this._attachSecondaryEvents();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
471 this._trigger('show');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
472 if ((window.navigator.msMaxTouchPoints || 'ontouchstart' in document) && this.o.disableTouchKeyboard) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
473 $(this.element).blur();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
474 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
475 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
476 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
477
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
478 hide: function(){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
479 if (this.isInline)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
480 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
481 if (!this.picker.is(':visible'))
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
482 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
483 this.focusDate = null;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
484 this.picker.hide().detach();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
485 this._detachSecondaryEvents();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
486 this.viewMode = this.o.startView;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
487 this.showMode();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
488
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
489 if (
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
490 this.o.forceParse &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
491 (
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
492 this.isInput && this.element.val() ||
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
493 this.hasInput && this.element.find('input').val()
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
494 )
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
495 )
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
496 this.setValue();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
497 this._trigger('hide');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
498 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
499 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
500
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
501 remove: function(){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
502 this.hide();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
503 this._detachEvents();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
504 this._detachSecondaryEvents();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
505 this.picker.remove();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
506 delete this.element.data().datepicker;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
507 if (!this.isInput){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
508 delete this.element.data().date;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
509 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
510 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
511 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
512
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
513 paste: function(evt){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
514 var dateString;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
515 if (evt.originalEvent.clipboardData && evt.originalEvent.clipboardData.types
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
516 && $.inArray('text/plain', evt.originalEvent.clipboardData.types) !== -1) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
517 dateString = evt.originalEvent.clipboardData.getData('text/plain');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
518 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
519 else if (window.clipboardData) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
520 dateString = window.clipboardData.getData('Text');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
521 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
522 else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
523 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
524 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
525 this.setDate(dateString);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
526 this.update();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
527 evt.preventDefault();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
528 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
529
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
530 _utc_to_local: function(utc){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
531 return utc && new Date(utc.getTime() + (utc.getTimezoneOffset()*60000));
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
532 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
533 _local_to_utc: function(local){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
534 return local && new Date(local.getTime() - (local.getTimezoneOffset()*60000));
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
535 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
536 _zero_time: function(local){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
537 return local && new Date(local.getFullYear(), local.getMonth(), local.getDate());
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
538 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
539 _zero_utc_time: function(utc){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
540 return utc && new Date(Date.UTC(utc.getUTCFullYear(), utc.getUTCMonth(), utc.getUTCDate()));
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
541 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
542
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
543 getDates: function(){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
544 return $.map(this.dates, this._utc_to_local);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
545 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
546
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
547 getUTCDates: function(){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
548 return $.map(this.dates, function(d){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
549 return new Date(d);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
550 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
551 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
552
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
553 getDate: function(){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
554 return this._utc_to_local(this.getUTCDate());
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
555 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
556
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
557 getUTCDate: function(){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
558 var selected_date = this.dates.get(-1);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
559 if (typeof selected_date !== 'undefined') {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
560 return new Date(selected_date);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
561 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
562 return null;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
563 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
564 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
565
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
566 clearDates: function(){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
567 var element;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
568 if (this.isInput) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
569 element = this.element;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
570 } else if (this.component) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
571 element = this.element.find('input');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
572 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
573
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
574 if (element) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
575 element.val('');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
576 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
577
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
578 this.update();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
579 this._trigger('changeDate');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
580
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
581 if (this.o.autoclose) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
582 this.hide();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
583 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
584 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
585 setDates: function(){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
586 var args = $.isArray(arguments[0]) ? arguments[0] : arguments;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
587 this.update.apply(this, args);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
588 this._trigger('changeDate');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
589 this.setValue();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
590 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
591 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
592
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
593 setUTCDates: function(){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
594 var args = $.isArray(arguments[0]) ? arguments[0] : arguments;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
595 this.update.apply(this, $.map(args, this._utc_to_local));
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
596 this._trigger('changeDate');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
597 this.setValue();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
598 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
599 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
600
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
601 setDate: alias('setDates'),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
602 setUTCDate: alias('setUTCDates'),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
603
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
604 setValue: function(){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
605 var formatted = this.getFormattedDate();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
606 if (!this.isInput){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
607 if (this.component){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
608 this.element.find('input').val(formatted);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
609 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
610 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
611 else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
612 this.element.val(formatted);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
613 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
614 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
615 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
616
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
617 getFormattedDate: function(format){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
618 if (format === undefined)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
619 format = this.o.format;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
620
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
621 var lang = this.o.language;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
622 return $.map(this.dates, function(d){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
623 return DPGlobal.formatDate(d, format, lang);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
624 }).join(this.o.multidateSeparator);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
625 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
626
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
627 setStartDate: function(startDate){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
628 this._process_options({startDate: startDate});
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
629 this.update();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
630 this.updateNavArrows();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
631 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
632 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
633
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
634 setEndDate: function(endDate){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
635 this._process_options({endDate: endDate});
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
636 this.update();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
637 this.updateNavArrows();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
638 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
639 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
640
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
641 setDaysOfWeekDisabled: function(daysOfWeekDisabled){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
642 this._process_options({daysOfWeekDisabled: daysOfWeekDisabled});
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
643 this.update();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
644 this.updateNavArrows();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
645 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
646 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
647
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
648 setDaysOfWeekHighlighted: function(daysOfWeekHighlighted){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
649 this._process_options({daysOfWeekHighlighted: daysOfWeekHighlighted});
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
650 this.update();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
651 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
652 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
653
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
654 setDatesDisabled: function(datesDisabled){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
655 this._process_options({datesDisabled: datesDisabled});
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
656 this.update();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
657 this.updateNavArrows();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
658 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
659
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
660 place: function(){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
661 if (this.isInline)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
662 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
663 var calendarWidth = this.picker.outerWidth(),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
664 calendarHeight = this.picker.outerHeight(),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
665 visualPadding = 10,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
666 container = $(this.o.container),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
667 windowWidth = container.width(),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
668 scrollTop = this.o.container === 'body' ? $(document).scrollTop() : container.scrollTop(),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
669 appendOffset = container.offset();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
670
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
671 var parentsZindex = [];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
672 this.element.parents().each(function(){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
673 var itemZIndex = $(this).css('z-index');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
674 if (itemZIndex !== 'auto' && itemZIndex !== 0) parentsZindex.push(parseInt(itemZIndex));
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
675 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
676 var zIndex = Math.max.apply(Math, parentsZindex) + this.o.zIndexOffset;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
677 var offset = this.component ? this.component.parent().offset() : this.element.offset();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
678 var height = this.component ? this.component.outerHeight(true) : this.element.outerHeight(false);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
679 var width = this.component ? this.component.outerWidth(true) : this.element.outerWidth(false);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
680 var left = offset.left - appendOffset.left,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
681 top = offset.top - appendOffset.top;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
682
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
683 if (this.o.container !== 'body') {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
684 top += scrollTop;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
685 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
686
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
687 this.picker.removeClass(
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
688 'datepicker-orient-top datepicker-orient-bottom '+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
689 'datepicker-orient-right datepicker-orient-left'
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
690 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
691
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
692 if (this.o.orientation.x !== 'auto'){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
693 this.picker.addClass('datepicker-orient-' + this.o.orientation.x);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
694 if (this.o.orientation.x === 'right')
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
695 left -= calendarWidth - width;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
696 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
697 // auto x orientation is best-placement: if it crosses a window
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
698 // edge, fudge it sideways
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
699 else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
700 if (offset.left < 0) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
701 // component is outside the window on the left side. Move it into visible range
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
702 this.picker.addClass('datepicker-orient-left');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
703 left -= offset.left - visualPadding;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
704 } else if (left + calendarWidth > windowWidth) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
705 // the calendar passes the widow right edge. Align it to component right side
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
706 this.picker.addClass('datepicker-orient-right');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
707 left += width - calendarWidth;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
708 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
709 // Default to left
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
710 this.picker.addClass('datepicker-orient-left');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
711 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
712 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
713
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
714 // auto y orientation is best-situation: top or bottom, no fudging,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
715 // decision based on which shows more of the calendar
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
716 var yorient = this.o.orientation.y,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
717 top_overflow;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
718 if (yorient === 'auto'){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
719 top_overflow = -scrollTop + top - calendarHeight;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
720 yorient = top_overflow < 0 ? 'bottom' : 'top';
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
721 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
722
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
723 this.picker.addClass('datepicker-orient-' + yorient);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
724 if (yorient === 'top')
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
725 top -= calendarHeight + parseInt(this.picker.css('padding-top'));
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
726 else
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
727 top += height;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
728
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
729 if (this.o.rtl) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
730 var right = windowWidth - (left + width);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
731 this.picker.css({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
732 top: top,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
733 right: right,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
734 zIndex: zIndex
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
735 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
736 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
737 this.picker.css({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
738 top: top,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
739 left: left,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
740 zIndex: zIndex
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
741 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
742 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
743 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
744 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
745
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
746 _allow_update: true,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
747 update: function(){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
748 if (!this._allow_update)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
749 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
750
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
751 var oldDates = this.dates.copy(),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
752 dates = [],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
753 fromArgs = false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
754 if (arguments.length){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
755 $.each(arguments, $.proxy(function(i, date){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
756 if (date instanceof Date)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
757 date = this._local_to_utc(date);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
758 dates.push(date);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
759 }, this));
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
760 fromArgs = true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
761 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
762 else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
763 dates = this.isInput
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
764 ? this.element.val()
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
765 : this.element.data('date') || this.element.find('input').val();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
766 if (dates && this.o.multidate)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
767 dates = dates.split(this.o.multidateSeparator);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
768 else
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
769 dates = [dates];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
770 delete this.element.data().date;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
771 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
772
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
773 dates = $.map(dates, $.proxy(function(date){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
774 return DPGlobal.parseDate(date, this.o.format, this.o.language, this.o.assumeNearbyYear);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
775 }, this));
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
776 dates = $.grep(dates, $.proxy(function(date){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
777 return (
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
778 !this.dateWithinRange(date) ||
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
779 !date
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
780 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
781 }, this), true);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
782 this.dates.replace(dates);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
783
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
784 if (this.dates.length)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
785 this.viewDate = new Date(this.dates.get(-1));
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
786 else if (this.viewDate < this.o.startDate)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
787 this.viewDate = new Date(this.o.startDate);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
788 else if (this.viewDate > this.o.endDate)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
789 this.viewDate = new Date(this.o.endDate);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
790 else
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
791 this.viewDate = this.o.defaultViewDate;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
792
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
793 if (fromArgs){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
794 // setting date by clicking
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
795 this.setValue();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
796 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
797 else if (dates.length){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
798 // setting date by typing
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
799 if (String(oldDates) !== String(this.dates))
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
800 this._trigger('changeDate');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
801 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
802 if (!this.dates.length && oldDates.length)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
803 this._trigger('clearDate');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
804
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
805 this.fill();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
806 this.element.change();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
807 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
808 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
809
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
810 fillDow: function(){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
811 var dowCnt = this.o.weekStart,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
812 html = '<tr>';
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
813 if (this.o.calendarWeeks){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
814 this.picker.find('.datepicker-days .datepicker-switch')
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
815 .attr('colspan', function(i, val){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
816 return parseInt(val) + 1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
817 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
818 html += '<th class="cw">&#160;</th>';
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
819 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
820 while (dowCnt < this.o.weekStart + 7){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
821 html += '<th class="dow">'+dates[this.o.language].daysMin[(dowCnt++)%7]+'</th>';
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
822 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
823 html += '</tr>';
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
824 this.picker.find('.datepicker-days thead').append(html);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
825 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
826
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
827 fillMonths: function(){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
828 var html = '',
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
829 i = 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
830 while (i < 12){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
831 html += '<span class="month">'+dates[this.o.language].monthsShort[i++]+'</span>';
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
832 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
833 this.picker.find('.datepicker-months td').html(html);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
834 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
835
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
836 setRange: function(range){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
837 if (!range || !range.length)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
838 delete this.range;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
839 else
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
840 this.range = $.map(range, function(d){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
841 return d.valueOf();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
842 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
843 this.fill();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
844 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
845
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
846 getClassNames: function(date){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
847 var cls = [],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
848 year = this.viewDate.getUTCFullYear(),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
849 month = this.viewDate.getUTCMonth(),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
850 today = new Date();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
851 if (date.getUTCFullYear() < year || (date.getUTCFullYear() === year && date.getUTCMonth() < month)){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
852 cls.push('old');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
853 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
854 else if (date.getUTCFullYear() > year || (date.getUTCFullYear() === year && date.getUTCMonth() > month)){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
855 cls.push('new');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
856 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
857 if (this.focusDate && date.valueOf() === this.focusDate.valueOf())
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
858 cls.push('focused');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
859 // Compare internal UTC date with local today, not UTC today
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
860 if (this.o.todayHighlight &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
861 date.getUTCFullYear() === today.getFullYear() &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
862 date.getUTCMonth() === today.getMonth() &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
863 date.getUTCDate() === today.getDate()){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
864 cls.push('today');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
865 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
866 if (this.dates.contains(date) !== -1)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
867 cls.push('active');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
868 if (!this.dateWithinRange(date) || this.dateIsDisabled(date)){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
869 cls.push('disabled');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
870 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
871 if ($.inArray(date.getUTCDay(), this.o.daysOfWeekHighlighted) !== -1){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
872 cls.push('highlighted');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
873 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
874
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
875 if (this.range){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
876 if (date > this.range[0] && date < this.range[this.range.length-1]){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
877 cls.push('range');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
878 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
879 if ($.inArray(date.valueOf(), this.range) !== -1){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
880 cls.push('selected');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
881 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
882 if (date.valueOf() === this.range[0]){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
883 cls.push('range-start');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
884 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
885 if (date.valueOf() === this.range[this.range.length-1]){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
886 cls.push('range-end');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
887 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
888 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
889 return cls;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
890 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
891
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
892 _fill_yearsView: function(selector, cssClass, factor, step, currentYear, startYear, endYear, callback){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
893 var html, view, year, steps, startStep, endStep, thisYear, i, classes, tooltip, before;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
894
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
895 html = '';
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
896 view = this.picker.find(selector);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
897 year = parseInt(currentYear / factor, 10) * factor;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
898 startStep = parseInt(startYear / step, 10) * step;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
899 endStep = parseInt(endYear / step, 10) * step;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
900 steps = $.map(this.dates, function(d){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
901 return parseInt(d.getUTCFullYear() / step, 10) * step;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
902 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
903
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
904 view.find('.datepicker-switch').text(year + '-' + (year + step * 9));
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
905
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
906 thisYear = year - step;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
907 for (i = -1; i < 11; i += 1) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
908 classes = [cssClass];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
909 tooltip = null;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
910
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
911 if (i === -1) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
912 classes.push('old');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
913 } else if (i === 10) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
914 classes.push('new');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
915 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
916 if ($.inArray(thisYear, steps) !== -1) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
917 classes.push('active');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
918 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
919 if (thisYear < startStep || thisYear > endStep) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
920 classes.push('disabled');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
921 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
922
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
923 if (callback !== $.noop) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
924 before = callback(new Date(thisYear, 0, 1));
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
925 if (before === undefined) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
926 before = {};
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
927 } else if (typeof(before) === 'boolean') {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
928 before = {enabled: before};
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
929 } else if (typeof(before) === 'string') {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
930 before = {classes: before};
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
931 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
932 if (before.enabled === false) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
933 classes.push('disabled');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
934 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
935 if (before.classes) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
936 classes = classes.concat(before.classes.split(/\s+/));
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
937 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
938 if (before.tooltip) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
939 tooltip = before.tooltip;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
940 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
941 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
942
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
943 html += '<span class="' + classes.join(' ') + '"' + (tooltip ? ' title="' + tooltip + '"' : '') + '>' + thisYear + '</span>';
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
944 thisYear += step;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
945 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
946 view.find('td').html(html);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
947 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
948
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
949 fill: function(){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
950 var d = new Date(this.viewDate),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
951 year = d.getUTCFullYear(),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
952 month = d.getUTCMonth(),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
953 startYear = this.o.startDate !== -Infinity ? this.o.startDate.getUTCFullYear() : -Infinity,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
954 startMonth = this.o.startDate !== -Infinity ? this.o.startDate.getUTCMonth() : -Infinity,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
955 endYear = this.o.endDate !== Infinity ? this.o.endDate.getUTCFullYear() : Infinity,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
956 endMonth = this.o.endDate !== Infinity ? this.o.endDate.getUTCMonth() : Infinity,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
957 todaytxt = dates[this.o.language].today || dates['en'].today || '',
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
958 cleartxt = dates[this.o.language].clear || dates['en'].clear || '',
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
959 titleFormat = dates[this.o.language].titleFormat || dates['en'].titleFormat,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
960 tooltip,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
961 before;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
962 if (isNaN(year) || isNaN(month))
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
963 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
964 this.picker.find('.datepicker-days .datepicker-switch')
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
965 .text(DPGlobal.formatDate(d, titleFormat, this.o.language));
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
966 this.picker.find('tfoot .today')
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
967 .text(todaytxt)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
968 .toggle(this.o.todayBtn !== false);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
969 this.picker.find('tfoot .clear')
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
970 .text(cleartxt)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
971 .toggle(this.o.clearBtn !== false);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
972 this.picker.find('thead .datepicker-title')
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
973 .text(this.o.title)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
974 .toggle(this.o.title !== '');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
975 this.updateNavArrows();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
976 this.fillMonths();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
977 var prevMonth = UTCDate(year, month-1, 28),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
978 day = DPGlobal.getDaysInMonth(prevMonth.getUTCFullYear(), prevMonth.getUTCMonth());
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
979 prevMonth.setUTCDate(day);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
980 prevMonth.setUTCDate(day - (prevMonth.getUTCDay() - this.o.weekStart + 7)%7);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
981 var nextMonth = new Date(prevMonth);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
982 if (prevMonth.getUTCFullYear() < 100){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
983 nextMonth.setUTCFullYear(prevMonth.getUTCFullYear());
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
984 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
985 nextMonth.setUTCDate(nextMonth.getUTCDate() + 42);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
986 nextMonth = nextMonth.valueOf();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
987 var html = [];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
988 var clsName;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
989 while (prevMonth.valueOf() < nextMonth){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
990 if (prevMonth.getUTCDay() === this.o.weekStart){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
991 html.push('<tr>');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
992 if (this.o.calendarWeeks){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
993 // ISO 8601: First week contains first thursday.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
994 // ISO also states week starts on Monday, but we can be more abstract here.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
995 var
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
996 // Start of current week: based on weekstart/current date
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
997 ws = new Date(+prevMonth + (this.o.weekStart - prevMonth.getUTCDay() - 7) % 7 * 864e5),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
998 // Thursday of this week
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
999 th = new Date(Number(ws) + (7 + 4 - ws.getUTCDay()) % 7 * 864e5),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1000 // First Thursday of year, year from thursday
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1001 yth = new Date(Number(yth = UTCDate(th.getUTCFullYear(), 0, 1)) + (7 + 4 - yth.getUTCDay())%7*864e5),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1002 // Calendar week: ms between thursdays, div ms per day, div 7 days
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1003 calWeek = (th - yth) / 864e5 / 7 + 1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1004 html.push('<td class="cw">'+ calWeek +'</td>');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1005
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1006 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1007 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1008 clsName = this.getClassNames(prevMonth);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1009 clsName.push('day');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1010
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1011 if (this.o.beforeShowDay !== $.noop){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1012 before = this.o.beforeShowDay(this._utc_to_local(prevMonth));
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1013 if (before === undefined)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1014 before = {};
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1015 else if (typeof(before) === 'boolean')
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1016 before = {enabled: before};
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1017 else if (typeof(before) === 'string')
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1018 before = {classes: before};
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1019 if (before.enabled === false)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1020 clsName.push('disabled');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1021 if (before.classes)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1022 clsName = clsName.concat(before.classes.split(/\s+/));
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1023 if (before.tooltip)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1024 tooltip = before.tooltip;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1025 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1026
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1027 clsName = $.unique(clsName);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1028 html.push('<td class="'+clsName.join(' ')+'"' + (tooltip ? ' title="'+tooltip+'"' : '') + '>'+prevMonth.getUTCDate() + '</td>');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1029 tooltip = null;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1030 if (prevMonth.getUTCDay() === this.o.weekEnd){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1031 html.push('</tr>');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1032 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1033 prevMonth.setUTCDate(prevMonth.getUTCDate()+1);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1034 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1035 this.picker.find('.datepicker-days tbody').empty().append(html.join(''));
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1036
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1037 var months = this.picker.find('.datepicker-months')
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1038 .find('.datepicker-switch')
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1039 .text(this.o.maxViewMode < 2 ? 'Months' : year)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1040 .end()
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1041 .find('span').removeClass('active');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1042
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1043 $.each(this.dates, function(i, d){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1044 if (d.getUTCFullYear() === year)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1045 months.eq(d.getUTCMonth()).addClass('active');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1046 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1047
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1048 if (year < startYear || year > endYear){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1049 months.addClass('disabled');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1050 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1051 if (year === startYear){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1052 months.slice(0, startMonth).addClass('disabled');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1053 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1054 if (year === endYear){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1055 months.slice(endMonth+1).addClass('disabled');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1056 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1057
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1058 if (this.o.beforeShowMonth !== $.noop){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1059 var that = this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1060 $.each(months, function(i, month){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1061 if (!$(month).hasClass('disabled')) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1062 var moDate = new Date(year, i, 1);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1063 var before = that.o.beforeShowMonth(moDate);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1064 if (before === false)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1065 $(month).addClass('disabled');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1066 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1067 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1068 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1069
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1070 // Generating decade/years picker
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1071 this._fill_yearsView(
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1072 '.datepicker-years',
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1073 'year',
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1074 10,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1075 1,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1076 year,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1077 startYear,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1078 endYear,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1079 this.o.beforeShowYear
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1080 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1081
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1082 // Generating century/decades picker
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1083 this._fill_yearsView(
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1084 '.datepicker-decades',
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1085 'decade',
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1086 100,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1087 10,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1088 year,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1089 startYear,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1090 endYear,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1091 this.o.beforeShowDecade
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1092 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1093
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1094 // Generating millennium/centuries picker
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1095 this._fill_yearsView(
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1096 '.datepicker-centuries',
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1097 'century',
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1098 1000,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1099 100,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1100 year,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1101 startYear,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1102 endYear,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1103 this.o.beforeShowCentury
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1104 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1105 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1106
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1107 updateNavArrows: function(){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1108 if (!this._allow_update)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1109 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1110
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1111 var d = new Date(this.viewDate),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1112 year = d.getUTCFullYear(),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1113 month = d.getUTCMonth();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1114 switch (this.viewMode){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1115 case 0:
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1116 if (this.o.startDate !== -Infinity && year <= this.o.startDate.getUTCFullYear() && month <= this.o.startDate.getUTCMonth()){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1117 this.picker.find('.prev').css({visibility: 'hidden'});
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1118 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1119 else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1120 this.picker.find('.prev').css({visibility: 'visible'});
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1121 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1122 if (this.o.endDate !== Infinity && year >= this.o.endDate.getUTCFullYear() && month >= this.o.endDate.getUTCMonth()){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1123 this.picker.find('.next').css({visibility: 'hidden'});
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1124 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1125 else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1126 this.picker.find('.next').css({visibility: 'visible'});
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1127 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1128 break;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1129 case 1:
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1130 case 2:
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1131 case 3:
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1132 case 4:
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1133 if (this.o.startDate !== -Infinity && year <= this.o.startDate.getUTCFullYear() || this.o.maxViewMode < 2){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1134 this.picker.find('.prev').css({visibility: 'hidden'});
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1135 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1136 else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1137 this.picker.find('.prev').css({visibility: 'visible'});
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1138 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1139 if (this.o.endDate !== Infinity && year >= this.o.endDate.getUTCFullYear() || this.o.maxViewMode < 2){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1140 this.picker.find('.next').css({visibility: 'hidden'});
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1141 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1142 else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1143 this.picker.find('.next').css({visibility: 'visible'});
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1144 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1145 break;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1146 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1147 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1148
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1149 click: function(e){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1150 e.preventDefault();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1151 e.stopPropagation();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1152 var target = $(e.target).closest('span, td, th'),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1153 year, month, day;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1154 if (target.length === 1){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1155 switch (target[0].nodeName.toLowerCase()){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1156 case 'th':
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1157 switch (target[0].className){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1158 case 'datepicker-switch':
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1159 this.showMode(1);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1160 break;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1161 case 'prev':
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1162 case 'next':
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1163 var dir = DPGlobal.modes[this.viewMode].navStep * (target[0].className === 'prev' ? -1 : 1);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1164 switch (this.viewMode){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1165 case 0:
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1166 this.viewDate = this.moveMonth(this.viewDate, dir);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1167 this._trigger('changeMonth', this.viewDate);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1168 break;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1169 case 1:
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1170 case 2:
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1171 case 3:
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1172 case 4:
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1173 this.viewDate = this.moveYear(this.viewDate, dir);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1174 if (this.viewMode === 1)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1175 this._trigger('changeYear', this.viewDate);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1176 break;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1177 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1178 this.fill();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1179 break;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1180 case 'today':
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1181 this.showMode(-2);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1182 var which = this.o.todayBtn === 'linked' ? null : 'view';
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1183 this._setDate(UTCToday(), which);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1184 break;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1185 case 'clear':
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1186 this.clearDates();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1187 break;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1188 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1189 break;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1190 case 'span':
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1191 if (!target.hasClass('disabled')){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1192 this.viewDate.setUTCDate(1);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1193 if (target.hasClass('month')){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1194 day = 1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1195 month = target.parent().find('span').index(target);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1196 year = this.viewDate.getUTCFullYear();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1197 this.viewDate.setUTCMonth(month);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1198 this._trigger('changeMonth', this.viewDate);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1199 if (this.o.minViewMode === 1){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1200 this._setDate(UTCDate(year, month, day));
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1201 this.showMode();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1202 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1203 this.showMode(-1);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1204 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1205 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1206 else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1207 day = 1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1208 month = 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1209 year = parseInt(target.text(), 10)||0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1210 this.viewDate.setUTCFullYear(year);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1211
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1212 var trigger = target.hasClass('year') ? 'Year' : (
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1213 target.hasClass('decade') ? 'Decade' : 'Century'
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1214 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1215 this._trigger('change' + trigger, this.viewDate);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1216
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1217 var shouldSetDate = (this.o.minViewMode === 4 ||
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1218 (this.o.minViewMode === 2 && target.hasClass('year')) ||
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1219 (this.o.minViewMode === 3 && target.hasClass('decade'))
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1220 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1221 if (shouldSetDate){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1222 this._setDate(UTCDate(year, month, day));
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1223 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1224 this.showMode(-1);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1225 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1226 this.fill();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1227 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1228 break;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1229 case 'td':
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1230 if (target.hasClass('day') && !target.hasClass('disabled')){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1231 day = parseInt(target.text(), 10)||1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1232 year = this.viewDate.getUTCFullYear();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1233 month = this.viewDate.getUTCMonth();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1234 if (target.hasClass('old')){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1235 if (month === 0){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1236 month = 11;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1237 year -= 1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1238 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1239 else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1240 month -= 1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1241 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1242 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1243 else if (target.hasClass('new')){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1244 if (month === 11){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1245 month = 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1246 year += 1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1247 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1248 else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1249 month += 1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1250 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1251 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1252 this._setDate(UTCDate(year, month, day));
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1253 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1254 break;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1255 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1256 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1257 if (this.picker.is(':visible') && this._focused_from){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1258 $(this._focused_from).focus();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1259 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1260 delete this._focused_from;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1261 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1262
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1263 _toggle_multidate: function(date){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1264 var ix = this.dates.contains(date);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1265 if (!date){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1266 this.dates.clear();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1267 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1268
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1269 if (ix !== -1){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1270 if (this.o.multidate === true || this.o.multidate > 1 || this.o.toggleActive){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1271 this.dates.remove(ix);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1272 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1273 } else if (this.o.multidate === false) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1274 this.dates.clear();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1275 this.dates.push(date);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1276 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1277 else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1278 this.dates.push(date);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1279 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1280
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1281 if (typeof this.o.multidate === 'number')
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1282 while (this.dates.length > this.o.multidate)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1283 this.dates.remove(0);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1284 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1285
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1286 _setDate: function(date, which){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1287 if (!which || which === 'date')
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1288 this._toggle_multidate(date && new Date(date));
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1289 if (!which || which === 'view')
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1290 this.viewDate = date && new Date(date);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1291
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1292 this.fill();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1293 this.setValue();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1294 if (!which || which !== 'view') {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1295 this._trigger('changeDate');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1296 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1297 var element;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1298 if (this.isInput){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1299 element = this.element;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1300 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1301 else if (this.component){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1302 element = this.element.find('input');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1303 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1304 if (element){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1305 element.change();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1306 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1307 if (this.o.autoclose && (!which || which === 'date')){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1308 this.hide();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1309 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1310 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1311
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1312 moveDay: function(date, dir){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1313 var newDate = new Date(date);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1314 newDate.setUTCDate(date.getUTCDate() + dir);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1315
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1316 return newDate;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1317 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1318
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1319 moveWeek: function(date, dir){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1320 return this.moveDay(date, dir * 7);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1321 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1322
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1323 moveMonth: function(date, dir){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1324 if (!isValidDate(date))
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1325 return this.o.defaultViewDate;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1326 if (!dir)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1327 return date;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1328 var new_date = new Date(date.valueOf()),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1329 day = new_date.getUTCDate(),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1330 month = new_date.getUTCMonth(),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1331 mag = Math.abs(dir),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1332 new_month, test;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1333 dir = dir > 0 ? 1 : -1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1334 if (mag === 1){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1335 test = dir === -1
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1336 // If going back one month, make sure month is not current month
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1337 // (eg, Mar 31 -> Feb 31 == Feb 28, not Mar 02)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1338 ? function(){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1339 return new_date.getUTCMonth() === month;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1340 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1341 // If going forward one month, make sure month is as expected
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1342 // (eg, Jan 31 -> Feb 31 == Feb 28, not Mar 02)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1343 : function(){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1344 return new_date.getUTCMonth() !== new_month;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1345 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1346 new_month = month + dir;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1347 new_date.setUTCMonth(new_month);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1348 // Dec -> Jan (12) or Jan -> Dec (-1) -- limit expected date to 0-11
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1349 if (new_month < 0 || new_month > 11)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1350 new_month = (new_month + 12) % 12;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1351 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1352 else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1353 // For magnitudes >1, move one month at a time...
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1354 for (var i=0; i < mag; i++)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1355 // ...which might decrease the day (eg, Jan 31 to Feb 28, etc)...
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1356 new_date = this.moveMonth(new_date, dir);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1357 // ...then reset the day, keeping it in the new month
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1358 new_month = new_date.getUTCMonth();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1359 new_date.setUTCDate(day);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1360 test = function(){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1361 return new_month !== new_date.getUTCMonth();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1362 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1363 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1364 // Common date-resetting loop -- if date is beyond end of month, make it
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1365 // end of month
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1366 while (test()){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1367 new_date.setUTCDate(--day);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1368 new_date.setUTCMonth(new_month);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1369 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1370 return new_date;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1371 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1372
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1373 moveYear: function(date, dir){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1374 return this.moveMonth(date, dir*12);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1375 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1376
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1377 moveAvailableDate: function(date, dir, fn){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1378 do {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1379 date = this[fn](date, dir);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1380
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1381 if (!this.dateWithinRange(date))
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1382 return false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1383
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1384 fn = 'moveDay';
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1385 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1386 while (this.dateIsDisabled(date));
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1387
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1388 return date;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1389 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1390
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1391 weekOfDateIsDisabled: function(date){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1392 return $.inArray(date.getUTCDay(), this.o.daysOfWeekDisabled) !== -1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1393 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1394
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1395 dateIsDisabled: function(date){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1396 return (
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1397 this.weekOfDateIsDisabled(date) ||
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1398 $.grep(this.o.datesDisabled, function(d){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1399 return isUTCEquals(date, d);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1400 }).length > 0
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1401 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1402 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1403
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1404 dateWithinRange: function(date){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1405 return date >= this.o.startDate && date <= this.o.endDate;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1406 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1407
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1408 keydown: function(e){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1409 if (!this.picker.is(':visible')){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1410 if (e.keyCode === 40 || e.keyCode === 27) { // allow down to re-show picker
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1411 this.show();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1412 e.stopPropagation();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1413 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1414 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1415 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1416 var dateChanged = false,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1417 dir, newViewDate,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1418 focusDate = this.focusDate || this.viewDate;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1419 switch (e.keyCode){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1420 case 27: // escape
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1421 if (this.focusDate){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1422 this.focusDate = null;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1423 this.viewDate = this.dates.get(-1) || this.viewDate;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1424 this.fill();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1425 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1426 else
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1427 this.hide();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1428 e.preventDefault();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1429 e.stopPropagation();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1430 break;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1431 case 37: // left
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1432 case 38: // up
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1433 case 39: // right
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1434 case 40: // down
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1435 if (!this.o.keyboardNavigation || this.o.daysOfWeekDisabled.length === 7)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1436 break;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1437 dir = e.keyCode === 37 || e.keyCode === 38 ? -1 : 1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1438 if (e.ctrlKey){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1439 newViewDate = this.moveAvailableDate(focusDate, dir, 'moveYear');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1440
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1441 if (newViewDate)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1442 this._trigger('changeYear', this.viewDate);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1443 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1444 else if (e.shiftKey){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1445 newViewDate = this.moveAvailableDate(focusDate, dir, 'moveMonth');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1446
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1447 if (newViewDate)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1448 this._trigger('changeMonth', this.viewDate);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1449 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1450 else if (e.keyCode === 37 || e.keyCode === 39){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1451 newViewDate = this.moveAvailableDate(focusDate, dir, 'moveDay');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1452 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1453 else if (!this.weekOfDateIsDisabled(focusDate)){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1454 newViewDate = this.moveAvailableDate(focusDate, dir, 'moveWeek');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1455 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1456 if (newViewDate){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1457 this.focusDate = this.viewDate = newViewDate;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1458 this.setValue();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1459 this.fill();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1460 e.preventDefault();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1461 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1462 break;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1463 case 13: // enter
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1464 if (!this.o.forceParse)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1465 break;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1466 focusDate = this.focusDate || this.dates.get(-1) || this.viewDate;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1467 if (this.o.keyboardNavigation) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1468 this._toggle_multidate(focusDate);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1469 dateChanged = true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1470 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1471 this.focusDate = null;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1472 this.viewDate = this.dates.get(-1) || this.viewDate;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1473 this.setValue();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1474 this.fill();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1475 if (this.picker.is(':visible')){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1476 e.preventDefault();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1477 e.stopPropagation();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1478 if (this.o.autoclose)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1479 this.hide();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1480 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1481 break;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1482 case 9: // tab
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1483 this.focusDate = null;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1484 this.viewDate = this.dates.get(-1) || this.viewDate;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1485 this.fill();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1486 this.hide();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1487 break;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1488 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1489 if (dateChanged){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1490 if (this.dates.length)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1491 this._trigger('changeDate');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1492 else
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1493 this._trigger('clearDate');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1494 var element;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1495 if (this.isInput){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1496 element = this.element;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1497 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1498 else if (this.component){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1499 element = this.element.find('input');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1500 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1501 if (element){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1502 element.change();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1503 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1504 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1505 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1506
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1507 showMode: function(dir){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1508 if (dir){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1509 this.viewMode = Math.max(this.o.minViewMode, Math.min(this.o.maxViewMode, this.viewMode + dir));
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1510 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1511 this.picker
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1512 .children('div')
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1513 .hide()
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1514 .filter('.datepicker-' + DPGlobal.modes[this.viewMode].clsName)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1515 .show();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1516 this.updateNavArrows();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1517 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1518 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1519
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1520 var DateRangePicker = function(element, options){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1521 $(element).data('datepicker', this);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1522 this.element = $(element);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1523 this.inputs = $.map(options.inputs, function(i){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1524 return i.jquery ? i[0] : i;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1525 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1526 delete options.inputs;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1527
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1528 datepickerPlugin.call($(this.inputs), options)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1529 .on('changeDate', $.proxy(this.dateUpdated, this));
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1530
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1531 this.pickers = $.map(this.inputs, function(i){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1532 return $(i).data('datepicker');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1533 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1534 this.updateDates();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1535 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1536 DateRangePicker.prototype = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1537 updateDates: function(){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1538 this.dates = $.map(this.pickers, function(i){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1539 return i.getUTCDate();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1540 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1541 this.updateRanges();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1542 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1543 updateRanges: function(){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1544 var range = $.map(this.dates, function(d){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1545 return d.valueOf();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1546 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1547 $.each(this.pickers, function(i, p){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1548 p.setRange(range);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1549 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1550 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1551 dateUpdated: function(e){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1552 // `this.updating` is a workaround for preventing infinite recursion
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1553 // between `changeDate` triggering and `setUTCDate` calling. Until
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1554 // there is a better mechanism.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1555 if (this.updating)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1556 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1557 this.updating = true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1558
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1559 var dp = $(e.target).data('datepicker');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1560
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1561 if (typeof(dp) === "undefined") {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1562 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1563 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1564
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1565 var new_date = dp.getUTCDate(),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1566 i = $.inArray(e.target, this.inputs),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1567 j = i - 1,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1568 k = i + 1,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1569 l = this.inputs.length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1570 if (i === -1)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1571 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1572
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1573 $.each(this.pickers, function(i, p){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1574 if (!p.getUTCDate())
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1575 p.setUTCDate(new_date);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1576 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1577
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1578 if (new_date < this.dates[j]){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1579 // Date being moved earlier/left
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1580 while (j >= 0 && new_date < this.dates[j]){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1581 this.pickers[j--].setUTCDate(new_date);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1582 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1583 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1584 else if (new_date > this.dates[k]){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1585 // Date being moved later/right
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1586 while (k < l && new_date > this.dates[k]){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1587 this.pickers[k++].setUTCDate(new_date);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1588 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1589 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1590 this.updateDates();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1591
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1592 delete this.updating;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1593 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1594 remove: function(){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1595 $.map(this.pickers, function(p){ p.remove(); });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1596 delete this.element.data().datepicker;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1597 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1598 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1599
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1600 function opts_from_el(el, prefix){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1601 // Derive options from element data-attrs
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1602 var data = $(el).data(),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1603 out = {}, inkey,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1604 replace = new RegExp('^' + prefix.toLowerCase() + '([A-Z])');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1605 prefix = new RegExp('^' + prefix.toLowerCase());
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1606 function re_lower(_,a){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1607 return a.toLowerCase();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1608 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1609 for (var key in data)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1610 if (prefix.test(key)){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1611 inkey = key.replace(replace, re_lower);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1612 out[inkey] = data[key];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1613 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1614 return out;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1615 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1616
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1617 function opts_from_locale(lang){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1618 // Derive options from locale plugins
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1619 var out = {};
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1620 // Check if "de-DE" style date is available, if not language should
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1621 // fallback to 2 letter code eg "de"
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1622 if (!dates[lang]){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1623 lang = lang.split('-')[0];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1624 if (!dates[lang])
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1625 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1626 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1627 var d = dates[lang];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1628 $.each(locale_opts, function(i,k){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1629 if (k in d)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1630 out[k] = d[k];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1631 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1632 return out;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1633 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1634
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1635 var old = $.fn.datepicker;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1636 var datepickerPlugin = function(option){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1637 var args = Array.apply(null, arguments);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1638 args.shift();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1639 var internal_return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1640 this.each(function(){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1641 var $this = $(this),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1642 data = $this.data('datepicker'),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1643 options = typeof option === 'object' && option;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1644 if (!data){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1645 var elopts = opts_from_el(this, 'date'),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1646 // Preliminary otions
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1647 xopts = $.extend({}, defaults, elopts, options),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1648 locopts = opts_from_locale(xopts.language),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1649 // Options priority: js args, data-attrs, locales, defaults
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1650 opts = $.extend({}, defaults, locopts, elopts, options);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1651 if ($this.hasClass('input-daterange') || opts.inputs){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1652 $.extend(opts, {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1653 inputs: opts.inputs || $this.find('input').toArray()
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1654 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1655 data = new DateRangePicker(this, opts);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1656 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1657 else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1658 data = new Datepicker(this, opts);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1659 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1660 $this.data('datepicker', data);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1661 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1662 if (typeof option === 'string' && typeof data[option] === 'function'){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1663 internal_return = data[option].apply(data, args);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1664 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1665 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1666
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1667 if (
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1668 internal_return === undefined ||
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1669 internal_return instanceof Datepicker ||
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1670 internal_return instanceof DateRangePicker
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1671 )
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1672 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1673
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1674 if (this.length > 1)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1675 throw new Error('Using only allowed for the collection of a single element (' + option + ' function)');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1676 else
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1677 return internal_return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1678 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1679 $.fn.datepicker = datepickerPlugin;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1680
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1681 var defaults = $.fn.datepicker.defaults = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1682 assumeNearbyYear: false,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1683 autoclose: false,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1684 beforeShowDay: $.noop,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1685 beforeShowMonth: $.noop,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1686 beforeShowYear: $.noop,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1687 beforeShowDecade: $.noop,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1688 beforeShowCentury: $.noop,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1689 calendarWeeks: false,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1690 clearBtn: false,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1691 toggleActive: false,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1692 daysOfWeekDisabled: [],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1693 daysOfWeekHighlighted: [],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1694 datesDisabled: [],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1695 endDate: Infinity,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1696 forceParse: true,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1697 format: 'mm/dd/yyyy',
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1698 keyboardNavigation: true,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1699 language: 'en',
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1700 minViewMode: 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1701 maxViewMode: 4,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1702 multidate: false,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1703 multidateSeparator: ',',
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1704 orientation: "auto",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1705 rtl: false,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1706 startDate: -Infinity,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1707 startView: 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1708 todayBtn: false,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1709 todayHighlight: false,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1710 weekStart: 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1711 disableTouchKeyboard: false,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1712 enableOnReadonly: true,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1713 container: 'body',
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1714 immediateUpdates: false,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1715 title: ''
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1716 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1717 var locale_opts = $.fn.datepicker.locale_opts = [
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1718 'format',
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1719 'rtl',
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1720 'weekStart'
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1721 ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1722 $.fn.datepicker.Constructor = Datepicker;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1723 var dates = $.fn.datepicker.dates = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1724 en: {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1725 days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1726 daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1727 daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1728 months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1729 monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1730 today: "Today",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1731 clear: "Clear",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1732 titleFormat: "MM yyyy"
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1733 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1734 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1735
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1736 var DPGlobal = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1737 modes: [
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1738 {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1739 clsName: 'days',
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1740 navFnc: 'Month',
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1741 navStep: 1
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1742 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1743 {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1744 clsName: 'months',
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1745 navFnc: 'FullYear',
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1746 navStep: 1
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1747 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1748 {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1749 clsName: 'years',
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1750 navFnc: 'FullYear',
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1751 navStep: 10
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1752 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1753 {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1754 clsName: 'decades',
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1755 navFnc: 'FullDecade',
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1756 navStep: 100
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1757 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1758 {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1759 clsName: 'centuries',
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1760 navFnc: 'FullCentury',
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1761 navStep: 1000
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1762 }],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1763 isLeapYear: function(year){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1764 return (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0));
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1765 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1766 getDaysInMonth: function(year, month){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1767 return [31, (DPGlobal.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1768 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1769 validParts: /dd?|DD?|mm?|MM?|yy(?:yy)?/g,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1770 nonpunctuation: /[^ -\/:-@\u5e74\u6708\u65e5\[-`{-~\t\n\r]+/g,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1771 parseFormat: function(format){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1772 if (typeof format.toValue === 'function' && typeof format.toDisplay === 'function')
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1773 return format;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1774 // IE treats \0 as a string end in inputs (truncating the value),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1775 // so it's a bad format delimiter, anyway
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1776 var separators = format.replace(this.validParts, '\0').split('\0'),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1777 parts = format.match(this.validParts);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1778 if (!separators || !separators.length || !parts || parts.length === 0){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1779 throw new Error("Invalid date format.");
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1780 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1781 return {separators: separators, parts: parts};
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1782 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1783 parseDate: function(date, format, language, assumeNearby){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1784 if (!date)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1785 return undefined;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1786 if (date instanceof Date)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1787 return date;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1788 if (typeof format === 'string')
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1789 format = DPGlobal.parseFormat(format);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1790 if (format.toValue)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1791 return format.toValue(date, format, language);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1792 var part_re = /([\-+]\d+)([dmwy])/,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1793 parts = date.match(/([\-+]\d+)([dmwy])/g),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1794 fn_map = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1795 d: 'moveDay',
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1796 m: 'moveMonth',
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1797 w: 'moveWeek',
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1798 y: 'moveYear'
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1799 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1800 dateAliases = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1801 yesterday: '-1d',
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1802 today: '+0d',
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1803 tomorrow: '+1d'
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1804 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1805 part, dir, i, fn;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1806 if (/^[\-+]\d+[dmwy]([\s,]+[\-+]\d+[dmwy])*$/.test(date)){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1807 date = new Date();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1808 for (i=0; i < parts.length; i++){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1809 part = part_re.exec(parts[i]);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1810 dir = parseInt(part[1]);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1811 fn = fn_map[part[2]];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1812 date = Datepicker.prototype[fn](date, dir);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1813 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1814 return UTCDate(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1815 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1816
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1817 if (typeof dateAliases[date] !== 'undefined') {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1818 date = dateAliases[date];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1819 parts = date.match(/([\-+]\d+)([dmwy])/g);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1820
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1821 if (/^[\-+]\d+[dmwy]([\s,]+[\-+]\d+[dmwy])*$/.test(date)){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1822 date = new Date();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1823 for (i=0; i < parts.length; i++){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1824 part = part_re.exec(parts[i]);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1825 dir = parseInt(part[1]);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1826 fn = fn_map[part[2]];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1827 date = Datepicker.prototype[fn](date, dir);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1828 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1829
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1830 return UTCDate(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1831 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1832 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1833
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1834 parts = date && date.match(this.nonpunctuation) || [];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1835 date = new Date();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1836
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1837 function applyNearbyYear(year, threshold){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1838 if (threshold === true)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1839 threshold = 10;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1840
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1841 // if year is 2 digits or less, than the user most likely is trying to get a recent century
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1842 if (year < 100){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1843 year += 2000;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1844 // if the new year is more than threshold years in advance, use last century
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1845 if (year > ((new Date()).getFullYear()+threshold)){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1846 year -= 100;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1847 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1848 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1849
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1850 return year;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1851 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1852
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1853 var parsed = {},
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1854 setters_order = ['yyyy', 'yy', 'M', 'MM', 'm', 'mm', 'd', 'dd'],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1855 setters_map = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1856 yyyy: function(d,v){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1857 return d.setUTCFullYear(assumeNearby ? applyNearbyYear(v, assumeNearby) : v);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1858 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1859 yy: function(d,v){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1860 return d.setUTCFullYear(assumeNearby ? applyNearbyYear(v, assumeNearby) : v);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1861 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1862 m: function(d,v){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1863 if (isNaN(d))
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1864 return d;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1865 v -= 1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1866 while (v < 0) v += 12;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1867 v %= 12;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1868 d.setUTCMonth(v);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1869 while (d.getUTCMonth() !== v)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1870 d.setUTCDate(d.getUTCDate()-1);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1871 return d;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1872 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1873 d: function(d,v){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1874 return d.setUTCDate(v);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1875 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1876 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1877 val, filtered;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1878 setters_map['M'] = setters_map['MM'] = setters_map['mm'] = setters_map['m'];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1879 setters_map['dd'] = setters_map['d'];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1880 date = UTCToday();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1881 var fparts = format.parts.slice();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1882 // Remove noop parts
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1883 if (parts.length !== fparts.length){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1884 fparts = $(fparts).filter(function(i,p){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1885 return $.inArray(p, setters_order) !== -1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1886 }).toArray();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1887 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1888 // Process remainder
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1889 function match_part(){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1890 var m = this.slice(0, parts[i].length),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1891 p = parts[i].slice(0, m.length);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1892 return m.toLowerCase() === p.toLowerCase();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1893 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1894 if (parts.length === fparts.length){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1895 var cnt;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1896 for (i=0, cnt = fparts.length; i < cnt; i++){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1897 val = parseInt(parts[i], 10);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1898 part = fparts[i];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1899 if (isNaN(val)){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1900 switch (part){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1901 case 'MM':
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1902 filtered = $(dates[language].months).filter(match_part);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1903 val = $.inArray(filtered[0], dates[language].months) + 1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1904 break;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1905 case 'M':
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1906 filtered = $(dates[language].monthsShort).filter(match_part);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1907 val = $.inArray(filtered[0], dates[language].monthsShort) + 1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1908 break;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1909 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1910 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1911 parsed[part] = val;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1912 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1913 var _date, s;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1914 for (i=0; i < setters_order.length; i++){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1915 s = setters_order[i];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1916 if (s in parsed && !isNaN(parsed[s])){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1917 _date = new Date(date);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1918 setters_map[s](_date, parsed[s]);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1919 if (!isNaN(_date))
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1920 date = _date;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1921 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1922 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1923 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1924 return date;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1925 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1926 formatDate: function(date, format, language){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1927 if (!date)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1928 return '';
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1929 if (typeof format === 'string')
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1930 format = DPGlobal.parseFormat(format);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1931 if (format.toDisplay)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1932 return format.toDisplay(date, format, language);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1933 var val = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1934 d: date.getUTCDate(),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1935 D: dates[language].daysShort[date.getUTCDay()],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1936 DD: dates[language].days[date.getUTCDay()],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1937 m: date.getUTCMonth() + 1,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1938 M: dates[language].monthsShort[date.getUTCMonth()],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1939 MM: dates[language].months[date.getUTCMonth()],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1940 yy: date.getUTCFullYear().toString().substring(2),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1941 yyyy: date.getUTCFullYear()
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1942 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1943 val.dd = (val.d < 10 ? '0' : '') + val.d;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1944 val.mm = (val.m < 10 ? '0' : '') + val.m;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1945 date = [];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1946 var seps = $.extend([], format.separators);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1947 for (var i=0, cnt = format.parts.length; i <= cnt; i++){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1948 if (seps.length)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1949 date.push(seps.shift());
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1950 date.push(val[format.parts[i]]);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1951 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1952 return date.join('');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1953 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1954 headTemplate: '<thead>'+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1955 '<tr>'+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1956 '<th colspan="7" class="datepicker-title"></th>'+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1957 '</tr>'+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1958 '<tr>'+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1959 '<th class="prev">&#171;</th>'+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1960 '<th colspan="5" class="datepicker-switch"></th>'+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1961 '<th class="next">&#187;</th>'+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1962 '</tr>'+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1963 '</thead>',
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1964 contTemplate: '<tbody><tr><td colspan="7"></td></tr></tbody>',
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1965 footTemplate: '<tfoot>'+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1966 '<tr>'+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1967 '<th colspan="7" class="today"></th>'+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1968 '</tr>'+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1969 '<tr>'+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1970 '<th colspan="7" class="clear"></th>'+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1971 '</tr>'+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1972 '</tfoot>'
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1973 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1974 DPGlobal.template = '<div class="datepicker">'+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1975 '<div class="datepicker-days">'+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1976 '<table class=" table-condensed">'+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1977 DPGlobal.headTemplate+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1978 '<tbody></tbody>'+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1979 DPGlobal.footTemplate+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1980 '</table>'+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1981 '</div>'+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1982 '<div class="datepicker-months">'+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1983 '<table class="table-condensed">'+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1984 DPGlobal.headTemplate+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1985 DPGlobal.contTemplate+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1986 DPGlobal.footTemplate+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1987 '</table>'+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1988 '</div>'+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1989 '<div class="datepicker-years">'+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1990 '<table class="table-condensed">'+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1991 DPGlobal.headTemplate+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1992 DPGlobal.contTemplate+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1993 DPGlobal.footTemplate+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1994 '</table>'+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1995 '</div>'+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1996 '<div class="datepicker-decades">'+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1997 '<table class="table-condensed">'+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1998 DPGlobal.headTemplate+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1999 DPGlobal.contTemplate+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2000 DPGlobal.footTemplate+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2001 '</table>'+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2002 '</div>'+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2003 '<div class="datepicker-centuries">'+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2004 '<table class="table-condensed">'+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2005 DPGlobal.headTemplate+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2006 DPGlobal.contTemplate+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2007 DPGlobal.footTemplate+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2008 '</table>'+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2009 '</div>'+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2010 '</div>';
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2011
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2012 $.fn.datepicker.DPGlobal = DPGlobal;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2013
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2014
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2015 /* DATEPICKER NO CONFLICT
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2016 * =================== */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2017
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2018 $.fn.datepicker.noConflict = function(){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2019 $.fn.datepicker = old;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2020 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2021 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2022
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2023 /* DATEPICKER VERSION
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2024 * =================== */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2025 $.fn.datepicker.version = '1.6.0-dev';
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2026
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2027 /* DATEPICKER DATA-API
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2028 * ================== */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2029
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2030 $(document).on(
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2031 'focus.datepicker.data-api click.datepicker.data-api',
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2032 '[data-provide="datepicker"]',
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2033 function(e){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2034 var $this = $(this);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2035 if ($this.data('datepicker'))
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2036 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2037 e.preventDefault();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2038 // component click requires us to explicitly show it
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2039 datepickerPlugin.call($this, 'show');
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2040 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2041 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2042 $(function(){
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2043 datepickerPlugin.call($('[data-provide="datepicker-inline"]'));
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2044 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2045
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2046 }));