remove vestige bootstrap-datepicker, move github-buttons to submodule

This commit is contained in:
Tyler Renelle 2013-02-16 19:46:31 -05:00
parent d03352c323
commit 23c94c0aee
84 changed files with 6 additions and 7635 deletions

3
.gitmodules vendored
View file

@ -7,3 +7,6 @@
[submodule "public/vendor/bootstrap"]
path = public/vendor/bootstrap
url = https://github.com/twitter/bootstrap.git
[submodule "public/vendor/github-buttons"]
path = public/vendor/github-buttons
url = https://github.com/mdo/github-buttons.git

View file

@ -1,2 +0,0 @@
instrumented/
tests/coverage.html

View file

@ -1,2 +0,0 @@
instrumented/
tests/coverage.html

View file

@ -1,4 +0,0 @@
before_script:
- cd ./tests
- echo "new Date().toString();" | phantomjs
script: phantomjs run-qunit.js tests.html

View file

@ -1,24 +0,0 @@
Changelog
=========
v1.0.1
---------
* Support for [Bower](http://twitter.github.com/bower/)
v1.0.0
------
Initial release:
* format option
* weekStart option
* calendarWeeks option
* startDate / endDate options
* daysOfWeekDisabled option
* autoclose option
* startView / mnViewMode options
* todayBtn / todayHighlight options
* keyboardNavigation option
* language option
* forceParse option

View file

@ -1,202 +0,0 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

View file

@ -1,431 +0,0 @@
# bootstrap-datepicker [![Build Status](https://travis-ci.org/eternicode/bootstrap-datepicker.png?branch=master)](https://travis-ci.org/eternicode/bootstrap-datepicker)
This is a fork of Stefan Petre's [original code](http://www.eyecon.ro/bootstrap-datepicker/);
thanks go to him for getting this thing started!
Please note that this fork is not used on Stefan's page at this time, nor is it maintained or
contributed to by him (yet?)
Versions are incremented according to [semver](http://semver.org/).
# Requirements
* [Bootstrap](http://twitter.github.com/bootstrap/) 2.0.4+
* [jQuery](http://jquery.com/) 1.7.1+
These are the specific versions bootstrap-datpicker is tested against (`js` files) and built against (`css` files). Use other versions at your own risk.
# Example
Attached to a field with the format specified via options:
```html
<input type="text" value="02-16-2012" class="datepicker">
```
```javascript
$('.datepicker').datepicker({
format: 'mm-dd-yyyy'
});
```
Attached to a field with the format specified via data tag:
```html
<input type="text" value="02/16/12" data-date-format="mm/dd/yy" class="datepicker" >
```
```javascript
$('.datepicker').datepicker();
```
As component:
```html
<div class="input-append date" class="datepicker" data-date="12-02-2012" data-date-format="dd-mm-yyyy">
<input size="16" type="text" value="12-02-2012" readonly>
<span class="add-on"><i class="icon-th"></i></span>
</div>
```
```javascript
$('.datepicker').datepicker();
```
Attached to non-field element, using events to work with the date values.
```html
<div class="alert alert-error" id="alert">
<strong>Oh snap!</strong>
</div>
<table class="table">
<thead>
<tr>
<th>
Start date
<a href="#" class="btn small" id="date-start" data-date-format="yyyy-mm-dd" data-date="2012-02-20">Change</a>
</th>
<th>
End date
<a href="#" class="btn small" id="date-end" data-date-format="yyyy-mm-dd" data-date="2012-02-25">Change</a>
</th>
</tr>
</thead>
<tbody>
<tr>
<td id="date-start-display">2012-02-20</td>
<td id="date-end-display">2012-02-25</td>
</tr>
</tbody>
</table>
```
```javascript
var startDate = new Date(2012,1,20);
var endDate = new Date(2012,1,25);
$('#date-start')
.datepicker()
.on('changeDate', function(ev){
if (ev.date.valueOf() > endDate.valueOf()){
$('#alert').show().find('strong').text('The start date must be before the end date.');
} else {
$('#alert').hide();
startDate = new Date(ev.date);
$('#date-start-display').text($('#date-start').data('date'));
}
$('#date-start').datepicker('hide');
});
$('#date-end')
.datepicker()
.on('changeDate', function(ev){
if (ev.date.valueOf() < startDate.valueOf()){
$('#alert').show().find('strong').text('The end date must be after the start date.');
} else {
$('#alert').hide();
endDate = new Date(ev.date);
$('#date-end-display').text($('#date-end').data('date'));
}
$('#date-end').datepicker('hide');
});
```
As inline datepicker:
```html
<div class="datepicker"></div>
```
```javascript
$('.datepicker').datepicker();
```
# Using bootstrap-datepicker.js
Call the datepicker via javascript:
```javascript
$('.datepicker').datepicker()
```
## Dependencies
Requires bootstrap's dropdown component (`dropdowns.less`) for some styles, and bootstrap's sprites (`sprites.less` and associated images) for arrows.
A standalone .css file (including necessary dropdown styles and alternative, text-based arrows) can be generated by running `build/build_standalone.less` through the `lessc` compiler:
```bash
$ lessc build/build_standalone.less datepicker.css
```
## Options
All options that take a "Date" can handle a `Date` object; a String formatted according to the given `format`; or a timedelta relative to today, eg '-1d', '+6m +1y', etc, where valid units are 'd' (day), 'w' (week), 'm' (month), and 'y' (year).
### format
String. Default: 'mm/dd/yyyy'
The date format, combination of d, dd, D, DD, m, mm, M, MM, yy, yyyy.
* d, dd: Numeric date, no leading zero and leading zero, respectively. Eg, 5, 05.
* D, DD: Abbreviated and full weekday names, respectively. Eg, Mon, Monday.
* m, mm: Numeric month, no leading zero and leading zero, respectively. Eg, 7, 07.
* M, MM: Abbreviated and full month names, respectively. Eg, Jan, January
* yy, yyyy: 2- and 4-digit years, respectively. Eg, 12, 2012.
### weekStart
Integer. Default: 0
Day of the week start. 0 (Sunday) to 6 (Saturday)
### calendarWeeks
Boolean. Default: false
Whether or not to show week numbers to the left of week rows.
### startDate
Date. Default: Beginning of time
The earliest date that may be selected; all earlier dates will be disabled.
### endDate
Date. Default: End of time
The latest date that may be selected; all later dates will be disabled.
### daysOfWeekDisabled
String, Array. Default: '', []
Days of the week that should be disabled. Values are 0 (Sunday) to 6 (Saturday). Multiple values should be comma-separated. Example: disable weekends: `'0,6'` or `[0,6]`.
### autoclose
Boolean. Default: false
Whether or not to close the datepicker immediately when a date is selected.
### startView
Number, String. Default: 0, 'month'
The view that the datepicker should show when it is opened. Accepts values of 0 or 'month' for month view (the default), 1 or 'year' for the 12-month overview, and 2 or 'decade' for the 10-year overview. Useful for date-of-birth datepickers.
### minViewMode
Number, String. Default: 0, 'days'
Set a limit for the view mode. Accepts: 'days' or 0, 'months' or 1, and 'years' or 2.
Gives the ability to pick only a month or an year. The day is set to the 1st for 'months', and the month is set to January for 'years'.
### todayBtn
Boolean, "linked". Default: false
If true or "linked", displays a "Today" button at the bottom of the datepicker to select the current date. If true, the "Today" button will only move the current date into view; if "linked", the current date will also be selected.
### todayHighlight
Boolean. Default: false
If true, highlights the current date.
### keyboardNavigation
Boolean. Default: true
Whether or not to allow date navigation by arrow keys.
### language
String. Default: 'en'
The IETF code (eg "en" for English, "pt-BR" for Brazilian Portuguese) of the language to use for month and day names. These will also be used as the input's value (and subsequently sent to the server in the case of form submissions). If a full code (eg "de-DE") is supplied the picker will first check for an "de-DE" language and if not found will fallback and check for a "de" language. If an unknown language code is given, English will be used. See I18N below.
### forceParse
Boolean. Default: true
Whether or not to force parsing of the input value when the picker is closed. That is, when an invalid date is left in the input field by the user, the picker will forcibly parse that value, and set the input's value to the new, valid date, conforming to the given `format`.
## Markup
Format a component.
```html
<div class="input-append date" class="datepicker" data-date="12-02-2012" data-date-format="dd-mm-yyyy">
<input class="span2" size="16" type="text" value="12-02-2012">
<span class="add-on"><i class="icon-th"></i></span>
</div>
```
## Methods
### .datepicker(options)
Initializes an datepicker.
### remove
Arguments: None
Remove the datepicker. Removes attached events, internal attached objects, and
added HTML elements.
```javascript
$('.datepicker').datepicker('remove');
```
### show
Arguments: None
Show the datepicker.
```javascript
$('.datepicker').datepicker('show');
```
### hide
Arguments: None
Hide the datepicker.
```javascript
$('.datepicker').datepicker('hide');
```
### update
Arguments:
* date (String|Date)
Update the datepicker with given argument or the current input value.
```javascript
$('.datepicker').datepicker('update');
```
### setStartDate
Arguments:
* startDate (String)
Sets a new lower date limit on the datepicker.
```javascript
$('.datepicker').datepicker('setStartDate', '2012-01-01');
```
Omit startDate (or provide an otherwise falsey value) to unset the limit.
```javascript
$('.datepicker').datepicker('setStartDate');
$('.datepicker').datepicker('setStartDate', null);
```
### setEndDate
Arguments:
* endDate (String)
Sets a new upper date limit on the datepicker.
```javascript
$('.datepicker').datepicker('setEndDate', '2012-12-31');
```
Omit endDate (or provide an otherwise falsey value) to unset the limit.
```javascript
$('.datepicker').datepicker('setEndDate');
$('.datepicker').datepicker('setEndDate', null);
```
### setDaysOfWeekDisabled
Arguments:
* daysOfWeekDisabled (String|Array)
Sets the days of week that should be disabled.
```javascript
$('.datepicker').datepicker('setDaysOfWeekDisabled', [0,6]);
```
Omit daysOfWeekDisabled (or provide an otherwise falsey value) to unset the disabled days.
```javascript
$('.datepicker').datepicker('setDaysOfWeekDisabled');
$('.datepicker').datepicker('setDaysOfWeekDisabled', null);
```
## Events
Datepicker class exposes a few events for manipulating the dates.
### show
Fired when the date picker is displayed.
### hide
Fired when the date picker is hidden.
### changeDate
Fired when the date is changed.
```javascript
$('#date-end')
.datepicker()
.on('changeDate', function(ev){
if (ev.date.valueOf() < date-start-display.valueOf()){
....
}
});
```
### changeYear
Fired when the *view* year is changed from decade view.
### changeMonth
Fired when the *view* month is changed from year view.
## Keyboard support
The datepicker includes some keyboard navigation:
### up, down, left, right arrow keys
By themselves, left/right will move backward/forward one day, up/down will move back/forward one week.
With the shift key, up/left will move backward one month, down/right will move forward one month.
With the ctrl key, up/left will move backward one year, down/right will move forward oone year.
Shift+ctrl behaves the same as ctrl -- that is, it does not change both month and year simultaneously, only the year.
### escape
The escape key can be used to hide and re-show the datepicker; this is necessary if the user wants to manually edit the value.
### enter
When the picker is visible, enter will simply hide it. When the picker is not visible, enter will have normal effects -- submitting the current form, etc.
## I18N
The plugin supports i18n for the month and weekday names and the `weekStart` option. The default is English ('en'); other available translations are avilable in the `js/locales/` directory, simply include your desired locale after the plugin. To add more languages, simply add a key to `$.fn.datepicker.dates`, before calling `.datepicker()`. Example:
```javascript
$.fn.datepicker.dates['en'] = {
days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"],
months: ["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"],
today: "Today"
};
```
Right-to-left languages may also include `rtl: true` to make the calendar display appropriately.
If your browser (or those of your users) is displaying characters wrong, chances are the browser is loading the javascript file with a non-unicode encoding. Simply add `charset="UTF-8"` to your `script` tag:
```html
<script type="text/javascript" src="bootstrap-datepicker.XX.js" charset="UTF-8"></script>
```
```javascript
$('.datepicker').datepicker({
language: XX //as you defined in bootstrap-datepicker.XX.js
});
```

View file

@ -1,66 +0,0 @@
// Datepicker .less buildfile. Includes select mixins/variables from bootstrap
// and imports the included datepicker.less to output a minimal datepicker.css
//
// Usage:
// lessc build.less datepicker.css
//
// Variables and mixins copied from bootstrap 2.0.2
// Variables
@grayLight: #999;
@grayLighter: #eee;
@white: #fff;
@linkColor: #08c;
@btnPrimaryBackground: @linkColor;
@orange: #f89406;
// Mixins
// Border Radius
.border-radius(@radius: 5px) {
-webkit-border-radius: @radius;
-moz-border-radius: @radius;
border-radius: @radius;
}
// Button backgrounds
.buttonBackground(@startColor, @endColor) {
.gradientBar(@startColor, @endColor);
.reset-filter();
&:hover, &:active, &.active, &.disabled, &[disabled] {
background-color: @endColor;
}
&:active,
&.active {
background-color: darken(@endColor, 10%) e("\9");
}
}
// Reset filters for IE
.reset-filter() {
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
}
// Gradient Bar Colors for buttons and alerts
.gradientBar(@primaryColor, @secondaryColor) {
#gradient > .vertical(@primaryColor, @secondaryColor);
border-color: @secondaryColor @secondaryColor darken(@secondaryColor, 15%);
border-color: rgba(0,0,0,.1) rgba(0,0,0,.1) fadein(rgba(0,0,0,.1), 15%);
}
// Gradients
#gradient {
.vertical(@startColor: #555, @endColor: #333) {
background-color: mix(@startColor, @endColor, 60%);
background-image: -moz-linear-gradient(top, @startColor, @endColor); // FF 3.6+
background-image: -ms-linear-gradient(top, @startColor, @endColor); // IE10
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), to(@endColor)); // Safari 4+, Chrome 2+
background-image: -webkit-linear-gradient(top, @startColor, @endColor); // Safari 5.1+, Chrome 10+
background-image: -o-linear-gradient(top, @startColor, @endColor); // Opera 11.10
background-image: linear-gradient(top, @startColor, @endColor); // The standard
background-repeat: repeat-x;
filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",@startColor,@endColor)); // IE9 and down
}
}
@import "../less/datepicker.less";

View file

@ -1,69 +0,0 @@
// Datepicker standalone .less buildfile. Includes all necessary mixins/variables/rules from bootstrap
// and imports the included datepicker.less to output a minimal standalone datepicker.css
//
// Usage:
// lessc build_standalone.less datepicker.css
//
// Variables, mixins, and rules copied from bootstrap 2.0.2
@import "build.less";
// Dropdown css
@zindexDropdown: 1000;
@grayDark: #333;
@baseLineHeight: 18px;
@tableBackground: transparent; // overall background-color
@dropdownBackground: @white;
@dropdownBorder: rgba(0,0,0,.2);
@dropdownLinkColor: @grayDark;
@dropdownLinkColorHover: @white;
@dropdownLinkBackgroundHover: @linkColor;
// Drop shadows
.box-shadow(@shadow) {
-webkit-box-shadow: @shadow;
-moz-box-shadow: @shadow;
box-shadow: @shadow;
}
// The dropdown menu (ul)
// ----------------------
.datepicker.dropdown-menu {
position: absolute;
top: 100%;
left: 0;
z-index: @zindexDropdown;
float: left;
display: none; // none by default, but block on "open" of the menu
min-width: 160px;
list-style: none;
background-color: @dropdownBackground;
border: 1px solid #ccc;
border: 1px solid rgba(0,0,0,.2);
.border-radius(5px);
.box-shadow(0 5px 10px rgba(0,0,0,.2));
-webkit-background-clip: padding-box;
-moz-background-clip: padding;
background-clip: padding-box;
*border-right-width: 2px;
*border-bottom-width: 2px;
// Normally inherited from bootstrap's `body`
color: #333333;
font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
font-size:13px;
line-height: @baseLineHeight;
th, td {
padding: 4px 5px;
}
}
// Alternative arrows
// May require `charset="UTF-8"` in your `<link>` tag
.datepicker {
.prev, .next {font-style:normal;}
.prev:after {content:"«";}
.next:after {content:"»";}
}

View file

@ -1,9 +0,0 @@
{
"name": "bootstrap-datepicker",
"version": "1.0.0",
"main": ["js/bootstrap-datepicker.js","css/datepicker.css"],
"dependencies": {
"jquery" : ">=1.7.1",
"bootstrap" : ">=2.0.4 <3.0"
}
}

View file

@ -1,301 +0,0 @@
/*!
* Datepicker for Bootstrap
*
* Copyright 2012 Stefan Petre
* Improvements by Andrew Rowls
* Licensed under the Apache License v2.0
* http://www.apache.org/licenses/LICENSE-2.0
*
*/
.datepicker {
padding: 4px;
/*margin-top: 1px;*/
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
direction: ltr;
/*.dow {
border-top: 1px solid #ddd !important;
}*/
}
.datepicker-inline {
width: 220px;
}
.datepicker.datepicker-rtl {
direction: rtl;
}
.datepicker.datepicker-rtl table tr td span {
float: right;
}
.datepicker-dropdown {
top: 0;
left: 0;
}
.datepicker-dropdown:before {
content: '';
display: inline-block;
border-left: 7px solid transparent;
border-right: 7px solid transparent;
border-bottom: 7px solid #ccc;
border-bottom-color: rgba(0, 0, 0, 0.2);
position: absolute;
top: -7px;
left: 6px;
}
.datepicker-dropdown:after {
content: '';
display: inline-block;
border-left: 6px solid transparent;
border-right: 6px solid transparent;
border-bottom: 6px solid #ffffff;
position: absolute;
top: -6px;
left: 7px;
}
.datepicker > div {
display: none;
}
.datepicker.days div.datepicker-days {
display: block;
}
.datepicker.months div.datepicker-months {
display: block;
}
.datepicker.years div.datepicker-years {
display: block;
}
.datepicker table {
margin: 0;
}
.datepicker td,
.datepicker th {
text-align: center;
width: 20px;
height: 20px;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
border: none;
}
.table-striped .datepicker table tr td,
.table-striped .datepicker table tr th {
background-color: transparent;
}
.datepicker table tr td.day:hover {
background: #eeeeee;
cursor: pointer;
}
.datepicker table tr td.old,
.datepicker table tr td.new {
color: #999999;
}
.datepicker table tr td.disabled,
.datepicker table tr td.disabled:hover {
background: none;
color: #999999;
cursor: default;
}
.datepicker table tr td.today,
.datepicker table tr td.today:hover,
.datepicker table tr td.today.disabled,
.datepicker table tr td.today.disabled:hover {
background-color: #fde19a;
background-image: -moz-linear-gradient(top, #fdd49a, #fdf59a);
background-image: -ms-linear-gradient(top, #fdd49a, #fdf59a);
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdd49a), to(#fdf59a));
background-image: -webkit-linear-gradient(top, #fdd49a, #fdf59a);
background-image: -o-linear-gradient(top, #fdd49a, #fdf59a);
background-image: linear-gradient(top, #fdd49a, #fdf59a);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fdd49a', endColorstr='#fdf59a', GradientType=0);
border-color: #fdf59a #fdf59a #fbed50;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
}
.datepicker table tr td.today:hover,
.datepicker table tr td.today:hover:hover,
.datepicker table tr td.today.disabled:hover,
.datepicker table tr td.today.disabled:hover:hover,
.datepicker table tr td.today:active,
.datepicker table tr td.today:hover:active,
.datepicker table tr td.today.disabled:active,
.datepicker table tr td.today.disabled:hover:active,
.datepicker table tr td.today.active,
.datepicker table tr td.today:hover.active,
.datepicker table tr td.today.disabled.active,
.datepicker table tr td.today.disabled:hover.active,
.datepicker table tr td.today.disabled,
.datepicker table tr td.today:hover.disabled,
.datepicker table tr td.today.disabled.disabled,
.datepicker table tr td.today.disabled:hover.disabled,
.datepicker table tr td.today[disabled],
.datepicker table tr td.today:hover[disabled],
.datepicker table tr td.today.disabled[disabled],
.datepicker table tr td.today.disabled:hover[disabled] {
background-color: #fdf59a;
}
.datepicker table tr td.today:active,
.datepicker table tr td.today:hover:active,
.datepicker table tr td.today.disabled:active,
.datepicker table tr td.today.disabled:hover:active,
.datepicker table tr td.today.active,
.datepicker table tr td.today:hover.active,
.datepicker table tr td.today.disabled.active,
.datepicker table tr td.today.disabled:hover.active {
background-color: #fbf069 \9;
}
.datepicker table tr td.active,
.datepicker table tr td.active:hover,
.datepicker table tr td.active.disabled,
.datepicker table tr td.active.disabled:hover {
background-color: #006dcc;
background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
background-image: -ms-linear-gradient(top, #0088cc, #0044cc);
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
background-image: -o-linear-gradient(top, #0088cc, #0044cc);
background-image: linear-gradient(top, #0088cc, #0044cc);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);
border-color: #0044cc #0044cc #002a80;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
color: #fff;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
}
.datepicker table tr td.active:hover,
.datepicker table tr td.active:hover:hover,
.datepicker table tr td.active.disabled:hover,
.datepicker table tr td.active.disabled:hover:hover,
.datepicker table tr td.active:active,
.datepicker table tr td.active:hover:active,
.datepicker table tr td.active.disabled:active,
.datepicker table tr td.active.disabled:hover:active,
.datepicker table tr td.active.active,
.datepicker table tr td.active:hover.active,
.datepicker table tr td.active.disabled.active,
.datepicker table tr td.active.disabled:hover.active,
.datepicker table tr td.active.disabled,
.datepicker table tr td.active:hover.disabled,
.datepicker table tr td.active.disabled.disabled,
.datepicker table tr td.active.disabled:hover.disabled,
.datepicker table tr td.active[disabled],
.datepicker table tr td.active:hover[disabled],
.datepicker table tr td.active.disabled[disabled],
.datepicker table tr td.active.disabled:hover[disabled] {
background-color: #0044cc;
}
.datepicker table tr td.active:active,
.datepicker table tr td.active:hover:active,
.datepicker table tr td.active.disabled:active,
.datepicker table tr td.active.disabled:hover:active,
.datepicker table tr td.active.active,
.datepicker table tr td.active:hover.active,
.datepicker table tr td.active.disabled.active,
.datepicker table tr td.active.disabled:hover.active {
background-color: #003399 \9;
}
.datepicker table tr td span {
display: block;
width: 23%;
height: 54px;
line-height: 54px;
float: left;
margin: 1%;
cursor: pointer;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
}
.datepicker table tr td span:hover {
background: #eeeeee;
}
.datepicker table tr td span.disabled,
.datepicker table tr td span.disabled:hover {
background: none;
color: #999999;
cursor: default;
}
.datepicker table tr td span.active,
.datepicker table tr td span.active:hover,
.datepicker table tr td span.active.disabled,
.datepicker table tr td span.active.disabled:hover {
background-color: #006dcc;
background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
background-image: -ms-linear-gradient(top, #0088cc, #0044cc);
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
background-image: -o-linear-gradient(top, #0088cc, #0044cc);
background-image: linear-gradient(top, #0088cc, #0044cc);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);
border-color: #0044cc #0044cc #002a80;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
color: #fff;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
}
.datepicker table tr td span.active:hover,
.datepicker table tr td span.active:hover:hover,
.datepicker table tr td span.active.disabled:hover,
.datepicker table tr td span.active.disabled:hover:hover,
.datepicker table tr td span.active:active,
.datepicker table tr td span.active:hover:active,
.datepicker table tr td span.active.disabled:active,
.datepicker table tr td span.active.disabled:hover:active,
.datepicker table tr td span.active.active,
.datepicker table tr td span.active:hover.active,
.datepicker table tr td span.active.disabled.active,
.datepicker table tr td span.active.disabled:hover.active,
.datepicker table tr td span.active.disabled,
.datepicker table tr td span.active:hover.disabled,
.datepicker table tr td span.active.disabled.disabled,
.datepicker table tr td span.active.disabled:hover.disabled,
.datepicker table tr td span.active[disabled],
.datepicker table tr td span.active:hover[disabled],
.datepicker table tr td span.active.disabled[disabled],
.datepicker table tr td span.active.disabled:hover[disabled] {
background-color: #0044cc;
}
.datepicker table tr td span.active:active,
.datepicker table tr td span.active:hover:active,
.datepicker table tr td span.active.disabled:active,
.datepicker table tr td span.active.disabled:hover:active,
.datepicker table tr td span.active.active,
.datepicker table tr td span.active:hover.active,
.datepicker table tr td span.active.disabled.active,
.datepicker table tr td span.active.disabled:hover.active {
background-color: #003399 \9;
}
.datepicker table tr td span.old {
color: #999999;
}
.datepicker th.switch {
width: 145px;
}
.datepicker thead tr:first-child th,
.datepicker tfoot tr:first-child th {
cursor: pointer;
}
.datepicker thead tr:first-child th:hover,
.datepicker tfoot tr:first-child th:hover {
background: #eeeeee;
}
.datepicker .cw {
font-size: 10px;
width: 12px;
padding: 0 2px 0 5px;
vertical-align: middle;
}
.datepicker thead tr:first-child th.cw {
cursor: default;
background-color: transparent;
}
.input-append.date .add-on i,
.input-prepend.date .add-on i {
display: block;
cursor: pointer;
width: 16px;
height: 16px;
}

File diff suppressed because it is too large Load diff

View file

@ -1,14 +0,0 @@
/**
* Bulgarian translation for bootstrap-datepicker
* Apostol Apostolov <apostol.s.apostolov@gmail.com>
*/
;(function($){
$.fn.datepicker.dates['bg'] = {
days: ["Неделя", "Понеделник", "Вторник", "Сряда", "Четвъртък", "Петък", "Събота", "Неделя"],
daysShort: ["Нед", "Пон", "Вто", "Сря", "Чет", "Пет", "Съб", "Нед"],
daysMin: ["Н", "П", "В", "С", "Ч", "П", "С", "Н"],
months: ["Януари", "Февруари", "Март", "Април", "Май", "Юни", "Юли", "Август", "Септември", "Октомври", "Ноември", "Декември"],
monthsShort: ["Ян", "Фев", "Мар", "Апр", "Май", "Юни", "Юли", "Авг", "Сеп", "Окт", "Ное", "Дек"],
today: "днес"
};
}(jQuery));

View file

@ -1,14 +0,0 @@
/**
* Catalan translation for bootstrap-datepicker
* J. Garcia <jogaco.en@gmail.com>
*/
;(function($){
$.fn.datepicker.dates['ca'] = {
days: ["Diumenge", "Dilluns", "Dimarts", "Dimecres", "Dijous", "Divendres", "Dissabte", "Diumenge"],
daysShort: ["Diu", "Dil", "Dmt", "Dmc", "Dij", "Div", "Dis", "Diu"],
daysMin: ["dg", "dl", "dt", "dc", "dj", "dv", "ds", "dg"],
months: ["Gener", "Febrer", "Març", "Abril", "Maig", "Juny", "Juliol", "Agost", "Setembre", "Octubre", "Novembre", "Desembre"],
monthsShort: ["Gen", "Feb", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Oct", "Nov", "Des"],
today: "Avui"
};
}(jQuery));

View file

@ -1,15 +0,0 @@
/**
* Czech translation for bootstrap-datepicker
* Matěj Koubík <matej@koubik.name>
* Fixes by Michal Remiš <michal.remis@gmail.com>
*/
;(function($){
$.fn.datepicker.dates['cs'] = {
days: ["Neděle", "Pondělí", "Úterý", "Středa", "Čtvrtek", "Pátek", "Sobota", "Neděle"],
daysShort: ["Ned", "Pon", "Úte", "Stř", "Čtv", "Pát", "Sob", "Ned"],
daysMin: ["Ne", "Po", "Út", "St", "Čt", "Pá", "So", "Ne"],
months: ["Leden", "Únor", "Březen", "Duben", "Květen", "Červen", "Červenec", "Srpen", "Září", "Říjen", "Listopad", "Prosinec"],
monthsShort: ["Led", "Úno", "Bře", "Dub", "Kvě", "Čer", "Čnc", "Srp", "Zář", "Říj", "Lis", "Pro"],
today: "Dnes"
};
}(jQuery));

View file

@ -1,14 +0,0 @@
/**
* Danish translation for bootstrap-datepicker
* Christian Pedersen <http://github.com/chripede>
*/
;(function($){
$.fn.datepicker.dates['da'] = {
days: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag", "Søndag"],
daysShort: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør", "Søn"],
daysMin: ["Sø", "Ma", "Ti", "On", "To", "Fr", "Lø", "Sø"],
months: ["Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December"],
monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"],
today: "I Dag"
};
}(jQuery));

View file

@ -1,16 +0,0 @@
/**
* German translation for bootstrap-datepicker
* Sam Zurcher <sam@orelias.ch>
*/
;(function($){
$.fn.datepicker.dates['de'] = {
days: ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"],
daysShort: ["Son", "Mon", "Die", "Mit", "Don", "Fre", "Sam", "Son"],
daysMin: ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"],
months: ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"],
monthsShort: ["Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"],
today: "Heute",
weekStart: 1,
format: "dd.mm.yyyy"
};
}(jQuery));

View file

@ -1,13 +0,0 @@
/**
* Greek translation for bootstrap-datepicker
*/
;(function($){
$.fn.datepicker.dates['el'] = {
days: ["Κυριακή", "Δευτέρα", "Τρίτη", "Τετάρτη", "Πέμπτη", "Παρασκευή", "Σάββατο", "Κυριακή"],
daysShort: ["Κυρ", "Δευ", "Τρι", "Τετ", "Πεμ", "Παρ", "Σαβ", "Κυρ"],
daysMin: ["Κυ", "Δε", "Τρ", "Τε", "Πε", "Πα", "Σα", "Κυ"],
months: ["Ιανουάριος", "Φεβρουάριος", "Μάρτιος", "Απρίλιος", "Μάιος", "Ιούνιος", "Ιούλιος", "Αύγουστος", "Σεπτέμβριος", "Οκτώβριος", "Νοέμβριος", "Δεκέμβριος"],
monthsShort: ["Ιαν", "Φεβ", "Μαρ", "Απρ", "Μάι", "Ιουν", "Ιουλ", "Αυγ", "Σεπ", "Οκτ", "Νοε", "Δεκ"],
today: "Σήμερα"
};
}(jQuery));

View file

@ -1,14 +0,0 @@
/**
* Spanish translation for bootstrap-datepicker
* Bruno Bonamin <bruno.bonamin@gmail.com>
*/
;(function($){
$.fn.datepicker.dates['es'] = {
days: ["Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo"],
daysShort: ["Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb", "Dom"],
daysMin: ["Do", "Lu", "Ma", "Mi", "Ju", "Vi", "Sa", "Do"],
months: ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"],
monthsShort: ["Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic"],
today: "Hoy"
};
}(jQuery));

View file

@ -1,14 +0,0 @@
/**
* Finnish translation for bootstrap-datepicker
* Jaakko Salonen <https://github.com/jsalonen>
*/
;(function($){
$.fn.datepicker.dates['fi'] = {
days: ["sunnuntai", "maanantai", "tiistai", "keskiviikko", "torstai", "perjantai", "lauantai", "sunnuntai"],
daysShort: ["sun", "maa", "tii", "kes", "tor", "per", "lau", "sun"],
daysMin: ["su", "ma", "ti", "ke", "to", "pe", "la", "su"],
months: ["tammikuu", "helmikuu", "maaliskuu", "huhtikuu", "toukokuu", "kesäkuu", "heinäkuu", "elokuu", "syyskuu", "lokakuu", "marraskuu", "joulukuu"],
monthsShort: ["tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mar", "jou"],
today: "tänään"
};
}(jQuery));

View file

@ -1,16 +0,0 @@
/**
* French translation for bootstrap-datepicker
* Nico Mollet <nico.mollet@gmail.com>
*/
;(function($){
$.fn.datepicker.dates['fr'] = {
days: ["Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche"],
daysShort: ["Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim"],
daysMin: ["D", "L", "Ma", "Me", "J", "V", "S", "D"],
months: ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"],
monthsShort: ["Jan", "Fev", "Mar", "Avr", "Mai", "Jui", "Jul", "Aou", "Sep", "Oct", "Nov", "Dec"],
today: "Aujourd'hui",
weekStart: 1,
format: "dd/mm/yyyy"
};
}(jQuery));

View file

@ -1,15 +0,0 @@
/**
* Hebrew translation for bootstrap-datepicker
* Sagie Maoz <sagie@maoz.info>
*/
;(function($){
$.fn.datepicker.dates['he'] = {
days: ["ראשון", "שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת", "ראשון"],
daysShort: ["א", "ב", "ג", "ד", "ה", "ו", "ש", "א"],
daysMin: ["א", "ב", "ג", "ד", "ה", "ו", "ש", "א"],
months: ["ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני", "יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר"],
monthsShort: ["ינו", "פבר", "מרץ", "אפר", "מאי", "יונ", "יול", "אוג", "ספט", "אוק", "נוב", "דצמ"],
today: "היום",
rtl: true
};
}(jQuery));

View file

@ -1,13 +0,0 @@
/**
* Croatian localisation
*/
;(function($){
$.fn.datepicker.dates['hr'] = {
days: ["Nedjelja", "Ponedjelja", "Utorak", "Srijeda", "Četrtak", "Petak", "Subota", "Nedjelja"],
daysShort: ["Ned", "Pon", "Uto", "Srr", "Čet", "Pet", "Sub", "Ned"],
daysMin: ["Ne", "Po", "Ut", "Sr", "Če", "Pe", "Su", "Ne"],
months: ["Siječanj", "Veljača", "Ožujak", "Travanj", "Svibanj", "Lipanj", "Srpanj", "Kolovoz", "Rujan", "Listopad", "Studeni", "Prosinac"],
monthsShort: ["Sije", "Velj", "Ožu", "Tra", "Svi", "Lip", "Jul", "Kol", "Ruj", "Lis", "Stu", "Pro"],
today: "Danas"
};
}(jQuery));

View file

@ -1,16 +0,0 @@
/**
* Hungarian translation for bootstrap-datepicker
* Sotus László <lacisan@gmail.com>
*/
;(function($){
$.fn.datepicker.dates['hu'] = {
days: ["Vasárnap", "Hétfő", "Kedd", "Szerda", "Csütörtök", "Péntek", "Szombat", "Vasárnap"],
daysShort: ["Vas", "Hét", "Ked", "Sze", "Csü", "Pén", "Szo", "Vas"],
daysMin: ["Va", "Hé", "Ke", "Sz", "Cs", "Pé", "Sz", "Va"],
months: ["Január", "Február", "Március", "Április", "Május", "Június", "Július", "Augusztus", "Szeptember", "Október", "November", "December"],
monthsShort: ["Jan", "Feb", "Már", "Ápr", "Máj", "Jún", "Júl", "Aug", "Sze", "Okt", "Nov", "Dec"],
today: "Ma",
weekStart: 1,
format: "yyyy.mm.dd"
};
}(jQuery));

View file

@ -1,13 +0,0 @@
/**
* Bahasa translation for bootstrap-datepicker
* Azwar Akbar <azwar.akbar@gmail.com>
*/
;(function($){
$.fn.datepicker.dates['id'] = {
days: ["Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu", "Minggu"],
daysShort: ["Mgu", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab", "Mgu"],
daysMin: ["Mg", "Sn", "Sl", "Ra", "Ka", "Ju", "Sa", "Mg"],
months: ["Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"],
monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Ags", "Sep", "Okt", "Nov", "Des"]
};
}(jQuery));

View file

@ -1,14 +0,0 @@
/**
* Icelandic translation for bootstrap-datepicker
* Hinrik Örn Sigurðsson <hinrik.sig@gmail.com>
*/
;(function($){
$.fn.datepicker.dates['is'] = {
days: ["Sunnudagur", "Mánudagur", "Þriðjudagur", "Miðvikudagur", "Fimmtudagur", "Föstudagur", "Laugardagur", "Sunnudagur"],
daysShort: ["Sun", "Mán", "Þri", "Mið", "Fim", "Fös", "Lau", "Sun"],
daysMin: ["Su", "Má", "Þr", "Mi", "Fi", "Fö", "La", "Su"],
months: ["Janúar", "Febrúar", "Mars", "Apríl", "Maí", "Júní", "Júlí", "Ágúst", "September", "Október", "Nóvember", "Desember"],
monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maí", "Jún", "Júl", "Ágú", "Sep", "Okt", "Nóv", "Des"],
today: "Í Dag"
};
}(jQuery));

View file

@ -1,16 +0,0 @@
/**
* Italian translation for bootstrap-datepicker
* Enrico Rubboli <rubboli@gmail.com>
*/
;(function($){
$.fn.datepicker.dates['it'] = {
days: ["Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato", "Domenica"],
daysShort: ["Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab", "Dom"],
daysMin: ["Do", "Lu", "Ma", "Me", "Gi", "Ve", "Sa", "Do"],
months: ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"],
monthsShort: ["Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic"],
today: "Oggi",
weekStart: 1,
format: "dd/mm/yyyy"
};
}(jQuery));

View file

@ -1,15 +0,0 @@
/**
* Japanese translation for bootstrap-datepicker
* Norio Suzuki <https://github.com/suzuki/>
*/
;(function($){
$.fn.datepicker.dates['ja'] = {
days: ["日曜", "月曜", "火曜", "水曜", "木曜", "金曜", "土曜", "日曜"],
daysShort: ["日", "月", "火", "水", "木", "金", "土", "日"],
daysMin: ["日", "月", "火", "水", "木", "金", "土", "日"],
months: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"],
monthsShort: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"],
today: "今日",
format: "yyyy/mm/dd"
};
}(jQuery));

View file

@ -1,13 +0,0 @@
/**
* Korean translation for bootstrap-datepicker
* Gu Youn <http://github.com/guyoun>
*/
;(function($){
$.fn.datepicker.dates['kr'] = {
days: ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일", "일요일"],
daysShort: ["일", "월", "화", "수", "목", "금", "토", "일"],
daysMin: ["일", "월", "화", "수", "목", "금", "토", "일"],
months: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"],
monthsShort: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"]
};
}(jQuery));

View file

@ -1,16 +0,0 @@
/**
* Lithuanian translation for bootstrap-datepicker
* Šarūnas Gliebus <ssharunas@yahoo.co.uk>
*/
;(function($){
$.fn.datepicker.dates['lt'] = {
days: ["Sekmadienis", "Pirmadienis", "Antradienis", "Trečiadienis", "Ketvirtadienis", "Penktadienis", "Šeštadienis", "Sekmadienis"],
daysShort: ["S", "Pr", "A", "T", "K", "Pn", "Š", "S"],
daysMin: ["Sk", "Pr", "An", "Tr", "Ke", "Pn", "Št", "Sk"],
months: ["Sausis", "Vasaris", "Kovas", "Balandis", "Gegužė", "Birželis", "Liepa", "Rugpjūtis", "Rugsėjis", "Spalis", "Lapkritis", "Gruodis"],
monthsShort: ["Sau", "Vas", "Kov", "Bal", "Geg", "Bir", "Lie", "Rugp", "Rugs", "Spa", "Lap", "Gru"],
today: "Šiandien",
weekStart: 1
};
}(jQuery));

View file

@ -1,16 +0,0 @@
/**
* Latvian translation for bootstrap-datepicker
* Artis Avotins <artis@apit.lv>
*/
;(function($){
$.fn.datepicker.dates['lv'] = {
days: ["Svētdiena", "Pirmdiena", "Otrdiena", "Trešdiena", "Ceturtdiena", "Piektdiena", "Sestdiena", "Svētdiena"],
daysShort: ["Sv", "P", "O", "T", "C", "Pk", "S", "Sv"],
daysMin: ["Sv", "Pr", "Ot", "Tr", "Ce", "Pk", "St", "Sv"],
months: ["Janvāris", "Februāris", "Marts", "Aprīlis", "Maijs", "Jūnijs", "Jūlijs", "Augusts", "Septembris", "Oktobris", "Novembris", "Decembris"],
monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jūn", "Jūl", "Aug", "Sep", "Okt", "Nov", "Dec."],
today: "Šodien",
weekStart: 1
};
}(jQuery));

View file

@ -1,14 +0,0 @@
/**
* Malay translation for bootstrap-datepicker
* Ateman Faiz <noorulfaiz@gmail.com>
*/
;(function($){
$.fn.datepicker.dates['ms'] = {
days: ["Ahad", "Isnin", "Selasa", "Rabu", "Khamis", "Jumaat", "Sabtu", "Ahad"],
daysShort: ["Aha", "Isn", "Sel", "Rab", "Kha", "Jum", "Sab", "Aha"],
daysMin: ["Ah", "Is", "Se", "Ra", "Kh", "Ju", "Sa", "Ah"],
months: ["Januari", "Februari", "Mac", "April", "Mei", "Jun", "Julai", "Ogos", "September", "Oktober", "November", "Disember"],
monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Ogo", "Sep", "Okt", "Nov", "Dis"],
today: "Hari Ini"
};
}(jQuery));

View file

@ -1,14 +0,0 @@
/**
* Norwegian (bokmål) translation for bootstrap-datepicker
* Fredrik Sundmyhr <http://github.com/fsundmyhr>
*/
;(function($){
$.fn.datepicker.dates['nb'] = {
days: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag", "Søndag"],
daysShort: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør", "Søn"],
daysMin: ["Sø", "Ma", "Ti", "On", "To", "Fr", "Lø", "Sø"],
months: ["Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"],
monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Des"],
today: "I Dag"
};
}(jQuery));

View file

@ -1,14 +0,0 @@
/**
* Dutch translation for bootstrap-datepicker
* Reinier Goltstein <mrgoltstein@gmail.com>
*/
;(function($){
$.fn.datepicker.dates['nl'] = {
days: ["Zondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag", "Zaterdag", "Zondag"],
daysShort: ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za", "Zo"],
daysMin: ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za", "Zo"],
months: ["Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December"],
monthsShort: ["Jan", "Feb", "Mrt", "Apr", "Mei", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"],
today: "Vandaag"
};
}(jQuery));

View file

@ -1,15 +0,0 @@
/**
* Polish translation for bootstrap-datepicker
* Robert <rtpm@gazeta.pl>
*/
;(function($){
$.fn.datepicker.dates['pl'] = {
days: ["Niedziela", "Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota", "Niedziela"],
daysShort: ["Nie", "Pn", "Wt", "Śr", "Czw", "Pt", "So", "Nie"],
daysMin: ["N", "Pn", "Wt", "Śr", "Cz", "Pt", "So", "N"],
months: ["Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec", "Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"],
monthsShort: ["Sty", "Lu", "Mar", "Kw", "Maj", "Cze", "Lip", "Sie", "Wrz", "Pa", "Lis", "Gru"],
today: "Dzisiaj",
weekStart: 1
};
}(jQuery));

View file

@ -1,14 +0,0 @@
/**
* Brazilian translation for bootstrap-datepicker
* Cauan Cabral <cauan@radig.com.br>
*/
;(function($){
$.fn.datepicker.dates['pt-BR'] = {
days: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado", "Domingo"],
daysShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb", "Dom"],
daysMin: ["Do", "Se", "Te", "Qu", "Qu", "Se", "Sa", "Do"],
months: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"],
monthsShort: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"],
today: "Hoje"
};
}(jQuery));

View file

@ -1,14 +0,0 @@
/**
* Portuguese translation for bootstrap-datepicker
* Original code: Cauan Cabral <cauan@radig.com.br>
* Tiago Melo <tiago.blackcode@gmail.com>
*/
;(function($){
$.fn.datepicker.dates['pt'] = {
days: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado", "Domingo"],
daysShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb", "Dom"],
daysMin: ["Do", "Se", "Te", "Qu", "Qu", "Se", "Sa", "Do"],
months: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"],
monthsShort: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"]
};
}(jQuery));

View file

@ -1,15 +0,0 @@
/**
* Romanian translation for bootstrap-datepicker
* Cristian Vasile <cristi.mie@gmail.com>
*/
;(function($){
$.fn.datepicker.dates['ro'] = {
days: ["Duminică", "Luni", "Marţi", "Miercuri", "Joi", "Vineri", "Sâmbătă", "Duminică"],
daysShort: ["Dum", "Lun", "Mar", "Mie", "Joi", "Vin", "Sâm", "Dum"],
daysMin: ["Du", "Lu", "Ma", "Mi", "Jo", "Vi", "Sâ", "Du"],
months: ["Ianuarie", "Februarie", "Martie", "Aprilie", "Mai", "Iunie", "Iulie", "August", "Septembrie", "Octombrie", "Noiembrie", "Decembrie"],
monthsShort: ["Ian", "Feb", "Mar", "Apr", "Mai", "Iun", "Iul", "Aug", "Sep", "Oct", "Nov", "Dec"],
today: "Astăzi",
weekStart: 1
};
}(jQuery));

View file

@ -1,14 +0,0 @@
/**
* Serbian latin translation for bootstrap-datepicker
* Bojan Milosavlević <milboj@gmail.com>
*/
;(function($){
$.fn.datepicker.dates['rs'] = {
days: ["Nedelja","Ponedeljak", "Utorak", "Sreda", "Četvrtak", "Petak", "Subota", "Nedelja"],
daysShort: ["Ned", "Pon", "Uto", "Sre", "Čet", "Pet", "Sub", "Ned"],
daysMin: ["N", "Po", "U", "Sr", "Č", "Pe", "Su", "N"],
months: ["Januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar"],
monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Avg", "Sep", "Okt", "Nov", "Dec"],
today: "Danas"
};
}(jQuery));

View file

@ -1,14 +0,0 @@
/**
* Serbian cyrillic translation for bootstrap-datepicker
* Bojan Milosavlević <milboj@gmail.com>
*/
;(function($){
$.fn.datepicker.dates['rs'] = {
days: ["Недеља","Понедељак", "Уторак", "Среда", "Четвртак", "Петак", "Субота", "Недеља"],
daysShort: ["Нед", "Пон", "Уто", "Сре", "Чет", "Пет", "Суб", "Нед"],
daysMin: ["Н", "По", "У", "Ср", "Ч", "Пе", "Су", "Н"],
months: ["Јануар", "Фебруар", "Март", "Април", "Мај", "Јун", "Јул", "Август", "Септембар", "Октобар", "Новембар", "Децембар"],
monthsShort: ["Јан", "Феб", "Мар", "Апр", "Мај", "Јун", "Јул", "Авг", "Сеп", "Окт", "Нов", "Дец"],
today: "Данас"
};
}(jQuery));

View file

@ -1,14 +0,0 @@
/**
* Russian translation for bootstrap-datepicker
* Victor Taranenko <darwin@snowdale.com>
*/
;(function($){
$.fn.datepicker.dates['ru'] = {
days: ["Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"],
daysShort: ["Вск", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Суб", "Вск"],
daysMin: ["Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс"],
months: ["Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"],
monthsShort: ["Янв", "Фев", "Мар", "Апр", "Май", "Июн", "Июл", "Авг", "Сен", "Окт", "Ноя", "Дек"],
today: "Сегодня"
};
}(jQuery));

View file

@ -1,15 +0,0 @@
/**
* Slovak translation for bootstrap-datepicker
* Marek Lichtner <marek@licht.sk>
* Fixes by Michal Remiš <michal.remis@gmail.com>
*/
;(function($){
$.fn.datepicker.dates["sk"] = {
days: ["Nedeľa", "Pondelok", "Utorok", "Streda", "Štvrtok", "Piatok", "Sobota", "Nedeľa"],
daysShort: ["Ned", "Pon", "Uto", "Str", "Štv", "Pia", "Sob", "Ned"],
daysMin: ["Ne", "Po", "Ut", "St", "Št", "Pia", "So", "Ne"],
months: ["Január", "Február", "Marec", "Apríl", "Máj", "Jún", "Júl", "August", "September", "Október", "November", "December"],
monthsShort: ["Jan", "Feb", "Mar", "Apr", "Máj", "Jún", "Júl", "Aug", "Sep", "Okt", "Nov", "Dec"],
today: "Dnes"
};
}(jQuery));

View file

@ -1,14 +0,0 @@
/**
* Slovene translation for bootstrap-datepicker
* Gregor Rudolf <gregor.rudolf@gmail.com>
*/
;(function($){
$.fn.datepicker.dates['sl'] = {
days: ["Nedelja", "Ponedeljek", "Torek", "Sreda", "Četrtek", "Petek", "Sobota", "Nedelja"],
daysShort: ["Ned", "Pon", "Tor", "Sre", "Čet", "Pet", "Sob", "Ned"],
daysMin: ["Ne", "Po", "To", "Sr", "Če", "Pe", "So", "Ne"],
months: ["Januar", "Februar", "Marec", "April", "Maj", "Junij", "Julij", "Avgust", "September", "Oktober", "November", "December"],
monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Avg", "Sep", "Okt", "Nov", "Dec"],
today: "Danes"
};
}(jQuery));

View file

@ -1,14 +0,0 @@
/**
* Swedish translation for bootstrap-datepicker
* Patrik Ragnarsson <patrik@starkast.net>
*/
;(function($){
$.fn.datepicker.dates['sv'] = {
days: ["Söndag", "Måndag", "Tisdag", "Onsdag", "Torsdag", "Fredag", "Lördag", "Söndag"],
daysShort: ["Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör", "Sön"],
daysMin: ["Sö", "Må", "Ti", "On", "To", "Fr", "Lö", "Sö"],
months: ["Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December"],
monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"],
today: "I Dag"
};
}(jQuery));

View file

@ -1,15 +0,0 @@
/**
* Swahili translation for bootstrap-datepicker
* Edwin Mugendi <https://github.com/edwinmugendi>
* Source: http://scriptsource.org/cms/scripts/page.php?item_id=entry_detail&uid=xnfaqyzcku
*/
;(function($){
$.fn.datepicker.dates['sw'] = {
days: ["Jumapili", "Jumatatu", "Jumanne", "Jumatano", "Alhamisi", "Ijumaa", "Jumamosi", "Jumapili"],
daysShort: ["J2", "J3", "J4", "J5", "Alh", "Ij", "J1", "J2"],
daysMin: ["2", "3", "4", "5", "A", "I", "1", "2"],
months: ["Januari", "Februari", "Machi", "Aprili", "Mei", "Juni", "Julai", "Agosti", "Septemba", "Oktoba", "Novemba", "Desemba"],
monthsShort: ["Jan", "Feb", "Mac", "Apr", "Mei", "Jun", "Jul", "Ago", "Sep", "Okt", "Nov", "Des"],
today: "Leo"
};
}(jQuery));

View file

@ -1,14 +0,0 @@
/**
* Thai translation for bootstrap-datepicker
* Suchau Jiraprapot <seroz24@gmail.com>
*/
;(function($){
$.fn.datepicker.dates['th'] = {
days: ["อาทิตย์", "จันทร์", "อังคาร", "พุธ", "พฤหัส", "ศุกร์", "เสาร์", "อาทิตย์"],
daysShort: ["อา", "จ", "อ", "พ", "พฤ", "ศ", "ส", "อา"],
daysMin: ["อา", "จ", "อ", "พ", "พฤ", "ศ", "ส", "อา"],
months: ["มกราคม", "กุมภาพันธ์", "มีนาคม", "เมษายน", "พฤษภาคม", "มิถุนายน", "กรกฎาคม", "สิงหาคม", "กันยายน", "ตุลาคม", "พฤศจิกายน", "ธันวาคม"],
monthsShort: ["ม.ค.", "ก.พ.", "มี.ค.", "เม.ย.", "พ.ค.", "มิ.ย.", "ก.ค.", "ส.ค.", "ก.ย.", "ต.ค.", "พ.ย.", "ธ.ค."],
today: "วันนี้"
};
}(jQuery));

View file

@ -1,15 +0,0 @@
/**
* Turkish translation for bootstrap-datepicker
* Serkan Algur <kaisercrazy_2@hotmail.com>
*/
;(function($){
$.fn.datepicker.dates['tr'] = {
days: ["Pazar", "Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi", "Pazar"],
daysShort: ["Pz", "Pzt", "Sal", "Çrş", "Prş", "Cu", "Cts", "Pz"],
daysMin: ["Pz", "Pzt", "Sa", "Çr", "Pr", "Cu", "Ct", "Pz"],
months: ["Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık"],
monthsShort: ["Oca", "Şub", "Mar", "Nis", "May", "Haz", "Tem", "Ağu", "Eyl", "Eki", "Kas", "Ara"],
today: "Bugün"
};
}(jQuery));

View file

@ -1,14 +0,0 @@
/**
* Ukrainian translation for bootstrap-datepicker
* Andrey Vityuk <andrey [dot] vityuk [at] gmail.com>
*/
;(function($){
$.fn.datepicker.dates['uk'] = {
days: ["Неділя", "Понеділок", "Вівторок", "Середа", "Четвер", "П'ятниця", "Субота", "Неділя"],
daysShort: ["Нед", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Суб", "Нед"],
daysMin: ["Нд", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Нд"],
months: ["Січень", "Лютий", "Березень", "Квітень", "Травень", "Червень", "Липень", "Серпень", "Вересень", "Жовтень", "Листопад", "Грудень"],
monthsShort: ["Січ", "Лют", "Бер", "Кві", "Тра", "Чер", "Лип", "Сер", "Вер", "Жов", "Лис", "Гру"],
today: "Сьогодні"
};
}(jQuery));

View file

@ -1,14 +0,0 @@
/**
* Simplified Chinese translation for bootstrap-datepicker
* Yuan Cheung <advanimal@gmail.com>
*/
;(function($){
$.fn.datepicker.dates['zh-CN'] = {
days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"],
daysShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六", "周日"],
daysMin: ["日", "一", "二", "三", "四", "五", "六", "日"],
months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
monthsShort: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
today: "今日"
};
}(jQuery));

View file

@ -1,13 +0,0 @@
/**
* Traditional Chinese translation for bootstrap-datepicker
* Rung-Sheng Jang <daniel@i-trend.co.cc>
*/
;(function($){
$.fn.datepicker.dates['zh-TW'] = {
days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"],
daysShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六", "周日"],
daysMin: ["日", "一", "二", "三", "四", "五", "六", "日"],
months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
monthsShort: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"]
};
}(jQuery));

View file

@ -1,181 +0,0 @@
/*!
* Datepicker for Bootstrap
*
* Copyright 2012 Stefan Petre
* Improvements by Andrew Rowls
* Licensed under the Apache License v2.0
* http://www.apache.org/licenses/LICENSE-2.0
*
*/
.datepicker {
padding: 4px;
margin-top: 1px;
.border-radius(4px);
&-inline {
width: 220px;
}
direction: ltr;
&&-rtl {
direction: rtl;
table tr td span {
float: right;
}
}
&-dropdown {
top: 0;
left: 0;
&:before {
content: '';
display: inline-block;
border-left: 7px solid transparent;
border-right: 7px solid transparent;
border-bottom: 7px solid #ccc;
border-bottom-color: rgba(0,0,0,.2);
position: absolute;
top: -7px;
left: 6px;
}
&:after {
content: '';
display: inline-block;
border-left: 6px solid transparent;
border-right: 6px solid transparent;
border-bottom: 6px solid @white;
position: absolute;
top: -6px;
left: 7px;
}
}
>div {
display: none;
}
&.days div.datepicker-days {
display: block;
}
&.months div.datepicker-months {
display: block;
}
&.years div.datepicker-years {
display: block;
}
table{
margin: 0;
}
td,
th{
text-align: center;
width: 20px;
height: 20px;
.border-radius(4px);
border: none;
}
// Inline display inside a table presents some problems with
// border and background colors.
.table-striped & table tr {
td, th {
background-color:transparent;
}
}
table tr td {
&.day:hover {
background: @grayLighter;
cursor: pointer;
}
&.old,
&.new {
color: @grayLight;
}
&.disabled,
&.disabled:hover {
background: none;
color: @grayLight;
cursor: default;
}
&.today,
&.today:hover,
&.today.disabled,
&.today.disabled:hover {
@todayBackground: lighten(@orange, 30%);
.buttonBackground(@todayBackground, spin(@todayBackground, 20));
color: #000 !important;
}
&.active,
&.active:hover,
&.active.disabled,
&.active.disabled:hover {
.buttonBackground(@btnPrimaryBackground, spin(@btnPrimaryBackground, 20));
color: #fff;
text-shadow: 0 -1px 0 rgba(0,0,0,.25);
}
span {
display: block;
width: 23%;
height: 54px;
line-height: 54px;
float: left;
margin: 1%;
cursor: pointer;
.border-radius(4px);
&:hover {
background: @grayLighter;
}
&.disabled,
&.disabled:hover {
background:none;
color: @grayLight;
cursor: default;
}
&.active,
&.active:hover,
&.active.disabled,
&.active.disabled:hover {
.buttonBackground(@btnPrimaryBackground, spin(@btnPrimaryBackground, 20));
color: #fff;
text-shadow: 0 -1px 0 rgba(0,0,0,.25);
}
&.old {
color: @grayLight;
}
}
}
th.switch {
width: 145px;
}
thead tr:first-child th,
tfoot tr:first-child th {
cursor: pointer;
&:hover{
background: @grayLighter;
}
}
/*.dow {
border-top: 1px solid #ddd !important;
}*/
// Basic styling for calendar-week cells
.cw {
font-size: 10px;
width: 12px;
padding: 0 2px 0 5px;
vertical-align: middle;
}
thead tr:first-child th.cw {
cursor: default;
background-color: transparent;
}
}
.input-append,
.input-prepend {
&.date {
.add-on i {
display: block;
cursor: pointer;
width: 16px;
height: 16px;
}
}
}

View file

@ -1,55 +0,0 @@
Unit tests, written with [QUnit](http://docs.jquery.com/QUnit), are used to
expose bugs for squashing, prevent bugs from respawning, and suppress new
bugs when adding new features and making changes.
# Running the tests
The simplest way to run the tests is to open `tests/tests.html` in your browser.
The test suites will automatically run themselves and present their results.
To run the tests from the command line, download and install
[PhantomJS](http://phantomjs.org/), and run `run-qunit.js` with it:
$ cd tests/
$ phantomjs run-qunit.js tests.html
Failed tests and their failed assertions will be printed to the console. A
results summary will be printed at the end.
To generate coverage statistics, use [JSCoverage](http://siliconforks.com/jscoverage/)
to instrument the js files:
$ cd tests/
$ jscoverage ../js/ ../instrumented/
$ phantomjs run-qunit.js tests.html
Coverage percentage will be included in the output summary, and a highlighted
line-by-line html file will be generated.
# Shout-out
Thanks to Rod @ While One Fork for the
[CIS guide](http://whileonefork.blogspot.com/2011/10/integrating-javascript-tests-into-cli.html)
on putting the above together.
# Adding tests
Tests go in js files in the `tests/suites/` directory tree. QUnit organizes
tests into suites called "modules"; there is one module per js file. If the
tests you are adding do not fit into an existing module, create a new one at
`tests/suites/<new module>.js`, where `<new module>` is a broad yet
descriptive name for the suite. If tests have many year-specific cases (ie,
behave differently in leap years vs normal years, or have specific buggy
behavior in a certain year), create the module in a new directory,
`tests/suites/<new module>/<year>.js`, where `<new module>` is the decriptive
name and `<year>` is the four-digit year the tests pertain to.
In order for new tests to be run, they must be imported into `tests/tests.html`.
Find the script includes headed by the html comment `<!-- Test suites -->`, and
add a new one to the list which includes the new js files.
# Can I use this?
By all means, please do! Just note that I stopped working on this structure
once it fit my needs, there's no real support for it, and it may change in the
future. Otherwise, have at it.

View file

@ -1,26 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<style>
.code {
white-space: pre-wrap;
font-family: monospace;
width: 100%;
}
.miss {
background-color: #FF0000;
}
.hit, .undef {
background-color: #94FF7C;
}
</style>
</head>
<body>
COLORIZED_LINE_HTML
</body>
</html>

View file

@ -1,48 +0,0 @@
(function(){
//we want this at global scope so outside callers can find it. In a more realistic implementation we
//should probably put it in a namespace.
window.getCoverageByLine = function(silent) {
var key = null;
var lines = null;
var source = null;
//look for code coverage data
if (typeof window._$jscoverage === 'object') {
for (key in _$jscoverage) {}
lines = _$jscoverage[key];
}
if (!lines && !silent) {
console.log('code coverage data is NOT available');
}
return { 'key': key, 'lines': lines };
};
QUnit.done = function(t) {
var cvgInfo = getCoverageByLine(true);
if (!!cvgInfo.key) {
var testableLines = 0;
var testedLines = 0;
var untestableLines = 0;
for (lineIdx in cvgInfo.lines) {
var cvg = cvgInfo.lines[lineIdx];
if (typeof cvg === 'number') {
testableLines += 1;
if (cvg > 0) {
testedLines += 1;
}
} else {
untestableLines += 1;
}
}
var coverage = '' + Math.floor(100 * testedLines / testableLines) + '%';
var result = document.getElementById('qunit-testresult');
if (result != null) {
result.innerHTML = result.innerHTML + ' ' + coverage + ' test coverage of ' + cvgInfo.key;
} else {
console.log('can\'t find test-result element to update');
}
}
};
}());

File diff suppressed because one or more lines are too long

View file

@ -1,26 +0,0 @@
;(function(){
window.patch_date = function patch(f){
var NativeDate = window.Date;
var date = function date(y,m,d,h,i,s,j){
switch(arguments.length){
case 0: return date.now ? new NativeDate(date.now) : new NativeDate();
case 1: return new NativeDate(y);
case 2: return new NativeDate(y,m);
case 3: return new NativeDate(y,m,d);
case 4: return new NativeDate(y,m,d,h);
case 5: return new NativeDate(y,m,d,h,i);
case 6: return new NativeDate(y,m,d,h,i,s);
case 7: return new NativeDate(y,y,m,d,h,i,s,j);
}
};
date.UTC = NativeDate.UTC;
return function(){
Array.prototype.push.call(arguments, date);
window.Date = date;
res = f.apply(this, arguments);
window.Date = NativeDate;
}
}
}());

View file

@ -1,29 +0,0 @@
// Dummy logging calls (ie, if tests are run in IE)
window.console = window.console || {};
window.console.log = window.console.log || function(){};
window.console.debug = window.console.debug || function(){};
window.console.info = window.console.info || function(){};
window.console.warn = window.console.warn || function(){};
window.console.error = window.console.error || function(){};
(function() {
var modName, testName;
//arg: { name }
QUnit.testStart = function(t) {
modName = t.module;
testName = t.name;
};
//arg: { name, failed, passed, total }
QUnit.testDone = function(t) {
if (t.failed)
console.log('Test "' + t.module + ': ' + t.name + '" completed: ' + (0 === t.failed ? 'pass' : 'FAIL') + '\n')
};
//{ result, actual, expected, message }
QUnit.log = function(t) {
if (!t.result)
console.log('Test "' + modName + ': ' + testName + '" assertion failed. Expected <' + t.expected + '> Actual <' + t.actual + '>' + (t.message ? ': \'' + t.message + '\'' : ''));
};
}());

View file

@ -1,235 +0,0 @@
/**
* QUnit v1.5.0 - A JavaScript Unit Testing Framework
*
* http://docs.jquery.com/QUnit
*
* Copyright (c) 2012 John Resig, Jörn Zaefferer
* Dual licensed under the MIT (MIT-LICENSE.txt)
* or GPL (GPL-LICENSE.txt) licenses.
*/
/** Font Family and Sizes */
#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult {
font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif;
}
#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }
#qunit-tests { font-size: smaller; }
/** Resets */
#qunit-tests, #qunit-tests ol, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult {
margin: 0;
padding: 0;
}
/** Header */
#qunit-header {
padding: 0.5em 0 0.5em 1em;
color: #8699a4;
background-color: #0d3349;
font-size: 1.5em;
line-height: 1em;
font-weight: normal;
border-radius: 15px 15px 0 0;
-moz-border-radius: 15px 15px 0 0;
-webkit-border-top-right-radius: 15px;
-webkit-border-top-left-radius: 15px;
}
#qunit-header a {
text-decoration: none;
color: #c2ccd1;
}
#qunit-header a:hover,
#qunit-header a:focus {
color: #fff;
}
#qunit-header label {
display: inline-block;
}
#qunit-banner {
height: 5px;
}
#qunit-testrunner-toolbar {
padding: 0.5em 0 0.5em 2em;
color: #5E740B;
background-color: #eee;
}
#qunit-userAgent {
padding: 0.5em 0 0.5em 2.5em;
background-color: #2b81af;
color: #fff;
text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
}
/** Tests: Pass/Fail */
#qunit-tests {
list-style-position: inside;
}
#qunit-tests li {
padding: 0.4em 0.5em 0.4em 2.5em;
border-bottom: 1px solid #fff;
list-style-position: inside;
}
#qunit-tests.hidepass li.pass, #qunit-tests.hidepass li.running {
display: none;
}
#qunit-tests li strong {
cursor: pointer;
}
#qunit-tests li a {
padding: 0.5em;
color: #c2ccd1;
text-decoration: none;
}
#qunit-tests li a:hover,
#qunit-tests li a:focus {
color: #000;
}
#qunit-tests ol {
margin-top: 0.5em;
padding: 0.5em;
background-color: #fff;
border-radius: 15px;
-moz-border-radius: 15px;
-webkit-border-radius: 15px;
box-shadow: inset 0px 2px 13px #999;
-moz-box-shadow: inset 0px 2px 13px #999;
-webkit-box-shadow: inset 0px 2px 13px #999;
}
#qunit-tests table {
border-collapse: collapse;
margin-top: .2em;
}
#qunit-tests th {
text-align: right;
vertical-align: top;
padding: 0 .5em 0 0;
}
#qunit-tests td {
vertical-align: top;
}
#qunit-tests pre {
margin: 0;
white-space: pre-wrap;
word-wrap: break-word;
}
#qunit-tests del {
background-color: #e0f2be;
color: #374e0c;
text-decoration: none;
}
#qunit-tests ins {
background-color: #ffcaca;
color: #500;
text-decoration: none;
}
/*** Test Counts */
#qunit-tests b.counts { color: black; }
#qunit-tests b.passed { color: #5E740B; }
#qunit-tests b.failed { color: #710909; }
#qunit-tests li li {
margin: 0.5em;
padding: 0.4em 0.5em 0.4em 0.5em;
background-color: #fff;
border-bottom: none;
list-style-position: inside;
}
/*** Passing Styles */
#qunit-tests li li.pass {
color: #5E740B;
background-color: #fff;
border-left: 26px solid #C6E746;
}
#qunit-tests .pass { color: #528CE0; background-color: #D2E0E6; }
#qunit-tests .pass .test-name { color: #366097; }
#qunit-tests .pass .test-actual,
#qunit-tests .pass .test-expected { color: #999999; }
#qunit-banner.qunit-pass { background-color: #C6E746; }
/*** Failing Styles */
#qunit-tests li li.fail {
color: #710909;
background-color: #fff;
border-left: 26px solid #EE5757;
white-space: pre;
}
#qunit-tests > li:last-child {
border-radius: 0 0 15px 15px;
-moz-border-radius: 0 0 15px 15px;
-webkit-border-bottom-right-radius: 15px;
-webkit-border-bottom-left-radius: 15px;
}
#qunit-tests .fail { color: #000000; background-color: #EE5757; }
#qunit-tests .fail .test-name,
#qunit-tests .fail .module-name { color: #000000; }
#qunit-tests .fail .test-actual { color: #EE5757; }
#qunit-tests .fail .test-expected { color: green; }
#qunit-banner.qunit-fail { background-color: #EE5757; }
/** Result */
#qunit-testresult {
padding: 0.5em 0.5em 0.5em 2.5em;
color: #2b81af;
background-color: #D2E0E6;
border-bottom: 1px solid white;
}
#qunit-testresult .module-name {
font-weight: bold;
}
/** Fixture */
#qunit-fixture {
position: absolute;
top: -10000px;
left: -10000px;
width: 1000px;
height: 1000px;
}

