diff --git a/README.md b/README.md index 6aa1da6d..41d6af44 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# pickadate v3.0.2 [![pickadate build status](https://travis-ci.org/amsul/pickadate.js.png?branch=gh-pages)](https://travis-ci.org/amsul/pickadate.js) +# pickadate v3.0.3 [![pickadate build status](https://travis-ci.org/amsul/pickadate.js.png?branch=gh-pages)](https://travis-ci.org/amsul/pickadate.js) The mobile-friendly, responsive, and lightweight jQuery date & time input picker. @@ -11,7 +11,7 @@ The mobile-friendly, responsive, and lightweight jQuery date & time input picker #### To get it: -[Download v3.0.2](https://github.com/amsul/pickadate.js/archive/3.0.2.zip) or `git clone git://github.com/amsul/pickadate.js.git` or `bower install pickadate` +[Download v3.0.3](https://github.com/amsul/pickadate.js/archive/3.0.3.zip) or `git clone git://github.com/amsul/pickadate.js.git` or `bower install pickadate` @@ -36,8 +36,8 @@ There are currently two pickers: **date** and **time**. File | Contents | Size (min & gzip) ----------------------- | ------------------------ | ---------------------- -`picker.js` | __Base *__ | 1.24kb -`picker.date.js` | Date picker | 1.87kb +`picker.js` | __Base *__ | 1.26kb +`picker.date.js` | Date picker | 1.88kb `picker.time.js` | Time picker | 1.30kb __*__ The base script is **required** for any of the pickers to function. @@ -62,7 +62,7 @@ __*__ One and only one base stylesheet is **required**. [Choose a theme](http:// ### Translations -The translations are copied into the `lib/translations` folder. There are currently [30 languages](https://github.com/amsul/pickadate.js/blob/v3.0.2/lib/translations) included. +The translations are copied into the `lib/translations` folder. There are currently [30 languages](https://github.com/amsul/pickadate.js/blob/v3.0.3/lib/translations) included.
diff --git a/_raw/lib/picker.date.js b/_raw/lib/picker.date.js index 2b675716..2a428305 100644 --- a/_raw/lib/picker.date.js +++ b/_raw/lib/picker.date.js @@ -216,9 +216,10 @@ DatePicker.prototype.navigate = function( type, value, options ) { if ( Picker._.isObject( value ) ) { - var year = value.year, - date = value.date, - month = new Date( year, value.month + ( options && options.nav ? options.nav : 0 ), 1 ).getMonth() + var targetDateObject = new Date( value.year, value.month + ( options && options.nav ? options.nav : 0 ), 1 ), + year = targetDateObject.getFullYear(), + month = targetDateObject.getMonth(), + date = value.date // If the month we’re going to doesn’t have enough days, // keep decreasing the date until we reach the month’s last date. @@ -272,111 +273,126 @@ DatePicker.prototype.viewset = function( type, dateObject/*, options*/ ) { /** - * Validate a date as enabled. + * Validate a date as enabled and shift if needed. */ DatePicker.prototype.validate = function( type, dateObject, options ) { var calendar = this, - interval = options && options.interval ? options.interval : 1 - // Check if the object is disabled. - if ( calendar.disabled( dateObject ) ) { + // Keep a reference to the original date. + originalDateObject = dateObject, - // Shift with the interval until we reach an enabled time. - dateObject = calendar.shift( dateObject, interval ) - } - - // Scope the object into range. - dateObject = calendar.scope( dateObject ) - - // Do a second check to see if we landed on a disabled min/max. - // In that case, shift using the opposite interval direction as before. - if ( calendar.disabled( dateObject ) ) { - dateObject = calendar.shift( dateObject, dateObject.pick <= calendar.item.min.pick ? 1 : dateObject.pick >= calendar.item.max.pick ? -1 : interval ) - } + // Make sure we have an interval. + interval = options && options.interval ? options.interval : 1, - return dateObject -} //DatePicker.prototype.validate + // Check if we have any enabled dates after/before now. + hasEnabledBeforeTarget, hasEnabledAfterTarget, + // The min & max limits. + minLimitObject = calendar.item.min, + maxLimitObject = calendar.item.max, -/** - * Check if an object is disabled. - */ -DatePicker.prototype.disabled = function( dateObject ) { - - var - calendar = this, + // Check if we’ve reached the limit during shifting. + reachedMin, reachedMax, - // Filter through the disabled dates to check if this is one. - isDisabledTime = calendar.item.disable.filter( function( dateToDisable ) { + // Check if the calendar is flipped and at least one weekday is enabled. + hasEnabledWeekdays = calendar.item.enable === -1 && calendar.item.disable.filter( function( value ) { - // If the date is a number, match the weekday with 0index and `firstDay` check. - if ( Picker._.isInteger( dateToDisable ) ) { - return dateObject.day === ( calendar.settings.firstDay ? dateToDisable : dateToDisable - 1 ) % 7 + // If there’s a date, check where it is relative to the target. + if ( Array.isArray( value ) ) { + var dateTime = calendar.create( value ).pick + if ( dateTime < dateObject.pick ) hasEnabledBeforeTarget = true + else if ( dateTime > dateObject.pick ) hasEnabledAfterTarget = true } - // If it's an array, create the object and match the exact date. - if ( Array.isArray( dateToDisable ) ) { - return dateObject.pick === calendar.create( dateToDisable ).pick - } + // Return only integers for enabled weekdays. + return Picker._.isInteger( value ) }).length - // If the calendar is "enabled" flag is flipped, flip the condition. - return calendar.item.enable === -1 ? !isDisabledTime : isDisabledTime -} //DatePicker.prototype.disabled -/** - * Shift an object by an interval until we reach an enabled object. - */ -DatePicker.prototype.shift = function( dateObject, interval ) { + // No need to validate if we’re navigating months or there are no enabled days. + if ( + ( !( options && options.nav ) && !( !hasEnabledWeekdays && !hasEnabledBeforeTarget && !hasEnabledAfterTarget ) ) || + ( dateObject.pick <= minLimitObject.pick || dateObject.pick >= maxLimitObject.pick ) + ) { - var calendar = this, - originalDateObject = dateObject - interval = interval || 1 + // Flip the direction if there aren’t any enabled weekdays + // and there are no enabled dates in the direction of the interval. + if ( !hasEnabledWeekdays && ( ( !hasEnabledAfterTarget && interval > 0 ) || ( !hasEnabledBeforeTarget && interval < 0 ) ) ) { + interval *= -1 + } - // Keep looping as long as the time is disabled. - while ( calendar.disabled( dateObject ) ) { - // Increase/decrease the date by the key movement and keep looping. - dateObject = calendar.create([ dateObject.year, dateObject.month, dateObject.date + interval ]) + // Keep looping until we reach an enabled date. + while ( calendar.disabled( dateObject ) ) { - // Check if we've looped through over 2 months in either direction. - if ( Math.abs( dateObject.month - originalDateObject.month ) > 2 ) { - // Reset the date object to the original date. - dateObject = originalDateObject + // If we’ve looped into the next/prev month, return to the original date and flatten the interval. + if ( Math.abs( interval ) > 1 && ( dateObject.month < originalDateObject.month || dateObject.month > originalDateObject.month ) ) { + dateObject = originalDateObject + interval = Math.abs( interval ) / interval + } + - // If the calendar is flipped, go in the opposite direction. - if ( calendar.item.enable === -1 ) { - interval = interval < 0 ? 1 : -1 + // If we’ve reached the min/max limit, reverse the direction and flatten the interval. + if ( dateObject.pick <= minLimitObject.pick ) { + reachedMin = true + interval = 1 } - // Otherwise go in the same direction. - else { - interval = interval < 0 ? -1 : 1 + else if ( dateObject.pick >= maxLimitObject.pick ) { + reachedMax = true + interval = -1 } - } - // If we've gone beyond the limits, break out of the loop. - if ( dateObject.pick <= calendar.item.min.pick || dateObject.pick >= calendar.item.max.pick ) { - break + + // If we’ve reached both limits, just break out of the loop. + if ( reachedMin && reachedMax ) { + break + } + + + // Finally, create the shifted date using the interval and keep looping. + dateObject = calendar.create([ dateObject.year, dateObject.month, dateObject.date + interval ]) } - } - // Return the final object. + } //endif + + + // Return the date object settled on. return dateObject -} //DatePicker.prototype.shift +} //DatePicker.prototype.validate /** - * Scope an object into range of min and max. + * Check if an object is disabled. */ -DatePicker.prototype.scope = function( dateObject ) { - var minTime = this.item.min.pick, - maxTime = this.item.max.pick - return this.create( dateObject.pick > maxTime ? maxTime : dateObject.pick < minTime ? minTime : dateObject ) -} //DatePicker.prototype.scope +DatePicker.prototype.disabled = function( dateObject ) { + + var calendar = this, + + // Filter through the disabled dates to check if this is one. + isDisabledDate = calendar.item.disable.filter( function( dateToDisable ) { + + // If the date is a number, match the weekday with 0index and `firstDay` check. + if ( Picker._.isInteger( dateToDisable ) ) { + return dateObject.day === ( calendar.settings.firstDay ? dateToDisable : dateToDisable - 1 ) % 7 + } + + // If it's an array, create the object and match the exact date. + if ( Array.isArray( dateToDisable ) ) { + return dateObject.pick === calendar.create( dateToDisable ).pick + } + }).length + + + // It’s disabled beyond the min/max limits. If within the limits, check the + // calendar “enabled” flag is flipped and respectively flip the condition. + return dateObject.pick < calendar.item.min.pick || + dateObject.pick > calendar.item.max.pick || + calendar.item.enable === -1 ? !isDisabledDate : isDisabledDate +} //DatePicker.prototype.disabled /** @@ -384,8 +400,7 @@ DatePicker.prototype.scope = function( dateObject ) { */ DatePicker.prototype.parse = function( type, value, options ) { - var - calendar = this, + var calendar = this, parsingObject = {} if ( !value || Picker._.isInteger( value ) || Array.isArray( value ) || Picker._.isDate( value ) || Picker._.isObject( value ) && Picker._.isInteger( value.pick ) ) { diff --git a/_raw/lib/picker.js b/_raw/lib/picker.js index e524a6d7..95b6ecef 100644 --- a/_raw/lib/picker.js +++ b/_raw/lib/picker.js @@ -18,7 +18,7 @@ // Create a global scope. -window.Picker = (function( $document, undefined ) { +window.Picker = (function( $, $document, undefined ) { /** @@ -342,8 +342,8 @@ function PickerConstructor( ELEMENT, NAME, COMPONENT, OPTIONS ) { PickerConstructor._.trigger( P.component.key.go, P, [ keycodeToMove ] ) } - // Or on “enter”, set the value and close. - else { + // On “enter”, if the highlighted item isn’t disabled, set the value and close. + else if ( !P.$root.find( '.' + CLASSES.highlighted ).hasClass( CLASSES.disabled ) ) { P.set( 'select', P.component.item.highlight ).close() } } @@ -779,7 +779,7 @@ return PickerConstructor // Close the global scope. -})( $( document ) ); +})( jQuery, jQuery( document ) ); diff --git a/_raw/lib/themes/_variables.less b/_raw/lib/themes/_variables.less index 32d756c9..f4f07495 100644 --- a/_raw/lib/themes/_variables.less +++ b/_raw/lib/themes/_variables.less @@ -84,6 +84,7 @@ // Disabled things.. such as days, month nav, etc. @disabled-things-bg: #f5f5f5; @disabled-things-text: #ddd; +@disabled-highlighted-things-bg: #bbb; @@ -156,7 +157,6 @@ */ .opacity( @decimal ) { @percent: @decimal * 100; - // @args: ~`"@{arguments}".replace(/[\[\]]|\,\sX/g, '')`; -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=@{percent})"; filter: ~"alpha(opacity=@{percent})"; -moz-opacity: @decimal; diff --git a/_raw/lib/themes/base.date.less b/_raw/lib/themes/base.date.less index bb802bc2..1aa8c0bb 100644 --- a/_raw/lib/themes/base.date.less +++ b/_raw/lib/themes/base.date.less @@ -226,11 +226,17 @@ } // Disabled dates. -.picker__day--disabled, -.picker__day--disabled:hover { +.picker__day--disabled:hover, +.picker--focused .picker__day--disabled { .picker-item-disabled; } +// Disabled and highlighted dates. +.picker__day--highlighted.picker__day--disabled:hover, +.picker--focused .picker__day--highlighted.picker__day--disabled { + background: @disabled-highlighted-things-bg; +} + /** * The footer containing the "today" and "clear" buttons. diff --git a/api.htm b/api.htm index dc41d11a..8f2f856d 100644 --- a/api.htm +++ b/api.htm @@ -265,7 +265,7 @@

Clearpicker.clear() -
+

This is a shorthand that uses the set method behind the scenes.

@@ -307,7 +307,7 @@

* Item Ob

Each “date” or “time” within the picker has an item object accompanying it behind the scenes.

-

Here’s a date picker item object for 20 May, 2013:

+

Here’s a date picker item object for 23 May, 2013:

{
     // The full year.
     year: 2013,
@@ -328,16 +328,16 @@ 

* Item Ob pick: 1366430400000 }

-

Here’s a time picker item object for 3:42 AM:

+

Here’s a time picker item object for 4:35 AM:

{
     // Hour of the day from 0 to 23.
-    hour: 3,
+    hour: 4,
 
     // The minutes of the hour from 0 to 59 (based on the interval).
     mins: 60,
 
     // The “pick” value used for comparisons.
-    pick: 240
+    pick: 300
 }
@@ -355,7 +355,7 @@

Get picker.get() // Short for `picker.get('value')`. -
+
@@ -522,7 +522,7 @@

Set picker.set('clear') -
+

This is the full form of the clear method.

diff --git a/index.htm b/index.htm index 24dcce64..c5823e96 100644 --- a/index.htm +++ b/index.htm @@ -52,7 +52,7 @@

pickadate.js

The mobile-friendly, responsive, and lightweight
jQuery date & time input picker.

-

Download pickadate.js v3.0.2

+

Download pickadate.js v3.0.3

diff --git a/lib/compressed/picker.date.js b/lib/compressed/picker.date.js index e04a2ad2..0c5b1f08 100644 --- a/lib/compressed/picker.date.js +++ b/lib/compressed/picker.date.js @@ -1,5 +1,5 @@ /*! - * Date picker for pickadate.js v3.0.2 + * Date picker for pickadate.js v3.0.3 * http://amsul.github.io/pickadate.js/date.htm */ -(function(){function e(e,t){var i=this,r=e.$node.data("value");i.settings=t,i.queue={min:"measure create",max:"measure create",now:"now create",select:"parse create validate",highlight:"navigate create validate",view:"create validate viewset",disable:"flipItem",enable:"flipItem"},i.item={},i.item.disable=(t.disable||[]).slice(0),i.item.enable=-function(e){return e[0]===!0?e.shift():-1}(i.item.disable),i.set("min",t.min).set("max",t.max).set("now").set("select",r||e.$node[0].value||i.item.now,{format:r?t.formatSubmit:t.format,data:!!r}),i.key={40:7,38:-7,39:1,37:-1,go:function(e){i.set("highlight",[i.item.highlight.year,i.item.highlight.month,i.item.highlight.date+e],{interval:e}),this.render()}},e.on("render",function(){e.$root.find("."+t.klass.selectMonth).on("change",function(){e.set("highlight",[e.get("view").year,this.value,e.get("highlight").date]),e.$root.find("."+t.klass.selectMonth).focus()}),e.$root.find("."+t.klass.selectYear).on("change",function(){e.set("highlight",[this.value,e.get("view").month,e.get("highlight").date]),e.$root.find("."+t.klass.selectYear).focus()})}).on("open",function(){e.$root.find("button, select").attr("disabled",!1)}).on("close",function(){e.$root.find("button, select").attr("disabled",!0)})}var t=7,i=6;e.prototype.set=function(e,t,i){var r=this;return r.item["enable"==e?"disable":"flip"==e?"enable":e]=r.queue[e].split(" ").map(function(n){return t=r[n](e,t,i)}).pop(),"select"==e?r.set("highlight",r.item.select,i):"highlight"==e?r.set("view",r.item.highlight,i):("flip"==e||"min"==e||"max"==e||"disable"==e||"enable"==e)&&r.item.select&&r.item.highlight&&r.set("select",r.item.select,i).set("highlight",r.item.highlight,i),r},e.prototype.get=function(e){return this.item[e]},e.prototype.create=function(e,t,i){var r,n=this;return t=void 0===t?e:t,t==-1/0||1/0==t?r=t:t=Picker._.isObject(t)&&Picker._.isInteger(t.pick)?t.obj:Array.isArray(t)?new Date(t[0],t[1],t[2]):Picker._.isInteger(t)||Picker._.isDate(t)?n.normalize(new Date(t),i):n.now(e,t,i),{year:r||t.getFullYear(),month:r||t.getMonth(),date:r||t.getDate(),day:r||t.getDay(),obj:r||t,pick:r||t.getTime()}},e.prototype.now=function(e,t,i){return t=new Date,i&&i.rel&&t.setDate(t.getDate()+i.rel),this.normalize(t,i)},e.prototype.navigate=function(e,t,i){if(Picker._.isObject(t)){for(var r=t.year,n=t.date,a=new Date(r,t.month+(i&&i.nav?i.nav:0),1).getMonth();new Date(r,a,n).getMonth()!==a;)n-=1;t=[r,a,n]}return t},e.prototype.normalize=function(e){return e.setHours(0,0,0,0),e},e.prototype.measure=function(e,t){var i=this;return t?Picker._.isInteger(t)&&(t=i.now(e,t,{rel:t})):t="min"==e?-1/0:1/0,t},e.prototype.viewset=function(e,t){return this.create([t.year,t.month,1])},e.prototype.validate=function(e,t,i){var r=this,n=i&&i.interval?i.interval:1;return r.disabled(t)&&(t=r.shift(t,n)),t=r.scope(t),r.disabled(t)&&(t=r.shift(t,t.pick<=r.item.min.pick?1:t.pick>=r.item.max.pick?-1:n)),t},e.prototype.disabled=function(e){var t=this,i=t.item.disable.filter(function(i){return Picker._.isInteger(i)?e.day===(t.settings.firstDay?i:i-1)%7:Array.isArray(i)?e.pick===t.create(i).pick:void 0}).length;return-1===t.item.enable?!i:i},e.prototype.shift=function(e,t){var i=this,r=e;for(t=t||1;i.disabled(e)&&(e=i.create([e.year,e.month,e.date+t]),Math.abs(e.month-r.month)>2&&(e=r,t=-1===i.item.enable?0>t?1:-1:0>t?-1:1),!(e.pick<=i.item.min.pick||e.pick>=i.item.max.pick)););return e},e.prototype.scope=function(e){var t=this.item.min.pick,i=this.item.max.pick;return this.create(e.pick>i?i:t>e.pick?t:e)},e.prototype.parse=function(e,t,i){var r=this,n={};if(!t||Picker._.isInteger(t)||Array.isArray(t)||Picker._.isDate(t)||Picker._.isObject(t)&&Picker._.isInteger(t.pick))return t;if(!i||!i.format)throw"Need a formatting option to parse this..";return r.formats.toArray(i.format).map(function(e){var i=r.formats[e],a=i?Picker._.trigger(i,r,[t,n]):e.replace(/^!/,"").length;i&&(n[e]=t.substr(0,a)),t=t.substr(a)}),[n.yyyy||n.yy,+(n.mm||n.m)-(i.data?1:0),n.dd||n.d]},e.prototype.formats=function(){var e=function(e,t,i){var r=e.match(/\w+/)[0];return i.mm||i.m||(i.m=t.indexOf(r)),r.length};return{d:function(e,t){return e?Picker._.digits(e):t.date},dd:function(e,t){return e?2:Picker._.lead(t.date)},ddd:function(e,t){return e?getFirstWordLength(e):this.settings.weekdaysShort[t.day]},dddd:function(e,t){return e?getFirstWordLength(e):this.settings.weekdaysFull[t.day]},m:function(e,t){return e?Picker._.digits(e):t.month+1},mm:function(e,t){return e?2:Picker._.lead(t.month+1)},mmm:function(t,i){var r=this.settings.monthsShort;return t?e(t,r,i):r[i.month]},mmmm:function(t,i){var r=this.settings.monthsFull;return t?e(t,r,i):r[i.month]},yy:function(e,t){return e?2:(""+t.year).slice(2)},yyyy:function(e,t){return e?4:t.year},toArray:function(e){return e.split(/(d{1,4}|m{1,4}|y{4}|yy|!.)/g)},toString:function(e,t){var i=this;return i.formats.toArray(e).map(function(e){return Picker._.trigger(i.formats[e],i,[0,t])||e.replace(/^!/,"")}).join("")}}}(),e.prototype.flipItem=function(e,t){var i=this,r=i.item.disable,n=-1===i.item.enable;return"flip"==t?i.item.enable=n?1:-1:!n&&"enable"==e||n&&"disable"==e?r=i.removeDisabled(r,t):(!n&&"disable"==e||n&&"enable"==e)&&(r=i.addDisabled(r,t)),r},e.prototype.addDisabled=function(e,t){var i=this;return t.map(function(t){i.filterDisabled(e,t).length||e.push(t)}),e},e.prototype.removeDisabled=function(e,t){var i=this;return t.map(function(t){e=i.filterDisabled(e,t,1)}),e},e.prototype.filterDisabled=function(e,t,i){var r=Array.isArray(t);return e.filter(function(e){var n=!r&&t===e||r&&Array.isArray(e)&&""+t==""+e;return i?!n:n})},e.prototype.nodes=function(e){var r=this,n=r.settings,a=r.item.now,o=r.item.select,s=r.item.highlight,l=r.item.view,c=r.item.disable,u=r.item.min,d=r.item.max,h=function(e){return n.firstDay&&e.push(e.shift()),Picker._.node("thead",Picker._.group({min:0,max:t-1,i:1,node:"th",item:function(t){return[e[t],n.klass.weekdays]}}))}((n.showWeekdaysFull?n.weekdaysFull:n.weekdaysShort).slice(0)),m=function(e){return Picker._.node("div"," ",n.klass["nav"+(e?"Next":"Prev")]+(e&&l.year>=d.year&&l.month>=d.month||!e&&l.year<=u.year&&l.month<=u.month?" "+n.klass.navDisabled:""),"data-nav="+(e||-1))},p=function(t){return n.selectMonths?Picker._.node("select",Picker._.group({min:0,max:11,i:1,node:"option",item:function(e){return[t[e],0,"value="+e+(l.month==e?" selected":"")+(l.year==u.year&&u.month>e||l.year==d.year&&e>d.month?" disabled":"")]}}),n.klass.selectMonth,e?"":"disabled"):Picker._.node("div",t[l.month],n.klass.month)},y=function(){var t=l.year,i=n.selectYears===!0?5:~~(n.selectYears/2);if(i){var r=u.year,a=d.year,o=t-i,s=t+i;if(r>o&&(s+=r-o,o=r),s>a){var c=o-r,h=s-a;o-=c>h?h:c,s=a}return Picker._.node("select",Picker._.group({min:o,max:s,i:1,node:"option",item:function(e){return[e,0,"value="+e+(t==e?" selected":"")]}}),n.klass.selectYear,e?"":"disabled")}return Picker._.node("div",t,n.klass.year)};return Picker._.node("div",m()+m(1)+p(n.showMonthsShort?n.monthsShort:n.monthsFull)+y(),n.klass.header)+Picker._.node("table",h+Picker._.node("tbody",Picker._.group({min:0,max:i-1,i:1,node:"tr",item:function(e){return[Picker._.group({min:t*e-l.day+1,max:function(){return this.min+t-1},i:1,node:"td",item:function(e){return e=r.create([l.year,l.month,e+(n.firstDay?1:0)]),[Picker._.node("div",e.date,function(t){return t.push(l.month==e.month?n.klass.infocus:n.klass.outfocus),a.pick==e.pick&&t.push(n.klass.now),o&&o.pick==e.pick&&t.push(n.klass.selected),s&&s.pick==e.pick&&t.push(n.klass.highlighted),(c&&r.disabled(e)||e.pickd.pick)&&t.push(n.klass.disabled),t.join(" ")}([n.klass.day]),"data-pick="+e.pick)]}})]}})),n.klass.table)+Picker._.node("div",Picker._.node("button",n.today,n.klass.buttonToday,"data-pick="+a.pick+(e?"":" disabled"))+Picker._.node("button",n.clear,n.klass.buttonClear,"data-clear=1"+(e?"":" disabled")),n.klass.footer)},e.defaults=function(e){return{monthsFull:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],weekdaysFull:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],weekdaysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],today:"Today",clear:"Clear",format:"d mmmm, yyyy",klass:{table:e+"table",header:e+"header",navPrev:e+"nav--prev",navNext:e+"nav--next",navDisabled:e+"nav--disabled",month:e+"month",year:e+"year",selectMonth:e+"select--month",selectYear:e+"select--year",weekdays:e+"weekday",day:e+"day",disabled:e+"day--disabled",selected:e+"day--selected",highlighted:e+"day--highlighted",now:e+"day--today",infocus:e+"day--infocus",outfocus:e+"day--outfocus",footer:e+"footer",buttonClear:e+"button--clear",buttonToday:e+"button--today"}}}(Picker.klasses().picker+"__"),Picker.extend("pickadate",e)})(); \ No newline at end of file +(function(){function e(e,t){var r=this,i=e.$node.data("value");r.settings=t,r.queue={min:"measure create",max:"measure create",now:"now create",select:"parse create validate",highlight:"navigate create validate",view:"create validate viewset",disable:"flipItem",enable:"flipItem"},r.item={},r.item.disable=(t.disable||[]).slice(0),r.item.enable=-function(e){return e[0]===!0?e.shift():-1}(r.item.disable),r.set("min",t.min).set("max",t.max).set("now").set("select",i||e.$node[0].value||r.item.now,{format:i?t.formatSubmit:t.format,data:!!i}),r.key={40:7,38:-7,39:1,37:-1,go:function(e){r.set("highlight",[r.item.highlight.year,r.item.highlight.month,r.item.highlight.date+e],{interval:e}),this.render()}},e.on("render",function(){e.$root.find("."+t.klass.selectMonth).on("change",function(){e.set("highlight",[e.get("view").year,this.value,e.get("highlight").date]),e.$root.find("."+t.klass.selectMonth).focus()}),e.$root.find("."+t.klass.selectYear).on("change",function(){e.set("highlight",[this.value,e.get("view").month,e.get("highlight").date]),e.$root.find("."+t.klass.selectYear).focus()})}).on("open",function(){e.$root.find("button, select").attr("disabled",!1)}).on("close",function(){e.$root.find("button, select").attr("disabled",!0)})}var t=7,r=6;e.prototype.set=function(e,t,r){var i=this;return i.item["enable"==e?"disable":"flip"==e?"enable":e]=i.queue[e].split(" ").map(function(n){return t=i[n](e,t,r)}).pop(),"select"==e?i.set("highlight",i.item.select,r):"highlight"==e?i.set("view",i.item.highlight,r):("flip"==e||"min"==e||"max"==e||"disable"==e||"enable"==e)&&i.item.select&&i.item.highlight&&i.set("select",i.item.select,r).set("highlight",i.item.highlight,r),i},e.prototype.get=function(e){return this.item[e]},e.prototype.create=function(e,t,r){var i,n=this;return t=void 0===t?e:t,t==-1/0||1/0==t?i=t:t=Picker._.isObject(t)&&Picker._.isInteger(t.pick)?t.obj:Array.isArray(t)?new Date(t[0],t[1],t[2]):Picker._.isInteger(t)||Picker._.isDate(t)?n.normalize(new Date(t),r):n.now(e,t,r),{year:i||t.getFullYear(),month:i||t.getMonth(),date:i||t.getDate(),day:i||t.getDay(),obj:i||t,pick:i||t.getTime()}},e.prototype.now=function(e,t,r){return t=new Date,r&&r.rel&&t.setDate(t.getDate()+r.rel),this.normalize(t,r)},e.prototype.navigate=function(e,t,r){if(Picker._.isObject(t)){for(var i=new Date(t.year,t.month+(r&&r.nav?r.nav:0),1),n=i.getFullYear(),a=i.getMonth(),o=t.date;new Date(n,a,o).getMonth()!==a;)o-=1;t=[n,a,o]}return t},e.prototype.normalize=function(e){return e.setHours(0,0,0,0),e},e.prototype.measure=function(e,t){var r=this;return t?Picker._.isInteger(t)&&(t=r.now(e,t,{rel:t})):t="min"==e?-1/0:1/0,t},e.prototype.viewset=function(e,t){return this.create([t.year,t.month,1])},e.prototype.validate=function(e,t,r){var i,n,a,o,s=this,l=t,c=r&&r.interval?r.interval:1,u=s.item.min,d=s.item.max,h=-1===s.item.enable&&s.item.disable.filter(function(e){if(Array.isArray(e)){var r=s.create(e).pick;t.pick>r?i=!0:r>t.pick&&(n=!0)}return Picker._.isInteger(e)}).length;if((!r||!r.nav)&&(h||i||n)||t.pick<=u.pick||t.pick>=d.pick)for(!h&&(!n&&c>0||!i&&0>c)&&(c*=-1);s.disabled(t)&&(Math.abs(c)>1&&(t.monthl.month)&&(t=l,c=Math.abs(c)/c),t.pick<=u.pick?(a=!0,c=1):t.pick>=d.pick&&(o=!0,c=-1),!a||!o);)t=s.create([t.year,t.month,t.date+c]);return t},e.prototype.disabled=function(e){var t=this,r=t.item.disable.filter(function(r){return Picker._.isInteger(r)?e.day===(t.settings.firstDay?r:r-1)%7:Array.isArray(r)?e.pick===t.create(r).pick:void 0}).length;return e.pickt.item.max.pick||-1===t.item.enable?!r:r},e.prototype.parse=function(e,t,r){var i=this,n={};if(!t||Picker._.isInteger(t)||Array.isArray(t)||Picker._.isDate(t)||Picker._.isObject(t)&&Picker._.isInteger(t.pick))return t;if(!r||!r.format)throw"Need a formatting option to parse this..";return i.formats.toArray(r.format).map(function(e){var r=i.formats[e],a=r?Picker._.trigger(r,i,[t,n]):e.replace(/^!/,"").length;r&&(n[e]=t.substr(0,a)),t=t.substr(a)}),[n.yyyy||n.yy,+(n.mm||n.m)-(r.data?1:0),n.dd||n.d]},e.prototype.formats=function(){var e=function(e,t,r){var i=e.match(/\w+/)[0];return r.mm||r.m||(r.m=t.indexOf(i)),i.length};return{d:function(e,t){return e?Picker._.digits(e):t.date},dd:function(e,t){return e?2:Picker._.lead(t.date)},ddd:function(e,t){return e?getFirstWordLength(e):this.settings.weekdaysShort[t.day]},dddd:function(e,t){return e?getFirstWordLength(e):this.settings.weekdaysFull[t.day]},m:function(e,t){return e?Picker._.digits(e):t.month+1},mm:function(e,t){return e?2:Picker._.lead(t.month+1)},mmm:function(t,r){var i=this.settings.monthsShort;return t?e(t,i,r):i[r.month]},mmmm:function(t,r){var i=this.settings.monthsFull;return t?e(t,i,r):i[r.month]},yy:function(e,t){return e?2:(""+t.year).slice(2)},yyyy:function(e,t){return e?4:t.year},toArray:function(e){return e.split(/(d{1,4}|m{1,4}|y{4}|yy|!.)/g)},toString:function(e,t){var r=this;return r.formats.toArray(e).map(function(e){return Picker._.trigger(r.formats[e],r,[0,t])||e.replace(/^!/,"")}).join("")}}}(),e.prototype.flipItem=function(e,t){var r=this,i=r.item.disable,n=-1===r.item.enable;return"flip"==t?r.item.enable=n?1:-1:!n&&"enable"==e||n&&"disable"==e?i=r.removeDisabled(i,t):(!n&&"disable"==e||n&&"enable"==e)&&(i=r.addDisabled(i,t)),i},e.prototype.addDisabled=function(e,t){var r=this;return t.map(function(t){r.filterDisabled(e,t).length||e.push(t)}),e},e.prototype.removeDisabled=function(e,t){var r=this;return t.map(function(t){e=r.filterDisabled(e,t,1)}),e},e.prototype.filterDisabled=function(e,t,r){var i=Array.isArray(t);return e.filter(function(e){var n=!i&&t===e||i&&Array.isArray(e)&&""+t==""+e;return r?!n:n})},e.prototype.nodes=function(e){var i=this,n=i.settings,a=i.item.now,o=i.item.select,s=i.item.highlight,l=i.item.view,c=i.item.disable,u=i.item.min,d=i.item.max,h=function(e){return n.firstDay&&e.push(e.shift()),Picker._.node("thead",Picker._.group({min:0,max:t-1,i:1,node:"th",item:function(t){return[e[t],n.klass.weekdays]}}))}((n.showWeekdaysFull?n.weekdaysFull:n.weekdaysShort).slice(0)),m=function(e){return Picker._.node("div"," ",n.klass["nav"+(e?"Next":"Prev")]+(e&&l.year>=d.year&&l.month>=d.month||!e&&l.year<=u.year&&l.month<=u.month?" "+n.klass.navDisabled:""),"data-nav="+(e||-1))},p=function(t){return n.selectMonths?Picker._.node("select",Picker._.group({min:0,max:11,i:1,node:"option",item:function(e){return[t[e],0,"value="+e+(l.month==e?" selected":"")+(l.year==u.year&&u.month>e||l.year==d.year&&e>d.month?" disabled":"")]}}),n.klass.selectMonth,e?"":"disabled"):Picker._.node("div",t[l.month],n.klass.month)},y=function(){var t=l.year,r=n.selectYears===!0?5:~~(n.selectYears/2);if(r){var i=u.year,a=d.year,o=t-r,s=t+r;if(i>o&&(s+=i-o,o=i),s>a){var c=o-i,h=s-a;o-=c>h?h:c,s=a}return Picker._.node("select",Picker._.group({min:o,max:s,i:1,node:"option",item:function(e){return[e,0,"value="+e+(t==e?" selected":"")]}}),n.klass.selectYear,e?"":"disabled")}return Picker._.node("div",t,n.klass.year)};return Picker._.node("div",m()+m(1)+p(n.showMonthsShort?n.monthsShort:n.monthsFull)+y(),n.klass.header)+Picker._.node("table",h+Picker._.node("tbody",Picker._.group({min:0,max:r-1,i:1,node:"tr",item:function(e){return[Picker._.group({min:t*e-l.day+1,max:function(){return this.min+t-1},i:1,node:"td",item:function(e){return e=i.create([l.year,l.month,e+(n.firstDay?1:0)]),[Picker._.node("div",e.date,function(t){return t.push(l.month==e.month?n.klass.infocus:n.klass.outfocus),a.pick==e.pick&&t.push(n.klass.now),o&&o.pick==e.pick&&t.push(n.klass.selected),s&&s.pick==e.pick&&t.push(n.klass.highlighted),(c&&i.disabled(e)||e.pickd.pick)&&t.push(n.klass.disabled),t.join(" ")}([n.klass.day]),"data-pick="+e.pick)]}})]}})),n.klass.table)+Picker._.node("div",Picker._.node("button",n.today,n.klass.buttonToday,"data-pick="+a.pick+(e?"":" disabled"))+Picker._.node("button",n.clear,n.klass.buttonClear,"data-clear=1"+(e?"":" disabled")),n.klass.footer)},e.defaults=function(e){return{monthsFull:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],weekdaysFull:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],weekdaysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],today:"Today",clear:"Clear",format:"d mmmm, yyyy",klass:{table:e+"table",header:e+"header",navPrev:e+"nav--prev",navNext:e+"nav--next",navDisabled:e+"nav--disabled",month:e+"month",year:e+"year",selectMonth:e+"select--month",selectYear:e+"select--year",weekdays:e+"weekday",day:e+"day",disabled:e+"day--disabled",selected:e+"day--selected",highlighted:e+"day--highlighted",now:e+"day--today",infocus:e+"day--infocus",outfocus:e+"day--outfocus",footer:e+"footer",buttonClear:e+"button--clear",buttonToday:e+"button--today"}}}(Picker.klasses().picker+"__"),Picker.extend("pickadate",e)})(); \ No newline at end of file diff --git a/lib/compressed/picker.js b/lib/compressed/picker.js index 8c6930ca..312a32c4 100644 --- a/lib/compressed/picker.js +++ b/lib/compressed/picker.js @@ -1,7 +1,7 @@ /*! - * pickadate.js v3.0.2, 2013/05/20 + * pickadate.js v3.0.3, 2013/05/23 * By Amsul, http://amsul.ca * Hosted on http://amsul.github.io/pickadate.js * Licensed under MIT */ -window.Picker=function(e,t){function n(r,i,o,a){function s(){return n._.node("div",n._.node("div",n._.node("div",n._.node("div",h.component.nodes(u.open),d.box),d.wrap),d.frame),d.holder)}function c(e){e.stopPropagation(),"focus"==e.type&&h.$root.addClass(d.focused),h.open()}if(!r)return n;var u={id:Math.abs(~~(1e9*Math.random()))},l=o?$.extend(!0,{},o.defaults,a):a||{},d=$.extend({},n.klasses(),l.klass),p=$(r),m=function(){return this.start()},h=m.prototype={constructor:m,$node:p,start:function(){return u&&u.start?h:(u.methods={},u.start=!0,u.open=!1,u.type=r.type,r.autofocus=r==document.activeElement,r.type="text",r.readOnly=!0,h.component=new o(h,l),h.$root=$(n._.node("div",s(),d.picker)).on({focusin:function(e){h.$root.removeClass(d.focused),e.stopPropagation()},mousedown:function(e){e.target!=h.$root.children()[0]&&e.stopPropagation()},click:function(e){var t=e.target,i=t.attributes.length?$(t):$(t).closest("[data-pick]"),o=i.data();t!=h.$root.children()[0]&&(e.stopPropagation(),h.$root.find(document.activeElement).length||r.focus(),o.nav&&!i.hasClass(d.navDisabled)?h.set("highlight",h.component.item.highlight,{nav:o.nav}):n._.isInteger(o.pick)&&!i.hasClass(d.disabled)?h.set("select",o.pick).close(!0):o.clear&&h.clear().close(!0))}}),h._hidden=l.formatSubmit?$("")[0]:t,p.addClass(d.input).on("focus.P"+u.id+" click.P"+u.id,c).on("change.P"+u.id,function(){h._hidden&&(h._hidden.value=r.value?n._.trigger(h.component.formats.toString,h.component,[l.formatSubmit,h.component.item.select]):"")}).on("keydown.P"+u.id,function(e){var n=e.keyCode,r=/^(8|46)$/.test(n);return 27==n?(h.close(),!1):((32==n||r||!u.open&&h.component.key[n])&&(e.preventDefault(),e.stopPropagation(),r?h.clear().close():h.open()),t)}).val(p.data("value")?n._.trigger(h.component.formats.toString,h.component,[l.format,h.component.item.select]):r.value).after(h.$root,h._hidden).data(i,h),h.on({start:h.component.onStart,render:h.component.onRender,stop:h.component.onStop,open:h.component.onOpen,close:h.component.onClose,set:h.component.onSet}).on({start:l.onStart,render:l.onRender,stop:l.onStop,open:l.onOpen,close:l.onClose,set:l.onSet}),r.autofocus&&h.open(),h.trigger("start").trigger("render"))},render:function(){return h.$root.html(s()),h.trigger("render")},stop:function(){return u.start?(h.close(),h._hidden&&h._hidden.parentNode.removeChild(h._hidden),h.$root.remove(),p.removeClass(d.input).off(".P"+u.id).removeData(i),r.type=u.type,r.readOnly=!1,h.trigger("stop"),u.methods={},u.start=!1,h):h},open:function(t){return u.open?h:(p.addClass(d.active),h.$root.addClass(d.opened),t!==!1&&(u.open=!0,p.focus(),e.on("click.P"+u.id+" focusin.P"+u.id,function(e){e.target!=r&&e.target!=document&&h.close()}).on("keydown.P"+u.id,function(e){var t=e.keyCode,i=h.component.key[t],o=e.target;27==t?h.close(!0):o!=r||!i&&13!=t?h.$root.find(o).length&&13==t&&(e.preventDefault(),o.click()):(e.preventDefault(),i?n._.trigger(h.component.key.go,h,[i]):h.set("select",h.component.item.highlight).close())})),h.trigger("open"))},close:function(t){return t&&(p.off("focus.P"+u.id).focus(),setTimeout(function(){p.on("focus.P"+u.id,c)},0)),p.removeClass(d.active),h.$root.removeClass(d.opened+" "+d.focused),u.open&&(u.open=!1,e.off(".P"+u.id)),h.trigger("close")},clear:function(){return h.set("clear")},set:function(e,t,r){var i,o,a=n._.isObject(e),s=a?e:{};if(e){a||(s[e]=t);for(i in s)o=s[i],h.component.item[i]&&h.component.set(i,o,r||{}),("select"==i||"clear"==i)&&p.val("clear"==i?"":n._.trigger(h.component.formats.toString,h.component,[l.format,h.component.get(i)])).trigger("change");h.render()}return h.trigger("set",s)},get:function(e,i){return e=e||"value",null!=u[e]?u[e]:"value"==e?r.value:h.component.item[e]?"string"==typeof i?n._.trigger(h.component.formats.toString,h.component,[i,h.component.get(e)]):h.component.get(e):t},on:function(e,t){var r,i,o=n._.isObject(e),a=o?e:{};if(e){o||(a[e]=t);for(r in a)i=a[r],u.methods[r]=u.methods[r]||[],u.methods[r].push(i)}return h},trigger:function(e,t){var r=u.methods[e];return r&&r.map(function(e){n._.trigger(e,h,[t])}),h}};return new m}return n.klasses=function(e){return e=e||"picker",{picker:e,opened:e+"--opened",focused:e+"--focused",input:e+"__input",active:e+"__input--active",holder:e+"__holder",frame:e+"__frame",wrap:e+"__wrap",box:e+"__box"}},n._={group:function(e){for(var t,r="",i=n._.trigger(e.min,e);n._.trigger(e.max,e,[i])>=i;i+=e.i)t=n._.trigger(e.item,e,[i]),r+=n._.node(e.node,t[0],t[1],t[2]);return r},node:function(e,t,n,r){return t?(t=Array.isArray(t)?t.join(""):t,n=n?' class="'+n+'"':"",r=r?" "+r:"","<"+e+n+r+">"+t+""):""},lead:function(e){return(10>e?"0":"")+e},trigger:function(e,t,n){return"function"==typeof e?e.apply(t,n||[]):e},digits:function(e){return/\d/.test(e[1])?2:1},isObject:function(e){return{}.toString.call(e).indexOf("Object")>-1},isDate:function(e){return{}.toString.call(e).indexOf("Date")>-1},isInteger:function(e){return{}.toString.call(e).indexOf("Number")>-1&&0===e%1}},n.extend=function(e,t){$.fn[e]=function(r,i){var o=this.data(e);return"picker"==r?o:o&&"string"==typeof r?(n._.trigger(o[r],o,[i]),this):this.each(function(){var i=$(this);i.data(e)||new n(this,e,t,r)})},$.fn[e].defaults=t.defaults},n}($(document)); \ No newline at end of file +window.Picker=function(e,t,n){function r(i,o,a,s){function c(){return r._.node("div",r._.node("div",r._.node("div",r._.node("div",f.component.nodes(u.open),p.box),p.wrap),p.frame),p.holder)}function l(e){e.stopPropagation(),"focus"==e.type&&f.$root.addClass(p.focused),f.open()}if(!i)return r;var u={id:Math.abs(~~(1e9*Math.random()))},d=a?e.extend(!0,{},a.defaults,s):s||{},p=e.extend({},r.klasses(),d.klass),m=e(i),h=function(){return this.start()},f=h.prototype={constructor:h,$node:m,start:function(){return u&&u.start?f:(u.methods={},u.start=!0,u.open=!1,u.type=i.type,i.autofocus=i==document.activeElement,i.type="text",i.readOnly=!0,f.component=new a(f,d),f.$root=e(r._.node("div",c(),p.picker)).on({focusin:function(e){f.$root.removeClass(p.focused),e.stopPropagation()},mousedown:function(e){e.target!=f.$root.children()[0]&&e.stopPropagation()},click:function(t){var n=t.target,o=n.attributes.length?e(n):e(n).closest("[data-pick]"),a=o.data();n!=f.$root.children()[0]&&(t.stopPropagation(),f.$root.find(document.activeElement).length||i.focus(),a.nav&&!o.hasClass(p.navDisabled)?f.set("highlight",f.component.item.highlight,{nav:a.nav}):r._.isInteger(a.pick)&&!o.hasClass(p.disabled)?f.set("select",a.pick).close(!0):a.clear&&f.clear().close(!0))}}),f._hidden=d.formatSubmit?e("")[0]:n,m.addClass(p.input).on("focus.P"+u.id+" click.P"+u.id,l).on("change.P"+u.id,function(){f._hidden&&(f._hidden.value=i.value?r._.trigger(f.component.formats.toString,f.component,[d.formatSubmit,f.component.item.select]):"")}).on("keydown.P"+u.id,function(e){var t=e.keyCode,r=/^(8|46)$/.test(t);return 27==t?(f.close(),!1):((32==t||r||!u.open&&f.component.key[t])&&(e.preventDefault(),e.stopPropagation(),r?f.clear().close():f.open()),n)}).val(m.data("value")?r._.trigger(f.component.formats.toString,f.component,[d.format,f.component.item.select]):i.value).after(f.$root,f._hidden).data(o,f),f.on({start:f.component.onStart,render:f.component.onRender,stop:f.component.onStop,open:f.component.onOpen,close:f.component.onClose,set:f.component.onSet}).on({start:d.onStart,render:d.onRender,stop:d.onStop,open:d.onOpen,close:d.onClose,set:d.onSet}),i.autofocus&&f.open(),f.trigger("start").trigger("render"))},render:function(){return f.$root.html(c()),f.trigger("render")},stop:function(){return u.start?(f.close(),f._hidden&&f._hidden.parentNode.removeChild(f._hidden),f.$root.remove(),m.removeClass(p.input).off(".P"+u.id).removeData(o),i.type=u.type,i.readOnly=!1,f.trigger("stop"),u.methods={},u.start=!1,f):f},open:function(e){return u.open?f:(m.addClass(p.active),f.$root.addClass(p.opened),e!==!1&&(u.open=!0,m.focus(),t.on("click.P"+u.id+" focusin.P"+u.id,function(e){e.target!=i&&e.target!=document&&f.close()}).on("keydown.P"+u.id,function(e){var t=e.keyCode,n=f.component.key[t],o=e.target;27==t?f.close(!0):o!=i||!n&&13!=t?f.$root.find(o).length&&13==t&&(e.preventDefault(),o.click()):(e.preventDefault(),n?r._.trigger(f.component.key.go,f,[n]):f.$root.find("."+p.highlighted).hasClass(p.disabled)||f.set("select",f.component.item.highlight).close())})),f.trigger("open"))},close:function(e){return e&&(m.off("focus.P"+u.id).focus(),setTimeout(function(){m.on("focus.P"+u.id,l)},0)),m.removeClass(p.active),f.$root.removeClass(p.opened+" "+p.focused),u.open&&(u.open=!1,t.off(".P"+u.id)),f.trigger("close")},clear:function(){return f.set("clear")},set:function(e,t,n){var i,o,a=r._.isObject(e),s=a?e:{};if(e){a||(s[e]=t);for(i in s)o=s[i],f.component.item[i]&&f.component.set(i,o,n||{}),("select"==i||"clear"==i)&&m.val("clear"==i?"":r._.trigger(f.component.formats.toString,f.component,[d.format,f.component.get(i)])).trigger("change");f.render()}return f.trigger("set",s)},get:function(e,t){return e=e||"value",null!=u[e]?u[e]:"value"==e?i.value:f.component.item[e]?"string"==typeof t?r._.trigger(f.component.formats.toString,f.component,[t,f.component.get(e)]):f.component.get(e):n},on:function(e,t){var n,i,o=r._.isObject(e),a=o?e:{};if(e){o||(a[e]=t);for(n in a)i=a[n],u.methods[n]=u.methods[n]||[],u.methods[n].push(i)}return f},trigger:function(e,t){var n=u.methods[e];return n&&n.map(function(e){r._.trigger(e,f,[t])}),f}};return new h}return r.klasses=function(e){return e=e||"picker",{picker:e,opened:e+"--opened",focused:e+"--focused",input:e+"__input",active:e+"__input--active",holder:e+"__holder",frame:e+"__frame",wrap:e+"__wrap",box:e+"__box"}},r._={group:function(e){for(var t,n="",i=r._.trigger(e.min,e);r._.trigger(e.max,e,[i])>=i;i+=e.i)t=r._.trigger(e.item,e,[i]),n+=r._.node(e.node,t[0],t[1],t[2]);return n},node:function(e,t,n,r){return t?(t=Array.isArray(t)?t.join(""):t,n=n?' class="'+n+'"':"",r=r?" "+r:"","<"+e+n+r+">"+t+""):""},lead:function(e){return(10>e?"0":"")+e},trigger:function(e,t,n){return"function"==typeof e?e.apply(t,n||[]):e},digits:function(e){return/\d/.test(e[1])?2:1},isObject:function(e){return{}.toString.call(e).indexOf("Object")>-1},isDate:function(e){return{}.toString.call(e).indexOf("Date")>-1},isInteger:function(e){return{}.toString.call(e).indexOf("Number")>-1&&0===e%1}},r.extend=function(t,n){e.fn[t]=function(i,o){var a=this.data(t);return"picker"==i?a:a&&"string"==typeof i?(r._.trigger(a[i],a,[o]),this):this.each(function(){var o=e(this);o.data(t)||new r(this,t,n,i)})},e.fn[t].defaults=n.defaults},r}(jQuery,jQuery(document)); \ No newline at end of file diff --git a/lib/compressed/picker.time.js b/lib/compressed/picker.time.js index d448e37f..7b9537d3 100644 --- a/lib/compressed/picker.time.js +++ b/lib/compressed/picker.time.js @@ -1,5 +1,5 @@ /*! - * Time picker for pickadate.js v3.0.2 + * Time picker for pickadate.js v3.0.3 * http://amsul.github.io/pickadate.js/time.htm */ -(function(){function e(e,t){var i=this,n=e.$node.data("value");i.settings=t,i.queue={interval:"i",min:"measure create",max:"measure create",now:"now create",select:"parse create validate",highlight:"create validate",view:"create validate",disable:"flipItem",enable:"flipItem"},i.item={},i.item.interval=t.interval||30,i.item.disable=(t.disable||[]).slice(0),i.item.enable=-function(e){return e[0]===!0?e.shift():-1}(i.item.disable),i.set("min",t.min).set("max",t.max).set("now").set("select",n||e.$node[0].value||i.item.min,{format:n?t.formatSubmit:t.format}),i.key={40:1,38:-1,39:1,37:-1,go:function(e){i.set("highlight",i.item.highlight.pick+e*i.item.interval,{interval:e*i.item.interval}),this.render()}},e.on("render",function(){var n=e.$root.children(),r=n.find("."+t.klass.viewset);r.length?n[0].scrollTop=~~(r.position().top-2*r[0].clientHeight):console.warn("Nothing to viewset with",i.item.view)}).on("open",function(){e.$root.find("button").attr("disable",!1)}).on("close",function(){e.$root.find("button").attr("disable",!0)})}var t=24,i=60,n=12,r=t*i;e.prototype.set=function(e,t,i){var n=this;return n.item["enable"==e?"disable":"flip"==e?"enable":e]=n.queue[e].split(" ").map(function(r){return t=n[r](e,t,i)}).pop(),"select"==e?n.set("highlight",n.item.select,i):"highlight"==e?n.set("view",n.item.highlight,i):"interval"==e?n.set("min",n.item.min,i).set("max",n.item.max,i):("flip"==e||"min"==e||"max"==e||"disable"==e||"enable"==e)&&n.item.select&&n.item.highlight&&("min"==e&&n.set("max",n.item.max,i),n.set("select",n.item.select,i).set("highlight",n.item.highlight,i)),n},e.prototype.get=function(e){return this.item[e]},e.prototype.create=function(e,n,o){var a=this;return n=void 0===n?e:n,Picker._.isObject(n)&&Picker._.isInteger(n.pick)?n=n.pick:Array.isArray(n)?n=+n[0]*i+ +n[1]:Picker._.isInteger(n)||(n=a.now(e,n,o)),"max"==e&&a.item.min.pick>n&&(n+=r),n=a.normalize(n,o),{hour:~~(t+n/i)%t,mins:(i+n%i)%i,time:(r+n)%r,pick:n}},e.prototype.now=function(e,t){var n=new Date,r=n.getHours()*i+n.getMinutes();return Picker._.isInteger(t)?t+="min"==e&&0>t&&0===r?2:1:t=1,t*this.item.interval+r},e.prototype.normalize=function(e){return e-((0>e?this.item.interval:0)+e%this.item.interval)},e.prototype.measure=function(e,n,r){var o=this;return n?n===!0||Picker._.isInteger(n)?n=o.now(e,n,r):Picker._.isObject(n)&&Picker._.isInteger(n.pick)&&(n=o.normalize(n.pick,r)):n="min"==e?[0,0]:[t-1,i-1],n},e.prototype.validate=function(e,t,i){var n=this,r=i&&i.interval?i.interval:n.item.interval;return n.disabled(t)&&(t=n.shift(t,r)),t=n.scope(t),n.disabled(t)&&(t=n.shift(t,-1*r)),t},e.prototype.disabled=function(e){var t=this,i=t.item.disable.filter(function(i){return Picker._.isInteger(i)?e.hour==i:Array.isArray(i)?e.pick==t.create(i).pick:void 0}).length;return-1===t.item.enable?!i:i},e.prototype.shift=function(e,t){for(var i=this;i.disabled(e)&&(e=i.create(e.pick+=t||i.item.interval),!(e.pick<=i.item.min.pick||e.pick>=i.item.max.pick)););return e},e.prototype.scope=function(e){var t=this.item.min.pick,i=this.item.max.pick;return this.create(e.pick>i?i:t>e.pick?t:e)},e.prototype.parse=function(e,t,n){var r=this,o={};if(!t||Picker._.isInteger(t)||Array.isArray(t)||Picker._.isDate(t)||Picker._.isObject(t)&&Picker._.isInteger(t.pick))return t;if(!n||!n.format)throw"Need a formatting option to parse this..";return r.formats.toArray(n.format).map(function(e){var i=r.formats[e],n=i?Picker._.trigger(i,r,[t,o]):e.replace(/^!/,"").length;i&&(o[e]=t.substr(0,n)),t=t.substr(n)}),+o.i+i*(+(o.H||o.HH)||+(o.h||o.hh)%12+(/^p/i.test(o.A||o.a)?12:0))},e.prototype.formats={h:function(e,t){return e?Picker._.digits(e):t.hour%n||n},hh:function(e,t){return e?2:Picker._.lead(t.hour%n||n)},H:function(e,t){return e?Picker._.digits(e):""+t.hour},HH:function(e,t){return e?Picker._.digits(e):Picker._.lead(t.hour)},i:function(e,t){return e?2:Picker._.lead(t.mins)},a:function(e,t){return e?4:r/2>t.time%r?"a.m.":"p.m."},A:function(e,t){return e?2:r/2>t.time%r?"AM":"PM"},toArray:function(e){return e.split(/(h{1,2}|H{1,2}|i|a|A|!.)/g)},toString:function(e,t){var i=this;return i.formats.toArray(e).map(function(e){return Picker._.trigger(i.formats[e],i,[0,t])||e.replace(/^!/,"")}).join("")}},e.prototype.flipItem=function(e,t){var i=this,n=i.item.disable,r=-1===i.item.enable;return"flip"==t?i.item.enable=r?1:-1:!r&&"enable"==e||r&&"disable"==e?n=i.removeDisabled(n,t):(!r&&"disable"==e||r&&"enable"==e)&&(n=i.addDisabled(n,t)),n},e.prototype.addDisabled=function(e,t){var i=this;return t.map(function(t){i.filterDisabled(e,t).length||e.push(t)}),e},e.prototype.removeDisabled=function(e,t){var i=this;return t.map(function(t){e=i.filterDisabled(e,t,1)}),e},e.prototype.filterDisabled=function(e,t,i){var n=Array.isArray(t);return e.filter(function(e){var r=!n&&t===e||n&&Array.isArray(e)&&""+t==""+e;return i?!r:r})},e.prototype.i=function(e,t){return Picker._.isInteger(t)&&t>0?t:this.item.interval},e.prototype.nodes=function(e){var t=this,i=t.settings,n=t.item.select,r=t.item.highlight,o=t.item.view,a=t.item.disable;return Picker._.node("ul",Picker._.group({min:t.item.min.pick,max:t.item.max.pick,i:t.item.interval,node:"li",item:function(e){return e=t.create(e),[Picker._.trigger(t.formats.toString,t,[Picker._.trigger(i.formatLabel,t,[e])||i.format,e]),function(s,c){return n&&n.pick==c&&s.push(i.klass.selected),r&&r.pick==c&&s.push(i.klass.highlighted),o&&o.pick==c&&s.push(i.klass.viewset),a&&t.disabled(e)&&s.push(i.klass.disabled),s.join(" ")}([i.klass.listItem],e.pick),"data-pick="+e.pick]}})+Picker._.node("li",Picker._.node("button",i.clear,i.klass.buttonClear,"data-clear=1"+(e?"":" disable"))),i.klass.list)},e.defaults=function(e){return{clear:"Clear",format:"h:i A",interval:30,klass:{picker:e+" "+e+"--time",holder:e+"__holder",list:e+"__list",listItem:e+"__list-item",disabled:e+"__list-item--disabled",selected:e+"__list-item--selected",highlighted:e+"__list-item--highlighted",viewset:e+"__list-item--viewset",now:e+"__list-item--now",buttonClear:e+"__button--clear"}}}(Picker.klasses().picker),Picker.extend("pickatime",e)})(); \ No newline at end of file +(function(){function e(e,t){var i=this,r=e.$node.data("value");i.settings=t,i.queue={interval:"i",min:"measure create",max:"measure create",now:"now create",select:"parse create validate",highlight:"create validate",view:"create validate",disable:"flipItem",enable:"flipItem"},i.item={},i.item.interval=t.interval||30,i.item.disable=(t.disable||[]).slice(0),i.item.enable=-function(e){return e[0]===!0?e.shift():-1}(i.item.disable),i.set("min",t.min).set("max",t.max).set("now").set("select",r||e.$node[0].value||i.item.min,{format:r?t.formatSubmit:t.format}),i.key={40:1,38:-1,39:1,37:-1,go:function(e){i.set("highlight",i.item.highlight.pick+e*i.item.interval,{interval:e*i.item.interval}),this.render()}},e.on("render",function(){var r=e.$root.children(),n=r.find("."+t.klass.viewset);n.length?r[0].scrollTop=~~(n.position().top-2*n[0].clientHeight):console.warn("Nothing to viewset with",i.item.view)}).on("open",function(){e.$root.find("button").attr("disable",!1)}).on("close",function(){e.$root.find("button").attr("disable",!0)})}var t=24,i=60,r=12,n=t*i;e.prototype.set=function(e,t,i){var r=this;return r.item["enable"==e?"disable":"flip"==e?"enable":e]=r.queue[e].split(" ").map(function(n){return t=r[n](e,t,i)}).pop(),"select"==e?r.set("highlight",r.item.select,i):"highlight"==e?r.set("view",r.item.highlight,i):"interval"==e?r.set("min",r.item.min,i).set("max",r.item.max,i):("flip"==e||"min"==e||"max"==e||"disable"==e||"enable"==e)&&r.item.select&&r.item.highlight&&("min"==e&&r.set("max",r.item.max,i),r.set("select",r.item.select,i).set("highlight",r.item.highlight,i)),r},e.prototype.get=function(e){return this.item[e]},e.prototype.create=function(e,r,o){var a=this;return r=void 0===r?e:r,Picker._.isObject(r)&&Picker._.isInteger(r.pick)?r=r.pick:Array.isArray(r)?r=+r[0]*i+ +r[1]:Picker._.isInteger(r)||(r=a.now(e,r,o)),"max"==e&&a.item.min.pick>r&&(r+=n),r=a.normalize(r,o),{hour:~~(t+r/i)%t,mins:(i+r%i)%i,time:(n+r)%n,pick:r}},e.prototype.now=function(e,t){var r=new Date,n=r.getHours()*i+r.getMinutes();return Picker._.isInteger(t)?t+="min"==e&&0>t&&0===n?2:1:t=1,t*this.item.interval+n},e.prototype.normalize=function(e){return e-((0>e?this.item.interval:0)+e%this.item.interval)},e.prototype.measure=function(e,r,n){var o=this;return r?r===!0||Picker._.isInteger(r)?r=o.now(e,r,n):Picker._.isObject(r)&&Picker._.isInteger(r.pick)&&(r=o.normalize(r.pick,n)):r="min"==e?[0,0]:[t-1,i-1],r},e.prototype.validate=function(e,t,i){var r=this,n=i&&i.interval?i.interval:r.item.interval;return r.disabled(t)&&(t=r.shift(t,n)),t=r.scope(t),r.disabled(t)&&(t=r.shift(t,-1*n)),t},e.prototype.disabled=function(e){var t=this,i=t.item.disable.filter(function(i){return Picker._.isInteger(i)?e.hour==i:Array.isArray(i)?e.pick==t.create(i).pick:void 0}).length;return-1===t.item.enable?!i:i},e.prototype.shift=function(e,t){for(var i=this;i.disabled(e)&&(e=i.create(e.pick+=t||i.item.interval),!(e.pick<=i.item.min.pick||e.pick>=i.item.max.pick)););return e},e.prototype.scope=function(e){var t=this.item.min.pick,i=this.item.max.pick;return this.create(e.pick>i?i:t>e.pick?t:e)},e.prototype.parse=function(e,t,r){var n=this,o={};if(!t||Picker._.isInteger(t)||Array.isArray(t)||Picker._.isDate(t)||Picker._.isObject(t)&&Picker._.isInteger(t.pick))return t;if(!r||!r.format)throw"Need a formatting option to parse this..";return n.formats.toArray(r.format).map(function(e){var i=n.formats[e],r=i?Picker._.trigger(i,n,[t,o]):e.replace(/^!/,"").length;i&&(o[e]=t.substr(0,r)),t=t.substr(r)}),+o.i+i*(+(o.H||o.HH)||+(o.h||o.hh)%12+(/^p/i.test(o.A||o.a)?12:0))},e.prototype.formats={h:function(e,t){return e?Picker._.digits(e):t.hour%r||r},hh:function(e,t){return e?2:Picker._.lead(t.hour%r||r)},H:function(e,t){return e?Picker._.digits(e):""+t.hour},HH:function(e,t){return e?Picker._.digits(e):Picker._.lead(t.hour)},i:function(e,t){return e?2:Picker._.lead(t.mins)},a:function(e,t){return e?4:n/2>t.time%n?"a.m.":"p.m."},A:function(e,t){return e?2:n/2>t.time%n?"AM":"PM"},toArray:function(e){return e.split(/(h{1,2}|H{1,2}|i|a|A|!.)/g)},toString:function(e,t){var i=this;return i.formats.toArray(e).map(function(e){return Picker._.trigger(i.formats[e],i,[0,t])||e.replace(/^!/,"")}).join("")}},e.prototype.flipItem=function(e,t){var i=this,r=i.item.disable,n=-1===i.item.enable;return"flip"==t?i.item.enable=n?1:-1:!n&&"enable"==e||n&&"disable"==e?r=i.removeDisabled(r,t):(!n&&"disable"==e||n&&"enable"==e)&&(r=i.addDisabled(r,t)),r},e.prototype.addDisabled=function(e,t){var i=this;return t.map(function(t){i.filterDisabled(e,t).length||e.push(t)}),e},e.prototype.removeDisabled=function(e,t){var i=this;return t.map(function(t){e=i.filterDisabled(e,t,1)}),e},e.prototype.filterDisabled=function(e,t,i){var r=Array.isArray(t);return e.filter(function(e){var n=!r&&t===e||r&&Array.isArray(e)&&""+t==""+e;return i?!n:n})},e.prototype.i=function(e,t){return Picker._.isInteger(t)&&t>0?t:this.item.interval},e.prototype.nodes=function(e){var t=this,i=t.settings,r=t.item.select,n=t.item.highlight,o=t.item.view,a=t.item.disable;return Picker._.node("ul",Picker._.group({min:t.item.min.pick,max:t.item.max.pick,i:t.item.interval,node:"li",item:function(e){return e=t.create(e),[Picker._.trigger(t.formats.toString,t,[Picker._.trigger(i.formatLabel,t,[e])||i.format,e]),function(s,c){return r&&r.pick==c&&s.push(i.klass.selected),n&&n.pick==c&&s.push(i.klass.highlighted),o&&o.pick==c&&s.push(i.klass.viewset),a&&t.disabled(e)&&s.push(i.klass.disabled),s.join(" ")}([i.klass.listItem],e.pick),"data-pick="+e.pick]}})+Picker._.node("li",Picker._.node("button",i.clear,i.klass.buttonClear,"data-clear=1"+(e?"":" disable"))),i.klass.list)},e.defaults=function(e){return{clear:"Clear",format:"h:i A",interval:30,klass:{picker:e+" "+e+"--time",holder:e+"__holder",list:e+"__list",listItem:e+"__list-item",disabled:e+"__list-item--disabled",selected:e+"__list-item--selected",highlighted:e+"__list-item--highlighted",viewset:e+"__list-item--viewset",now:e+"__list-item--now",buttonClear:e+"__button--clear"}}}(Picker.klasses().picker),Picker.extend("pickatime",e)})(); \ No newline at end of file diff --git a/lib/compressed/themes/classic.date.css b/lib/compressed/themes/classic.date.css index e828aa21..41106303 100644 --- a/lib/compressed/themes/classic.date.css +++ b/lib/compressed/themes/classic.date.css @@ -1 +1 @@ -.picker__box{padding:0 1em}.picker__header{text-align:center;position:relative;margin-top:.75em}.picker__month,.picker__year{font-weight:500;display:inline-block;margin-left:.25em;margin-right:.25em}.picker__year{color:#999;font-size:.8em;font-style:italic}.picker__select--month,.picker__select--year{font-size:.8em;border:1px solid #b7b7b7;height:2.5em;padding:.66em .25em;margin-left:.25em;margin-right:.25em;margin-top:-.5em}.picker__select--month{width:35%}.picker__select--year{width:22.5%}.picker__select--month:focus,.picker__select--year:focus{border-color:#0089ec}.picker__nav--prev,.picker__nav--next{position:absolute;top:-.33em;padding:.5em 1.33em;width:1em;height:1em}.picker__nav--prev{left:-1em;padding-right:1.5em}.picker__nav--next{right:-1em;padding-left:1.5em}.picker__nav--prev:before,.picker__nav--next:before{content:" ";border-top:.5em solid transparent;border-bottom:.5em solid transparent;border-right:.75em solid #000;width:0;height:0;display:block;margin:0 auto}.picker__nav--next:before{border-right:0;border-left:.75em solid #000}.picker__nav--prev:hover,.picker__nav--next:hover{cursor:pointer;color:#000;background:#b1dcfb}.picker__nav--disabled,.picker__nav--disabled:hover,.picker__nav--disabled:before,.picker__nav--disabled:before:hover{cursor:default;background:0;border-right-color:#f5f5f5;border-left-color:#f5f5f5}.picker__table{text-align:center;border-collapse:collapse;border-spacing:0;table-layout:fixed;font-size:inherit;width:100%;margin-top:.75em;margin-bottom:.5em}@media (min-height:33.875em){.picker__table{margin-bottom:.75em}}.picker__table td{margin:0;padding:0}.picker__weekday{width:14.285714286%;font-size:.75em;padding-bottom:.25em;color:#999;font-weight:500}@media (min-height:33.875em){.picker__weekday{padding-bottom:.5em}}.picker__day{padding:.3125em 0;font-weight:200;border:1px solid transparent}.picker__day--today{color:#0089ec;position:relative}.picker__day--today:before{content:" ";position:absolute;top:2px;right:2px;width:0;height:0;border-top:.5em solid #0059bc;border-left:.5em solid transparent}.picker__day--selected,.picker__day--selected:hover{border-color:#0089ec}.picker__day--highlighted{background:#b1dcfb}.picker__day--disabled:before{border-top-color:#aaa}.picker__day--outfocus{color:#ddd;-ms-filter:"alpha(Opacity=66)";filter:alpha(opacity=66);-moz-opacity:.66;opacity:.66}.picker__day--infocus:hover,.picker__day--outfocus:hover{cursor:pointer;color:#000;background:#b1dcfb}.picker__day--highlighted:hover,.picker--focused .picker__day--highlighted{background:#0089ec;color:#fff}.picker__day--disabled,.picker__day--disabled:hover{background:#f5f5f5;border-color:#f5f5f5;color:#ddd;cursor:default}.picker__footer{text-align:center}.picker__button--today,.picker__button--clear{border:1px solid #fff;background:#fff;font-size:.8em;padding:.66em 0;font-weight:700;width:50%;display:inline-block;vertical-align:bottom}.picker__button--today:hover,.picker__button--clear:hover{cursor:pointer;color:#000;background:#b1dcfb;border-bottom-color:#b1dcfb}.picker__button--today:focus,.picker__button--clear:focus{background:#b1dcfb;border-color:#0089ec;outline:0}.picker__button--today:before,.picker__button--clear:before{position:relative;display:inline-block;height:0}.picker__button--today:before{content:" ";margin-right:.45em;top:-.05em;width:0;border-top:.66em solid #0059bc;border-left:.66em solid transparent}.picker__button--clear:before{content:"\D7";margin-right:.35em;top:-.1em;color:#e20;vertical-align:top;font-size:1.1em} \ No newline at end of file +.picker__box{padding:0 1em}.picker__header{text-align:center;position:relative;margin-top:.75em}.picker__month,.picker__year{font-weight:500;display:inline-block;margin-left:.25em;margin-right:.25em}.picker__year{color:#999;font-size:.8em;font-style:italic}.picker__select--month,.picker__select--year{font-size:.8em;border:1px solid #b7b7b7;height:2.5em;padding:.66em .25em;margin-left:.25em;margin-right:.25em;margin-top:-.5em}.picker__select--month{width:35%}.picker__select--year{width:22.5%}.picker__select--month:focus,.picker__select--year:focus{border-color:#0089ec}.picker__nav--prev,.picker__nav--next{position:absolute;top:-.33em;padding:.5em 1.33em;width:1em;height:1em}.picker__nav--prev{left:-1em;padding-right:1.5em}.picker__nav--next{right:-1em;padding-left:1.5em}.picker__nav--prev:before,.picker__nav--next:before{content:" ";border-top:.5em solid transparent;border-bottom:.5em solid transparent;border-right:.75em solid #000;width:0;height:0;display:block;margin:0 auto}.picker__nav--next:before{border-right:0;border-left:.75em solid #000}.picker__nav--prev:hover,.picker__nav--next:hover{cursor:pointer;color:#000;background:#b1dcfb}.picker__nav--disabled,.picker__nav--disabled:hover,.picker__nav--disabled:before,.picker__nav--disabled:before:hover{cursor:default;background:0;border-right-color:#f5f5f5;border-left-color:#f5f5f5}.picker__table{text-align:center;border-collapse:collapse;border-spacing:0;table-layout:fixed;font-size:inherit;width:100%;margin-top:.75em;margin-bottom:.5em}@media (min-height:33.875em){.picker__table{margin-bottom:.75em}}.picker__table td{margin:0;padding:0}.picker__weekday{width:14.285714286%;font-size:.75em;padding-bottom:.25em;color:#999;font-weight:500}@media (min-height:33.875em){.picker__weekday{padding-bottom:.5em}}.picker__day{padding:.3125em 0;font-weight:200;border:1px solid transparent}.picker__day--today{color:#0089ec;position:relative}.picker__day--today:before{content:" ";position:absolute;top:2px;right:2px;width:0;height:0;border-top:.5em solid #0059bc;border-left:.5em solid transparent}.picker__day--selected,.picker__day--selected:hover{border-color:#0089ec}.picker__day--highlighted{background:#b1dcfb}.picker__day--disabled:before{border-top-color:#aaa}.picker__day--outfocus{color:#ddd;-ms-filter:"alpha(Opacity=66)";filter:alpha(opacity=66);-moz-opacity:.66;opacity:.66}.picker__day--infocus:hover,.picker__day--outfocus:hover{cursor:pointer;color:#000;background:#b1dcfb}.picker__day--highlighted:hover,.picker--focused .picker__day--highlighted{background:#0089ec;color:#fff}.picker__day--disabled:hover,.picker--focused .picker__day--disabled{background:#f5f5f5;border-color:#f5f5f5;color:#ddd;cursor:default}.picker__day--highlighted.picker__day--disabled:hover,.picker--focused .picker__day--highlighted.picker__day--disabled{background:#bbb}.picker__footer{text-align:center}.picker__button--today,.picker__button--clear{border:1px solid #fff;background:#fff;font-size:.8em;padding:.66em 0;font-weight:700;width:50%;display:inline-block;vertical-align:bottom}.picker__button--today:hover,.picker__button--clear:hover{cursor:pointer;color:#000;background:#b1dcfb;border-bottom-color:#b1dcfb}.picker__button--today:focus,.picker__button--clear:focus{background:#b1dcfb;border-color:#0089ec;outline:0}.picker__button--today:before,.picker__button--clear:before{position:relative;display:inline-block;height:0}.picker__button--today:before{content:" ";margin-right:.45em;top:-.05em;width:0;border-top:.66em solid #0059bc;border-left:.66em solid transparent}.picker__button--clear:before{content:"\D7";margin-right:.35em;top:-.1em;color:#e20;vertical-align:top;font-size:1.1em} \ No newline at end of file diff --git a/lib/compressed/themes/default.date.css b/lib/compressed/themes/default.date.css index e828aa21..41106303 100644 --- a/lib/compressed/themes/default.date.css +++ b/lib/compressed/themes/default.date.css @@ -1 +1 @@ -.picker__box{padding:0 1em}.picker__header{text-align:center;position:relative;margin-top:.75em}.picker__month,.picker__year{font-weight:500;display:inline-block;margin-left:.25em;margin-right:.25em}.picker__year{color:#999;font-size:.8em;font-style:italic}.picker__select--month,.picker__select--year{font-size:.8em;border:1px solid #b7b7b7;height:2.5em;padding:.66em .25em;margin-left:.25em;margin-right:.25em;margin-top:-.5em}.picker__select--month{width:35%}.picker__select--year{width:22.5%}.picker__select--month:focus,.picker__select--year:focus{border-color:#0089ec}.picker__nav--prev,.picker__nav--next{position:absolute;top:-.33em;padding:.5em 1.33em;width:1em;height:1em}.picker__nav--prev{left:-1em;padding-right:1.5em}.picker__nav--next{right:-1em;padding-left:1.5em}.picker__nav--prev:before,.picker__nav--next:before{content:" ";border-top:.5em solid transparent;border-bottom:.5em solid transparent;border-right:.75em solid #000;width:0;height:0;display:block;margin:0 auto}.picker__nav--next:before{border-right:0;border-left:.75em solid #000}.picker__nav--prev:hover,.picker__nav--next:hover{cursor:pointer;color:#000;background:#b1dcfb}.picker__nav--disabled,.picker__nav--disabled:hover,.picker__nav--disabled:before,.picker__nav--disabled:before:hover{cursor:default;background:0;border-right-color:#f5f5f5;border-left-color:#f5f5f5}.picker__table{text-align:center;border-collapse:collapse;border-spacing:0;table-layout:fixed;font-size:inherit;width:100%;margin-top:.75em;margin-bottom:.5em}@media (min-height:33.875em){.picker__table{margin-bottom:.75em}}.picker__table td{margin:0;padding:0}.picker__weekday{width:14.285714286%;font-size:.75em;padding-bottom:.25em;color:#999;font-weight:500}@media (min-height:33.875em){.picker__weekday{padding-bottom:.5em}}.picker__day{padding:.3125em 0;font-weight:200;border:1px solid transparent}.picker__day--today{color:#0089ec;position:relative}.picker__day--today:before{content:" ";position:absolute;top:2px;right:2px;width:0;height:0;border-top:.5em solid #0059bc;border-left:.5em solid transparent}.picker__day--selected,.picker__day--selected:hover{border-color:#0089ec}.picker__day--highlighted{background:#b1dcfb}.picker__day--disabled:before{border-top-color:#aaa}.picker__day--outfocus{color:#ddd;-ms-filter:"alpha(Opacity=66)";filter:alpha(opacity=66);-moz-opacity:.66;opacity:.66}.picker__day--infocus:hover,.picker__day--outfocus:hover{cursor:pointer;color:#000;background:#b1dcfb}.picker__day--highlighted:hover,.picker--focused .picker__day--highlighted{background:#0089ec;color:#fff}.picker__day--disabled,.picker__day--disabled:hover{background:#f5f5f5;border-color:#f5f5f5;color:#ddd;cursor:default}.picker__footer{text-align:center}.picker__button--today,.picker__button--clear{border:1px solid #fff;background:#fff;font-size:.8em;padding:.66em 0;font-weight:700;width:50%;display:inline-block;vertical-align:bottom}.picker__button--today:hover,.picker__button--clear:hover{cursor:pointer;color:#000;background:#b1dcfb;border-bottom-color:#b1dcfb}.picker__button--today:focus,.picker__button--clear:focus{background:#b1dcfb;border-color:#0089ec;outline:0}.picker__button--today:before,.picker__button--clear:before{position:relative;display:inline-block;height:0}.picker__button--today:before{content:" ";margin-right:.45em;top:-.05em;width:0;border-top:.66em solid #0059bc;border-left:.66em solid transparent}.picker__button--clear:before{content:"\D7";margin-right:.35em;top:-.1em;color:#e20;vertical-align:top;font-size:1.1em} \ No newline at end of file +.picker__box{padding:0 1em}.picker__header{text-align:center;position:relative;margin-top:.75em}.picker__month,.picker__year{font-weight:500;display:inline-block;margin-left:.25em;margin-right:.25em}.picker__year{color:#999;font-size:.8em;font-style:italic}.picker__select--month,.picker__select--year{font-size:.8em;border:1px solid #b7b7b7;height:2.5em;padding:.66em .25em;margin-left:.25em;margin-right:.25em;margin-top:-.5em}.picker__select--month{width:35%}.picker__select--year{width:22.5%}.picker__select--month:focus,.picker__select--year:focus{border-color:#0089ec}.picker__nav--prev,.picker__nav--next{position:absolute;top:-.33em;padding:.5em 1.33em;width:1em;height:1em}.picker__nav--prev{left:-1em;padding-right:1.5em}.picker__nav--next{right:-1em;padding-left:1.5em}.picker__nav--prev:before,.picker__nav--next:before{content:" ";border-top:.5em solid transparent;border-bottom:.5em solid transparent;border-right:.75em solid #000;width:0;height:0;display:block;margin:0 auto}.picker__nav--next:before{border-right:0;border-left:.75em solid #000}.picker__nav--prev:hover,.picker__nav--next:hover{cursor:pointer;color:#000;background:#b1dcfb}.picker__nav--disabled,.picker__nav--disabled:hover,.picker__nav--disabled:before,.picker__nav--disabled:before:hover{cursor:default;background:0;border-right-color:#f5f5f5;border-left-color:#f5f5f5}.picker__table{text-align:center;border-collapse:collapse;border-spacing:0;table-layout:fixed;font-size:inherit;width:100%;margin-top:.75em;margin-bottom:.5em}@media (min-height:33.875em){.picker__table{margin-bottom:.75em}}.picker__table td{margin:0;padding:0}.picker__weekday{width:14.285714286%;font-size:.75em;padding-bottom:.25em;color:#999;font-weight:500}@media (min-height:33.875em){.picker__weekday{padding-bottom:.5em}}.picker__day{padding:.3125em 0;font-weight:200;border:1px solid transparent}.picker__day--today{color:#0089ec;position:relative}.picker__day--today:before{content:" ";position:absolute;top:2px;right:2px;width:0;height:0;border-top:.5em solid #0059bc;border-left:.5em solid transparent}.picker__day--selected,.picker__day--selected:hover{border-color:#0089ec}.picker__day--highlighted{background:#b1dcfb}.picker__day--disabled:before{border-top-color:#aaa}.picker__day--outfocus{color:#ddd;-ms-filter:"alpha(Opacity=66)";filter:alpha(opacity=66);-moz-opacity:.66;opacity:.66}.picker__day--infocus:hover,.picker__day--outfocus:hover{cursor:pointer;color:#000;background:#b1dcfb}.picker__day--highlighted:hover,.picker--focused .picker__day--highlighted{background:#0089ec;color:#fff}.picker__day--disabled:hover,.picker--focused .picker__day--disabled{background:#f5f5f5;border-color:#f5f5f5;color:#ddd;cursor:default}.picker__day--highlighted.picker__day--disabled:hover,.picker--focused .picker__day--highlighted.picker__day--disabled{background:#bbb}.picker__footer{text-align:center}.picker__button--today,.picker__button--clear{border:1px solid #fff;background:#fff;font-size:.8em;padding:.66em 0;font-weight:700;width:50%;display:inline-block;vertical-align:bottom}.picker__button--today:hover,.picker__button--clear:hover{cursor:pointer;color:#000;background:#b1dcfb;border-bottom-color:#b1dcfb}.picker__button--today:focus,.picker__button--clear:focus{background:#b1dcfb;border-color:#0089ec;outline:0}.picker__button--today:before,.picker__button--clear:before{position:relative;display:inline-block;height:0}.picker__button--today:before{content:" ";margin-right:.45em;top:-.05em;width:0;border-top:.66em solid #0059bc;border-left:.66em solid transparent}.picker__button--clear:before{content:"\D7";margin-right:.35em;top:-.1em;color:#e20;vertical-align:top;font-size:1.1em} \ No newline at end of file diff --git a/lib/picker.date.js b/lib/picker.date.js index 9d281dca..38d451e4 100644 --- a/lib/picker.date.js +++ b/lib/picker.date.js @@ -1,6 +1,6 @@ /*! - * Date picker for pickadate.js v3.0.2 + * Date picker for pickadate.js v3.0.3 * http://amsul.github.io/pickadate.js/date.htm */ @@ -216,9 +216,10 @@ DatePicker.prototype.navigate = function( type, value, options ) { if ( Picker._.isObject( value ) ) { - var year = value.year, - date = value.date, - month = new Date( year, value.month + ( options && options.nav ? options.nav : 0 ), 1 ).getMonth() + var targetDateObject = new Date( value.year, value.month + ( options && options.nav ? options.nav : 0 ), 1 ), + year = targetDateObject.getFullYear(), + month = targetDateObject.getMonth(), + date = value.date // If the month we’re going to doesn’t have enough days, // keep decreasing the date until we reach the month’s last date. @@ -272,111 +273,126 @@ DatePicker.prototype.viewset = function( type, dateObject/*, options*/ ) { /** - * Validate a date as enabled. + * Validate a date as enabled and shift if needed. */ DatePicker.prototype.validate = function( type, dateObject, options ) { var calendar = this, - interval = options && options.interval ? options.interval : 1 - // Check if the object is disabled. - if ( calendar.disabled( dateObject ) ) { + // Keep a reference to the original date. + originalDateObject = dateObject, - // Shift with the interval until we reach an enabled time. - dateObject = calendar.shift( dateObject, interval ) - } - - // Scope the object into range. - dateObject = calendar.scope( dateObject ) - - // Do a second check to see if we landed on a disabled min/max. - // In that case, shift using the opposite interval direction as before. - if ( calendar.disabled( dateObject ) ) { - dateObject = calendar.shift( dateObject, dateObject.pick <= calendar.item.min.pick ? 1 : dateObject.pick >= calendar.item.max.pick ? -1 : interval ) - } + // Make sure we have an interval. + interval = options && options.interval ? options.interval : 1, - return dateObject -} //DatePicker.prototype.validate + // Check if we have any enabled dates after/before now. + hasEnabledBeforeTarget, hasEnabledAfterTarget, + // The min & max limits. + minLimitObject = calendar.item.min, + maxLimitObject = calendar.item.max, -/** - * Check if an object is disabled. - */ -DatePicker.prototype.disabled = function( dateObject ) { - - var - calendar = this, + // Check if we’ve reached the limit during shifting. + reachedMin, reachedMax, - // Filter through the disabled dates to check if this is one. - isDisabledTime = calendar.item.disable.filter( function( dateToDisable ) { + // Check if the calendar is flipped and at least one weekday is enabled. + hasEnabledWeekdays = calendar.item.enable === -1 && calendar.item.disable.filter( function( value ) { - // If the date is a number, match the weekday with 0index and `firstDay` check. - if ( Picker._.isInteger( dateToDisable ) ) { - return dateObject.day === ( calendar.settings.firstDay ? dateToDisable : dateToDisable - 1 ) % 7 + // If there’s a date, check where it is relative to the target. + if ( Array.isArray( value ) ) { + var dateTime = calendar.create( value ).pick + if ( dateTime < dateObject.pick ) hasEnabledBeforeTarget = true + else if ( dateTime > dateObject.pick ) hasEnabledAfterTarget = true } - // If it's an array, create the object and match the exact date. - if ( Array.isArray( dateToDisable ) ) { - return dateObject.pick === calendar.create( dateToDisable ).pick - } + // Return only integers for enabled weekdays. + return Picker._.isInteger( value ) }).length - // If the calendar is "enabled" flag is flipped, flip the condition. - return calendar.item.enable === -1 ? !isDisabledTime : isDisabledTime -} //DatePicker.prototype.disabled -/** - * Shift an object by an interval until we reach an enabled object. - */ -DatePicker.prototype.shift = function( dateObject, interval ) { + // No need to validate if we’re navigating months or there are no enabled days. + if ( + ( !( options && options.nav ) && !( !hasEnabledWeekdays && !hasEnabledBeforeTarget && !hasEnabledAfterTarget ) ) || + ( dateObject.pick <= minLimitObject.pick || dateObject.pick >= maxLimitObject.pick ) + ) { - var calendar = this, - originalDateObject = dateObject - interval = interval || 1 + // Flip the direction if there aren’t any enabled weekdays + // and there are no enabled dates in the direction of the interval. + if ( !hasEnabledWeekdays && ( ( !hasEnabledAfterTarget && interval > 0 ) || ( !hasEnabledBeforeTarget && interval < 0 ) ) ) { + interval *= -1 + } - // Keep looping as long as the time is disabled. - while ( calendar.disabled( dateObject ) ) { - // Increase/decrease the date by the key movement and keep looping. - dateObject = calendar.create([ dateObject.year, dateObject.month, dateObject.date + interval ]) + // Keep looping until we reach an enabled date. + while ( calendar.disabled( dateObject ) ) { - // Check if we've looped through over 2 months in either direction. - if ( Math.abs( dateObject.month - originalDateObject.month ) > 2 ) { - // Reset the date object to the original date. - dateObject = originalDateObject + // If we’ve looped into the next/prev month, return to the original date and flatten the interval. + if ( Math.abs( interval ) > 1 && ( dateObject.month < originalDateObject.month || dateObject.month > originalDateObject.month ) ) { + dateObject = originalDateObject + interval = Math.abs( interval ) / interval + } + - // If the calendar is flipped, go in the opposite direction. - if ( calendar.item.enable === -1 ) { - interval = interval < 0 ? 1 : -1 + // If we’ve reached the min/max limit, reverse the direction and flatten the interval. + if ( dateObject.pick <= minLimitObject.pick ) { + reachedMin = true + interval = 1 } - // Otherwise go in the same direction. - else { - interval = interval < 0 ? -1 : 1 + else if ( dateObject.pick >= maxLimitObject.pick ) { + reachedMax = true + interval = -1 } - } - // If we've gone beyond the limits, break out of the loop. - if ( dateObject.pick <= calendar.item.min.pick || dateObject.pick >= calendar.item.max.pick ) { - break + + // If we’ve reached both limits, just break out of the loop. + if ( reachedMin && reachedMax ) { + break + } + + + // Finally, create the shifted date using the interval and keep looping. + dateObject = calendar.create([ dateObject.year, dateObject.month, dateObject.date + interval ]) } - } - // Return the final object. + } //endif + + + // Return the date object settled on. return dateObject -} //DatePicker.prototype.shift +} //DatePicker.prototype.validate /** - * Scope an object into range of min and max. + * Check if an object is disabled. */ -DatePicker.prototype.scope = function( dateObject ) { - var minTime = this.item.min.pick, - maxTime = this.item.max.pick - return this.create( dateObject.pick > maxTime ? maxTime : dateObject.pick < minTime ? minTime : dateObject ) -} //DatePicker.prototype.scope +DatePicker.prototype.disabled = function( dateObject ) { + + var calendar = this, + + // Filter through the disabled dates to check if this is one. + isDisabledDate = calendar.item.disable.filter( function( dateToDisable ) { + + // If the date is a number, match the weekday with 0index and `firstDay` check. + if ( Picker._.isInteger( dateToDisable ) ) { + return dateObject.day === ( calendar.settings.firstDay ? dateToDisable : dateToDisable - 1 ) % 7 + } + + // If it's an array, create the object and match the exact date. + if ( Array.isArray( dateToDisable ) ) { + return dateObject.pick === calendar.create( dateToDisable ).pick + } + }).length + + + // It’s disabled beyond the min/max limits. If within the limits, check the + // calendar “enabled” flag is flipped and respectively flip the condition. + return dateObject.pick < calendar.item.min.pick || + dateObject.pick > calendar.item.max.pick || + calendar.item.enable === -1 ? !isDisabledDate : isDisabledDate +} //DatePicker.prototype.disabled /** @@ -384,8 +400,7 @@ DatePicker.prototype.scope = function( dateObject ) { */ DatePicker.prototype.parse = function( type, value, options ) { - var - calendar = this, + var calendar = this, parsingObject = {} if ( !value || Picker._.isInteger( value ) || Array.isArray( value ) || Picker._.isDate( value ) || Picker._.isObject( value ) && Picker._.isInteger( value.pick ) ) { diff --git a/lib/picker.js b/lib/picker.js index 70519cbd..ffcdce76 100644 --- a/lib/picker.js +++ b/lib/picker.js @@ -1,6 +1,6 @@ /*! - * pickadate.js v3.0.2, 2013/05/20 + * pickadate.js v3.0.3, 2013/05/23 * By Amsul, http://amsul.ca * Hosted on http://amsul.github.io/pickadate.js * Licensed under MIT @@ -18,7 +18,7 @@ // Create a global scope. -window.Picker = (function( $document, undefined ) { +window.Picker = (function( $, $document, undefined ) { /** @@ -342,8 +342,8 @@ function PickerConstructor( ELEMENT, NAME, COMPONENT, OPTIONS ) { PickerConstructor._.trigger( P.component.key.go, P, [ keycodeToMove ] ) } - // Or on “enter”, set the value and close. - else { + // On “enter”, if the highlighted item isn’t disabled, set the value and close. + else if ( !P.$root.find( '.' + CLASSES.highlighted ).hasClass( CLASSES.disabled ) ) { P.set( 'select', P.component.item.highlight ).close() } } @@ -779,7 +779,7 @@ return PickerConstructor // Close the global scope. -})( $( document ) ); +})( jQuery, jQuery( document ) ); diff --git a/lib/picker.time.js b/lib/picker.time.js index aa4c8c16..8aa77dfd 100644 --- a/lib/picker.time.js +++ b/lib/picker.time.js @@ -1,6 +1,6 @@ /*! - * Time picker for pickadate.js v3.0.2 + * Time picker for pickadate.js v3.0.3 * http://amsul.github.io/pickadate.js/time.htm */ diff --git a/lib/themes/classic.date.css b/lib/themes/classic.date.css index 854452da..5062ab79 100644 --- a/lib/themes/classic.date.css +++ b/lib/themes/classic.date.css @@ -227,13 +227,17 @@ background: #0089ec; color: #ffffff; } -.picker__day--disabled, -.picker__day--disabled:hover { +.picker__day--disabled:hover, +.picker--focused .picker__day--disabled { background: #f5f5f5; border-color: #f5f5f5; color: #dddddd; cursor: default; } +.picker__day--highlighted.picker__day--disabled:hover, +.picker--focused .picker__day--highlighted.picker__day--disabled { + background: #bbbbbb; +} /** * The footer containing the "today" and "clear" buttons. */ diff --git a/lib/themes/default.date.css b/lib/themes/default.date.css index 3e95cf1e..93006db6 100644 --- a/lib/themes/default.date.css +++ b/lib/themes/default.date.css @@ -227,13 +227,17 @@ background: #0089ec; color: #ffffff; } -.picker__day--disabled, -.picker__day--disabled:hover { +.picker__day--disabled:hover, +.picker--focused .picker__day--disabled { background: #f5f5f5; border-color: #f5f5f5; color: #dddddd; cursor: default; } +.picker__day--highlighted.picker__day--disabled:hover, +.picker--focused .picker__day--highlighted.picker__day--disabled { + background: #bbbbbb; +} /** * The footer containing the "today" and "clear" buttons. */ diff --git a/package.json b/package.json index 7de95d60..2b1e9d85 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pickadate", - "version": "3.0.2", + "version": "3.0.3", "title": "pickadate.js", "description": "The mobile-friendly, responsive, and lightweight jQuery date & time input picker.", "author": { diff --git a/pickadate.jquery.json b/pickadate.jquery.json index 7de95d60..2b1e9d85 100644 --- a/pickadate.jquery.json +++ b/pickadate.jquery.json @@ -1,6 +1,6 @@ { "name": "pickadate", - "version": "3.0.2", + "version": "3.0.3", "title": "pickadate.js", "description": "The mobile-friendly, responsive, and lightweight jQuery date & time input picker.", "author": { diff --git a/tests/dev/date.htm b/tests/dev/date.htm index 760c34e4..1e33ff9e 100644 --- a/tests/dev/date.htm +++ b/tests/dev/date.htm @@ -41,7 +41,7 @@

- +




@@ -68,15 +68,16 @@

var $input = $( '.datepicker' ).pickadate({ firstDay: 1, // format: 'he!y!y!y!y yyyy,mm,dd', - formatSubmit: 'yyyy/mm/dd', - selectMonths: true, - selectYears: 20, - // disable: [ - // // 1,2,4,7, - // // [2013,3,19] - // [2013,3,1],[2013,3,17],[2013,3,25] - // ], - // min: [2013, 1, 10], + // formatSubmit: 'yyyy/mm/dd', + // selectMonths: true, + // selectYears: 20, + disable: [ + true, + // 1,2,7, + [2013,2,19], + [2013,4,23],[2013,4,17],[2013,4,25] + ], + min: [2013, 1, 10], // max: [2014, 3, 25], // min: -4, // max: 5,