Merge branch 'dev' of git://github.com/adeg/x-editable into dev
This commit is contained in:
		
							
								
								
									
										9
									
								
								grunt.js
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								grunt.js
									
									
									
									
									
								
							@@ -15,9 +15,15 @@ function getFiles() {
 | 
			
		||||
                inputs+'date/date.js', 
 | 
			
		||||
                inputs+'date/datefield.js', 
 | 
			
		||||
                inputs+'date/bootstrap-datepicker/js/bootstrap-datepicker.js',
 | 
			
		||||
                inputs+'datetime/datetime.js', 
 | 
			
		||||
                inputs+'datetime/datetimefield.js', 
 | 
			
		||||
                inputs+'datetime/bootstrap-datetimepicker/js/bootstrap-datetimepicker.js',
 | 
			
		||||
                inputs+'typeahead.js'
 | 
			
		||||
                ], 
 | 
			
		||||
            css: [inputs+'date/bootstrap-datepicker/css/datepicker.css']
 | 
			
		||||
            css: [
 | 
			
		||||
                inputs+'date/bootstrap-datepicker/css/datepicker.css',
 | 
			
		||||
                inputs+'datetime/bootstrap-datetimepicker/css/datetimepicker.css'
 | 
			
		||||
                ]
 | 
			
		||||
        },  
 | 
			
		||||
        jqueryui: {
 | 
			
		||||
            form: [forms+'editable-form-jqueryui.js'],
 | 
			
		||||
@@ -165,6 +171,7 @@ module.exports = function(grunt) {
 | 
			
		||||
              'src/inputs/*.js', 
 | 
			
		||||
              'src/inputs/date/*.js',
 | 
			
		||||
              'src/inputs/dateui/*.js',
 | 
			
		||||
              'src/inputs/datetime/*.js',
 | 
			
		||||
              'src/inputs/combodate/*.js',
 | 
			
		||||
              'src/inputs/select2/*.js',
 | 
			
		||||
              
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,342 @@
 | 
			
		||||
/*!
 | 
			
		||||
 * Datetimepicker 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
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
.datetimepicker {
 | 
			
		||||
  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;
 | 
			
		||||
	}*/
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
.datetimepicker-inline {
 | 
			
		||||
  width: 220px;
 | 
			
		||||
}
 | 
			
		||||
.datetimepicker.datetimepicker-rtl {
 | 
			
		||||
  direction: rtl;
 | 
			
		||||
}
 | 
			
		||||
.datetimepicker.datetimepicker-rtl table tr td span {
 | 
			
		||||
  float: right;
 | 
			
		||||
}
 | 
			
		||||
.datetimepicker-dropdown, .datetimepicker-dropdown-left {
 | 
			
		||||
  top: 0;
 | 
			
		||||
  left: 0;
 | 
			
		||||
}
 | 
			
		||||
.datetimepicker-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;
 | 
			
		||||
}
 | 
			
		||||
.datetimepicker-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;
 | 
			
		||||
}
 | 
			
		||||
.datetimepicker-dropdown-left: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;
 | 
			
		||||
  right: 6px;
 | 
			
		||||
}
 | 
			
		||||
.datetimepicker-dropdown-left:after {
 | 
			
		||||
  content: '';
 | 
			
		||||
  display: inline-block;
 | 
			
		||||
  border-left: 6px solid transparent;
 | 
			
		||||
  border-right: 6px solid transparent;
 | 
			
		||||
  border-bottom: 6px solid #ffffff;
 | 
			
		||||
  position: absolute;
 | 
			
		||||
  top: -6px;
 | 
			
		||||
  right: 7px;
 | 
			
		||||
}
 | 
			
		||||
.datetimepicker > div {
 | 
			
		||||
  display: none;
 | 
			
		||||
}
 | 
			
		||||
.datetimepicker.minutes div.datetimepicker-minutes {
 | 
			
		||||
    display: block;
 | 
			
		||||
}
 | 
			
		||||
.datetimepicker.hours div.datetimepicker-hours {
 | 
			
		||||
    display: block;
 | 
			
		||||
}
 | 
			
		||||
.datetimepicker.days div.datetimepicker-days {
 | 
			
		||||
    display: block;
 | 
			
		||||
}
 | 
			
		||||
.datetimepicker.months div.datetimepicker-months {
 | 
			
		||||
  display: block;
 | 
			
		||||
}
 | 
			
		||||