File diff suppressed because it is too large Load diff

View file

@ -1,21 +0,0 @@
function UTCDate(){
return new Date(Date.UTC.apply(Date, arguments));
}
function format_date(date){
var y = date.getUTCFullYear(),
m = date.getUTCMonth() + 1,
d = date.getUTCDate(),
h = date.getUTCHours(),
i = date.getUTCMinutes(),
s = date.getUTCSeconds(),
l = date.getUTCMilliseconds();
function z(i){return (i <= 9 ? '0'+i : i);}
return y+'-'+z(m)+'-'+z(d)+' '+z(h)+':'+z(i)+':'+z(s)+'.'+z(l);
}
function datesEqual(actual, expected, message){
QUnit.push(QUnit.equiv(actual, expected), format_date(actual), format_date(expected), message);
}

View file

@ -1,157 +0,0 @@
var system = require('system');
/**
* Wait until the test condition is true or a timeout occurs. Useful for waiting
* on a server response or for a ui change (fadeIn, etc.) to occur.
*
* @param testFx javascript condition that evaluates to a boolean,
* it can be passed in as a string (e.g.: "1 == 1" or "$('#bar').is(':visible')" or
* as a callback function.
* @param onReady what to do when testFx condition is fulfilled,
* it can be passed in as a string (e.g.: "1 == 1" or "$('#bar').is(':visible')" or
* as a callback function.
* @param timeOutMillis the max amount of time to wait. If not specified, 3 sec is used.
*/
function waitFor(testFx, onReady, timeOutMillis) {
var maxtimeOutMillis = timeOutMillis ? timeOutMillis : 10001, //< Default Max Timout is 3s
start = new Date().getTime(),
condition = false,
interval = setInterval(function() {
if ( (new Date().getTime() - start < maxtimeOutMillis) && !condition ) {
// If not time-out yet and condition not yet fulfilled
condition = (typeof(testFx) === "string" ? eval(testFx) : testFx()); //< defensive code
} else {
if(!condition) {
// If condition still not fulfilled (timeout but condition is 'false')
console.log("'waitFor()' timeout");
phantom.exit(1);
} else {
// Condition fulfilled (timeout and/or condition is 'true')
//console.log("'waitFor()' finished in " + (new Date().getTime() - start) + "ms.");
typeof(onReady) === "string" ? eval(onReady) : onReady(); //< Do what it's supposed to do once the condition is fulfilled
clearInterval(interval); //< Stop this interval
}
}
}, 100); //< repeat check every 100ms
};
if (system.args.length !== 2) {
console.log('Usage: run-qunit.js URL');
phantom.exit(1);
}
var fs = require('fs');
var page = require('webpage').create();
// Route "console.log()" calls from within the Page context to the main Phantom context (i.e. current "this")
page.onConsoleMessage = function(msg) {
console.log(msg);
};
page.onError = function (msg, trace) {
console.log(msg);
trace.forEach(function(item) {
console.log(' ', item.file, ':', item.line);
})
}
var _openPath = phantom.args[0].replace(/^.*(\\|\/)/, '');
var openPath = _openPath;
var origdir = '../js/';
var basedir = '../instrumented/';
var coverageBase = fs.read('_coverage.html');
if (fs.exists(basedir)){
var script = /<script.*><\/script>/g,
src = /src=(["'])(.*?)\1/,
contents = fs.read(openPath),
_contents = contents,
srcs = [],
s;
while (script.exec(contents)){
s = src.exec(RegExp.lastMatch)[2];
if (s && s.indexOf(origdir) != -1)
_contents = _contents.replace(s, s.replace(origdir, basedir))
}
if (_contents != contents){
openPath += '.cov.html';
fs.write(openPath, _contents);
}
}
page.open(openPath, function(status){
if (status !== "success") {
console.log("Unable to access network");
phantom.exit(1);
} else {
// Inject instrumented sources if they exist
if (fs.exists(basedir))
for (var i=0; i<srcs.length; i++)
page.includeJs(srcs[i]);
waitFor(function(){
return page.evaluate(function(){
var el = document.getElementById('qunit-testresult');
if (el && el.innerText.match('completed')) {
return true;
}
return false;
});
}, function(){
// output colorized code coverage
// reach into page context and pull out coverage info. stringify to pass context boundaries.
var coverageInfo = JSON.parse(page.evaluate(function() { return JSON.stringify(getCoverageByLine()); }));
if (coverageInfo.key){
var lineCoverage = coverageInfo.lines;
var originalFile = origdir + fs.separator + coverageInfo.key;
var source = coverageInfo.source;
var fileLines = readFileLines(originalFile);
var colorized = '';
for (var idx=0; idx < lineCoverage.length; idx++) {
//+1: coverage lines count from 1.
var cvg = lineCoverage[idx + 1];
var hitmiss = '';
if (typeof cvg === 'number') {
hitmiss = ' ' + (cvg>0 ? 'hit' : 'miss');
} else {
hitmiss = ' ' + 'undef';
}
var htmlLine = fileLines[idx]
if (!source)
htmlLine = htmlLine.replace('<', '&lt;').replace('>', '&gt;');
colorized += '<div class="code' + hitmiss + '">' + htmlLine + '</div>\n';
};
colorized = coverageBase.replace('COLORIZED_LINE_HTML', colorized);
fs.write('coverage.html', colorized, 'w');
console.log('Coverage for ' + coverageInfo.key + ' in coverage.html');
}
if (_openPath != openPath)
fs.remove(openPath);
var failedNum = page.evaluate(function(){
var el = document.getElementById('qunit-testresult');
console.log(el.innerText);
try {
return el.getElementsByClassName('failed')[0].innerHTML;
} catch (e) { }
return 10000;
});
phantom.exit((parseInt(failedNum, 10) > 0) ? 1 : 0);
});
}
});
function readFileLines(filename) {
var stream = fs.open(filename, 'r');
var lines = [];
var line;
while (!stream.atEnd()) {
lines.push(stream.readLine());
}
stream.close();
return lines;
}

View file

@ -1,48 +0,0 @@
module('Calendar Weeks', {
setup: function(){
this.input = $('<input type="text">')
.appendTo('#qunit-fixture')
.val('2013-01-14')
.datepicker({
format: 'yyyy-mm-dd',
calendarWeeks: true
})
.focus(); // Activate for visibility checks
this.dp = this.input.data('datepicker')
this.picker = this.dp.picker;
},
teardown: function(){
this.picker.remove();
}
});
test('adds cw header column', function(){
var target = this.picker.find('.datepicker-days thead th:first-child');
ok(target.hasClass('cw'), 'First column heading is from cw column');
});
test('adds calendar week cells to each day row', function(){
var target = this.picker.find('.datepicker-days tbody tr');
expect(target.length);
target.each(function(i){
var t = $(this).children().first();
ok(t.hasClass('cw'), "First column is cw column");
});
});
test('displays correct calendar week', function(){
var target = this.picker.find('.datepicker-days tbody tr');
expect(target.length);
target.each(function(i){
var t = $(this).children().first();
equal(t.text(), i+1, "Displays correct calendar weeks");
});
});
test('it prepends column to switcher thead row', function(){
var target = this.picker.find('.datepicker-days thead tr:first-child');
equal(target.children().length, 4, 'first row has 4 columns');
ok(target.children().first().hasClass('cw'), 'cw column is prepended');
});

View file

@ -1,166 +0,0 @@
module('Component', {
setup: function(){
this.component = $('<div class="input-append date" id="datepicker">'+
'<input size="16" type="text" value="12-02-2012" readonly>'+
'<span class="add-on"><i class="icon-th"></i></span>'+
'</div>')
.appendTo('#qunit-fixture')
.datepicker({format: "dd-mm-yyyy"});
this.input = this.component.find('input');
this.addon = this.component.find('.add-on');
this.dp = this.component.data('datepicker')
this.picker = this.dp.picker;
},
teardown: function(){
this.picker.remove();
}
});
test('Component gets date/viewDate from input value', function(){
datesEqual(this.dp.date, UTCDate(2012, 1, 12));
datesEqual(this.dp.viewDate, UTCDate(2012, 1, 12));
});
test('Activation by component', function(){
ok(!this.picker.is(':visible'));
this.addon.click();
ok(this.picker.is(':visible'));
});
test('simple keyboard nav test', function(){
var target;
// Keyboard nav only works with non-readonly inputs
this.input.removeAttr('readonly');
equal(this.dp.viewMode, 0);
target = this.picker.find('.datepicker-days thead th.switch');
equal(target.text(), 'February 2012', 'Title is "February 2012"');
datesEqual(this.dp.date, UTCDate(2012, 1, 12));
datesEqual(this.dp.viewDate, UTCDate(2012, 1, 12));
// Focus/open
this.addon.click();
// Navigation: -1 day, left arrow key
this.input.trigger({
type: 'keydown',
keyCode: 37
});
datesEqual(this.dp.viewDate, UTCDate(2012, 1, 11));
datesEqual(this.dp.date, UTCDate(2012, 1, 11));
// Month not changed
target = this.picker.find('.datepicker-days thead th.switch');
equal(target.text(), 'February 2012', 'Title is "February 2012"');
// Navigation: +1 month, shift + right arrow key
this.input.trigger({
type: 'keydown',
keyCode: 39,
shiftKey: true
});
datesEqual(this.dp.viewDate, UTCDate(2012, 2, 11));
datesEqual(this.dp.date, UTCDate(2012, 2, 11));
target = this.picker.find('.datepicker-days thead th.switch');
equal(target.text(), 'March 2012', 'Title is "March 2012"');
// Navigation: -1 year, ctrl + left arrow key
this.input.trigger({
type: 'keydown',
keyCode: 37,
ctrlKey: true
});
datesEqual(this.dp.viewDate, UTCDate(2011, 2, 11));
datesEqual(this.dp.date, UTCDate(2011, 2, 11));
target = this.picker.find('.datepicker-days thead th.switch');
equal(target.text(), 'March 2011', 'Title is "March 2011"');
});
test('setValue', function(){
this.dp.date = UTCDate(2012, 2, 13)
this.dp.setValue()
datesEqual(this.dp.date, UTCDate(2012, 2, 13));
equal(this.input.val(), '13-03-2012');
});
test('update', function(){
this.input.val('13-03-2012');
this.dp.update()
datesEqual(this.dp.date, UTCDate(2012, 2, 13));
});
test('Navigating to/from decade view', function(){
var target;
this.addon.click();
this.input.val('31-03-2012');
this.dp.update();
equal(this.dp.viewMode, 0);
target = this.picker.find('.datepicker-days thead th.switch');
ok(target.is(':visible'), 'View switcher is visible');
target.click();
ok(this.picker.find('.datepicker-months').is(':visible'), 'Month picker is visible');
equal(this.dp.viewMode, 1);
// Not modified when switching modes
datesEqual(this.dp.viewDate, UTCDate(2012, 2, 31));
datesEqual(this.dp.date, UTCDate(2012, 2, 31));
target = this.picker.find('.datepicker-months thead th.switch');
ok(target.is(':visible'), 'View switcher is visible');
target.click();
ok(this.picker.find('.datepicker-years').is(':visible'), 'Year picker is visible');
equal(this.dp.viewMode, 2);
// Not modified when switching modes
datesEqual(this.dp.viewDate, UTCDate(2012, 2, 31));
datesEqual(this.dp.date, UTCDate(2012, 2, 31));
// Change years to test internal state changes
target = this.picker.find('.datepicker-years tbody span:contains(2011)');
target.click();
equal(this.dp.viewMode, 1);
// Only viewDate modified
datesEqual(this.dp.viewDate, UTCDate(2011, 2, 1));
datesEqual(this.dp.date, UTCDate(2012, 2, 31));
target = this.picker.find('.datepicker-months tbody span:contains(Apr)');
target.click();
equal(this.dp.viewMode, 0);
// Only viewDate modified
datesEqual(this.dp.viewDate, UTCDate(2011, 3, 1));
datesEqual(this.dp.date, UTCDate(2012, 2, 31));
});
test('Selecting date resets viewDate and date', function(){
var target;
this.addon.click();
this.input.val('31-03-2012');
this.dp.update();
// Rendered correctly
equal(this.dp.viewMode, 0);
target = this.picker.find('.datepicker-days tbody td:first');
equal(target.text(), '26'); // Should be Feb 26
// Updated internally on click
target.click();
datesEqual(this.dp.viewDate, UTCDate(2012, 1, 26))
datesEqual(this.dp.date, UTCDate(2012, 1, 26))
// Re-rendered on click
target = this.picker.find('.datepicker-days tbody td:first');
equal(target.text(), '29'); // Should be Jan 29
});
test('"remove" removes associated HTML', function(){
var datepickerDivSelector = '.datepicker';
//there should be one datepicker initiated so that means one hidden .datepicker div
equal($(datepickerDivSelector).length, 1);
this.component.datepicker('remove');
equal($(datepickerDivSelector).length, 0);//hidden HTML should be gone
});

View file

@ -1,80 +0,0 @@
module('Events', {
setup: function(){
this.input = $('<input type="text" value="31-03-2011">')
.appendTo('#qunit-fixture')
.datepicker({format: "dd-mm-yyyy"})
.focus(); // Activate for visibility checks
this.dp = this.input.data('datepicker')
this.picker = this.dp.picker;
},
teardown: function(){
this.picker.remove();
}
});
test('Selecting a year from decade view triggers pickYear', function(){
var target,
triggered = 0;
this.input.on('changeYear', function(){
triggered++;
});
equal(this.dp.viewMode, 0);
target = this.picker.find('.datepicker-days thead th.switch');
ok(target.is(':visible'), 'View switcher is visible');
target.click();
ok(this.picker.find('.datepicker-months').is(':visible'), 'Month picker is visible');
equal(this.dp.viewMode, 1);
// Not modified when switching modes
datesEqual(this.dp.viewDate, UTCDate(2011, 2, 31));
datesEqual(this.dp.date, UTCDate(2011, 2, 31));
target = this.picker.find('.datepicker-months thead th.switch');
ok(target.is(':visible'), 'View switcher is visible');
target.click();
ok(this.picker.find('.datepicker-years').is(':visible'), 'Year picker is visible');
equal(this.dp.viewMode, 2);
// Not modified when switching modes
datesEqual(this.dp.viewDate, UTCDate(2011, 2, 31));
datesEqual(this.dp.date, UTCDate(2011, 2, 31));
// Change years to test internal state changes
target = this.picker.find('.datepicker-years tbody span:contains(2010)');
target.click();
equal(this.dp.viewMode, 1);
// Only viewDate modified
datesEqual(this.dp.viewDate, UTCDate(2010, 2, 1));
datesEqual(this.dp.date, UTCDate(2011, 2, 31));
equal(triggered, 1);
});
test('Selecting a month from year view triggers pickMonth', function(){
var target,
triggered = 0;
this.input.on('changeMonth', function(){
triggered++;
});
equal(this.dp.viewMode, 0);
target = this.picker.find('.datepicker-days thead th.switch');
ok(target.is(':visible'), 'View switcher is visible');
target.click();
ok(this.picker.find('.datepicker-months').is(':visible'), 'Month picker is visible');
equal(this.dp.viewMode, 1);
// Not modified when switching modes
datesEqual(this.dp.viewDate, UTCDate(2011, 2, 31));
datesEqual(this.dp.date, UTCDate(2011, 2, 31));
target = this.picker.find('.datepicker-months tbody span:contains(Apr)');
target.click();
equal(this.dp.viewMode, 0);
// Only viewDate modified
datesEqual(this.dp.viewDate, UTCDate(2011, 3, 1));
datesEqual(this.dp.date, UTCDate(2011, 2, 31));
equal(triggered, 1);
});

View file

@ -1,226 +0,0 @@
module('Formats', {
setup: function(){
this.input = $('<input type="text">').appendTo('#qunit-fixture');
this.date = UTCDate(2012, 2, 15, 0, 0, 0, 0); // March 15, 2012
},
teardown: function(){
this.input.data('datepicker').picker.remove();
}
});
test('d: Day of month, no leading zero.', function(){
this.input
.val('2012-03-05')
.datepicker({format: 'yyyy-mm-d'})
.datepicker('setValue');
equal(this.input.val().split('-')[2], '5');
});
test('dd: Day of month, leading zero.', function(){
this.input
.val('2012-03-5')
.datepicker({format: 'yyyy-mm-dd'})
.datepicker('setValue');
equal(this.input.val().split('-')[2], '05');
});
test('D: Day of week, short.', function(){
this.input
.val('2012-03-05')
.datepicker({format: 'yyyy-mm-dd-D'})
.datepicker('setValue');
equal(this.input.val().split('-')[3], 'Mon');
});
test('DD: Day of week, long.', function(){
this.input
.val('2012-03-05')
.datepicker({format: 'yyyy-mm-dd-DD'})
.datepicker('setValue');
equal(this.input.val().split('-')[3], 'Monday');
});
test('m: Month, no leading zero.', function(){
this.input
.val('2012-03-05')
.datepicker({format: 'yyyy-m-dd'})
.datepicker('setValue');
equal(this.input.val().split('-')[1], '3');
});
test('mm: Month, leading zero.', function(){
this.input
.val('2012-3-5')
.datepicker({format: 'yyyy-mm-dd'})
.datepicker('setValue');
equal(this.input.val().split('-')[1], '03');
});
test('M: Month shortname.', function(){
this.input
.val('2012-Mar-05')
.datepicker({format: 'yyyy-M-dd'})
.datepicker('setValue');
equal(this.input.val().split('-')[1], 'Mar');
});
test('MM: Month full name.', function(){
this.input
.val('2012-March-5')
.datepicker({format: 'yyyy-MM-dd'})
.datepicker('setValue');
equal(this.input.val().split('-')[1], 'March');
});
test('yy: Year, two-digit.', function(){
this.input
.val('2012-03-05')
.datepicker({format: 'yy-mm-dd'})
.datepicker('setValue');
equal(this.input.val().split('-')[0], '12');
});
test('yyyy: Year, four-digit.', function(){
this.input
.val('2012-03-5')
.datepicker({format: 'yyyy-mm-dd'})
.datepicker('setValue');
equal(this.input.val().split('-')[0], '2012');
});
test('dd-mm-yyyy: Regression: Prevent potential month overflow in small-to-large formats (Mar 31, 2012 -> Mar 01, 2012)', function(){
this.input
.val('31-03-2012')
.datepicker({format: 'dd-mm-yyyy'})
.datepicker('setValue');
equal(this.input.val(), '31-03-2012');
});
test('dd-mm-yyyy: Leap day', function(){
this.input
.val('29-02-2012')
.datepicker({format: 'dd-mm-yyyy'})
.datepicker('setValue');
equal(this.input.val(), '29-02-2012');
});
test('yyyy-mm-dd: Alternative format', function(){
this.input
.val('2012-02-12')
.datepicker({format: 'yyyy-mm-dd'})
.datepicker('setValue');
equal(this.input.val(), '2012-02-12');
});
test('yyyy-MM-dd: Regression: Infinite loop when numbers used for month', function(){
this.input
.val('2012-02-12')
.datepicker({format: 'yyyy-MM-dd'})
.datepicker('setValue');
equal(this.input.val(), '2012-February-12');
});
test('+1d: Tomorrow', patch_date(function(Date){
Date.now = UTCDate(2012, 2, 15);
this.input
.val('+1d')
.datepicker({format: 'dd-mm-yyyy'})
.datepicker('setValue');
equal(this.input.val(), '16-03-2012');
}));
test('-1d: Yesterday', patch_date(function(Date){
Date.now = UTCDate(2012, 2, 15);
this.input
.val('-1d')
.datepicker({format: 'dd-mm-yyyy'})
.datepicker('setValue');
equal(this.input.val(), '14-03-2012');
}));
test('+1w: Next week', patch_date(function(Date){
Date.now = UTCDate(2012, 2, 15);
this.input
.val('+1w')
.datepicker({format: 'dd-mm-yyyy'})
.datepicker('setValue');
equal(this.input.val(), '22-03-2012');
}));
test('-1w: Last week', patch_date(function(Date){
Date.now = UTCDate(2012, 2, 15);
this.input
.val('-1w')
.datepicker({format: 'dd-mm-yyyy'})
.datepicker('setValue');
equal(this.input.val(), '08-03-2012');
}));
test('+1m: Next month', patch_date(function(Date){
Date.now = UTCDate(2012, 2, 15);
this.input
.val('+1m')
.datepicker({format: 'dd-mm-yyyy'})
.datepicker('setValue');
equal(this.input.val(), '15-04-2012');
}));
test('-1m: Last month', patch_date(function(Date){
Date.now = UTCDate(2012, 2, 15);
this.input
.val('-1m')
.datepicker({format: 'dd-mm-yyyy'})
.datepicker('setValue');
equal(this.input.val(), '15-02-2012');
}));
test('+1y: Next year', patch_date(function(Date){
Date.now = UTCDate(2012, 2, 15);
this.input
.val('+1y')
.datepicker({format: 'dd-mm-yyyy'})
.datepicker('setValue');
equal(this.input.val(), '15-03-2013');
}));
test('-1y: Last year', patch_date(function(Date){
Date.now = UTCDate(2012, 2, 15);
this.input
.val('-1y')
.datepicker({format: 'dd-mm-yyyy'})
.datepicker('setValue');
equal(this.input.val(), '15-03-2011');
}));
test('-1y +2m: Multiformat', patch_date(function(Date){
Date.now = UTCDate(2012, 2, 15);
this.input
.val('-1y +2m')
.datepicker({format: 'dd-mm-yyyy'})
.datepicker('setValue');
equal(this.input.val(), '15-05-2011');
}));
test('Regression: End-of-month bug', patch_date(function(Date){
Date.now = UTCDate(2012, 4, 31);
this.input
.val('29-02-2012')
.datepicker({format: 'dd-mm-yyyy'})
.datepicker('setValue');
equal(this.input.val(), '29-02-2012');
}));
test('Invalid formats are force-parsed into a valid date on tab', patch_date(function(Date){
Date.now = UTCDate(2012, 4, 31);
this.input
.val('44-44-4444')
.datepicker({format: 'yyyy-MM-dd'})
.focus();
this.input.trigger({
type: 'keydown',
keyCode: 9
});
equal(this.input.val(), '56-September-30');
}));

View file

@ -1,28 +0,0 @@
module('Inline', {
setup: function(){
this.component = $('<div data-date="12-02-2012"></div>')
.appendTo('#qunit-fixture')
.datepicker({format: "dd-mm-yyyy"});
this.dp = this.component.data('datepicker')
this.picker = this.dp.picker;
},
teardown: function(){
this.picker.remove();
}
});
test('Picker gets date/viewDate from data-date attr', function(){
datesEqual(this.dp.date, UTCDate(2012, 1, 12));
datesEqual(this.dp.viewDate, UTCDate(2012, 1, 12));
});
test('Visible after init', function(){
ok(this.picker.is(':visible'));
});
test('update', function(){
this.dp.update('13-03-2012')
datesEqual(this.dp.date, UTCDate(2012, 2, 13));
});

View file

@ -1,86 +0,0 @@
module('Keyboard Navigation 2011', {
setup: function(){
/*
Tests start with picker on March 31, 2011. Fun facts:
* March 1, 2011 was on a Tuesday
* March 31, 2011 was on a Thursday
*/
this.input = $('<input type="text" value="31-03-2011">')
.appendTo('#qunit-fixture')
.datepicker({format: "dd-mm-yyyy"})
.focus(); // Activate for visibility checks
this.dp = this.input.data('datepicker')
this.picker = this.dp.picker;
},
teardown: function(){
this.picker.remove();
}
});
test('Regression: by week (up/down arrows); up from Mar 6, 2011 should go to Feb 27, 2011', function(){
var target;
this.input.val('06-03-2011').datepicker('update');
equal(this.dp.viewMode, 0);
target = this.picker.find('.datepicker-days thead th.switch');
equal(target.text(), 'March 2011', 'Title is "March 2011"');
datesEqual(this.dp.viewDate, UTCDate(2011, 2, 6));
datesEqual(this.dp.date, UTCDate(2011, 2, 6));
// Navigation: -1 week, up arrow key
this.input.trigger({
type: 'keydown',
keyCode: 38
});
datesEqual(this.dp.viewDate, UTCDate(2011, 1, 27));
datesEqual(this.dp.date, UTCDate(2011, 1, 27));
target = this.picker.find('.datepicker-days thead th.switch');
equal(target.text(), 'February 2011', 'Title is "February 2011"');
});
test('Regression: by day (left/right arrows); left from Mar 1, 2011 should go to Feb 28, 2011', function(){
var target;
this.input.val('01-03-2011').datepicker('update');
equal(this.dp.viewMode, 0);
target = this.picker.find('.datepicker-days thead th.switch');
equal(target.text(), 'March 2011', 'Title is "March 2011"');
datesEqual(this.dp.viewDate, UTCDate(2011, 2, 1));
datesEqual(this.dp.date, UTCDate(2011, 2, 1));
// Navigation: -1 day left arrow key
this.input.trigger({
type: 'keydown',
keyCode: 37
});
datesEqual(this.dp.viewDate, UTCDate(2011, 1, 28));
datesEqual(this.dp.date, UTCDate(2011, 1, 28));
target = this.picker.find('.datepicker-days thead th.switch');
equal(target.text(), 'February 2011', 'Title is "February 2011"');
});
test('Regression: by month (shift + left/right arrows); left from Mar 15, 2011 should go to Feb 15, 2011', function(){
var target;
this.input.val('15-03-2011').datepicker('update');
equal(this.dp.viewMode, 0);
target = this.picker.find('.datepicker-days thead th.switch');
equal(target.text(), 'March 2011', 'Title is "March 2011"');
datesEqual(this.dp.viewDate, UTCDate(2011, 2, 15));
datesEqual(this.dp.date, UTCDate(2011, 2, 15));
// Navigation: -1 month, shift + left arrow key
this.input.trigger({
type: 'keydown',
keyCode: 37,
shiftKey: true
});
datesEqual(this.dp.viewDate, UTCDate(2011, 1, 15));
datesEqual(this.dp.date, UTCDate(2011, 1, 15));
target = this.picker.find('.datepicker-days thead th.switch');
equal(target.text(), 'February 2011', 'Title is "February 2011"');
});

View file

@ -1,410 +0,0 @@
module('Keyboard Navigation 2012', {
setup: function(){
/*
Tests start with picker on March 31, 2012. Fun facts:
* February 1, 2012 was on a Wednesday
* February 29, 2012 was on a Wednesday
* March 1, 2012 was on a Thursday
* March 31, 2012 was on a Saturday
*/
this.input = $('<input type="text" value="31-03-2012">')
.appendTo('#qunit-fixture')
.datepicker({format: "dd-mm-yyyy"})
.focus(); // Activate for visibility checks
this.dp = this.input.data('datepicker')
this.picker = this.dp.picker;
},
teardown: function(){
this.picker.remove();
}
});
test('by day (right/left arrows)', function(){
var target;
equal(this.dp.viewMode, 0);
target = this.picker.find('.datepicker-days thead th.switch');
equal(target.text(), 'March 2012', 'Title is "March 2012"');
// Navigation: -1 day, left arrow key
this.input.trigger({
type: 'keydown',
keyCode: 37
});
// Both updated on keyboard navigation
datesEqual(this.dp.viewDate, UTCDate(2012, 2, 30));
datesEqual(this.dp.date, UTCDate(2012, 2, 30));
// Month not changed
target = this.picker.find('.datepicker-days thead th.switch');
equal(target.text(), 'March 2012', 'Title is "March 2012"');
// Navigation: +1 day, right arrow key
for (var i=0; i<2; i++)
this.input.trigger({
type: 'keydown',
keyCode: 39
});
datesEqual(this.dp.viewDate, UTCDate(2012, 3, 1));
datesEqual(this.dp.date, UTCDate(2012, 3, 1));
// Month changed: April 1 (this is not a joke!)
target = this.picker.find('.datepicker-days thead th.switch');
equal(target.text(), 'April 2012', 'Title is "April 2012"');
});
test('by week (up/down arrows)', function(){
var target;
equal(this.dp.viewMode, 0);
target = this.picker.find('.datepicker-days thead th.switch');
equal(target.text(), 'March 2012', 'Title is "March 2012"');
// Navigation: -1 week, up arrow key
this.input.trigger({
type: 'keydown',
keyCode: 38
});
// Both updated on keyboard navigation
datesEqual(this.dp.viewDate, UTCDate(2012, 2, 24));
datesEqual(this.dp.date, UTCDate(2012, 2, 24));
// Month not changed
target = this.picker.find('.datepicker-days thead th.switch');
equal(target.text(), 'March 2012', 'Title is "March 2012"');
// Navigation: +1 week, down arrow key
for (var i=0; i<2; i++)
this.input.trigger({
type: 'keydown',
keyCode: 40
});
datesEqual(this.dp.viewDate, UTCDate(2012, 3, 7));
datesEqual(this.dp.date, UTCDate(2012, 3, 7));
target = this.picker.find('.datepicker-days thead th.switch');
equal(target.text(), 'April 2012', 'Title is "April 2012"');
});
test('by month, v1 (shift + left/right arrows)', function(){
var target;
equal(this.dp.viewMode, 0);
target = this.picker.find('.datepicker-days thead th.switch');
equal(target.text(), 'March 2012', 'Title is "March 2012"');
// Navigation: -1 month, shift + left arrow key
this.input.trigger({
type: 'keydown',
keyCode: 37,
shiftKey: true
});
// Both updated on keyboard navigation, w/ graceful date ends
datesEqual(this.dp.viewDate, UTCDate(2012, 1, 29));
datesEqual(this.dp.date, UTCDate(2012, 1, 29));
// Month not changed
target = this.picker.find('.datepicker-days thead th.switch');
equal(target.text(), 'February 2012', 'Title is "February 2012"');
// Navigation: +1 month, shift + right arrow key
for (var i=0; i<2; i++)
this.input.trigger({
type: 'keydown',
keyCode: 39,
shiftKey: true
});
datesEqual(this.dp.viewDate, UTCDate(2012, 3, 29));
datesEqual(this.dp.date, UTCDate(2012, 3, 29));
target = this.picker.find('.datepicker-days thead th.switch');
equal(target.text(), 'April 2012', 'Title is "April 2012"');
});
test('by month, v2 (shift + up/down arrows)', function(){
var target;
equal(this.dp.viewMode, 0);
target = this.picker.find('.datepicker-days thead th.switch');
equal(target.text(), 'March 2012', 'Title is "March 2012"');
// Navigation: -1 month, shift + up arrow key
this.input.trigger({
type: 'keydown',
keyCode: 38,
shiftKey: true
});
// Both updated on keyboard navigation, w/ graceful date ends
datesEqual(this.dp.viewDate, UTCDate(2012, 1, 29));
datesEqual(this.dp.date, UTCDate(2012, 1, 29));
// Month not changed
target = this.picker.find('.datepicker-days thead th.switch');
equal(target.text(), 'February 2012', 'Title is "February 2012"');
// Navigation: +1 month, shift + down arrow key
for (var i=0; i<2; i++)
this.input.trigger({
type: 'keydown',
keyCode: 40,
shiftKey: true
});
datesEqual(this.dp.viewDate, UTCDate(2012, 3, 29));
datesEqual(this.dp.date, UTCDate(2012, 3, 29));
target = this.picker.find('.datepicker-days thead th.switch');
equal(target.text(), 'April 2012', 'Title is "April 2012"');
});
test('by year, v1 (ctrl + left/right arrows)', function(){
var target;
equal(this.dp.viewMode, 0);
target = this.picker.find('.datepicker-days thead th.switch');
equal(target.text(), 'March 2012', 'Title is "March 2012"');
// Navigation: -1 year, ctrl + left arrow key
this.input.trigger({
type: 'keydown',
keyCode: 37,
ctrlKey: true
});
// Both updated on keyboard navigation
datesEqual(this.dp.viewDate, UTCDate(2011, 2, 31));
datesEqual(this.dp.date, UTCDate(2011, 2, 31));
// Month not changed
target = this.picker.find('.datepicker-days thead th.switch');
equal(target.text(), 'March 2011', 'Title is "March 2011"');
// Navigation: +1 year, ctrl + right arrow key
for (var i=0; i<2; i++)
this.input.trigger({
type: 'keydown',
keyCode: 39,
ctrlKey: true
});
datesEqual(this.dp.viewDate, UTCDate(2013, 2, 31));
datesEqual(this.dp.date, UTCDate(2013, 2, 31));
target = this.picker.find('.datepicker-days thead th.switch');
equal(target.text(), 'March 2013', 'Title is "March 2013"');
});
test('by year, v2 (ctrl + up/down arrows)', function(){
var target;
equal(this.dp.viewMode, 0);
target = this.picker.find('.datepicker-days thead th.switch');
equal(target.text(), 'March 2012', 'Title is "March 2012"');
// Navigation: -1 year, ctrl + up arrow key
this.input.trigger({
type: 'keydown',
keyCode: 38,
ctrlKey: true
});
// Both updated on keyboard navigation
datesEqual(this.dp.viewDate, UTCDate(2011, 2, 31));
datesEqual(this.dp.date, UTCDate(2011, 2, 31));
// Month not changed
target = this.picker.find('.datepicker-days thead th.switch');
equal(target.text(), 'March 2011', 'Title is "March 2011"');
// Navigation: +1 year, ctrl + down arrow key
for (var i=0; i<2; i++)
this.input.trigger({
type: 'keydown',
keyCode: 40,
ctrlKey: true
});
datesEqual(this.dp.viewDate, UTCDate(2013, 2, 31));
datesEqual(this.dp.date, UTCDate(2013, 2, 31));
target = this.picker.find('.datepicker-days thead th.switch');
equal(target.text(), 'March 2013', 'Title is "March 2013"');
});
test('by year, v3 (ctrl + shift + left/right arrows)', function(){
var target;
equal(this.dp.viewMode, 0);
target = this.picker.find('.datepicker-days thead th.switch');
equal(target.text(), 'March 2012', 'Title is "March 2012"');
// Navigation: -1 year, ctrl + left arrow key
this.input.trigger({
type: 'keydown',
keyCode: 37,
ctrlKey: true,
shiftKey: true
});
// Both updated on keyboard navigation
datesEqual(this.dp.viewDate, UTCDate(2011, 2, 31));
datesEqual(this.dp.date, UTCDate(2011, 2, 31));
// Month not changed
target = this.picker.find('.datepicker-days thead th.switch');
equal(target.text(), 'March 2011', 'Title is "March 2011"');
// Navigation: +1 year, ctrl + right arrow key
for (var i=0; i<2; i++)
this.input.trigger({
type: 'keydown',
keyCode: 39,
ctrlKey: true,
shiftKey: true
});
datesEqual(this.dp.viewDate, UTCDate(2013, 2, 31));
datesEqual(this.dp.date, UTCDate(2013, 2, 31));
target = this.picker.find('.datepicker-days thead th.switch');
equal(target.text(), 'March 2013', 'Title is "March 2013"');
});
test('by year, v4 (ctrl + shift + up/down arrows)', function(){
var target;
equal(this.dp.viewMode, 0);
target = this.picker.find('.datepicker-days thead th.switch');
equal(target.text(), 'March 2012', 'Title is "March 2012"');
// Navigation: -1 year, ctrl + up arrow key
this.input.trigger({
type: 'keydown',
keyCode: 38,
ctrlKey: true,
shiftKey: true
});
// Both updated on keyboard navigation
datesEqual(this.dp.viewDate, UTCDate(2011, 2, 31));
datesEqual(this.dp.date, UTCDate(2011, 2, 31));
// Month not changed
target = this.picker.find('.datepicker-days thead th.switch');
equal(target.text(), 'March 2011', 'Title is "March 2011"');
// Navigation: +1 year, ctrl + down arrow key
for (var i=0; i<2; i++)
this.input.trigger({
type: 'keydown',
keyCode: 40,
ctrlKey: true,
shiftKey: true
});
datesEqual(this.dp.viewDate, UTCDate(2013, 2, 31));
datesEqual(this.dp.date, UTCDate(2013, 2, 31));
target = this.picker.find('.datepicker-days thead th.switch');
equal(target.text(), 'March 2013', 'Title is "March 2013"');
});
test('by year, from leap day', function(){
var target;
equal(this.dp.viewMode, 0);
target = this.picker.find('.datepicker-days thead th.switch');
this.input.val('29-02-2012').datepicker('update');
datesEqual(this.dp.viewDate, UTCDate(2012, 1, 29));
datesEqual(this.dp.date, UTCDate(2012, 1, 29));
equal(target.text(), 'February 2012', 'Title is "February 2012"');
// Navigation: -1 year
this.input.trigger({
type: 'keydown',
keyCode: 37,
ctrlKey: true
});
// Both updated on keyboard navigation; graceful month-end
datesEqual(this.dp.viewDate, UTCDate(2011, 1, 28));
datesEqual(this.dp.date, UTCDate(2011, 1, 28));
// Month not changed
target = this.picker.find('.datepicker-days thead th.switch');
equal(target.text(), 'February 2011', 'Title is "February 2011"');
// Navigation: +1 year, back to leap year
this.input.trigger({
type: 'keydown',
keyCode: 39,
ctrlKey: true
});
// Both updated on keyboard navigation; graceful month-end
datesEqual(this.dp.viewDate, UTCDate(2012, 1, 28));
datesEqual(this.dp.date, UTCDate(2012, 1, 28));
target = this.picker.find('.datepicker-days thead th.switch');
equal(target.text(), 'February 2012', 'Title is "February 2012"');
// Navigation: +1 year
this.input.trigger({
type: 'keydown',
keyCode: 39,
ctrlKey: true
});
// Both updated on keyboard navigation; graceful month-end
datesEqual(this.dp.viewDate, UTCDate(2013, 1, 28));
datesEqual(this.dp.date, UTCDate(2013, 1, 28));
target = this.picker.find('.datepicker-days thead th.switch');
equal(target.text(), 'February 2013', 'Title is "February 2013"');
});
test('Selection (enter)', function(){
var target;
equal(this.dp.viewMode, 0);
target = this.picker.find('.datepicker-days thead th.switch');
equal(target.text(), 'March 2012', 'Title is "March 2012"');
// Navigation: -1 day, left arrow key
this.input.trigger({
type: 'keydown',
keyCode: 37
});
// Both updated on keyboard navigation
datesEqual(this.dp.viewDate, UTCDate(2012, 2, 30));
datesEqual(this.dp.date, UTCDate(2012, 2, 30));
// Month not changed
target = this.picker.find('.datepicker-days thead th.switch');
equal(target.text(), 'March 2012', 'Title is "March 2012"');
// Selection: Enter
this.input.trigger({
type: 'keydown',
keyCode: 13
});
// Both updated on keyboard navigation
datesEqual(this.dp.viewDate, UTCDate(2012, 2, 30));
datesEqual(this.dp.date, UTCDate(2012, 2, 30));
// Month not changed
target = this.picker.find('.datepicker-days thead th.switch');
equal(target.text(), 'March 2012', 'Title is "March 2012"');
ok(this.picker.is(':not(:visible)'), 'Picker is hidden');
});
test('Toggle hide/show (escape); navigation while hidden is suppressed', function(){
var target;
equal(this.dp.viewMode, 0);
target = this.picker.find('.datepicker-days thead th.switch');
equal(target.text(), 'March 2012', 'Title is "March 2012"');
ok(this.picker.is(':visible'), 'Picker is visible');
// Hide
this.input.trigger({
type: 'keydown',
keyCode: 27
});
ok(this.picker.is(':not(:visible)'), 'Picker is hidden');
datesEqual(this.dp.viewDate, UTCDate(2012, 2, 31));
datesEqual(this.dp.date, UTCDate(2012, 2, 31));
// left arrow key, *doesn't* navigate
this.input.trigger({
type: 'keydown',
keyCode: 37
});
datesEqual(this.dp.viewDate, UTCDate(2012, 2, 31));
datesEqual(this.dp.date, UTCDate(2012, 2, 31));
// Show
this.input.trigger({
type: 'keydown',
keyCode: 27
});
ok(this.picker.is(':visible'), 'Picker is visible');
datesEqual(this.dp.viewDate, UTCDate(2012, 2, 31));
datesEqual(this.dp.date, UTCDate(2012, 2, 31));
});

View file

@ -1,26 +0,0 @@
module('Keyboard Navigation (All)', {
setup: function(){
this.input = $('<input type="text">')
.appendTo('#qunit-fixture')
.datepicker({format: "dd-mm-yyyy"})
.focus(); // Activate for visibility checks
this.dp = this.input.data('datepicker')
this.picker = this.dp.picker;
},
teardown: function(){
this.picker.remove();
}
});
test('TAB hides picker', function(){
var target;
ok(this.picker.is(':visible'), 'Picker is visible');
this.input.trigger({
type: 'keydown',
keyCode: 9
});
ok(this.picker.is(':not(:visible)'), 'Picker is hidden');
});

View file

@ -1,66 +0,0 @@
module('Mouse Navigation 2011', {
setup: function(){
/*
Tests start with picker on March 31, 2011.
*/
this.input = $('<input type="text" value="31-03-2011">')
.appendTo('#qunit-fixture')
.datepicker({format: "dd-mm-yyyy"})
.focus(); // Activate for visibility checks
this.dp = this.input.data('datepicker')
this.picker = this.dp.picker;
},
teardown: function(){
this.picker.remove();
}
});
test('Selecting date from previous month while in January changes month and year displayed', function(){
var target;
this.input.val('01-01-2011');
this.dp.update();
datesEqual(this.dp.viewDate, UTCDate(2011, 0, 1))
datesEqual(this.dp.date, UTCDate(2011, 0, 1))
// Rendered correctly
equal(this.dp.viewMode, 0);
target = this.picker.find('.datepicker-days tbody td:first');
equal(target.text(), '26'); // Should be Dec 26
equal(this.picker.find('.datepicker-days thead th.switch').text(), 'January 2011');
// Updated internally on click
target.click();
equal(this.picker.find('.datepicker-days thead th.switch').text(), 'December 2010');
datesEqual(this.dp.viewDate, UTCDate(2010, 11, 26))
datesEqual(this.dp.date, UTCDate(2010, 11, 26))
// Re-rendered on click
target = this.picker.find('.datepicker-days tbody td:first');
equal(target.text(), '28'); // Should be Nov 28
});
test('Selecting date from next month while in December changes month and year displayed', function(){
var target;
this.input.val('01-12-2010');
this.dp.update();
datesEqual(this.dp.viewDate, UTCDate(2010, 11, 1))
datesEqual(this.dp.date, UTCDate(2010, 11, 1))
// Rendered correctly
equal(this.dp.viewMode, 0);
target = this.picker.find('.datepicker-days tbody td:last');
equal(target.text(), '8'); // Should be Jan 8
equal(this.picker.find('.datepicker-days thead th.switch').text(), 'December 2010');
// Updated internally on click
target.click();
equal(this.picker.find('.datepicker-days thead th.switch').text(), 'January 2011');
datesEqual(this.dp.viewDate, UTCDate(2011, 0, 8))
datesEqual(this.dp.date, UTCDate(2011, 0, 8))
// Re-rendered on click
target = this.picker.find('.datepicker-days tbody td:first');
equal(target.text(), '26'); // Should be Dec 26
});

View file

@ -1,251 +0,0 @@
module('Mouse Navigation 2012', {
setup: function(){
/*
Tests start with picker on March 31, 2012. Fun facts:
* February 1, 2012 was on a Wednesday
* February 29, 2012 was on a Wednesday
* March 1, 2012 was on a Thursday
* March 31, 2012 was on a Saturday
*/
this.input = $('<input type="text" value="31-03-2012">')
.appendTo('#qunit-fixture')
.datepicker({format: "dd-mm-yyyy"})
.focus(); // Activate for visibility checks
this.dp = this.input.data('datepicker')
this.picker = this.dp.picker;
},
teardown: function(){
this.picker.remove();
}
});
test('Selecting date resets viewDate and date', function(){
var target;
// Rendered correctly
equal(this.dp.viewMode, 0);
target = this.picker.find('.datepicker-days tbody td:nth(7)');
equal(target.text(), '4'); // Should be Mar 4
// Updated internally on click
target.click();
datesEqual(this.dp.viewDate, UTCDate(2012, 2, 4))
datesEqual(this.dp.date, UTCDate(2012, 2, 4))
// Re-rendered on click
target = this.picker.find('.datepicker-days tbody td:first');
equal(target.text(), '26'); // Should be Feb 29
});
test('Navigating next/prev by month', function(){
var target;
equal(this.dp.viewMode, 0);
target = this.picker.find('.datepicker-days thead th.prev');
ok(target.is(':visible'), 'Month:prev nav is visible');
// Updated internally on click
target.click();
// Should handle month-length changes gracefully
datesEqual(this.dp.viewDate, UTCDate(2012, 1, 29));
datesEqual(this.dp.date, UTCDate(2012, 2, 31));
// Re-rendered on click
target = this.picker.find('.datepicker-days tbody td:first');
equal(target.text(), '29'); // Should be Jan 29
target = this.picker.find('.datepicker-days thead th.next');
ok(target.is(':visible'), 'Month:next nav is visible');
// Updated internally on click
target.click().click();
// Graceful moonth-end handling carries over
datesEqual(this.dp.viewDate, UTCDate(2012, 3, 29));
datesEqual(this.dp.date, UTCDate(2012, 2, 31));
// Re-rendered on click
target = this.picker.find('.datepicker-days tbody td:first');
equal(target.text(), '25'); // Should be Mar 25
// (includes "old" days at start of month, even if that's all the first week-row consists of)
});
test('Navigating to/from year view', function(){
var target;
equal(this.dp.viewMode, 0);
target = this.picker.find('.datepicker-days thead th.switch');
ok(target.is(':visible'), 'View switcher is visible');
target.click();
ok(this.picker.find('.datepicker-months').is(':visible'), 'Month picker is visible');
equal(this.dp.viewMode, 1);
// Not modified when switching modes
datesEqual(this.dp.viewDate, UTCDate(2012, 2, 31));
datesEqual(this.dp.date, UTCDate(2012, 2, 31));
// Change months to test internal state
target = this.picker.find('.datepicker-months tbody span:contains(Apr)');
target.click();
equal(this.dp.viewMode, 0);
// Only viewDate modified
datesEqual(this.dp.viewDate, UTCDate(2012, 3, 1)); // Apr 30
datesEqual(this.dp.date, UTCDate(2012, 2, 31));
});
test('Navigating to/from decade view', function(){
var target;
equal(this.dp.viewMode, 0);
target = this.picker.find('.datepicker-days thead th.switch');
ok(target.is(':visible'), 'View switcher is visible');
target.click();
ok(this.picker.find('.datepicker-months').is(':visible'), 'Month picker is visible');
equal(this.dp.viewMode, 1);
// Not modified when switching modes
datesEqual(this.dp.viewDate, UTCDate(2012, 2, 31));
datesEqual(this.dp.date, UTCDate(2012, 2, 31));
target = this.picker.find('.datepicker-months thead th.switch');
ok(target.is(':visible'), 'View switcher is visible');
target.click();
ok(this.picker.find('.datepicker-years').is(':visible'), 'Year picker is visible');
equal(this.dp.viewMode, 2);
// Not modified when switching modes
datesEqual(this.dp.viewDate, UTCDate(2012, 2, 31));
datesEqual(this.dp.date, UTCDate(2012, 2, 31));
// Change years to test internal state changes
target = this.picker.find('.datepicker-years tbody span:contains(2011)');
target.click();
equal(this.dp.viewMode, 1);
// Only viewDate modified
datesEqual(this.dp.viewDate, UTCDate(2011, 2, 1));
datesEqual(this.dp.date, UTCDate(2012, 2, 31));
target = this.picker.find('.datepicker-months tbody span:contains(Apr)');
target.click();
equal(this.dp.viewMode, 0);
// Only viewDate modified
datesEqual(this.dp.viewDate, UTCDate(2011, 3, 1));
datesEqual(this.dp.date, UTCDate(2012, 2, 31));
});
test('Navigating prev/next in year view', function(){
var target;
equal(this.dp.viewMode, 0);
target = this.picker.find('.datepicker-days thead th.switch');
ok(target.is(':visible'), 'View switcher is visible');
target.click();
ok(this.picker.find('.datepicker-months').is(':visible'), 'Month picker is visible');
equal(this.dp.viewMode, 1);
equal(this.picker.find('.datepicker-months thead th.switch').text(), '2012');
// Not modified when switching modes
datesEqual(this.dp.viewDate, UTCDate(2012, 2, 31));
datesEqual(this.dp.date, UTCDate(2012, 2, 31));
// Go to next year (2013)
target = this.picker.find('.datepicker-months thead th.next');
target.click();
equal(this.picker.find('.datepicker-months thead th.switch').text(), '2013');
// Only viewDate modified
datesEqual(this.dp.viewDate, UTCDate(2013, 2, 31));
datesEqual(this.dp.date, UTCDate(2012, 2, 31));
// Go to prev year (x2 == 2011)
target = this.picker.find('.datepicker-months thead th.prev');
target.click().click();
equal(this.picker.find('.datepicker-months thead th.switch').text(), '2011');
// Only viewDate modified
datesEqual(this.dp.viewDate, UTCDate(2011, 2, 31));
datesEqual(this.dp.date, UTCDate(2012, 2, 31));
});
test('Navigating prev/next in decade view', function(){
var target;
equal(this.dp.viewMode, 0);
target = this.picker.find('.datepicker-days thead th.switch');
ok(target.is(':visible'), 'View switcher is visible');
target.click();
ok(this.picker.find('.datepicker-months').is(':visible'), 'Month picker is visible');
equal(this.dp.viewMode, 1);
// Not modified when switching modes
datesEqual(this.dp.viewDate, UTCDate(2012, 2, 31));
datesEqual(this.dp.date, UTCDate(2012, 2, 31));
target = this.picker.find('.datepicker-months thead th.switch');
ok(target.is(':visible'), 'View switcher is visible');
target.click();
ok(this.picker.find('.datepicker-years').is(':visible'), 'Year picker is visible');
equal(this.dp.viewMode, 2);
equal(this.picker.find('.datepicker-years thead th.switch').text(), '2010-2019');
// Not modified when switching modes
datesEqual(this.dp.viewDate, UTCDate(2012, 2, 31));
datesEqual(this.dp.date, UTCDate(2012, 2, 31));
// Go to next decade (2020-29)
target = this.picker.find('.datepicker-years thead th.next');
target.click();
equal(this.picker.find('.datepicker-years thead th.switch').text(), '2020-2029');
// Only viewDate modified
datesEqual(this.dp.viewDate, UTCDate(2022, 2, 31));
datesEqual(this.dp.date, UTCDate(2012, 2, 31));
// Go to prev year (x2 == 2000-09)
target = this.picker.find('.datepicker-years thead th.prev');
target.click().click();
equal(this.picker.find('.datepicker-years thead th.switch').text(), '2000-2009');
// Only viewDate modified
datesEqual(this.dp.viewDate, UTCDate(2002, 2, 31));
datesEqual(this.dp.date, UTCDate(2012, 2, 31));
});
test('Selecting date from previous month resets viewDate and date, changing month displayed', function(){
var target;
// Rendered correctly
equal(this.dp.viewMode, 0);
target = this.picker.find('.datepicker-days tbody td:first');
equal(target.text(), '26'); // Should be Feb 26
equal(this.picker.find('.datepicker-days thead th.switch').text(), 'March 2012');
// Updated internally on click
target.click();
equal(this.picker.find('.datepicker-days thead th.switch').text(), 'February 2012');
datesEqual(this.dp.viewDate, UTCDate(2012, 1, 26))
datesEqual(this.dp.date, UTCDate(2012, 1, 26))
// Re-rendered on click
target = this.picker.find('.datepicker-days tbody td:first');
equal(target.text(), '29'); // Should be Jan 29
});
test('Selecting date from next month resets viewDate and date, changing month displayed', function(){
var target;
this.input.val('01-04-2012');
this.dp.update();
// Rendered correctly
equal(this.dp.viewMode, 0);
target = this.picker.find('.datepicker-days tbody td:last');
equal(target.text(), '5'); // Should be May 5
equal(this.picker.find('.datepicker-days thead th.switch').text(), 'April 2012');
// Updated internally on click
target.click();
equal(this.picker.find('.datepicker-days thead th.switch').text(), 'May 2012');
datesEqual(this.dp.viewDate, UTCDate(2012, 4, 5))
datesEqual(this.dp.date, UTCDate(2012, 4, 5))
// Re-rendered on click
target = this.picker.find('.datepicker-days tbody td:first');
equal(target.text(), '29'); // Should be Apr 29
});

View file

@ -1,33 +0,0 @@
module('Mouse Navigation (All)', {
setup: function(){
this.input = $('<input type="text">')
.appendTo('#qunit-fixture')
.datepicker({format: "dd-mm-yyyy"})
.focus(); // Activate for visibility checks
this.dp = this.input.data('datepicker')
this.picker = this.dp.picker;
},
teardown: function(){
this.picker.remove();
}
});
test('Clicking datepicker does not hide datepicker', function(){
ok(this.picker.is(':visible'), 'Picker is visible');
this.picker.trigger('mousedown');
ok(this.picker.is(':visible'), 'Picker is still visible');
});
test('Clicking outside datepicker hides datepicker', function(){
var $otherelement = $('<div />');
$('body').append($otherelement);
ok(this.picker.is(':visible'), 'Picker is visible');
this.input.trigger('click');
ok(this.picker.is(':visible'), 'Picker is still visible');
$otherelement.trigger('mousedown');
ok(this.picker.is(':not(:visible)'), 'Picker is hidden');
$otherelement.remove();
});

View file

@ -1,285 +0,0 @@
module('Options', {
setup: function(){},
teardown: function(){
return
$('#qunit-fixture *').each(function(){
var t = $(this);
if ('datepicker' in t.data())
t.data('datepicker').picker.remove();
});
}
});
test('Autoclose', function(){
var input = $('<input />')
.appendTo('#qunit-fixture')
.val('2012-03-05')
.datepicker({
format: 'yyyy-mm-dd',
autoclose: true
}),
dp = input.data('datepicker'),
picker = dp.picker,
target;
input.focus();
ok(picker.is(':visible'), 'Picker is visible');
target = picker.find('.datepicker-days tbody td:nth(7)');
equal(target.text(), '4'); // Mar 4
target.click();
ok(picker.is(':not(:visible)'), 'Picker is hidden');
datesEqual(dp.date, UTCDate(2012, 2, 4));
datesEqual(dp.viewDate, UTCDate(2012, 2, 4));
});
test('Startview: year view (integer)', function(){
var input = $('<input />')
.appendTo('#qunit-fixture')
.val('2012-03-05')
.datepicker({
format: 'yyyy-mm-dd',
startView: 1
}),
dp = input.data('datepicker'),
picker = dp.picker,
target;
input.focus();
ok(picker.find('.datepicker-days').is(':not(:visible)'), 'Days view hidden');
ok(picker.find('.datepicker-months').is(':visible'), 'Months view visible');
ok(picker.find('.datepicker-years').is(':not(:visible)'), 'Years view hidden');
});
test('Startview: year view (string)', function(){
var input = $('<input />')
.appendTo('#qunit-fixture')
.val('2012-03-05')
.datepicker({
format: 'yyyy-mm-dd',
startView: 'year'
}),
dp = input.data('datepicker'),
picker = dp.picker,
target;
input.focus();
ok(picker.find('.datepicker-days').is(':not(:visible)'), 'Days view hidden');
ok(picker.find('.datepicker-months').is(':visible'), 'Months view visible');
ok(picker.find('.datepicker-years').is(':not(:visible)'), 'Years view hidden');
});
test('Startview: decade view (integer)', function(){
var input = $('<input />')
.appendTo('#qunit-fixture')
.val('2012-03-05')
.datepicker({
format: 'yyyy-mm-dd',
startView: 2
}),
dp = input.data('datepicker'),
picker = dp.picker,
target;
input.focus();
ok(picker.find('.datepicker-days').is(':not(:visible)'), 'Days view hidden');
ok(picker.find('.datepicker-months').is(':not(:visible)'), 'Months view hidden');
ok(picker.find('.datepicker-years').is(':visible'), 'Years view visible');
});
test('Startview: decade view (string)', function(){
var input = $('<input />')
.appendTo('#qunit-fixture')
.val('2012-03-05')
.datepicker({
format: 'yyyy-mm-dd',
startView: 'decade'
}),
dp = input.data('datepicker'),
picker = dp.picker,
target;
input.focus();
ok(picker.find('.datepicker-days').is(':not(:visible)'), 'Days view hidden');
ok(picker.find('.datepicker-months').is(':not(:visible)'), 'Months view hidden');
ok(picker.find('.datepicker-years').is(':visible'), 'Years view visible');
});
test('Today Button: today button not default', function(){
var input = $('<input />')
.appendTo('#qunit-fixture')
.val('2012-03-05')
.datepicker({
format: 'yyyy-mm-dd'
}),
dp = input.data('datepicker'),
picker = dp.picker,
target;
input.focus();
ok(picker.find('.datepicker-days').is(':visible'), 'Days view visible');
ok(picker.find('.datepicker-days tfoot .today').is(':not(:visible)'), 'Today button not visible');
});
test('Today Button: today visibility when enabled', function(){
var input = $('<input />')
.appendTo('#qunit-fixture')
.val('2012-03-05')
.datepicker({
format: 'yyyy-mm-dd',
todayBtn: true
}),
dp = input.data('datepicker'),
picker = dp.picker,
target;
input.focus();
ok(picker.find('.datepicker-days').is(':visible'), 'Days view visible');
ok(picker.find('.datepicker-days tfoot .today').is(':visible'), 'Today button visible');
picker.find('.datepicker-days thead th.switch').click();
ok(picker.find('.datepicker-months').is(':visible'), 'Months view visible');
ok(picker.find('.datepicker-months tfoot .today').is(':visible'), 'Today button visible');
picker.find('.datepicker-months thead th.switch').click();
ok(picker.find('.datepicker-years').is(':visible'), 'Years view visible');
ok(picker.find('.datepicker-years tfoot .today').is(':visible'), 'Today button visible');
});
test('Today Button: data-api', function(){
var input = $('<input data-date-today-btn="true" />')
.appendTo('#qunit-fixture')
.val('2012-03-05')
.datepicker({
format: 'yyyy-mm-dd'
}),
dp = input.data('datepicker'),
picker = dp.picker,
target;
input.focus();
ok(picker.find('.datepicker-days').is(':visible'), 'Days view visible');
ok(picker.find('.datepicker-days tfoot .today').is(':visible'), 'Today button visible');
});
test('Today Button: moves to today\'s date', function(){
var input = $('<input />')
.appendTo('#qunit-fixture')
.val('2012-03-05')
.datepicker({
format: 'yyyy-mm-dd',
todayBtn: true
}),
dp = input.data('datepicker'),
picker = dp.picker,
target;
input.focus();
ok(picker.find('.datepicker-days').is(':visible'), 'Days view visible');
ok(picker.find('.datepicker-days tfoot .today').is(':visible'), 'Today button visible');
target = picker.find('.datepicker-days tfoot .today');
target.click();
var d = new Date(),
today = UTCDate(d.getFullYear(), d.getMonth(), d.getDate());
datesEqual(dp.viewDate, today);
datesEqual(dp.date, UTCDate(2012, 2, 5));
});
test('Today Button: "linked" selects today\'s date', function(){
var input = $('<input />')
.appendTo('#qunit-fixture')
.val('2012-03-05')
.datepicker({
format: 'yyyy-mm-dd',
todayBtn: "linked"
}),
dp = input.data('datepicker'),
picker = dp.picker,
target;
input.focus();
ok(picker.find('.datepicker-days').is(':visible'), 'Days view visible');
ok(picker.find('.datepicker-days tfoot .today').is(':visible'), 'Today button visible');
target = picker.find('.datepicker-days tfoot .today');
target.click();
var d = new Date(),
today = UTCDate(d.getFullYear(), d.getMonth(), d.getDate());
datesEqual(dp.viewDate, today);
datesEqual(dp.date, today);
});
test('Today Highlight: today\'s date is not highlighted by default', patch_date(function(Date){
Date.now = UTCDate(2012, 2, 15);
var input = $('<input />')
.appendTo('#qunit-fixture')
.val('2012-03-05')
.datepicker({
format: 'yyyy-mm-dd'
}),
dp = input.data('datepicker'),
picker = dp.picker,
target;
input.focus();
ok(picker.find('.datepicker-days').is(':visible'), 'Days view visible');
equal(picker.find('.datepicker-days thead .switch').text(), 'March 2012', 'Title is "March 2012"');
target = picker.find('.datepicker-days tbody td:contains(15)');
ok(!target.hasClass('today'), 'Today is not marked with "today" class');
target = picker.find('.datepicker-days tbody td:contains(14)');
ok(!target.hasClass('today'), 'Yesterday is not marked with "today" class');
target = picker.find('.datepicker-days tbody td:contains(16)');
ok(!target.hasClass('today'), 'Tomorrow is not marked with "today" class');
}));
test('Today Highlight: today\'s date is highlighted when not active', patch_date(function(Date){
Date.now = new Date(2012, 2, 15);
var input = $('<input />')
.appendTo('#qunit-fixture')
.val('2012-03-05')
.datepicker({
format: 'yyyy-mm-dd',
todayHighlight: true
}),
dp = input.data('datepicker'),
picker = dp.picker,
target;
input.focus();
ok(picker.find('.datepicker-days').is(':visible'), 'Days view visible');
equal(picker.find('.datepicker-days thead .switch').text(), 'March 2012', 'Title is "March 2012"');
target = picker.find('.datepicker-days tbody td:contains(15)');
ok(target.hasClass('today'), 'Today is marked with "today" class');
target = picker.find('.datepicker-days tbody td:contains(14)');
ok(!target.hasClass('today'), 'Yesterday is not marked with "today" class');
target = picker.find('.datepicker-days tbody td:contains(16)');
ok(!target.hasClass('today'), 'Tomorrow is not marked with "today" class');
}));
test('DaysOfWeekDisabled', function(){
var input = $('<input />')
.appendTo('#qunit-fixture')
.val('2012-10-26')
.datepicker({
format: 'yyyy-mm-dd',
daysOfWeekDisabled: '1,5'
}),
dp = input.data('datepicker'),
picker = dp.picker,
target;
input.focus();
target = picker.find('.datepicker-days tbody td:nth(22)');
ok(target.hasClass('disabled'), 'Day of week is disabled');
target = picker.find('.datepicker-days tbody td:nth(24)');
ok(!target.hasClass('disabled'), 'Day of week is enabled');
target = picker.find('.datepicker-days tbody td:nth(26)');
ok(target.hasClass('disabled'), 'Day of week is disabled');
});

View file

@ -1,47 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="assets/qunit.css" />
<script src="assets/qunit.js"></script>
<script src="assets/qunit-logging.js"></script> <!-- console.log for test failures -->
<script src="assets/coverage.js"></script>
<script src="assets/jquery-1.7.1.min.js"></script>
<script src="../js/bootstrap-datepicker.js"></script>
<style>
.datepicker {
/* Appended to body, abs-pos off the page */
position: absolute;
display: none;
top: -9999em;
left: -9999em;
}
</style>
<!-- Utilities -->
<script src="assets/utils.js"></script>
<script src="assets/mock.js"></script>
<!-- Test suites -->
<script src="suites/formats.js"></script>
<script src="suites/mouse_navigation/all.js"></script>
<script src="suites/mouse_navigation/2012.js"></script>
<script src="suites/mouse_navigation/2011.js"></script>
<script src="suites/keyboard_navigation/all.js"></script>
<script src="suites/keyboard_navigation/2012.js"></script>
<script src="suites/keyboard_navigation/2011.js"></script>
<script src="suites/component.js"></script>
<script src="suites/events.js"></script>
<script src="suites/options.js"></script>
<script src="suites/inline.js"></script>
<script src="suites/calendar-weeks.js"></script>
</head>
<body>
<h1 id="qunit-header">bootstrap-datepicker</h1>
<h2 id="qunit-banner"></h2>
<div id="qunit-testrunner-toolbar"></div>
<h2 id="qunit-userAgent"></h2>
<ol id="qunit-tests"></ol>
<div id="qunit-fixture"></div>
</body>
</html>

View file

@ -1,24 +0,0 @@
# ALWAYS IGNORE
# -------------
*.diff
*.err
*.orig
*.log
*.rej
*.swo
*.swp
*.vi
*~
# OS & EDITOR FOLDERS
# -------------------
.DS_Store
thumbs.db
# LOCAL TEST PAGE
# ---------------
test.html

View file

@ -1 +0,0 @@
ghbtns.com

View file

@ -1,154 +0,0 @@
UNOFFICIAL GITHUB BUTTONS
=========================
Showcase your GitHub (repo's) success with these three simple, static buttons featuring dynamic watch, fork and follower counts and a link to your GitHub repo or profile page.
To get started, checkout http://ghbtns.com!
Usage
-----
These buttons are hosted via GitHub Pages, meaning all you need to do is include an iframe and you're set. Once included, you can configure it with various options. Here's the include:
``` html
<iframe src="http://ghbtns.com/github-btn.html?user=USERNAME&repo=REPONAME&type=BUTTONTYPE"
allowtransparency="true" frameborder="0" scrolling="0" width="62" height="20"></iframe>
```
### Requirements
`user`<br>
GitHub username that owns the repo<br>
`repo`<br>
GitHub repository to pull the forks and watchers counts
`type`<br>
Type of button to show: `watch` or `fork` or `follow`
### Optional
`count`<br>
Show the optional watchers or forks count: *none* by default or `true`
`size`<br>
Optional flag for using a larger button: *none* by default or `large`
Examples
--------
**Basic Watch button**
``` html
<iframe src="http://ghbtns.com/github-btn.html?user=markdotto&repo=github-buttons&type=watch"
allowtransparency="true" frameborder="0" scrolling="0" width="62" height="20"></iframe>
```
**Basic Fork button**
``` html
<iframe src="http://ghbtns.com/github-btn.html?user=markdotto&repo=github-buttons&type=fork"
allowtransparency="true" frameborder="0" scrolling="0" width="53" height="20"></iframe>
```
**Basic Follow button**
``` html
<iframe src="http://ghbtns.com/github-btn.html?user=markdotto&type=follow"
allowtransparency="true" frameborder="0" scrolling="0" width="132" height="20"></iframe>
```
**Watch with count**
``` html
<iframe src="http://ghbtns.com/github-btn.html?user=markdotto&repo=github-buttons&type=watch&count=true"
allowtransparency="true" frameborder="0" scrolling="0" width="110" height="20"></iframe>
```
**Fork with count**
``` html
<iframe src="http://ghbtns.com/github-btn.html?user=markdotto&repo=github-buttons&type=fork&count=true"
allowtransparency="true" frameborder="0" scrolling="0" width="95" height="20"></iframe>
```
**Follow with count**
``` html
<iframe src="http://ghbtns.com/github-btn.html?user=markdotto&type=follow&count=true"
allowtransparency="true" frameborder="0" scrolling="0" width="165" height="20"></iframe>
```
**Large Watch button with count**
``` html
<iframe src="http://ghbtns.com/github-btn.html?user=markdotto&repo=github-buttons&type=watch&count=true&size=large"
allowtransparency="true" frameborder="0" scrolling="0" width="170" height="30"></iframe>
```
Limitations
-----------
For the first version, functionality is limited and some concessions were made:
- Width and height must be specificed for all buttons (which actually adds some control for those with OCD like myself).
- All attributes must be passed through via URL parameters.
- CSS and javascript are all included in the same HTML file to reduce complexity and requests.
**Usage with SSL**
In order to avoid `insecure content` warnings when using GitHub Buttons on a page behind an SSL certificate, simply host a copy of the `github-btn.html` file on your secure directory and substitute your domain in the iframe include:
``` html
<iframe src="https://YOURDOMAIN.com/github-btn.html?user=USERNAME&repo=REPONAME&type=BUTTONTYPE"
allowtransparency="true" frameborder="0" scrolling="0" width="62" height="20"></iframe>
```
More refinement and functionalty is planned with open-sourcing--any help is always appreciated!
Bug tracker
-----------
Have a bug? Please create an issue here on GitHub at https://github.com/markdotto/github-buttons/issues.
Twitter account
---------------
Keep up to date on announcements and more by following Mark on Twitter, <a href="http://twitter.com/mdo">@mdo</a>.
Authors
-------
**Mark Otto**
+ http://twitter.com/mdo
+ http://github.com/markdotto
Copyright and license
---------------------
Copyright 2011 Mark Otto.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this work except in compliance with the License.
You may obtain a copy of the License in the LICENSE file, or at:
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

View file

@ -1,45 +0,0 @@
html,body{margin:0;padding:0;}
h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,cite,code,del,dfn,em,img,q,s,samp,small,strike,strong,sub,sup,tt,var,dd,dl,dt,li,ol,ul,fieldset,form,label,legend,button,table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;border:0;font-weight:normal;font-style:normal;font-size:100%;line-height:1;font-family:inherit;}
table{border-collapse:collapse;border-spacing:0;}
ol,ul{list-style:none;}
q:before,q:after,blockquote:before,blockquote:after{content:"";}
html{overflow-y:scroll;font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;}
a:focus{outline:thin dotted;}
a:hover,a:active{outline:0;}
article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block;}
audio,canvas,video{display:inline-block;*display:inline;*zoom:1;}
audio:not([controls]){display:none;}
sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline;}
sup{top:-0.5em;}
sub{bottom:-0.25em;}
img{border:0;-ms-interpolation-mode:bicubic;}
button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;}
button,input{line-height:normal;*overflow:visible;}
button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0;}
button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button;}
input[type="search"]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;}
input[type="search"]::-webkit-search-decoration{-webkit-appearance:none;}
textarea{overflow:auto;vertical-align:top;}
body{background-color:#ffffff;margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:18px;color:#404040;}
.container{width:940px;margin-left:auto;margin-right:auto;zoom:1;}.container:before,.container:after{display:table;content:"";zoom:1;*display:inline;}
.container:after{clear:both;}
a{color:#0069d6;text-decoration:none;line-height:inherit;font-weight:inherit;}a:hover{color:#00438a;text-decoration:underline;}
p{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:18px;margin-bottom:9px;}p small{font-size:11px;color:#bfbfbf;}
h1,h2,h3,h4,h5,h6{font-weight:bold;color:#404040;text-rendering:optimizelegibility;}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{color:#bfbfbf;}
h1{font-size:30px;line-height:36px;}h1 small{font-size:18px;}
h2{font-size:24px;line-height:36px;}h2 small{font-size:18px;}
h3{line-height:27px;font-size:18px;}h3 small{font-size:14px;}
h4{font-size:16px;line-height:36px;}h4 small{font-size:12px;}
h5{font-size:14px;line-height:18px;}
h6{font-size:13px;line-height:18px;color:#bfbfbf;text-transform:uppercase;}
ul,ol{margin:0 0 9px 25px;}
ul ul,ul ol,ol ol,ol ul{margin-bottom:0;}
ul{list-style:disc;}
ol{list-style:decimal;}
li{line-height:18px;color:#404040;}
hr{margin:20px 0 19px;border:0;border-bottom:1px solid #eee;}
strong{font-style:inherit;font-weight:bold;}
em{font-style:italic;font-weight:inherit;line-height:inherit;}
.muted{color:#bfbfbf;}
abbr{font-size:90%;text-transform:uppercase;border-bottom:1px dotted #ddd;cursor:help;}
@media (max-width: 480px){.container{width:auto;padding:0 15px;}}@media (min-width: 480px) and (max-width: 768px){.container{width:auto;padding:0 10px;}}

File diff suppressed because one or more lines are too long

View file

@ -1,76 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>The Unofficial GitHub Watch &amp; Fork Buttons</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="author" content="Mark Otto">
<meta name="description" content="A set of static buttons with dynamic watch and fork counts for any repo hosted on GitHub.">
<!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
<!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<!-- Le styles -->
<link href="bootstrap.min.css" rel="stylesheet">
<link href="page.css" rel="stylesheet">
</head>
<body>
<div class="container">
<header class="masthead">
<div class="tweet-button">
<a href="https://twitter.com/share" class="twitter-share-button" data-count="none" data-via="mdo">Tweet</a><script type="text/javascript" src="//platform.twitter.com/widgets.js"></script>
</div>
<p class="introducing">Introducing the unofficial</p>
<h1>GitHub Buttons</h1>
<p class="tagline">Showcase your GitHub repo's success with these three simple, static buttons featuring dynamic watch, fork, and follower counts.</p>
</header>
<section class="body">
<div class="about-buttons clearfix">
<div class="about-star">
<h2>Star</h2>
<iframe src="github-btn.html?user=twitter&repo=bootstrap&type=watch&count=true&size=large" allowtransparency="true" frameborder="0" scrolling="0" width="152px" height="30px"></iframe>
<ul class="downlow">
<li>Real-time stars count</li>
<li>Link to any public GitHub repo</li>
<li>Two available sizes</li>
</ul>
</div>
<div class="about-fork">
<h2>Fork</h2>
<iframe src="github-btn.html?user=twitter&repo=bootstrap&type=fork&count=true&size=large" allowtransparency="true" frameborder="0" scrolling="0" width="146px" height="30px"></iframe>
<ul class="downlow">
<li>Real-time forks count</li>
<li>Link to any public GitHub repo</li>
<li>Two available sizes</li>
</ul>
</div>
<div class="about-follow">
<h2>Follow</h2>
<iframe src="github-btn.html?user=markdotto&type=follow&count=true&size=large" allowtransparency="true" frameborder="0" scrolling="0" width="246px" height="30px"></iframe>
<ul class="downlow">
<li>Real-time followers count</li>
<li>Link to any public GitHub user</li>
<li>Two available sizes</li>
</ul>
</div>
</div>
<p class="download">
<a href="http://github.com/markdotto/github-buttons" class="primary btn">Download on GitHub</a>
</p>
</section>
<footer class="footer">
<p>
<iframe src="github-btn.html?user=markdotto&repo=github-buttons&type=watch&count=true" allowtransparency="true" frameborder="0" scrolling="0" width="85px" height="20px"></iframe>
<iframe src="github-btn.html?user=markdotto&repo=github-buttons&type=fork&count=true" allowtransparency="true" frameborder="0" scrolling="0" width="95px" height="20px"></iframe>
</p>
<p>Designed and built by <a href="http://twitter.com/mdo" target="_blank">@mdo</a> with help from <a href="https://github.com/markdotto/github-buttons/graphs/contributors" target="_blank">the contributors</a>.</p>
<p>Code licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0" target="_blank">Apache License v2.0</a>.</p>
</footer>
</div>
</body>
</html>

View file

@ -1,212 +0,0 @@
/* DOCS RESET
-------------------------------------------------- */
body {
padding: 40px 20px;
color: #555;
text-shadow: 0 1px 0 #fff;
background-color: #fff;
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#eee), color-stop(25%, #fff), to(#fff));
background-image: -webkit-linear-gradient(#eee, #fff 25%, #fff);
background-image: -moz-linear-gradient(top, #eee, #fff 25%, #fff);
background-image: -ms-linear-gradient(#eee, #fff 25%, #fff);
background-image: -o-linear-gradient(#eee, #fff 25%, #fff);
background-image: linear-gradient(#eee, #fff 25%, #fff);
background-repeat: no-repeat;
background-attachment: fixed;
overflow: auto;
}
body,
p,
li {
font-size: 14px;
line-height: 20px;
}
h1, h2, h3, h4, h5, h6 {
text-rendering: optimizeLegibility;
}
/* Set width of site */
.container {
width: auto;
max-width: 820px;
}
/* Clearfix */
.clearfix:before,
.clearfix:after {
content:"";
display:table;
}
.clearfix:after {
clear:both;
}
/* Change up the buttons to match GitHub */
.primary.btn {
color: #fff;
text-decoration: none;
text-shadow: 0 -1px 0 rgba(0,0,0,.5);
background-color: #3072b3; /* Old browsers */
background-repeat: repeat-x; /* Repeat the gradient */
background-image: -moz-linear-gradient(top, #599bdc 0%, #3072b3 100%); /* FF3.6+ */
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#599bdc), color-stop(100%,#3072b3)); /* Chrome,Safari4+ */
background-image: -webkit-linear-gradient(top, #599bdc 0%,#3072b3 100%); /* Chrome 10+,Safari 5.1+ */
background-image: -ms-linear-gradient(top, #599bdc 0%,#3072b3 100%); /* IE10+ */
background-image: -o-linear-gradient(top, #599bdc 0%,#3072b3 100%); /* Opera 11.10+ */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#599bdc', endColorstr='#3072b3',GradientType=0 ); /* IE6-9 */
background-image: linear-gradient(top, #599bdc 0%,#3072b3 100%); /* W3C */
border: 1px solid #2967a4;
-webkit-transition: none;
-moz-transition: none;
transition: none;
-webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 2px rgba(0,0,0,.2);
-moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 2px rgba(0,0,0,.2);
box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 2px rgba(0,0,0,.2);
}
.primary.btn:hover {
background-position: 0 -15px;
}
.primary.btn:active {
background-image: none;
background-color: #3072b3; /* Old browsers */
-webkit-box-shadow: inset 0 5px 10px rgba(0,0,0,.125), 0 1px 2px rgba(0,0,0,.2);
-moz-box-shadow: inset 0 5px 10px rgba(0,0,0,.125), 0 1px 2px rgba(0,0,0,.2);
box-shadow: inset 0 5px 10px rgba(0,0,0,.125), 0 1px 2px rgba(0,0,0,.2);
}
/* MASTHEAD
-------------------------------------------------- */
.masthead {
margin-bottom: 30px;
}
.masthead h1,
.masthead p {
text-align: center;
}
.masthead h1 {
margin-bottom: 10px;
font-size: 80px;
line-height: 1;
}
.masthead p {
font-size: 18px;
line-height: 30px;
}
.masthead .introducing {
margin-bottom: 20px;
color: #999;
}
.masthead .tagline {
margin-bottom: 30px;
font-size: 24px;
}
.masthead .tweet-button {
width: 55px;
margin: 0 auto 20px;
}
/* BODY
-------------------------------------------------- */
/* Two-column buttons */
.about-buttons {
text-align: center;
}
.about-star,
.about-fork,
.about-follow {
width: 32%;
float: left;
}
.about-buttons div + div {
margin-left: 2%;
}
.about-buttons ul {
margin-left: 0;
list-style: none;
}
.about-buttons iframe {
margin: 10px 0;
}
/* Download button */
.download {
margin: 30px 0 50px;
text-align: center;
}
.download .btn {
font-size: 20px;
padding: 12px 24px;
-webkit-border-radius: 6px;
-moz-border-radius: 6px;
border-radius: 6px;
}
/* FOOTER
-------------------------------------------------- */
.footer {
margin-top: 40px;
padding: 0;
border-top: 0;
}
.footer p {
text-align: center;
}
iframe + iframe {
margin-left: 10px;
}
/* MISC
-------------------------------------------------- */
/* Small lines after each section */
.masthead:after,
.body:after {
display: block;
content: '';
width: 100px;
height: 1px;
margin: 0 auto;
background-color: #eee;
}
/* RESPONSIVE
-------------------------------------------------- */
@media (max-width: 840px) {
.masthead h1 {
font-size: 60px;
}
.masthead p,
.masthead .tagline {
font-size: 18px;
line-height: 24px;
}
.about-watch,
.about-fork,
.about-follow {
width: auto;
float: none;
margin-bottom: 20px;
}
.about-buttons div + div {
margin-left: 0;
}
}
@media (max-width: 480px) {
.masthead h1 {
font-size: 40px;
}
.masthead p,
.masthead .tagline {
font-size: 16px;
line-height: 20px;
}
}

View file

@ -45,7 +45,7 @@
<table>
<tr>
<td><!-- Github -->
<iframe src="/github-btns/github-btn.html?user=lefnire&repo=habitrpg&type=watch&count=true"
<iframe src="/vendor/github-buttons/github-btn.html?user=lefnire&repo=habitrpg&type=watch&count=true"
allowtransparency="true" frameborder="0" scrolling="0" width="85px" height="20px"></iframe>
</td>
<td>

1
public/vendor/github-buttons vendored Submodule

@ -0,0 +1 @@
Subproject commit 49e5edfa4b0813d891fc0b19f4773dc20c1a54e8

View file

@ -454,7 +454,7 @@ do a find for the string after "→"
{#if equal(_view.nodeEnv, 'production')}
<table class=pull-right><tr>
<td><!-- Github -->
<iframe src="/github-btns/github-btn.html?user=lefnire&repo=habitrpg&type=watch&count=true"
<iframe src="/vendor/github-buttons/github-btn.html?user=lefnire&repo=habitrpg&type=watch&count=true"
allowtransparency="true" frameborder="0" scrolling="0" width="85px" height="20px"></iframe>
</td>
<td>