bootstrap-daterangepicker-rails 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENSE +3 -0
- data/README.md +68 -0
- data/Rakefile +0 -0
- data/lib/bootstrap-daterangepicker-rails.rb +11 -0
- data/lib/bootstrap-daterangepicker-rails/helpers/input_helper.rb +13 -0
- data/lib/bootstrap-daterangepicker-rails/version.rb +7 -0
- data/vendor/assets/javascripts/date.js +145 -0
- data/vendor/assets/javascripts/daterangepicker.js +526 -0
- data/vendor/assets/stylesheets/daterangepicker.css +173 -0
- metadata +88 -0
data/LICENSE
ADDED
data/README.md
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
# Date Range Picker for Twitter Bootstrap
|
2
|
+
|
3
|
+
_Description from DateRangePicker for Twitter Bootstrap_
|
4
|
+
|
5
|
+
This date range picker component for Twitter Bootstrap creates a dropdown menu from which a user can
|
6
|
+
select a range of dates. It was created for the reporting UI at [Improvely](http://www.improvely.com).
|
7
|
+
|
8
|
+
If invoked with no options, it will present two calendars to choose a start
|
9
|
+
and end date from. Optionally, you can provide a list of date ranges the user can select from instead
|
10
|
+
of choosing dates from the calendars. If attached to a text input, the selected dates will be inserted
|
11
|
+
into the text box. Otherwise, you can provide a custom callback function to receive the selection.
|
12
|
+
|
13
|
+
[Live demo & option usage examples](http://www.dangrossman.info/2012/08/20/a-date-range-picker-for-twitter-bootstrap/)
|
14
|
+
|
15
|
+
## Usage
|
16
|
+
|
17
|
+
This component relies on [Twitter Bootstrap](http://twitter.github.com/bootstrap/),
|
18
|
+
[Datejs](http://www.datejs.com/) and [jQuery](http://jquery.com/).
|
19
|
+
|
20
|
+
Basic usage:
|
21
|
+
|
22
|
+
```
|
23
|
+
|
24
|
+
# Gemfile
|
25
|
+
gem 'jquery-rails'
|
26
|
+
gem 'bootstrap-daterangepicker-rails'
|
27
|
+
gem 'coffee-rails'
|
28
|
+
|
29
|
+
|
30
|
+
# application.js
|
31
|
+
|
32
|
+
//= require date
|
33
|
+
//= require daterangepicker
|
34
|
+
|
35
|
+
|
36
|
+
# application.css
|
37
|
+
|
38
|
+
/*
|
39
|
+
*= require bootstrap
|
40
|
+
*= require daterangepicker
|
41
|
+
*/
|
42
|
+
|
43
|
+
|
44
|
+
<script type="text/javascript">
|
45
|
+
$(document).ready(function() {
|
46
|
+
$('input[name="daterange"]').daterangepicker();
|
47
|
+
});
|
48
|
+
</script>
|
49
|
+
```
|
50
|
+
|
51
|
+
Additional options allow:
|
52
|
+
* Custom callback handler called when the date range selection is made
|
53
|
+
* Setting initial start and end dates for the calendars
|
54
|
+
* Bounding the minimum and maximum selectable dates
|
55
|
+
* Overriding all labels in the interface with localized text
|
56
|
+
* Starting the calendar week on any day of week
|
57
|
+
* Overriding the direction the dropdown expands (left/right of element it's attached to)
|
58
|
+
* Setting the date format string for parsing string inputs
|
59
|
+
|
60
|
+
Syntax for all the options can be found in the examples.html file.
|
61
|
+
|
62
|
+
## License
|
63
|
+
|
64
|
+
This code is made available under the [Apache License v2.0](http://www.apache.org/licenses/LICENSE-2.0),
|
65
|
+
the same as Twitter Bootstrap.
|
66
|
+
|
67
|
+
Date.js is included in this repository for convenience. It is available under the
|
68
|
+
[MIT license](http://www.opensource.org/licenses/mit-license.php).
|
data/Rakefile
ADDED
File without changes
|
@@ -0,0 +1,145 @@
|
|
1
|
+
/**
|
2
|
+
* @version: 1.0 Alpha-1
|
3
|
+
* @author: Coolite Inc. http://www.coolite.com/
|
4
|
+
* @date: 2008-05-13
|
5
|
+
* @copyright: Copyright (c) 2006-2008, Coolite Inc. (http://www.coolite.com/). All rights reserved.
|
6
|
+
* @license: Licensed under The MIT License. See http://www.datejs.com/license/.
|
7
|
+
* @website: http://www.datejs.com/
|
8
|
+
*/
|
9
|
+
Date.CultureInfo={name:"en-US",englishName:"English (United States)",nativeName:"English (United States)",dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],abbreviatedDayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],shortestDayNames:["Su","Mo","Tu","We","Th","Fr","Sa"],firstLetterDayNames:["S","M","T","W","T","F","S"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],abbreviatedMonthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],amDesignator:"AM",pmDesignator:"PM",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"mdy",formatPatterns:{shortDate:"M/d/yyyy",longDate:"dddd, MMMM dd, yyyy",shortTime:"h:mm tt",longTime:"h:mm:ss tt",fullDateTime:"dddd, MMMM dd, yyyy h:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^jan(uary)?/i,feb:/^feb(ruary)?/i,mar:/^mar(ch)?/i,apr:/^apr(il)?/i,may:/^may/i,jun:/^jun(e)?/i,jul:/^jul(y)?/i,aug:/^aug(ust)?/i,sep:/^sep(t(ember)?)?/i,oct:/^oct(ober)?/i,nov:/^nov(ember)?/i,dec:/^dec(ember)?/i,sun:/^su(n(day)?)?/i,mon:/^mo(n(day)?)?/i,tue:/^tu(e(s(day)?)?)?/i,wed:/^we(d(nesday)?)?/i,thu:/^th(u(r(s(day)?)?)?)?/i,fri:/^fr(i(day)?)?/i,sat:/^sa(t(urday)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\+|aft(er)?|from|hence)/i,subtract:/^(\-|bef(ore)?|ago)/i,yesterday:/^yes(terday)?/i,today:/^t(od(ay)?)?/i,tomorrow:/^tom(orrow)?/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^mn|min(ute)?s?/i,hour:/^h(our)?s?/i,week:/^w(eek)?s?/i,month:/^m(onth)?s?/i,day:/^d(ay)?s?/i,year:/^y(ear)?s?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\.?m?\.?|p\.?m?\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\s*(\+|\-)\s*\d\d\d\d?)|gmt|utc)/i,ordinalSuffix:/^\s*(st|nd|rd|th)/i,timeContext:/^\s*(\:|a(?!u|p)|p)/i},timezones:[{name:"UTC",offset:"-000"},{name:"GMT",offset:"-000"},{name:"EST",offset:"-0500"},{name:"EDT",offset:"-0400"},{name:"CST",offset:"-0600"},{name:"CDT",offset:"-0500"},{name:"MST",offset:"-0700"},{name:"MDT",offset:"-0600"},{name:"PST",offset:"-0800"},{name:"PDT",offset:"-0700"}]};
|
10
|
+
(function(){var $D=Date,$P=$D.prototype,$C=$D.CultureInfo,p=function(s,l){if(!l){l=2;}
|
11
|
+
return("000"+s).slice(l*-1);};$P.clearTime=function(){this.setHours(0);this.setMinutes(0);this.setSeconds(0);this.setMilliseconds(0);return this;};$P.setTimeToNow=function(){var n=new Date();this.setHours(n.getHours());this.setMinutes(n.getMinutes());this.setSeconds(n.getSeconds());this.setMilliseconds(n.getMilliseconds());return this;};$D.today=function(){return new Date().clearTime();};$D.compare=function(date1,date2){if(isNaN(date1)||isNaN(date2)){throw new Error(date1+" - "+date2);}else if(date1 instanceof Date&&date2 instanceof Date){return(date1<date2)?-1:(date1>date2)?1:0;}else{throw new TypeError(date1+" - "+date2);}};$D.equals=function(date1,date2){return(date1.compareTo(date2)===0);};$D.getDayNumberFromName=function(name){var n=$C.dayNames,m=$C.abbreviatedDayNames,o=$C.shortestDayNames,s=name.toLowerCase();for(var i=0;i<n.length;i++){if(n[i].toLowerCase()==s||m[i].toLowerCase()==s||o[i].toLowerCase()==s){return i;}}
|
12
|
+
return-1;};$D.getMonthNumberFromName=function(name){var n=$C.monthNames,m=$C.abbreviatedMonthNames,s=name.toLowerCase();for(var i=0;i<n.length;i++){if(n[i].toLowerCase()==s||m[i].toLowerCase()==s){return i;}}
|
13
|
+
return-1;};$D.isLeapYear=function(year){return((year%4===0&&year%100!==0)||year%400===0);};$D.getDaysInMonth=function(year,month){return[31,($D.isLeapYear(year)?29:28),31,30,31,30,31,31,30,31,30,31][month];};$D.getTimezoneAbbreviation=function(offset){var z=$C.timezones,p;for(var i=0;i<z.length;i++){if(z[i].offset===offset){return z[i].name;}}
|
14
|
+
return null;};$D.getTimezoneOffset=function(name){var z=$C.timezones,p;for(var i=0;i<z.length;i++){if(z[i].name===name.toUpperCase()){return z[i].offset;}}
|
15
|
+
return null;};$P.clone=function(){return new Date(this.getTime());};$P.compareTo=function(date){return Date.compare(this,date);};$P.equals=function(date){return Date.equals(this,date||new Date());};$P.between=function(start,end){return this.getTime()>=start.getTime()&&this.getTime()<=end.getTime();};$P.isAfter=function(date){return this.compareTo(date||new Date())===1;};$P.isBefore=function(date){return(this.compareTo(date||new Date())===-1);};$P.isToday=function(){return this.isSameDay(new Date());};$P.isSameDay=function(date){return this.clone().clearTime().equals(date.clone().clearTime());};$P.addMilliseconds=function(value){this.setMilliseconds(this.getMilliseconds()+value);return this;};$P.addSeconds=function(value){return this.addMilliseconds(value*1000);};$P.addMinutes=function(value){return this.addMilliseconds(value*60000);};$P.addHours=function(value){return this.addMilliseconds(value*3600000);};$P.addDays=function(value){this.setDate(this.getDate()+value);return this;};$P.addWeeks=function(value){return this.addDays(value*7);};$P.addMonths=function(value){var n=this.getDate();this.setDate(1);this.setMonth(this.getMonth()+value);this.setDate(Math.min(n,$D.getDaysInMonth(this.getFullYear(),this.getMonth())));return this;};$P.addYears=function(value){return this.addMonths(value*12);};$P.add=function(config){if(typeof config=="number"){this._orient=config;return this;}
|
16
|
+
var x=config;if(x.milliseconds){this.addMilliseconds(x.milliseconds);}
|
17
|
+
if(x.seconds){this.addSeconds(x.seconds);}
|
18
|
+
if(x.minutes){this.addMinutes(x.minutes);}
|
19
|
+
if(x.hours){this.addHours(x.hours);}
|
20
|
+
if(x.weeks){this.addWeeks(x.weeks);}
|
21
|
+
if(x.months){this.addMonths(x.months);}
|
22
|
+
if(x.years){this.addYears(x.years);}
|
23
|
+
if(x.days){this.addDays(x.days);}
|
24
|
+
return this;};var $y,$m,$d;$P.getWeek=function(){var a,b,c,d,e,f,g,n,s,w;$y=(!$y)?this.getFullYear():$y;$m=(!$m)?this.getMonth()+1:$m;$d=(!$d)?this.getDate():$d;if($m<=2){a=$y-1;b=(a/4|0)-(a/100|0)+(a/400|0);c=((a-1)/4|0)-((a-1)/100|0)+((a-1)/400|0);s=b-c;e=0;f=$d-1+(31*($m-1));}else{a=$y;b=(a/4|0)-(a/100|0)+(a/400|0);c=((a-1)/4|0)-((a-1)/100|0)+((a-1)/400|0);s=b-c;e=s+1;f=$d+((153*($m-3)+2)/5)+58+s;}
|
25
|
+
g=(a+b)%7;d=(f+g-e)%7;n=(f+3-d)|0;if(n<0){w=53-((g-s)/5|0);}else if(n>364+s){w=1;}else{w=(n/7|0)+1;}
|
26
|
+
$y=$m=$d=null;return w;};$P.getISOWeek=function(){$y=this.getUTCFullYear();$m=this.getUTCMonth()+1;$d=this.getUTCDate();return p(this.getWeek());};$P.setWeek=function(n){return this.moveToDayOfWeek(1).addWeeks(n-this.getWeek());};$D._validate=function(n,min,max,name){if(typeof n=="undefined"){return false;}else if(typeof n!="number"){throw new TypeError(n+" is not a Number.");}else if(n<min||n>max){throw new RangeError(n+" is not a valid value for "+name+".");}
|
27
|
+
return true;};$D.validateMillisecond=function(value){return $D._validate(value,0,999,"millisecond");};$D.validateSecond=function(value){return $D._validate(value,0,59,"second");};$D.validateMinute=function(value){return $D._validate(value,0,59,"minute");};$D.validateHour=function(value){return $D._validate(value,0,23,"hour");};$D.validateDay=function(value,year,month){return $D._validate(value,1,$D.getDaysInMonth(year,month),"day");};$D.validateMonth=function(value){return $D._validate(value,0,11,"month");};$D.validateYear=function(value){return $D._validate(value,0,9999,"year");};$P.set=function(config){if($D.validateMillisecond(config.millisecond)){this.addMilliseconds(config.millisecond-this.getMilliseconds());}
|
28
|
+
if($D.validateSecond(config.second)){this.addSeconds(config.second-this.getSeconds());}
|
29
|
+
if($D.validateMinute(config.minute)){this.addMinutes(config.minute-this.getMinutes());}
|
30
|
+
if($D.validateHour(config.hour)){this.addHours(config.hour-this.getHours());}
|
31
|
+
if($D.validateMonth(config.month)){this.addMonths(config.month-this.getMonth());}
|
32
|
+
if($D.validateYear(config.year)){this.addYears(config.year-this.getFullYear());}
|
33
|
+
if($D.validateDay(config.day,this.getFullYear(),this.getMonth())){this.addDays(config.day-this.getDate());}
|
34
|
+
if(config.timezone){this.setTimezone(config.timezone);}
|
35
|
+
if(config.timezoneOffset){this.setTimezoneOffset(config.timezoneOffset);}
|
36
|
+
if(config.week&&$D._validate(config.week,0,53,"week")){this.setWeek(config.week);}
|
37
|
+
return this;};$P.moveToFirstDayOfMonth=function(){return this.set({day:1});};$P.moveToLastDayOfMonth=function(){return this.set({day:$D.getDaysInMonth(this.getFullYear(),this.getMonth())});};$P.moveToNthOccurrence=function(dayOfWeek,occurrence){var shift=0;if(occurrence>0){shift=occurrence-1;}
|
38
|
+
else if(occurrence===-1){this.moveToLastDayOfMonth();if(this.getDay()!==dayOfWeek){this.moveToDayOfWeek(dayOfWeek,-1);}
|
39
|
+
return this;}
|
40
|
+
return this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek,+1).addWeeks(shift);};$P.moveToDayOfWeek=function(dayOfWeek,orient){var diff=(dayOfWeek-this.getDay()+7*(orient||+1))%7;return this.addDays((diff===0)?diff+=7*(orient||+1):diff);};$P.moveToMonth=function(month,orient){var diff=(month-this.getMonth()+12*(orient||+1))%12;return this.addMonths((diff===0)?diff+=12*(orient||+1):diff);};$P.getOrdinalNumber=function(){return Math.ceil((this.clone().clearTime()-new Date(this.getFullYear(),0,1))/86400000)+1;};$P.getTimezone=function(){return $D.getTimezoneAbbreviation(this.getUTCOffset());};$P.setTimezoneOffset=function(offset){var here=this.getTimezoneOffset(),there=Number(offset)*-6/10;return this.addMinutes(there-here);};$P.setTimezone=function(offset){return this.setTimezoneOffset($D.getTimezoneOffset(offset));};$P.hasDaylightSavingTime=function(){return(Date.today().set({month:0,day:1}).getTimezoneOffset()!==Date.today().set({month:6,day:1}).getTimezoneOffset());};$P.isDaylightSavingTime=function(){return(this.hasDaylightSavingTime()&&new Date().getTimezoneOffset()===Date.today().set({month:6,day:1}).getTimezoneOffset());};$P.getUTCOffset=function(){var n=this.getTimezoneOffset()*-10/6,r;if(n<0){r=(n-10000).toString();return r.charAt(0)+r.substr(2);}else{r=(n+10000).toString();return"+"+r.substr(1);}};$P.getElapsed=function(date){return(date||new Date())-this;};if(!$P.toISOString){$P.toISOString=function(){function f(n){return n<10?'0'+n:n;}
|
41
|
+
return'"'+this.getUTCFullYear()+'-'+
|
42
|
+
f(this.getUTCMonth()+1)+'-'+
|
43
|
+
f(this.getUTCDate())+'T'+
|
44
|
+
f(this.getUTCHours())+':'+
|
45
|
+
f(this.getUTCMinutes())+':'+
|
46
|
+
f(this.getUTCSeconds())+'Z"';};}
|
47
|
+
$P._toString=$P.toString;$P.toString=function(format){var x=this;if(format&&format.length==1){var c=$C.formatPatterns;x.t=x.toString;switch(format){case"d":return x.t(c.shortDate);case"D":return x.t(c.longDate);case"F":return x.t(c.fullDateTime);case"m":return x.t(c.monthDay);case"r":return x.t(c.rfc1123);case"s":return x.t(c.sortableDateTime);case"t":return x.t(c.shortTime);case"T":return x.t(c.longTime);case"u":return x.t(c.universalSortableDateTime);case"y":return x.t(c.yearMonth);}}
|
48
|
+
var ord=function(n){switch(n*1){case 1:case 21:case 31:return"st";case 2:case 22:return"nd";case 3:case 23:return"rd";default:return"th";}};return format?format.replace(/(\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S)/g,function(m){if(m.charAt(0)==="\\"){return m.replace("\\","");}
|
49
|
+
x.h=x.getHours;switch(m){case"hh":return p(x.h()<13?(x.h()===0?12:x.h()):(x.h()-12));case"h":return x.h()<13?(x.h()===0?12:x.h()):(x.h()-12);case"HH":return p(x.h());case"H":return x.h();case"mm":return p(x.getMinutes());case"m":return x.getMinutes();case"ss":return p(x.getSeconds());case"s":return x.getSeconds();case"yyyy":return p(x.getFullYear(),4);case"yy":return p(x.getFullYear());case"dddd":return $C.dayNames[x.getDay()];case"ddd":return $C.abbreviatedDayNames[x.getDay()];case"dd":return p(x.getDate());case"d":return x.getDate();case"MMMM":return $C.monthNames[x.getMonth()];case"MMM":return $C.abbreviatedMonthNames[x.getMonth()];case"MM":return p((x.getMonth()+1));case"M":return x.getMonth()+1;case"t":return x.h()<12?$C.amDesignator.substring(0,1):$C.pmDesignator.substring(0,1);case"tt":return x.h()<12?$C.amDesignator:$C.pmDesignator;case"S":return ord(x.getDate());default:return m;}}):this._toString();};}());
|
50
|
+
(function(){var $D=Date,$P=$D.prototype,$C=$D.CultureInfo,$N=Number.prototype;$P._orient=+1;$P._nth=null;$P._is=false;$P._same=false;$P._isSecond=false;$N._dateElement="day";$P.next=function(){this._orient=+1;return this;};$D.next=function(){return $D.today().next();};$P.last=$P.prev=$P.previous=function(){this._orient=-1;return this;};$D.last=$D.prev=$D.previous=function(){return $D.today().last();};$P.is=function(){this._is=true;return this;};$P.same=function(){this._same=true;this._isSecond=false;return this;};$P.today=function(){return this.same().day();};$P.weekday=function(){if(this._is){this._is=false;return(!this.is().sat()&&!this.is().sun());}
|
51
|
+
return false;};$P.at=function(time){return(typeof time==="string")?$D.parse(this.toString("d")+" "+time):this.set(time);};$N.fromNow=$N.after=function(date){var c={};c[this._dateElement]=this;return((!date)?new Date():date.clone()).add(c);};$N.ago=$N.before=function(date){var c={};c[this._dateElement]=this*-1;return((!date)?new Date():date.clone()).add(c);};var dx=("sunday monday tuesday wednesday thursday friday saturday").split(/\s/),mx=("january february march april may june july august september october november december").split(/\s/),px=("Millisecond Second Minute Hour Day Week Month Year").split(/\s/),pxf=("Milliseconds Seconds Minutes Hours Date Week Month FullYear").split(/\s/),nth=("final first second third fourth fifth").split(/\s/),de;$P.toObject=function(){var o={};for(var i=0;i<px.length;i++){o[px[i].toLowerCase()]=this["get"+pxf[i]]();}
|
52
|
+
return o;};$D.fromObject=function(config){config.week=null;return Date.today().set(config);};var df=function(n){return function(){if(this._is){this._is=false;return this.getDay()==n;}
|
53
|
+
if(this._nth!==null){if(this._isSecond){this.addSeconds(this._orient*-1);}
|
54
|
+
this._isSecond=false;var ntemp=this._nth;this._nth=null;var temp=this.clone().moveToLastDayOfMonth();this.moveToNthOccurrence(n,ntemp);if(this>temp){throw new RangeError($D.getDayName(n)+" does not occur "+ntemp+" times in the month of "+$D.getMonthName(temp.getMonth())+" "+temp.getFullYear()+".");}
|
55
|
+
return this;}
|
56
|
+
return this.moveToDayOfWeek(n,this._orient);};};var sdf=function(n){return function(){var t=$D.today(),shift=n-t.getDay();if(n===0&&$C.firstDayOfWeek===1&&t.getDay()!==0){shift=shift+7;}
|
57
|
+
return t.addDays(shift);};};for(var i=0;i<dx.length;i++){$D[dx[i].toUpperCase()]=$D[dx[i].toUpperCase().substring(0,3)]=i;$D[dx[i]]=$D[dx[i].substring(0,3)]=sdf(i);$P[dx[i]]=$P[dx[i].substring(0,3)]=df(i);}
|
58
|
+
var mf=function(n){return function(){if(this._is){this._is=false;return this.getMonth()===n;}
|
59
|
+
return this.moveToMonth(n,this._orient);};};var smf=function(n){return function(){return $D.today().set({month:n,day:1});};};for(var j=0;j<mx.length;j++){$D[mx[j].toUpperCase()]=$D[mx[j].toUpperCase().substring(0,3)]=j;$D[mx[j]]=$D[mx[j].substring(0,3)]=smf(j);$P[mx[j]]=$P[mx[j].substring(0,3)]=mf(j);}
|
60
|
+
var ef=function(j){return function(){if(this._isSecond){this._isSecond=false;return this;}
|
61
|
+
if(this._same){this._same=this._is=false;var o1=this.toObject(),o2=(arguments[0]||new Date()).toObject(),v="",k=j.toLowerCase();for(var m=(px.length-1);m>-1;m--){v=px[m].toLowerCase();if(o1[v]!=o2[v]){return false;}
|
62
|
+
if(k==v){break;}}
|
63
|
+
return true;}
|
64
|
+
if(j.substring(j.length-1)!="s"){j+="s";}
|
65
|
+
return this["add"+j](this._orient);};};var nf=function(n){return function(){this._dateElement=n;return this;};};for(var k=0;k<px.length;k++){de=px[k].toLowerCase();$P[de]=$P[de+"s"]=ef(px[k]);$N[de]=$N[de+"s"]=nf(de);}
|
66
|
+
$P._ss=ef("Second");var nthfn=function(n){return function(dayOfWeek){if(this._same){return this._ss(arguments[0]);}
|
67
|
+
if(dayOfWeek||dayOfWeek===0){return this.moveToNthOccurrence(dayOfWeek,n);}
|
68
|
+
this._nth=n;if(n===2&&(dayOfWeek===undefined||dayOfWeek===null)){this._isSecond=true;return this.addSeconds(this._orient);}
|
69
|
+
return this;};};for(var l=0;l<nth.length;l++){$P[nth[l]]=(l===0)?nthfn(-1):nthfn(l);}}());
|
70
|
+
(function(){Date.Parsing={Exception:function(s){this.message="Parse error at '"+s.substring(0,10)+" ...'";}};var $P=Date.Parsing;var _=$P.Operators={rtoken:function(r){return function(s){var mx=s.match(r);if(mx){return([mx[0],s.substring(mx[0].length)]);}else{throw new $P.Exception(s);}};},token:function(s){return function(s){return _.rtoken(new RegExp("^\s*"+s+"\s*"))(s);};},stoken:function(s){return _.rtoken(new RegExp("^"+s));},until:function(p){return function(s){var qx=[],rx=null;while(s.length){try{rx=p.call(this,s);}catch(e){qx.push(rx[0]);s=rx[1];continue;}
|
71
|
+
break;}
|
72
|
+
return[qx,s];};},many:function(p){return function(s){var rx=[],r=null;while(s.length){try{r=p.call(this,s);}catch(e){return[rx,s];}
|
73
|
+
rx.push(r[0]);s=r[1];}
|
74
|
+
return[rx,s];};},optional:function(p){return function(s){var r=null;try{r=p.call(this,s);}catch(e){return[null,s];}
|
75
|
+
return[r[0],r[1]];};},not:function(p){return function(s){try{p.call(this,s);}catch(e){return[null,s];}
|
76
|
+
throw new $P.Exception(s);};},ignore:function(p){return p?function(s){var r=null;r=p.call(this,s);return[null,r[1]];}:null;},product:function(){var px=arguments[0],qx=Array.prototype.slice.call(arguments,1),rx=[];for(var i=0;i<px.length;i++){rx.push(_.each(px[i],qx));}
|
77
|
+
return rx;},cache:function(rule){var cache={},r=null;return function(s){try{r=cache[s]=(cache[s]||rule.call(this,s));}catch(e){r=cache[s]=e;}
|
78
|
+
if(r instanceof $P.Exception){throw r;}else{return r;}};},any:function(){var px=arguments;return function(s){var r=null;for(var i=0;i<px.length;i++){if(px[i]==null){continue;}
|
79
|
+
try{r=(px[i].call(this,s));}catch(e){r=null;}
|
80
|
+
if(r){return r;}}
|
81
|
+
throw new $P.Exception(s);};},each:function(){var px=arguments;return function(s){var rx=[],r=null;for(var i=0;i<px.length;i++){if(px[i]==null){continue;}
|
82
|
+
try{r=(px[i].call(this,s));}catch(e){throw new $P.Exception(s);}
|
83
|
+
rx.push(r[0]);s=r[1];}
|
84
|
+
return[rx,s];};},all:function(){var px=arguments,_=_;return _.each(_.optional(px));},sequence:function(px,d,c){d=d||_.rtoken(/^\s*/);c=c||null;if(px.length==1){return px[0];}
|
85
|
+
return function(s){var r=null,q=null;var rx=[];for(var i=0;i<px.length;i++){try{r=px[i].call(this,s);}catch(e){break;}
|
86
|
+
rx.push(r[0]);try{q=d.call(this,r[1]);}catch(ex){q=null;break;}
|
87
|
+
s=q[1];}
|
88
|
+
if(!r){throw new $P.Exception(s);}
|
89
|
+
if(q){throw new $P.Exception(q[1]);}
|
90
|
+
if(c){try{r=c.call(this,r[1]);}catch(ey){throw new $P.Exception(r[1]);}}
|
91
|
+
return[rx,(r?r[1]:s)];};},between:function(d1,p,d2){d2=d2||d1;var _fn=_.each(_.ignore(d1),p,_.ignore(d2));return function(s){var rx=_fn.call(this,s);return[[rx[0][0],r[0][2]],rx[1]];};},list:function(p,d,c){d=d||_.rtoken(/^\s*/);c=c||null;return(p instanceof Array?_.each(_.product(p.slice(0,-1),_.ignore(d)),p.slice(-1),_.ignore(c)):_.each(_.many(_.each(p,_.ignore(d))),px,_.ignore(c)));},set:function(px,d,c){d=d||_.rtoken(/^\s*/);c=c||null;return function(s){var r=null,p=null,q=null,rx=null,best=[[],s],last=false;for(var i=0;i<px.length;i++){q=null;p=null;r=null;last=(px.length==1);try{r=px[i].call(this,s);}catch(e){continue;}
|
92
|
+
rx=[[r[0]],r[1]];if(r[1].length>0&&!last){try{q=d.call(this,r[1]);}catch(ex){last=true;}}else{last=true;}
|
93
|
+
if(!last&&q[1].length===0){last=true;}
|
94
|
+
if(!last){var qx=[];for(var j=0;j<px.length;j++){if(i!=j){qx.push(px[j]);}}
|
95
|
+
p=_.set(qx,d).call(this,q[1]);if(p[0].length>0){rx[0]=rx[0].concat(p[0]);rx[1]=p[1];}}
|
96
|
+
if(rx[1].length<best[1].length){best=rx;}
|
97
|
+
if(best[1].length===0){break;}}
|
98
|
+
if(best[0].length===0){return best;}
|
99
|
+
if(c){try{q=c.call(this,best[1]);}catch(ey){throw new $P.Exception(best[1]);}
|
100
|
+
best[1]=q[1];}
|
101
|
+
return best;};},forward:function(gr,fname){return function(s){return gr[fname].call(this,s);};},replace:function(rule,repl){return function(s){var r=rule.call(this,s);return[repl,r[1]];};},process:function(rule,fn){return function(s){var r=rule.call(this,s);return[fn.call(this,r[0]),r[1]];};},min:function(min,rule){return function(s){var rx=rule.call(this,s);if(rx[0].length<min){throw new $P.Exception(s);}
|
102
|
+
return rx;};}};var _generator=function(op){return function(){var args=null,rx=[];if(arguments.length>1){args=Array.prototype.slice.call(arguments);}else if(arguments[0]instanceof Array){args=arguments[0];}
|
103
|
+
if(args){for(var i=0,px=args.shift();i<px.length;i++){args.unshift(px[i]);rx.push(op.apply(null,args));args.shift();return rx;}}else{return op.apply(null,arguments);}};};var gx="optional not ignore cache".split(/\s/);for(var i=0;i<gx.length;i++){_[gx[i]]=_generator(_[gx[i]]);}
|
104
|
+
var _vector=function(op){return function(){if(arguments[0]instanceof Array){return op.apply(null,arguments[0]);}else{return op.apply(null,arguments);}};};var vx="each any all".split(/\s/);for(var j=0;j<vx.length;j++){_[vx[j]]=_vector(_[vx[j]]);}}());(function(){var $D=Date,$P=$D.prototype,$C=$D.CultureInfo;var flattenAndCompact=function(ax){var rx=[];for(var i=0;i<ax.length;i++){if(ax[i]instanceof Array){rx=rx.concat(flattenAndCompact(ax[i]));}else{if(ax[i]){rx.push(ax[i]);}}}
|
105
|
+
return rx;};$D.Grammar={};$D.Translator={hour:function(s){return function(){this.hour=Number(s);};},minute:function(s){return function(){this.minute=Number(s);};},second:function(s){return function(){this.second=Number(s);};},meridian:function(s){return function(){this.meridian=s.slice(0,1).toLowerCase();};},timezone:function(s){return function(){var n=s.replace(/[^\d\+\-]/g,"");if(n.length){this.timezoneOffset=Number(n);}else{this.timezone=s.toLowerCase();}};},day:function(x){var s=x[0];return function(){this.day=Number(s.match(/\d+/)[0]);};},month:function(s){return function(){this.month=(s.length==3)?"jan feb mar apr may jun jul aug sep oct nov dec".indexOf(s)/4:Number(s)-1;};},year:function(s){return function(){var n=Number(s);this.year=((s.length>2)?n:(n+(((n+2000)<$C.twoDigitYearMax)?2000:1900)));};},rday:function(s){return function(){switch(s){case"yesterday":this.days=-1;break;case"tomorrow":this.days=1;break;case"today":this.days=0;break;case"now":this.days=0;this.now=true;break;}};},finishExact:function(x){x=(x instanceof Array)?x:[x];for(var i=0;i<x.length;i++){if(x[i]){x[i].call(this);}}
|
106
|
+
var now=new Date();if((this.hour||this.minute)&&(!this.month&&!this.year&&!this.day)){this.day=now.getDate();}
|
107
|
+
if(!this.year){this.year=now.getFullYear();}
|
108
|
+
if(!this.month&&this.month!==0){this.month=now.getMonth();}
|
109
|
+
if(!this.day){this.day=1;}
|
110
|
+
if(!this.hour){this.hour=0;}
|
111
|
+
if(!this.minute){this.minute=0;}
|
112
|
+
if(!this.second){this.second=0;}
|
113
|
+
if(this.meridian&&this.hour){if(this.meridian=="p"&&this.hour<12){this.hour=this.hour+12;}else if(this.meridian=="a"&&this.hour==12){this.hour=0;}}
|
114
|
+
if(this.day>$D.getDaysInMonth(this.year,this.month)){throw new RangeError(this.day+" is not a valid value for days.");}
|
115
|
+
var r=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second);if(this.timezone){r.set({timezone:this.timezone});}else if(this.timezoneOffset){r.set({timezoneOffset:this.timezoneOffset});}
|
116
|
+
return r;},finish:function(x){x=(x instanceof Array)?flattenAndCompact(x):[x];if(x.length===0){return null;}
|
117
|
+
for(var i=0;i<x.length;i++){if(typeof x[i]=="function"){x[i].call(this);}}
|
118
|
+
var today=$D.today();if(this.now&&!this.unit&&!this.operator){return new Date();}else if(this.now){today=new Date();}
|
119
|
+
var expression=!!(this.days&&this.days!==null||this.orient||this.operator);var gap,mod,orient;orient=((this.orient=="past"||this.operator=="subtract")?-1:1);if(!this.now&&"hour minute second".indexOf(this.unit)!=-1){today.setTimeToNow();}
|
120
|
+
if(this.month||this.month===0){if("year day hour minute second".indexOf(this.unit)!=-1){this.value=this.month+1;this.month=null;expression=true;}}
|
121
|
+
if(!expression&&this.weekday&&!this.day&&!this.days){var temp=Date[this.weekday]();this.day=temp.getDate();if(!this.month){this.month=temp.getMonth();}
|
122
|
+
this.year=temp.getFullYear();}
|
123
|
+
if(expression&&this.weekday&&this.unit!="month"){this.unit="day";gap=($D.getDayNumberFromName(this.weekday)-today.getDay());mod=7;this.days=gap?((gap+(orient*mod))%mod):(orient*mod);}
|
124
|
+
if(this.month&&this.unit=="day"&&this.operator){this.value=(this.month+1);this.month=null;}
|
125
|
+
if(this.value!=null&&this.month!=null&&this.year!=null){this.day=this.value*1;}
|
126
|
+
if(this.month&&!this.day&&this.value){today.set({day:this.value*1});if(!expression){this.day=this.value*1;}}
|
127
|
+
if(!this.month&&this.value&&this.unit=="month"&&!this.now){this.month=this.value;expression=true;}
|
128
|
+
if(expression&&(this.month||this.month===0)&&this.unit!="year"){this.unit="month";gap=(this.month-today.getMonth());mod=12;this.months=gap?((gap+(orient*mod))%mod):(orient*mod);this.month=null;}
|
129
|
+
if(!this.unit){this.unit="day";}
|
130
|
+
if(!this.value&&this.operator&&this.operator!==null&&this[this.unit+"s"]&&this[this.unit+"s"]!==null){this[this.unit+"s"]=this[this.unit+"s"]+((this.operator=="add")?1:-1)+(this.value||0)*orient;}else if(this[this.unit+"s"]==null||this.operator!=null){if(!this.value){this.value=1;}
|
131
|
+
this[this.unit+"s"]=this.value*orient;}
|
132
|
+
if(this.meridian&&this.hour){if(this.meridian=="p"&&this.hour<12){this.hour=this.hour+12;}else if(this.meridian=="a"&&this.hour==12){this.hour=0;}}
|
133
|
+
if(this.weekday&&!this.day&&!this.days){var temp=Date[this.weekday]();this.day=temp.getDate();if(temp.getMonth()!==today.getMonth()){this.month=temp.getMonth();}}
|
134
|
+
if((this.month||this.month===0)&&!this.day){this.day=1;}
|
135
|
+
if(!this.orient&&!this.operator&&this.unit=="week"&&this.value&&!this.day&&!this.month){return Date.today().setWeek(this.value);}
|
136
|
+
if(expression&&this.timezone&&this.day&&this.days){this.day=this.days;}
|
137
|
+
return(expression)?today.add(this):today.set(this);}};var _=$D.Parsing.Operators,g=$D.Grammar,t=$D.Translator,_fn;g.datePartDelimiter=_.rtoken(/^([\s\-\.\,\/\x27]+)/);g.timePartDelimiter=_.stoken(":");g.whiteSpace=_.rtoken(/^\s*/);g.generalDelimiter=_.rtoken(/^(([\s\,]|at|@|on)+)/);var _C={};g.ctoken=function(keys){var fn=_C[keys];if(!fn){var c=$C.regexPatterns;var kx=keys.split(/\s+/),px=[];for(var i=0;i<kx.length;i++){px.push(_.replace(_.rtoken(c[kx[i]]),kx[i]));}
|
138
|
+
fn=_C[keys]=_.any.apply(null,px);}
|
139
|
+
return fn;};g.ctoken2=function(key){return _.rtoken($C.regexPatterns[key]);};g.h=_.cache(_.process(_.rtoken(/^(0[0-9]|1[0-2]|[1-9])/),t.hour));g.hh=_.cache(_.process(_.rtoken(/^(0[0-9]|1[0-2])/),t.hour));g.H=_.cache(_.process(_.rtoken(/^([0-1][0-9]|2[0-3]|[0-9])/),t.hour));g.HH=_.cache(_.process(_.rtoken(/^([0-1][0-9]|2[0-3])/),t.hour));g.m=_.cache(_.process(_.rtoken(/^([0-5][0-9]|[0-9])/),t.minute));g.mm=_.cache(_.process(_.rtoken(/^[0-5][0-9]/),t.minute));g.s=_.cache(_.process(_.rtoken(/^([0-5][0-9]|[0-9])/),t.second));g.ss=_.cache(_.process(_.rtoken(/^[0-5][0-9]/),t.second));g.hms=_.cache(_.sequence([g.H,g.m,g.s],g.timePartDelimiter));g.t=_.cache(_.process(g.ctoken2("shortMeridian"),t.meridian));g.tt=_.cache(_.process(g.ctoken2("longMeridian"),t.meridian));g.z=_.cache(_.process(_.rtoken(/^((\+|\-)\s*\d\d\d\d)|((\+|\-)\d\d\:?\d\d)/),t.timezone));g.zz=_.cache(_.process(_.rtoken(/^((\+|\-)\s*\d\d\d\d)|((\+|\-)\d\d\:?\d\d)/),t.timezone));g.zzz=_.cache(_.process(g.ctoken2("timezone"),t.timezone));g.timeSuffix=_.each(_.ignore(g.whiteSpace),_.set([g.tt,g.zzz]));g.time=_.each(_.optional(_.ignore(_.stoken("T"))),g.hms,g.timeSuffix);g.d=_.cache(_.process(_.each(_.rtoken(/^([0-2]\d|3[0-1]|\d)/),_.optional(g.ctoken2("ordinalSuffix"))),t.day));g.dd=_.cache(_.process(_.each(_.rtoken(/^([0-2]\d|3[0-1])/),_.optional(g.ctoken2("ordinalSuffix"))),t.day));g.ddd=g.dddd=_.cache(_.process(g.ctoken("sun mon tue wed thu fri sat"),function(s){return function(){this.weekday=s;};}));g.M=_.cache(_.process(_.rtoken(/^(1[0-2]|0\d|\d)/),t.month));g.MM=_.cache(_.process(_.rtoken(/^(1[0-2]|0\d)/),t.month));g.MMM=g.MMMM=_.cache(_.process(g.ctoken("jan feb mar apr may jun jul aug sep oct nov dec"),t.month));g.y=_.cache(_.process(_.rtoken(/^(\d\d?)/),t.year));g.yy=_.cache(_.process(_.rtoken(/^(\d\d)/),t.year));g.yyy=_.cache(_.process(_.rtoken(/^(\d\d?\d?\d?)/),t.year));g.yyyy=_.cache(_.process(_.rtoken(/^(\d\d\d\d)/),t.year));_fn=function(){return _.each(_.any.apply(null,arguments),_.not(g.ctoken2("timeContext")));};g.day=_fn(g.d,g.dd);g.month=_fn(g.M,g.MMM);g.year=_fn(g.yyyy,g.yy);g.orientation=_.process(g.ctoken("past future"),function(s){return function(){this.orient=s;};});g.operator=_.process(g.ctoken("add subtract"),function(s){return function(){this.operator=s;};});g.rday=_.process(g.ctoken("yesterday tomorrow today now"),t.rday);g.unit=_.process(g.ctoken("second minute hour day week month year"),function(s){return function(){this.unit=s;};});g.value=_.process(_.rtoken(/^\d\d?(st|nd|rd|th)?/),function(s){return function(){this.value=s.replace(/\D/g,"");};});g.expression=_.set([g.rday,g.operator,g.value,g.unit,g.orientation,g.ddd,g.MMM]);_fn=function(){return _.set(arguments,g.datePartDelimiter);};g.mdy=_fn(g.ddd,g.month,g.day,g.year);g.ymd=_fn(g.ddd,g.year,g.month,g.day);g.dmy=_fn(g.ddd,g.day,g.month,g.year);g.date=function(s){return((g[$C.dateElementOrder]||g.mdy).call(this,s));};g.format=_.process(_.many(_.any(_.process(_.rtoken(/^(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),function(fmt){if(g[fmt]){return g[fmt];}else{throw $D.Parsing.Exception(fmt);}}),_.process(_.rtoken(/^[^dMyhHmstz]+/),function(s){return _.ignore(_.stoken(s));}))),function(rules){return _.process(_.each.apply(null,rules),t.finishExact);});var _F={};var _get=function(f){return _F[f]=(_F[f]||g.format(f)[0]);};g.formats=function(fx){if(fx instanceof Array){var rx=[];for(var i=0;i<fx.length;i++){rx.push(_get(fx[i]));}
|
140
|
+
return _.any.apply(null,rx);}else{return _get(fx);}};g._formats=g.formats(["\"yyyy-MM-ddTHH:mm:ssZ\"","yyyy-MM-ddTHH:mm:ssZ","yyyy-MM-ddTHH:mm:ssz","yyyy-MM-ddTHH:mm:ss","yyyy-MM-ddTHH:mmZ","yyyy-MM-ddTHH:mmz","yyyy-MM-ddTHH:mm","ddd, MMM dd, yyyy H:mm:ss tt","ddd MMM d yyyy HH:mm:ss zzz","MMddyyyy","ddMMyyyy","Mddyyyy","ddMyyyy","Mdyyyy","dMyyyy","yyyy","Mdyy","dMyy","d"]);g._start=_.process(_.set([g.date,g.time,g.expression],g.generalDelimiter,g.whiteSpace),t.finish);g.start=function(s){try{var r=g._formats.call({},s);if(r[1].length===0){return r;}}catch(e){}
|
141
|
+
return g._start.call({},s);};$D._parse=$D.parse;$D.parse=function(s){var r=null;if(!s){return null;}
|
142
|
+
if(s instanceof Date){return s;}
|
143
|
+
try{r=$D.Grammar.start.call({},s.replace(/^\s*(\S*(\s+\S+)*)\s*$/,"$1"));}catch(e){return null;}
|
144
|
+
return((r[1].length===0)?r[0]:null);};$D.getParseFunction=function(fx){var fn=$D.Grammar.formats(fx);return function(s){var r=null;try{r=fn.call({},s);}catch(e){return null;}
|
145
|
+
return((r[1].length===0)?r[0]:null);};};$D.parseExact=function(s,fx){return $D.getParseFunction(fx)(s);};}());
|
@@ -0,0 +1,526 @@
|
|
1
|
+
/**
|
2
|
+
* @version: 1.0
|
3
|
+
* @author: Dan Grossman http://www.dangrossman.info/
|
4
|
+
* @date: 2012-08-20
|
5
|
+
* @copyright: Copyright (c) 2012 Dan Grossman. All rights reserved.
|
6
|
+
* @license: Licensed under Apache License v2.0. See http://www.apache.org/licenses/LICENSE-2.0
|
7
|
+
* @website: http://www.improvely.com/
|
8
|
+
*/
|
9
|
+
!function ($) {
|
10
|
+
|
11
|
+
var DateRangePicker = function (element, options, cb) {
|
12
|
+
var hasOptions = typeof options == 'object'
|
13
|
+
var localeObject;
|
14
|
+
|
15
|
+
//state
|
16
|
+
this.startDate = Date.today();
|
17
|
+
this.endDate = Date.today();
|
18
|
+
this.minDate = false;
|
19
|
+
this.maxDate = false;
|
20
|
+
this.changed = false;
|
21
|
+
this.ranges = {};
|
22
|
+
this.opens = 'right';
|
23
|
+
this.cb = function () { };
|
24
|
+
this.format = 'MM/dd/yyyy';
|
25
|
+
this.locale = {
|
26
|
+
applyLabel:"Apply",
|
27
|
+
fromLabel:"From",
|
28
|
+
toLabel:"To",
|
29
|
+
customRangeLabel:"Custom Range",
|
30
|
+
daysOfWeek:['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr','Sa'],
|
31
|
+
monthNames:['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
|
32
|
+
firstDay:0
|
33
|
+
};
|
34
|
+
|
35
|
+
localeObject = this.locale;
|
36
|
+
|
37
|
+
this.leftCalendar = {
|
38
|
+
month: Date.today().set({ day: 1, month: this.startDate.getMonth(), year: this.startDate.getFullYear() }),
|
39
|
+
calendar: Array()
|
40
|
+
};
|
41
|
+
|
42
|
+
this.rightCalendar = {
|
43
|
+
month: Date.today().set({ day: 1, month: this.endDate.getMonth(), year: this.endDate.getFullYear() }),
|
44
|
+
calendar: Array()
|
45
|
+
};
|
46
|
+
|
47
|
+
//element that triggered the date range picker
|
48
|
+
this.element = $(element);
|
49
|
+
|
50
|
+
if (this.element.hasClass('pull-right'))
|
51
|
+
this.opens = 'left';
|
52
|
+
|
53
|
+
if (this.element.is('input')) {
|
54
|
+
this.element.on({
|
55
|
+
click: $.proxy(this.show, this),
|
56
|
+
focus: $.proxy(this.show, this),
|
57
|
+
blur: $.proxy(this.hide, this)
|
58
|
+
});
|
59
|
+
} else {
|
60
|
+
this.element.on('click', $.proxy(this.show, this));
|
61
|
+
}
|
62
|
+
|
63
|
+
if (hasOptions) {
|
64
|
+
if(typeof options.locale == 'object') {
|
65
|
+
$.each(localeObject, function (property, value) {
|
66
|
+
localeObject[property] = options.locale[property] || value;
|
67
|
+
});
|
68
|
+
}
|
69
|
+
}
|
70
|
+
|
71
|
+
var DRPTemplate = '<div class="daterangepicker dropdown-menu">' +
|
72
|
+
'<div class="calendar left"></div>' +
|
73
|
+
'<div class="calendar right"></div>' +
|
74
|
+
'<div class="ranges">' +
|
75
|
+
'<div class="range_inputs">' +
|
76
|
+
'<div style="float: left">' +
|
77
|
+
'<label for="daterangepicker_start">' + this.locale.fromLabel + '</label>' +
|
78
|
+
'<input class="input-mini" type="text" name="daterangepicker_start" value="" disabled="disabled" />' +
|
79
|
+
'</div>' +
|
80
|
+
'<div style="float: left; padding-left: 11px">' +
|
81
|
+
'<label for="daterangepicker_end">' + this.locale.toLabel + '</label>' +
|
82
|
+
'<input class="input-mini" type="text" name="daterangepicker_end" value="" disabled="disabled" />' +
|
83
|
+
'</div>' +
|
84
|
+
'<button class="btn btn-small btn-success" disabled="disabled">' + this.locale.applyLabel + '</button>' +
|
85
|
+
'</div>' +
|
86
|
+
'</div>' +
|
87
|
+
'</div>';
|
88
|
+
|
89
|
+
//the date range picker
|
90
|
+
this.container = $(DRPTemplate).appendTo('body');
|
91
|
+
|
92
|
+
if (hasOptions) {
|
93
|
+
|
94
|
+
if (typeof options.format == 'string')
|
95
|
+
this.format = options.format;
|
96
|
+
|
97
|
+
if (typeof options.startDate == 'string')
|
98
|
+
this.startDate = Date.parse(options.startDate, this.format);
|
99
|
+
|
100
|
+
if (typeof options.endDate == 'string')
|
101
|
+
this.endDate = Date.parse(options.endDate, this.format);
|
102
|
+
|
103
|
+
if (typeof options.minDate == 'string')
|
104
|
+
this.minDate = Date.parse(options.minDate, this.format);
|
105
|
+
|
106
|
+
if (typeof options.maxDate == 'string')
|
107
|
+
this.maxDate = Date.parse(options.maxDate, this.format);
|
108
|
+
|
109
|
+
|
110
|
+
if (typeof options.startDate == 'object')
|
111
|
+
this.startDate = options.startDate;
|
112
|
+
|
113
|
+
if (typeof options.endDate == 'object')
|
114
|
+
this.endDate = options.endDate;
|
115
|
+
|
116
|
+
if (typeof options.minDate == 'object')
|
117
|
+
this.minDate = options.minDate;
|
118
|
+
|
119
|
+
if (typeof options.maxDate == 'object')
|
120
|
+
this.maxDate = options.maxDate;
|
121
|
+
|
122
|
+
if (typeof options.ranges == 'object') {
|
123
|
+
for (var range in options.ranges) {
|
124
|
+
|
125
|
+
var start = options.ranges[range][0];
|
126
|
+
var end = options.ranges[range][1];
|
127
|
+
|
128
|
+
if (typeof start == 'string')
|
129
|
+
start = Date.parse(start);
|
130
|
+
|
131
|
+
if (typeof end == 'string')
|
132
|
+
end = Date.parse(end);
|
133
|
+
|
134
|
+
// If we have a min/max date set, bound this range
|
135
|
+
// to it, but only if it would otherwise fall
|
136
|
+
// outside of the min/max.
|
137
|
+
if (this.minDate && start < this.minDate)
|
138
|
+
start = this.minDate;
|
139
|
+
|
140
|
+
if (this.maxDate && end > this.maxDate)
|
141
|
+
end = this.maxDate;
|
142
|
+
|
143
|
+
// If the end of the range is before the minimum (if min is set) OR
|
144
|
+
// the start of the range is after the max (also if set) don't display this
|
145
|
+
// range option.
|
146
|
+
if ((this.minDate && end < this.minDate) || (this.maxDate && start > this.maxDate))
|
147
|
+
{
|
148
|
+
continue;
|
149
|
+
}
|
150
|
+
|
151
|
+
this.ranges[range] = [start, end];
|
152
|
+
}
|
153
|
+
|
154
|
+
var list = '<ul>';
|
155
|
+
for (var range in this.ranges) {
|
156
|
+
list += '<li>' + range + '</li>';
|
157
|
+
}
|
158
|
+
list += '<li>' + this.locale.customRangeLabel + '</li>';
|
159
|
+
list += '</ul>';
|
160
|
+
this.container.find('.ranges').prepend(list);
|
161
|
+
}
|
162
|
+
|
163
|
+
// update day names order to firstDay
|
164
|
+
if (typeof options.locale == 'object') {
|
165
|
+
if (typeof options.locale.firstDay == 'number') {
|
166
|
+
this.locale.firstDay = options.locale.firstDay;
|
167
|
+
var iterator = options.locale.firstDay;
|
168
|
+
while (iterator > 0) {
|
169
|
+
this.locale.daysOfWeek.push(this.locale.daysOfWeek.shift());
|
170
|
+
iterator--;
|
171
|
+
}
|
172
|
+
}
|
173
|
+
}
|
174
|
+
|
175
|
+
if (typeof options.opens == 'string')
|
176
|
+
this.opens = options.opens;
|
177
|
+
}
|
178
|
+
|
179
|
+
if (this.opens == 'right') {
|
180
|
+
//swap calendar positions
|
181
|
+
var left = this.container.find('.calendar.left');
|
182
|
+
var right = this.container.find('.calendar.right');
|
183
|
+
left.removeClass('left').addClass('right');
|
184
|
+
right.removeClass('right').addClass('left');
|
185
|
+
}
|
186
|
+
|
187
|
+
if (typeof options == 'undefined' || typeof options.ranges == 'undefined')
|
188
|
+
this.container.find('.calendar').show();
|
189
|
+
|
190
|
+
if (typeof cb == 'function')
|
191
|
+
this.cb = cb;
|
192
|
+
|
193
|
+
this.container.addClass('opens' + this.opens);
|
194
|
+
|
195
|
+
//event listeners
|
196
|
+
this.container.on('mousedown', $.proxy(this.mousedown, this));
|
197
|
+
this.container.find('.calendar').on('click', '.prev', $.proxy(this.clickPrev, this));
|
198
|
+
this.container.find('.calendar').on('click', '.next', $.proxy(this.clickNext, this));
|
199
|
+
this.container.find('.ranges').on('click', 'button', $.proxy(this.clickApply, this));
|
200
|
+
|
201
|
+
this.container.find('.calendar').on('click', 'td.available', $.proxy(this.clickDate, this));
|
202
|
+
this.container.find('.calendar').on('mouseenter', 'td.available', $.proxy(this.enterDate, this));
|
203
|
+
this.container.find('.calendar').on('mouseleave', 'td.available', $.proxy(this.updateView, this));
|
204
|
+
|
205
|
+
this.container.find('.ranges').on('click', 'li', $.proxy(this.clickRange, this));
|
206
|
+
this.container.find('.ranges').on('mouseenter', 'li', $.proxy(this.enterRange, this));
|
207
|
+
this.container.find('.ranges').on('mouseleave', 'li', $.proxy(this.updateView, this));
|
208
|
+
|
209
|
+
this.element.on('keyup', $.proxy(this.updateFromControl, this));
|
210
|
+
|
211
|
+
this.updateView();
|
212
|
+
this.updateCalendars();
|
213
|
+
|
214
|
+
};
|
215
|
+
|
216
|
+
DateRangePicker.prototype = {
|
217
|
+
|
218
|
+
constructor: DateRangePicker,
|
219
|
+
|
220
|
+
mousedown: function (e) {
|
221
|
+
e.stopPropagation();
|
222
|
+
e.preventDefault();
|
223
|
+
},
|
224
|
+
|
225
|
+
updateView: function () {
|
226
|
+
this.leftCalendar.month.set({ month: this.startDate.getMonth(), year: this.startDate.getFullYear() });
|
227
|
+
this.rightCalendar.month.set({ month: this.endDate.getMonth(), year: this.endDate.getFullYear() });
|
228
|
+
|
229
|
+
this.container.find('input[name=daterangepicker_start]').val(this.startDate.toString(this.format));
|
230
|
+
this.container.find('input[name=daterangepicker_end]').val(this.endDate.toString(this.format));
|
231
|
+
|
232
|
+
if (this.startDate.equals(this.endDate) || this.startDate.isBefore(this.endDate)) {
|
233
|
+
this.container.find('button').removeAttr('disabled');
|
234
|
+
} else {
|
235
|
+
this.container.find('button').attr('disabled', 'disabled');
|
236
|
+
}
|
237
|
+
},
|
238
|
+
|
239
|
+
updateFromControl: function () {
|
240
|
+
if (!this.element.is('input')) return;
|
241
|
+
|
242
|
+
var dateString = this.element.val().split(" - ");
|
243
|
+
var start = Date.parseExact(dateString[0], this.format);
|
244
|
+
var end = Date.parseExact(dateString[1], this.format);
|
245
|
+
|
246
|
+
if (start == null || end == null) return;
|
247
|
+
if (end.isBefore(start)) return;
|
248
|
+
|
249
|
+
this.startDate = start;
|
250
|
+
this.endDate = end;
|
251
|
+
|
252
|
+
this.updateView();
|
253
|
+
this.cb(this.startDate, this.endDate);
|
254
|
+
this.updateCalendars();
|
255
|
+
},
|
256
|
+
|
257
|
+
notify: function () {
|
258
|
+
this.updateView();
|
259
|
+
|
260
|
+
if (this.element.is('input')) {
|
261
|
+
this.element.val(this.startDate.toString(this.format) + ' - ' + this.endDate.toString(this.format));
|
262
|
+
}
|
263
|
+
this.cb(this.startDate, this.endDate);
|
264
|
+
},
|
265
|
+
|
266
|
+
move: function () {
|
267
|
+
if (this.opens == 'left') {
|
268
|
+
this.container.css({
|
269
|
+
top: this.element.offset().top + this.element.outerHeight(),
|
270
|
+
right: $(window).width() - this.element.offset().left - this.element.outerWidth(),
|
271
|
+
left: 'auto'
|
272
|
+
});
|
273
|
+
} else {
|
274
|
+
this.container.css({
|
275
|
+
top: this.element.offset().top + this.element.outerHeight(),
|
276
|
+
left: this.element.offset().left,
|
277
|
+
right: 'auto'
|
278
|
+
});
|
279
|
+
}
|
280
|
+
},
|
281
|
+
|
282
|
+
show: function (e) {
|
283
|
+
this.container.show();
|
284
|
+
this.move();
|
285
|
+
|
286
|
+
if (e) {
|
287
|
+
e.stopPropagation();
|
288
|
+
e.preventDefault();
|
289
|
+
}
|
290
|
+
|
291
|
+
this.changed = false;
|
292
|
+
|
293
|
+
$(document).on('mousedown', $.proxy(this.hide, this));
|
294
|
+
},
|
295
|
+
|
296
|
+
hide: function (e) {
|
297
|
+
this.container.hide();
|
298
|
+
$(document).off('mousedown', this.hide);
|
299
|
+
|
300
|
+
if (this.changed) {
|
301
|
+
this.changed = false;
|
302
|
+
this.notify();
|
303
|
+
}
|
304
|
+
},
|
305
|
+
|
306
|
+
enterRange: function (e) {
|
307
|
+
var label = e.target.innerHTML;
|
308
|
+
if (label == this.locale.customRangeLabel) {
|
309
|
+
this.updateView();
|
310
|
+
} else {
|
311
|
+
var dates = this.ranges[label];
|
312
|
+
this.container.find('input[name=daterangepicker_start]').val(dates[0].toString(this.format));
|
313
|
+
this.container.find('input[name=daterangepicker_end]').val(dates[1].toString(this.format));
|
314
|
+
}
|
315
|
+
},
|
316
|
+
|
317
|
+
clickRange: function (e) {
|
318
|
+
var label = e.target.innerHTML;
|
319
|
+
if (label == this.locale.customRangeLabel) {
|
320
|
+
this.container.find('.calendar').show();
|
321
|
+
} else {
|
322
|
+
var dates = this.ranges[label];
|
323
|
+
|
324
|
+
this.startDate = dates[0];
|
325
|
+
this.endDate = dates[1];
|
326
|
+
|
327
|
+
this.leftCalendar.month.set({ month: this.startDate.getMonth(), year: this.startDate.getFullYear() });
|
328
|
+
this.rightCalendar.month.set({ month: this.endDate.getMonth(), year: this.endDate.getFullYear() });
|
329
|
+
this.updateCalendars();
|
330
|
+
|
331
|
+
this.changed = true;
|
332
|
+
|
333
|
+
this.container.find('.calendar').hide();
|
334
|
+
this.hide();
|
335
|
+
}
|
336
|
+
},
|
337
|
+
|
338
|
+
clickPrev: function (e) {
|
339
|
+
var cal = $(e.target).parents('.calendar');
|
340
|
+
if (cal.hasClass('left')) {
|
341
|
+
this.leftCalendar.month.add({ months: -1 });
|
342
|
+
} else {
|
343
|
+
this.rightCalendar.month.add({ months: -1 });
|
344
|
+
}
|
345
|
+
this.updateCalendars();
|
346
|
+
},
|
347
|
+
|
348
|
+
clickNext: function (e) {
|
349
|
+
var cal = $(e.target).parents('.calendar');
|
350
|
+
if (cal.hasClass('left')) {
|
351
|
+
this.leftCalendar.month.add({ months: 1 });
|
352
|
+
} else {
|
353
|
+
this.rightCalendar.month.add({ months: 1 });
|
354
|
+
}
|
355
|
+
this.updateCalendars();
|
356
|
+
},
|
357
|
+
|
358
|
+
enterDate: function (e) {
|
359
|
+
|
360
|
+
var title = $(e.target).attr('title');
|
361
|
+
var row = title.substr(1, 1);
|
362
|
+
var col = title.substr(3, 1);
|
363
|
+
var cal = $(e.target).parents('.calendar');
|
364
|
+
|
365
|
+
if (cal.hasClass('left')) {
|
366
|
+
this.container.find('input[name=daterangepicker_start]').val(this.leftCalendar.calendar[row][col].toString(this.format));
|
367
|
+
} else {
|
368
|
+
this.container.find('input[name=daterangepicker_end]').val(this.rightCalendar.calendar[row][col].toString(this.format));
|
369
|
+
}
|
370
|
+
|
371
|
+
},
|
372
|
+
|
373
|
+
clickDate: function (e) {
|
374
|
+
var title = $(e.target).attr('title');
|
375
|
+
var row = title.substr(1, 1);
|
376
|
+
var col = title.substr(3, 1);
|
377
|
+
var cal = $(e.target).parents('.calendar');
|
378
|
+
|
379
|
+
if (cal.hasClass('left')) {
|
380
|
+
startDate = this.leftCalendar.calendar[row][col];
|
381
|
+
endDate = this.endDate;
|
382
|
+
} else {
|
383
|
+
startDate = this.startDate;
|
384
|
+
endDate = this.rightCalendar.calendar[row][col];
|
385
|
+
}
|
386
|
+
|
387
|
+
cal.find('td').removeClass('active');
|
388
|
+
|
389
|
+
if (startDate.equals(endDate) || startDate.isBefore(endDate)) {
|
390
|
+
$(e.target).addClass('active');
|
391
|
+
if (!startDate.equals(this.startDate) || !endDate.equals(this.endDate))
|
392
|
+
this.changed = true;
|
393
|
+
this.startDate = startDate;
|
394
|
+
this.endDate = endDate;
|
395
|
+
}
|
396
|
+
|
397
|
+
this.leftCalendar.month.set({ month: this.startDate.getMonth(), year: this.startDate.getFullYear() });
|
398
|
+
this.rightCalendar.month.set({ month: this.endDate.getMonth(), year: this.endDate.getFullYear() });
|
399
|
+
this.updateCalendars();
|
400
|
+
},
|
401
|
+
|
402
|
+
clickApply: function (e) {
|
403
|
+
this.hide();
|
404
|
+
},
|
405
|
+
|
406
|
+
updateCalendars: function () {
|
407
|
+
this.leftCalendar.calendar = this.buildCalendar(this.leftCalendar.month.getMonth(), this.leftCalendar.month.getFullYear());
|
408
|
+
this.rightCalendar.calendar = this.buildCalendar(this.rightCalendar.month.getMonth(), this.rightCalendar.month.getFullYear());
|
409
|
+
this.container.find('.calendar.left').html(this.renderCalendar(this.leftCalendar.calendar, this.startDate, this.minDate, this.endDate));
|
410
|
+
this.container.find('.calendar.right').html(this.renderCalendar(this.rightCalendar.calendar, this.endDate, this.startDate, this.maxDate));
|
411
|
+
},
|
412
|
+
|
413
|
+
buildCalendar: function (month, year) {
|
414
|
+
|
415
|
+
var firstDay = Date.today().set({ day: 1, month: month, year: year });
|
416
|
+
var lastMonth = firstDay.clone().add(-1).day().getMonth();
|
417
|
+
var lastYear = firstDay.clone().add(-1).day().getFullYear();
|
418
|
+
|
419
|
+
var daysInMonth = Date.getDaysInMonth(year, month);
|
420
|
+
var daysInLastMonth = Date.getDaysInMonth(lastYear, lastMonth);
|
421
|
+
|
422
|
+
var dayOfWeek = firstDay.getDay();
|
423
|
+
|
424
|
+
//initialize a 6 rows x 7 columns array for the calendar
|
425
|
+
var calendar = Array();
|
426
|
+
for (var i = 0; i < 6; i++) {
|
427
|
+
calendar[i] = Array();
|
428
|
+
}
|
429
|
+
|
430
|
+
//populate the calendar with date objects
|
431
|
+
var startDay = daysInLastMonth - dayOfWeek + this.locale.firstDay + 1;
|
432
|
+
if (startDay > daysInLastMonth)
|
433
|
+
startDay -= 7;
|
434
|
+
|
435
|
+
if (dayOfWeek == this.locale.firstDay)
|
436
|
+
startDay = daysInLastMonth - 6;
|
437
|
+
|
438
|
+
var curDate = Date.today().set({ day: startDay, month: lastMonth, year: lastYear });
|
439
|
+
for (var i = 0, col = 0, row = 0; i < 42; i++, col++, curDate = curDate.clone().add(1).day()) {
|
440
|
+
if (i > 0 && col % 7 == 0) {
|
441
|
+
col = 0;
|
442
|
+
row++;
|
443
|
+
}
|
444
|
+
calendar[row][col] = curDate;
|
445
|
+
}
|
446
|
+
|
447
|
+
return calendar;
|
448
|
+
|
449
|
+
},
|
450
|
+
|
451
|
+
renderCalendar: function (calendar, selected, minDate, maxDate) {
|
452
|
+
var html = '<table class="table-condensed">';
|
453
|
+
html += '<thead>';
|
454
|
+
html += '<tr>';
|
455
|
+
if (!minDate || minDate < calendar[1][1])
|
456
|
+
{
|
457
|
+
html += '<th class="prev available"><i class="icon-arrow-left"></i></th>';
|
458
|
+
}
|
459
|
+
else
|
460
|
+
{
|
461
|
+
html += '<th></th>';
|
462
|
+
}
|
463
|
+
html += '<th colspan="5">' + this.locale.monthNames[calendar[1][1].getMonth()] + calendar[1][1].toString(" yyyy") + '</th>';
|
464
|
+
if (!maxDate || maxDate > calendar[1][1])
|
465
|
+
{
|
466
|
+
html += '<th class="next available"><i class="icon-arrow-right"></i></th>';
|
467
|
+
}
|
468
|
+
else
|
469
|
+
{
|
470
|
+
html += '<th></th>';
|
471
|
+
}
|
472
|
+
|
473
|
+
html += '</tr>';
|
474
|
+
html += '<tr>';
|
475
|
+
|
476
|
+
$.each(this.locale.daysOfWeek, function (index, dayOfWeek) {
|
477
|
+
html += '<th>' + dayOfWeek + '</th>';
|
478
|
+
});
|
479
|
+
|
480
|
+
html += '</tr>';
|
481
|
+
html += '</thead>';
|
482
|
+
html += '<tbody>';
|
483
|
+
|
484
|
+
for (var row = 0; row < 6; row++) {
|
485
|
+
html += '<tr>';
|
486
|
+
for (var col = 0; col < 7; col++) {
|
487
|
+
var cname = 'available ';
|
488
|
+
cname += (calendar[row][col].getMonth() == calendar[1][1].getMonth()) ? '' : 'off';
|
489
|
+
|
490
|
+
// Normalise the time so the comparison won't fail
|
491
|
+
selected.setHours(0,0,0,0);
|
492
|
+
|
493
|
+
if ( (minDate && calendar[row][col] < minDate) || (maxDate && calendar[row][col] > maxDate))
|
494
|
+
{
|
495
|
+
cname = 'off disabled';
|
496
|
+
}
|
497
|
+
else if (calendar[row][col].equals(selected))
|
498
|
+
{
|
499
|
+
cname += 'active';
|
500
|
+
}
|
501
|
+
|
502
|
+
var title = 'r' + row + 'c' + col;
|
503
|
+
html += '<td class="' + cname + '" title="' + title + '">' + calendar[row][col].getDate() + '</td>';
|
504
|
+
}
|
505
|
+
html += '</tr>';
|
506
|
+
}
|
507
|
+
|
508
|
+
html += '</tbody>';
|
509
|
+
html += '</table>';
|
510
|
+
|
511
|
+
return html;
|
512
|
+
|
513
|
+
}
|
514
|
+
|
515
|
+
};
|
516
|
+
|
517
|
+
$.fn.daterangepicker = function (options, cb) {
|
518
|
+
this.each(function() {
|
519
|
+
var el = $(this);
|
520
|
+
if (!el.data('daterangepicker'))
|
521
|
+
el.data('daterangepicker', new DateRangePicker(el, options, cb));
|
522
|
+
});
|
523
|
+
return this;
|
524
|
+
};
|
525
|
+
|
526
|
+
} (window.jQuery);
|
@@ -0,0 +1,173 @@
|
|
1
|
+
.daterangepicker.dropdown-menu {
|
2
|
+
max-width: none;
|
3
|
+
}
|
4
|
+
|
5
|
+
.daterangepicker.opensleft .ranges, .daterangepicker.opensleft .calendar {
|
6
|
+
float: left;
|
7
|
+
margin: 4px;
|
8
|
+
}
|
9
|
+
|
10
|
+
.daterangepicker.opensright .ranges, .daterangepicker.opensright .calendar {
|
11
|
+
float: right;
|
12
|
+
margin: 4px;
|
13
|
+
}
|
14
|
+
|
15
|
+
.daterangepicker .ranges {
|
16
|
+
width: 160px;
|
17
|
+
text-align: left;
|
18
|
+
}
|
19
|
+
|
20
|
+
.daterangepicker .calendar {
|
21
|
+
display: none;
|
22
|
+
max-width: 230px;
|
23
|
+
}
|
24
|
+
|
25
|
+
.daterangepicker .calendar th, .daterangepicker .calendar td {
|
26
|
+
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
27
|
+
}
|
28
|
+
|
29
|
+
.daterangepicker .ranges label {
|
30
|
+
color: #333;
|
31
|
+
font-size: 11px;
|
32
|
+
margin-bottom: 2px;
|
33
|
+
text-transform: uppercase;
|
34
|
+
text-shadow: 1px 1px 0 #fff;
|
35
|
+
}
|
36
|
+
|
37
|
+
.daterangepicker .ranges input {
|
38
|
+
font-size: 11px;
|
39
|
+
}
|
40
|
+
|
41
|
+
.daterangepicker .ranges ul {
|
42
|
+
list-style: none;
|
43
|
+
margin: 0;
|
44
|
+
padding: 0;
|
45
|
+
}
|
46
|
+
|
47
|
+
.daterangepicker .ranges li {
|
48
|
+
font-size: 13px;
|
49
|
+
background: #f5f5f5;
|
50
|
+
border: 1px solid #f5f5f5;
|
51
|
+
color: #08c;
|
52
|
+
padding: 3px 12px;
|
53
|
+
margin-bottom: 8px;
|
54
|
+
-webkit-border-radius: 5px;
|
55
|
+
-moz-border-radius: 5px;
|
56
|
+
border-radius: 5px;
|
57
|
+
cursor: pointer;
|
58
|
+
}
|
59
|
+
|
60
|
+
.daterangepicker .ranges li.active, .daterangepicker .ranges li:hover {
|
61
|
+
background: #08c;
|
62
|
+
border: 1px solid #08c;
|
63
|
+
color: #fff;
|
64
|
+
}
|
65
|
+
|
66
|
+
.daterangepicker .calendar {
|
67
|
+
border: 1px solid #ddd;
|
68
|
+
padding: 4px;
|
69
|
+
border-radius: 4px;
|
70
|
+
background: #fff;
|
71
|
+
}
|
72
|
+
|
73
|
+
.daterangepicker {
|
74
|
+
position: absolute;
|
75
|
+
background: #fff;
|
76
|
+
top: 100px;
|
77
|
+
left: 20px;
|
78
|
+
padding: 4px;
|
79
|
+
margin-top: 1px;
|
80
|
+
-webkit-border-radius: 4px;
|
81
|
+
-moz-border-radius: 4px;
|
82
|
+
border-radius: 4px;
|
83
|
+
}
|
84
|
+
|
85
|
+
.daterangepicker.opensleft:before {
|
86
|
+
position: absolute;
|
87
|
+
top: -7px;
|
88
|
+
right: 9px;
|
89
|
+
display: inline-block;
|
90
|
+
border-right: 7px solid transparent;
|
91
|
+
border-bottom: 7px solid #ccc;
|
92
|
+
border-left: 7px solid transparent;
|
93
|
+
border-bottom-color: rgba(0, 0, 0, 0.2);
|
94
|
+
content: '';
|
95
|
+
}
|
96
|
+
|
97
|
+
.daterangepicker.opensleft:after {
|
98
|
+
position: absolute;
|
99
|
+
top: -6px;
|
100
|
+
right: 10px;
|
101
|
+
display: inline-block;
|
102
|
+
border-right: 6px solid transparent;
|
103
|
+
border-bottom: 6px solid #fff;
|
104
|
+
border-left: 6px solid transparent;
|
105
|
+
content: '';
|
106
|
+
}
|
107
|
+
|
108
|
+
.daterangepicker.opensright:before {
|
109
|
+
position: absolute;
|
110
|
+
top: -7px;
|
111
|
+
left: 9px;
|
112
|
+
display: inline-block;
|
113
|
+
border-right: 7px solid transparent;
|
114
|
+
border-bottom: 7px solid #ccc;
|
115
|
+
border-left: 7px solid transparent;
|
116
|
+
border-bottom-color: rgba(0, 0, 0, 0.2);
|
117
|
+
content: '';
|
118
|
+
}
|
119
|
+
|
120
|
+
.daterangepicker.opensright:after {
|
121
|
+
position: absolute;
|
122
|
+
top: -6px;
|
123
|
+
left: 10px;
|
124
|
+
display: inline-block;
|
125
|
+
border-right: 6px solid transparent;
|
126
|
+
border-bottom: 6px solid #fff;
|
127
|
+
border-left: 6px solid transparent;
|
128
|
+
content: '';
|
129
|
+
}
|
130
|
+
|
131
|
+
.daterangepicker table {
|
132
|
+
width: 100%;
|
133
|
+
margin: 0;
|
134
|
+
}
|
135
|
+
|
136
|
+
.daterangepicker td, .daterangepicker th {
|
137
|
+
text-align: center;
|
138
|
+
width: 20px;
|
139
|
+
height: 20px;
|
140
|
+
-webkit-border-radius: 4px;
|
141
|
+
-moz-border-radius: 4px;
|
142
|
+
border-radius: 4px;
|
143
|
+
cursor: pointer;
|
144
|
+
white-space: nowrap;
|
145
|
+
}
|
146
|
+
|
147
|
+
.daterangepicker td.off {
|
148
|
+
color: #999;
|
149
|
+
}
|
150
|
+
.daterangepicker td.disabled {
|
151
|
+
color: #999;
|
152
|
+
}
|
153
|
+
|
154
|
+
.daterangepicker td.available:hover, .daterangepicker th.available:hover {
|
155
|
+
background: #eee;
|
156
|
+
}
|
157
|
+
|
158
|
+
.daterangepicker td.active, .daterangepicker td.active:hover {
|
159
|
+
background-color: #006dcc;
|
160
|
+
background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
|
161
|
+
background-image: -ms-linear-gradient(top, #0088cc, #0044cc);
|
162
|
+
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
|
163
|
+
background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
|
164
|
+
background-image: -o-linear-gradient(top, #0088cc, #0044cc);
|
165
|
+
background-image: linear-gradient(top, #0088cc, #0044cc);
|
166
|
+
background-repeat: repeat-x;
|
167
|
+
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);
|
168
|
+
border-color: #0044cc #0044cc #002a80;
|
169
|
+
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
170
|
+
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
171
|
+
color: #fff;
|
172
|
+
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
173
|
+
}
|
metadata
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: bootstrap-daterangepicker-rails
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.3
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Dan Grossman
|
9
|
+
- Jordan Brock
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2012-12-30 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: railties
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ~>
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '3.1'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ~>
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: '3.1'
|
31
|
+
- !ruby/object:Gem::Dependency
|
32
|
+
name: test-unit
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
34
|
+
none: false
|
35
|
+
requirements:
|
36
|
+
- - ~>
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: 2.2.0
|
39
|
+
type: :development
|
40
|
+
prerelease: false
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ~>
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 2.2.0
|
47
|
+
description: Rails 3.2.x plugin to allow for the easy use of Dan Grossman's Bootstrap
|
48
|
+
DateRangePicker
|
49
|
+
email: jordan@brock.id.au
|
50
|
+
executables: []
|
51
|
+
extensions: []
|
52
|
+
extra_rdoc_files: []
|
53
|
+
files:
|
54
|
+
- lib/bootstrap-daterangepicker-rails/helpers/input_helper.rb
|
55
|
+
- lib/bootstrap-daterangepicker-rails/version.rb
|
56
|
+
- lib/bootstrap-daterangepicker-rails.rb
|
57
|
+
- vendor/assets/javascripts/date.js
|
58
|
+
- vendor/assets/javascripts/daterangepicker.js
|
59
|
+
- vendor/assets/stylesheets/daterangepicker.css
|
60
|
+
- LICENSE
|
61
|
+
- README.md
|
62
|
+
- Rakefile
|
63
|
+
homepage: http://github.com/jordanbrock/bootstrap-daterangepicker-rails
|
64
|
+
licenses: []
|
65
|
+
post_install_message:
|
66
|
+
rdoc_options: []
|
67
|
+
require_paths:
|
68
|
+
- lib
|
69
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
70
|
+
none: false
|
71
|
+
requirements:
|
72
|
+
- - ! '>='
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
76
|
+
none: false
|
77
|
+
requirements:
|
78
|
+
- - ! '>='
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '0'
|
81
|
+
requirements: []
|
82
|
+
rubyforge_project:
|
83
|
+
rubygems_version: 1.8.23
|
84
|
+
signing_key:
|
85
|
+
specification_version: 3
|
86
|
+
summary: Rails 3.2.x plugin to allow for the easy use of Dan Grossman's Bootstrap
|
87
|
+
DateRangePicker
|
88
|
+
test_files: []
|