.datetimepicker.years div.datetimepicker-years {
 | 
			
		||||
  display: block;
 | 
			
		||||
}
 | 
			
		||||
.datetimepicker table {
 | 
			
		||||
  margin: 0;
 | 
			
		||||
}
 | 
			
		||||
.datetimepicker  td,
 | 
			
		||||
.datetimepicker th {
 | 
			
		||||
  text-align: center;
 | 
			
		||||
  width: 20px;
 | 
			
		||||
  height: 20px;
 | 
			
		||||
  -webkit-border-radius: 4px;
 | 
			
		||||
  -moz-border-radius: 4px;
 | 
			
		||||
  border-radius: 4px;
 | 
			
		||||
  border: none;
 | 
			
		||||
}
 | 
			
		||||
.table-striped .datetimepicker table tr td,
 | 
			
		||||
.table-striped .datetimepicker table tr th {
 | 
			
		||||
  background-color: transparent;
 | 
			
		||||
}
 | 
			
		||||
.datetimepicker table tr td.minute:hover {
 | 
			
		||||
    background: #eeeeee;
 | 
			
		||||
    cursor: pointer;
 | 
			
		||||
}
 | 
			
		||||
.datetimepicker table tr td.hour:hover {
 | 
			
		||||
    background: #eeeeee;
 | 
			
		||||
    cursor: pointer;
 | 
			
		||||
}
 | 
			
		||||
.datetimepicker table tr td.day:hover {
 | 
			
		||||
    background: #eeeeee;
 | 
			
		||||
    cursor: pointer;
 | 
			
		||||
}
 | 
			
		||||
.datetimepicker table tr td.old,
 | 
			
		||||
.datetimepicker table tr td.new {
 | 
			
		||||
  color: #999999;
 | 
			
		||||
}
 | 
			
		||||
.datetimepicker table tr td.disabled,
 | 
			
		||||
.datetimepicker table tr td.disabled:hover {
 | 
			
		||||
  background: none;
 | 
			
		||||
  color: #999999;
 | 
			
		||||
  cursor: default;
 | 
			
		||||
}
 | 
			
		||||
.datetimepicker table tr td.today,
 | 
			
		||||
.datetimepicker table tr td.today:hover,
 | 
			
		||||
.datetimepicker table tr td.today.disabled,
 | 
			
		||||
.datetimepicker 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);
 | 
			
		||||
}
 | 
			
		||||
.datetimepicker table tr td.today:hover,
 | 
			
		||||
.datetimepicker table tr td.today:hover:hover,
 | 
			
		||||
.datetimepicker table tr td.today.disabled:hover,
 | 
			
		||||
.datetimepicker table tr td.today.disabled:hover:hover,
 | 
			
		||||
.datetimepicker table tr td.today:active,
 | 
			
		||||
.datetimepicker table tr td.today:hover:active,
 | 
			
		||||
.datetimepicker table tr td.today.disabled:active,
 | 
			
		||||
.datetimepicker table tr td.today.disabled:hover:active,
 | 
			
		||||
.datetimepicker table tr td.today.active,
 | 
			
		||||
.datetimepicker table tr td.today:hover.active,
 | 
			
		||||
.datetimepicker table tr td.today.disabled.active,
 | 
			
		||||
.datetimepicker table tr td.today.disabled:hover.active,
 | 
			
		||||
.datetimepicker table tr td.today.disabled,
 | 
			
		||||
.datetimepicker table tr td.today:hover.disabled,
 | 
			
		||||
.datetimepicker table tr td.today.disabled.disabled,
 | 
			
		||||
.datetimepicker table tr td.today.disabled:hover.disabled,
 | 
			
		||||
.datetimepicker table tr td.today[disabled],
 | 
			
		||||
.datetimepicker table tr td.today:hover[disabled],
 | 
			
		||||
.datetimepicker table tr td.today.disabled[disabled],
 | 
			
		||||
.datetimepicker table tr td.today.disabled:hover[disabled] {
 | 
			
		||||
  background-color: #fdf59a;
 | 
			
		||||
}
 | 
			
		||||
.datetimepicker table tr td.today:active,
 | 
			
		||||
.datetimepicker table tr td.today:hover:active,
 | 
			
		||||
.datetimepicker table tr td.today.disabled:active,
 | 
			
		||||
