* packages.config:
* App.master: * datepair.js: * Book.aspx: * datepair.min.js: * LocalizedText.resx: * jquery.datepair.js: * jquery-ui-1.11.4.js: * jquery.timepicker.js: * BookQuery.cs: * jquery-1.11.3.min.js: * LocalizedText.fr.resx: * jquery.datepair.min.js: * WebCatalogExtensions.cs: * GoogleController.cs: * LocalizedText.Designer.cs: * jquery.timepicker.min.js: * jquery.timepicker.css: * Text.cs: * Euro.cs: * Unit.cs: * Link.cs: * Note.cs: * LocalizedText.fr.Designer.cs: * Brand.cs: * Label.cs: * Scalar.cs: * FrontOfficeController.cs: * Period.cs: * Option.cs: * Service.cs: * Catalog.cs: * Product.cs: * CheckBox.cs: * Currency.cs: * SaleForm.cs: * TextInput.cs: * FormInput.cs: * FilesInput.cs: * SelectItem.cs: * FormElement.cs: * SelectInput.cs: * RadioButton.cs: * StockStatus.cs: * ProductImage.cs: * CatalogHelper.cs: * CatalogManager.cs: * ProductCategory.cs: * PhysicalProduct.cs: * ui-icons_ffffff_256x240.png: * ui-icons_cccccc_256x240.png: * CatalogProvider.cs: * ui-icons_a83300_256x240.png: * ui-icons_222222_256x240.png: * ui-icons_4b8e0b_256x240.png: * ui-bg_glass_20_555555_1x400.png: * ui-bg_glass_40_0078a3_1x400.png: * ui-bg_glass_40_ffc73d_1x400.png: * ui-icons_222222_256x240.png: * ui-icons_a83300_256x240.png: * ui-icons_cccccc_256x240.png: * ui-icons_4b8e0b_256x240.png: * ui-icons_ffffff_256x240.png: * ui-bg_glass_40_0078a3_1x400.png: * ui-bg_glass_20_555555_1x400.png: * ui-bg_inset-soft_30_f58400_1x100.png: * ui-bg_inset-soft_25_000000_1x100.png: * ui-bg_glass_40_ffc73d_1x400.png: * ui-bg_gloss-wave_25_333333_500x100.png: * ui-bg_highlight-soft_80_eeeeee_1x100.png: * ui-bg_inset-soft_30_f58400_1x100.png: * ui-bg_inset-soft_25_000000_1x100.png: * ui-bg_gloss-wave_25_333333_500x100.png: * ui-bg_highlight-soft_80_eeeeee_1x100.png: * CatalogProviderConfigurationElement.cs: * CatalogProvidersConfigurationSection.cs: * CatalogProvidersConfigurationCollection.cs: Date pairing at booking, Fixes the client side ui, concerning the dates and times * MyClass.cs: * WorkFlowManager.cs: * IContentProvider.cs: * FrontOfficeController.cs: * XmlCatalog.cs: * NpgsqlContentProvider.cs: * Price.cs: * XmlCatalogProvider.cs: * PriceOnItemCount.cs: refactoring: a dedicated name space for the catalog * ChooseADate.aspx: WIP * Web.csproj: date pairing : includes the javascript modulesvnext
Before Width: | Height: | Size: 312 B After Width: | Height: | Size: 260 B |
Before Width: | Height: | Size: 394 B After Width: | Height: | Size: 342 B |
Before Width: | Height: | Size: 368 B After Width: | Height: | Size: 316 B |
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 332 B After Width: | Height: | Size: 276 B |
Before Width: | Height: | Size: 327 B After Width: | Height: | Size: 275 B |
Before Width: | Height: | Size: 392 B After Width: | Height: | Size: 340 B |
Before Width: | Height: | Size: 6.7 KiB After Width: | Height: | Size: 6.8 KiB |
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.4 KiB |
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.4 KiB |
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 6.8 KiB |
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 312 B After Width: | Height: | Size: 260 B |
Before Width: | Height: | Size: 394 B After Width: | Height: | Size: 342 B |
Before Width: | Height: | Size: 368 B After Width: | Height: | Size: 316 B |
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 332 B After Width: | Height: | Size: 276 B |
Before Width: | Height: | Size: 327 B After Width: | Height: | Size: 275 B |
Before Width: | Height: | Size: 392 B After Width: | Height: | Size: 340 B |
Before Width: | Height: | Size: 6.7 KiB After Width: | Height: | Size: 6.8 KiB |
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.4 KiB |
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.4 KiB |
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 6.8 KiB |
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 6.2 KiB |
@ -0,0 +1,343 @@
|
||||
/*!
|
||||
* datepair.js v0.4.11 - A javascript plugin for intelligently selecting date and time ranges inspired by Google Calendar.
|
||||
* Copyright (c) 2015 Jon Thornton - http://jonthornton.github.com/Datepair.js
|
||||
* License: MIT
|
||||
*/
|
||||
|
||||
(function(window, document) {
|
||||
|
||||
'use strict';
|
||||
|
||||
var _ONE_DAY = 86400000;
|
||||
var jq = window.Zepto || window.jQuery;
|
||||
|
||||
function simpleExtend(obj1, obj2) {
|
||||
var out = obj2 || {};
|
||||
|
||||
for (var i in obj1) {
|
||||
if (!(i in out)) {
|
||||
out[i] = obj1[i];
|
||||
}
|
||||
}
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
// IE's custom event support is totally borked.
|
||||
// Use jQuery if possible
|
||||
function triggerSimpleCustomEvent(el, eventName) {
|
||||
if (jq) {
|
||||
jq(el).trigger(eventName);
|
||||
} else {
|
||||
var event = document.createEvent('CustomEvent');
|
||||
event.initCustomEvent(eventName, true, true, {});
|
||||
el.dispatchEvent(event);
|
||||
}
|
||||
}
|
||||
|
||||
// el.classList not supported by < IE10
|
||||
// use jQuery if available
|
||||
function hasClass(el, className) {
|
||||
if (jq) {
|
||||
return jq(el).hasClass(className);
|
||||
} else {
|
||||
return el.classList.contains(className);
|
||||
}
|
||||
}
|
||||
|
||||
function Datepair(container, options) {
|
||||
this.dateDelta = null;
|
||||
this.timeDelta = null;
|
||||
this._defaults = {
|
||||
startClass: 'start',
|
||||
endClass: 'end',
|
||||
timeClass: 'time',
|
||||
dateClass: 'date',
|
||||
defaultDateDelta: 0,
|
||||
defaultTimeDelta: 3600000,
|
||||
anchor: 'start',
|
||||
|
||||
// defaults for jquery-timepicker; override when using other input widgets
|
||||
parseTime: function(input){
|
||||
return jq(input).timepicker('getTime');
|
||||
},
|
||||
updateTime: function(input, dateObj){
|
||||
jq(input).timepicker('setTime', dateObj);
|
||||
},
|
||||
setMinTime: function(input, dateObj){
|
||||
jq(input).timepicker('option', 'minTime', dateObj);
|
||||
},
|
||||
|
||||
// defaults for bootstrap datepicker; override when using other input widgets
|
||||
parseDate: function(input){
|
||||
return input.value && jq(input).datepicker('getDate');
|
||||
},
|
||||
updateDate: function(input, dateObj){
|
||||
jq(input).datepicker('update', dateObj);
|
||||
}
|
||||
};
|
||||
|
||||
this.container = container;
|
||||
this.settings = simpleExtend(this._defaults, options);
|
||||
|
||||
this.startDateInput = this.container.querySelector('.'+this.settings.startClass+'.'+this.settings.dateClass);
|
||||
this.endDateInput = this.container.querySelector('.'+this.settings.endClass+'.'+this.settings.dateClass);
|
||||
this.startTimeInput = this.container.querySelector('.'+this.settings.startClass+'.'+this.settings.timeClass);
|
||||
this.endTimeInput = this.container.querySelector('.'+this.settings.endClass+'.'+this.settings.timeClass);
|
||||
|
||||
// initialize date and time deltas
|
||||
this.refresh();
|
||||
this._updateEndMintime();
|
||||
|
||||
// init starts here
|
||||
this._bindChangeHandler();
|
||||
}
|
||||
|
||||
Datepair.prototype = {
|
||||
constructor: Datepair,
|
||||
|
||||
option: function(key, value)
|
||||
{
|
||||
if (typeof key == 'object') {
|
||||
this.settings = simpleExtend(this.settings, key);
|
||||
|
||||
} else if (typeof key == 'string' && typeof value != 'undefined') {
|
||||
this.settings[key] = value;
|
||||
|
||||
} else if (typeof key == 'string') {
|
||||
return this.settings[key];
|
||||
}
|
||||
|
||||
this._updateEndMintime();
|
||||
},
|
||||
|
||||
getTimeDiff: function()
|
||||
{
|
||||
// due to the fact that times can wrap around, timeDiff for any
|
||||
// time-only pair will always be >= 0
|
||||
var delta = this.dateDelta + this.timeDelta;
|
||||
if (delta < 0 && (!this.startDateInput || !this.endDateInput) ) {
|
||||
delta += _ONE_DAY;
|
||||
}
|
||||
|
||||
return delta;
|
||||
},
|
||||
|
||||
refresh: function()
|
||||
{
|
||||
if (this.startDateInput && this.startDateInput.value && this.endDateInput && this.endDateInput.value) {
|
||||
var startDate = this.settings.parseDate(this.startDateInput);
|
||||
var endDate = this.settings.parseDate(this.endDateInput);
|
||||
if (startDate && endDate) {
|
||||
this.dateDelta = endDate.getTime() - startDate.getTime();
|
||||
}
|
||||
}
|
||||
if (this.startTimeInput && this.startTimeInput.value && this.endTimeInput && this.endTimeInput.value) {
|
||||
var startTime = this.settings.parseTime(this.startTimeInput);
|
||||
var endTime = this.settings.parseTime(this.endTimeInput);
|
||||
if (startTime && endTime) {
|
||||
this.timeDelta = endTime.getTime() - startTime.getTime();
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
remove: function()
|
||||
{
|
||||
this._unbindChangeHandler();
|
||||
},
|
||||
|
||||
_bindChangeHandler: function(){
|
||||
// addEventListener doesn't work with synthetic "change" events
|
||||
// fired by jQuery's trigger() functioin. If jQuery is present,
|
||||
// use that for event binding
|
||||
if (jq) {
|
||||
jq(this.container).on('change.datepair', jq.proxy(this.handleEvent, this));
|
||||
} else {
|
||||
this.container.addEventListener('change', this, false);
|
||||
}
|
||||
},
|
||||
|
||||
_unbindChangeHandler: function(){
|
||||
if (jq) {
|
||||
jq(this.container).off('change.datepair');
|
||||
} else {
|
||||
this.container.removeEventListener('change', this, false);
|
||||
}
|
||||
},
|
||||
|
||||
// This function will be called when passing 'this' to addEventListener
|
||||
handleEvent: function(e){
|
||||
// temporarily unbind the change handler to prevent triggering this
|
||||
// if we update other inputs
|
||||
this._unbindChangeHandler();
|
||||
|
||||
if (hasClass(e.target, this.settings.dateClass)) {
|
||||
if (e.target.value != '') {
|
||||
this._dateChanged(e.target);
|
||||
this._timeChanged(e.target);
|
||||
} else {
|
||||
this.dateDelta = null;
|
||||
}
|
||||
|
||||
} else if (hasClass(e.target, this.settings.timeClass)) {
|
||||
if (e.target.value != '') {
|
||||
this._timeChanged(e.target);
|
||||
} else {
|
||||
this.timeDelta = null;
|
||||
}
|
||||
}
|
||||
|
||||
this._validateRanges();
|
||||
this._updateEndMintime();
|
||||
this._bindChangeHandler();
|
||||
},
|
||||
|
||||
_dateChanged: function(target){
|
||||
if (!this.startDateInput || !this.endDateInput) {
|
||||
return;
|
||||
}
|
||||
|
||||
var startDate = this.settings.parseDate(this.startDateInput);
|
||||
var endDate = this.settings.parseDate(this.endDateInput);
|
||||
|
||||
if (!startDate || !endDate) {
|
||||
if (this.settings.defaultDateDelta !== null) {
|
||||
if (startDate) {
|
||||
var newEnd = new Date(startDate.getTime() + this.settings.defaultDateDelta * _ONE_DAY);
|
||||
this.settings.updateDate(this.endDateInput, newEnd);
|
||||
|
||||
} else if (endDate) {
|
||||
var newStart = new Date(endDate.getTime() - this.settings.defaultDateDelta * _ONE_DAY);
|
||||
this.settings.updateDate(this.startDateInput, newStart);
|
||||
}
|
||||
|
||||
this.dateDelta = this.settings.defaultDateDelta * _ONE_DAY;
|
||||
} else {
|
||||
this.dateDelta = null;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.settings.anchor == 'start' && hasClass(target, this.settings.startClass)) {
|
||||
var newDate = new Date(startDate.getTime() + this.dateDelta);
|
||||
this.settings.updateDate(this.endDateInput, newDate);
|
||||
} else if (this.settings.anchor == 'end' && hasClass(target, this.settings.endClass)) {
|
||||
var newDate = new Date(endDate.getTime() - this.dateDelta);
|
||||
this.settings.updateDate(this.startDateInput, newDate);
|
||||
} else {
|
||||
if (endDate < startDate) {
|
||||
var otherInput = hasClass(target, this.settings.startClass) ? this.endDateInput : this.startDateInput;
|
||||
var selectedDate = this.settings.parseDate(target);
|
||||
this.dateDelta = 0;
|
||||
this.settings.updateDate(otherInput, selectedDate);
|
||||
} else {
|
||||
this.dateDelta = endDate.getTime() - startDate.getTime();
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
_timeChanged: function(target){
|
||||
if (!this.startTimeInput || !this.endTimeInput) {
|
||||
return;
|
||||
}
|
||||
|
||||
var startTime = this.settings.parseTime(this.startTimeInput);
|
||||
var endTime = this.settings.parseTime(this.endTimeInput);
|
||||
|
||||
if (!startTime || !endTime) {
|
||||
if (this.settings.defaultTimeDelta !== null) {
|
||||
if (startTime) {
|
||||
var newEnd = new Date(startTime.getTime() + this.settings.defaultTimeDelta);
|
||||
this.settings.updateTime(this.endTimeInput, newEnd);
|
||||
} else if (endTime) {
|
||||
var newStart = new Date(endTime.getTime() - this.settings.defaultTimeDelta);
|
||||
this.settings.updateTime(this.startTimeInput, newStart);
|
||||
}
|
||||
|
||||
this.timeDelta = this.settings.defaultTimeDelta;
|
||||
} else {
|
||||
this.timeDelta = null;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.settings.anchor == 'start' && hasClass(target, this.settings.startClass)) {
|
||||
var newTime = new Date(startTime.getTime() + this.timeDelta);
|
||||
this.settings.updateTime(this.endTimeInput, newTime);
|
||||
endTime = this.settings.parseTime(this.endTimeInput);
|
||||
} else if (this.settings.anchor == 'end' && hasClass(target, this.settings.endClass)) {
|
||||
var newTime = new Date(endTime.getTime() - this.timeDelta);
|
||||
this.settings.updateTime(this.startTimeInput, newTime);
|
||||
startTime = this.settings.parseTime(this.startTimeInput);
|
||||
} else {
|
||||
var startDate = this.settings.parseDate(this.startDateInput);
|
||||
var endDate = this.settings.parseDate(this.endDateInput);
|
||||
if ((+startDate == +endDate) && (endTime < startTime)) {
|
||||
var thisInput = hasClass(target, this.settings.endClass) ? this.endTimeInput : this.startTimeInput;
|
||||
var otherInput = hasClass(target, this.settings.startClass) ? this.endTimeInput : this.startTimeInput;
|
||||
var selectedTime = this.settings.parseTime(thisInput);
|
||||
this.timeDelta = 0;
|
||||
this.settings.updateTime(otherInput, selectedTime);
|
||||
} else {
|
||||
this.timeDelta = endTime.getTime() - startTime.getTime();
|
||||
}
|
||||
}
|
||||
|
||||
var newDelta = endTime.getTime() - startTime.getTime();
|
||||
var offset = (endTime < startTime) ? _ONE_DAY : -1 * _ONE_DAY;
|
||||
|
||||
if (this.dateDelta !== null
|
||||
&& this.dateDelta + this.timeDelta <= _ONE_DAY
|
||||
&& this.dateDelta + newDelta != 0
|
||||
&& (offset > 0 || this.dateDelta != 0)
|
||||
&& ((newDelta >= 0 && this.timeDelta < 0) || (newDelta < 0 && this.timeDelta >= 0))) {
|
||||
|
||||
if (this.settings.anchor == 'start') {
|
||||
var endDate = this.settings.parseDate(this.endDateInput);
|
||||
this.settings.updateDate(this.endDateInput, new Date(endDate.getTime() + offset));
|
||||
this._dateChanged(this.endDateInput);
|
||||
} else if (this.settings.anchor == 'end') {
|
||||
var startDate = this.settings.parseDate(this.startDateInput);
|
||||
this.settings.updateDate(this.startDateInput, new Date(startDate.getTime() - offset));
|
||||
this._dateChanged(this.startDateInput);
|
||||
}
|
||||
}
|
||||
this.timeDelta = newDelta;
|
||||
},
|
||||
|
||||
_updateEndMintime: function(){
|
||||
if (typeof this.settings.setMinTime != 'function') return;
|
||||
|
||||
var baseTime = null;
|
||||
if (this.settings.anchor == 'start' && (!this.dateDelta || this.dateDelta < _ONE_DAY || (this.timeDelta && this.dateDelta + this.timeDelta < _ONE_DAY))) {
|
||||
baseTime = this.settings.parseTime(this.startTimeInput);
|
||||
}
|
||||
|
||||
this.settings.setMinTime(this.endTimeInput, baseTime);
|
||||
},
|
||||
|
||||
_validateRanges: function(){
|
||||
if (this.startTimeInput && this.endTimeInput && this.timeDelta === null) {
|
||||
triggerSimpleCustomEvent(this.container, 'rangeIncomplete');
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.startDateInput && this.endDateInput && this.dateDelta === null) {
|
||||
triggerSimpleCustomEvent(this.container, 'rangeIncomplete');
|
||||
return;
|
||||
}
|
||||
|
||||
// due to the fact that times can wrap around, any time-only pair will be considered valid
|
||||
if (!this.startDateInput || !this.endDateInput || this.dateDelta + this.timeDelta >= 0) {
|
||||
triggerSimpleCustomEvent(this.container, 'rangeSelected');
|
||||
} else {
|
||||
triggerSimpleCustomEvent(this.container, 'rangeError');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
window.Datepair = Datepair;
|
||||
|
||||
}(window, document));
|
@ -0,0 +1,46 @@
|
||||
/*!
|
||||
* datepair.js v0.4.11 - A javascript plugin for intelligently selecting date and time ranges inspired by Google Calendar.
|
||||
* Copyright (c) 2015 Jon Thornton - http://jonthornton.github.com/Datepair.js
|
||||
* License: MIT
|
||||
*/
|
||||
|
||||
(function($) {
|
||||
|
||||
if(!$) {
|
||||
return;
|
||||
}
|
||||
|
||||
////////////
|
||||
// Plugin //
|
||||
////////////
|
||||
|
||||
$.fn.datepair = function(option) {
|
||||
var out;
|
||||
this.each(function() {
|
||||
var $this = $(this);
|
||||
var data = $this.data('datepair');
|
||||
var options = typeof option === 'object' && option;
|
||||
|
||||
if (!data) {
|
||||
data = new Datepair(this, options);
|
||||
$this.data('datepair', data);
|
||||
}
|
||||
|
||||
if (typeof option === 'string') {
|
||||
out = data[option]();
|
||||
}
|
||||
});
|
||||
|
||||
return out || this;
|
||||
};
|
||||
|
||||
//////////////
|
||||
// Data API //
|
||||
//////////////
|
||||
|
||||
$('[data-datepair]').each(function() {
|
||||
var $this = $(this);
|
||||
$this.datepair($this.data());
|
||||
});
|
||||
|
||||
}(window.Zepto || window.jQuery));
|
@ -0,0 +1,73 @@
|
||||
<%@ Page Title="Booking" Language="C#" Inherits="System.Web.Mvc.ViewPage<BookQuery>" MasterPageFile="~/Models/App.master" %>
|
||||
<asp:Content ContentPlaceHolderID="head" ID="headContent" runat="server">
|
||||
<link rel='stylesheet' href='/Scripts/fullcalendar/fullcalendar.css' />
|
||||
<script type="text/javascript" src="/Scripts/jquery.mousewheel.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/App_Themes/jquery.timepicker.css" />
|
||||
<script type="text/javascript" src="/Scripts/globalize/globalize.js"></script>
|
||||
<script type="text/javascript" src="/Scripts/globalize/cultures/globalize.culture.fr.js"></script>
|
||||
<script type="text/javascript" src="/Scripts/datepicker-fr.js"></script>
|
||||
<script type="text/javascript" src="/Scripts/datepicker-en-GB.js"></script>
|
||||
<script type="text/javascript" src="/Scripts/datepair.js"></script>
|
||||
<script type="text/javascript" src="/Scripts/jquery.timepicker.min.js"></script>
|
||||
<script type="text/javascript" src="/Scripts/jquery.datepair.min.js"></script>
|
||||
|
||||
</asp:Content>
|
||||
|
||||
<asp:Content ContentPlaceHolderID="MainContent" ID="MainContentContent" runat="server">
|
||||
|
||||
<% using ( Html.BeginForm("Book","Google") ) { %>
|
||||
<div id="book" ><fieldset>
|
||||
<legend>Date d'intervention</legend>
|
||||
Intervention souhaitée entre le
|
||||
<input type="text" id="StartDate" class="start date" value="<%= DateTime.Now.ToString("yyyy/MM/dd")%>">
|
||||
<%= Html.ValidationMessageFor(model=>model.StartDate) %>
|
||||
et le
|
||||
<input type="text" id="EndDate" class="end date" value="<%= DateTime.Now.AddDays(2).ToString("yyyy/MM/dd")%>">
|
||||
<%= Html.ValidationMessageFor(model=>model.EndDate) %>
|
||||
</fieldset>
|
||||
<fieldset >
|
||||
<legend>Heure et durée d'intervention souhaitée</legend>
|
||||
<%= Html.LabelFor(model=>model.StartHour) %>
|
||||
<input type="text" id="StartHour" class="start time" value="<%= DateTime.Now.ToString("H:mm")%>">
|
||||
<%= Html.ValidationMessageFor(model=>model.StartHour) %>
|
||||
|
||||
<%= Html.LabelFor(model=>model.EndHour) %>
|
||||
<input type="text" id="EndHour" class="end time" value="<%= DateTime.Now.AddMinutes(30).ToString("H:mm")%>">
|
||||
<%= Html.ValidationMessageFor(model=>model.EndHour) %>
|
||||
</fieldset>
|
||||
</div>
|
||||
<fieldset>
|
||||
<legend>Intervenant</legend>
|
||||
<%= Html.LabelFor(model=>model.Role) %>:
|
||||
<%= Html.TextBoxFor(model=>model.Role) %>
|
||||
<%= Html.ValidationMessageFor(model=>model.Role) %>
|
||||
<br>
|
||||
<%= Html.LabelFor(model=>model.Person) %>:
|
||||
<%= Html.TextBoxFor(model=>model.Person) %>
|
||||
<%= Html.ValidationMessageFor(model=>model.Person) %>
|
||||
</fieldset>
|
||||
<script>
|
||||
$(function() {
|
||||
var tpconfig = {
|
||||
'timeFormat': 'H:i',
|
||||
'showDuration': true,
|
||||
'disableTimeRanges': [
|
||||
['17:01pm', '24:01pm'],
|
||||
['0am', '9am']
|
||||
]};
|
||||
// $.datepicker.setDefaults($.datepicker.regional[ "fr" ] );
|
||||
var dpconfig = {
|
||||
'format': 'yy/mm/dd',
|
||||
'autoclose': true } ;
|
||||
|
||||
$('#book .time').timepicker(tpconfig);
|
||||
$('#book .date').datepicker(dpconfig);
|
||||
$('#book').datepair();
|
||||
});
|
||||
</script>
|
||||
|
||||
<input type="submit">
|
||||
<% } %>
|
||||
<pre><%= Html.Encode(ViewData["json"]) %></pre>
|
||||
|
||||
</asp:Content>
|
@ -1,20 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="cldrjs" version="0.4.1" targetFramework="net45" />
|
||||
<package id="jQuery" version="2.1.4" targetFramework="net45" />
|
||||
<package id="JQuery.GoogleMaps" version="2.2.4" targetFramework="net45" />
|
||||
<package id="jQuery.UI.Combined" version="1.11.4" targetFramework="net451" />
|
||||
<package id="jquery-globalize" version="1.0.0" targetFramework="net45" />
|
||||
<package id="log4net" version="2.0.3" targetFramework="net45" />
|
||||
<package id="Newtonsoft.Json" version="7.0.1" targetFramework="net45" />
|
||||
<package id="Npgsql" version="3.0.3" targetFramework="net451" />
|
||||
<package id="PayPalButtonManagerSDK" version="2.9.109" targetFramework="net45" />
|
||||
<package id="PayPalCoreSDK" version="1.6.3" targetFramework="net451" />
|
||||
<package id="Prettify" version="3.3.04.2013" targetFramework="net451" />
|
||||
<package id="xunit" version="2.1.0" targetFramework="net451" />
|
||||
<package id="xunit.abstractions" version="2.0.0" targetFramework="net45" />
|
||||
<package id="xunit.assert" version="2.1.0" targetFramework="net451" />
|
||||
<package id="xunit.core" version="2.1.0" targetFramework="net451" />
|
||||
<package id="xunit.extensibility.core" version="2.1.0" targetFramework="net451" />
|
||||
<package id="xunit.extensibility.execution" version="2.1.0" targetFramework="net451" />
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="cldrjs" version="0.4.1" targetFramework="net45" />
|
||||
<package id="jQuery" version="2.1.4" targetFramework="net45" />
|
||||
<package id="JQuery.GoogleMaps" version="2.2.4" targetFramework="net45" />
|
||||
<package id="jQuery.UI.Combined" version="1.11.4" targetFramework="net451" />
|
||||
<package id="jquery-globalize" version="1.0.0" targetFramework="net45" />
|
||||
<package id="log4net" version="2.0.3" targetFramework="net45" />
|
||||
<package id="Newtonsoft.Json" version="7.0.1" targetFramework="net45" />
|
||||
<package id="Npgsql" version="3.0.3" targetFramework="net451" />
|
||||
<package id="PayPalButtonManagerSDK" version="2.9.109" targetFramework="net45" />
|
||||
<package id="PayPalCoreSDK" version="1.6.3" targetFramework="net451" />
|
||||
<package id="Prettify" version="3.3.04.2013" targetFramework="net451" />
|
||||
<package id="xunit" version="2.1.0" targetFramework="net451" />
|
||||
<package id="xunit.abstractions" version="2.0.0" targetFramework="net45" />
|
||||
<package id="xunit.assert" version="2.1.0" targetFramework="net451" />
|
||||
<package id="xunit.core" version="2.1.0" targetFramework="net451" />
|
||||
<package id="xunit.extensibility.core" version="2.1.0" targetFramework="net451" />
|
||||
<package id="xunit.extensibility.execution" version="2.1.0" targetFramework="net451" />
|
||||
</packages>
|