.datetimepicker table tr td.today.disabled:hover:active,
 | 
			
		||||
.datetimepicker table tr td.today.active,
 | 
			
		||||
.datetimepicker table tr td.today:hover.active,
 | 
			
		||||
.datetimepicker table tr td.today.disabled.active,
 | 
			
		||||
.datetimepicker table tr td.today.disabled:hover.active {
 | 
			
		||||
  background-color: #fbf069 \9;
 | 
			
		||||
}
 | 
			
		||||
.datetimepicker table tr td.active,
 | 
			
		||||
.datetimepicker table tr td.active:hover,
 | 
			
		||||
.datetimepicker table tr td.active.disabled,
 | 
			
		||||
.datetimepicker 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);
 | 
			
		||||
}
 | 
			
		||||
.datetimepicker table tr td.active:hover,
 | 
			
		||||
.datetimepicker table tr td.active:hover:hover,
 | 
			
		||||
.datetimepicker table tr td.active.disabled:hover,
 | 
			
		||||
.datetimepicker table tr td.active.disabled:hover:hover,
 | 
			
		||||
.datetimepicker table tr td.active:active,
 | 
			
		||||
.datetimepicker table tr td.active:hover:active,
 | 
			
		||||
.datetimepicker table tr td.active.disabled:active,
 | 
			
		||||
.datetimepicker table tr td.active.disabled:hover:active,
 | 
			
		||||
.datetimepicker table tr td.active.active,
 | 
			
		||||
.datetimepicker table tr td.active:hover.active,
 | 
			
		||||
.datetimepicker table tr td.active.disabled.active,
 | 
			
		||||
.datetimepicker table tr td.active.disabled:hover.active,
 | 
			
		||||
.datetimepicker table tr td.active.disabled,
 | 
			
		||||
.datetimepicker table tr td.active:hover.disabled,
 | 
			
		||||
.datetimepicker table tr td.active.disabled.disabled,
 | 
			
		||||
.datetimepicker table tr td.active.disabled:hover.disabled,
 | 
			
		||||
.datetimepicker table tr td.active[disabled],
 | 
			
		||||
.datetimepicker table tr td.active:hover[disabled],
 | 
			
		||||
.datetimepicker table tr td.active.disabled[disabled],
 | 
			
		||||
.datetimepicker table tr td.active.disabled:hover[disabled] {
 | 
			
		||||
  background-color: #0044cc;
 | 
			
		||||
}
 | 
			
		||||
.datetimepicker table tr td.active:active,
 | 
			
		||||
.datetimepicker table tr td.active:hover:active,
 | 
			
		||||
.datetimepicker table tr td.active.disabled:active,
 | 
			
		||||
.datetimepicker table tr td.active.disabled:hover:active,
 | 
			
		||||
.datetimepicker table tr td.active.active,
 | 
			
		||||
.datetimepicker table tr td.active:hover.active,
 | 
			
		||||
.datetimepicker table tr td.active.disabled.active,
 | 
			
		||||
.datetimepicker table tr td.active.disabled:hover.active {
 | 
			
		||||
  background-color: #003399 \9;
 | 
			
		||||
}
 | 
			
		||||
.datetimepicker 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;
 | 
			
		||||
}
 | 
			
		||||
.datetimepicker .datetimepicker-hours span {
 | 
			
		||||
  height: 26px;
 | 
			
		||||
  line-height: 26px;
 | 
			
		||||
}
 | 
			
		||||
.datetimepicker .datetimepicker-hours table tr td span.hour_am,
 | 
			
		||||
.datetimepicker .datetimepicker-hours table tr td span.hour_pm {
 | 
			
		||||
  width: 14.6%;
 | 
			
		||||
}
 | 
			
		||||
.datetimepicker .datetimepicker-hours fieldset legend,
 | 
			
		||||
.datetimepicker .datetimepicker-minutes fieldset legend {
 | 
			
		||||
  margin-bottom: inherit;
 | 
			
		||||
  line-height: 30px;
 | 
			
		||||
}
 | 
			
		||||
.datetimepicker .datetimepicker-minutes span {
 | 
			
		||||
  height: 26px;
 | 
			
		||||
  line-height: 26px;
 | 
			
		||||
}
 | 
			
		||||
.datetimepicker table tr td span:hover {
 | 
			
		||||
  background: #eeeeee;
 | 
			
		||||
}
 | 
			
		||||
.datetimepicker table tr td span.disabled,
 | 
			
		||||
.datetimepicker table tr td span.disabled:hover {
 | 
			
		||||
  background: none;
 | 
			
		||||
  color: #999999;
 | 
			
		||||
  cursor: default;
 | 
			
		||||
}
 | 
			
		||||
.datetimepicker table tr td span.active,
 | 
			
		||||
.datetimepicker table tr td span.active:hover,
 | 
			
		||||
.datetimepicker table tr td span.active.disabled,
 | 
			
		||||
.datetimepicker 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);
 | 
			
		||||
}
 | 
			
		||||
.datetimepicker table tr td span.active:hover,
 | 
			
		||||
.datetimepicker table tr td span.active:hover:hover,
 | 
			
		||||
.datetimepicker table tr td span.active.disabled:hover,
 | 
			
		||||
.datetimepicker table tr td span.active.disabled:hover:hover,
 | 
			
		||||
.datetimepicker table tr td span.active:active,
 | 
			
		||||
.datetimepicker table tr td span.active:hover:active,
 | 
			
		||||
.datetimepicker table tr td span.active.disabled:active,
 | 
			
		||||
.datetimepicker table tr td span.active.disabled:hover:active,
 | 
			
		||||
.datetimepicker table tr td span.active.active,
 | 
			
		||||
.datetimepicker table tr td span.active:hover.active,
 | 
			
		||||
.datetimepicker table tr td span.active.disabled.active,
 | 
			
		||||
.datetimepicker table tr td span.active.disabled:hover.active,
 | 
			
		||||
.datetimepicker table tr td span.active.disabled,
 | 
			
		||||
.datetimepicker table tr td span.active:hover.disabled,
 | 
			
		||||
.datetimepicker table tr td span.active.disabled.disabled,
 | 
			
		||||
.datetimepicker table tr td span.active.disabled:hover.disabled,
 | 
			
		||||
.datetimepicker table tr td span.active[disabled],
 | 
			
		||||
.datetimepicker table tr td span.active:hover[disabled],
 | 
			
		||||
.datetimepicker table tr td span.active.disabled[disabled],
 | 
			
		||||
.datetimepicker table tr td span.active.disabled:hover[disabled] {
 | 
			
		||||
  background-color: #0044cc;
 | 
			
		||||
}
 | 
			
		||||
.datetimepicker table tr td span.active:active,
 | 
			
		||||
.datetimepicker table tr td span.active:hover:active,
 | 
			
		||||
.datetimepicker table tr td span.active.disabled:active,
 | 
			
		||||
.datetimepicker table tr td span.active.disabled:hover:active,
 | 
			
		||||
.datetimepicker table tr td span.active.active,
 | 
			
		||||
.datetimepicker table tr td span.active:hover.active,
 | 
			
		||||
.datetimepicker table tr td span.active.disabled.active,
 | 
			
		||||
.datetimepicker table tr td span.active.disabled:hover.active {
 | 
			
		||||
  background-color: #003399 \9;
 | 
			
		||||
}
 | 
			
		||||
.datetimepicker table tr td span.old {
 | 
			
		||||
  color: #999999;
 | 
			
		||||
}
 | 
			
		||||
.datetimepicker th.switch {
 | 
			
		||||
  width: 145px;
 | 
			
		||||
}
 | 
			
		||||
.datetimepicker thead tr:first-child th,
 | 
			
		||||
.datetimepicker tfoot tr:first-child th {
 | 
			
		||||
  cursor: pointer;
 | 
			
		||||
}
 | 
			
		||||
.datetimepicker thead tr:first-child th:hover,
 | 
			
		||||
.datetimepicker tfoot tr:first-child th:hover {
 | 
			
		||||
  background: #eeeeee;
 | 
			
		||||
}
 | 
			
		||||
.input-append.date .add-on i,
 | 
			
		||||
.input-prepend.date .add-on i {
 | 
			
		||||
  cursor: pointer;
 | 
			
		||||
  width: 14px;
 | 
			
		||||
  height: 14px;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1453
									
								
								src/inputs/datetime/bootstrap-datetimepicker/js/bootstrap-datetimepicker.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1453
									
								
								src/inputs/datetime/bootstrap-datetimepicker/js/bootstrap-datetimepicker.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										204
									
								
								src/inputs/datetime/datetime.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										204
									
								
								src/inputs/datetime/datetime.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,204 @@
 | 
			
		||||
/**
 | 
			
		||||
Bootstrap-datetimepicker.  
 | 
			
		||||
Description and examples: https://github.com/smalot/bootstrap-datetimepicker.  
 | 
			
		||||
For **i18n** you should include js file from here: https://github.com/smalot/bootstrap-datetimepicker/tree/master/js/locales
 | 
			
		||||
and set `language` option.  
 | 
			
		||||
 | 
			
		||||
@class datetime
 | 
			
		||||
@extends abstractinput
 | 
			
		||||
@final
 | 
			
		||||
@example
 | 
			
		||||
<a href="#" id="last_seen" data-type="datetime" data-pk="1" data-url="/post" data-original-title="Select date & time">15/03/2013 12:45</a>
 | 
			
		||||
<script>
 | 
			
		||||
$(function(){
 | 
			
		||||
    $('#last_seen').editable({
 | 
			
		||||
        format: 'yyyy-mm-dd hh:ii:ss',    
 | 
			
		||||
        viewformat: 'dd/mm/yyyy hh:ii:ss',    
 | 
			
		||||
        datetimepicker: {
 | 
			
		||||
                weekStart: 1
 | 
			
		||||
           }
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
});
 | 
			
		||||
</script>
 | 
			
		||||
**/
 | 
			
		||||
(function ($) {
 | 
			
		||||
 | 
			
		||||
    var DateTime = function (options) {
 | 
			
		||||
        this.init('datetime', options, DateTime.defaults);
 | 
			
		||||
        this.initPicker(options, DateTime.defaults);
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    $.fn.editableutils.inherit(DateTime, $.fn.editabletypes.abstractinput);
 | 
			
		||||
    
 | 
			
		||||
    $.extend(DateTime.prototype, {
 | 
			
		||||
        initPicker: function(options, defaults) {
 | 
			
		||||
            //'format' is set directly from settings or data-* attributes
 | 
			
		||||
 | 
			
		||||
            //by default viewformat equals to format
 | 
			
		||||
            if(!this.options.viewformat) {
 | 
			
		||||
                this.options.viewformat = this.options.format;
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            //overriding datetimepicker config (as by default jQuery extend() is not recursive)
 | 
			
		||||
            //since 1.4 datetimepicker internally uses viewformat instead of format. Format is for submit only
 | 
			
		||||
            this.options.datetimepicker = $.extend({}, defaults.datetimepicker, options.datetimepicker, {
 | 
			
		||||
                format: this.options.viewformat
 | 
			
		||||
            });
 | 
			
		||||
            
 | 
			
		||||
            //language
 | 
			
		||||
            this.options.datetimepicker.language = this.options.datetimepicker.language || 'en'; 
 | 
			
		||||
 | 
			
		||||
            //store DPglobal
 | 
			
		||||
            this.dpg = $.fn.datetimepicker.DPGlobal; 
 | 
			
		||||
 | 
			
		||||
            //store parsed formats
 | 
			
		||||
            this.parsedFormat = this.dpg.parseFormat(this.options.format, this.options.formatType);
 | 
			
		||||
            this.parsedViewFormat = this.dpg.parseFormat(this.options.viewformat, this.options.formatType);
 | 
			
		||||
            
 | 
			
		||||
            //
 | 
			
		||||
            this.options.datetimepicker.startView = this.options.startView;
 | 
			
		||||
            this.options.datetimepicker.minView = this.options.minView;
 | 
			
		||||
            this.options.datetimepicker.maxView = this.options.maxView;
 | 
			
		||||
        },
 | 
			
		||||
        
 | 
			
		||||
        render: function () {
 | 
			
		||||
            this.$input.datetimepicker(this.options.datetimepicker);
 | 
			
		||||
            
 | 
			
		||||
            //"clear" link
 | 
			
		||||
            if(this.options.clear) {
 | 
			
		||||
                this.$clear = $('<a href="#"></a>').html(this.options.clear).click($.proxy(function(e){
 | 
			
		||||
                    e.preventDefault();
 | 
			
		||||
                    e.stopPropagation();
 | 
			
		||||
                    this.clear();
 | 
			
		||||
                }, this));
 | 
			
		||||
                
 | 
			
		||||
                this.$tpl.parent().append($('<div class="editable-clear">').append(this.$clear));  
 | 
			
		||||
            }                
 | 
			
		||||
        },
 | 
			
		||||
        
 | 
			
		||||
        value2html: function(value, element) {
 | 
			
		||||
            var text = value ? this.dpg.formatDate(value, this.parsedViewFormat, this.options.datetimepicker.language, this.options.formatType) : '';
 | 
			
		||||
            DateTime.superclass.value2html(text, element); 
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        html2value: function(html) {
 | 
			
		||||
            return html ? this.dpg.parseDate(html, this.parsedViewFormat, this.options.datetimepicker.language, this.options.formatType) : null;
 | 
			
		||||
        },   
 | 
			
		||||
        
 | 
			
		||||
        value2str: function(value) {
 | 
			
		||||
            return value ? this.dpg.formatDate(value, this.parsedFormat, this.options.datetimepicker.language, this.options.formatType) : '';
 | 
			
		||||
       }, 
 | 
			
		||||
       
 | 
			
		||||
       str2value: function(str) {
 | 
			
		||||
           return str ? this.dpg.parseDate(str, this.parsedFormat, this.options.datetimepicker.language, this.options.formatType) : null;
 | 
			
		||||
       }, 
 | 
			
		||||
       
 | 
			
		||||
       value2submit: function(value) {
 | 
			
		||||
           return this.value2str(value);
 | 
			
		||||
       },                    
 | 
			
		||||
 | 
			
		||||
       value2input: function(value) {
 | 
			
		||||
           this.$input.datetimepicker('update', value);
 | 
			
		||||
       },
 | 
			
		||||
        
 | 
			
		||||
       input2value: function() { 
 | 
			
		||||
           return this.$input.data('datetimepicker').date;
 | 
			
		||||
       },       
 | 
			
		||||
       
 | 
			
		||||
       activate: function() {
 | 
			
		||||
       },
 | 
			
		||||
       
 | 
			
		||||
       clear:  function() {
 | 
			
		||||
          this.$input.data('datetimepicker').date = null;
 | 
			
		||||
          this.$input.find('.active').removeClass('active');
 | 
			
		||||
       },
 | 
			
		||||
       
 | 
			
		||||
       autosubmit: function() {
 | 
			
		||||
           this.$input.on('mouseup', '.day', function(e){
 | 
			
		||||
               if($(e.currentTarget).is('.old') || $(e.currentTarget).is('.new')) {
 | 
			
		||||
                 return;
 | 
			
		||||
               }
 | 
			
		||||
               var $form = $(this).closest('form');
 | 
			
		||||
               setTimeout(function() {
 | 
			
		||||
                   $form.submit();
 | 
			
		||||
               }, 200);
 | 
			
		||||
           });
 | 
			
		||||
           //changedate is not suitable as it triggered when showing datetimepicker. see #149
 | 
			
		||||
           /*
 | 
			
		||||
           this.$input.on('changeDate', function(e){
 | 
			
		||||
               var $form = $(this).closest('form');
 | 
			
		||||
               setTimeout(function() {
 | 
			
		||||
                   $form.submit();
 | 
			
		||||
               }, 200);
 | 
			
		||||
           });
 | 
			
		||||
           */
 | 
			
		||||
       }
 | 
			
		||||
 | 
			
		||||
    });
 | 
			
		||||
    
 | 
			
		||||
    DateTime.defaults = $.extend({}, $.fn.editabletypes.abstractinput.defaults, {
 | 
			
		||||
        /**
 | 
			
		||||
        @property tpl 
 | 
			
		||||
        @default <div></div>
 | 
			
		||||
        **/         
 | 
			
		||||
        tpl:'<div class="editable-date well"></div>',
 | 
			
		||||
        /**
 | 
			
		||||
        @property inputclass 
 | 
			
		||||
        @default null
 | 
			
		||||
        **/         
 | 
			
		||||
        inputclass: null,
 | 
			
		||||
        /**
 | 
			
		||||
        Format used for sending value to server. Also applied when converting date from <code>data-value</code> attribute.<br>
 | 
			
		||||
        Possible tokens are: <code>d, dd, m, mm, yy, yyyy</code>  
 | 
			
		||||
        
 | 
			
		||||
        @property format 
 | 
			
		||||
        @type string
 | 
			
		||||
        @default yyyy-mm-dd hh:ii
 | 
			
		||||
        **/         
 | 
			
		||||
        format:'yyyy-mm-dd hh:ii',
 | 
			
		||||
        formatType:'standard',
 | 
			
		||||
        /**
 | 
			
		||||
        Format used for displaying date. Also applied when converting date from element's text on init.   
 | 
			
		||||
        If not specified equals to <code>format</code>
 | 
			
		||||
        
 | 
			
		||||
        @property viewformat 
 | 
			
		||||
        @type string
 | 
			
		||||
        @default null
 | 
			
		||||
        **/          
 | 
			
		||||
        viewformat: null,  
 | 
			
		||||
        /**
 | 
			
		||||
        Configuration of datetimepicker.
 | 
			
		||||
        Full list of options: https://github.com/smalot/bootstrap-datetimepicker
 | 
			
		||||
        
 | 
			
		||||
        @property datetimepicker 
 | 
			
		||||
        @type object
 | 
			
		||||
        @default {
 | 
			
		||||
            weekStart: 0,
 | 
			
		||||
            startView: 0,
 | 
			
		||||
            minView: 0,
 | 
			
		||||
            autoclose: false
 | 
			
		||||
        }
 | 
			
		||||
        **/
 | 
			
		||||
        datetimepicker:{
 | 
			
		||||
            weekStart: 0,
 | 
			
		||||
            startView: 2, // month
 | 
			
		||||
            maxView: 4, // decade
 | 
			
		||||
            minView: 0,
 | 
			
		||||
            todayHighlight: false,
 | 
			
		||||
            autoclose: false
 | 
			
		||||
        },
 | 
			
		||||
        /**
 | 
			
		||||
        Text shown as clear date button. 
 | 
			
		||||
        If <code>false</code> clear button will not be rendered.
 | 
			
		||||
        
 | 
			
		||||
        @property clear 
 | 
			
		||||
        @type boolean|string
 | 
			
		||||
        @default 'x clear'         
 | 
			
		||||
        **/
 | 
			
		||||
        clear: '× clear'
 | 
			
		||||
    });   
 | 
			
		||||
 | 
			
		||||
    $.fn.editabletypes.datetime = DateTime;
 | 
			
		||||
 | 
			
		||||
}(window.jQuery));
 | 
			
		||||
							
								
								
									
										80
									
								
								src/inputs/datetime/datetimefield.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								src/inputs/datetime/datetimefield.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,80 @@
 | 
			
		||||
/**
 | 
			
		||||
Bootstrap datetimefield input - modification for inline mode.
 | 
			
		||||
Shows normal <input type="text"> and binds popup datetimepicker.  
 | 
			
		||||
Automatically shown in inline mode.
 | 
			
		||||
 | 
			
		||||
@class datetimefield
 | 
			
		||||
@extends datetime
 | 
			
		||||
 | 
			
		||||
**/
 | 
			
		||||
(function ($) {
 | 
			
		||||
 | 
			
		||||
    var DateTimeField = function (options) {
 | 
			
		||||
        this.init('datetimefield', options, DateTimeField.defaults);
 | 
			
		||||
        this.initPicker(options, DateTimeField.defaults);
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    $.fn.editableutils.inherit(DateTimeField, $.fn.editabletypes.datetime);
 | 
			
		||||
    
 | 
			
		||||
    $.extend(DateTimeField.prototype, {
 | 
			
		||||
        render: function () {
 | 
			
		||||
            this.$input = this.$tpl.find('input');
 | 
			
		||||
            this.setClass();
 | 
			
		||||
            this.setAttr('placeholder');
 | 
			
		||||
            
 | 
			
		||||
            this.$tpl.datetimepicker(this.options.datetimepicker);
 | 
			
		||||
            
 | 
			
		||||
            //need to disable original event handlers
 | 
			
		||||
            this.$input.off('focus keydown');
 | 
			
		||||
            
 | 
			
		||||
            //update value of datepicker
 | 
			
		||||
            this.$input.keyup($.proxy(function(){
 | 
			
		||||
               this.$tpl.removeData('date');
 | 
			
		||||
               this.$tpl.datetimepicker('update');
 | 
			
		||||
            }, this));
 | 
			
		||||
            
 | 
			
		||||
        },   
 | 
			
		||||
        
 | 
			
		||||
       value2input: function(value) {
 | 
			
		||||
           this.$input.val(value ? this.dpg.formatDate(value, this.parsedViewFormat, this.options.datepicker.language) : '');
 | 
			
		||||
           this.$tpl.datepicker('update');
 | 
			
		||||
       },
 | 
			
		||||
        
 | 
			
		||||
       input2value: function() { 
 | 
			
		||||
           return this.html2value(this.$input.val());
 | 
			
		||||
       },              
 | 
			
		||||
        
 | 
			
		||||
       activate: function() {
 | 
			
		||||
           $.fn.editabletypes.text.prototype.activate.call(this);
 | 
			
		||||
       },
 | 
			
		||||
       
 | 
			
		||||
       autosubmit: function() {
 | 
			
		||||
         //reset autosubmit to empty  
 | 
			
		||||
       }
 | 
			
		||||
    });
 | 
			
		||||
    
 | 
			
		||||
    DateTimeField.defaults = $.extend({}, $.fn.editabletypes.datetime.defaults, {
 | 
			
		||||
        /**
 | 
			
		||||
        @property tpl 
 | 
			
		||||
        **/         
 | 
			
		||||
        tpl:'<div class="input-append date"><input type="text"/><span class="add-on"><i class="icon-th"></i></span></div>',
 | 
			
		||||
        /**
 | 
			
		||||
        @property inputclass 
 | 
			
		||||
        @default 'input-small'
 | 
			
		||||
        **/         
 | 
			
		||||
        inputclass: 'input-small',
 | 
			
		||||
        
 | 
			
		||||
        /* datetimepicker config */
 | 
			
		||||
        datetimepicker:{
 | 
			
		||||
            weekStart: 0,
 | 
			
		||||
            startView: 2, // month
 | 
			
		||||
            maxView: 4, // decade
 | 
			
		||||
            minView: 0,
 | 
			
		||||
            todayHighlight: false,
 | 
			
		||||
            autoclose: true
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
    
 | 
			
		||||
    $.fn.editabletypes.datetimefield = DateTimeField;
 | 
			
		||||
 | 
			
		||||
}(window.jQuery));
 | 
			
		||||
@@ -104,6 +104,15 @@ define(function () {
 | 
			
		||||
                        loadCss(require.toUrl("./bootstrap-datepicker/css/datepicker.css")); 
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                'inputs/datetime/datetime': {
 | 
			
		||||
                    deps: ['require', 
 | 
			
		||||
                    'bootstrap/js/bootstrap',
 | 
			
		||||
                    'inputs/abstract', 
 | 
			
		||||
                    'inputs/datetime/bootstrap-datetimepicker/js/bootstrap-datetimepicker'],
 | 
			
		||||
                    init: function(require) {
 | 
			
		||||
                        loadCss(require.toUrl("./bootstrap-datetimepicker/css/datetimepicker.css")); 
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
 | 
			
		||||
                //wysihtml5
 | 
			
		||||
//                'inputs-ext/wysihtml5/bootstrap-wysihtml5-0.0.2/bootstrap-wysihtml5-0.0.2.min': ['inputs-ext/wysihtml5/bootstrap-wysihtml5-0.0.2/wysihtml5-0.3.0.min'],
 | 
			
		||||
@@ -133,6 +142,9 @@ define(function () {
 | 
			
		||||
                //datefield
 | 
			
		||||
                'inputs/date/datefield': ['inputs/date/date'],
 | 
			
		||||
 | 
			
		||||
                //datetimefield
 | 
			
		||||
                'inputs/datetime/datetimefield': ['inputs/datetime/datetime'],
 | 
			
		||||
 | 
			
		||||
                /* ------------------------------
 | 
			
		||||
                   jqueryui
 | 
			
		||||
                   ------------------------------ */ 
 | 
			
		||||
@@ -195,6 +207,7 @@ define(function () {
 | 
			
		||||
            if(f === 'bootstrap') { 
 | 
			
		||||
                //bootstrap
 | 
			
		||||
                shim['editable-form/editable-form'].deps.push('inputs/date/datefield');
 | 
			
		||||
                shim['editable-form/editable-form'].deps.push('inputs/datetime/datetimefield');
 | 
			
		||||
                shim['editable-form/editable-form'].deps.push('inputs-ext/wysihtml5/wysihtml5');
 | 
			
		||||
                shim['editable-form/editable-form'].deps.push('inputs/typeahead');
 | 
			
		||||
                shim['element/editable-element'].deps.push('editable-form/editable-form-bootstrap');
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user